KR100303673B1 - 저장인스트럭션의결과전달방법및이를구현한프로세서 - Google Patents
저장인스트럭션의결과전달방법및이를구현한프로세서 Download PDFInfo
- Publication number
- KR100303673B1 KR100303673B1 KR1019980003886A KR19980003886A KR100303673B1 KR 100303673 B1 KR100303673 B1 KR 100303673B1 KR 1019980003886 A KR1019980003886 A KR 1019980003886A KR 19980003886 A KR19980003886 A KR 19980003886A KR 100303673 B1 KR100303673 B1 KR 100303673B1
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- load
- address
- store
- storage
- Prior art date
Links
- 238000011010 flushing procedure Methods 0.000 title 1
- 238000000034 method Methods 0.000 claims description 32
- 238000012545 processing Methods 0.000 claims description 17
- 230000006870 function Effects 0.000 claims description 3
- 238000012546 transfer Methods 0.000 description 21
- 230000036316 preload Effects 0.000 description 16
- 239000000872 buffer Substances 0.000 description 10
- 238000005338 heat storage Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 7
- 101150094459 FPR4 gene Proteins 0.000 description 5
- 101100334862 Rhizopus delemar (strain RA 99-880 / ATCC MYA-4621 / FGSC 9543 / NRRL 43880) FKBP4 gene Proteins 0.000 description 5
- 230000008901 benefit Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 5
- 238000006243 chemical reaction Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 101100390790 Rhizopus delemar (strain RA 99-880 / ATCC MYA-4621 / FGSC 9543 / NRRL 43880) FKBP5 gene Proteins 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 102100021145 fMet-Leu-Phe receptor Human genes 0.000 description 2
- 101710108492 fMet-Leu-Phe receptor Proteins 0.000 description 2
- 238000005457 optimization Methods 0.000 description 2
- 102100033045 G-protein coupled receptor 4 Human genes 0.000 description 1
- 101000871138 Homo sapiens G-protein coupled receptor 4 Proteins 0.000 description 1
- 101000818546 Homo sapiens N-formyl peptide receptor 2 Proteins 0.000 description 1
- 101001059802 Homo sapiens N-formyl peptide receptor 3 Proteins 0.000 description 1
- 101000603407 Homo sapiens Neuropeptides B/W receptor type 1 Proteins 0.000 description 1
- 102100021126 N-formyl peptide receptor 2 Human genes 0.000 description 1
- 102100028130 N-formyl peptide receptor 3 Human genes 0.000 description 1
- 102100038847 Neuropeptides B/W receptor type 1 Human genes 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 239000011435 rock Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
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
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- 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/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- 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/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30079—Pipeline control instructions, e.g. multicycle NOP
-
- 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
-
- 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/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
- G06F9/384—Register renaming
-
- 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
-
- 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/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
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)
- Memory System (AREA)
- Electrical Discharge Machining, Electrochemical Machining, And Combined Machining (AREA)
- Sink And Installation For Waste Water (AREA)
- Medicines Containing Material From Animals Or Micro-Organisms (AREA)
- Coloring Foods And Improving Nutritive Qualities (AREA)
- Peptides Or Proteins (AREA)
- Communication Control (AREA)
Abstract
본 발명은 적재 및 저장 인스트럭션에 대한 비순서적인 송출(dispatching) 및 실행을 구현하는 슈퍼스칼라 프로세서에 관한 것으로서, 저장 인스트럭션이 이미 변환되었고, 적재 인스트럭션의 적재 주소 범위가 그 저장 인스트럭션의 주소 범위 내에 포함되며, 그 저장 인스트럭션과 연관된 데이터가 사용될 수 있는 때에는, 그 저장 인스트럭션과 연관된 데이터는 적재 인스트럭션에 전달되어(forwarded) 그 적재 인스트럭션이 정지 또는 제거됨이 없이 계속 실행할 수 있게 된다.
Description
본 발명은 일반적으로 데이터 처리 시스템에 관한 것으로, 특히 프로세서 내에서 적재 및 저장 인스트럭션의 비순서적인 실행에 관한 것이다.
보다 높은 성능 수준을 얻기 위하여, 프로세서 및 시스템 설계자는 프로세서 및 시스템 클럭 레이트를 증가시켜 클락 주기 당 작업량을 증가시키려고 하고 있다. 다른 영향력이 있는 것 중에서, 보다 높은 클럭 레이트에 대한 열망이 분리된(de-coupled) 설계 및 유닛 사이에 최소 동기성을 가진 반 독립적인(semi-autonomous) 유닛 쪽으로 향하게 하고 있다. 추가적인 기능 유닛을 사용하고 사용가능한 인스트럭션 수준 병렬성(instruction-level parallelism)을 충분히 이용하면 클락 주기 당 작업수가 종종 증가하게 된다.
컴파일러가 프로그램에 내재한 인스트럭션 수준 병렬성을 밝히려고 할 수 있지만, 경로 길이를 최소화하려는 시도와 한정된 수의 아키텍티드 레지스터의 결합이 종종 인위적으로 컴파일러로 하여금 프로그램에 내재된 병렬성을 충분히 밝힐 수 없게 한다. 레지스터 자원이 보다 최적의 인스트럭션 순서 제어를 방해하는 많은 상황(아래 인스트럭션 시퀀스 등)이 있다.
FM FPR5 <- FPR4,FPR4
FMA FPR2 <- FPR3,FPR4,FPR5
FMA FPR4 <- FPR6,FPR7,FPR8
여기서는, 대부분의 프로세서는 여러 사이클의 부동 소수점 파이프라인을 가진다고 하면, 제 2 명령어는 제 1 인스트럭션이 실행을 시작한 후 여러 사이클까지 실행할 수 없다. 이 경우, 제 3 인스트럭션의 소스 레지스터가 사용될 수 있어 제3 인스트럭션이 제 2 인스트럭션 전에 실행될 준비가 되어 있음을 예상할 수 있지만, 컴파일러는 서로 다른 레지스터 할당을 선택하지 않고서는 상기 두 인스트럭션을 서로 바꿀 수 없다(왜냐하면 제 3 인스트럭션이 제 2 인스트럭션에 의해 사용되는 FPR4 값을 지금 덮어쓰기 때문이다). 종종, 이러한 인스트럭션 쌍에 대하여 보다 최적의 레지스터 할당을 선택하는 것이 프로그램 내의 다른 인스트럭션 쌍에 대한 최적의 레지스터 할당과 충돌할 것이다.
캐쉬 실패(cache misses)의 동적인 행동은 비순서적인 실행이 순서적인 머신 내에서 가능한 것보다 큰 인스트럭션 수준 병렬성을 이용할 수 있는 또 다른 예제를 제공한다.
Loop:
Load GPR4,8(GPR5)
Add GPR6,GPR6,GPR4
Load GPR7,8(GPR3)
Add GPR8,GPR8,GPR7
Load GPR9,0(GPR6)
Load GPR2,0(GPR8)
...
branch conditional Loop
이 예제에서는, 몇몇 반복 시 제 1 적재에 대하여 캐쉬 실패가 있을 것이다. 다른 반복시 제 2 적재에 대하여 캐쉬 실패가 있을 것이다. 논리적으로는 서로 독립적인 계산 스트림이 존재하지만, 순서적인(in-order) 프로세서에서는, 처리가 캐쉬 실패 후 즉시 정지할 것이고 캐쉬 실패가 해결될 때까지 재개하지 않을 것이다.
이 예제는 또한 비순서적인 실행의 종속적인(cascading) 효과를 보여주고 있다. 즉, 정지된 인스트럭션(이 예제에서는 캐쉬 실패를 가진 적재에 의존하는 인스트럭션임)을 넘어서 진행할 수 있게 함으로써 후속 캐쉬 실패가 검출되어 연관된 실패 벌칙(penalty)이 최초의 실패와 (적어도 부분적으로)중첩될 수 있다. 다수의 실패에 대한 캐쉬 실패 벌칙을 중첩시킬 수 있는 가능성은 적재/저장 인스트럭션의 비순서적인 실행을 뒷받침하는 능력과 더불어 증가하고 있다.
클럭 레이트가 점점 더 높아짐에 따라, 유용한 계산 및 다른 캐쉬 실패로 그 캐쉬 실패 벌칙을 중첩시킬 수 있다는 것이 중요성을 더해 갈 것이다.
현재의 많은 프로세서는 적재/저장 유닛을 제외한 모든 유닛에 대하여 비순서적인 실행을 허용함으로써 많은 사용가능한 인스트럭션 수준 병렬성을 끌어내고 있다. 비 적재/저장 유닛에 대한 비순서적인 실행을 뒷받침하는 메커니즘은 잘 이해된다. 즉, 두 인스트럭션 사이의 모든 잠재적인 충돌이 인스트럭션 내에서 정적으로 명시된 레지스터 필드를 단순히 비교함으로써 검출될 수 있다.
충돌이 저장 위치를 통해 발생하기 때문에 저장 참조 인스트럭션(storage reference instructions)의 비순서적인 실행은 상당히 보다 어려운 문제이며, 그러한 충돌은 참조되는 주소를 알지 못하고서는 검출될 수 없다. 유효/가상 주소의 생성 및 실 주소로의 변환이 보통 저장 참조 인스트럭션의 실행의 일부로서 수행된다. 따라서, 한 저장 참조 인스트럭션이 논리적으로 선행인 인스트럭션이 실행되기 전에 실행되는 때, 논리적으로 선행인 인스트럭션에 대한 주소가 그 현 인스트럭션이 실행되는 동안에는 비교를 위해 사용될 수 없다.
적재 및 저장 인스트럭션을 비순서 및 중첩 실행을 가진 머신 내에서 수행하는 때에, 만약 실행중인 적재 인스트럭션이 아직 종료되지 않은 이전 저장 인스트럭션과 중첩되는 주소를 가진다면, 대체적으로 그 저장 인스트럭션이 종료될 때까지 그 적재 인스트럭션을 정지하거나 그 적재 인스트럭션 및 이에 후행하는 모든 인스트럭션을 취소시킬 필요가 있다.
따라서, 저장 인스트럭션이 종료될 때까지 적재 인스트럭션을 정지하거나 적재 인스트럭션 및 이에 후행하는 모든 인스트럭션을 취소시킬 필요없이 저장된 데이터를 요구하는 적재 인스트럭션에 전달하기 위한 시스템 및 방법 기술이 필요하게 된다.
따라서, 본 발명의 목적은 저장 인스트럭션이 종료될 때까지 적재 인스트럭션을 정지하거나 적재 인스트럭션 및 이에 후행하는 모든 인스트럭션을 취소시킬 필요없이 저장된 데이터를 요구하는 적재 인스트럭션에 전달하기 위한 시스템 및 방법을 제공하는 것이다.
도 1은 본 발명에 따라 구성될 수 있는 데이터 처리 시스템을 도시한 도면,
도 2는 본 발명에 따라 구성된 프로세서를 도시한 도면,
도 3은 본 발명에 따라 구성된 적재/저장 유닛을 좀 더 상세히 도시한 도면,
도 4는 저장 전달(store forwarding)이 구현되지 않은 경우 적재 히트 저장(load-hit-store) 흐름도를 도시한 도면,
도 5는 저장 전달이 구현되지 않은 경우 적재 히트 저장 시나리오에 대한 사이클 대 사이클 타이밍을 도시한 도면,
도 6은 적재 히트 저장 시나리오의 검출 및 저장 전달에 대한 하나의 구현예를 위한 흐름도를 도시한 도면,
도 7은 적재 히트 저장 시나리오에서 저장 전달에 대한 사이클 대 사이클 타이밍을 도시한 도면,
도 8은 본 발명에 따른 적재 히트 저장 시나리오를 검출 및 저장 전달의 구현을 위한 흐름도를 도시한 도면,
도 9는 본 발명에 따른 저장 전달 및 적재 히트 저장 시나리오의 사이클 대 사이클 타이밍을 도시한 도면.
도면의 주요 부분에 대한 부호의 설명
212 : 버스 인터페이스 유닛
214 : 인스트럭션 캐쉬 및 메모리 관리 유닛
216 : 데이터 캐쉬 및 메모리 관리 유닛
217 : 순차 인출기 218 : 분기 처리 유닛
219 : 인스트럭션 큐 220 : 디스패치 유닛
228 : 적재/저장 유닛 230 : 부동 소숫점 유닛
240 : 완료 유닛 302 : 저장 유닛
303 : 저장 주소 큐 304 : 저장 데이터 큐
305 : 저장 데이터 처리 307 : 클러스터 A
308 : 클러스터 B 309 : 선적재 큐
310, 311 : L1 캐쉬 312 : 적재 실패 큐
313 : L2 캐쉬 중재 논리 회로 315 : 적재 히트 적재 큐
만약 저장 인스트럭션이 이미 변환되었고, 적재 주소 범위가 저장 주소 범위에 포함되며, 저장 데이터가 사용될 수 있다면, 본 발명은 저장 데이터를 적재 인스트럭션에 전달함으로써 상기 필요를 처리한다.
하나의 실시예에서는, 12 비트 단위로 저장 및 적재 인스트럭션의 유효 주소 비트의 매치 작업을 수행한다. 매치가 존재하면, 유효 주소 비트에 대한 또 다른 매치 작업이 16 비트 단위로 수행된다. 이 과정에서 매치가 존재하면, 적재 및 저장 인스트럭션의 실 주소에 관하여 비교가 수행된다. 실 주소가 매치하면, 그 저장 데이터가 그 적재 인스트럭션에 전달된다.
하나의 대안적인 실시예서는, 실 주소가 매치하면, 저장 전달 과정(store-forwarding process)을 인에이블할 것인지 또는 디스에이블할 것인지를 결정한다.
저장 데이터의 전달이 수행되면, 적재 인스트럭션은 메모리 서브시스템이 아닌 저장 데이터 큐로부터 그 데이터를 수신하게 된다.
다음에 오는 본 발명에 대한 상세한 설명이 보다 잘 이해될 수 있도록 하기 위하여, 상기에서는 본 발명의 특징 및 기술적인 이점을 오히려 넓게 약술하였다. 본 발명의 추가적인 특징 및 이점은 본 발명의 청구항의 내용을 형성하는 하기에서 설명될 것이다.
하기 설명에서는, 많은 구체적인 세부사항이 본 발명의 완전한 이해를 제공하기 위해 구체적인 워드 혹은 바이트 길이 등으로 설명된다. 하지만, 당업자에게 분명한 사실은 본 발명이 그러한 구체적인 세부사항이 없어도 실시될 수 있다는 것일 것이다. 다른 사례에서는, 불필요한 세부사항으로 본 발명을 불명확하게 되지 않도록 하기 위하여 주지 회로는 록도 형태로 도시되어 있다. 주로 타이밍과 관련된 세부 사항 및 그와 유사한 것은 본 발명의 완전한 이해를 얻는데 불필요하고 관련 기술에 대한 통상의 지식을 가진 자의 기술 범위 내에 있는 그러한 세부 사항만큼 생략되었다.
이제 도면 ― 묘사된 엘리먼트는 반드시 축소 혹은 확대되어 도시될 필요는 없으며 같은 혹은 유사한 엘리먼트는 여러 도면을 통하여 동일한 참조 번호가 부여됨 ― 에 대해 살펴보자.
먼저 도 1을 살펴 보면, 본 발명에 따라 구성될 수 있는 데이터 처리 시스템에 대한 하나의 예가 도시되어 있다. 그 시스템은 하나의 중앙 처리 유닛("CPU")를 가지고 있는데, 이 CPU는 캐씨 메이 등(Cathy May at al. Ed.)에 의한 "PowerPC Architecture: A Specification for a New Family of RISC Processors" 2d Edition, 1994년 ― 본 명세서에서는 참조로 인용됨 ― 에 따른 PowerPC 마이크로프로세서("PowerPC"는 IBM의 상표임)의 일종이다. PowerPC에 대한 좀 더 구체적인 구현예는 "PowerPC 604 RISC Microprocessor User's Manual" 1994,IBM Corporation ― 본 명세서에서는 참조로 인용됨 ― 에 설명되어 있다. 여기서 기술된 많은 두문자어(acronyms)(예컨대, 특정 인스트럭션을 기술함)는 PowerPC 인스트럭션이며, 이러한 레퍼런스 내에 더 기술되어 있을 수 있다.
CPU(210)는 시스템 버스(212)에 의하여 다양한 다른 부품에 연결되어 있다. 읽기 전용 메모리("ROM")는 시스템 버스(212)에 연결되어 있으며 데이터 처리 시스템의 특정한 기본적인 기능을 제어하는 기본 입/출력 시스템("BIOS")을 포함한다. 랜덤 액세스 메모리("RAM")(250), I/O 어댑터(118) 및 통신 어댑터(134)도 또한 시스템 버스(211)에 연결되어 있다. I/O 어댑터(118)는 디스크 저장 장치(120) 또는 테이프 저장 장치(140)와 통신하는 소형 컴퓨터 시스템 인터페이스("SCSI") 어댑터일 수 있다. I/O 어댑터(118), 디스크 저장 장치(120) 및 테이프 저장 장치(140)는 또한 여기에서는 대용량 저장 장치(mass storage)(252)로서 간주된다. 통신 어댑터(134)는 그 데이터 처리 시스템으로 하여금 다른 그러한 시스템과 통신할 수 있게 하는 외부 네트워크를 가진 버스(212)와 상호 연결되어 있다. 입/출력 장치도 또한 사용자 인터페이스 어댑터(122) 및 디스플레이 어댑터(136)를 경유하여 시스템 버스(212)에 연결되어 있다. 키보드(124), 트랙볼(132), 마우스(126) 및 스피커(128)는 모두 사용자 인터페이스 어댑터(122)를 경유하여 버스(212)에 연결되어 있다. 디스플레이 모니터(138)는 디스플레이 어댑터(136)에 의해 시스템 버스(212)에 연결되어 있다. 이러한 방식으로, 사용자는 키보드(124), 트랙볼(132) 또는 마우스(126)를 통하여 시스템에 입력할 수 있으며 스피커(124) 및 디스플레이(138)를 경유하여 시스템으로부터 출력을 수신할 수 있다. 또한, AIX("AIX"는 IBM의 상표임)와 같은 운영 체제는 도 1에 도시된 다양한 부품의 기능을 조정하는데 사용된다.
지금 도 2를 살펴보면, 첨부된 청구항 내에 기술된 본 발명에 따라 정보를 처리하기 위한 데이터 처리 시스템의 예시적인 실시예에 대한 블록도가 도시되어 있다. 묘사된 예시적인 실시예에서는, CPU(210)는 단 한 개의 집적 회로로 된 슈퍼스칼라 마이크로프로세서를 포함한다. 따라서 아래에서 더 설명되는 바와 같이, CPU(210)는 다양한 실행 유닛, 레지스터, 버퍼, 메모리 및 다른 기능 유닛을 포함하는데, 이들은 모두 집적 회로에 의해 형성된다. 도 2에 도시된 바와 같이 CPU(210)는 버스 인터페이스 유닛("BIU") 및 프로세서 버스(213)를 경유하여 시스템 버스(211)에 연결되는데, 이 프로세서 버스는 시스템 버스(211)와 같이 주소, 데이터 및 제어 버스를 포함한다. BIU(212)는 버스 중재에 관여함으로써 프로세서(210)와 시스템 버스(211)에 연결된 다른 장치, 이를테면 주 메모리("RAM") 및 비휘발성 대용량 저장 장치(252)사이의 정보 전송을 제어한다. 도 2에 도시된 데이터 처리 시스템은 시스템 버스(211)에 연결되어 있으나 도시되지 않은 다른 장치를 포함할 수 있는데, 이들은 하기 설명에 대한 이해에 불필요하며 따라서 단순성을 위해 생략된다.
BIU(212)는 인스트럭션 캐쉬 및 MMU(Memory Management Unit: 메모리 관리 유닛)(214)와 데이터 캐쉬 및 MMU(216)에 연결되어 있다. 인스트럭션 캐쉬 및 MMU(214) 와 데이터 캐쉬 및 MMU(216)내의 캐쉬와 같은 고속 캐쉬는 CPU(210)으로 하여금 주 메모리(250)로부터 캐쉬로 이전에 전송된 데이터 또는 인스트럭션의 서브세트(subset)에 대한 상대적으로 빠른 액세스 시간을 얻게 하며, 따라서 데이터 처리 시스템의 동작 속도를 향상시킨다. 데이터 및 인스트럭션 캐쉬 내에 저장된 데이터와 인스트럭션은 각자 주소 태그에 의해 식별되고 액세스되는데, 각 태그는 주 메모리(250)내 데이터 또는 인스트럭션의 물리 주소 중에 선택된 다수의 상위 비트를 포함한다. 인스트럭션 캐쉬 및 MMU(214)는 순차 인출기(217)에 더 연결되어 있는데, 이 인출기는 각 사이클동안 인스트럭션 캐쉬 및 MMU(214)로부터 실행을 위한 인스트럭션을 인출한다. 순차 인출기(217)는 인스트럭션 캐쉬 및 MMU(214)으로부터 인출된 분기 인스트럭션을 실행을 위하여 분기 처리 유닛에 전송하지만, CPU(210)내에 다른 실행 회로에 의한 실행을 위하여 순차적인 인스트럭션을 일시적으로 인스트럭션 큐(219)내에 저장한다.
그 묘사된 예시적인 실시예에는, BPU(218) 외에, CPU(210)의 실행 회로는 순차적인 인스트럭션을 실행하기 위한 다수의 실행 유닛으로 구성되는데, 이는 고정 소수점 유닛("FPU")(222), 적재/저장 유닛("LSU")(228)와 부동 소숫점 유닛("FPU")(230)을 포함한다. 실행 유닛(222, 228 및 230)은 각각 전형적으로 각 프로세서 사이클 동안 순차적인 인스트럭션 중 특정한 타입의 하나이상의 인스트럭션을 실행한다. 예컨대, FXU(222)는 명시된 범용 레지스터("GPRs")(232)로부터 수신된 소스 오퍼런드를 이용하여 덧셈, 뺄셈, AND, OR 및 XOR와 같은 고정 소숫점 산술 및 논리 연산을 수행한다. 고정 소숫점 인스트럭션을 실행한 다음, FXU(222)는 그 인스트럭션의 데이터 결과를 GPR 버퍼(232)로 출력하는데, 이 버퍼는 결과 버스(262) 상에 수신된 결과에 대한 저장 공간을 제공한다. 역으로, FPU(230)는 전형적으로 부동 소숫점 레지스터("FPRs")(236)로부터 수신된 소스 오퍼런드 상에서 단정도 및 배정도의 부동 소숫점 산술 및 논리 연산, 이를테면 부동 소숫점 곱셈 및 나눗셈을 수행한다. FPU(230)는 부동 소숫점 인스트럭션의 실행으로부터 발생한 데이터를 그 결과 데이터를 저장하는 선택된 FPR 버퍼(236)에 출력한다.
그 이름이 암시하는 바와 같이, LSU(228)는 전형적으로 부동 소숫점 및 고정 소숫점 인스트럭션을 실행하는데, 이 인스트럭션은 메모리(즉, 데이터 캐쉬 및 MMU(216)내의 데이터 캐쉬 또는 주 메모리(250)중 하나임)로부터 선택된 범용 레지스터(232) 혹은 부동 소숫점 레지스터(236)로 데이터를 적재하거나 범용 레지스터(232) 혹은 부동 소숫점 레지스터 중 선택된 어느 하나로부터 메모리(250)로 저장한다.
CPU(210)는 파이프라이닝 및 인스트럭션의 비순서적인 실행을 모두 사용하여 슈퍼스칼라 구조의 성능을 더욱 향상시킨다. 따라서, 인스트럭션은 데이터 의존성이 준수되는 한 어떠한 순서로도 FXU(222), LSU(228) 및 FPU(230)에 의해 실행될 수 있다. 또한, 인스트럭션은 파이프라인 단계의 시퀀스로 FXU(222), LSU(228)와 FPU(230)중 각각에 의해 처리된다. 고성능 프로세서에 전형적인 것으로서, 각 순차적인 인스트럭션은 5개의 별개의 파이프라인 단계, 즉 인출, 디코드/디스패치, 실행, 종료 및 완료에서 처리된다.
인출 단계 동안에, 순차 인출기(217)는 인스트럭션 캐쉬 및 MMU(214)로부터 하나이상의 메모리 주소와 연관되는 하나 이상의 인스트럭션을 검색한다. 인스트럭션 캐쉬 및 MMU(214)로부터 인출된 순차적인 인스트럭션은 순차 인출기(217)에 의해 인스트럭션 큐(219)내에 저장된다. 대조적으로, 순차 인출기(217)는 인스트럭션 스트림으로부터 분기 인스트럭션을 제거하여(접어 내어) 실행을 위하여 이들을 BPU(218)에 전달한다. BPU(218)는 분기 예측 메커니즘을 포함하는데, 이 메커니즘은 하나의 실시예에서는 분기 이력 테이블(branch history table)과 같은 동적 예측 메커니즘을 포함한다. 그것 때문에 BPU(218)는 분기가 이루어질지 여부를 예측함으로써 해결되지 않은 조건부 분기 인스트럭션을 잠정적으로 실행할 수 있다.
디코드/디스패치 단계 동안에는, 전형적으로 프로그램 순서대로, 디스패치유닛(220)은 인스트럭션 큐(219)로부터 실행 유닛(222, 228 및 230)로 하나 이상의 인스트럭션을 디코딩하고 디스패치한다. 보다 관례적인 프로세서에서는, 디스패치 유닛(220)은 디스패치된 인스트럭션의 각 결과 데이터에 대하여 범용 레지스터 재명명 버퍼(233) 또는 부동 소숫점 재명명 버퍼(237) 내에 재명명 버퍼를 할당하며, 디스패치 시에, 인스트럭션은 또한 완료 유닛(240)의 다중슬롯(multi-slot) 완료 버퍼 내에 저장되어 완료를 기다리게 된다. 하지만, 본 발명은 재명명 레지스터 혹은 완료 유닛을 필요로 하지 않는 실시예에 적용될 수 있다. 예시적으로 도시된 실시예에 따르면, CPU(210)는 유일한 인스트럭션 식별자를 활용하여 비순서적인 실행동안에 디스패치된 인스트럭션의 프로그램 순서를 추적한다.
실행 단계 동안에, 실행 유닛(222, 228 및 230)은 오퍼런드 및 지시된 작업에 대한 실행 자원이 사용될 수 있게 되자마자 디스패치 유닛(220)으로부터 수신된 인스트럭션을 실행한다. 하나의 실시예에서는, 실행 유닛(222, 228 및 230)은 각각 오퍼런드 또는 실행 자원이 사용될 수 있을 때까지 그 실행 유닛으로 디스패치된 인스트럭션을 저장하는 예약 스테이션을 구비하고 있다. 인스트럭션의 실행이 종료된 후에, 실행 유닛(222, 228 및 230)은 결과가 있다면, 인스트럭션 타입에 따라 범용 레지스터 또는 부동 소숫점 레지스터 중 어느 하나에 결과 데이터를 저장한다. 보다 관례적인 프로세서에서는, 실행 유닛(222, 228 및 230)은 어떤 인스트럭션이 실행을 종료했는지를 완료 유닛(240)에 통보한다. 결국, 인스트럭션은 완료 유닛(240)의 완료 버퍼로부터 프로그램 순서대로 완료된다. FXU(222) 및 FPU(230)에 의해 실행된 인스트럭션은 범용 레지스터 재명명 버퍼(233) 및 부동 소숫점 재명명 버퍼(237)로부터 범용 레지스터(232) 및 부동 소숫점 레지스터(236)로 그 인스트럭션의 결과 데이터를 전송함으로써 각자 완료된다. LSU(228)에 의해 실행된 적재 및 저장 인스트럭션은 종료된 인스트럭션을 완료 저장 큐 또는 완료 적재 큐로 전송함으로써 완료되는데, 이러한 큐로부터 그 인스트럭션에 의해 지시된 적재 및 저장 동작이 수행될 것이다.
본 발명은 프로세서의 디스패치 논리 회로를 이용하여 전통적인 폰 노이만 인스트럭션 스트림을 데이터 플로우형 포맷으로 암호화한다(tokenize). 따라서, 데이터 의존성은 레지스터 재명명에서와 같이 각 인스트럭션에 의해 요구된 소스 데이터의 저장 위치를 추적함으로써 처리되지 않고, 오히려 소스 데이터를 제공하는 다른 인스트럭션을 참조함으로써 소스 데이터를 추적할 수 있게 하는 특정 정보를 한 인스트럭션에 연관시킴으로써 처리된다. 따라서, 프로세서에는 목표 식별자("TID") 생성기를 제공되는데, 이 생성기는 토큰 또는 태그를 생성하며, 이 토큰 또는 태그 각각은 디스패치시 한 인스트럭션과 유일하게 연관된다. TID를 사용하여 프로그램 순서 정보를 보유할 수 있고 데이터 의존성을 추적할 수 있다.
본 발명에서 디스패치 유닛(220)은 TID을 할당하고 인스트럭션을 디스패치할 뿐만 아니라, 디스패치된 인스트럭션의 상태를 추적하는데 사용되는 다양한 테이블을 갱신한다.
CPU(210)는 비순서적인 잠정적 인스트럭션 실행을 지원한다. 인스트럭션은 예측된 분기 방향 상에서 잠정적일 수 있거나 인터럽트 조건을 야기하는 인스트럭션을 넘어서 잠정적일 수 있다. 잘못된 분기 예측 또는 인터럽트의 사건에서, 하드웨어는 자동적으로 파이프라인으로부터 바람직하지 못한 인스트럭션을 제거하고 바람직하지 못한 결과를 무시하며, 정밀한 예외 및 적절한 분기 경로 아래로 순차적으로 실행된 스트럭션의 결과를 제시한다. 부정확한 잠정적 결과는 하나의 사이클 내에 모든 유닛로부터 선택적으로 제거되며, 인스트럭션 디스패치는 다음 클럭 사이클에 재개될 수 있다. 그룹 식별자 태그("GID")가 분명한 분기 또는 인터럽트될 수 있는 인스트럭션에 의해 경계지워지는 인스트럭션 집합 당 하나씩 할당된다.
본 발명은 다중 적재 유닛과 단일 저장 유닛을 포함하는 구현예의 관점에서 기술될 것이다. 하지만, 당업자에게 분명한 것은 본 발명이 단일 적재/저장 유닛 등과 같은 다른 구성을 다룰 수 있도록 변형될 수 있다는 점이다. 그 제안된 발명에 따르면, 적재가 다른 적재 및 저장과 관련하여 비순서적으로 실행될 수 있으며 저장이 모든 적재과 관련하여 비순서적으로 실행될 수 있다.
상기에서와 같이, 모든 인스트럭션은 임의의 두 인스트럭션 사이의 상대적인 나이가 쉽게 결정될 수 있도록 하는 그러한 방식으로 태그가 붙여진다. 본 설명에서 가정될 그 메커니즘은 단조적으로 값(TID)을 증가시키는 것이다. 각 인스트럭션의 TID 값은 큐 엔트리 및 그 인스트럭션이 상주하는 파이프라인 단계와 연관된다.
TID 기반의 접근 방법에 따르면 하드웨어는 제거 커맨드와 연관된 TID 와 특정 큐 엔트리 또는 기능 유닛의 단계와 연관되는 TID 사이에 크기 비교를 수행하고 그 엔트리가 제거된 인스트럭션만큼 젊거나 그보다 젊다면 그 엔트리를 무효화함으로써 인스트럭션 제거 메커니즘을 구현할 수 있다(프로세서가 생성하는 제거 커맨드에 응답할 수 있다). 제거된 인스트럭션의 모든 나머지( 및 이에 후행하는 모든 인스트럭션)는 머신으로부터 "제거"되고 인출 유닛은 방향이 새로 지정되어 그 제거된 인스트럭션의 주소로부터 시작하여 인출하게 된다.
다음으로 도 3을 참조하면, 도 3에는 인스트럭션 큐(219) 및 인스트럭션 캐쉬(214)에 연결된 적재/저장 유닛(228)에 대한 좀 더 상세한 도면이 도시되어 있다. 또한, 부동 소숫점 유닛(230)도 도시되어 있다. 도 3은 기본적 기능 유닛과 인스트럭션 큐을 도시하고 있다. 이 기능 유닛은 클러스터 A(307), 클러스터 B(308) 및 저장 유닛(302)이다. 본 발명은 세 개의 큐과 이러한 큐과 적재 및 저장 유닛 사이의 인터락(interlocks)에 중심을 두고 있다. 그 세 개의 큐는 저장 주소 큐(store address queue)(303), "선적재(preload)" 큐(309) 및 "적재 히트 적재(load-hit-load)" 큐(315)이다.
이러한 각각의 큐 내의 엔트리는 전형적으로 그 엔트리와 연관된 인스트럭션의 TID(나이 표시자), 오퍼런드 주소 및 오퍼런드 바이트 수를 포함한다. 이러한 정보에 의하면, 원한다면 아래로는 바이트 수준까지, 중첩을 검출할 수 있을 뿐만 아니라 한 엔트리와 다른 어떠한 저장 참조사이의 상대적인 나이를 결정할 수 있다.
하나의 실시예에서, 디스패치 "아래"와 적재 및 저장 유닛 "위"에는 두 개의 인스트럭션 큐 ― 디스패치된 모든 적재는 적재 유닛 내에서 실행을 기다리는 동안 "PEQ"(306)내에 큐잉되고, 모든 저장은 저장 유닛(302)을 기다리는 동안 "SPQ"(301)내에 큐잉됨 ― 이 있다. 각 사이클의 시작점에서, 하드웨어는 만약 아직 변환되지 않은 저장이 있다면 어떤 저장이 그 중에서 가장 오래된 디스패치된 저장인지를 결정한다. 위에서 기술된 인스트럭션 큐 구조에 대하여, 이러한 결정 과정은 어떠한 미변환 저장이 있는지 알기 위하여 저장 유닛(혹은 유닛)을 조사하는 것을 포함한다. 만약 존재하면, 그 가장 오래된 저장은 "가장 오래된 미변환 저장(oldest untranslated store)"으로 간주된다. 만약 존재하지 않으면, "가장 오래된 미변환 저장"을 발견하기 위하여 SPQ(301)을 조사한다. 그러한 저장이 발견되면, 그것이 "가장 오래된 미변환 저장"으로 간주된다. 전혀 발견되지 않으면, "가장 오래된 미변환 저장" 포인터는 디스패치될 그 다음 인스트럭션을 디폴트값으로 가리키게 된다.
저장 주소 큐(303)는 이미 변환되었지만 그 연관된 데이터가 아직 L1 캐쉬(310,311)에 기록되지 아니한 모든 저장을 포함하는 FIFO 리스트이다. 실행 시점에서 저장 인스트럭션의 변환의 결과로서 엔트리는 생성되며, 그 연관된 데이터를 L1 캐쉬(310,311) 에 기록한 결과로서 엔트리는 제거된다. 저장이 디스패치된 때에, 저장 주소 큐(303)와 연관된 것이 저장 데이터 큐(304)이다. 저장이 디스패치된 때에, 엔트리가 저장 데이터 큐(304) 내에 할당된다. 그 엔트리가 할당된 때에 그 저장 데이터가 사용될 수 있으면, 그 데이터는 저장 데이터 큐(304)내에 놓여진다. 그렇지 않으면, 기능 유닛에 의해 그 데이터가 생성된 때에, 저장 데이터 큐(304)는 결과 버스를 정찰하다가 저장 데이터 큐 내로 그 데이터를 포획한다. 저장 주소 큐(303)와 유사하게, 엔트리는 바이트가 L1 캐쉬(310, 311)에 기록된 때에 제거된다.
저장 데이터 큐(304) 및 저장 주소 큐(303)는 저장 데이터 큐 프로세싱 유닛(305)에 연결되어 있는데, 이 프로세싱 유닛은 적재 실패 큐(312)에 연결되어 있으며, 이 큐는 L2 캐쉬 중재 논리 회로(313)에 연결되어 있다. 이러한 유닛에 대하여 더 이상 설명하지 않는데, 왜냐하면 그러한 설명은 본 발명을 기술하는데 불필요하기 때문이다. 다른 기능적인 블록이 적재/저장 실행 유닛(228)내에 구현될 수 있지만, 본 명세서에서는 단순성 및 명확성이라는 이유로 도시되지 않았음을 유의하자.
실행 유닛(302)과 SPQ(301)가 모두 병렬적으로 그리고 동일한 가중치로 조사된다면, 본 발명은 저장이 다른 저장과 관련하여 비순서적으로 실행되는 경우에까지 확장될 수 있다. 본 명세서에는, 저장이 순서적으로 실행된다고 가정하는데, 따라서 하나의 저장을 "가장 오래된 미변환 저장"으로서 확정하기 위하여 실행 유닛(302)이 먼저 그리고 보다 높은 우선 순위로 조사된다. 저장에 대한 순서적인 실행은 또한 저장 주소 큐(303)가 저장 주소 큐 공간으로부터 발생하는 데드락(deadlock) 문제를 피하면서 선입선출(FIFO)큐로서 관리될 수 있음을 암시한다.
선적재 큐(309)는 본 발명에 특이한 것으로서 논리적으로 "가장 오래된 미변환 저장"에 후행하는 모든 변환된 적재의 주소를 가지고 있다. 각 사이클의 시작점에서, 적재 유닛 내에서 실행되고 있는 어떠한 적재가 "가장 오래된 미변환 저장"에 논리적으로 후행하는 인스트럭션인지가 결정된다. 그러하다면, 그것은 "선적재"로서 간주되고 실행을 위하여 선적재 큐(309)내에 하나의 엔트리를 요구한다.선적재 큐(309)내에 공간이 없는데 하나의 엔트리가 요구되면, 하기 두 동작 중 하나가 발생한다.
· 실행중인 적재가 선적재 큐(309)내의 모든 적재보다 젊으면(논리적으로 이에 후행이면), 이 적재( 및 이에 후속하는 모든 인스트럭션)는 머신(210)으로부터 제거되고, 인스트럭션 인출 유닛(217)은 새로 방향이 지정되어 그 제거된 적재 인스트럭션의 주소에서 인출을 시작하게 된다.
· 선적재 큐(309)내의 한 엔트리가 선적재 큐 엔트리를 요구하는 실행중인 적재보다 젊으면, 선적재 큐(309)내 가장 젊은 적재( 및 이에 후속하는 인스트럭션)는 제거되고 재인출되며 선적재 큐(309)내에서 실행중인 그 적재는 그 제거된 적재의 엔트리를 부여받는다.
동일한 사이클 내에 하나이상의 실행중인 적재가 선적재 큐 엔트리를 요구할 수 있도록 구현하기 위해서는, 상기 규칙은 직관적으로 수정되어야 하는데, 다시 말해 그 결과는 마치 가장 오래된 적재에서 시작하여 한번에 하나의 적재를 처리하는 상기 규칙에 의해 적재이 처리되는 것처럼 될 것이다. 예컨대, 실행중인 두 적재은 각각 선적재 큐 엔트리를 요구하지만 단지 한 엔트리만이 존재한다면, 실행중인 가장 오래된 적재가 그 가용 엔트리를 얻게 되고 그러면 실행 중인 가장 젊은 적재가 큐(309)가 꽉 찼기 때문에 상기 규칙을 따르게 된다.
각 사이클의 끝에서, 선적재 큐(309) 내의 유효한 엔트리는 "가장 오래된 미변환 저장"의 나이와 비교되는데, 그 "가장 오래된 미변환 저장"보다 오래된(논리적으로 그보다 선행인) 어떠한 엔트리라도 무효화된다(무시된다). 선적재 큐 엔트리가 제거 커맨드의 대상(또는 이보다 젊은)이 되는 적재 인스트럭션에 대한 것이라면, 제거 커맨드의 결과로서 선적재 큐 엔트리가 또한 무효화될 수 있다.
저장 주소 큐(303)는 변환되었지만 아직 그 데이터를 L1 캐쉬(310,311)에 기록하지 않은 저장의 주소를 담고 있다. 이러한 큐(303)에 의하면, 본 발명에 의해 사용되는 목적 외에도, 저장 데이터를 기다리지 않고 저장이 변환될 수 있고 예외가 검출될 수 있다. 저장 인스트럭션을 이렇게 두 부분으로 분리하는 것이 프로세서(210)의 고정 소숫점 부분(이는 대개 저장 참조에 대하여 주소 생성/변환을 행함)을 부동 소숫점 부분(230)(이는 부동 소숫점 데이터를 생성하고 정규화함)으로부터 분리하는데 핵심이 된다. 현재의 여러 설계는 그러한 저장 주소 큐(303)를 포함한다. 가장 많이 존재하는 구현에서와 같이, 저장 주소 큐(303)는 FIFO 방식으로 관리되며, 저장 주소 큐(303) 내의 가장 오래된 엔트리가 L1 캐쉬(310,311)에 기록될 다음 엔트리가 된다. 당업자에게 분명해야 할 점은 가장 오래된 엔트리 이외의 엔트리가 L1 캐쉬(310,311)에 기록될 수 있는데, 이러하면 보다 젊더라도 데이터를 가지고 있으면 그러한 저장이 데이터를 기다리는 보다 오래된 저장에 앞서 데이터를 기록할 수 있다는 것이다. 또한 분명해야 할 점은 기술된 바와 같이 본 발명이 이러한 향상된 점을 다루도록 변형될 필요가 없다는 것일 것이다.
저장 주소 큐 엔트리는 하기 두 가지 조건 하에서 무효화된다(무시된다).
· 이와 연관된 저장 동작이 L1 캐쉬(310,311)로 수행되었거나, 또는
· 제거 커맨드는 저장 주소 엔트리가 인스트럭션 제거 커맨드의 대상(subject)보다 젊으면 무시되어야 함을 알린다.
적재 히트 적재 큐(load-hit-load queue)는 본 발명에 특이한 것으로서, 논리적으로 가장 오래된 미변환 적재 혹은 저장에 후행하는 모든 변환된 적재의 주소를 가진다. 각 사이클의 시작점에서, 적재 유닛에 실행중인 어떠한 적재라도 논리적으로 가장 오래된 미변환 적재 또는 저장에 후행하는지가 결정된다. 후행하면, 그것은 실행을 위하여 적재 히트 적재 큐(315)내에 하나의 엔트리를 요구한다. 적재 히트 적재 큐(315)내에 공간이 없고 한 엔트리가 요구된다면, 하기 두 동작 중 하나가 발생한다.
· 실행중인 적재가 적재 히트 적재 큐(315)내의 모든 적재보다 젊다면(논리적으로 이보다 후행이라면), 이 적재(및 이에 후행하는 모든 인스트럭션)는 머신(210)으로부터 제거되고 인스트럭션 인출 유닛(217)은 새로 방향이 지정되어 그 제거된 적재 인스트럭션의 주소에서 인출을 시작한다.
· 적재 히트 적재 큐(315)내의 한 엔트리가 선적재 큐 엔트리를 요구하는 실행중인 적재보다 젊다면, 적재 히트 적재 큐(315)내에 가장 젊은 적재(및 이에 후행하는 인스트럭션)는 제거되고 재인출되며 실행중인 그 적재는 적재 히트 적재 큐(315)내에서 그 제거된 적재의 엔트리를 부여받는다.
동일한 사이클 내에 하나이상의 실행중인 적재가 적재 히트 적재 큐 엔트리를 요구할 수 있도록 구현하기 위해서는, 상기 규칙은 직관적으로 수정되어야 하는데, 다시 말해 그 결과는 마치 가장 오래된 적재에서 시작하여 한번에 하나의 적재를 처리하는 상기 규칙에 의해 적재가 처리되는 것처럼 될 것이다. 예컨대, 실행중인 두 적재는 각각 적재 히트 적재 큐 엔트리를 요구하지만 단지 한 엔트리만이존재한다면, 실행중인 가장 오래된 적재가 그 가용 엔트리를 얻게 되고 그러면 실행중인 가장 젊은 적재가 큐(315)가 꽉 찼기 때문에 상기 규칙을 따르게 된다.
각 사이클의 끝에서, 적재 히트 적재 큐(315)내의 유효한 엔트리는 "가장 오래된 미변환 저장"의 나이와 비교되는데, 그 "가장 오래된 미변환 저장"보다 오래된(논리적으로 그보다 선행인) 어떠한 엔트리라도 무효화된다(무시된다). 적재 히트 적재 큐 엔트리가 제거 커맨드의 대상(또는 보다 젊은)이 되는 적재 인스트럭션에 대한 것이라면, 제거 커맨드의 결과로서 적재 히트 적재 큐 엔트리가 또한 무효화될 수 있다.
선적재 큐(309) 및 적재 히트 적재 큐(315)는 유사한 정보를 담고 있으며, 몇몇 구현예에서는, 이들이 단일 구조로 통합될 수 있음을 유의하자.
상기 기술에서, 본 발명에 대한 세 개의 주된 큐 ― 선적재 큐(309), 저장 주소 큐(303) 및 적재 히트 적재 큐(315) ― 내에서 엔트리가 생성되고 무시되는 조건이 상술되었다. 이 다음 단락에서는, 본 명세서에서 이전에 기술된 구조적인 저장 일치 요건(architectural storage consistency requirements)을 제시하기 위하여 큐 엔트리 사이에서 수행되는 주소 체크가 상술된다.
고찰할 예제에서는,
· 한 적재가 한 저장으로부터 데이터를 요구하고,
· 적재는 저장이 실행된 후에 실행하며,
· 저장 동작이 여전히 저장 주소 큐(303)내에 큐잉되었던 동안(즉, 저장 동작이 L1 캐쉬(310,311)를 갱신하기 이전에, 또한 그 동작이 완료된 것으로 간주되어) 적재 동작이 L1 캐쉬(310,311)로부터 데이터를 받았다.
저장이 이미 변환되었고, 적재 주소가 저장 주소 범위 내에 포함되며 저장 데이터가 사용될 수 있으면, 저장 데이터를 저장 인스트럭션에 전달할 수 있으며 머신(210)은 계속해서 실행할 수 있다. 본 발명의 저장 전달/적재 히트 저장 검출 논리 회로는 최적화 기법을 사용하는데, 이러한 기법은 프로세서(210)가 32 바이트 및 16 바이트 경계를 가로지르는 적재와 저장을 각각 분해하기 때문에 가능하다. 또한, 데이터가 전달될 수 있을 때의 제약이 포맷팅 및 전달 하드웨어의 최적화를 가능하게 한다. 적재/저장 실행 사이클동안 주소를 변환하는데 걸리는 지연 때문에, 페이지 오프셋 비트를 기반으로 하는 다수의 검사 ― 이 다음에 적재 및 저장 주소의 변환된 비트 상에서 검사가 이어짐 ― 로그 전달 검사를 분할하는 것이 성능상의 이유를 위해 바람직할 수 있다. 인스트럭션을 완료시키는 것을 포함하는 중첩 검사는 앨리어싱의 가능성 때문에 실 주소를 기반으로 하지만, 적재 히트 저장 및 전달의 가능성에 대한 예측은 잠정적인 실행에 대해서는 유효 주소를 기반으로 하여 수행될 수 있다.
저장 전달은 적재 히트 저장 시나리오의 특별한 경우이어서 그 하드웨어의 일부를 적재 히트 저장 검출 논리 회로와 공유한다. 적재 히트 저장 및 저장 히트 적재 메커니즘은 상호 참조되는 미국 특허 출원 번호....(Attorney Docket No. AT9-97-075)에 기술되어 있다. 적재 히트 저장 시나리오가 발생하는 때, 적재 주소 범위가 저장 주소 범위 내에 포함되며, 아래에 기술된 조건이 충족되면, 그 적재 인스트럭션은 L1 캐쉬(310,311) 또는 다른 메모리 서브시스템 부품이 아닌 저장데이터 큐(304)로부터 그 데이터를 수신한다.
다음은 전달 동작에 대한 개괄적 설명이다. 적재 인스트럭션(모든 부동 소숫점 및 고정 소숫점 적재인 LWARX, ECTWX을 포함하지만 다중 적재/스트링 적재인 LMW, LSWX 및 LSWI를 포함하지 않음)이 제 1 사이클 동안 실행되며 저장 주소 큐(303)내 (논리적으로 선행인) 저장 동작(이 문맥 내에서는, "저장"은 저장 주소 큐 엔트리를 요구하는 모든 인스트럭션, 예컨대 고정 소숫점 및 부동 소숫점 저장인 STWCX, SYNC, ICBI, DCBx, EIEIO, TLBSYNC, TLBIE 및 ECOWX을 포함함)에 대하여 히트하면(하위 16 비트 유효 주소 및 크기가 비교됨), 그 적재는 클러스터 실행 유닛(307,308)내에 보유되고 1 사이클동안 재실행될 것이다. 한 저장 주소 큐 엔트리가 논리적으로 본 적재보다 선행인지 여부를 결정할 때, 그 연관된 TID가 비교된다. "완료됨"(그 저장이 변환되었고 IIT(도시되지 않음)로부터 제거됨)으로 표시된 모든 저장 주소 큐 엔트리는 TID 비교의 결과에 관계없이 이 적재보다 더 오래된 것임이 보장된다. 한 적재가 하나이상의 저장 주소 큐 엔트리에 대하여 히트하면, 단지 가장 젊은 위반 저장이 히트된 것으로 간주된다.
제 2 사이클 동안, 적재 및 저장 인스트럭션의 실 주소("RA") 32 비트가 진정한 적재 히트 저장 조건인지를 결정하기 위해 비교된다. 주소/TID 비교는 제 2 사이클동안 수행되며 저장 주소 큐(303)는 제 1 사이클동안 변환된 어떠한 저장이라도 포함할 것이지만, 재기록(writeback) 비교 사이클(제 2 사이클)동안에 변환되는 저장은 포함하지 않을 것이다.
32 비트 실 주소 비교가 적재 히트 저장이 아님(전혀 바이트가 중첩하지 않음)을 나타내면, IDU(220)는 제 3 사이클 동안 제거 신호를 보낸다. 만약 32 비트 실 주소 비교가 적재 히트 저장임을 나타내면(다시 말해, 하나이상의 바이트가 중첩하면), 다음과 같다.
a) 저장 전달(store_forwarding)이 디스에이블되면, IDU(220)는 제 3 사이클 동안 적재에 대한 제거 신호를 보낼 것이다.
b) 저장 전달이 인에이블되면, 재실행의 제 1 사이클 동안, 적재는 데이터가 사용될 수 있으면 (어떠한 제거도 없이) 완료할 것이다. 데이터는 다음과 같은 경우 사용될 수 있다.
a) 적재될 데이터가 단일한 SDQ 엔트리 내에 포함되고,
b) 데이터가 SDQ 엔트리 내에서 유효하고,
c) 적재도 저장도 I=1인 공간 내에 있지 않고(둘 다 캐쉬가 가능한 주소이고)
d) 적재가 16 바이트 경계를 걸치지 않으며
e) 저장/적재의 크기/정렬로 된 다음의 쌍 중 하나가 참이다.
1. STB LB에 전달
2. STH LH에 전달
3. STW/STFS LW 또는 LFS에 전달
4. STWBRX LWBRX에 전달
5. STHWBRX LHBRX에 전달
6. 워드로 정렬된 STW LB 또는 LH에 전달
7. 워드로 정렬된 STFS LB, LH, LW 또는 LFS에 전달
8. 워드로 정렬된 STFD LB, LH, LW 또는 LFS에 전달
9. 워드로 정렬된 STMW LB, LH, LW 또는 LFS에 전달
10. 워드로 정렬된 STSWX/I LB, LH, LW 또는 LFS에 전달
SDQ 엔트리가 워드로 정렬된 개개의 워드 액세스(경우 6)의 집합에 의해 생성된다면 경우 9 및 10이 적용된다. 그 워드가 4 바이트보다 작게 포함하고 있으면 경우 10에 대하여 전달이 전혀 허용되지 않는다.
데이터가 사용될 수 없으면, IDU(220)가 제 3 사이클동안 적재에 대한 제거 신호를 보낼 것이다. 데이터가 사용될 수 있으면, 데이터 전달은 L1 캐쉬 히트 경우에 비해 1 사이클만큼 지연된다.
저장 주소 큐(303) 및 저장 데이터 큐(304)는 잠재적인 저장 전달 시나리오를 검출하고 저장 전달에 데이터를 제공하며 성공하지 못한 저장 전달 기회를 제거하는 것과 연관되는 추가적인 논리 회로를 포함한다. 적재 히트 저장 논리 회로 와 유효 주소 및 실 주소 비교가 어떻게 저장 전달 논리 회로에 의해 이용되는지가 다음 단락에서 기술된다. 본 단락에는, 적재/저장의 크기/정렬이(상기 규칙 e)어떻게 저장 전달이 발생할 수 있는지 여부를 결정하는 것이 기술되고 어떻게 필요한 포맷팅이 수행되는지가 기술된다. 여기서, 적재 히트 저장 중첩이 검증되었다고 가정한다. 가장 젊은 위반 저장의 데이터 가용성 및 저장/적재의 크기/정렬(상기 규칙 a-e)이 전달이 발생할 것인지를 결정한다.
상기 "규칙 e"의 첫 다섯 목록은 적재와 저장사이에 정확한 크기 및 정렬 일치에 대응한다. 이 조건을 검출하려면 단순히 적재와 저장사이에 정확한 실 주소 비교가 필요하다(그러므로, 적재와 저장이 동일한 정렬 및 크기일 것이 요구됨). 적재 및 저장이 16 바이트 경계를 교차하지 않는 한 정렬될 수 없다.
"규칙 e"의 6에서 10까지의 목록은 크기가 서로 다른 적재 및 저장에 대해서는 제한된 전달을 허용한다. 워드 저장 또는 더블 저장이 워드로 정렬된다면, 그 저장 데이터는 워드 적재(이는 또한 첫 다섯 목록에 포함됨)뿐만 아니라 바이트 적재 및 반워드 적재에도 전달될 수 있다. 목록 6에서 10까지의 적용가능성을 검출하려면 그 마지막 두 비트를 제외한 적재와 저장사이의 정확한 실 주소 비교가 필요하다. 적재가 바이트 적재이면, 저장 워드는 그 적재에 전달될 수 있다. 적재가 반 워드이면, 그 저장 워드는 적재 주소의 마지막 두 비트가 '11'이 아닌 한 그 적재에 전달될 수 있다.
"규칙 e"의 첫 다섯 목록은 저장 전달을 수행하기 위하여 전혀 포맷팅을 요구하지 않는다. 각 실행 클러스터(307,308)에 대하여 12 포트 멀티플렉서(도시되어 있지 않음)가 전달할 저장 데이터 큐 엔트리를 선택한다. 전혀 포맷팅이 요구되지 않기 때문에 그 엔트리를 직접 결과버스(262)에 전송하라고 클러스터에 신호가 전송된다. 6에서 10까지의 목록은 저장 데이터가 결과 버스 상에 리턴되기 전에 0부터 3 바이트까지 쉬프트될 것을 요구할 수 있다. 이러한 규칙 하에서는 저장은 워드로 정렬되기 때문에, 제어 신호가 적재 주소에 의해 결정된 정확한 쉬프트 양에 대하여 이미 정확하게 구성되었다면 실행 클러스터는 L1 캐쉬의 출력으로부터 요구되는 것과 동일한 포맷터를 사용할 수 있다. 저장 전달 논리 회로는 단지 전달될 데이터가 있는 그대로 취급되어야만 하는 지를, 혹은 적재 포맷터가 적재 주소를 기반으로 하여 데이터를 쉬프트해야 하는지를 지시할 필요가 있을 뿐이다.
적재 히트 저장이 검출되었고 가장 젊은 위반한 저장이 결정된 때에, 대응하는 저장 데이터 큐 엔트리가 12 포트 멀티플렉서(도시되지 않음)에 의해 선택된다. 실행 클러스터(307,308)가 적재 히트 저장 조건 때문에 일단 정지된 때에는, 그 클러스터(307,308)는 저장 데이터 큐(304)로부터 유효한 데이터를 수신할 것이라고 가정한다. 상기 저장 전달 규칙이 만족되지 않으면, 저장 전달 논리 회로는 그 적재 인스트럭션에 대한 제거 신호를 송출할 것이다.
도 4는 저장 전달이 구현되지 않은 것으로 가정할 때 적재 히트 저장 검출에 대한 흐름도를 도시하고 있다. 도 5는 L1 캐쉬 히트 및 TSA(translation shadow array) 히트를 가정한 때 적재에 대한 가능한 타이밍도를 도시하고 있다. 적재의 실행 사이클동안에, 12 비트 유효 주소 중첩 비교가 적재와 저장 주소 큐(303)내의 모든 유효한 엔트리사이에서 일어난다. 실행 사이클 동안의 12 비트 유효 주소 중첩 비교에 의하면 변환된 주소가 사용될 수 있는 때 다음 사이클 동안 요구되는 비교 논리 회로를 최소화할 수 있다. 적재가 성공적으로 변환된다면, 다음 사이클에서 실 주소 비교가 수행된다. 이전 사이클에서 12 비트 중첩 유효 주소 비교가 수행된다는 사실 및 적재와 저장이 32 바이트 및 16 바이트 경계를 교차하는 때 그것이 다수의 적재 및 저장으로 분해된다는 사실 때문에, 단지 24 비트 페이지 주소 일치성 비교가 수행될 필요가 있을 뿐이다. 주소를 완전히 변환하기 전에 12 비트중첩 비교를 수행할 수 있다는 것은 12 비트 중첩 검사가 24 비트 일치성 비교보다 더 느린 크기 비교의 집합으로 구성되기 때문에 임계 경로 타이밍을 줄이게 된다. 비 순서적인 실행 머신에서 데드락을 피하기 위해서는, 저장 전달이 지원되지 않는 때, 적재가 저장 주소 큐(303)내의 저장과 중첩하면, 그 적재와 이에 후행하는 모든 인스트럭션 및 결과가 프로세서(210)로부터 제거된다.
도 6은 하나의 실시예에서 적재 히트 저장 시나리오를 검출하고 저장 전달을 구현하기 위한 흐름도를 도시하고 있다. 도 7은 그러한 적재 히트 저장 시나리오를 구비한 저장 전달에 대한 클럭 대 클럭 타이밍도를 도시하고 있다. 한 적재의 실행 사이클동안에, 12 비트 유효 비트 주소 중첩 비교가 적재와 저장 주소 큐(303)내의 모든 유효 엔트리사이에서 일어난다. 12 비트 유효 주소가 한 저장 주소 큐 엔트리와 일치하면, 실행 클러스터(307,308)는 정지된다(stalled). 실 주소가 일치하지 않으면, 이전 사이클에서 L1 캐쉬(310,311)로부터 적재된 데이터는 결과 버스(262)상에서 범용 레지스터(232)로 리턴된다. 실 주소가 일치하고 저장 전달 규칙이 만족되면, 저장 데이터가 적재에 전달된다. 실 주소가 일치하나 저장 전달 요구사항이 충족될 수 없으면, 적재는 제거된다.
불행하게도, 도 7에 도시된 바와 같이 경우 B는 실행 클러스터(307,308)로 하여금 실행 사이클동안 L1 캐쉬(310,311)로부터 적재된 데이터를 유지하다가 적재 히트 저장 조건이 거짓이면 다음 사이클에서 결과 버스(262)상으로 데이터를 전달하게 한다. 이는 이미 시간이 조정된 임계 경로에서 요구되는 사이클 시간의 증가를 야기한다. 탐구되었던 또 다른 선택 사양은 12 비트 유효 주소 중첩 비교를 사용하여 클러스터(307,308)가 정지되어야 하는지 그리고 다음 사이클 동안에, 저장 데이터 전달이 적재 요건을 충족할 수 없다면 적재가 제거될 것인지를 결정하는 것에 관련되었다. 이러한 선택 사항은 과도한 적재 제거를 야기하여 전체 성능을 감소시켰다.
본 발명은 대안적인 저장 전달 메커니즘을 구현하는데, 이 메커니즘은 이미 설계된 적재 히트 저장 하드웨어 상에서 구축된다. 저장 전달이 순 성능 이득을 야기하기 위해서는, 도 6 및 도 7에서의 실시예가 제시한 바와 같이 프로세서 사이클 시간은 연장될 수 없었다. 그러한 실시예는 적재 히트 저장이 결정되는 동안에 한 사이클 동안 적재의 결과를 유지하는 데이터플로우 경로를 요구한다. 이러한 데이터플로우 경로는 전 칩의 사이클 시간을 결정할 수 있고, 그래서 저장 전달을 수행키 위하여 경로를 연장하는 것은 전체 성능을 증가시키지 못한다. 실 주소 비교가 실행 후 그 사이클까지 일어나지 않을 것임에도 불구하고 적재 결과를 보류하는 것을 요구하지 않는 하나의 대안이 개발되었다. 실행 클러스터를 보류할 것인지 여부에 대한 결정은 그 실행 사이클 내에서 이루어지지만, 일단 실행 클러스터가 정지된(stalled) 때에는, 데이터가 저장 큐로부터 전달되어야 하든가 아니면 적재가 제거되어야만 한다.
이러한 대안적 실시예는 도 8 및 도 9에 도시되어 있다. 경우 A, B, C, D가 아래에서 더 기술된다. 그 실행 사이클동안, 12 비트 및 16 비트 유효 주소 중첩 비교가 모두 수행된다. 12 비트 유효 주소 중첩 비교가 모든 유효한 저장 주소 큐 엔트리에 대하여 거짓이면, 전혀 적재 히트 저장이 없으며 적재는 결과 버스(262)상에서 GPRs(232)로 데이터를 리턴할 수 있다. 12 비트 유효 주소가 한 저장 주소 큐 엔트리와 일치하지만, 16 비트 유효 주소가 치하지 않으면, 본 발명은 전혀 적재 히트 저장이 없으며 클러스터(307,308)는 보류되지 않다고 추측한다. 드물게 일어나는 가상 주소 대 실 주소 엘리어싱 사건에서는, 유효 주소가 첩하지 않으나 실 주소가 중첩하면, 적재는 제거된다. (왜냐하면, 실행 클러스터(307,308)가 보류되지 않았기 때문에, 프로세서(210)가 저장 데이터를 그 적재로 전달할 수 없다). 만약, 적재의 16 비트 유효 주소가 저장 주소 큐 엔트리와 일치하면, 실행 클러스터(307,308)는 적재 히트 저장 제거 또는 저장 데이터 전달 중 어느 하나를 기대하면서 보류된다. 다음 사이클에서 실 주소가 일치하면, 본 발명은 전달이 상기 기술된 규칙에 합치하는지 여부를 결정한다. 합치하지 않으면, 적재는 제거된다.
16 비트 유효 주소가 일치하지만, 실 주소가 일치하지 않으면, 적재 히트 저장 조건이 전혀 발생하지 않았음에도 불구하고 제거가 일어난다. 이는 잘못된 적재 히트 저장 검출을 일으키며, 인스트럭션 실행의 불필요한 취소를 야기한다. 본 발명은 4개의 여분의 유효 주소 비트를 비교하여 이러한 사건 발생을 줄인다. 이러한 잘못된 적재 히트 저장의 벌칙은 저장 전달의 발생에 의하여 얻어지는 성능보다 훨씬 적다. 결과적으로 저장 전달을 구현하면, 사이클 시간을 증가시키지 않고 실행될 수 있는 적재의 비율이 증가하게 된다. 따라서, 마이크로프로세서(210)의 전체 성능은 이러한 저장 전달의 구현에 의해 향상된다.
도 8내의 기호 1에 있어서, 적재 데이터는 이전 사이클동안에 정확하게 검색될 수 있었을 것이다. 하지만, 16 비트 유효 주소 비교 때문에, 프로세서는 잠재적인 적재 히트 저장 조건이 발생하였다고 결정하였으며, 실행 클러스터(307,308) ― 이 클러스터는 저장 유닛(302)으로 하여금 저장 데이터 큐(304)로부터 데이터를 전달하게 하거나 그 적재 인스트럭션을 제거하게 함 ― 를 보류시키기로 선택한다.
도 8내의 기호 2에 있어서, 16 비트 유효 주소가 중첩하지 않으나 실 주소가 중첩하는 때 주소 공간 엘리어싱이 발생한다. 프로세서(210)는 정확한 실행을 위하여 이러한 상황을 검출한다. 실행 클러스터(307,308)가 정지되지 않았기 때문에, 본 발명은 저장 데이터를 그 적재로 전달할 수 있는 선택권을 몰수한다. 하지만, 이런 상황은 극히 드물다.
12 비트 비교에서 사용되는 하위 주소는 변환에 의해 영향을 받지 아니하며, 일치되는 비트가 적다는 것은 적재 히트 저장 충돌 또는 저장 전달 기회가 전혀 없다는 것을 보장한다. 하지만, 16 비트 비교를 수행하는데 사용되는 나머지 비트는 변환된다. 따라서, 16 비트 비교의 결과로부터 발생하는 초기 단계는 본질적으로 추가적인 유효 주소 비트 사이의 일치(또는 비일치)가 양 주소에 대한 변환된 비트의 전 집합사이의 일치(또는 비일치)를 정확히 반영한다는 예측을 기반으로 한다. 이러한 예측이 부정확한 모든 경우에서, 그 적재 동작( 및 이에 후행하는 인스트럭션)은 제거되고 재인출되어, 잘못된 예측으로부터 회복하게 된다.
도 8 및 도 9에 도시된 경우는 다음과 같다.
경우 A - 전혀 적재와 저장이 중첩하지 않는다.
유효 주소의 하위 12 비트가 어떠한 저장 엔트리와 일치하지
않았거나,
하위 12 비트가 일치하였고, 유효 주소의 하위 16 비트가 일치하지 않았으며 다음 사이클에서 페이지 주소 비교가 그 저장 엔트리에 대하여 거짓이었다.
경우 B - 클러스터는 동작하지만 데이터를 전달할 수 없는 상태를 유지한다.
16 비트 유효 주소 중첩 비교가 참이나 데이터를 전달할 수 없다. -> 제거됨.
적재 히트 저장이면서 데이터를 전달할 수 없거나, 페이지 주소가 일치하지 않아서 데이터를 전달할 수 없다.
경우 C - 적재 히트 저장이면서 적재로의 저장 데이터 전달이 가능하다.
경우 D - 하위 16 비트 유효 주소가 일치하지 않는 적재 히트 저장이지만, 가상 주소 대 실 주소의 엘리어싱 때문에, 그 적재의 실 주소는 저장의 실 주소와 중첩한다. 실 주소가 등가이나, 유효 주소가 일치하지 않으면, 프로세서(210)는 이러한 드물게 발생하는 엘리어싱에서 사이클 시간 문제를 덜기 위하여 데이터를 전달하지 않는다.
본 발명 및 그 이점이 상세하기 기술되었지만, 첨부된 청구항에 의해 정의된 바와 같이 본 발명의 정신 및 범위로부터 벗어나지 않고 다양한 변화, 치환 및 변경이 이루어질 수 있음을 이해하여야 한다.
따라서, 본 발명에 의하면, 선행 저장 인스트럭션이 종료될 때까지 후행 적재 인스트럭션을 정지하거나 그 적재 인스트럭션 및 이에 후행하는 인스트럭션을 제거할 필요가 없게 된다.
Claims (20)
- 저장 인스트럭션으로부터 발생하는 데이터를 적재 인스트럭션으로 전달하기 위한 방법 - 상기 방법에서, 상기 저장 인스트럭션은 상기 적재 인스트럭션이 실행하고 있는 때에 아직 상기 데이터를 갱신하지 않았음 - 에 있어서,상기 적재 인스트럭션의 데이터 주소와 상기 저장 인스트럭션의 데이터 주소 사이에 공통적인 바이트가 존재하는지 여부를 결정하는 단계와,상기 적재 인스트럭션이 논리적으로 상기 저장 인스트럭션에 후행하는지 여부를 결정하는 단계와,상기 적재 인스트럭션의 상기 데이터 주소와 상기 저장 인스트럭션의 상기 데이터 주소 사이에 공통적인 바이트가 존재하고 상기 적재 인스트럭션이 논리적으로 상기 저장 인스트럭션에 후행한다면, 상기 적재 인스트럭션에 상기 데이터를 전달하는 단계를 포함하되,상기 적재 인스트럭션의 상기 데이터 주소와 상기 저장 인스트럭션의 상기 데이터 주소 사이에 공통적인 바이트가 존재하는지 여부를 결정하는 상기 단계가,상기 적재 인스트럭션과 상기 저장 인스트럭션의 유효 주소를 비교하는 단계와,상기 적재 인스트럭션과 상기 저장 인스트럭션의 실 주소를 비교하는 단계를 더 포함하는저장 인스트럭션으로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 1 항에 있어서,상기 유효 주소를 비교하는 단계가,상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 N 비트를 비교하는 단계와,상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 M 비트를 비교하는 단계 - 여기서, N은 M보다 작음 -를 더 포함하는 저장 인스트럭션으로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 시스템 버스를 경유하여 메모리에 연결된 프로세서를 포함하는 데이터 프로세싱 시스템 내에서,저장 인스트럭션을 저장 실행 유닛으로 디스패칭하는 단계와,상기 저장 실행 유닛 내에서 상기 저장 인스트럭션을 실행하는 단계와,상기 저장 인스트럭션의 상기 실행 후에 저장 주소 큐로 상기 저장 인스트럭션을 전송하는 단계 - 이 단계에서 상기 저장 인스트럭션과 연관되는 데이터는 저장 데이터 큐 내에 있게 됨 - 와,적재 인스트럭션을 적재 실행 유닛으로 디스패칭하는 단계 - 이 단계에서, 상기 적재 인스트럭션은 상기 저장 인스트럭션에 논리적으로 후행함 - 와,상기 적재 실행 유닛 내에서 상기 적재 인스트럭션을 실행하는 단계와,상기 적재 인스트럭션의 유효 주소와 상기 저장 인스트럭션의 유효 주소를 비교하는 단계와,상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하면 상기 적재 인스트럭션의 실 주소와 상기 저장 인스트럭션의 실 주소를 비교하는 단계와,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 상기 실 주소와 일치하면 상기 저장 데이터 큐로부터 상기 적재 인스트럭션으로 상기 데이터를 전달하는 단계를 포함하는 방법.
- 프로세서에 있어서,인스트럭션 디스패치 유닛과,상기 인스트럭션 디스패치 유닛으로부터 적재 인스트럭션을 수신하는 것에 대하여 동작할 수 있는 적재 실행 유닛과,상기 인스트럭션 디스패치 유닛으로부터 저장 인스트럭션을 수신하는 것에 대하여 동작할 수 있는 저장 실행 유닛과,상기 저장 실행 유닛에 연결된 저장 데이터 큐와,상기 저장 실행 유닛에 연결된 저장 주소 큐와,상기 저장 실행 유닛 내에서 상기 저장 인스트럭션을 실행하기 위한 회로와,상기 저장 인스트럭션의 상기 실행 후에 상기 저장 인스트럭션을 상기 저장 주소 큐로 전송하기 위한 회로 - 여기서 상기 저장 인스트럭션과 연관되는 데이터는 상기 저장 데이터 큐 내에 있게 됨 - 와,상기 적재 실행 유닛 내에서 상기 적재 인스트럭션을 실행하기 위한 회로와,상기 적재 인스트럭션의 주소와 상기 저장 인스트럭션의 주소를 비교하기 위한 회로와,상기 적재 인스트럭션의 상기 주소가 상기 저장 인스트럭션의 상기 주소와 일치하면 상기 저장 데이터 큐로부터 상기 적재 인스트럭션으로 상기 데이터를 전달하기 위한 회로를 포함하되,상기 비교 회로는상기 적재 인스트럭션의 유효 주소와 상기 저장 인스트럭션의 유효 주소를 비교하는 회로와,상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하면, 상기 적재 인스트럭션의 실 주소와 상기 저장 인스트럭션의 실 주소를 비교하는 회로 - 여기서 상기 데이터에 대한 상기 전달은 상기 실 주소들이 일치하면 수행됨 -를 더 포함하는 프로세서.는 프로세서.
- 프로세서 내에서, 적재 인스트럭션이 적재 실행 유닛 내에 실행되고 있는 동안에 저장 데이터 큐로부터의 데이터 및 저장 인스트럭션으로부터 발생한 데이터를 상기 적재 인스트럭션으로 전달하기 위한 방법에 있어서,상기 적재 인스트럭션의 유효 주소와 상기 저장 인스트럭션의 유효 주소사이에 공통적인 바이트가 존재하는지 여부를 결정하는 단계와,상기 적재 인스트럭션의 상기 유효 주소와 상기 저장 인스트럭션의 상기 유효 주소사이에 공통적인 바이트가 존재하면 상기 적재 실행 유닛내의 상기 적재 인스트럭션을 보류하는 단계와,상기 적재 인스트럭션의 실 주소가 상기 저장 인스트럭션의 실 주소와 일치하는지 여부를 결정하는 단계와,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 상기 실 주소와 일치하면 상기 적재 실행 유닛으로 상기 데이터를 전달하는 단계를 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 5 항에 있어서,상기 적재 인스트럭션이 상기 저장 인스트럭션에 논리적으로 후행하는지 여부를 결정하는 단계를 더 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 5 항에 있어서,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 실 주소와 일치하는지 여부를 결정하는 상기 단계가 상기 적재 인스트럭션의 상기 유효 주소와 상기 저장 인스트럭션의 상기 유효 주소사이에 공통적인 바이트가 존재하면 수행되는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 5 항에 있어서,상기 적재 인스트럭션의 상기 유효 주소와 상기 저장 인스트럭션의 상기 유효 주소 사이에 공통적인 바이트가 존재하는지 여부를 결정하는 상기 단계가,상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 N 비트를 비교하는 단계와,상기 하위 N 비트 사이에 일치가 있으면 상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 M 비트를 비교하는 단계 - 여기서, N은 M보다 작음 - 를 더 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 8 항에 있어서,상기 하위 N 비트가 일치하지 않으면 상기 적재 인스트럭션에 대한 정상적인 실행을 진행하는 단계를 더 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 8 항에 있어서,상기 하위 M 비트가 일치하지 않으면 상기 적재 인스트럭션에 대한 정상적인 실행을 진행하는 단계를 더 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 제 7 항에 있어서,상기 실 주소가 일치하지 않으면 상기 적재 인스트럭션을 제거하는 단계를 더 포함하는저장 인스트럭션 및 저장 데이터 큐로부터 적재 인스트럭션으로의 데이터 전달 방법.
- 프로세서 내에서,적재 인스트럭션의 유효 주소와 저장 인스트럭션의 유효 주소를 비교하는 단계와,상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하는지 여부의 함수로서 상기 적재 인스트럭션의 실 주소가 저장 인스트럭션의 실 주소와 일치할 것인지 여부를 예측하는 단계를 포함하는 방법.
- 제 12 항에 있어서,상기 예측 단계는 상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하면 상기 적재 인스트럭션의 상기 실 주소가 상기저장 인스트럭션의 상기 실 주소와 일치할 것인지를 예측하는 단계를 더 포함하는 방법.
- 제 13 항에 있어서,상기 적재 인스트럭션은 적재 실행 유닛에 의하여 실행되고 있고, 상기 방법은 상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하면 상기 적재 인스트럭션의 실행을 보류하는 단계를 더 포함하는 방법.
- 제 14 항에 있어서,상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하지 않는다면 상기 적재 인스트럭션에 대한 정상적인 실행을 진행하는 단계를 더 포함하는 방법.
- 제 14 항에 있어서,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 실 주소와 일치하지 않으면 상기 적재 인스트럭션을 제거하는 단계를 더 포함하는 방법.
- 제 14 항에 있어서,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 상기 실 주소와 일치하는 때에 상기 저장 인스트럭션과 연관된 데이터를 상기 적재 실행 유닛으로 전달하는 단계를 더 포함하는 방법.
- 제 13 항에 있어서,상기 적재 인스트럭션의 상기 유효 주소와 상기 저장 인스트럭션의 상기 유효 주소를 비교하는 단계가,상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 N 비트를 비교하는 단계와,상기 N 비트가 일치하면, 상기 적재 인스트럭션 및 상기 저장 인스트럭션의 상기 유효 주소의 하위 M 비트를 비교하는 단계 ― 여기서, N은 M보다 작음 ―를 더 포함하는 방법.
- 제 12 항에 있어서,상기 예측 단계가 상기 적재 인스트럭션의 상기 실 주소가 상기 적재 인스트럭션의 상기 유효 주소가 상기 저장 인스트럭션의 상기 유효 주소와 일치하지 않으면 상기 저장 인스트럭션의 상기 실 주소와 일치하지 않을 것이라고 예측하는 단계를 더 포함하는 방법.
- 제 19 항에 있어서,상기 적재 인스트럭션의 상기 실 주소가 상기 저장 인스트럭션의 상기 실 주소와 일치하면 상기 적재 인스트럭션을 제거하는 단계를 더 포함하는 방법.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US8/826,854 | 1997-04-10 | ||
US08/826,854 US6021485A (en) | 1997-04-10 | 1997-04-10 | Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching |
US08/826,854 | 1997-04-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR19980079702A KR19980079702A (ko) | 1998-11-25 |
KR100303673B1 true KR100303673B1 (ko) | 2001-09-24 |
Family
ID=25247703
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1019980003886A KR100303673B1 (ko) | 1997-04-10 | 1998-02-10 | 저장인스트럭션의결과전달방법및이를구현한프로세서 |
Country Status (11)
Country | Link |
---|---|
US (1) | US6021485A (ko) |
EP (1) | EP0871109B1 (ko) |
JP (1) | JP3096451B2 (ko) |
KR (1) | KR100303673B1 (ko) |
CN (1) | CN1095117C (ko) |
AT (1) | ATE242509T1 (ko) |
BR (1) | BR9801230A (ko) |
DE (1) | DE69815201D1 (ko) |
IL (1) | IL123426A (ko) |
MY (1) | MY121300A (ko) |
TW (1) | TW360848B (ko) |
Families Citing this family (79)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR19990003937A (ko) * | 1997-06-26 | 1999-01-15 | 김영환 | 프리페치 장치 |
US6308260B1 (en) * | 1998-09-17 | 2001-10-23 | International Business Machines Corporation | Mechanism for self-initiated instruction issuing and method therefor |
US6141747A (en) * | 1998-09-22 | 2000-10-31 | Advanced Micro Devices, Inc. | System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word |
US7779236B1 (en) * | 1998-12-31 | 2010-08-17 | Stmicroelectronics, Inc. | Symbolic store-load bypass |
US6349382B1 (en) * | 1999-03-05 | 2002-02-19 | International Business Machines Corporation | System for store forwarding assigning load and store instructions to groups and reorder queues to keep track of program order |
EP1050807A1 (en) * | 1999-05-03 | 2000-11-08 | Sgs Thomson Microelectronics Sa | Memory access in a computer memory |
US6523109B1 (en) | 1999-10-25 | 2003-02-18 | Advanced Micro Devices, Inc. | Store queue multimatch detection |
US6481251B1 (en) | 1999-10-25 | 2002-11-19 | Advanced Micro Devices, Inc. | Store queue number assignment and tracking |
US6717577B1 (en) * | 1999-10-28 | 2004-04-06 | Nintendo Co., Ltd. | Vertex cache for 3D computer graphics |
US6662280B1 (en) | 1999-11-10 | 2003-12-09 | Advanced Micro Devices, Inc. | Store buffer which forwards data based on index and optional way match |
US6970996B1 (en) * | 2000-01-04 | 2005-11-29 | National Semiconductor Corporation | Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation |
US6640293B1 (en) * | 2000-07-24 | 2003-10-28 | International Business Machines Corporation | Apparatus and method of utilizing Alias Hit signals to detect errors within the real address tag arrays |
US6678807B2 (en) * | 2000-12-21 | 2004-01-13 | Intel Corporation | System and method for multiple store buffer forwarding in a system with a restrictive memory model |
US6941449B2 (en) * | 2002-03-04 | 2005-09-06 | Hewlett-Packard Development Company, L.P. | Method and apparatus for performing critical tasks using speculative operations |
US20030177312A1 (en) * | 2002-03-15 | 2003-09-18 | Aravindh Baktha | Controlling a store data forwarding mechanism during execution of a load operation |
US7028166B2 (en) * | 2002-04-30 | 2006-04-11 | Advanced Micro Devices, Inc. | System and method for linking speculative results of load operations to register values |
US7222226B1 (en) | 2002-04-30 | 2007-05-22 | Advanced Micro Devices, Inc. | System and method for modifying a load operation to include a register-to-register move operation in order to forward speculative load results to a dependent operation |
US7089400B1 (en) | 2002-08-29 | 2006-08-08 | Advanced Micro Devices, Inc. | Data speculation based on stack-relative addressing patterns |
US7024537B2 (en) * | 2003-01-21 | 2006-04-04 | Advanced Micro Devices, Inc. | Data speculation based on addressing patterns identifying dual-purpose register |
US7434031B1 (en) * | 2004-04-12 | 2008-10-07 | Sun Microsystems, Inc. | Execution displacement read-write alias prediction |
US7263600B2 (en) * | 2004-05-05 | 2007-08-28 | Advanced Micro Devices, Inc. | System and method for validating a memory file that links speculative results of load operations to register values |
US7376816B2 (en) * | 2004-11-12 | 2008-05-20 | International Business Machines Corporation | Method and systems for executing load instructions that achieve sequential load consistency |
US7363468B2 (en) | 2004-11-18 | 2008-04-22 | International Business Machines Corporation | Load address dependency mechanism system and method in a high frequency, low power processor system |
US7900023B2 (en) * | 2004-12-16 | 2011-03-01 | Intel Corporation | Technique to enable store forwarding during long latency instruction execution |
US7376817B2 (en) * | 2005-08-10 | 2008-05-20 | P.A. Semi, Inc. | Partial load/store forward prediction |
US20070288725A1 (en) * | 2006-06-07 | 2007-12-13 | Luick David A | A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism |
US7461238B2 (en) * | 2006-06-07 | 2008-12-02 | International Business Machines Corporation | Simple load and store disambiguation and scheduling at predecode |
US7600097B1 (en) * | 2006-09-05 | 2009-10-06 | Sun Microsystems, Inc. | Detecting raw hazards in an object-addressed memory hierarchy by comparing an object identifier and offset for a load instruction to object identifiers and offsets in a store queue |
US7594100B2 (en) * | 2006-09-29 | 2009-09-22 | Sun Microsystems, Inc. | Efficient store queue architecture |
US8627047B2 (en) * | 2008-02-15 | 2014-01-07 | International Business Machines Corporation | Store data forwarding with no memory model restrictions |
EP2202637B1 (en) * | 2008-12-25 | 2018-02-07 | STMicroelectronics (Beijing) R&D Co. Ltd. | Reduced power load/store queue searching mechanism |
US8086826B2 (en) * | 2009-03-24 | 2011-12-27 | International Business Machines Corporation | Dependency tracking for enabling successive processor instructions to issue |
WO2012107800A1 (en) * | 2011-02-11 | 2012-08-16 | Freescale Semiconductor, Inc. | Integrated circuit devices and methods for scheduling and executing a restricted load operation |
US9069563B2 (en) | 2011-09-16 | 2015-06-30 | International Business Machines Corporation | Reducing store-hit-loads in an out-of-order processor |
CN102364431B (zh) * | 2011-10-20 | 2014-09-10 | 北京北大众志微系统科技有限责任公司 | 一种实现读指令执行的方法及装置 |
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 |
EP2862061A4 (en) | 2012-06-15 | 2016-12-21 | Soft Machines Inc | MEMORY PRECISION FOR VIRTUAL LOAD WITH DYNAMIC SHIPPING WINDOW WITH UNIFORM STRUCTURE |
EP2862062B1 (en) | 2012-06-15 | 2024-03-06 | Intel Corporation | A virtual load store queue having a dynamic dispatch window with a distributed structure |
KR101667167B1 (ko) * | 2012-06-15 | 2016-10-17 | 소프트 머신즈, 인크. | Load store 재정렬 및 최적화로부터 생기는 투기적 포워딩 예측 착오/오류로부터의 복원을 구현하는 방법 및 시스템 |
KR101818967B1 (ko) | 2012-06-15 | 2018-01-16 | 인텔 코포레이션 | 명확화 없는 비순차 load store 큐 |
CN104583957B (zh) | 2012-06-15 | 2018-08-10 | 英特尔公司 | 具有无消歧乱序加载存储队列的重新排序的推测性指令序列 |
KR101826399B1 (ko) | 2012-06-15 | 2018-02-06 | 인텔 코포레이션 | Load store 재정렬 및 최적화를 구현하는 명령어 정의 |
US9003225B2 (en) * | 2012-10-17 | 2015-04-07 | Advanced Micro Devices, Inc. | Confirming store-to-load forwards |
US8977821B2 (en) * | 2012-10-25 | 2015-03-10 | Texas Instruments Incorporated | Parallel processing of multiple block coherence operations |
US9535695B2 (en) * | 2013-01-25 | 2017-01-03 | Apple Inc. | Completing load and store instructions in a weakly-ordered memory model |
US9361113B2 (en) | 2013-04-24 | 2016-06-07 | Globalfoundries Inc. | Simultaneous finish of stores and dependent loads |
US9665468B2 (en) | 2013-08-19 | 2017-05-30 | Intel Corporation | Systems and methods for invasive debug of a processor without processor execution of instructions |
US9632947B2 (en) * | 2013-08-19 | 2017-04-25 | Intel Corporation | Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early |
US9619382B2 (en) | 2013-08-19 | 2017-04-11 | Intel Corporation | Systems and methods for read request bypassing a last level cache that interfaces with an external fabric |
US9361227B2 (en) | 2013-08-30 | 2016-06-07 | Soft Machines, Inc. | Systems and methods for faster read after write forwarding using a virtual address |
US10303480B2 (en) * | 2013-10-30 | 2019-05-28 | Advanced Micro Devices | Unified store queue for reducing linear aliasing effects |
US9710268B2 (en) | 2014-04-29 | 2017-07-18 | Apple Inc. | Reducing latency for pointer chasing loads |
US9940264B2 (en) * | 2014-10-10 | 2018-04-10 | International Business Machines Corporation | Load and store ordering for a strongly ordered simultaneous multithreading core |
US9996356B2 (en) * | 2015-12-26 | 2018-06-12 | Intel Corporation | Method and apparatus for recovering from bad store-to-load forwarding in an out-of-order processor |
US10514925B1 (en) | 2016-01-28 | 2019-12-24 | Apple Inc. | Load speculation recovery |
US9983875B2 (en) | 2016-03-04 | 2018-05-29 | International Business Machines Corporation | Operation of a multi-slice processor preventing early dependent instruction wakeup |
US10437595B1 (en) | 2016-03-15 | 2019-10-08 | Apple Inc. | Load/store dependency predictor optimization for replayed loads |
US10037211B2 (en) | 2016-03-22 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor with an expanded merge fetching queue |
US10346174B2 (en) | 2016-03-24 | 2019-07-09 | International Business Machines Corporation | Operation of a multi-slice processor with dynamic canceling of partial loads |
US10761854B2 (en) * | 2016-04-19 | 2020-09-01 | International Business Machines Corporation | Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor |
US10037229B2 (en) | 2016-05-11 | 2018-07-31 | International Business Machines Corporation | Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions |
US9934033B2 (en) | 2016-06-13 | 2018-04-03 | International Business Machines Corporation | Operation of a multi-slice processor implementing simultaneous two-target loads and stores |
US10042647B2 (en) | 2016-06-27 | 2018-08-07 | International Business Machines Corporation | Managing a divided load reorder queue |
US10318419B2 (en) | 2016-08-08 | 2019-06-11 | International Business Machines Corporation | Flush avoidance in a load store unit |
US11175924B2 (en) | 2017-10-06 | 2021-11-16 | International Business Machines Corporation | Load-store unit with partitioned reorder queues with single cam port |
US10579387B2 (en) * | 2017-10-06 | 2020-03-03 | International Business Machines Corporation | Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor |
US10417002B2 (en) * | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
US10394558B2 (en) | 2017-10-06 | 2019-08-27 | International Business Machines Corporation | Executing load-store operations without address translation hardware per load-store unit port |
US10534616B2 (en) * | 2017-10-06 | 2020-01-14 | International Business Machines Corporation | Load-hit-load detection in an out-of-order processor |
US10606591B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10606590B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Effective address based load store unit in out of order processors |
US10572256B2 (en) | 2017-10-06 | 2020-02-25 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US11113065B2 (en) * | 2019-04-03 | 2021-09-07 | Advanced Micro Devices, Inc. | Speculative instruction wakeup to tolerate draining delay of memory ordering violation check buffers |
CN112445587A (zh) * | 2019-08-30 | 2021-03-05 | 上海华为技术有限公司 | 一种任务处理的方法以及任务处理装置 |
US11113056B2 (en) * | 2019-11-27 | 2021-09-07 | Advanced Micro Devices, Inc. | Techniques for performing store-to-load forwarding |
US11687337B2 (en) * | 2021-08-20 | 2023-06-27 | International Business Machines Corporation | Processor overriding of a false load-hit-store detection |
CN113961247B (zh) * | 2021-09-24 | 2022-10-11 | 北京睿芯众核科技有限公司 | 一种基于risc-v处理器的向量存/取指令执行方法、系统及装置 |
CN117478089B (zh) * | 2023-12-28 | 2024-03-29 | 北京微核芯科技有限公司 | 存数指令执行方法、装置及电子设备 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO1994008287A1 (en) * | 1992-09-29 | 1994-04-14 | Seiko Epson Corporation | System and method for handling load and/or store operations in a superscalar microprocessor |
US5467473A (en) * | 1993-01-08 | 1995-11-14 | International Business Machines Corporation | Out of order instruction load and store comparison |
US5588126A (en) * | 1993-12-30 | 1996-12-24 | Intel Corporation | Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system |
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 |
US5784586A (en) * | 1995-02-14 | 1998-07-21 | Fujitsu Limited | Addressing method for executing load instructions out of order with respect to store instructions |
US5754812A (en) * | 1995-10-06 | 1998-05-19 | Advanced Micro Devices, Inc. | Out-of-order load/store execution control |
US5751946A (en) * | 1996-01-18 | 1998-05-12 | International Business Machines Corporation | Method and system for detecting bypass error conditions in a load/store unit of a superscalar processor |
US6047367A (en) * | 1998-01-20 | 2000-04-04 | International Business Machines Corporation | Microprocessor with improved out of order support |
-
1997
- 1997-04-10 US US08/826,854 patent/US6021485A/en not_active Expired - Fee Related
- 1997-10-13 TW TW086114953A patent/TW360848B/zh active
-
1998
- 1998-02-10 KR KR1019980003886A patent/KR100303673B1/ko not_active IP Right Cessation
- 1998-02-24 IL IL12342698A patent/IL123426A/en not_active IP Right Cessation
- 1998-03-04 MY MYPI98000941A patent/MY121300A/en unknown
- 1998-03-06 EP EP98301659A patent/EP0871109B1/en not_active Expired - Lifetime
- 1998-03-06 AT AT98301659T patent/ATE242509T1/de not_active IP Right Cessation
- 1998-03-06 DE DE69815201T patent/DE69815201D1/de not_active Expired - Lifetime
- 1998-03-19 CN CN98105772A patent/CN1095117C/zh not_active Expired - Fee Related
- 1998-04-03 JP JP10091330A patent/JP3096451B2/ja not_active Expired - Fee Related
- 1998-04-03 BR BR9801230A patent/BR9801230A/pt not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
BR9801230A (pt) | 1999-04-27 |
KR19980079702A (ko) | 1998-11-25 |
US6021485A (en) | 2000-02-01 |
EP0871109B1 (en) | 2003-06-04 |
EP0871109A3 (en) | 2000-12-06 |
TW360848B (en) | 1999-06-11 |
EP0871109A2 (en) | 1998-10-14 |
ATE242509T1 (de) | 2003-06-15 |
CN1095117C (zh) | 2002-11-27 |
MY121300A (en) | 2006-01-28 |
IL123426A0 (en) | 1998-09-24 |
IL123426A (en) | 2001-04-30 |
DE69815201D1 (de) | 2003-07-10 |
JP3096451B2 (ja) | 2000-10-10 |
JPH10320198A (ja) | 1998-12-04 |
CN1195809A (zh) | 1998-10-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100303673B1 (ko) | 저장인스트럭션의결과전달방법및이를구현한프로세서 | |
KR100708010B1 (ko) | 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼 | |
US6065103A (en) | Speculative store buffer | |
EP2674856B1 (en) | Zero cycle load instruction | |
US5751983A (en) | Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations | |
US6442707B1 (en) | Alternate fault handler | |
KR100559482B1 (ko) | 고성능 알아이에스씨 마이크로프로세서 구조 | |
US7133969B2 (en) | System and method for handling exceptional instructions in a trace cache based processor | |
US8255670B2 (en) | Replay reduction for power saving | |
US5931957A (en) | Support for out-of-order execution of loads and stores in a processor | |
US6622237B1 (en) | Store to load forward predictor training using delta tag | |
US6651161B1 (en) | Store load forward predictor untraining | |
US6609190B1 (en) | Microprocessor with primary and secondary issue queue | |
US6694424B1 (en) | Store load forward predictor training | |
EP0381470A2 (en) | Processing of memory access exceptions along with prefetched instructions within the instruction pipeline of a virtual memory system-based digital computer | |
US20070038846A1 (en) | Partial load/store forward prediction | |
US20020069326A1 (en) | Pipelined non-blocking level two cache system with inherent transaction collision-avoidance | |
KR100407014B1 (ko) | 명령어 히스토리 정보를 갖는 기본 블럭 캐쉬마이크로프로세서 | |
EP3171264B1 (en) | System and method of speculative parallel execution of cache line unaligned load instructions | |
JP2003523574A (ja) | 2次リオーダ・バッファ・マイクロプロセッサ | |
US6704854B1 (en) | Determination of execution resource allocation based on concurrently executable misaligned memory operations | |
US7321964B2 (en) | Store-to-load forwarding buffer using indexed lookup | |
KR20020096252A (ko) | 프로세서에서의 명령 실행 방법, 컴퓨터 시스템에사용하기 위한 프로세서 및 데이터 처리 시스템 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20040510 Year of fee payment: 4 |
|
LAPS | Lapse due to unpaid annual fee |