KR20240124412A - Conditional instruction prediction - Google Patents
Conditional instruction prediction Download PDFInfo
- Publication number
- KR20240124412A KR20240124412A KR1020247025880A KR20247025880A KR20240124412A KR 20240124412 A KR20240124412 A KR 20240124412A KR 1020247025880 A KR1020247025880 A KR 1020247025880A KR 20247025880 A KR20247025880 A KR 20247025880A KR 20240124412 A KR20240124412 A KR 20240124412A
- Authority
- KR
- South Korea
- Prior art keywords
- instruction
- prediction
- bias
- conditional instruction
- conditional
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 44
- 230000004044 response Effects 0.000 claims abstract description 30
- 238000009826 distribution Methods 0.000 claims description 55
- 238000012545 processing Methods 0.000 claims description 22
- 230000006870 function Effects 0.000 claims description 20
- 230000008569 process Effects 0.000 abstract description 20
- 230000000875 corresponding effect Effects 0.000 description 32
- 238000003860 storage Methods 0.000 description 25
- 238000010586 diagram Methods 0.000 description 21
- 230000002093 peripheral effect Effects 0.000 description 20
- 230000008859 change Effects 0.000 description 18
- 238000011156 evaluation Methods 0.000 description 17
- 230000008901 benefit Effects 0.000 description 16
- 238000004891 communication Methods 0.000 description 11
- 238000007667 floating Methods 0.000 description 8
- PJYSOYLLTJKZHC-GUBZILKMSA-N Leu-Asp-Gln Chemical compound CC(C)C[C@H](N)C(=O)N[C@@H](CC(O)=O)C(=O)N[C@H](C(O)=O)CCC(N)=O PJYSOYLLTJKZHC-GUBZILKMSA-N 0.000 description 7
- 238000013461 design Methods 0.000 description 7
- 230000001419 dependent effect Effects 0.000 description 6
- 230000036541 health Effects 0.000 description 6
- 238000012986 modification Methods 0.000 description 6
- 230000004048 modification Effects 0.000 description 6
- 239000000872 buffer Substances 0.000 description 5
- 239000004744 fabric Substances 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 4
- 229920006395 saturated elastomer Polymers 0.000 description 4
- 230000003542 behavioural effect Effects 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012806 monitoring device Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 238000003786 synthesis reaction Methods 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 2
- 238000001816 cooling Methods 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 101100498818 Arabidopsis thaliana DDR4 gene Proteins 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 238000011010 flushing procedure Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000010438 heat treatment Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 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/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch instructions
-
- 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/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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
- G06F9/3844—Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables
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)
Abstract
프로세서는 조건부 명령어에 대한 각자의 예측들을 제공하기 위한 바이어스 예측 회로 및 명령어 예측 회로를 포함할 수 있다. 바이어스 예측 회로는 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인지 여부의 바이어스 예측을 제공할 수 있다. 명령어 예측 회로는 조건부 명령어의 조건이 거짓의 참인지 여부의 명령어 예측을 제공할 수 있다. 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이라는 바이어스 예측에 응답하여, 프로세서는 바이어스 예측 회로로부터의 바이어스 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다. 그렇지 않으면, 프로세서는 명령어 예측 회로로부터의 명령어 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다.The processor can include bias prediction circuitry and instruction prediction circuitry for providing respective predictions for conditional instructions. The bias prediction circuitry can provide a bias prediction of whether the condition of the conditional instruction is biased true or biased false. The instruction prediction circuitry can provide an instruction prediction of whether the condition of the conditional instruction is false true. In response to a bias prediction that the condition of the conditional instruction is biased true or biased false, the processor can speculatively process the conditional instruction using the bias prediction from the bias prediction circuitry. Otherwise, the processor can speculatively process the conditional instruction using the instruction prediction from the instruction prediction circuitry.
Description
본 명세서에 설명된 실시예들은 프로세서에 관한 것으로, 보다 상세하게는, 조건부 명령어들의 결과들을 예측하고/하거나 예측들에 따라 조건부 명령어들을 프로세싱하기 위한 회로(들)를 포함하는 프로세서에 관한 것이다.Embodiments described herein relate to a processor, and more particularly, to a processor including circuitry for predicting results of conditional instructions and/or processing the conditional instructions in accordance with the predictions.
컴퓨팅 시스템들은 일반적으로 중앙 프로세싱 유닛(CPU)들로서 기능하는 하나 이상의 프로세서들을 포함한다. CPU들은 다양한 주변기기들의 동작을 제어하는 제어 소프트웨어(예컨대, 운영 체제)를 실행한다. CPU들은 또한, 시스템에서 사용자 기능을 제공하는 애플리케이션들을 실행할 수 있다. 때때로, 프로세서는 다수의 스테이지들을 포함하는 명령어 파이프라인을 구현할 수 있으며, 여기서 명령어들은 파이프라인의 대응하는 스테이지들에서 개별적으로 실행되는 일련의 단계들로 분할된다. 결과적으로, 명령어 파이프라인은 다수의 명령어들을 병렬로 실행할 수 있다. 효율을 향상시키기 위해, 프로세서는 조건부 명령어들의 조건을 예측할 수 있는 조건부 명령어 예측 회로("조건부 명령어 예측기"로도 칭해짐)를 추가로 구현할 수 있다. 예측들에 기초하여, 프로세서는 실행을 위해 타깃 어드레스들로부터 명령어들을 추론적으로 페치할 수 있다. 그러나, 조건부 명령어가 잘못 예측되는(mispredicted) 경우, 추론적 작업은 폐기되어야 하고, 프로세서는 실행을 위해 올바른 타깃 어드레스들로부터 명령어들을 리페치(re-fetch)해야 할 수 있다. 따라서, 조건부 명령어들의 예측들의 정확도는 프로세서들의 성능에 중요한 역할을 할 수 있으며, 따라서 예측 정확도를 향상시키기 위한 기술들을 갖는 것이 바람직해진다. 또한, 실행 파이프라인들의 폭 및 깊이가 증가함에 따라, 프로세서는 한 사이클에서 다수의 조건부 명령어들 및/또는 예측 오류(misprediction)들을 프로세싱할 수 있다. 따라서, 프로세서들에서 조건부 명령어 프로세싱의 효율을 향상시키기 위한 기술들을 갖는 것이 또한 바람직하다.Computing systems typically include one or more processors that function as central processing units (CPUs). The CPUs execute control software (e.g., an operating system) that controls the operation of various peripherals. The CPUs may also execute applications that provide user functionality in the system. Sometimes, a processor may implement an instruction pipeline comprising multiple stages, where instructions are divided into a series of steps that are individually executed in corresponding stages of the pipeline. As a result, the instruction pipeline may execute multiple instructions in parallel. To improve efficiency, the processor may additionally implement conditional instruction prediction circuitry (also called a "conditional instruction predictor") that can predict the conditions of conditional instructions. Based on the predictions, the processor may speculatively fetch instructions from target addresses for execution. However, if a conditional instruction is mispredicted, the speculative work may be abandoned, and the processor may have to re-fetch instructions from the correct target addresses for execution. Therefore, the accuracy of predictions of conditional instructions can play a significant role in the performance of processors, and therefore it is desirable to have techniques for improving prediction accuracy. In addition, as the width and depth of execution pipelines increase, a processor may process a large number of conditional instructions and/or mispredictions in one cycle. Therefore, it is also desirable to have techniques for improving the efficiency of conditional instruction processing in processors.
이하의 상세한 설명은 이제 간략하게 설명되는 첨부 도면들을 참조한다.
도 1은 바이어스 예측 회로 및 명령어 예측 회로를 포함하는 프로세서의 일부의 일 실시예의 블록도이다.
도 2a는 바이어스 예측 회로의 바이어스 테이블의 일 실시예를 도시한다.
도 2b는 명령어 예측 회로의 기본 테이블의 일 실시예를 도시한다.
도 3a는 바이어스 예측 회로의 동작들의 일 실시예의 블록도이다.
도 3b는 명령어 예측 회로의 동작들의 일 실시예의 블록도이다.
도 4는 바이어스 예측 회로 및 명령어 예측 회로를 포함하는 프로세서의 동작들의 일 실시예를 예시하는 흐름도이다.
도 5는 명령어 분배 회로 및 복수의 실행 파이프라인들을 포함하는 프로세서의 일부의 일 실시예의 블록도이다.
도 6은 명령어 분배 회로 및 복수의 실행 파이프라인들을 포함하는 프로세서의 동작들의 일 실시예를 예시하는 흐름도이다.
도 7은 명령어 분배 회로 및 복수의 실행 파이프라인들을 포함하는 프로세서의 일부의 다른 실시예의 블록도이다.
도 8은 명령어 분배 회로 및 복수의 실행 파이프라인들을 포함하는 프로세서의 동작들의 다른 실시예를 예시하는 흐름도이다.
도 9는 바이어스 예측 회로, 명령어 예측 회로 및/또는 명령어 분배 회로를 포함하는, 도 1 내지 도 8에 도시된 프로세서의 일 실시예의 블록도이다.
도 10은 도 9에 도시된 하나 이상의 프로세서들을 포함할 수 있는 시스템 온 칩(system on a chip, SOC)의 일 실시예의 블록도이다.
도 11은 다양한 상황들에서 사용되는 시스템의 일 실시예의 블록도이다.
도 12는 컴퓨터 액세스가능 저장 매체의 블록도이다.
본 개시에 설명된 실시예들은 다양한 수정들 및 대안적인 형태들을 취할 수 있지만, 그 특정 실시예들이 도면들에 예시의 방식으로 도시되어 있으며 본 명세서에서 상세히 설명될 것이다. 그러나, 도면들 및 그에 대한 상세한 설명은 실시예들을 개시된 특정 형태로 제한하려고 의도된 것이 아니고, 반대로 첨부된 청구범위의 사상 및 범위에 속하는 모든 수정들, 등가물들, 대안들을 포괄하려는 의도인 것으로 이해되어야 한다. 본 명세서에서 사용되는 표제들은 오직 구성 목적들을 위한 것이며 설명의 범주를 제한하기 위해 사용되는 것으로 의도되지 않는다.The detailed description below refers to the accompanying drawings, which are now briefly described.
FIG. 1 is a block diagram of one embodiment of a portion of a processor including a bias prediction circuit and an instruction prediction circuit.
FIG. 2a illustrates one embodiment of a bias table of a bias prediction circuit.
FIG. 2b illustrates one embodiment of a basic table of an instruction prediction circuit.
FIG. 3a is a block diagram of one embodiment of the operations of a bias prediction circuit.
FIG. 3b is a block diagram of one embodiment of the operations of the instruction prediction circuit.
FIG. 4 is a flowchart illustrating one embodiment of the operations of a processor including a bias prediction circuit and an instruction prediction circuit.
FIG. 5 is a block diagram of one embodiment of a portion of a processor including an instruction distribution circuit and a plurality of execution pipelines.
FIG. 6 is a flow diagram illustrating one embodiment of the operations of a processor including an instruction distribution circuit and a plurality of execution pipelines.
FIG. 7 is a block diagram of another embodiment of a portion of a processor including an instruction distribution circuit and a plurality of execution pipelines.
FIG. 8 is a flow diagram illustrating another embodiment of the operations of a processor including an instruction distribution circuit and a plurality of execution pipelines.
FIG. 9 is a block diagram of one embodiment of the processor illustrated in FIGS. 1 through 8, including a bias prediction circuit, an instruction prediction circuit, and/or an instruction distribution circuit.
FIG. 10 is a block diagram of one embodiment of a system on a chip (SOC) that may include one or more processors illustrated in FIG. 9.
FIG. 11 is a block diagram of one embodiment of a system used in various situations.
Figure 12 is a block diagram of a computer-accessible storage medium.
While the embodiments described herein may take various modifications and alternative forms, specific embodiments thereof have been shown by way of example in the drawings and will herein be described in detail. It should be understood, however, that the drawings and detailed description thereof are not intended to limit the embodiments to the particular forms disclosed, but on the contrary, the intention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the appended claims. The headings used herein are for organizational purposes only and are not intended to be used to limit the scope of the description.
이제 도 1을 참조하면, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)를 포함하는 프로세서(30)의 일부의 일 실시예의 블록도가 도시된다. 예시된 실시예에서, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)는 프로세서(30)의 페치 및 디코드 회로(100)의 일부로서 구현될 수 있다. 대안적으로, 일부 다른 실시예들에서, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는 페치 및 디코드 회로(100)와 분리된 컴포넌트(들)로서 구현될 수 있다.Referring now to FIG. 1, a block diagram of one embodiment of a portion of a processor (30) including a bias prediction circuit (156) and an instruction prediction circuit (160) is illustrated. In the illustrated embodiment, the bias prediction circuit (156) and the instruction prediction circuit (160) may be implemented as part of the fetch and decode circuit (100) of the processor (30). Alternatively, in some other embodiments, the bias prediction circuit (156) and/or the instruction prediction circuit (160) may be implemented as separate component(s) from the fetch and decode circuit (100).
도 1에 나타낸 바와 같이, 예시된 실시예에서, 페치 및 디코드 회로(100)는 여러 스테이지들을 갖는 파이프라인을 구현할 수 있다. 예를 들어, 명령어를 프로세싱하기 위해, 페치 및 디코드 회로(100)는 먼저 프리페치 회로(150)를 사용하여 메모리 또는 캐시(12)로부터 명령어 캐시(Icache)(102)(이하, "프리페치" 스테이지로 명명됨)로 명령어를 로딩할 수 있다. 다음으로, 명령어는 페치 회로(152)에 의해 Icache(102)로부터 디코딩을 위한 디코더(154)로 페치될 수 있다(이하, "페치" 스테이지로 명명됨). 디코더(154)는 명령어를 디코딩하고, 이를 동작(들) 및/또는 마이크로-동작(들)으로 변환하고(이하, "디코딩" 스테이지로 칭해짐), 실행을 위해 동작(들) 및/또는 마이크로-동작(들)을 실행 파이프라인(164)으로 전송할 수 있다. 때때로, Icache(102)가 메모리 또는 캐시(12)로부터 이전에 로딩된 명령어를 Icache(102)에 저장할 때, 명령어가 Icache(102)에 이미 존재할 수 있다는 점에 유의한다. 그 경우, 프리페치 스테이지는 회피될 수 있고, 명령어는 실행을 위해 Icache(102)로부터 직접 페치될 수 있다. 예시된 실시예에서, 실행 파이프라인(164)은 도 9에서 설명되는 실행 유닛(112)(예를 들어, 정수, 부동 소수점, 및/또는 벡터 실행 유닛) 및 연관된 예비 스테이션(reservation station)(110)을 사용하여 구현될 수 있다. 또한, 예시의 목적으로, 도 1은 반드시 프로세서(30)의 모든 컴포넌트들을 묘사하는 것은 아닐 수 있다. 예를 들어, 때때로 페치 및 디코드 회로(100)는 반드시 실행 파이프라인(112)에 직접 커플링되는 것은 아닐 수 있다. 대신에, 그 사이에 하나 이상의 다른 컴포넌트들이 있을 수 있다. 예를 들어, 때때로 프로세서(30)는 페치 및 디코드 회로(100)와 실행 파이프라인(112) 사이에 맵-디스패치-재명명(map-dispatch-rename, MDR) 유닛(106)을 포함할 수 있으며, 이는 동작(들) 및/또는 마이크로-동작(들)을 추론 자원들(예를 들어, 물리적 레지스터들)에 맵핑하여 비순차적 및/또는 추론적 실행을 허용할 수 있고, 동작(들) 및/또는 마이크로-동작(들)을 예비 스테이션들(110)에 디스패치할 수 있다.As shown in FIG. 1, in the illustrated embodiment, the fetch and decode circuit (100) may implement a pipeline having multiple stages. For example, to process an instruction, the fetch and decode circuit (100) may first load the instruction from memory or cache (12) into an instruction cache (Icache) (102) (hereinafter referred to as the “prefetch” stage) using the prefetch circuit (150). Next, the instruction may be fetched from the Icache (102) by the fetch circuit (152) into a decoder (154) for decoding (hereinafter referred to as the “fetch” stage). The decoder (154) may decode the instruction, convert it into operation(s) and/or micro-operation(s) (hereinafter referred to as the “decode” stage), and send the operation(s) and/or micro-operation(s) to the execution pipeline (164) for execution. Note that sometimes, when the Icache (102) stores an instruction that was previously loaded from memory or cache (12) into the Icache (102), the instruction may already be present in the Icache (102). In that case, the prefetch stage may be avoided and the instruction may be fetched directly from the Icache (102) for execution. In the illustrated embodiment, the execution pipeline (164) may be implemented using execution units (112) (e.g., integer, floating point, and/or vector execution units) and associated reservation stations (110) as described in FIG. 9 . Also, for illustrative purposes, FIG. 1 may not necessarily depict all components of the processor (30). For example, sometimes the fetch and decode circuitry (100) may not necessarily be directly coupled to the execution pipeline (112). Instead, there may be one or more other components in between. For example, sometimes the processor (30) may include a map-dispatch-rename (MDR) unit (106) between the fetch and decode circuitry (100) and the execution pipeline (112), which may map the operation(s) and/or micro-operation(s) to speculative resources (e.g., physical registers) to allow out-of-order and/or speculative execution, and may dispatch the operation(s) and/or micro-operation(s) to standby stations (110).
조건부 명령어를 포함하는 코드의 실행은 조건부 명령어의 조건에 의존할 수 있다. 조건부 명령어의 조건이 참일 때, 제1 타깃 어드레스로부터의 제1 명령어가 로딩, 페치 및 실행될 수 있다. 반대로, 조건부 명령어의 조건이 거짓일 때, 제2 타깃 어드레스로부터의 제2 명령어가 로딩, 페치 및 실행될 수 있다. 예시의 목적으로, 아래는 조건부 명령어를 포함하는 예시적인 코드이다:The execution of code containing a conditional instruction may depend on the condition of the conditional instruction. When the condition of the conditional instruction is true, a first instruction from a first target address may be loaded, fetched, and executed. Conversely, when the condition of the conditional instruction is false, a second instruction from a second target address may be loaded, fetched, and executed. For illustrative purposes, below is example code containing a conditional instruction:
이 예에서, 조건부 명령어는 단순히 2개의 변수 "a"와 "b"의 값들 사이의 비교를 포함한다. 조건부 명령어의 조건이 참인 경우(즉, "a"의 값이 "b"의 값보다 큰 경우), 제1 타깃 어드레스로부터의 제1 명령어가 실행되어 변수 "x"의 값을 1로 할당할 수 있다. 반대로, 조건부 명령어의 조건이 거짓(즉, "a"의 값이 "b"의 값 이하인 경우), 제2 타깃 어드레스로부터의 제2 명령어가 실행되어 변수 "x"의 값을 2로 할당할 수 있다.In this example, the conditional instruction simply involves a comparison between the values of two variables, "a" and "b". If the condition of the conditional instruction is true (i.e., the value of "a" is greater than the value of "b"), a first instruction from the first target address may be executed, assigning the value of variable "x" to 1. Conversely, if the condition of the conditional instruction is false (i.e., the value of "a" is less than or equal to the value of "b"), a second instruction from the second target address may be executed, assigning the value of variable "x" to 2.
예시된 실시예에서, 페치 및 디코드 회로(100)는 조건부 명령어들을 추론적으로 프로세싱할 수 있다. 예를 들어, 페치 및 디코드 회로(100)는 조건부 명령어의 (실제) 실행 전에 조건부 명령어의 조건을 예측할 수 있고, 예측에 기초하여, 실행을 위해 후속 명령어가 획득될 수 있는 타깃 어드레스를 추론적으로 결정할 수 있다. 전술한 바와 같이, 타깃 어드레스는 메모리 또는 캐시(12), 또는 Icache(102)에 상주할 수 있다. 또한, 전술한 예에 예시된 바와 같이, 후속 명령어는 조건부 명령어의 바로 다음에 있을 수 있거나 그렇지 않을 수 있다. 효율을 향상시기 위해, 페치 및 디코드 회로(100)는 추가로 바이어스 테이블(158)을 갖는 바이어스 예측 회로(156)를 사용하여, 조건부 명령어가 바이어스된 참(biased true) 또는 바이어스된 거짓(biased false)인지 여부의 바이어스 예측을 제공할 수 있다. 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 페치 및 디코드 회로(100)는 바이어스 예측 회로(156)로부터의 바이어스 예측을 사용하여 조건부 명령어를 프로세싱할 수 있다. 반대로, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓이 아닌 것으로 예측될 때, 페치 및 디코드 회로(100)는 하나 이상의 테이블(들)(162)을 갖는 명령어 예측 회로(160)를 사용하여 조건부 명령어의 조건이 참 또는 거짓인지 여부의 다른 예측, 예컨대 명령어 예측을 제공할 수 있고, 명령어 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다.In the illustrated embodiment, the fetch and decode circuit (100) may speculatively process conditional instructions. For example, the fetch and decode circuit (100) may predict the condition of a conditional instruction prior to (actual) execution of the conditional instruction, and based on the prediction, may speculatively determine a target address from which a subsequent instruction may be fetched for execution. As described above, the target address may reside in memory or cache (12), or Icache (102). Also, as illustrated in the example described above, the subsequent instruction may or may not be immediately following the conditional instruction. To improve efficiency, the fetch and decode circuit (100) may additionally use a bias prediction circuit (156) having a bias table (158) to provide a biased prediction of whether a conditional instruction is biased true or biased false. When a conditional instruction is predicted to be biased true or biased false, the fetch and decode circuit (100) can process the conditional instruction using the bias prediction from the bias prediction circuit (156). Conversely, when the conditional instruction is predicted not to be biased true or biased false, the fetch and decode circuit (100) can use the instruction prediction circuit (160) having one or more table(s) (162) to provide another prediction of whether the condition of the conditional instruction is true or false, e.g., an instruction prediction, and can speculatively process the conditional instruction using the instruction prediction.
예시된 예에서, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)는 페치 및 디코드 회로(100)에서의 조건부 명령어의 프로세싱의 상이한 스테이지들에서 각자의 예측들을 수행할 수 있다. 예를 들어, 예시된 실시예에서, 바이어스 예측 회로는, 조건부 명령어가 메모리 또는 캐시(12)로부터 Icache(102)로 로딩될 때, 프리페치 스테이지에서 조건부 명령어에 대한 바이어스 예측을 제공할 수 있다. 그에 비해, 예시된 실시예에서, 명령어 예측 회로(160)는 조건부 명령어가 Icache(102)로부터 디코더(154)로 페치되는 페치 스테이지와 같은, 비교적 "나중" 스테이지에서 명령어 예측을 제공할 수 있다. 위의 내용은 단지 예시의 목적들을 위한 예로서만 제공되는 것임에 유의한다. 일부 실시예들에서, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)는 거의 동시에, 예를 들어, 프리페치 스테이지, 페치 스테이지 등과 같은 동일한 스테이지 둘 모두에서, 각자의 예측들을 제공할 수 있다.In the illustrated example, the bias prediction circuitry (156) and the instruction prediction circuitry (160) may perform their respective predictions at different stages of the processing of a conditional instruction in the fetch and decode circuitry (100). For example, in the illustrated embodiment, the bias prediction circuitry may provide a bias prediction for a conditional instruction at the prefetch stage, when the conditional instruction is loaded from memory or cache (12) into the Icache (102). In contrast, in the illustrated embodiment, the instruction prediction circuitry (160) may provide the instruction prediction at a relatively “later” stage, such as at the fetch stage, when the conditional instruction is fetched from the Icache (102) into the decoder (154). It should be noted that the above is provided as an example only for illustrative purposes. In some embodiments, the bias prediction circuitry (156) and the instruction prediction circuitry (160) may provide their respective predictions at substantially the same time, for example, both at the prefetch stage, the fetch stage, and so on.
때때로, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 페치 및 디코드 회로(100)는 단순히 조건부 명령어가 명령어 예측 회로(160)를 "우회"하게 할 수 있다. 다시 말해서, 명령어 예측 회로(160)는 반드시 명령어 예측과 같은 제2 예측을 제공해야 하는 것은 아닐 수 있다. 대안적으로, 때때로 페치 및 디코드 회로(100)는 여전히 명령어 예측 회로(160)를 사용하여 명령어 예측을 제공할 수 있다. 그러나, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 페치 및 디코드 회로(100)는 명령어 예측 회로(160)로부터의 명령어 예측을 무시하고, 대신에 바이어스 예측 회로(156)로부터의 바이어스 예측을 사용하여 전술한 바와 같이 조건부 명령어를 추론적으로 프로세싱할 수 있다.Sometimes, when a conditional instruction is predicted to be biased true or biased false, the fetch and decode circuit (100) may simply cause the conditional instruction to "bypass" the instruction prediction circuit (160). In other words, the instruction prediction circuit (160) may not necessarily provide a second prediction, such as an instruction prediction. Alternatively, sometimes the fetch and decode circuit (100) may still provide an instruction prediction using the instruction prediction circuit (160). However, when a conditional instruction is predicted to be biased true or biased false, the fetch and decode circuit (100) may ignore the instruction prediction from the instruction prediction circuit (160) and instead use the bias prediction from the bias prediction circuit (156) to speculatively process the conditional instruction as described above.
예시된 실시예에서, 바이어스 예측 회로(156)로부터의 바이어스 예측 및 명령어 예측 회로(160)로부터의 명령어 예측은 조건부 명령어의 상이한 속성들을 나타낼 수 있다. 또한, 이들은 도 2 내지 도 3에 설명된 바와 같이, 상이한 방식들로 생성될 수 있다. 예시된 실시예에서, 바이어스 예측 회로(156)로부터의 바이어스 예측은 조건부 명령어가 바이어스된 것(예를 들어, 바이어스된 참 또는 바이어스된 거짓)으로 예측되는지 여부를 나타낼 수 있다. 조건부 명령어가 바이어스되는 것은, 조건부 명령어의 조건이 항상 참 또는 거짓인 시나리오를 지칭한다. 예를 들어, 조건이 항상 참인 경우, 조건부 명령어의 조건은 바이어스된 참으로 간주된다. 반대로, 그것이 항상 거짓인 경우, 조건은 바이어스된 거짓으로 간주된다. 다시 바이어스 예측을 참조하면, 조건부 명령어의 조건이 바이어스된 참(또는 바이어스된 거짓)인 것으로 예측될 때, 이는, 조건부 명령어의 조건이 항상 참(또는 항상 거짓)인 것으로 예측된다는 것을 의미하며, 이에 따라 조건부 명령어는 항상 하나의 방식(또는 다른 방식)으로 거동할 것으로 추정된다. 그에 비해, 명령어 예측 회로(160)로부터의 명령어 예측은 조건부 명령어의 조건이 참 또는 거짓인 것으로 예측되는지 여부를 나타낼 수 있다. 그러나, 바이어스 예측과 달리, 명령어 예측은 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓인지, 또는 다시 말해서 항상 참 또는 항상 거짓인지 여부를 반드시 나타내지는 않을 수 있다.In the illustrated embodiment, the bias prediction from the bias prediction circuit (156) and the instruction prediction from the instruction prediction circuit (160) may indicate different properties of the conditional instruction. Furthermore, they may be generated in different manners, as described in FIGS. 2-3 . In the illustrated embodiment, the bias prediction from the bias prediction circuit (156) may indicate whether the conditional instruction is predicted to be biased (e.g., biased true or biased false). A conditional instruction being biased refers to a scenario where the condition of the conditional instruction is always true or always false. For example, if the condition is always true, the condition of the conditional instruction is considered biased true. Conversely, if it is always false, the condition is considered biased false. Referring again to biased prediction, when the condition of a conditional instruction is predicted to be biased true (or biased false), this means that the condition of the conditional instruction is predicted to always be true (or always false), and thus the conditional instruction is expected to always behave in one way (or the other). In contrast, the instruction prediction from the instruction prediction circuitry (160) can indicate whether the condition of the conditional instruction is predicted to be true or false. However, unlike biased prediction, the instruction prediction may not necessarily indicate whether the conditional instruction is biased true or biased false, or in other words, always true or always false.
바이어스 예측 및 명령어 예측은 둘 모두 단지 예측이라는 점에 유의한다. 따라서, 둘 중 어느 하나는 오류가 있을 수 있다. 예시된 실시예에서, 예측들의 품질은, 예를 들어, 실행 파이프라인(164)에 의해, 조건부 명령어가 실행된 후에 결정될 수 있다. 전술한 예시적인 코드를 고려하여, 피연산자들(예를 들어, 변수들 "a" 및 "b")의 값들이 얻어지고, 연산자(예를 들어, 비교기 ">")가 피연산자들에 적용되면, 프로세서(30)는 조건부 명령어의 조건이 실제로 참 또는 거짓인지를 결정하고, 그에 따라 바이어스 예측 및/또는 명령어 예측이 올바른지 여부를 평가할 수 있다. 예시된 실시예에서, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는 조건부 명령어의 평가에 기초하여 업데이트될 수 있다. 예를 들어, 바이어스 예측 및/또는 명령어 예측이 예측 오류일 때, 바이어스 예측 회로(156)의 바이어스 테이블(158) 및/또는 명령어 예측 회로(160)의 테이블(들)(162)은 업데이트될 수 있다.Note that both bias prediction and instruction prediction are merely predictions. Therefore, either one may be in error. In the illustrated embodiment, the quality of the predictions may be determined after the conditional instruction has been executed, for example, by the execution pipeline (164). Considering the exemplary code described above, when the values of the operands (e.g., variables "a" and "b") are obtained and an operator (e.g., a comparator ">") is applied to the operands, the processor (30) may determine whether the condition of the conditional instruction is actually true or false, and accordingly evaluate whether the bias prediction and/or the instruction prediction is correct. In the illustrated embodiment, the bias prediction circuit (156) and/or the instruction prediction circuit (160) may be updated based on the evaluation of the conditional instruction. For example, when the bias prediction and/or the instruction prediction is a prediction error, the bias table (158) of the bias prediction circuit (156) and/or the table(s) (162) of the instruction prediction circuit (160) may be updated.
예측 오류가 발생할 때, 프로세서(30)는 추론적 작업을 폐기하고, 실행을 위해 올바른 타깃 어드레스로부터 다른 명령어를 받아야 할 수 있다. 예를 들어, 실행 파이프라인(164)은 추론적으로 페치된 실행 파이프 내의 명령어를 폐기할 수 있고, 페치 및 디코드 회로(100)는 실행을 위해 올바른 타깃 어드레스로부터 명령어를 획득하기 위해 프리페치 회로(150) 및/또는 페치 회로(152)를 재지향시켜야(redirect) 할 수 있다(리페치로도 칭해짐). 때때로, 이것은 프로세서(30)의 동작들에 추가의 지연들을 야기할 수 있다. 그러나, 실제로, 대부분의 조건부 명령어들은 바이어스된 명령어들일 수 있다. 따라서, 예측 오류들에 의해 야기된 위의 페널티에도 불구하고, 추가의 바이어스 예측 회로의 사용은 여전히 프로세서(30)의 전체 효율을 증가시킬 수 있다. 특히, 프로세서(30)가 예측적으로-바이어스된 조건부 명령어들이 명령어 예측 회로(160)를 "우회"할 수 있게 하는 경우, 이는 전체 작업부하를 크게 감소시키고 프로세서(30)의 효율을 향상시킬 수 있다.When a misprediction occurs, the processor (30) may have to discard the speculative work and retrieve another instruction from the correct target address for execution. For example, the execution pipeline (164) may discard the instruction in the execution pipe that was speculatively fetched, and the fetch and decode circuit (100) may have to redirect the prefetch circuit (150) and/or the fetch circuit (152) to obtain an instruction from the correct target address for execution (also called a refetch). Sometimes, this may cause additional delays in the operations of the processor (30). However, in practice, most conditional instructions may be biased instructions. Therefore, despite the above penalty caused by misprediction, the use of additional bias prediction circuitry may still increase the overall efficiency of the processor (30). In particular, if the processor (30) allows predictively-biased conditional instructions to “bypass” the instruction prediction circuitry (160), this can significantly reduce the overall workload and improve the efficiency of the processor (30).
예시된 실시예에서, 바이어스 예측 회로(156)는 바이어스 테이블(158)을 사용하여 조건부 명령어에 대한 바이어스 예측을 제공할 수 있다. 도 2a는 예시적인 바이어스 테이블(158)을 도시한다. 도면에서, 바이어스 테이블(158)은 하나 이상의 엔트리들로 조직화될 수 있으며, 여기서 각각의 엔트리는 대응하는 인덱스에 의해 식별되고 대응하는 값을 포함할 수 있다. 예시된 실시예에서, 바이어스 테이블(158)의 인덱스들은 조건부 명령어들의 어드레스들과 연관될 수 있다. 예를 들어, 인덱스들은 해시 함수를 사용하여 조건부 명령어들의 어드레스들을 해싱함으로써 생성될 수 있다. 해싱의 맥락에서, 조건부 명령어들의 어드레스들은 "키들"로 간주될 수 있고, 엔트리들 내의 값들은 "값들"로 간주될 수 있으며, 이들 둘은 인덱스들(및 해시 함수)을 통해 서로 연관될 수 있다. 따라서, 주어진 조건부 명령어의 경우, 바이어스 예측 회로(156)는 조건부 명령어의 어드레스(예를 들어, "키")에 기초하여 바이어스 테이블(158)의 대응하는 엔트리 내의 값(예를 들어, "값")을 식별하고, 이어서 바이어스 테이블(158)에서 식별된 값에 기초하여 조건부 명령어에 대한 바이어스 예측을 제공할 수 있다. 예를 들어, 바이어스 예측 회로(156)가 조건부 명령어를 수신할 때, 바이어스 예측 회로(156)는, 예를 들어, 프로그램 카운터(program counter, PC)로부터, 조건부 명령어의 어드레스를 획득할 수 있다. 바이어스 예측 회로(156)는, 예를 들어, 해시 함수를 사용하여, 조건부 명령어의 어드레스에 기초하여 인덱스를 결정할 수 있다. 이어서, 바이어스 예측 회로(156)는 인덱스를 사용해 바이어스 테이블(158)을 검색하여 인덱스와 매칭되는 엔트리를 찾고, 엔트리 내의 값을 식별하고, 그 값을 사용하여 조건부 명령어에 대한 바이어스 예측을 결정할 수 있다. 때때로 바이어스 테이블(158)의 인덱스들은 해싱 충돌(hashing collision), 예를 들어, 상이한 조건부 명령어들의 상이한 어드레스들이 동일한 인덱스로 해싱될 수 있는 현상을 겪을 수 있다는 점에 유의한다. 다시 말해서, 상이한 키들이 바이어스 테이블(158)에서 동일한 값에 대응할 수 있다. 때때로, 해싱 충돌은 조건부 명령어들에 대한 예측 오류들을 야기할 수 있다.In an illustrated embodiment, the bias prediction circuitry (156) may provide bias predictions for conditional instructions using a bias table (158). FIG. 2A illustrates an exemplary bias table (158). In the figure, the bias table (158) may be organized into one or more entries, each of which may be identified by a corresponding index and may include a corresponding value. In the illustrated embodiment, the indices of the bias table (158) may be associated with addresses of conditional instructions. For example, the indices may be generated by hashing the addresses of the conditional instructions using a hash function. In the context of hashing, the addresses of the conditional instructions may be considered "keys" and the values within the entries may be considered "values", the two of which may be associated with each other via the indices (and the hash function). Accordingly, for a given conditional instruction, the bias prediction circuit (156) can identify a value (e.g., a “value”) in a corresponding entry of the bias table (158) based on the address (e.g., a “key”) of the conditional instruction, and then provide a bias prediction for the conditional instruction based on the value identified in the bias table (158). For example, when the bias prediction circuit (156) receives a conditional instruction, the bias prediction circuit (156) can obtain the address of the conditional instruction, for example, from a program counter (PC). The bias prediction circuit (156) can determine an index based on the address of the conditional instruction, for example, using a hash function. The bias prediction circuit (156) can then search the bias table (158) using the index to find an entry matching the index, identify a value in the entry, and use the value to determine a bias prediction for the conditional instruction. Note that sometimes the indexes in the bias table (158) may suffer from hashing collisions, for example, different addresses of different conditional instructions may hash to the same index. In other words, different keys may correspond to the same value in the bias table (158). Sometimes, hashing collisions may lead to misprediction for conditional instructions.
도 2a에서, 예시된 실시예에서, 바이어스 테이블(158) 내의 값들은 조건부 명령어의 바이어스성에 대한 상이한 예측들을 나타내는 2-비트 값들일 수 있다. 예를 들어, 값 "00"은 이 값의 엔트리에 대응하는 어떠한 조건부 명령어도 바이어스 예측 회로(156)에 의해 이전에 조우되지(encountered) 않았음을 나타낼 수 있다. 값 "01"은 조건부 명령어의 조건이 바이어스된 거짓임을 나타낼 수 있다. 값 "10"은 조건부 명령어의 조건이 바이어스된 참임을 나타낼 수 있다. 그리고, 값 "11"은, 이 값의 엔트리에 대응하는 조건부 명령어가 바이어스 예측 회로(156)에 의해 이전에 조우되었지만, 조건부 명령어의 조건이 바이어스되지 않은 것임(예를 들어, 바이어스된 참도 바이어스된 거짓도 아님)을 나타낼 수 있다. 도 2a의 바이어스 테이블(158)은 단지 예시의 목적들을 위한 예로서만 제공되는 것임에 유의한다. 일부 실시예들에서, 바이어스 테이블(158) 내의 값들은 더 적거나 또는 더 많은 비트들을 가질 수 있다. 예를 들어, 때때로 값들은 특정 레벨의 히스테리시스를 제공하기 위해 2개 초과의 비트들을 가질 수 있다.In the illustrated embodiment, in FIG. 2a, the values in the bias table (158) may be 2-bit values that indicate different predictions of the biasability of a conditional instruction. For example, a value of "00" may indicate that no conditional instruction corresponding to an entry in this value has been previously encountered by the bias prediction circuitry (156). A value of "01" may indicate that the condition of the conditional instruction is biased false. A value of "10" may indicate that the condition of the conditional instruction is biased true. And, a value of "11" may indicate that a conditional instruction corresponding to an entry in this value has been previously encountered by the bias prediction circuitry (156), but the condition of the conditional instruction was not biased (e.g., neither biased true nor biased false). It is noted that the bias table (158) of FIG. 2a is provided as an example only for illustrative purposes. In some embodiments, values within the bias table (158) may have fewer or more bits. For example, sometimes values may have more than two bits to provide a particular level of hysteresis.
예시된 실시예에서, 명령어 예측 회로(160)는 또한 하나 이상의 테이블(들)(162)을 사용하여 조건부 명령어의 명령어 예측을 예측할 수 있다. 그러나, 바이어스 예측 회로(156)와 달리, 테이블(들)(162)의 적어도 일부는 조건부 명령어들의 이전 예측 이력(예를 들어, 명령어 예측 회로(160)에 의한) 및/또는 평가 이력과 크게 연관될 수 있다. 또한, 때때로 이력은 특정 조건부 명령어의 이력뿐만 아니라, 동일한 코드 내의 다른 조건부 명령어들의 이력도 포함할 수 있다. 예를 들어, 때때로 명령어 예측 회로(162)는 기본 예측기(T0) 및 (부분적으로) 태깅된(tagged) 예측기들(T i (1 ≤ i ≤ M))의 세트를 포함하는 태깅된 기하급수적 길이 예측기(TAgged GEometric length predictor)(TAGE 예측기로도 칭해짐)일 수 있다. 기본 예측기(T0)는 기본 테이블(162(0))을 사용하여 기본 예측을 제공할 수 있다. 예시된 실시예에서, 기본 테이블(162(0))의 인덱스들은 조건부 명령어들의 어드레스들을 해싱함으로써 생성될 수 있다. 그에 비해, 태깅된 예측기들(T i )(1 ≤ i ≤ M)은 각각 테이블(162(i))(1 ≤ i ≤ M)을 가질 수 있으며, 그 인덱스들은 (a) 조건부 명령어들의 어드레스들 및 (b) 조건부 명령어들의 이전 예측 및/또는 평가 이력을 해싱함으로써 생성될 수 있다. 이력은 기하급수(geometric series)로 간주될 수 있다. 예를 들어, 조건부 명령어들의 어드레스들은 이력과 연접될(concatenated) 수 있고, 이어서 이 둘은 함께 해싱되어 인덱스들을 생성할 수 있다. 상이한 태깅된 예측기들(T i )(1 ≤ i ≤ M)의 테이블들(162(i))은 상이한 이력 길이들과 연관될 수 있다. 예를 들어, 태깅된 예측기의 순서가 높을수록(예를 들어, i가 클수록), 태깅된 예측기(T i )(1 ≤ i ≤ M)의 테이블(162(i))에 대한 인덱스들을 생성하기 위해 더 긴 이력이 사용될 수 있다. 따라서, 태깅된 예측기(T i )(1 ≤ i ≤ M)는 그들 각자의 테이블들(162(i))(1 ≤ i ≤ M)을 사용하여 조건부 명령어에 대한 각자의 예측을 제공할 수 있다. 때때로, 바이어스 예측 회로(156)의 바이어스 테이블(158) 및 명령어 예측 회로(160)의 기본 테이블(162(0))에 대한 해싱 함수들은 상이할 수 있다. 또한, 때때로 상이한 예측기들(T i )(0 ≤ i ≤ M)의 상이한 테이블들(162(i))에 대한 해싱 함수들도 상이할 수 있다. 또한, 전술한 해싱 함수들은 배타적 또는(또는 XOR) 연산들을 포함하는 임의의 적절한 해싱 함수들에 기초하여 구현될 수 있다.In the illustrated embodiment, the instruction prediction circuitry (160) may also use one or more table(s) (162) to predict the instruction prediction of a conditional instruction. However, unlike the bias prediction circuitry (156), at least some of the table(s) (162) may be heavily correlated with previous prediction history (e.g., by the instruction prediction circuitry (160)) and/or evaluation history of the conditional instructions. Furthermore, sometimes the history may include not only the history of a particular conditional instruction, but also the history of other conditional instructions in the same code. For example, sometimes the instruction prediction circuitry (162) may be a tagged GEometric length predictor (also referred to as a TAGE predictor) comprising a base predictor (T 0 ) and a set of (partially) tagged predictors (T i (1 ≤ i ≤ M)). A base predictor (T 0 ) may provide a base prediction using a base table (162(0)). In an illustrated embodiment, the indices of the base table (162(0)) may be generated by hashing the addresses of the conditional instructions. In contrast, the tagged predictors (T i ) (1 ≤ i ≤ M) may each have a table (162( i )) (1 ≤ i ≤ M), the indices of which may be generated by hashing (a) the addresses of the conditional instructions and (b) the previous prediction and/or evaluation history of the conditional instructions. The history may be considered a geometric series. For example, the addresses of the conditional instructions may be concatenated with the history, and then the two may be hashed together to generate the indices. The tables (162( i )) of different tagged predictors (T i ) (1 ≤ i ≤ M) may be associated with different history lengths. For example, the higher the order of the tagged predictor (e.g., the larger i ), the longer the history may be used to generate indexes to the tables (162( i )) of the tagged predictors (T i ) (1 ≤ i ≤ M). Accordingly, the tagged predictors (T i ) (1 ≤ i ≤ M) may provide their own predictions for conditional instructions using their respective tables (162( i )) (1 ≤ i ≤ M). Sometimes, the hashing functions for the bias table (158) of the bias prediction circuit (156) and the base table (162(0)) of the instruction prediction circuit (160) may be different. Also, sometimes the hashing functions for the different tables (162( i )) of the different predictors (T i ) (0 ≤ i ≤ M) may also be different. Additionally, the aforementioned hashing functions can be implemented based on any suitable hashing functions including exclusive or (or XOR) operations.
예시된 실시예에서, 주어진 조건부 명령어에 대해, 명령어 예측을 제공하기 위해, 명령어 예측 회로(160)는 조건부 명령어의 어드레스 및 이력(태깅된 예측기들만에 대한)에 기초하여 각자의 (M+1)개의 예측기들(0 ≤ i ≤ M)에 대한 인덱스들을 결정하고, 가장 긴 이력을 갖는(예를 들어, 가장 높은 순서를 갖는) 매칭 예측기를 식별하고, 매칭된 예측기로부터의 예측을 조건부 명령어에 대한 (최종) 명령어 예측으로서 사용할 수 있다. 위의 설명에 따르면, 명령어 예측 회로(160)는 바이어스 예측 회로(156)보다 더 복잡할 수 있으며 따라서 예측하는 데 더 많은 시간을 소모할 수 있다는 것을 알 수 있다. 따라서, 예측적으로-바이어스된 조건부 명령어들이 명령어 예측 회로(160)를 "우회"할 수 있도록 하기 위해 추가의 바이어스 예측 회로(156)를 사용하는 것은, 전체 작업부하를 감소시키고 프로세서(30)의 효율을 향상시킬 수 있다.In the illustrated embodiment, for a given conditional instruction, to provide an instruction prediction, the instruction prediction circuit (160) may determine indices for each of the (M+1) predictors (0 ≤ i ≤ M) based on the address and history (for the tagged predictors only) of the conditional instruction, identify the matching predictor with the longest history (e.g., highest order), and use the prediction from the matched predictor as the (final) instruction prediction for the conditional instruction. From the above description, it can be seen that the instruction prediction circuit (160) may be more complex than the bias prediction circuit (156) and thus may take more time to predict. Therefore, using additional bias prediction circuitry (156) to allow predictively-biased conditional instructions to "bypass" the instruction prediction circuit (160) may reduce the overall workload and improve the efficiency of the processor (30).
도 2b는 명령어 예측 회로(160)의 예시적인 기본 테이블(162(0))을 도시한다. 예시의 목적으로, 기본 테이블(162(0))은 또한 태깅된 예측기들(T i )(1 ≤ i ≤ M)의 테이블들(162(i))을 예시하기 위한 예로서 제공된다. 예시된 실시예에서, 태깅된 예측기들(T i )(1 ≤ i ≤ M)의 테이블들(162(i))은 기본 테이블(162(0))과 유사할 수 있으며, 예를 들어, 또한 각각의 엔트리에서의 값을 제공할 수 있지만, 이력-관련 기하급수와 같은 추가 정보를 추가로 포함할 수 있다. 또한, 기본 테이블(162(0))은 또한 바이어스 예측 회로(156)와 명령어 예측 회로(160) 사이의 구별을 예시할 수 있다. 도 2b에 나타낸 바와 같이, 예시된 실시예에서, 기본 테이블(162(0)) 내의 값들은 2-비트 값들일 수 있다. 예를 들어, 값 "00"은 조건부 명령어의 조건이 강하게 거짓(strongly false)임을 나타낼 수 있다. 값 "01"은 조건부 명령어의 조건이 약하게 거짓(weakly false)임을 나타낼 수 있다. 값 "10"은 조건부 명령어의 조건이 약하게 참임을 나타낼 수 있다. 값 "11"은 조건부 명령어의 조건이 강하게 참임을 나타낼 수 있다. 따라서, 명령어 예측 회로(160)의 테이블(162(0)) 내의 값들은 반드시 조건부 명령어의 바이어스성을 나타내지는 않을 수 있고, 단지 그것이 특정 상대성으로 참 또는 거짓인지 여부를 나타낼 수 있다. 예를 들어, 값 "00"은, 값 "01"에 비해, 조건부 명령어가 거짓일 가능성이 예측적으로 더 높다는 것을 나타낼 수 있다. 유사하게, 값 "11"은, 값 "10"에 비해, 조건부 명령어가 참일 가능성이 예측적으로 더 높다는 것을 나타낼 수 있다. 도 2b의 기본 테이블(162(0))은 단지 예시의 목적들을 위한 예로서만 제공되는 것임에 유의한다. 일부 실시예들에서, 기본 테이블(162(0)) 및/또는 태깅된 예측기들(T i )(1 ≤ i ≤ M)의 테이블들(162(i)) 내의 값들은 더 적거나 더 많은 비트를 가질 수 있다.FIG. 2b illustrates an exemplary base table (162(0)) of the instruction prediction circuit (160). For illustrative purposes, the base table (162(0)) is also provided as an example to illustrate tables (162( i )) of tagged predictors (T i ) (1 ≤ i ≤ M). In the illustrated embodiment, the tables (162( i )) of tagged predictors (T i ) (1 ≤ i ≤ M) may be similar to the base table (162(0)), for example, may also provide a value at each entry, but may additionally include additional information, such as a history-related geometric series. Additionally, the base table (162(0)) may also illustrate a distinction between the bias prediction circuit (156) and the instruction prediction circuit (160). As shown in FIG. 2B , in the illustrated embodiment, the values in the base table (162 (0)) may be 2-bit values. For example, a value of "00" may indicate that the condition of the conditional instruction is strongly false. A value of "01" may indicate that the condition of the conditional instruction is weakly false. A value of "10" may indicate that the condition of the conditional instruction is weakly true. A value of "11" may indicate that the condition of the conditional instruction is strongly true. Thus, the values in the table (162 (0)) of the instruction prediction circuit (160) may not necessarily indicate the bias of the conditional instruction, but may only indicate whether it is true or false with a particular relative degree of certainty. For example, a value of "00" may indicate that the conditional instruction is predictively more likely to be false than a value of "01". Similarly, a value of "11" may indicate that the conditional instruction is predictively more likely to be true than a value of "10". Note that the base table (162(0)) of FIG. 2b is provided only as an example for illustrative purposes. In some embodiments, the values in the base table (162(0)) and/or the tables (162( i )) of tagged predictors (T i ) (1 ≤ i ≤ M) may have fewer or more bits.
이제 도 3a 및 도 3b를 참조하면, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)의 상태 기계들이 각자의 예측 회로들의 동작들을 예시하기 위해 도시되어 있다. 도 3a에 나타낸 바와 같이, 원들(302, 304, 306, 308)은 도 2a의 바이어스 예측 회로(156)의 바이어스 테이블(158)에서의 4개의 가능한 예측들에 대응할 수 있다. 유사하게, 도 3b에서, 원들(312, 314, 316, 318)은 도 2b의 명령어 예측 회로(160)의 테이블(들)(162)에서의 4개의 가능한 예측들에 대응할 수 있다. 또한, 각자의 테이블들에서 원들을 연결하는 에지들은 업데이트 시 값들의 변화를 나타낼 수 있다.Referring now to FIGS. 3A and 3B , state machines of the bias prediction circuit (156) and the instruction prediction circuit (160) are depicted to illustrate the operations of their respective prediction circuits. As shown in FIG. 3A , circles (302, 304, 306, 308) may correspond to four possible predictions in the bias table (158) of the bias prediction circuit (156) of FIG. 2A . Similarly, in FIG. 3B , circles (312, 314, 316, 318) may correspond to four possible predictions in the table(s) (162) of the instruction prediction circuit (160) of FIG. 2B . Additionally, edges connecting the circles in the respective tables may represent changes in values upon update.
다시 도 3a를 참조하면, 예시된 실시예에서, 값 "00"은 조건부 명령어들에 대한 초기 상태 또는 디폴트 값으로 설계될 수 있다. 예를 들어, 시작 시, 바이어스 테이블(158) 내의 조건부 명령어에 대한 값은 디폴트 값 "00"으로 설정될 수 있다. 조건부 명령어가 메모리 또는 캐시(12)로부터 Icache(102)로 처음으로 로딩될 때, 조건부 명령어에 대해 아직 해시 충돌이 없다고 가정하면, 바이어스 예측 회로(156)가 바이어스 테이블(158) 내의 조건부 명령어의 엔트리에 대응하는 조건부 명령어를 처음으로 조우하게 되는 것일 수 있다. 따라서, 바이어스 테이블(158) 내의 조건부 명령어에 대한 값은 "00"(예를 들어, 원(302)에 대응함)일 수 있다. 값 "00"이 조건부 명령어의 조건이 바이어스된 참 또는 바이어스 거짓임을 나타내지 않기 때문에, 페치 및 디코드 회로(100)는 추가로 명령어 예측 회로(160)를 사용하여 조건부 명령어에 대한 제2 예측, 예컨대 명령어 예측을 제공할 수 있다. 전술한 바와 같이, 명령어 예측 회로(160)는 테이블(들)(162)을 사용하여 명령어 예측을 제공할 수 있다. 예시된 실시예에서, 유사하게, 프로세서(30)는 4개의 가능한 상태들 중 하나를 조건부 명령어에 대한 초기 상태 또는 디폴트 값으로 지정할 수 있다. 예시의 목적으로, 조건부 명령어에 대한 초기 상태 또는 디폴트 값은 "10"(예를 들어, 원(316)에 대응함)인 것으로 가정되며, 이는 조건이 약하게 참인 것으로 예측됨을 나타낸다. 명령어 예측 회로(160)로부터의 명령어 예측에 따라, 페치 및 디코드 회로(100)는 실행을 위해 후속 명령어가 추론적으로 획득될 수 있는 타깃 어드레스를 결정할 수 있다. 조건부 명령어 "if (a > b)"를 포함하는 전술한 예시적인 코드를 고려한다. 조건부 명령어는 "약하게 참"인 것으로 예측되기 때문에, 페치 및 디코드 회로(100)는 실행을 위해 후속 명령어 "x = 1"을 추론적으로 획득할 수 있다.Referring again to FIG. 3A , in the illustrated embodiment, the value "00" may be designed as an initial state or default value for conditional instructions. For example, at startup, the value for a conditional instruction in the bias table (158) may be set to the default value "00". When a conditional instruction is first loaded from memory or cache (12) into Icache (102), assuming that there is no hash collision yet for the conditional instruction, this may be the first time that the bias prediction circuit (156) encounters a conditional instruction corresponding to an entry of the conditional instruction in the bias table (158). Accordingly, the value for the conditional instruction in the bias table (158) may be "00" (e.g., corresponding to circle (302)). Since the value "00" does not indicate that the condition of the conditional instruction is biased true or biased false, the fetch and decode circuit (100) may additionally provide a second prediction, e.g., instruction prediction, for the conditional instruction using the instruction prediction circuit (160). As described above, the instruction prediction circuit (160) may provide instruction prediction using the table(s) (162). In the illustrated embodiment, similarly, the processor (30) may designate one of four possible states as an initial state or default value for the conditional instruction. For purposes of illustration, the initial state or default value for the conditional instruction is assumed to be "10" (e.g., corresponding to circle (316)), indicating that the condition is predicted to be weakly true. Based on the instruction prediction from the instruction prediction circuit (160), the fetch and decode circuit (100) may determine a target address from which a subsequent instruction may be speculatively obtained for execution. Consider the exemplary code described above that includes the conditional instruction "if (a > b)". Since the conditional instruction is predicted to be “weakly true,” the fetch and decode circuit (100) can speculatively obtain the subsequent instruction “x = 1” for execution.
명령어의 실행 후, 예를 들어, 실행 파이프라인(164)에서, 조건부 명령어의 조건이 실제로 결정될 수 있고, 바이어스 예측 회로(156)로부터의 바이어스 예측 및 명령어 예측 회로(160)로부터의 명령어 예측은 조건부 명령어의 실행의 결과에 따라 평가될 수 있다. 예시된 실시예에서, 바이어스 예측 회로(156)의 바이어스 테이블(158) 및/또는 명령어 예측 회로(160)의 테이블(들)(162)은 평가에 기초하여 업데이트될 수 있다. 예를 들어, 평가가 조건부 명령어의 조건이 실제로 참인 것으로 밝혀질 때, 이는 바이어스 예측 회로(156)로부터의 이전 바이어스 예측(이는 초기 상태 또는 디폴트 값 "00")이 예측 오류임을 의미한다. 따라서, 바이어스 테이블(158)에서, 조건부 명령어에 대한 값은 "00"(예를 들어, 초기 상태)으로부터 "10"(예를 들어, 바이어스된 참)으로 변할 수 있다. 도 3a에서, 이는 (예를 들어, "00"에 대응하는) 원(302)으로부터 (예를 들어, "10"에 대응하는) 원(306)으로의 변화에 의해 예시된다. 그에 비해, 조건부 명령어의 평가는 명령어 예측 회로(160)로부터의 이전 명령어 예측이 예측 오류가 아님을 확인할 수 있다. 이에 따라, 테이블(들)(162)에서, 조건부 명령어에 대한 값(들)은 "10"(예를 들어, 약하게 참)으로부터 "11"(예를 들어, 강하게 참)로 변할 수 있으며, 이는 명령어 예측 회로(160)가 보상을 받는다는 것을 나타낸다. 도 3b에서, 이는 (예를 들어, "10"에 대응하는) 원(316)으로부터 (예를 들어, "11"에 대응하는) 원(318)으로의 변화에 의해 예시된다.After execution of the instruction, for example, in the execution pipeline (164), the condition of the conditional instruction may actually be determined, and the bias prediction from the bias prediction circuit (156) and the instruction prediction from the instruction prediction circuit (160) may be evaluated based on the results of the execution of the conditional instruction. In the illustrated embodiment, the bias table (158) of the bias prediction circuit (156) and/or the table(s) (162) of the instruction prediction circuit (160) may be updated based on the evaluation. For example, when the evaluation finds that the condition of the conditional instruction is actually true, this means that the previous bias prediction from the bias prediction circuit (156) (which was an initial state or default value of "00") was a prediction error. Accordingly, in the bias table (158), the value for the conditional instruction may change from "00" (e.g., an initial state) to "10" (e.g., a biased true). In FIG. 3a, this is illustrated by the change from circle (302) (e.g., corresponding to "00") to circle (306) (e.g., corresponding to "10"). In contrast, the evaluation of the conditional instruction may determine that the previous instruction prediction from the instruction prediction circuitry (160) was not a misprediction. Accordingly, in the table(s) (162), the value(s) for the conditional instruction may change from "10" (e.g., weakly true) to "11" (e.g., strongly true), indicating that the instruction prediction circuitry (160) is rewarded. In FIG. 3b, this is illustrated by the change from circle (316) (e.g., corresponding to "10") to circle (318) (e.g., corresponding to "11").
반대로, 조건부 명령어의 평가가 조건부 명령어의 조건이 실제로 거짓인 것으로 밝혀질 때, 이는 바이어스 예측 회로(156)로부터의 이전 바이어스 예측이 예측 오류임을 의미한다. 따라서, 바이어스 테이블(158)에서, 조건부 명령어에 대한 값은 "00"(예를 들어, 초기 상태)으로부터 "01"(예를 들어, 바이어스된 거짓)로 변할 수 있다. 도 3a에서, 이는 (예를 들어, "00"에 대응하는) 원(302)으로부터 (예를 들어, "01"에 대응하는) 원(304)으로의 변화에 의해 예시된다. 또한, 조건부 명령어의 평가는 명령어 예측 회로(160)로부터의 이전 명령어 예측이 또한 예측 오류임을 나타낼 수 있다. 이에 따라, 테이블(들)(162)에서, 조건부 명령어에 대한 값(들)은 "10"(예를 들어, 약하게 참)으로부터 "01"(예를 들어, 약하게 참)로 변할 수 있으며, 이는 명령어 예측 회로(160)가 페널티를 받는다는 것을 나타낸다. 도 3b에서, 이는 (예를 들어, "10"에 대응하는) 원(316)으로부터 (예를 들어, "01"에 대응하는) 원(314)으로의 변화에 의해 예시된다.Conversely, when the evaluation of a conditional instruction reveals that the condition of the conditional instruction is actually false, this indicates that the previous bias prediction from the bias prediction circuitry (156) was a misprediction. Accordingly, in the bias table (158), the value for the conditional instruction may change from "00" (e.g., initial state) to "01" (e.g., biased false). In FIG. 3A , this is illustrated by the change from circle (302) (e.g., corresponding to "00") to circle (304) (e.g., corresponding to "01"). Additionally, the evaluation of the conditional instruction may indicate that the previous instruction prediction from the instruction prediction circuitry (160) was also a misprediction. Accordingly, in the table(s) (162), the value(s) for the conditional instruction may change from "10" (e.g., weakly true) to "01" (e.g., weakly true), indicating that the instruction prediction circuitry (160) is penalized. In Figure 3b, this is illustrated by a change from circle (316) (corresponding, for example, to “10”) to circle (314) (corresponding, for example, to “01”).
도 3a에 나타낸 바와 같이, 일단 값 "10"(예를 들어, 바이어스된 참) 또는 "01"(예를 들어, 바이어스된 거짓)로 업데이트되면, 바이어스 테이블(158) 내의 조건부 명령어의 값은 예측 오류가 발생할 때까지 "10" 또는 "01"에서 유지될 수 있다. 다시 말해서, 바이어스 테이블(158) 내의 조건부 명령어에 대한 값이 초기 상태로부터 일단 업데이트되면, 바이어스 예측 회로(156)는 예측 오류가 발생할 때까지 그것을 다른 값으로 변경하는 것을 억제할 수 있다. 동작의 관점에서, 이는, 조건부 명령어의 평가가 바이어스 예측이 예측 오류임을 나타낼 때까지, 바이어스 예측 회로(158)가 동일한 방식으로 조건부 명령어의 조건을 무조건적으로 예측할 수 있다는 것을 의미한다. 이러한 예측 오류가 발생할 때, 바이어스 테이블(158) 내의 조건부 명령어의 값은 "10" 또는 "01"로부터 "11"(예를 들어, 바이어스되지 않음)로 업데이트될 수 있다. 도 3a에서, 이는 (예를 들어, "01"에 대응하는) 원(304) 또는 (예를 들어, "10"에 대응하는) 원(306)으로부터 (예를 들어, "11"에 대응하는) 원(308)으로의 변화에 의해 예시된다. 또한, 일단 값 "11"로 업데이트되면, 바이어스 테이블(158) 내의 조건부 명령어의 값은, 예측 회로(156)가 값을 초기 상태 또는 디폴트 값 "00"으로 리셋할 때까지, "11"(예를 들어, 바이어스되지 않음)에서 유지될 수 있다.As shown in FIG. 3a, once updated to a value “10” (e.g., biased true) or “01” (e.g., biased false), the value of the conditional instruction in the bias table (158) may remain at “10” or “01” until a misprediction occurs. In other words, once the value for a conditional instruction in the bias table (158) is updated from an initial state, the bias prediction circuit (156) may refrain from changing it to another value until a misprediction occurs. From an operational standpoint, this means that the bias prediction circuit (158) may unconditionally predict the condition of the conditional instruction in the same manner until evaluation of the conditional instruction indicates that the bias prediction is a misprediction. When such a misprediction occurs, the value of the conditional instruction in the bias table (158) may be updated from “10” or “01” to “11” (e.g., unbiased). In FIG. 3a, this is illustrated by a change from circle (304) (e.g., corresponding to "01") or circle (306) (e.g., corresponding to "10") to circle (308) (e.g., corresponding to "11"). Additionally, once updated to the value "11", the value of the conditional instruction in the bias table (158) may remain at "11" (e.g., unbiased) until the prediction circuitry (156) resets the value to its initial state or default value "00".
도 3b에 나타낸 바와 같이, 테이블(들)(162) 내의 조건부 명령어의 값(들)은, 명령어 예측 회로(160)가 보상 또는 페널티를 받는지 여부에 따라, 업데이트 시 하나의 값으로부터 다른 값으로 변할 수 있다. 예를 들어, 조건부 명령어의 평가가 명령어 예측 회로(160)로부터의 명령어 예측이 예측 오류가 아님을 확인할 때, 명령어 예측 회로(160)는 보상을 받아서, 테이블(들)(162) 내의 조건부 명령어의 값(들)을 상대적으로 더 약한 예측으로부터 상대적으로 더 강한 예측으로(예를 들어, 약하게 참으로부터 강하게 참으로, 또는 약하게 거짓으로부터 강하게 거짓으로) 변경하거나, 또는 상대적으로 더 강한 예측(예를 들어, 강하게 참 또는 강하게 거짓)에서 유지할 수 있다. 반대로, 조건부 명령어의 평가가 명령어 예측 회로(160)로부터의 명령어 예측이 예측 오류임을 나타낼 때, 명령어 예측 회로(160)는 페널티를 받아서, 테이블(들)(162) 내의 조건부 명령어의 값(들)을 상대적으로 더 강한 예측으로부터 상대적으로 더 약한 예측으로(예를 들어, 강하게 참으로부터 약하게 참으로, 또는 강하게 거짓으로부터 약하게 거짓으로), 또는 심지어 상대적으로 더 약한 예측으로부터 반대의 상대적으로 더 약한 예측으로(예를 들어, 약하게 참 또는 약하게 거짓으로부터, 또는 그 반대) 변경할 수 있다. 예시된 실시예에서, 테이블(들)(162) 내의 조건부 명령어에 대한 값은 하나의 상대적으로 더 강한 예측으로부터 바로 반대의 상대적으로 더 강한 예측으로(예를 들어, 강하게 참으로부터 강하게 거짓으로, 또는 그 반대) 변하지 않을 수 있다는 점에 유의한다. 따라서, 테이블(들)(162)은 특정 레벨의 히스테리시스를 갖는 것으로 간주될 수 있다.As illustrated in FIG. 3b, the value(s) of the conditional instructions in the table(s) (162) may change from one value to another upon update, depending on whether the instruction prediction circuit (160) is rewarded or penalized. For example, when the evaluation of the conditional instruction determines that the instruction prediction from the instruction prediction circuit (160) is not a misprediction, the instruction prediction circuit (160) may be rewarded and change the value(s) of the conditional instructions in the table(s) (162) from a relatively weaker prediction to a relatively stronger prediction (e.g., from weakly true to strongly true, or from weakly false to strongly false), or may remain at the relatively stronger prediction (e.g., strongly true or strongly false). Conversely, when the evaluation of a conditional instruction indicates that the instruction prediction from the instruction prediction circuitry (160) is a misprediction, the instruction prediction circuitry (160) may be penalized to change the value(s) of the conditional instruction in the table(s) (162) from a relatively stronger prediction to a relatively weaker prediction (e.g., from strongly true to weakly true, or from strongly false to weakly false), or even from a relatively weaker prediction to the opposite relatively weaker prediction (e.g., from weakly true or weakly false, or vice versa). Note that in the illustrated embodiment, the values for the conditional instructions in the table(s) (162) may not change from one relatively stronger prediction to the opposite relatively stronger prediction (e.g., from strongly true to strongly false, or vice versa). Thus, the table(s) (162) may be considered to have a certain level of hysteresis.
또한, 전술한 바와 같이, 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 예를 들어, 바이어스 테이블(158) 내의 조건부 명령어에 대한 값이 "10" 또는 "01"일 때, 페치 및 디코드 회로(100)는 바이어스 예측(156)으로부터의 바이어스 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다. 반대로, 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이 아닌 것으로 예측될 때, 예를 들어, 바이어스 테이블(158) 내의 조건부 명령어에 대한 값이 "00" 또는 "11"일 때, 페치 및 디코드 회로(100)는 명령어 예측 회로(160)로부터의 명령어 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다.Additionally, as described above, when the condition of the conditional instruction is predicted to be biased true or biased false, for example, when the value for the conditional instruction in the bias table (158) is "10" or "01", the fetch and decode circuit (100) can speculatively process the conditional instruction using the bias prediction from the bias prediction (156). Conversely, when the condition of the conditional instruction is predicted not to be biased true or biased false, for example, when the value for the conditional instruction in the bias table (158) is "00" or "11", the fetch and decode circuit (100) can speculatively process the conditional instruction using the instruction prediction from the instruction prediction circuit (160).
예시된 실시예에서, 바이어스 테이블(158) 및/또는 테이블(들)(162)은 등록된 하나 이상의 것을 사용하여 구현될 수 있다. 또한, 페치 및 디코드 회로(100)는 조건부 명령어를 포함하는 명령어 라인에서 바이어스 예측 회로(156)로부터의 바이어스 예측 및/또는 명령어 예측 회로(160)로부터의 명령어 예측을 인코딩할 수 있다. 예를 들어, 페치 및 디코드 회로(100)는 바이어스 테이블(158) 및/또는 테이블(들)(162)로부터의 조건부 명령어에 대한 값(예를 들어, 2-비트 값)을, 전방, 후방, 또는 중간에서 조건부 명령어를 포함하는 명령어 라인의 기계 코드에 첨부할 수 있다. 대안적으로, 페치 및 디코드 회로(100)는 조건부 명령어에 대한 예측(들)을 임베드하기 위해 조건부 명령어를 포함하는 명령어 라인의 기계 코드를 재코딩할(recode) 수 있다. 예를 들어, 페치 및 디코드 회로(100)는 기계 코드의 하나 이상의 비트들의 값들을 변경할 수 있다. 따라서, 첨부된 값을 갖는 명령어가 Icache(102) 및/또는 디코더(154)에서 수신될 때, Icache(102) 및/또는 디코더(154)는 조건부 명령어의 예측(들)을 인식하고, 전술한 바와 같이 예측(들)에 기초하여 조건부 명령어를 추론적으로 프로세싱할 수 있다.In the illustrated embodiment, the bias table (158) and/or the table(s) (162) may be implemented using one or more of the registered ones. Additionally, the fetch and decode circuit (100) may encode a bias prediction from the bias prediction circuit (156) and/or an instruction prediction from the instruction prediction circuit (160) in an instruction line that includes a conditional instruction. For example, the fetch and decode circuit (100) may append a value (e.g., a 2-bit value) for a conditional instruction from the bias table (158) and/or the table(s) (162) to the machine code of the instruction line that includes the conditional instruction, either forward, backward, or in the middle. Alternatively, the fetch and decode circuit (100) may recode the machine code of the instruction line that includes the conditional instruction to embed the prediction(s) for the conditional instruction. For example, the fetch and decode circuit (100) may change the values of one or more bits of the machine code. Accordingly, when an instruction with an attached value is received at the Icache (102) and/or the decoder (154), the Icache (102) and/or the decoder (154) may recognize the prediction(s) of the conditional instruction and speculatively process the conditional instruction based on the prediction(s) as described above.
예시된 실시예에서, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 때때로 페치 및 디코드 회로(100)는 조건부 명령어가 명령어 예측 회로(160)를 "우회"하게 할 수 있다. 예시된 실시예에서, "우회"를 구현하기 위해, 페치 및 디코드 회로(100)는 조건부 명령어를 비조건부 명령어(non-conditional instruction)로 재코딩할 수 있다. 결과적으로, 명령어 예측 회로(160)는 조건부 명령어를 비조건부 명령어로 처리할 수 있으므로, 반드시 재코딩된 조건부 명령어에 대한 명령어 예측을 제공하지는 않을 수 있다.In the illustrated embodiment, when a conditional instruction is predicted to be biased true or biased false, the fetch and decode circuit (100) may sometimes cause the conditional instruction to "bypass" the instruction prediction circuit (160). In the illustrated embodiment, to implement the "bypass," the fetch and decode circuit (100) may recode the conditional instruction into a non-conditional instruction. As a result, the instruction prediction circuit (160) may treat the conditional instruction as a non-conditional instruction and may not necessarily provide an instruction prediction for the recoded conditional instruction.
전술한 바와 같이, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는 조건부 명령어들을 잘못 예측할 수 있다. 그 결과, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는 포화될 수 있다. 예를 들어, 코드가 비교적 긴 시간 동안 프로세서(30)에 의해 실행될 때, 바이어스 예측 회로(156)는 코드의 하나 이상의 조건부 명령어들에 대해 충분한 예측 오류들을 경험할 수 있다. 그 결과, 바이어스 테이블(158) 내의 조건부 명령어들에 대한 값들은 값 "11"로 변할 수 있다. 전술한 바와 같이, 일단 값들이 "11"로 변하면, 이들은 리셋될 때까지 "11"로 유지될 수 있다. 따라서, 포화(saturation)를 해결하기 위해, 예시된 실시예에서, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는 각각 포화의 발생을 검출하고, 그에 응답하여 바이어스 테이블(158) 및/또는 테이블(들)(162)을 리셋할 수 있다. 예를 들어, 바이어스 예측 회로(156)는 바이어스 테이블(158) 내의 값들 "11"의 수를 모니터링할 수 있다. 그것이 특정된 임계치, 예를 들어, 특정된 백분율에 도달할 때, 바이어스 예측 회로(156)는 바이어스 테이블(158)이 포화되었다고 결정할 수 있다. 결과적으로, 바이어스 예측 회로(156)는 이러한 값들 "11"을 초기 상태 "00"으로 리셋할 수 있다. 때때로, 바이어스 예측 회로(156)는 또한 바이어스 테이블(158) 내의 다른 값들, 예를 들어, 전체 바이어스 테이블(158)을 초기 상태 "00"으로 리셋할 수 있다.As described above, the bias prediction circuit (156) and/or the instruction prediction circuit (160) may mispredict conditional instructions. As a result, the bias prediction circuit (156) and/or the instruction prediction circuit (160) may become saturated. For example, when code is executed by the processor (30) for a relatively long period of time, the bias prediction circuit (156) may experience sufficient misprediction for one or more conditional instructions in the code. As a result, the values for the conditional instructions in the bias table (158) may change to the value "11". As described above, once the values change to "11", they may remain at "11" until reset. Accordingly, to address saturation, in the illustrated embodiment, the bias prediction circuit (156) and/or the instruction prediction circuit (160) may each detect the occurrence of saturation and, in response, reset the bias table (158) and/or the table(s) (162). For example, the bias prediction circuit (156) may monitor the number of values "11" within the bias table (158). When it reaches a specified threshold, e.g., a specified percentage, the bias prediction circuit (156) may determine that the bias table (158) is saturated. As a result, the bias prediction circuit (156) may reset these values "11" to the initial state "00". Occasionally, the bias prediction circuit (156) may also reset other values within the bias table (158), e.g., the entire bias table (158), to the initial state "00".
이제 도 4를 참조하면, 바이어스 예측 회로(156) 및 명령어 예측 회로(160)를 포함하는 프로세서(30)의 동작들의 일 실시예를 예시하는 흐름도가 도시된다. 예시된 실시예에서, 블록(402)에 표시된 바와 같이, 조건부 명령어가 페치 및 디코드 회로(100)에서 수신될 수 있다. 전술한 바와 같이, 조건부 명령어는 메모리 또는 캐시(12)로부터 Icache(102)로 로딩되거나, Icache(102)로부터 디코더(154)로 페치될 수 있다. 페치 및 디코드 회로(100)는, 블록(404)에 표시된 바와 같이, 바이어스 예측 회로(156)를 사용하여 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인지 여부의 바이어스 예측을 제공할 수 있다. 예시된 실시예에서, 바이어스 예측 회로(156)는, 블록(404)에 표시된 바와 같이, 바이어스 테이블(158)을 사용하여 바이어스 예측을 수행할 수 있다. 전술한 바와 같이, 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인 것으로 예측될 때, 그것은, 바이어스 예측 회로(156)가 조건부 명령어의 조건이 항상 참 또는 항상 거짓이라고 예측함을 나타낸다.Referring now to FIG. 4, a flow diagram illustrating one embodiment of the operations of a processor (30) including a bias prediction circuit (156) and an instruction prediction circuit (160) is depicted. In the illustrated embodiment, a conditional instruction may be received at the fetch and decode circuit (100), as indicated at block (402). As described above, the conditional instruction may be loaded from memory or cache (12) into the Icache (102), or fetched from the Icache (102) into the decoder (154). The fetch and decode circuit (100) may provide a bias prediction of whether the condition of the conditional instruction is biased true or biased false using the bias prediction circuit (156), as indicated at block (404). In the illustrated embodiment, the bias prediction circuit (156) may perform the bias prediction using a bias table (158), as indicated at block (404). As described above, when the condition of a conditional instruction is predicted to be biased true or biased false, it indicates that the bias prediction circuit (156) predicts that the condition of the conditional instruction is always true or always false.
바이어스 예측 회로(156)로부터의 바이어스 예측이 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이 아니라고 예측할 때, 페치 및 디코드 회로(100)는, 블록(406)에 표시된 바와 같이, 명령어 예측 회로(160)를 사용하여 조건부 명령어의 조건이 참 또는 거짓인지 여부의 명령어 예측을 제공할 수 있다. 전술한 바와 같이, 예시된 실시예에서, 명령어 예측 회로(160)는, 기본 테이블(162(0))을 갖는 기본 예측기(T0) 및 각자의 테이블들(162(i))(1 ≤ i ≤ M)을 갖는 하나 이상의 추가의 (부분적으로) 태깅된 예측기들(T i )과 같은, 총 (M+1)개의 예측기들을 갖는 TAGE 예측기일 수 있다. 태깅된 예측기들(T i )(1 ≤ i ≤ M)의 테이블들(162(i))은 각자의 이력 길이의 이력-관련 기하급수와 연관될 수 있다.When the bias prediction from the bias prediction circuit (156) predicts that the condition of the conditional instruction is neither biased true nor biased false, the fetch and decode circuit (100) may provide an instruction prediction of whether the condition of the conditional instruction is true or false using the instruction prediction circuit (160), as indicated at block (406). As described above, in the illustrated embodiment, the instruction prediction circuit (160) may be a TAGE predictor having a total of ( M +1) predictors, such as a base predictor (T 0 ) having a base table (162 ( 0 )) and one or more additional (partially) tagged predictors (T i ) having their own tables (162 ( i )) (1 ≤ i ≤ M). The tables (162 ( i )) of the tagged predictors (T i ) (1 ≤ i ≤ M) may be associated with a history-related geometric series of their respective history lengths.
전술한 바와 같이, 예시된 실시예에서, 바이어스 예측 회로(156)가 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이라고 예측할 때, 페치 및 디코드 회로(156)는 조건부 명령어가 명령어 예측 회로(160)를 "우회"하게 할 수 있다. 결과적으로, 블록(406)에서의 동작들은 회피될 수 있다. 예를 들어, 페치 및 디코드 회로(100)는 조건부 명령어를 비조건부 명령어로 재코딩할 수 있다. 또한, 전술한 바와 같이, 예시된 실시예에서, 바이어스 예측 회로(156)로부터의 바이어스 예측 및 명령어 예측 회로(160)로부터의 명령어 예측은 페치 및 디코드 회로에서 조건부 명령어를 프로세싱하는 상이한 스테이지들로서 제공될 수 있다. 예를 들어, 바이어스 예측 회로(156)는 조건부 명령어가 메모리 또는 캐시(12)로부터 Icache(102)로 로딩될 때 프리페치 스테이지에서 바이어스 예측을 제공할 수 있는 반면, 명령어 예측 회로(160)는 조건부 명령어가 Icache(102)로부터 디코더(154)로 페치될 때 페치 스테이지에서 명령어 예측을 수행할 수 있다.As described above, in the illustrated embodiment, when the bias prediction circuit (156) predicts that the condition of the conditional instruction is biased true or biased false, the fetch and decode circuit (156) may cause the conditional instruction to "bypass" the instruction prediction circuit (160). As a result, the operations at block (406) may be avoided. For example, the fetch and decode circuit (100) may recode the conditional instruction into a non-conditional instruction. Furthermore, as described above, in the illustrated embodiment, the bias prediction from the bias prediction circuit (156) and the instruction prediction from the instruction prediction circuit (160) may be provided as different stages of processing the conditional instruction in the fetch and decode circuit. For example, the bias prediction circuit (156) may provide bias prediction at the prefetch stage when a conditional instruction is loaded from memory or cache (12) into the Icache (102), while the instruction prediction circuit (160) may perform instruction prediction at the fetch stage when a conditional instruction is fetched from the Icache (102) into the decoder (154).
예시된 실시예에서, 페치 및 디코드 회로(100)는, 블록(408)에 표시된 바와 같이, 바이어스 예측 회로(156)로부터의 바이어스 예측 및 명령어 예측 회로(160)로부터의 명령어 예측 중 하나를 사용하여 조건부 명령어에 대한 타깃 어드레스를 추론적으로 결정할 수 있다. 예를 들어, 페치 및 디코드 회로(100)는, 바이어스 예측 회로(156)로부터의 바이어스 예측 또는 명령어 예측 회로(160)로부터의 명령어 예측에 따라, 실행을 위해 후속 명령어가 획득될 수 있는 조건부 명령어의 타깃 어드레스를 추론적으로 결정할 수 있다.In the illustrated embodiment, the fetch and decode circuit (100) can speculatively determine a target address for a conditional instruction using either a bias prediction from the bias prediction circuit (156) or an instruction prediction from the instruction prediction circuit (160), as indicated at block (408). For example, the fetch and decode circuit (100) can speculatively determine a target address of a conditional instruction from which a subsequent instruction can be fetched for execution based on either a bias prediction from the bias prediction circuit (156) or an instruction prediction from the instruction prediction circuit (160).
예시된 실시예에서, 페치 및 디코드 회로(100)는, 블록(410)에 표시된 바와 같이, 실행을 위해 조건부 명령어를 실행 파이프라인(164)으로 전송할 수 있다. 또한, 페치 및 디코드 회로(100)는, 블록(412)에 표시된 바와 같이, 조건부 명령어의 실행의 결과에 기초하여 조건부 명령어의 평가를 수신할 수 있다. 전술한 바와 같이, 조건부 명령어의 실행은 조건부 명령어의 조건이 실제로 참 또는 거짓인지 여부, 및 따라서 바이어스 예측 회로(156)로부터의 이전 바이어스 예측 및/또는 명령어 예측 회로(160)로부터의 이전 명령어 예측이 예측 오류인지 여부를 결정할 수 있다.In the illustrated embodiment, the fetch and decode circuit (100) may send a conditional instruction to the execution pipeline (164) for execution, as indicated at block (410). Additionally, the fetch and decode circuit (100) may receive an evaluation of the conditional instruction based on the result of execution of the conditional instruction, as indicated at block (412). As described above, execution of the conditional instruction may determine whether the condition of the conditional instruction is actually true or false, and thus whether a previous bias prediction from the bias prediction circuit (156) and/or a previous instruction prediction from the instruction prediction circuit (160) was a misprediction.
예시된 실시예에서, 바이어스 예측 회로(156) 및/또는 명령어 예측 회로(160)는, 블록(414, 416)에 표시된 바와 같이, 조건부 명령어의 평가에 기초하여 그들의 바이어스 테이블(158) 및 테이블(들)(162)을 각각 업데이트한다. 도 2 및 도 3에서 전술한 바와 같이, 바이어스 테이블(158)의 업데이트는, 평가가 조건부 명령어의 조건이 실제로 참 또는 거짓임을 나타낼 때 조건부 명령어에 대한 값을 "00"과 같은 초기 상태로부터 "01"(예를 들어, 바이어스된 거짓을 나타냄) 또는 "10"(예를 들어, 바이어스된 참을 나타냄)으로 각각 변경할 수 있거나, 또는 평가가 이전의 바이어스된 참 또는 바이어스된 거짓 예측이 실제로 예측 오류임을 나타낼 때 값을 "01" 또는 "10"으로부터 "11"(예를 들어, 바이어스되지 않음을 나타냄)로 변경할 수 있다. 그에 비해, 명령어 예측 회로(160)는, 기본 및 태깅된 예측기들(Ti)(0 ≤ i ≤ M)의 테이블(들)(162(i)) 내의 조건부 명령어에 대한 값(들)을, 평가가 명령어 예측 회로(160)로부터의 명령어 예측이 예측 오류가 아님을 확인할 때, 상대적으로 더 약한 예측으로부터 상대적으로 더 강한 예측으로(예를 들어, 약하게 참 "10"으로부터 강하게 참 "11"로, 또는 약하게 거짓 "01"로부터 강하게 거짓 "00"으로) 업데이트하거나, 또는 상대적으로 더 강한 예측에서의 값(예를 들어, 강하게 참 "11" 또는 강하게 거짓 "00")을 유지할 수 있거나; 또는, 평가가 명령어 예측 회로(160)로부터의 명령어 예측이 예측 오류임을 나타낼 때, 상대적으로 더 강한 예측으로부터 상대적으로 더 약한 예측으로(예를 들어, 강하게 참 "11"로부터 약하게 참 "10"으로, 또는 강하게 거짓 "00"으로부터 약하게 거짓 "01"로), 또는 상대적으로 더 약한 예측으로부터 반대의 상대적으로 더 약한 예측으로(예를 들어, 약하게 참 "10" 또는 약하게 거짓 "01"로부터, 또는 그 반대로) 업데이트할 수 있다.In the illustrated embodiment, the bias prediction circuitry (156) and/or the instruction prediction circuitry (160) update their bias table (158) and table(s) (162), respectively, based on the evaluation of the conditional instruction, as indicated in blocks (414, 416). As described above in FIGS. 2 and 3 , the update of the bias table (158) may change the value for the conditional instruction from an initial state such as "00" to "01" (e.g., indicating biased false) or "10" (e.g., indicating biased true) when the evaluation indicates that the condition of the conditional instruction is actually true or false, respectively, or may change the value from "01" or "10" to "11" (e.g., indicating unbiased) when the evaluation indicates that a previous biased true or biased false prediction was actually a prediction error. In contrast, the instruction prediction circuit (160) may update the value(s) for the conditional instruction in the table(s) (162( i )) of the base and tagged predictors (T i ) (0 ≤ i ≤ M) from a relatively weaker prediction to a relatively stronger prediction (e.g., from weakly true "10" to strongly true "11", or from weakly false "01" to strongly false "00"), or may keep the value at the relatively stronger prediction (e.g., strongly true "11" or strongly false "00"), when the evaluation verifies that the instruction prediction from the instruction prediction circuit (160) is not a misprediction; Alternatively, when the evaluation indicates that the instruction prediction from the instruction prediction circuit (160) is a misprediction, it may be updated from a relatively stronger prediction to a relatively weaker prediction (e.g., from a strongly true "11" to a weakly true "10", or from a strongly false "00" to a weakly false "01"), or from a relatively weaker prediction to the opposite relatively weaker prediction (e.g., from a weakly true "10" or a weakly false "01", or vice versa).
이제 도 5를 참조하면, 명령어 분배 회로(520) 및 실행 파이프라인들(504, 506)을 포함하는 프로세서(30)의 일부의 일 실시예의 블록도가 도시된다. 도 5에서, 명령어 분배 회로(520)는 페치 및 디코드 회로(100)로부터 예측과 연관된 조건부 명령어를 수신하고, 조건부 명령어의 예측의 신뢰 수준에 따라 504 및 506과 같은 복수의 실행 파이프라인들 중 하나에 조건부 명령어를 분배할 수 있다. 조건부 명령어가 상대적으로 높은 신뢰 수준을 갖는다고 결정될 때, 명령어 분배 회로는 조건부 명령어를 제1 실행 파이프라인(504)에 분배할 수 있다. 반대로, 조건부 명령어가 상대적으로 낮은 신뢰 수준을 갖는다고 결정될 때, 명령어 분배 회로는 조건부 명령어를 제2 실행 파이프라인(506)에 분배할 수 있다. 실행 파이프라인들(504, 506) 사이의 하나의 차이는, 조건부 명령어가 잘못 예측될 때, 실행 파이프라인(504)이 아닌 실행 파이프라인(506)이 실행을 위해 올바른 타깃 어드레스로부터 명령어를 획득하기 위해 페치 및 디코드(100)를 재지향시키는 능력을 가질 수 있다는 것일 수 있다(또한 리페치로 칭해짐).Referring now to FIG. 5 , a block diagram of one embodiment of a portion of a processor (30) including an instruction distribution circuit (520) and execution pipelines (504, 506) is illustrated. In FIG. 5 , the instruction distribution circuit (520) may receive a conditional instruction associated with a prediction from the fetch and decode circuit (100) and may distribute the conditional instruction to one of a plurality of execution pipelines, such as 504 and 506, depending on a confidence level of the prediction of the conditional instruction. When the conditional instruction is determined to have a relatively high confidence level, the instruction distribution circuit may distribute the conditional instruction to a first execution pipeline (504). Conversely, when the conditional instruction is determined to have a relatively low confidence level, the instruction distribution circuit may distribute the conditional instruction to a second execution pipeline (506). One difference between the execution pipelines (504, 506) may be that when a conditional instruction is mispredicted, the execution pipeline (506), rather than the execution pipeline (504), may have the ability to redirect the fetch and decode (100) to obtain the instruction from the correct target address for execution (also called a refetch).
따라서, 실행 파이프라인(504)이 조건부 명령어에 대한 예측 오류를 검출할 때, 실행 파이프라인(504)은 실행을 위해 올바른 타깃 어드레스로부터의 명령어의 리페치를 지시하기 위해 실행 파이프라인(506)을 사용해야 할 수 있다. 예를 들어, 실행 파이프라인(504)은 실행 파이프라인(506)에서 버블(bubble)을 생성할 수 있고, 이어서 실행 파이프라인(506)에 의해 실행될 수 있도록 조건부 명령어를 버블에 삽입할 수 있다. 일단 실행 파이프라인(506)이 조건부 명령어를 실행하여 또한 조건부 명령어가 잘못 예측되었다고 결정하면, 실행 파이프라인(506)은 실행을 위해 올바른 타깃 어드레스로부터 명령어를 리페치하기 위해 페치 및 디코드(100)를 재지향시킬 수 있다. 예를 들어, 실행 파이프라인(504)이 아닌 실행 파이프라인(506)은 페치 및 디코드 회로(100)로의 통신 경로를 가질 수 있으며, 이를 통해 실행 파이프라인(506)은 페치 및 디코드 회로(100)가 리페치를 수행하도록 지시할 수 있다. 조건부 명령어가 이미 실행 파이프라인(504)에서 실행된다는 것을 고려하면, 실행 파이프라인(506)에서의 조건부 명령어의 제2 실행은 또한 조건부 명령어의 재실행(re-execution) 또는 리플레이(re-play)로 간주될 수 있다. 또한, 예시된 실시예에서, 실행 파이프라인(506)은 또한, 잘못 예측된 조건부 명령어와 함께 하나 이상의 비조건부 명령어들을 실행하기 위해 버블을 사용할 수 있다. 예를 들어, 실행 파이프라인(506)은 버블에 의해 생성된, 잘못 예측된 조건부 명령어와 동일한 사이클에서 하나 이상의 비조건부 명령어들을 실행할 수 있다.Therefore, when the execution pipeline (504) detects a misprediction for a conditional instruction, the execution pipeline (504) may need to use the execution pipeline (506) to direct a refetch of the instruction from the correct target address for execution. For example, the execution pipeline (504) may create a bubble in the execution pipeline (506) and then insert the conditional instruction into the bubble for execution by the execution pipeline (506). Once the execution pipeline (506) executes the conditional instruction and determines that the conditional instruction was also mispredicted, the execution pipeline (506) may redirect the fetch and decode (100) to refetch the instruction from the correct target address for execution. For example, the execution pipeline (506), rather than the execution pipeline (504), may have a communication path to the fetch and decode circuitry (100), through which the execution pipeline (506) may instruct the fetch and decode circuitry (100) to perform a re-fetch. Given that the conditional instruction has already been executed in the execution pipeline (504), the second execution of the conditional instruction in the execution pipeline (506) may also be considered a re-execution or re-play of the conditional instruction. Additionally, in the illustrated embodiment, the execution pipeline (506) may also use a bubble to execute one or more non-conditional instructions along with the mispredicted conditional instruction. For example, the execution pipeline (506) may execute one or more non-conditional instructions in the same cycle as the mispredicted conditional instruction generated by the bubble.
예시된 실시예에서, 그것이 잘못 예측된 조건부 명령어를 검출할 때, 실행 파이프라인(504)은, 올바른 타깃 어드레스로부터의 명령어가 실행 파이프라인(504)에 의해 성공적으로 실행될 때까지 반드시 임의의 레지스터들 또는 메모리에 결과들을 후기록하지는(write back) 않을 수 있다. 이것은 올바른 결과만 레지스터들 또는 메모리에 기록되는 것을 보증한다. 그러나, 이는 또한 실행 파이프라인(504)의 리타이어(retirement)를 지연시킬 수 있고, 따라서 실행 파이프라인(404)에 추가의 지연을 야기할 수 있다. 그에 비해, 잘못 예측된 조건부 명령어가 초기에 실행 파이프라인(506)에 분배될 때, 실행 파이프라인(506)은 예측 오류를 검출하고, 직접 페치 및 디코드 회로(100)로 하여금 실행을 위한 올바른 타깃 어드레스로부터의 실행을 획득하게 하여, 실행에 대한 최소 지연을 야기할 수 있다. 따라서, 잘못 예측된 조건부 명령어들의 프로세싱에서의 상이한 레이턴시들로 인해, 실행 파이프라인(504)은 "느린" 실행 파이프라인으로 간주될 수 있는 반면, 실행 파이프라인(506)은 "빠른" 실행 파이프라인으로서 간주될 수 있다. 때때로, 실행 파이프라인들(504, 506)은 동일한 스테이지들 또는 동일한 수의 스테이지들을 포함할 수 있다. 다시 말해서, 예측 오류가 없는 조건부 명령어들의 경우, 실행 파이프라인들(504, 506)은 반드시 상이한 레이턴시들을 갖지는 않을 수 있고, 상이한 레이턴시들은 잘못 예측된 조건부 명령어들에 대해서만 존재할 수 있는데, 이는 실행 파이프라인(504)이 리페치를 위해 페치 및 디코드 회로(100)에 직접 지시하는 능력이 부족하기 때문이다. 대안적으로, 때때로 실행 파이프라인(504)은 실행 파이프라인(506)보다 더 많은 스테이지들 또는 더 큰 수의 스테이지들을 가질 수 있다. 그 결과, 조건부 명령어가 잘못 예측되는지 여부에 관계없이, 실행 파이프라인(504)은 항상 실행 파이프라인(506)보다 더 큰 레이턴시를 가질 수 있다.In the illustrated embodiment, when it detects a mispredicted conditional instruction, the execution pipeline (504) may not necessarily write back the results to any registers or memory until the instruction from the correct target address has been successfully executed by the execution pipeline (504). This ensures that only the correct results are written to the registers or memory. However, this may also delay the retirement of the execution pipeline (504), thus causing additional delay in the execution pipeline (404). In contrast, when a mispredicted conditional instruction is initially distributed to the execution pipeline (506), the execution pipeline (506) can detect the misprediction and cause the fetch and decode circuit (100) to obtain execution from the correct target address for execution, thereby causing minimal delay to execution. Therefore, due to the different latencies in processing the mispredicted conditional instructions, the execution pipeline (504) may be considered a "slow" execution pipeline, while the execution pipeline (506) may be considered a "fast" execution pipeline. Sometimes, the execution pipelines (504, 506) may include the same stages or the same number of stages. In other words, for non-mispredicted conditional instructions, the execution pipelines (504, 506) may not necessarily have different latencies, and the different latencies may only exist for mispredicted conditional instructions, since the execution pipeline (504) lacks the ability to directly direct the fetch and decode circuit (100) for refetting. Alternatively, sometimes the execution pipeline (504) may have more stages or a greater number of stages than the execution pipeline (506). As a result, the execution pipeline (504) may always have a greater latency than the execution pipeline (506), regardless of whether conditional instructions are mispredicted.
예시된 실시예에서, 조건부 명령어를 분배하기 위해 명령어 분배 회로(502)에 의해 사용되는 조건부 명령어의 예측은 (a) 바이어스 예측 회로(156)로부터의 바이어스 예측 또는 (b) 명령어 예측 회로(160)로부터의 명령어 예측일 수 있다. 예를 들어, 전술한 바와 같이, 바이어스 예측 회로(156)가 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이라는 바이어스 예측을 제공할 때, 페치 및 디코드 회로(100)는 바이어스 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다. 그 경우, 명령어 분배 회로(502)는 바이어스 예측 회로(156)로부터의 바이어스 예측을 사용하여 조건부 명령어의 분배를 결정할 수 있다. 반대로, 바이어스 예측 회로(156)가 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓이 아니라고 예측할 때, 페치 및 디코드 회로(100)는 명령어 예측 회로(160)로부터의 명령어 예측을 사용하여 조건부 명령어를 추론적으로 프로세싱할 수 있다. 그 경우, 명령어 분배 회로(502)는 명령어 예측 회로(160)로부터의 명령어 예측을 사용하여 조건부 명령어의 분배를 결정할 수 있다. 다시 말해서, 본 명세서에 개시된 조건부 명령어의 예측은, 페치 및 디코드 회로(100)가 그에 기초하여 조건부 명령어를 추론적으로 프로세싱하는, 조건부 명령어의 예측일 수 있다.In the illustrated embodiment, the prediction of the conditional instruction used by the instruction distribution circuit (502) to dispense the conditional instruction may be (a) a bias prediction from the bias prediction circuit (156) or (b) an instruction prediction from the instruction prediction circuit (160). For example, as described above, when the bias prediction circuit (156) provides a bias prediction that the condition of the conditional instruction is biased true or biased false, the fetch and decode circuit (100) may use the bias prediction to speculatively process the conditional instruction. In that case, the instruction distribution circuit (502) may use the bias prediction from the bias prediction circuit (156) to determine the dispensing of the conditional instruction. Conversely, when the bias prediction circuit (156) predicts that the condition of the conditional instruction is not biased true or biased false, the fetch and decode circuit (100) may use the instruction prediction from the instruction prediction circuit (160) to speculatively process the conditional instruction. In that case, the instruction distribution circuit (502) can determine the distribution of the conditional instruction using the instruction prediction from the instruction prediction circuit (160). In other words, the prediction of the conditional instruction disclosed in the present specification can be a prediction of a conditional instruction on which the fetch and decode circuit (100) speculatively processes the conditional instruction based thereon.
예시된 실시예에서, 예측의 신뢰 수준은 하나 이상의 기준들에 대해 결정될 수 있다. 예를 들어, 조건부 명령어의 예측이 바이어스 예측 회로(156)로부터의 바이어스 예측일 때(예를 들어, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓으로 예측될 때), 명령어 분배 회로(502)는 예측이 높은 신뢰 수준을 갖는다고 결정할 수 있다. 또한, 예측이 명령어 예측 회로(160)로부터의 명령어 예측일 때(예를 들어, 조건부 명령어가 바이어스된 참 또는 바이어스된 거짓으로 예측되지 않을 때), 명령어 분배 회로(502)는, 명령어 예측이 포화된 카운터를 갖는 태깅된 예측기(T i ) 또는 고차 테이블을 갖는 태깅된 예측기(T i )에 의해 제공되는 경우(예를 들어, 명령어 예측 회로(160)가 TAGE 예측기일 때), 예측이 높은 신뢰 수준을 갖는다고 결정할 수 있다. 그렇지 않고, 조건부 명령어의 예측이 위의 하나 이상의 기준들을 만족시키지 못할 때, 명령어 분배 회로(502)는 예측이 낮은 신뢰 수준을 갖는다고 결정할 수 있다.In the illustrated embodiment, the confidence level of a prediction can be determined for one or more criteria. For example, when the prediction of a conditional instruction is a biased prediction from the bias prediction circuit (156) (e.g., when the conditional instruction is predicted as biased true or biased false), the instruction distribution circuit (502) can determine that the prediction has a high confidence level. Additionally, when the prediction is an instruction prediction from the instruction prediction circuit (160) (e.g., when the conditional instruction is not predicted as biased true or biased false), the instruction distribution circuit (502) can determine that the prediction has a high confidence level if the instruction prediction is provided by a tagged predictor (T i ) having a saturated counter or a tagged predictor (T i ) having a high-order table (e.g., when the instruction prediction circuit (160) is a TAGE predictor). Otherwise, when the prediction of the conditional instruction does not satisfy one or more of the criteria above, the instruction distribution circuit (502) can determine that the prediction has a low confidence level.
신뢰 수준이 높을 때, 명령어 분배 회로(502)는 조건부 명령어를 "느린" 실행 파이프라인(504)에 분배할 수 있다. 반대로, 신뢰 수준이 낮을 때, 명령어 분배 회로(502)는 조건부 명령어를 실행 파이프라인(506)(예를 들어, "느린" 실행 파이프라인)에 분배할 수 있다. 동작 관점에서, 이는, 조건부 명령어가 높은 신뢰 수준으로 예측될 때, 명령어 분배 회로(502)는 조건부 명령어가 잘못 예측될 가능성이 더 낮다고 추정할 수 있고, 따라서 실행 파이프라인(504)(예를 들어, "느린" 실행 파이프라인)에서의 조건부 명령어의 실행은 리페치를 야기할 가능성이 더 낮을 수 있다는 것을 의미한다. 그에 비해, 조건부 명령어가 낮은 신뢰 수준으로 예측될 때, 명령어 분배 회로(502)는 예측이 잘못될 가능성이 더 높다고 추정할 수 있다. 따라서, 명령어 분배 회로(502)는 조건부 명령어를 실행 파이프라인(506)(예를 들어, "빠른" 실행 파이프라인)에 분배하여 리페치에 대한 잠재적 지연들을 감소시킬 수 있다.When the confidence level is high, the instruction distribution circuit (502) may distribute the conditional instruction to the “slow” execution pipeline (504). Conversely, when the confidence level is low, the instruction distribution circuit (502) may distribute the conditional instruction to the execution pipeline (506) (e.g., the “slow” execution pipeline). From an operational perspective, this means that when a conditional instruction is predicted with a high confidence level, the instruction distribution circuit (502) may estimate that the conditional instruction is less likely to be mispredicted, and thus execution of the conditional instruction in the execution pipeline (504) (e.g., the “slow” execution pipeline) may be less likely to result in a refetch. In contrast, when a conditional instruction is predicted with a low confidence level, the instruction distribution circuit (502) may estimate that the misprediction is more likely to result in a refetch. Thus, the instruction distribution circuit (502) can distribute conditional instructions to the execution pipeline (506) (e.g., a “fast” execution pipeline) to reduce potential delays for refetting.
때때로, 명령어 분배 회로(502)는 실행 파이프라인들(504, 506) 사이의 부하 균형화를 수행할 수 있다. 예를 들어, 명령어 분배 회로(502)는, 조건부 명령어들의 예측들보다는, 실행 파이프라인들의 점유들에 기초하여 조건부 명령어들을 실행 파이프라인들(504, 506)에 분배할 수 있다. 예를 들어, 실행 파이프라인(504)이 과부하되고 실행 파이프라인(506)이 과소점유될(underoccupied) 때, 명령어 분배 회로(502)는 실행을 위해 높은 신뢰 수준의 예측과 연관된 조건부 명령어를 실행 파이프라인(506)에 분배할 수 있다.At times, the instruction distribution circuit (502) may perform load balancing between the execution pipelines (504, 506). For example, the instruction distribution circuit (502) may distribute conditional instructions to the execution pipelines (504, 506) based on occupancies of the execution pipelines rather than on predictions of the conditional instructions. For example, when the execution pipeline (504) is overloaded and the execution pipeline (506) is underoccupied, the instruction distribution circuit (502) may distribute conditional instructions associated with a high confidence level prediction for execution to the execution pipeline (506).
이제 도 6을 참조하면, 명령어 분배 회로(502) 및 상이한 실행 파이프라인들(504, 506)을 포함하는 프로세서(30)의 동작들의 일 실시예를 예시하는 흐름도가 도시된다. 예시된 실시예에서, 블록(602)에 표시된 바와 같이, 예측과 연관된 조건부 명령어가 명령어 분배 회로(502)에서 수신될 수 있다. 전술한 바와 같이, 조건부 명령어의 예측은 (a) 바이어스 예측 회로(156)로부터의 바이어스 예측 또는 (b) 명령어 예측 회로(160)로부터의 명령어 예측일 수 있다.Referring now to FIG. 6, a flow diagram illustrating one embodiment of the operations of a processor (30) including an instruction distribution circuit (502) and different execution pipelines (504, 506) is depicted. In the illustrated embodiment, a conditional instruction associated with a prediction may be received at the instruction distribution circuit (502), as indicated at block (602). As described above, the prediction of the conditional instruction may be (a) a bias prediction from the bias prediction circuit (156) or (b) an instruction prediction from the instruction prediction circuit (160).
예시된 실시예에서, 명령어 분배 회로(502)는, 블록(604)에 표시된 바와 같이, 하나 이상의 기준들에 대하여 조건부 명령어의 예측을 평가하여 예측의 신뢰 수준을 결정할 수 있다. 예를 들어, 명령어 분배 회로(502)는, 예측이 바이어스 예측 회로(156)에 의해 제공된 바이어스 예측(예를 들어, 바이어스 참 또는 바이어스된 거짓)인지, 또는 포화된 카운터를 갖는 태깅된 예측기(T i ) 또는 명령어 예측 회로(160)의 고차 테이블을 갖는 태깅된 예측기(T i )에 의해 제공된 명령어 예측(예를 들어, 참 또는 거짓)(예를 들어, 명령어 예측 회로(160)가 TAGE 예측기일 때)인지 여부를 결정할 수 있다. 만약 그렇다면, 명령어 분배 회로(502)는 조건부 명령어가 높은 신뢰 수준을 갖는다고 결정할 수 있다. 그렇지 않으면, 명령어 분배 회로(502)는 조건부 명령어가 낮은 신뢰 수준을 갖는다고 결정할 수 있다.In the illustrated embodiment, the instruction distribution circuit (502) may determine a confidence level of the prediction by evaluating the prediction of the conditional instruction against one or more criteria, as indicated at block (604). For example, the instruction distribution circuit (502) may determine whether the prediction is a biased prediction (e.g., biased true or biased false) provided by the bias prediction circuit (156), or an instruction prediction (e.g., true or false) provided by a tagged predictor (T i ) having a saturated counter or a tagged predictor (T i ) having a high-order table of the instruction prediction circuit (160) (e.g., when the instruction prediction circuit (160) is a TAGE predictor). If so, the instruction distribution circuit (502) may determine that the conditional instruction has a high confidence level. Otherwise, the instruction distribution circuit (502) may determine that the conditional instruction has a low confidence level.
명령어 분배 회로(502)는 하나 이상의 기준들에 대한 조건부 명령어의 예측의 신뢰 수준에 따라 조건부 명령어를 복수의 실행 파이프라인들 중 하나에 분배할 수 있다. 예를 들어, 신뢰 수준이 높을 때, 명령어 분배 회로(502)는, 블록(606)에 표시된 바와 같이, 실행을 위해 조건부 명령어를 실행 파이프라인(504)(예를 들어, "느린" 실행 파이프라인)에 분배할 수 있다. 그렇지 않고, 신뢰 수준이 낮을 때, 명령어 분배 회로(502)는, 블록(610)에 표시된 바와 같이, 실행을 위해 조건부 명령어를 실행 파이프라인(506)(예를 들어, "빠른" 실행 파이프라인)에 분배할 수 있다.The instruction distribution circuit (502) may distribute a conditional instruction to one of a plurality of execution pipelines based on a confidence level of the prediction of the conditional instruction for one or more criteria. For example, when the confidence level is high, the instruction distribution circuit (502) may distribute the conditional instruction to the execution pipeline (504) (e.g., a “slow” execution pipeline) for execution, as indicated at block (606). Otherwise, when the confidence level is low, the instruction distribution circuit (502) may distribute the conditional instruction to the execution pipeline (506) (e.g., a “fast” execution pipeline) for execution, as indicated at block (610).
조건부 명령어가 실행 파이프라인(504)에 분배될 때, 조건부 명령어의 실행은, 블록(608)에 표시된 바와 같이, 조건부 명령어의 예측이 예측 오류라고 결정할 수 있다. 이에 응답하여, 실행 파이프라인(504)은, 블록(610)에 표시된 바와 같이, 잘못 예측된 조건부 명령어가 실행 파이프라인(506)에서 재실행 또는 리플레이되게 할 수 있다. 전술한 바와 같이, 예시된 실시예에서, 실행 파이프라인(504)은 실행 파이프라인(506)에서 버블을 생성하고, 실행 파이프라인(506)에 의해 실행될 수 있도록 잘못 예측된 조건부 명령어를 버블에 삽입할 수 있다. 전술한 바와 같이, 실행 파이프라인(506)에서의 조건부 명령어의 실행은, 블록(612)에 표시된 바와 같이, 조건부 명령어가 잘못 예측된다고 결정할 수 있다. 실행 파이프라인(506)은, 블록(614)에 표시된 바와 같이, 실행을 위해 조건부 명령어의 올바른 타깃 어드레스로부터 명령어를 획득하도록 페치 및 디코드 회로(100)에 지시할 수 있다.When a conditional instruction is dispatched to the execution pipeline (504), execution of the conditional instruction may determine that a prediction of the conditional instruction is a misprediction, as indicated at block (608). In response, the execution pipeline (504) may cause the mispredicted conditional instruction to be re-executed or replayed in the execution pipeline (506), as indicated at block (610). As described above, in the illustrated embodiment, the execution pipeline (504) may create a bubble in the execution pipeline (506) and insert the mispredicted conditional instruction into the bubble so that it may be executed by the execution pipeline (506). As described above, execution of the conditional instruction in the execution pipeline (506) may determine that the conditional instruction is mispredicted, as indicated at block (612). The execution pipeline (506) may direct the fetch and decode circuit (100) to obtain an instruction from the correct target address of a conditional instruction for execution, as indicated at block (614).
이제 도 7을 참조하면, 명령어 분배 회로(520) 및 실행 파이프라인들(504, 506, 708, 710)을 포함하는 프로세서(30)의 일부의 일 실시예의 블록도가 도시된다. 예시된 실시예에서, 실행 파이프라인(708)은 실행 파이프라인(504)(예를 들어, "느린" 실행 파이프라인)과 유사할 수 있어서, 실행 파이프라인(708)은 잘못 예측된 조건부 명령어에 대한 리페치를 수행하도록 페치 및 디코드 회로(100)에 직접 지시하는 능력이 부족하다. 그에 비해, 실행 파이프라인(710)은 실행 파이프라인(506)(예를 들어, "빠른" 실행 파이프라인)과 유사할 수 있어서, 실행 파이프라인(710)은 또한 잘못 예측된 조건부 명령어에 대한 리페치를 수행하도록 페치 및 디코드 회로(100)에 직접 지시할 수 있다. 예를 들어, 실행 파이프라인(506)과 같이, 실행 파이프라인(710)은 또한 잘못 예측된 조건부 명령어들에 대한 리페치를 지시하도록 페치 및 디코드 회로로의 통신 경로를 가질 수 있다. 따라서, 도 7에서, 프로세서(30)는 2개의 "느린" 실행 파이프라인들(예를 들어, 실행 파이프라인들(504, 708)) 및 2개의 "빠른" 실행 파이프라인들(예를 들어, 실행 파이프라인들(507, 710))을 포함한다. 도 7은 예시의 목적들을 위한 예로서만 제공된다는 것에 유의한다. 때때로, 프로세서(30)는 더 적거나 더 많은 "느린" 실행 파이프라인들, 및/또는 더 적거나 더 많은 "빠른" 실행 파이프라인들을 포함할 수 있다.Referring now to FIG. 7, a block diagram of one embodiment of a portion of a processor (30) including an instruction distribution circuit (520) and execution pipelines (504, 506, 708, 710) is illustrated. In the illustrated embodiment, the execution pipeline (708) may be similar to the execution pipeline (504) (e.g., a “slow” execution pipeline) such that the execution pipeline (708) lacks the ability to directly direct the fetch and decode circuit (100) to perform a refetch for a mispredicted conditional instruction. In contrast, the execution pipeline (710) may be similar to the execution pipeline (506) (e.g., a “fast” execution pipeline) such that the execution pipeline (710) can also directly direct the fetch and decode circuit (100) to perform a refetch for a mispredicted conditional instruction. For example, as with execution pipeline (506), execution pipeline (710) may also have a communication path to the fetch and decode circuitry to direct refetting of mispredicted conditional instructions. Thus, in FIG. 7, the processor (30) includes two “slow” execution pipelines (e.g., execution pipelines (504, 708)) and two “fast” execution pipelines (e.g., execution pipelines (507, 710)). Note that FIG. 7 is provided as an example only for illustrative purposes. At times, the processor (30) may include fewer or more “slow” execution pipelines, and/or fewer or more “fast” execution pipelines.
도 7에 표시한 바와 같이, 명령어 분배 회로(502)는 조건부 명령어들의 예측들의 신뢰 수준들에 따라 조건부 명령어들을 실행 파이프라인들(504, 506, 708, 710)에 분배할 수 있다. 예시된 실시예에서, 조건부 명령어의 예측들의 신뢰 수준은, 도 5 및 도 6에서 전술한 바와 같이, 하나 이상의 기준들에 대해 결정될 수 있다. 따라서, 명령어 분배 회로(502)는 실행을 위해 높은 신뢰 수준들의 예측들과 연관된 조건부 명령어를 실행 파이프라인들(504, 708)(예를 들어, "느린" 실행 파이프라인들)에 분배할 수 있고, 실행을 위해 낮은 신뢰 수준들의 예측들과 연관된 조건부 명령어를 실행 파이프라인들(506, 710)(예를 들어, "빠른" 실행 파이프라인들)에 분배할 수 있다.As illustrated in FIG. 7, the instruction distribution circuit (502) can distribute conditional instructions to the execution pipelines (504, 506, 708, 710) based on the confidence levels of the predictions of the conditional instructions. In the illustrated embodiment, the confidence levels of the predictions of the conditional instructions can be determined with respect to one or more criteria, as described above with reference to FIGS. 5 and 6. Accordingly, the instruction distribution circuit (502) can distribute conditional instructions associated with high confidence levels of predictions to the execution pipelines (504, 708) (e.g., “slow” execution pipelines) for execution, and can distribute conditional instructions associated with low confidence levels of predictions to the execution pipelines (506, 710) (e.g., “fast” execution pipelines) for execution.
예시된 실시예에서, 실행 파이프라인들(504, 506, 708, 710)은 병렬로 동작하여, 거의 동시에 하나 이상의 조건부 명령어들을 프로세싱할 수 있다. 그러나, 예시된 실시예에서, 실행 파이프라인(506)과 같은 "빠른" 실행 파이프라인들 중 하나만이, (리페치를 야기하기 위해) 실행 파이프라인들(504, 708)과 같은 "느린" 실행 파이프라인들로부터 제공되는 잘못 예측된 조건 명령어를 재실행 또는 리플레이하는 데 사용될 수 있다. 따라서, 실행 파이프라인들(504, 708) 둘 모두가 각각 잘못 예측된 조건부 명령어를 검출할 때, 프로세서(30)는, 도 7에 나타낸 바와 같이, 제1 예측 오류 선택 회로(712)를 사용하여, 실행 파이프라인(506)에서의 재실행 또는 리플레이를 위한 실행 파이프라인들(504, 708)로부터의 잘못 예측된 조건부 명령어들 중 하나를 선택할 수 있다.In the illustrated embodiment, the execution pipelines (504, 506, 708, 710) may operate in parallel, processing one or more conditional instructions at approximately the same time. However, in the illustrated embodiment, only one of the "fast" execution pipelines, such as the execution pipeline (506), may be used to re-execute or replay a mispredicted conditional instruction provided from the "slow" execution pipelines, such as the execution pipelines (504, 708) (to cause a refetch). Thus, when both of the execution pipelines (504, 708) detect a mispredicted conditional instruction, the processor (30) may use the first misprediction selection circuit (712), as illustrated in FIG. 7, to select one of the mispredicted conditional instructions from the execution pipelines (504, 708) for re-execution or replay in the execution pipeline (506).
예시된 실시예에서, 선택은 실행 파이프라인들(504, 708)의 각각의 2개의 잘못 예측된 조건부 명령어들의 연령들에 따라 수행될 수 있다. 예를 들어, 제1 예측 오류 선택 회로(712)는 실행 파이프라인(504)에서의 제1 잘못 예측된 조건부 명령어의 연령과 실행 파이프라인(708)에서의 제2 잘못 예측된 조건부 명령어의 연령을 비교하고, 2개의 조건부 명령어들 중 더 오래된 것이 실행 파이프라인(506)에서 실행되게 할 수 있다. 조건부 명령어의 연령은 다양한 방식들 중 하나로 획득될 수 있다. 예를 들어, 페치 및 디코드 회로(100)는, 조건부 명령어가 디코더(154)에 의해 디코딩될 때 조건부 명령어에 Gnum과 같은 수를 할당할 수 있다. Gnum은 각각의 명령어에 대한 단조 증가하는(또는 감소하는) 고유한 수일 수 있다. 따라서, 더 신생의 명령어에는 더 작은 Gnum(또는 더 큰 Gnum)이 할당될 수 있는 반면, 더 오래된 명령어에는 더 큰 Gnum(또는 더 작은 Gnum)이 할당될 수 있다. 따라서, 제1 예측 오류 선택 회로(712)는 2개의 조건부 명령어들의 Gnum들을 비교하여 더 오래된 조건부 명령어를 선택할 수 있다. 또한, 때때로 조건부 명령어의 연령은 또한 프로세서(30)의 재정렬 버퍼(reorder buffer, ROB)(108) 내의 조건부 명령어의 순서에 기초하여 결정될 수 있다.In the illustrated embodiment, the selection may be performed based on the ages of the two mispredicted conditional instructions in each of the execution pipelines (504, 708). For example, the first misprediction selection circuit (712) may compare the age of the first mispredicted conditional instruction in the execution pipeline (504) to the age of the second mispredicted conditional instruction in the execution pipeline (708) and cause the older of the two conditional instructions to be executed in the execution pipeline (506). The age of the conditional instruction may be obtained in one of a variety of ways. For example, the fetch and decode circuit (100) may assign a number, such as Gnum, to the conditional instruction when the conditional instruction is decoded by the decoder (154). Gnum may be a unique number that is monotonically increasing (or decreasing) for each instruction. Accordingly, a younger instruction may be assigned a smaller Gnum (or a larger Gnum), while an older instruction may be assigned a larger Gnum (or a smaller Gnum). Accordingly, the first misprediction selection circuit (712) may compare the Gnums of two conditional instructions to select the older conditional instruction. Additionally, sometimes the age of a conditional instruction may also be determined based on the order of the conditional instructions within a reorder buffer (ROB) (108) of the processor (30).
제1 예측 오류 선택 회로(712)가 선택을 하면, 대응하는 실행 파이프라인(예를 들어, 실행 파이프라인(504))은 실행 파이프라인(506)에 버블을 생성하고, 실행 파이프라인(506)에 의해 실행될 수 있도록 선택된 조건부 명령어를 버블에 삽입할 수 있다. 일단 실행 파이프라인(506)이 조건부 명령어를 실행하고 그것이 잘못 예측되었음을 검출하면, 실행 파이프라인(506)은, 전술한 바와 같이, 실행을 위해 잘못 예측된 조건부 명령어의 올바른 타깃 어드레스로부터 명령어를 획득하도록 페치 및 디코드 회로(100)에 지시할 수 있다. 제1 예측 오류 선택 회로(712)에 의한 선택은 반드시 비선택된 잘못 예측된 조건부 명령어가 실행 파이프라인(506)에 의해 재실행 또는 리플레이되지는 않을 것이라는 것을 의미하지는 않을 수 있다는 점에 유의한다. 대신에, 그것은 단지, "느린" 실행 파이프라인들(504, 708) 둘 모두가 거의 동시에 예측 오류를 검출할 때, 충돌을 해결하기 위해, 조건부 명령어들 중 하나가 리페치를 먼저 야기하도록 선택될 수 있다는 것을 의미한다. 그 후, 다른 비선택된 조건부 명령어는 다른 리페치를 지시하기 위해 실행 파이프라인(506)에 의해 재실행 또는 리플레이될 수 있다.When the first misprediction selection circuit (712) makes a selection, the corresponding execution pipeline (e.g., execution pipeline (504)) can create a bubble in the execution pipeline (506) and insert the selected conditional instruction into the bubble so that it can be executed by the execution pipeline (506). Once the execution pipeline (506) executes the conditional instruction and detects that it has been mispredicted, the execution pipeline (506) can instruct the fetch and decode circuit (100) to retrieve the instruction from the correct target address of the mispredicted conditional instruction for execution, as described above. Note that a selection by the first misprediction selection circuit (712) may not necessarily mean that the unselected mispredicted conditional instruction will not be re-executed or replayed by the execution pipeline (506). Instead, it simply means that when both "slow" execution pipelines (504, 708) detect misprediction at about the same time, one of the conditional instructions may be selected to cause a refetch first to resolve the conflict. The other non-selected conditional instruction may then be re-executed or replayed by the execution pipeline (506) to direct another refetch.
그러나, 예시된 실시예에서, 2개의 "빠른" 실행 파이프라인들(506, 710)을 포함하는 복수의 실행 파이프라인들이 명령어들을 병렬로 프로세싱할 수 있다는 것을 고려하면, 실행 파이프라인(506)(예를 들어, 제1 "빠른" 실행 파이프라인)이 잘못 예측된 조건부 명령어를 검출할 때 거의 동시에 실행 파이프라인(710)(예를 들어, 제2 "빠른" 실행 파이프라인)이 또한 잘못 예측된 조건부 명령어를 검출할 수 있다는 것이 가능하다. 이는 또한 충돌을 생성할 수 있다. 도 7에 나타낸 바와 같이, 그 경우, 프로세서(30)는 제2 예측 선택 회로(714)를 사용하여, 리페치를 위해 2개의 "빠른" 실행 파이프라인들(506, 710)로부터의 2개의 잘못 예측된 조건부 명령어들 중 하나를 선택할 수 있다. 예를 들어, 제2 예측 오류 회로(714)는 실행 파이프라인(506)에서의 제1 잘못 예측된 조건부 명령어의 연령과 실행 파이프라인(710)에서의 제2 잘못 예측된 조건부 명령어의 연령을 비교하고, 2개의 조건부 명령어들 중 더 오래된 것을 선택하여, 실행을 위해 타깃 어드레스로부터 명령어를 획득하도록 페치 및 디코드 회로(100)에 지시할 수 있다.However, given that in the illustrated embodiment, multiple execution pipelines, including two "fast" execution pipelines (506, 710), may process instructions in parallel, it is possible that when execution pipeline (506) (e.g., the first "fast" execution pipeline) detects a mispredicted conditional instruction, execution pipeline (710) (e.g., the second "fast" execution pipeline) may also detect a mispredicted conditional instruction at about the same time. This may also create a conflict. As illustrated in FIG. 7 , in that case, the processor (30) may use the second prediction selection circuit (714) to select one of the two mispredicted conditional instructions from the two "fast" execution pipelines (506, 710) for refetch. For example, the second misprediction circuit (714) can compare the age of a first mispredicted conditional instruction in the execution pipeline (506) with the age of a second mispredicted conditional instruction in the execution pipeline (710), select the older of the two conditional instructions, and instruct the fetch and decode circuit (100) to obtain the instruction from the target address for execution.
이제 도 8을 참조하면, 명령어 분배 회로(502) 및 상이한 실행 파이프라인들(504, 506, 708, 710)을 포함하는 프로세서(30)의 동작들의 일 실시예를 예시하는 흐름도가 도시된다. 예시된 실시예에서, 블록(802)에 표시된 바와 같이, 예측과 연관된 조건부 명령어가 명령어 분배 회로(502)에서 수신될 수 있다. 전술한 바와 같이, 조건부 명령어의 예측은 (a) 바이어스 예측 회로(156)로부터의 바이어스 예측 또는 (b) 명령어 예측 회로(160)로부터의 명령어 예측일 수 있다.Referring now to FIG. 8, a flow diagram illustrating one embodiment of the operations of a processor (30) including an instruction distribution circuit (502) and different execution pipelines (504, 506, 708, 710) is depicted. In the illustrated embodiment, a conditional instruction associated with a prediction may be received by the instruction distribution circuit (502), as indicated at block (802). As described above, the prediction of the conditional instruction may be (a) a bias prediction from the bias prediction circuit (156) or (b) an instruction prediction from the instruction prediction circuit (160).
예시된 실시예에서, 명령어 분배 회로(502)는, 블록(704)에 표시된 바와 같이, 하나 이상의 기준들에 대하여 조건부 명령어의 예측을 평가하여 예측의 신뢰 수준을 결정할 수 있다. 명령어 분배 회로(502)는 하나 이상의 기준들에 대한 조건부 명령어의 예측의 신뢰 수준에 따라 조건부 명령어를 복수의 실행 파이프라인들 중 하나에 분배할 수 있다. 예를 들어, 신뢰 수준이 높을 때, 명령어 분배 회로(502)는, 블록(806)에 표시된 바와 같이, 실행을 위해 조건부 명령어를 실행 파이프라인들(504, 708)(예를 들어, "느린" 실행 파이프라인) 중 하나에 분배할 수 있다. 그렇지 않고, 신뢰 수준이 낮을 때, 명령어 분배 회로(502)는, 블록(812)에 표시된 바와 같이, 실행을 위해 조건부 명령어를 실행 파이프라인들(506, 710)(예를 들어, "빠른" 실행 파이프라인) 중 하나에 분배할 수 있다.In the illustrated embodiment, the instruction distribution circuit (502) may evaluate the prediction of a conditional instruction against one or more criteria to determine a confidence level of the prediction, as indicated at block (704). The instruction distribution circuit (502) may distribute the conditional instruction to one of the plurality of execution pipelines based on the confidence level of the prediction of the conditional instruction for the one or more criteria. For example, when the confidence level is high, the instruction distribution circuit (502) may distribute the conditional instruction to one of the execution pipelines (504, 708) (e.g., a “slow” execution pipeline) for execution, as indicated at block (806). Otherwise, when the confidence level is low, the instruction distribution circuit (502) may distribute the conditional instruction to one of the execution pipelines (506, 710) (e.g., a “fast” execution pipeline) for execution, as indicated at block (812).
조건부 명령어가 실행 파이프라인들(504, 708) 중 하나에 분배될 때, 조건부 명령어의 실행은, 블록(808)에 표시된 바와 같이, 조건부 명령어의 예측이 예측 오류라고 결정할 수 있다. 그러나, 실행 파이프라인들(504, 708) 중 다른 하나도 거의 동시에 잘못 예측된 조건부 명령어를 검출할 수 있다. 따라서, 충돌을 해결하기 위해, 프로세서(30)는, 블록(810)에 표시된 바와 같이, 제1 예측 오류 선택 회로(712)를 사용하여, 실행 파이프라인(506)에 의해 재실행 또는 리플레이될 실행 파이프라인들(504, 708)로부터 2개의 잘못 예측된 조건부 명령어들 중 하나를 선택할 수 있다. 예시된 실시예에서, 선택은 2개의 조건부 명령어들의 연령들에 기초하여 수행될 수 있다. 예를 들어, 제1 예측 오류 선택 회로(712)는, 블록(812)에 표시된 바와 같이, 실행 파이프라인(504)에서의 제1 잘못 예측된 조건부 명령어의 연령 제1 연령과 실행 파이프라인(708)에서의 제2 잘못 예측된 조건부 명령어의 연령을 비교하고, 2개의 조건부 명령어들 중 더 오래된 것이 실행 파이프라인(506)에서 실행되게 할 수 있다.When a conditional instruction is dispatched to one of the execution pipelines (504, 708), execution of the conditional instruction may determine that the prediction of the conditional instruction is a misprediction, as indicated at block (808). However, another one of the execution pipelines (504, 708) may also detect the mispredicted conditional instruction at about the same time. Therefore, to resolve the conflict, the processor (30) may use the first misprediction selection circuit (712), as indicated at block (810), to select one of the two mispredicted conditional instructions from the execution pipelines (504, 708) to be re-executed or replayed by the execution pipeline (506). In the illustrated embodiment, the selection may be performed based on the ages of the two conditional instructions. For example, the first misprediction selection circuit (712) may compare the age of a first mispredicted conditional instruction in the execution pipeline (504) with the age of a second mispredicted conditional instruction in the execution pipeline (708), as indicated in block (812), and cause the older of the two conditional instructions to be executed in the execution pipeline (506).
예시된 실시예에서, 실행 파이프라인(506)에서의 조건부 명령어의 실행은, 블록(814)에 표시된 바와 같이, 조건부 명령어가 잘못 예측된다고 결정할 수 있다. 또한, 다른 실행 파이프라인(710)(예를 들어, 제2 "빠른" 실행 파이프라인)은 또한, 실행 파이프라인(506)이 잘못 예측된 조건부 명령어를 검출할 때 거의 동시에 잘못 예측된 조건부 명령어를 검출할 수 있다. 따라서, 프로세서(30)는, 블록(816)에 표시된 바와 같이, 제2 예측 오류 회로(714)를 사용하여 실행 파이프라인들(506, 710)로부터의 2개의 잘못 예측된 조건부 명령어들 중 하나를 선택할 수 있다. 따라서, 블록(818)에 의해 표시된 바와 같이, 선택된 잘못 예측된 조건부 명령어의 실행 파이프라인(506 또는 710)은, 실행을 위해 선택된 잘못 예측된 조건부 명령어의 올바른 타깃 어드레스로부터 명령어를 획득하도록 페치 및 디코드 회로(100)에 지시할 수 있다.In the illustrated embodiment, execution of a conditional instruction in the execution pipeline (506) may determine that the conditional instruction is mispredicted, as indicated by block (814). Additionally, another execution pipeline (710) (e.g., a second “fast” execution pipeline) may also detect the mispredicted conditional instruction at approximately the same time that the execution pipeline (506) detects the mispredicted conditional instruction. Accordingly, the processor (30) may use the second misprediction circuit (714), as indicated by block (816), to select one of the two mispredicted conditional instructions from the execution pipelines (506, 710). Accordingly, the execution pipeline (506 or 710) of the selected mispredicted conditional instruction may instruct the fetch and decode circuit (100) to obtain an instruction from the correct target address of the selected mispredicted conditional instruction for execution, as indicated by block (818).
도 9는 도 1 내지 도 8에 설명된 바이어스 예측 회로(156), 명령어 예측 회로(160), 및/또는 명령어 분배 회로(502)를 포함하는 프로세서(30)의 일 실시예의 블록도이다. 도 9는 예시의 목적들을 위한 예로서만 제공된다는 것에 유의한다. 따라서, 때때로 프로세서(30)는 예시된 컴포넌트들의 전부가 아니라 일부만을 포함할 수 있다. 예를 들어, 때때로 프로세서(30)는 바이어스 예측 회로(156) 및 명령어 예측 회로(160)를 포함할 수 있지만, 명령어 분배 회로(502)는 포함하지 않을 수 있다.FIG. 9 is a block diagram of one embodiment of a processor (30) including the bias prediction circuit (156), the instruction prediction circuit (160), and/or the instruction distribution circuit (502) described in FIGS. 1 through 8. It is noted that FIG. 9 is provided as an example only for illustrative purposes. Thus, at times, the processor (30) may include only some, but not all, of the illustrated components. For example, at times, the processor (30) may include the bias prediction circuit (156) and the instruction prediction circuit (160), but not the instruction distribution circuit (502).
예시된 실시예에서, 프로세서(30)는 페치 및 디코드 유닛(100)(명령어 캐시 또는 ICache(102)를 포함함), 맵-디스패치-재명명(MDR) 유닛(106)(재정렬 버퍼(ROB)(108)를 포함함), 하나 이상의 예비 스테이션들(110), 하나 이상의 실행 유닛들(112), 레지스터 파일(114), 데이터 캐시(DCache)(104), 로드/저장 유닛(LSU)(118), 로드/저장 유닛에 대한 예비 스테이션(RS)(116), 및 코어 인터페이스 유닛(core interface unit, CIF)(122)을 포함한다. 페치 및 디코드 유닛(100)은, 예비 스테이션들(110), 예비 스테이션(116), 및 LSU(118)에 커플링되는 MDR 유닛(106)에 커플링된다. 예비 스테이션들(110)은 실행 유닛들(28)에 커플링된다. 레지스터 파일(114)은 실행 유닛들(112) 및 LSU(118)에 커플링된다. LSU(118)는 또한, CIF(122) 및 레지스터 파일(114)에 커플링되는 DCache(104)에 커플링된다. LSU(118)는 저장 큐(120)(STQ(120)) 및 로드 큐(LDQ(124))를 포함한다.In the illustrated embodiment, the processor (30) includes a fetch and decode unit (100) (including an instruction cache or ICache (102)), a map-dispatch-rename (MDR) unit (106) (including a reorder buffer (ROB) (108)), one or more spare stations (110), one or more execution units (112), a register file (114), a data cache (DCache) (104), a load/store unit (LSU) (118), a spare station (RS) for the load/store unit (116), and a core interface unit (CIF) (122). The fetch and decode unit (100) is coupled to the MDR unit (106), which is coupled to the spare stations (110), the spare station (116), and the LSU (118). The spare stations (110) are coupled to the execution units (28). The register file (114) is coupled to the execution units (112) and the LSU (118). The LSU (118) is also coupled to the DCache (104), which is coupled to the CIF (122) and the register file (114). The LSU (118) includes a store queue (120) (STQ (120)) and a load queue (LDQ (124)).
페치 및 디코드 유닛(100)은 프로세서(30)에 의한 실행을 위해 명령어들을 페치하고 명령어들을 실행을 위해 op들로 디코딩하도록 구성될 수 있다. 더 구체적으로, 페치 및 디코드 유닛(100)은 (CIF(122)를 통해) 메모리로부터 이전에 페치된 명령어들을 ICache(102)에서 캐싱하도록 구성될 수 있고, 프로세서(30)를 위한 명령어들의 추론적 경로를 페치하도록 구성될 수 있다. 전술한 바와 같이, 예시된 실시예에서, 페치 및 디코드 유닛(100)은 조건부 명령어에 대한 각자의 예측들을 제공하기 위해 바이어스 예측 회로(156) 및 명령어 예측 회로(160)를 포함할 수 있다. 페치 및 디코드 유닛(100)은 페치 경로를 예측하기 위해 다양한 예측 구조들을 구현할 수 있다. 예를 들어, 그 다음의(next) 페치 예측기는 이전에 실행된 명령어들에 기반하여, 페치 어드레스들을 예측하기 위해 사용될 수 있다. 다양한 유형들의 브랜치(branch) 예측기들은 그 다음의 페치 예측을 검증하기 위해 사용될 수 있거나, 또는 그 다음의 페치 예측기가 사용되지 않는 경우 그 다음의 페치 어드레스들을 예측하기 위해 사용될 수 있다. 페치 및 디코드 유닛(100)은 명령어들을 명령어 동작들로 디코딩하도록 구성될 수 있다. 일부 실시예들에서, 주어진 명령어는 명령어의 복잡성에 의존하여, 하나 이상의 명령어 동작들로 디코딩될 수 있다. 특히, 복잡한 명령어들은 일부 실시예들에서 마이크로코딩될 수 있다. 그러한 실시예들에서, 명령어에 대한 마이크로코드 루틴은 명령어 동작들로 코딩될 수 있다. 다른 실시예들에서, 프로세서(30)에 의해 구현된 명령어 세트 아키텍처 내의 명령어 각각은 단일 명령어 동작으로 디코딩될 수 있고, 이로써, 명령어 동작은 명령어와 기본적으로 같은 뜻일 수 있다(그러나, 그것은 디코더에 의해 형태가 수정될 수 있음). 용어 "명령어 동작"은 보다 간략하게 본 명세서에서 "동작" 또는 "op"로 지칭될 수 있다.The fetch and decode unit (100) may be configured to fetch instructions for execution by the processor (30) and to decode the instructions into ops for execution. More specifically, the fetch and decode unit (100) may be configured to cache previously fetched instructions from memory (via the CIF (122)) in the ICache (102) and to fetch a speculative path of instructions for the processor (30). As described above, in the illustrated embodiment, the fetch and decode unit (100) may include bias prediction circuitry (156) and instruction prediction circuitry (160) to provide respective predictions for conditional instructions. The fetch and decode unit (100) may implement various prediction structures to predict the fetch path. For example, a next fetch predictor may be used to predict fetch addresses based on previously executed instructions. Various types of branch predictors may be used to verify the next fetch prediction, or may be used to predict the next fetch addresses if the next fetch predictor is not used. The fetch and decode unit (100) may be configured to decode instructions into instruction operations. In some embodiments, a given instruction may be decoded into one or more instruction operations, depending on the complexity of the instruction. In particular, complex instructions may be microcoded in some embodiments. In such embodiments, the microcode routine for the instruction may be coded into instruction operations. In other embodiments, each instruction in the instruction set architecture implemented by the processor (30) may be decoded into a single instruction operation, such that the instruction operation may be essentially synonymous with the instruction (although it may be reshaped by the decoder). The term "instruction operation" may be more succinctly referred to herein as an "operation" or an "op."
MDR 유닛(106)은 비순차적 및/또는 추론적 실행을 허용하기 위해 op들을 추론적 자원들(예를 들어, 물리적 레지스터들)에 맵핑하도록 구성될 수 있고, op들을 예비 스테이션들(110 및 116)에 디스패치할 수 있다. 도 9에 나타낸 바와 같이, 예시된 실시예에서, MDR 유닛(106)은 명령어 분배 회로(502)를 포함할 수 있다. op들은 대응하는 명령어들에서 사용된 아키텍처 레지스터들로부터 레지스터 파일(114)의 물리적 레지스터들에 맵핑될 수 있다. 즉, 레지스터 파일(114)은 프로세서(30)에 의해 구현된 명령어 세트 아키텍처에 의해 특정된 아키텍처적 레지스터들보다 수가 더 많을 수 있는 물리적 레지스터들의 세트를 구현할 수 있다. MDR 유닛(106)은 아키텍처적 레지스터들과 물리적 레지스터들의 맵핑을 관리할 수 있다. 실시예에서 상이한 피연산자 유형들(예컨대 정수, 미디어, 부동 소수점 등)에 대한 별개의 물리적 레지스터들이 있을 수 있다. 다른 실시예들에서, 물리적 레지스터들은 피연산자 유형들을 통해 공유될 수 있다. MDR 유닛(106)은 또한 추론적 실행을 추적하고 op들을 리타이어하거나, 잘못-추론된 op들을 플러싱(flushing)하는 것을 담당할 수 있다. 재정렬 버퍼(108)는 op들의 프로그램 순서를 추적하고 리타이어/플러시를 관리하는 데 사용될 수 있다. 즉, 재정렬 버퍼(108)는 프로세서에 의해 페치되고 프로세서에 의해 리타이어되지 않은 명령어들에 대응하는 복수의 명령어 동작들을 추적하도록 구성될 수 있다.The MDR unit (106) may be configured to map ops to speculative resources (e.g., physical registers) to allow out-of-order and/or speculative execution, and may dispatch the ops to the standby stations (110 and 116). As shown in FIG. 9 , in the illustrated embodiment, the MDR unit (106) may include instruction distribution circuitry (502). The ops may be mapped from architectural registers used in corresponding instructions to physical registers of the register file (114). That is, the register file (114) may implement a set of physical registers that may be larger in number than the architectural registers specified by the instruction set architecture implemented by the processor (30). The MDR unit (106) may manage the mapping of the architectural registers to the physical registers. In an embodiment, there may be separate physical registers for different operand types (e.g., integer, media, floating point, etc.). In other embodiments, physical registers may be shared across operand types. The MDR unit (106) may also be responsible for tracking speculative execution and retiring ops or flushing mis-speculated ops. The reorder buffer (108) may be used to track the program order of ops and manage retires/flushes. That is, the reorder buffer (108) may be configured to track multiple instruction operations corresponding to instructions that have been fetched by the processor and not retired by the processor.
op들은, op들에 대한 소스 피연산자들이 준비될 때 실행을 위해 스케줄링될 수 있다. 예시된 실시예에서, 예를 들어, 예비 스테이션들(116 및 110)에서 실행 유닛들(28) 및 LSU(118) 각각에 대해 탈중앙집중형 스케줄링이 사용된다. 다른 실시예들은, 원하는 경우 중앙집중형 스케줄러를 구현할 수 있다.The ops can be scheduled for execution when source operands for the ops are ready. In the illustrated embodiment, decentralized scheduling is used, for example, for each of the execution units (28) and the LSU (118) in the standby stations (116 and 110). Other embodiments may implement a centralized scheduler, if desired.
LSU(118)는 로드/저장 메모리 op들을 실행하도록 구성될 수 있다. 일반적으로, (메모리 액세스는 DCache(104)와 같은 캐시에서 완료될 수 있지만) 메모리 동작(메모리 op)은 메모리에 대한 액세스를 특정하는 명령어 동작일 수 있다. 로드 메모리 동작은 메모리 위치로부터 레지스터로 데이터의 전송을 특정할 수 있는 반면, 저장 메모리 동작은 레지스터로부터 메모리 위치로 데이터의 전송을 특정할 수 있다. 로드 메모리 동작들은 로드 메모리 op들, 로드 op들 또는 로드들로 지칭될 수 있고; 저장 메모리 동작들은 저장 메모리 op들, 저장 op들 또는 저장들로 지칭될 수 있다. 일 실시예에서, 저장 op들은 저장 어드레스 op 및 저장 데이터 op로서 실행될 수 있다. 저장 어드레스 op는 저장의 어드레스를 생성하고, 초기 히트/미스 결정에 대해 캐시를 프로빙하고, 어드레스 및 캐시 정보를 갖는 저장 큐를 업데이트하도록 정의될 수 있다. 따라서, 저장 어드레스 op는 소스 피연산자들로서 어드레스 피연산자들을 가질 수 있다. 저장 데이터 op는 저장 큐에 저장 데이터를 전달하도록 정의될 수 있다. 따라서, 저장 데이터 op는 소스 피연산자들로서 어드레스 피연산자들을 갖지 않을 수 있지만, 소스 피연산자로서 저장 데이터 피연산자를 가질 수 있다. 많은 경우들에서, 저장소의 어드레스 피연산자들은 저장 데이터 피연산자 이전에 이용가능할 수 있고, 따라서 어드레스는 저장 데이터보다 더 일찍 결정되고 이용가능하게 될 수 있다. 일부 실시예들에서, 예를 들어, 저장 데이터 피연산자가 저장 어드레스 피연산자들 중 하나 이상 전에 제공되는 경우, 저장 데이터 op가 대응하는 저장 어드레스 op 이전에 실행되는 것이 가능할 수 있다. 일부 실시예들에서, 저장 op들은 저장 어드레스 및 저장 데이터 op들로서 실행될 수 있지만, 다른 실시예들은 저장 어드레스/저장 데이터 분할을 구현하지 않을 수 있다. 본 개시의 나머지는 일 예로서 저장 어드레스 op들(및 저장 데이터 op들)을 종종 사용할 것이지만, 저장 어드레스/저장 데이터 최적화를 사용하지 않는 구현들이 또한 고려된다. 저장 어드레스 op의 실행을 통해 생성된 어드레스는 저장 op에 대응하는 어드레스로 지칭될 수 있다.The LSU (118) may be configured to execute load/store memory ops. In general, a memory operation (memory op) may be an instruction operation that specifies an access to memory (although the memory access may be completed in a cache such as DCache (104)). A load memory operation may specify the transfer of data from a memory location to a register, while a store memory operation may specify the transfer of data from a register to a memory location. Load memory operations may be referred to as load memory ops, load ops, or loads; and store memory operations may be referred to as store memory ops, store ops, or stores. In one embodiment, the store ops may be executed as a store address op and a store data op. The store address op may be defined to generate an address of a store, probe a cache for an initial hit/miss determination, and update a store queue with the address and cache information. Thus, the store address op may have address operands as source operands. The store data op may be defined to transfer store data to a store queue. Thus, a store data op may not have address operands as source operands, but may have a store data operand as a source operand. In many cases, the address operands of the storage may be available before the store data operand, and thus the address may be determined and available earlier than the store data. In some embodiments, it may be possible for a store data op to be executed before the corresponding store address op, for example, if the store data operand is provided before one or more of the store address operands. In some embodiments, the store ops may be executed as store address and store data ops, while other embodiments may not implement store address/store data splitting. The remainder of this disclosure will often use store address ops (and store data ops) as examples, although implementations that do not utilize store address/store data optimization are also contemplated. An address generated by execution of a store address op may be referred to as an address corresponding to the store op.
로드/저장 op들은 예비 스테이션(116)에서 수신될 수 있으며, 이는, 동작들의 소스 피연산자들을 모니터링하여, 이들이 이용가능한 때를 결정하고, 이어서, 로드 또는 저장 파이프라인들에 동작들을 각각 발행하도록 구성될 수 있다. 동작들이 예비 스테이션(116)에서 수신될 때 일부 소스 피연산자들이 이용가능할 수 있으며, 이는 대응하는 동작에 대해 MDR 유닛(106)으로부터 예비 스테이션(116)에 의해 수신된 데이터에 표시될 수 있다. 다른 피연산자들은 다른 실행 유닛들(112)에 의한 동작들의 실행을 통해 또는 심지어 더 앞선 로드 op들의 실행을 통해 이용가능하게 될 수 있다. 피연산자들은 예비 스테이션(116)에 의해 수집될 수 있거나, 또는 도 6에 도시된 바와 같이 예비 스테이션(116)으로부터 발행 시에 레지스터 파일(114)로부터 판독될 수 있다.Load/store ops may be received at the standby station (116), which may be configured to monitor the source operands of the operations to determine when they are available, and then issue the operations to the load or store pipelines, respectively. Some of the source operands may be available when the operations are received at the standby station (116), which may be indicated in the data received by the standby station (116) from the MDR unit (106) for the corresponding operation. Other operands may become available through execution of operations by other execution units (112), or even through execution of earlier load ops. The operands may be collected by the standby station (116), or may be read from the register file (114) upon issuance from the standby station (116), as illustrated in FIG. 6 .
일 실시예에서, 예비 스테이션(116)은, 피연산자들이 이용가능해짐에 따라 ("프로그램 순서"로 지칭되는, 프로세서(30)에 의해 실행되고 있는 코드 시퀀스 내의 그들의 원래 순서로부터) 순서 없이 로드/저장 op들을 발행하도록 구성될 수 있다. 예비 스테이션(116)에서 더 신생의 동작들에 의해 우회되는 더 오래된 동작들을 위한 공간이 LDQ(124) 또는 STQ(120)에 존재함을 보장하기 위해, MDR 유닛(106)은 LDQ(124) 또는 STQ(120) 엔트리들을 로드/저장 유닛(118)에 송신되는 동작들에 미리 할당하는 회로부를 포함할 수 있다. MDR 유닛(106)에서 프로세싱되는 로드에 대해 이용가능한 LDQ 엔트리가 존재하지 않으면, MDR 유닛(106)은 하나 이상의 LDQ 엔트리들이 이용가능하게 될 때까지 프로그램 순서로 로드 op 및 후속 op들의 디스패치를 지연시킬 수 있다. 유사하게, 저장에 대해 이용가능한 STQ 엔트리가 존재하지 않으면, MDR 유닛(106)은 하나 이상의 STQ 엔트리들이 이용가능하게 될 때까지 op 디스패치를 지연시킬 수 있다. 다른 실시예들에서, 예비 스테이션(116)은 프로그램 순서로 동작들을 발행할 수 있고, LRQ(46)/STQ(120) 할당은 예비 스테이션(116)으로부터 발행 시에 발생할 수 있다.In one embodiment, the standby station (116) may be configured to issue load/store ops out of order (from their original order within the code sequence being executed by the processor (30), referred to as “program order”) as operands become available. To ensure that there is space in the LDQ (124) or STQ (120) for older operations to be bypassed by newer operations in the standby station (116), the MDR unit (106) may include circuitry that pre-allocates LDQ (124) or STQ (120) entries to operations being sent to the load/store unit (118). If there is no LDQ entry available for a load being processed by the MDR unit (106), the MDR unit (106) may delay dispatching the load op and subsequent ops in program order until one or more LDQ entries become available. Similarly, if there is no STQ entry available for storage, the MDR unit (106) may delay op dispatch until one or more STQ entries become available. In other embodiments, the standby station (116) may issue operations in program order, and LRQ (46)/STQ (120) allocation may occur upon issuance from the standby station (116).
LDQ(124)는 초기 실행으로부터 LSU(118)에 의한 리타이어까지 로드들을 추적할 수 있다. LDQ(124)는 메모리 순서화 규칙들이 (순서 없이 실행된 로드들 사이 뿐만 아니라 로드들과 저장들 사이에서) 위반되지 않음을 보장하는 것을 담당할 수 있다. 메모리 순서화 위반이 검출되면, LDQ(124)는 대응하는 로드에 대한 재지향을 시그널링할 수 있다. 재지향은 프로세서(30)로 하여금, 로드 및 후속 op들을 프로그램 순서로 플러싱하게 하고, 대응하는 명령어들을 리페치하게 할 수 있다. 로드 및 후속적인 op들에 대한 추론적 상태는 폐기될 수 있고, op들은 페치 및 디코드 유닛(100)에 의해 리페치되고 다시 실행되도록 리프로세싱될 수 있다.The LDQ (124) may track loads from initial execution through retirement by the LSU (118). The LDQ (124) may be responsible for ensuring that memory ordering rules are not violated (between loads executed out of order as well as between loads and stores). If a memory ordering violation is detected, the LDQ (124) may signal a reordering for the corresponding load. The reordering may cause the processor (30) to flush the load and subsequent ops into program order and to refetch the corresponding instructions. Speculative state for the load and subsequent ops may be discarded, and the ops may be reprocessed to be refetched and re-executed by the fetch and decode unit (100).
로드/저장 어드레스 op가 예비 스테이션(116)에 의해 발행될 때, LSU(118)는 로드/저장에 의해 액세스되는 어드레스를 생성하도록 구성될 수 있고, 로드/저장 어드레스 op의 어드레스 피연산자들로부터 생성된 유효 또는 가상 어드레스로부터, 실제로 어드레스 메모리에 사용되는 물리적 어드레스로 어드레스를 변환하도록 구성될 수 있다. LSU(118)는 DCache(104)에 대한 액세스를 생성하도록 구성될 수 있다. DCache(104)에서 히트되는 로드 동작들의 경우, 데이터는, 어드레스가 STQ(120)에서 선행 동작(즉, 프로그램 순서에서 더 오래된 저장)에 히트하지 않는 한 또는 로드가 리플레이되지 않는 한, DCache(104)로부터 로드 동작의 목적지 피연산자(예를 들어, 레지스터 파일(114)의 레지스터)로 추론적으로 포워딩될 수 있다. 데이터는 또한, 추론적으로 스케줄링되었고 실행 유닛들(112)에 있는 종속적인 op들에 포워딩될 수 있다. 이러한 경우들에서, 실행 유닛들(112)은 레지스터 파일(114)로부터 출력된 데이터 대신에 포워딩된 데이터를 우회할 수 있다. 저장 데이터가 STQ 히트에 대한 포워딩에 이용가능한 경우, STQ(120)에 의해 출력된 데이터는 캐시 데이터 대신 포워딩될 수 있다. 데이터가 포워딩될 수 없는 캐시 미스들 및 STQ 히트들은 리플레이에 대한 이유들일 수 있고, 로드 데이터는 그러한 경우들에서 포워딩되지 않을 수 있다. DCache(104)로부터의 캐시 히트/미스 상태는 추후의 프로세싱을 위해 STQ(120) 또는 LDQ(124)에서 로깅될 수 있다.When a load/store address op is issued by the standby station (116), the LSU (118) may be configured to generate an address accessed by the load/store and to translate the address from a valid or virtual address generated from the address operands of the load/store address op to a physical address actually used in the address memory. The LSU (118) may be configured to generate an access to the DCache (104). For load operations that hit in the DCache (104), data may be speculatively forwarded from the DCache (104) to the destination operand of the load operation (e.g., a register in the register file (114)) unless the address hits a preceding operation in the STQ (120) (i.e., an older store in program order) or unless the load is being replayed. The data may also be speculatively scheduled and forwarded to dependent ops in the execution units (112). In these cases, the execution units (112) may bypass the forwarded data instead of the data output from the register file (114). If the store data is available for forwarding for an STQ hit, the data output by the STQ (120) may be forwarded instead of the cache data. Cache misses and STQ hits where data cannot be forwarded may be reasons for replay, and load data may not be forwarded in such cases. The cache hit/miss status from the DCache (104) may be logged in the STQ (120) or LDQ (124) for later processing.
LSU(118)는 다수의 부하 파이프라인들을 구현할 수 있다. 예를 들어, 일 실시예에서, 3개의 로드 파이프라인들("파이프들")이 구현될 수 있지만, 다른 실시예들에서는 더 많거나 더 적은 파이프라인들이 구현될 수 있다. 각각의 파이프라인은 상이한 로드들을 독립적으로 그리고 다른 로드들과 병렬로 실행할 수 있다. 즉, RS(116)는 동일한 클록 사이클에서 로드 파이프들의 수까지 임의의 수의 로드들을 발행할 수 있다. LSU(118)는 또한 하나 이상의 저장 파이프들을 구현할 수 있고, 특히 다수의 저장 파이프들을 구현할 수 있다. 그러나, 저장 파이프들의 수는 로드 파이프들의 수와 동일할 필요는 없다. 일 실시예에서, 예를 들어, 2개의 저장 파이프들이 사용될 수 있다. 예비 스테이션(116)은 저장 파이프들에 대해 독립적으로 그리고 병렬로 저장 어드레스 op들 및 저장 데이터 op들을 발행할 수 있다. 저장 파이프들은, 실행되었지만 커밋(commit)하지 않은 저장 동작들을 유지하도록 구성될 수 있는 STQ(120)에 커플링될 수 있다.The LSU (118) may implement multiple load pipelines. For example, in one embodiment, three load pipelines (“pipes”) may be implemented, although in other embodiments, more or fewer pipelines may be implemented. Each pipeline may execute different loads independently and in parallel with other loads. That is, the RS (116) may issue any number of loads up to the number of load pipes in the same clock cycle. The LSU (118) may also implement one or more store pipes, and in particular may implement multiple store pipes. However, the number of store pipes need not be the same as the number of load pipes. In one embodiment, for example, two store pipes may be used. The standby station (116) may issue store address ops and store data ops independently and in parallel to the store pipes. The store pipes may be coupled to an STQ (120), which may be configured to maintain store operations that have been executed but not committed.
CIF(122)는 프로세서(30)를 대신하여 프로세서(30)를 포함하는 시스템의 나머지와 통신하는 것을 담당할 수 있다. 예를 들어, CIF(122)는 DCache(104) 미스들 및 ICache(102) 미스들에 대한 데이터를 요청하도록 구성될 수 있다. 데이터가 리턴될 때, CIF(122)는 캐시 충전을 대응하는 캐시에 시그널링할 수 있다. DCache 충전들의 경우, CIF(122)는 또한 LSU(118)에 통지할 수 있다. LDQ(124)는, 충전 데이터가 DCache(104)에 제공될 때(충전 포워드 동작으로 지칭됨) 리플레이된 로드들이 충전 데이터를 포워딩할 수 있도록, 캐시 충전을 대기하고 있는 리플레이된 로드들을 스케줄링하려고 시도할 수 있다. 리플레이된 로드가 충전 동안 성공적으로 리플레이되지 않으면, 리플레이된 로드는 후속적으로 스케줄링되고 캐시 히트로서 DCache(104)를 통해 리플레이될 수 있다. CIF(122)는 또한 DCache(104)에 의해 축출된 수정된 캐시 라인들을 후기록하고, 비-캐시가능한 저장소들에 대한 저장 데이터를 병합하는 등을 할 수 있다. 다른 예에서, CIF(122)는 프로세서(30)에 대한 인터럽트-관련 신호들, 예를 들어, 프로세서(30)를 포함하는 시스템의 주변기기 디바이스로부터의/로의 인터럽트 요청들 및/또는 확인응답/비-확인응답 신호들을 통신할 수 있다.The CIF (122) may be responsible for communicating with the rest of the system including the processor (30) on behalf of the processor (30). For example, the CIF (122) may be configured to request data for DCache (104) misses and ICache (102) misses. When the data is returned, the CIF (122) may signal a cache fill to the corresponding cache. For DCache fills, the CIF (122) may also notify the LSU (118). The LDQ (124) may attempt to schedule replayed loads that are waiting for a cache fill so that the replayed loads can forward the fill data when the fill data is provided to the DCache (104) (referred to as a fill forward operation). If a replayed load is not successfully replayed during a fill, the replayed load may be subsequently scheduled and replayed through the DCache (104) as a cache hit. CIF (122) may also write back modified cache lines evicted by DCache (104), merge store data to non-cacheable stores, etc. In another example, CIF (122) may communicate interrupt-related signals to the processor (30), e.g., interrupt requests and/or acknowledge/non-acknowledge signals from/to peripheral devices of the system including the processor (30).
실행 유닛들(112)은 다양한 실시예들에서 임의의 유형들의 실행 유닛들을 포함할 수 있다. 예를 들어, 실행 유닛들(112)은 정수, 부동 소수점, 및/또는 벡터 실행 유닛들을 포함할 수 있다. 정수 실행 유닛들은 정수 op들을 실행하도록 구성될 수 있다. 일반적으로, 정수 op는 정수 피연산자들에 관한 정의 동작(예컨대 산술의, 논리의, 시프트/회전의, 기타 등등)을 수행하는 op이다. 정수들은 각각의 값이 수학적 정수에 대응하는 수치들일 수 있다. 정수 실행 유닛들은 브랜치 op들을 프로세싱하기 위해 브랜치 프로세싱 하드웨어를 포함할 수 있거나, 또는 별개의 브랜치 실행 유닛들이 있을 수 있다. 전술한 바와 같이, 실행 유닛들(112) 및 연관된 예비 스테이션들(110)은 도 1 내지 도 8에 설명된 바와 같은 하나 이상의 실행 파이프라인들(164, 504, 506, 708, 및/또는 710)을 구현할 수 있다.The execution units (112) may include any types of execution units in various embodiments. For example, the execution units (112) may include integer, floating point, and/or vector execution units. The integer execution units may be configured to execute integer ops. Generally, an integer op is an op that performs a defined operation (e.g., arithmetic, logical, shift/rotate, etc.) on integer operands. The integers may be numerical values, each of which corresponds to a mathematical integer. The integer execution units may include branch processing hardware to process branch ops, or there may be separate branch execution units. As described above, the execution units (112) and associated spare stations (110) may implement one or more execution pipelines (164, 504, 506, 708, and/or 710) as described in FIGS. 1 through 8.
부동 소수점 실행 유닛들은 부동 소수점 op들을 실행하도록 구성될 수 있다. 일반적으로, 부동 소수점 op들은 부동 소수점 피연산자들에 관해 동작하기 위해 정의되었던 op들일 수 있다. 부동 소수점 피연산자는, 지수가 있는 밑(a base raised to an exponent power)으로 나타내고 가수(mantissa)(또는 유효수(significand))로 곱해진 피연산자이다. 지수, 피연산자의 기호, 및 가수/유효수는 피연산자에서 명확하게 나타날 수 있고, 밑은 내포될 수 있다(예컨대, 실시예에서, 밑이 2임).Floating point execution units can be configured to execute floating point ops. In general, floating point ops can be ops that are defined to operate on floating point operands. A floating point operand is an operand represented by a base raised to an exponent power and multiplied by a mantissa (or significand). The exponent, the sign of the operand, and the mantissa/significand can be explicitly shown in the operand, and the base can be implied (e.g., in an embodiment, the base is 2).
벡터 실행 유닛들은 벡터 op들을 실행하도록 구성될 수 있다. 벡터 op들은 예를 들어, 미디어 데이터(예컨대, 픽셀들과 같은 이미지 데이터, 오디오 데이터 등)를 프로세싱하기 위해 사용될 수 있다. 미디어 프로세싱은 상당한 양의 데이터에 관해 동일한 프로세싱을 수행함으로써 특징지어질 수 있고, 이때 각각의 데이터는 상대적으로 작은 값이다(예컨대, 정수가 32 비트 내지 64 비트인 것에 비해, 8 비트, 또는 16 비트임). 따라서, 벡터 op들은 단일 명령어-다수 데이터(single instruction-multiple data, SIMD), 또는 다수의 미디어 데이터를 나타내는 피연산자에 관한 벡터 동작들을 포함한다.Vector execution units can be configured to execute vector ops. Vector ops can be used, for example, to process media data (e.g., image data such as pixels, audio data, etc.). Media processing can be characterized by performing the same processing on a large amount of data, each of which is a relatively small value (e.g., 8 bits or 16 bits, compared to integers which are 32 bits or 64 bits). Thus, vector ops include single instruction-multiple data (SIMD), or vector operations on operands representing multiple media data.
이로써, 각각의 실행 유닛(112)은, 다루기 위해 특정 실행 유닛이 정의된 op들에 대해 정의된 동작들을 수행하도록 구성된 하드웨어를 포함할 수 있다. 실행 유닛들은, 각각의 실행 유닛이 다른 실행 유닛들과의 의존성 없이 그 실행 유닛에 발행된 op에 관해 동작되도록 구성될 수 있다는 점에서, 일반적으로 서로 독립적일 수 있다. 또 다른 방식으로 보면, 각각의 실행 유닛은 op들을 실행하는 독립적인 파이프(independent pipe)일 수 있다. 상이한 실행 유닛들은 상이한 실행 레이턴시들(예를 들어, 상이한 파이프 길이들)을 가질 수 있다. 추가적으로, 상이한 실행 유닛들은 우회가 발생하는 파이프라인 스테이지에 대해 상이한 레이턴시들을 가질 수 있으며, 따라서 로드 op에 기초하여 종속적 op들의 추론적 스케줄링이 발생하는 클록 사이클들은 op의 유형 및 op를 실행할 실행 유닛(28)에 기초하여 변할 수 있다.Thus, each execution unit (112) may include hardware configured to perform the operations defined for the ops that the particular execution unit is defined to handle. The execution units may be generally independent of one another in that each execution unit may be configured to operate on the ops issued to it without dependencies on other execution units. Viewed another way, each execution unit may be an independent pipe executing the ops. Different execution units may have different execution latencies (e.g., different pipe lengths). Additionally, different execution units may have different latencies with respect to the pipeline stage where the bypass occurs, and thus the clock cycles over which speculative scheduling of dependent ops based on a load op occurs may vary based on the type of op and the execution unit (28) that will execute the op.
임의의 수 및 유형의 실행 유닛들(112)이 하나의 실행 유닛을 가진 실시예들, 및 다수의 실행 유닛들을 가진 실시예들을 포함한 다양한 실시예들에 포함될 수 있음을 유의한다.It is noted that any number and type of execution units (112) may be included in various embodiments, including embodiments having one execution unit, and embodiments having multiple execution units.
캐시 라인은 캐시 내의 할당 및 반납(deallocation)의 단위일 수 있다. 즉, 캐시 라인 내의 데이터는 한 단위로서 캐시에 할당/반납될 수 있다. 캐시 라인들은 크기가 변할 수 있다(예컨대, 32 바이트, 64 바이트, 128 바이트, 또는 더 크거나 더 작은 캐시 라인들). 상이한 캐시들은 상이한 캐시 라인 크기들을 가질 수 있다. ICache(102) 및 DCache(104)는 각각 임의의 원하는 용량, 캐시 라인 크기, 및 구성을 갖는 캐시일 수 있다. 다양한 실시예들에서, DCache(104)/ICache(102)와 메인 메모리 사이에 더 많은 추가적인 레벨들의 캐시가 존재할 수 있다.A cache line may be a unit of allocation and deallocation within a cache. That is, data within a cache line may be allocated/deallocated to/from the cache as a unit. Cache lines may vary in size (e.g., 32 bytes, 64 bytes, 128 bytes, or larger or smaller cache lines). Different caches may have different cache line sizes. ICache (102) and DCache (104) may each be caches having any desired capacity, cache line size, and configuration. In various embodiments, there may be more additional levels of cache between DCache (104)/ICache (102) and main memory.
다양한 포인트들에서, 로드/저장 동작들은 다른 로드/저장 동작들보다 더 신생이거나 더 오래된 것으로 지칭된다. 제1 동작이 프로그램 순서에서 제2 동작에 후속하는 경우, 제1 동작은 제2 동작보다 더 신생의 것일 수 있다. 유사하게, 제1 동작이 프로그램 순서에서 제2 동작에 선행하는 경우, 제1 동작은 제2 동작보다 더 오래된 것일 수 있다.At various points, load/store operations are referred to as being younger or older than other load/store operations. If a first operation follows a second operation in program order, the first operation may be younger than the second operation. Similarly, if the first operation precedes a second operation in program order, the first operation may be older than the second operation.
이제 도 10을 참조하면, 하나 이상의 프로세서들(30)을 포함할 수 있는 시스템(10)의 블록도 일 실시예이다. 예시된 실시예에서, 시스템(10)은 메모리(12)에 커플링된 시스템 온 칩(SOC)(10)으로서 구현될 수 있다. 명칭에서 암시되는 바와 같이, SOC(10)의 컴포넌트들은 집적 회로 "칩"으로서 단일의 반도체 기판 상에 집적될 수 있다. 일부 실시예들에서, 컴포넌트들은 시스템 내의 2개 이상의 별개의 칩들 상에 구현될 수 있다. 그러나, SOC(10)는 본 명세서에서 일 예로서 사용될 것이다. 예시된 실시예에서, SOC(10)의 컴포넌트들은 복수의 프로세서 클러스터들(14A 내지 14n), 인터럽트 제어기(20), 하나 이상의 주변 컴포넌트들(18)(더 간략하게, "주변기기들"), 메모리 제어기(22), 및 통신 패브릭(27)을 포함한다. 컴포넌트들(14A 내지 14n, 18, 20 및 22)은 모두 통신 패브릭(27)에 커플링될 수 있다. 메모리 제어기(22)는 사용 중에 메모리(12)에 커플링될 수 있다. 일부 실시예들에서, 대응하는 메모리에 커플링된 하나 초과의 메모리 제어기가 있을 수 있다. 메모리 어드레스 공간은 임의의 원하는 방식으로 메모리 제어기들에 걸쳐 맵핑될 수 있다. 예시된 실시예에서, 프로세서 클러스터들(14A 내지 14n)은 각자의 복수의 프로세서들(P)(30)을 포함할 수 있고, 각자의 프로세서들(P)(30)은 도 1 내지 도 9에 설명된 바와 같은 각자의 바이어스 예측 회로(156), 각자의 명령어 예측 회로(160), 및/또는 각자의 명령어 분배 회로(502)를 추가로 포함할 수 있다. 프로세서들(30)은 SOC(10)의 중앙 프로세싱 유닛들(CPU(들))을 형성할 수 있다. 일 실시예에서, 하나 이상의 프로세서 클러스터들(14A 내지 14n)은 CPU들로서 사용되지 않을 수 있다.Referring now to FIG. 10 , a block diagram of a system (10) that may include one or more processors (30) is illustrated in one embodiment. In the illustrated embodiment, the system (10) may be implemented as a system on a chip (SOC) (10) coupled to memory (12). As the name implies, the components of the SOC (10) may be integrated on a single semiconductor substrate as an integrated circuit "chip." In some embodiments, the components may be implemented on two or more separate chips within the system. However, the SOC (10) will be used herein as an example. In the illustrated embodiment, the components of the SOC (10) include a plurality of processor clusters (14A-14n), an interrupt controller (20), one or more peripheral components (18) (more briefly, "peripherals"), a memory controller (22), and a communication fabric (27). Components (14A through 14n, 18, 20, and 22) may all be coupled to the communication fabric (27). A memory controller (22) may be coupled to the memory (12) during use. In some embodiments, there may be more than one memory controller coupled to a corresponding memory. The memory address space may be mapped across the memory controllers in any desired manner. In the illustrated embodiment, the processor clusters (14A through 14n) may each include a plurality of processors (P) (30), each of which may further include a respective bias prediction circuit (156), a respective instruction prediction circuit (160), and/or a respective instruction distribution circuit (502) as described in FIGS. 1 through 9 . The processors (30) may form central processing units (CPU(s)) of the SOC (10). In one embodiment, one or more of the processor clusters (14A to 14n) may not be used as CPUs.
앞서 언급된 바와 같이, 프로세서 클러스터들(14A 내지 14n)은 SOC(10)의 CPU로서 기능할 수 있는 하나 이상의 프로세서들(30)을 포함할 수 있다. 시스템의 CPU는 운영 체제와 같은 시스템의 메인 제어 소프트웨어를 실행하는 프로세서(들)를 포함한다. 일반적으로, 사용 중에 CPU에 의해 실행되는 소프트웨어는 시스템의 원하는 기능을 실현하기 위해 시스템의 다른 컴포넌트들을 제어할 수 있다. 프로세서들은 또한 애플리케이션 프로그램들과 같은 다른 소프트웨어를 실행할 수 있다. 애플리케이션 프로그램들은 사용자 기능을 제공할 수 있으며, 하위-레벨 디바이스 제어, 스케줄링, 메모리 관리 등을 위해 운영 체제에 의존할 수 있다. 따라서, 프로세서들은 또한 애플리케이션 프로세서들로도 칭할 수 있다.As previously mentioned, the processor clusters (14A to 14n) may include one or more processors (30) that may function as the CPU of the SOC (10). The CPU of the system includes processor(s) that execute main control software of the system, such as an operating system. Typically, software executed by the CPU during use may control other components of the system to realize desired functions of the system. The processors may also execute other software, such as application programs. The application programs may provide user functionality and may rely on the operating system for low-level device control, scheduling, memory management, etc. Thus, the processors may also be referred to as application processors.
일반적으로, 프로세서는 프로세서에 의해 구현된 명령어 세트 아키텍처에 정의된 명령어들을 실행하도록 구성된 임의의 회로부 및/또는 마이크로코드를 포함할 수 있다. 프로세서들은 시스템 온 칩(SOC(10)) 또는 다른 집적 레벨들로서 다른 컴포넌트들과 함께 집적 회로 상에 구현된 프로세서 코어들을 포함할 수 있다. 프로세서들은 별개의 마이크로프로세서들, 멀티칩 모듈 구현들에 집적된 프로세서 코어들 및/또는 마이크로프로세서들, 복수의 집적 회로들로서 구현된 프로세서들 등을 추가로 포함할 수 있다.In general, a processor may include any circuitry and/or microcode configured to execute instructions defined in an instruction set architecture implemented by the processor. Processors may include processor cores implemented on an integrated circuit with other components, such as a system on a chip (SOC (10)) or other levels of integration. Processors may additionally include processor cores and/or microprocessors integrated into discrete microprocessors, multi-chip module implementations, processors implemented as multiple integrated circuits, etc.
메모리 제어기(22)는 일반적으로 SOC(10)의 다른 컴포넌트들로부터 메모리 동작들을 수신하고 메모리 동작들을 완료하기 위해 메모리(12)에 액세스하기 위한 회로부를 포함할 수 있다. 메모리 제어기(22)는 임의의 유형의 메모리(12)에 액세스하도록 구성될 수 있다. 예를 들어, 메모리(12)는 정적 랜덤-액세스 메모리(static random-access memory, SRAM), 더블 데이터 레이트(DDR, DDR2, DDR3, DDR4 등) DRAM을 포함하는 동기식 DRAM(synchronous DRAM, SDRAM)과 같은 동적 RAM(dynamic RAM, DRAM)일 수 있다. DDR DRAM의 저전력/모바일 버전들이 지원될 수 있다(예를 들어, LPDDR, mDDR 등). 메모리 제어기(22)는 동작들을 정렬(및 잠재적으로 재정렬)하고 동작들을 메모리(12)에 제시하기 위한 메모리 동작들을 위한 큐(queue)들을 포함할 수 있다. 메모리 제어기(22)는 메모리로의 기록을 기다리는 기록 데이터 및 메모리 동작의 소스로의 복귀를 기다리는 판독 데이터를 저장하는 데이터 버퍼들을 추가로 포함할 수 있다. 일부 실시예들에서, 메모리 제어기(22)는 최근에 액세스된 메모리 데이터를 저장하기 위한 메모리 캐시를 포함할 수 있다. 예를 들어, SOC 구현들에서, 메모리 캐시는 곧 다시 액세스될 것으로 예상되는 경우 메모리(12)로부터의 데이터 재액세스를 회피함으로써 SOC의 전력 소비를 감소시킬 수 있다. 일부 경우들에서, 메모리 캐시는 또한, 특정 컴포넌트들만을 보조하는 전용 캐시(private cache)들, 예컨대 프로세서들 내의 L2 캐시 또는 캐시들과 상반되는, 시스템 캐시로서 지칭될 수 있다. 추가적으로, 일부 실시예들에서, 시스템 캐시는 메모리 제어기(22) 내에 위치될 필요가 없다.A memory controller (22) may typically include circuitry for receiving memory operations from other components of the SOC (10) and accessing memory (12) to complete the memory operations. The memory controller (22) may be configured to access any type of memory (12). For example, the memory (12) may be dynamic RAM (DRAM), such as static random-access memory (SRAM), synchronous DRAM (SDRAM), including double data rate (DDR, DDR2, DDR3, DDR4, etc.) DRAM. Low power/mobile versions of DDR DRAM may be supported (e.g., LPDDR, mDDR, etc.). The memory controller (22) may include queues for memory operations for ordering (and potentially reordering) the operations and presenting the operations to the memory (12). The memory controller (22) may additionally include data buffers for storing write data awaiting a write to memory and read data awaiting a return to the source of a memory operation. In some embodiments, the memory controller (22) may include a memory cache for storing recently accessed memory data. For example, in SOC implementations, the memory cache may reduce power consumption of the SOC by avoiding re-accessing data from memory (12) when it is expected to be accessed again soon. In some cases, the memory cache may also be referred to as a system cache, as opposed to private caches that assist only certain components, such as the L2 cache or caches within processors. Additionally, in some embodiments, the system cache need not be located within the memory controller (22).
주변기기들(18)은 SOC(10)에 포함된 추가 하드웨어 기능의 임의의 세트일 수 있다. 예를 들어, 주변기기들(18)은 비디오 주변기기들, 예컨대 카메라 또는 다른 이미지 센서로부터의 이미지 캡처 데이터를 프로세싱하도록 구성된 이미지 신호 프로세서, GPU들, 비디오 인코더/디코더, 스케일러, 로테이터, 블렌더, 디스플레이 제어기 등을 포함할 수 있다. 주변기기들은 오디오 주변기기들, 예컨대 마이크로폰, 스피커, 마이크로폰 및 스피커에 대한 인터페이스, 오디오 프로세서, 디지털 신호 프로세서, 믹서 등을 포함할 수 있다. 주변기기들은, USB(Universal Serial Bus), PCIe(peripheral component interconnect(PCI) Express)를 포함하는 PCI, 직렬 및 병렬 포트 등과 같은 인터페이스들을 포함하는, SOC(10) 외부의 다양한 인터페이스들에 대한 인터페이스 제어기들을 포함할 수 있다. 주변기기들은 매체 액세스 제어기(media access controller, MAC)들과 같은 네트워킹 주변기기들을 포함할 수 있다. 하드웨어의 임의의 세트가 포함될 수 있다.Peripherals (18) may be any set of additional hardware functions included in the SOC (10). For example, peripherals (18) may include video peripherals, such as image signal processors configured to process image capture data from a camera or other image sensor, GPUs, video encoders/decoders, scalers, rotators, blenders, display controllers, etc. Peripherals may include audio peripherals, such as microphones, speakers, interfaces to microphones and speakers, audio processors, digital signal processors, mixers, etc. Peripherals may include interface controllers for various interfaces external to the SOC (10), including interfaces such as Universal Serial Bus (USB), Peripheral Component Interconnect (PCI) Express (PCIe), serial and parallel ports, etc. Peripherals may include networking peripherals, such as media access controllers (MACs). Any set of hardware may be included.
통신 패브릭(27)은 SOC(10)의 컴포넌트들 사이에서 통신하기 위한 임의의 통신 상호연결 및 프로토콜일 수 있다. 통신 패브릭(27)은 공유된 버스 구성들, 크로스 바(cross bar) 구성들 및 브릿지들을 갖는 계층적 버스들을 포함하는 버스-기반일 수 있다. 통신 패브릭(27)은 또한 패킷-기반일 수 있으며, 브릿지들, 크로스 바, 점 대 점(point-to-point) 또는 다른 상호연결들로 계층적일 수 있다.The communication fabric (27) may be any communication interconnect and protocol for communicating between components of the SOC (10). The communication fabric (27) may be bus-based, including hierarchical buses with shared bus configurations, cross bar configurations, and bridges. The communication fabric (27) may also be packet-based and hierarchical with bridges, cross bars, point-to-point, or other interconnections.
SOC(10)의 컴포넌트들의 개수(및 각각의 프로세서 클러스터(14A 내지 14n) 내의 프로세서들(30)과 같은, 도 4에 도시된 컴포넌트들에 대한 서브컴포넌트들의 개수)는 실시예마다 다를 수 있다는 것에 유의한다. 추가적으로, 하나의 프로세서 클러스터(14A 내지 14n) 내의 프로세서들(30)의 개수는 다른 프로세서 클러스터(14A 내지 14n) 내의 프로세서들(30)의 개수와 상이할 수 있다. 도 4에 도시된 수보다 더 많거나 더 적은 각각의 컴포넌트/서브컴포넌트가 있을 수 있다.It is noted that the number of components of the SOC (10) (and the number of subcomponents for the components illustrated in FIG. 4, such as the processors (30) within each processor cluster (14A through 14n)) may vary from embodiment to embodiment. Additionally, the number of processors (30) within one processor cluster (14A through 14n) may be different than the number of processors (30) within another processor cluster (14A through 14n). There may be more or fewer of each component/subcomponent than the number illustrated in FIG. 4.
컴퓨터 시스템computer system
다음으로 도 11을 참조하면, 시스템(700)의 일 실시예의 블록도가 도시되어 있다. 예시된 실시예에서, 시스템(700)은, 도 10에 설명된 바와 같은, 하나 이상의 주변 기기들(704) 및 외부 메모리(702)에 커플링된 시스템 온 칩(SOC)(10)의 적어도 하나의 인스턴스를 포함한다. 공급 전압들을 SOC(10)에 공급할 뿐만 아니라 하나 이상의 공급 전압들을 메모리(702) 및/또는 주변기기들(154)에 공급하는 전력 공급장치(power supply, PMU)(708)가 제공된다. 일부 실시예들에서, SOC(10)(예를 들어, SOC들(10A 내지 10q))의 하나 초과의 인스턴스가 포함될 수 있다(그리고 하나 초과의 메모리(702)가 또한 포함될 수 있다). 일 실시예에서, 메모리(702)는 도 1 내지 도 10에 예시된 메모리(12)를 포함할 수 있다.Referring now to FIG. 11 , a block diagram of one embodiment of a system (700) is illustrated. In the illustrated embodiment, the system (700) includes at least one instance of a system on a chip (SOC) (10) coupled to one or more peripherals (704) and external memory (702), as described in FIG. 10 . A power supply (PMU) (708) is provided that supplies supply voltages to the SOC (10) as well as one or more supply voltages to the memory (702) and/or the peripherals (154). In some embodiments, more than one instance of the SOC (10) (e.g., SOCs 10A-10q) may be included (and more than one memory (702) may also be included). In one embodiment, the memory (702) may include the memory (12) illustrated in FIGS. 1-10 .
주변기기들(704)은 시스템(700)의 유형에 따라 임의의 원하는 회로부를 포함할 수 있다. 예를 들어, 일 실시예에서, 시스템(704)은 모바일 디바이스(예를 들어, PDA(personal digital assistant), 스마트폰 등)일 수 있고 주변기기들(704)은 Wi-Fi, 블루투스, 셀룰러, 글로벌 포지셔닝 시스템 등과 같은 다양한 유형들의 무선 통신을 위한 디바이스들을 포함할 수 있다. 주변기기들(704)은 또한 RAM 저장소, 솔리드 스테이트 저장소 또는 디스크 저장소를 포함하는 추가 저장소를 포함할 수 있다. 주변기기들(704)은 터치 디스플레이 스크린들 또는 멀티터치 디스플레이 스크린들을 포함하는 디스플레이 스크린, 키보드 또는 다른 입력 디바이스들, 마이크로폰들, 스피커들 등과 같은 사용자 인터페이스 디바이스들을 포함할 수 있다. 다른 실시예들에서, 시스템(700)은 임의의 유형의 컴퓨팅 시스템(예를 들어, 데스크톱 개인용 컴퓨터, 랩톱, 워크스테이션, 넷톱 등)일 수 있다.The peripherals (704) may include any desired circuitry depending on the type of system (700). For example, in one embodiment, the system (704) may be a mobile device (e.g., a personal digital assistant (PDA), a smart phone, etc.) and the peripherals (704) may include devices for various types of wireless communications, such as Wi-Fi, Bluetooth, cellular, global positioning system, etc. The peripherals (704) may also include additional storage, including RAM storage, solid state storage, or disk storage. The peripherals (704) may include user interface devices, such as a display screen, including a touch display screen or a multi-touch display screen, a keyboard or other input devices, microphones, speakers, etc. In other embodiments, the system (700) may be any type of computing system (e.g., a desktop personal computer, a laptop, a workstation, a nettop, etc.).
외부 메모리(702)는 임의의 유형의 메모리를 포함할 수 있다. 예를 들어, 외부 메모리(702)는 SRAM, 동기식 DRAM(SDRAM)과 같은 동적 RAM(DRAM), 더블 데이터 레이트(DDR, DDR2, DDR3 등) SDRAM, RAMBUS DRAM, DDR DRAM의 저전력 버전들(예를 들어, LPDDR, mDDR 등) 등일 수 있다. 외부 메모리(702)는 메모리 디바이스들이 장착되는 하나 이상의 메모리 모듈들, 예컨대 단일 인라인 메모리 모듈(SIMM)들, 듀얼 인라인 메모리 모듈(DIMM)들 등을 포함할 수 있다. 대안적으로, 외부 메모리(702)는 칩-온-칩 또는 패키지-온-패키지 구현에서 SOC(10) 상에 장착되는 하나 이상의 메모리 디바이스들을 포함할 수 있다.The external memory (702) may include any type of memory. For example, the external memory (702) may be SRAM, dynamic RAM (DRAM) such as synchronous DRAM (SDRAM), double data rate (DDR, DDR2, DDR3, etc.) SDRAM, RAMBUS DRAM, low power versions of DDR DRAM (e.g., LPDDR, mDDR, etc.), etc. The external memory (702) may include one or more memory modules on which memory devices are mounted, such as single in-line memory modules (SIMMs), dual in-line memory modules (DIMMs), etc. Alternatively, the external memory (702) may include one or more memory devices mounted on the SOC (10) in a chip-on-chip or package-on-package implementation.
예시된 바와 같이, 시스템(700)은 광범위한 영역들에 적용되는 것으로 도시된다. 예를 들어, 시스템(700)은 데스크톱 컴퓨터(710), 랩톱 컴퓨터(720), 태블릿 컴퓨터(730), 셀룰러 또는 모바일 폰(740) 또는 텔레비전(750)(또는 텔레비전에 커플링된 셋톱 박스)의 칩들, 회로부, 컴포넌트들 등의 일부로 이용될 수 있다. 또한 스마트워치 및 건강 모니터링 디바이스(760)가 예시되어 있다. 일부 실시예들에서, 스마트워치는 다양한 범용 컴퓨팅 관련 기능들을 포함할 수 있다. 예를 들어, 스마트워치는 이메일, 셀폰 서비스, 사용자 캘린더 등에 대한 액세스를 제공할 수 있다. 다양한 실시예들에서, 건강 모니터링 디바이스는 전용 의료 디바이스일 수 있거나 그렇지 않으면 전용 건강 관련 기능을 포함할 수 있다. 예를 들어, 건강 모니터링 디바이스는 사용자의 바이탈(vital) 징후들을 모니터링하고, 역학적 사회적 거리두기를 목적으로 다른 사용자들에 대한 사용자의 근접성을 추적하고, 접촉 추적을 수행하고, 건강 위기의 이벤트에서 응급 서비스에 통신을 제공하는 등을 수행할 수 있다. 다양한 실시예들에서, 위에 언급한 스마트워치는 건강 모니터링 관련 기능들의 일부 또는 임의의 것을 포함하거나 포함하지 않을 수 있다. 목 주위에 착용하는 디바이스들, 인체에 이식 가능한 디바이스들, 증강 및/또는 가상 현실 경험을 제공하도록 설계된 안경 등과 같은 다른 웨어러블 디바이스들도 고려된다.As illustrated, the system (700) is depicted as having a wide range of applications. For example, the system (700) may be utilized as part of chips, circuitry, components, etc., of a desktop computer (710), a laptop computer (720), a tablet computer (730), a cellular or mobile phone (740), or a television (750) (or a set-top box coupled to a television). Also illustrated is a smartwatch and a health monitoring device (760). In some embodiments, the smartwatch may include a variety of general-purpose computing-related functions. For example, the smartwatch may provide access to email, cell phone services, a user calendar, etc. In various embodiments, the health monitoring device may be a dedicated medical device or may otherwise include dedicated health-related functions. For example, the health monitoring device may monitor a user's vital signs, track a user's proximity to other users for the purposes of epidemiological social distancing, perform contact tracing, provide communication to emergency services in the event of a health crisis, etc. In various embodiments, the smartwatch mentioned above may or may not include some or all of the health monitoring related features. Other wearable devices are also contemplated, such as devices worn around the neck, devices implantable in the human body, glasses designed to provide augmented and/or virtual reality experiences, etc.
시스템(700)은 클라우드-기반 서비스(들)(770)의 일부로서 추가로 사용될 수 있다. 예를 들어, 이전에 언급된 디바이스들 및/또는 다른 디바이스들은 클라우드의 컴퓨팅 자원들(즉, 원격으로 위치된 하드웨어 및/또는 소프트웨어 자원들)에 액세스할 수 있다. 또한 추가로, 시스템(700)은 이전에 언급된 것 이외의 가정의 하나 이상의 디바이스들에서 이용될 수 있다. 예를 들어, 집 안의 기기들은 주의가 필요한 조건들을 모니터링하고 검출할 수 있다. 예를 들어, 집 안의 다양한 디바이스들(예를 들어, 냉장고, 냉각 시스템 등)은 디바이스의 상태를 모니터링하고 특정 이벤트가 검출된 경우 집 소유자(또는 예를 들어, 수리 시설)에게 경고를 제공할 수 있다. 대안적으로, 온도 조절기는 집의 온도를 모니터링할 수 있고 집 소유자의 다양한 조건들에 대한 응답들의 이력에 기초하여 난방/냉방 시스템에 대한 조정들을 자동화할 수 있다. 또한, 도 11에는 다양한 운송 모드들에 대한 시스템(700)의 적용이 예시되어 있다. 예를 들어, 시스템(700)은 항공기, 기차들, 버스들, 임대 자동차들, 개인 자동차들, 개인 보트들에서 크루즈 여객선들까지의 수상 선박들, 스쿠터들(임대 또는 소유) 등의 제어 및/또는 엔터테인먼트 시스템들에 사용될 수 있다. 다양한 경우들에서, 시스템(700)은 자동화된 안내(예를 들어, 자율 주행 차량들), 일반 시스템 제어 등을 제공하는 데 사용될 수 있다. 이러한 임의의 많은 다른 실시예들이 가능하고 고려된다. 도 11에 예시된 디바이스들 및 애플리케이션들은 단지 예시적일 뿐 제한하려는 의도가 아니라는 점에 유의한다. 다른 디바이스들도 가능하며 고려된다.The system (700) may additionally be used as part of a cloud-based service(s) (770). For example, the devices and/or other devices previously mentioned may access computing resources in the cloud (i.e., remotely located hardware and/or software resources). Additionally, the system (700) may be utilized in one or more devices in the home other than those previously mentioned. For example, appliances in the home may monitor and detect conditions requiring attention. For example, various devices in the home (e.g., a refrigerator, a cooling system, etc.) may monitor the status of the devices and provide alerts to the homeowner (or, for example, a repair facility) when certain events are detected. Alternatively, a thermostat may monitor the temperature in the home and automate adjustments to the heating/cooling system based on the homeowner's history of responses to various conditions. Also illustrated in FIG. 11 is an application of the system (700) to various modes of transportation. For example, the system (700) may be used in the control and/or entertainment systems of aircraft, trains, buses, rental automobiles, personal automobiles, watercraft ranging from personal boats to cruise ships, scooters (whether rented or owned), etc. In various instances, the system (700) may be used to provide automated guidance (e.g., autonomous vehicles), general system control, etc. Any of these many other embodiments are possible and contemplated. It is noted that the devices and applications illustrated in FIG. 11 are illustrative only and are not intended to be limiting. Other devices are also possible and contemplated.
컴퓨터 판독가능 저장 매체Computer readable storage medium
이제 도 12를 참조하면, 컴퓨터 판독가능 저장 매체(800)의 일 실시예의 블록도가 도시된다. 일반적으로 말하면, 컴퓨터 액세스가능 저장 매체는 명령어들 및/또는 데이터를 컴퓨터에 제공하기 위해 사용 중에 컴퓨터에 의해 액세스가능한 임의의 저장 매체를 포함할 수 있다. 예를 들어, 컴퓨터 액세스가능 저장 매체는, 자기 또는 광학 매체, 예를 들어, 디스크(고정식 또는 탈착가능), 테이프, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, 또는 블루레이(Blu-Ray)와 같은 저장 매체를 포함할 수 있다. 저장 매체는, RAM(예를 들어, 동기식 동적 RAM(synchronous dynamic RAM, SDRAM), 램버스 DRAM(RDRAM), 정적 RAM(SRAM) 등), ROM, 또는 플래시 메모리와 같은 휘발성 또는 비휘발성 메모리 매체를 추가로 포함할 수 있다. 저장 매체는 저장 매체가 명령어들/데이터를 제공하는 컴퓨터 내에 물리적으로 포함될 수 있다. 대안적으로, 저장 매체는 컴퓨터에 연결될 수 있다. 예를 들어, 저장 매체는 네트워크 또는 네트워크 부착 저장소와 같은 무선 링크를 통해 컴퓨터에 연결될 수 있다. 저장 매체는 범용 직렬 버스(Universal Serial Bus, USB)와 같은 주변기기 인터페이스를 통해 연결될 수 있다. 일반적으로, 컴퓨터 액세스가능 저장 매체(800)는 비일시적 방식으로 데이터를 저장할 수 있고, 본 맥락에서 비일시적이란 신호 상에서 명령어들/데이터를 송신하지 않는 것을 지칭할 수 있다. 예를 들어, 비일시적 저장소는 휘발성(그리고 전력 차단에 응답하여 저장된 명령어들/데이터를 잃을 수 있음) 또는 비휘발성일 수 있다.Referring now to FIG. 12 , a block diagram of one embodiment of a computer-readable storage medium (800) is illustrated. Generally speaking, a computer-accessible storage medium can include any storage medium that is accessible by a computer during use to provide instructions and/or data to a computer. For example, the computer-accessible storage medium can include magnetic or optical media, such as a disk (either fixed or removable), tape, CD-ROM, DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, or Blu-Ray. The storage medium can additionally include volatile or nonvolatile memory media, such as RAM (e.g., synchronous dynamic RAM (SDRAM), Rambus DRAM (RDRAM), static RAM (SRAM), etc.), ROM, or flash memory. The storage medium can be physically contained within the computer where the storage medium provides the instructions/data. Alternatively, the storage medium can be coupled to the computer. For example, the storage medium may be connected to the computer via a wireless link, such as a network or network-attached storage. The storage medium may be connected via a peripheral interface, such as a Universal Serial Bus (USB). In general, the computer-accessible storage medium (800) may store data in a non-transitory manner, and non-transitory in this context may refer to not transmitting instructions/data over a signal. For example, the non-transitory storage may be volatile (and may lose stored instructions/data in response to a power outage) or non-volatile.
도 12의 컴퓨터 액세스가능 저장 매체(800)는 도 10에서 전술한 SOC(10)를 나타내는 데이터베이스(804)를 저장할 수 있다. 일반적으로, 데이터베이스(804)는, 프로그램에 의해 판독될 수 있고 SOC(10)를 포함하는 하드웨어를 제조하는 데 직접 또는 간접적으로 사용될 수 있는 데이터베이스일 수 있다. 예를 들어, 데이터베이스는 Verilog 또는 VHDL과 같은 고레벨 설계 언어(high-level design language, HDL)에서의 하드웨어 기능의 거동-레벨 설명 또는 레지스터-전송 레벨(register-transfer level, RTL) 설명일 수 있다. 설명은 합성 라이브러리로부터의 게이트들의 목록을 포함하는 넷리스트를 생성하기 위해 설명을 합성할 수 있는 합성 도구에 의해 판독될 수 있다. 넷리스트는 SOC(10)를 포함하는 하드웨어의 기능을 또한 나타내는 게이트들의 세트를 포함한다. 이어서, 넷리스트가 배치되고 라우팅되어 마스크들에 적용될 기하학적 형상들을 설명하는 데이터 세트를 생성할 수 있다. 이어서, 마스크들은 SOC(10)에 대응하는 반도체 회로 또는 회로들을 생성하기 위한 다양한 반도체 제조 단계들에서 사용될 수 있다. 대안적으로, 컴퓨터 액세스가능 저장 매체(800) 상의 데이터베이스(804)는, 원하는 대로, 넷리스트(합성 라이브러리가 있거나 없음) 또는 데이터 세트일 수 있다.The computer-accessible storage medium (800) of FIG. 12 may store a database (804) representing the SOC (10) described above in FIG. 10. Generally, the database (804) may be a database that can be read by a program and used directly or indirectly to fabricate hardware including the SOC (10). For example, the database may be a behavioral-level description of hardware functionality in a high-level design language (HDL), such as Verilog or VHDL, or a register-transfer level (RTL) description. The description may be read by a synthesis tool that can synthesize the description to generate a netlist including a list of gates from a synthesis library. The netlist includes a set of gates that also represent the functionality of the hardware including the SOC (10). The netlist may then be placed and routed to generate a data set describing geometrical features to be applied to the masks. Subsequently, the masks may be used in various semiconductor fabrication steps to create a semiconductor circuit or circuits corresponding to the SOC (10). Alternatively, the database (804) on the computer accessible storage medium (800) may be a netlist (with or without a synthesis library) or a data set, as desired.
컴퓨터 액세스가능 저장 매체(800)가 SOC(10)의 표현을 저장하지만, 다른 실시예들은, 원하는 대로, 도 4에 도시된 컴포넌트들의 임의의 서브세트를 포함하는 SOC(10)의 임의의 부분의 표현을 전달할 수 있다. 데이터베이스(804)는 위의 것 중 임의의 부분을 나타낼 수 있다.While the computer accessible storage medium (800) stores a representation of the SOC (10), other embodiments may convey a representation of any portion of the SOC (10), including any subset of the components illustrated in FIG. 4, as desired. The database (804) may represent any portion of the above.
******
본 개시는 "실시예" 또는 "실시예들"의 그룹들(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 참조들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "실시예", "일 실시예", "특정 실시예" 등에 대한 지칭은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것뿐만 아니라 본 개시의 사상 또는 범위 내에 속하는 수정들 또는 대안들을 포함하여 다수의 가능한 실시예들이 고려된다.This disclosure includes references to "an embodiment" or groups of "embodiments" (e.g., "some embodiments" or "various embodiments"). Embodiments are different implementations or instances of the disclosed concepts. References to "an embodiment," "one embodiment," "a particular embodiment," etc. are not necessarily all referring to the same embodiment. Many possible embodiments are contemplated, including modifications or alternatives that fall within the spirit or scope of the disclosure, not just those specifically disclosed.
본 개시는 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이러한 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 것 또는 전부를 나타내는 것은 아니다. 특정 구현에 대한 이점이 실현되는지 여부는 많은 요인들에 따르며, 그 중 일부는 본 개시의 범위를 벗어난다. 실제로, 청구항들의 범위에 속하는 구현이 개시된 이점들 중 일부 또는 전부를 나타내지 못하는 데에는 많은 이유들이 있다. 예를 들어, 특정 구현은 개시된 실시예들 중 하나와 관련하여 개시된 이점들 중 하나 이상을 무효화하거나 감소시키는 본 개시의 범위 밖의 다른 회로부를 포함할 수 있다. 추가로, 특정 구현의 차선책의 설계 실행(예를 들어, 구현 기술들 또는 도구들)이 또한 개시된 이점들을 무효화하거나 감소시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 여전히 구현이 배치되는 환경적 상황들과 같은 다른 요인들에 따를 수 있다. 예를 들어, 특정 구현에 공급된 입력들은 본 개시에서 다루어지는 하나 이상의 문제들이 특정 경우에 발생하는 것을 방지할 수 있으며, 그 결과 해당 해결책의 이점이 실현되지 않을 수 있다. 본 개시 외부의 가능한 요인들의 존재를 감안할 때, 본 명세서에 설명된 임의의 잠재적 이점들이 침해를 입증하기 위해 충족되어야 하는 청구 제한들로 해석되어서는 안 된다는 것이 명백히 의도되었다. 오히려, 이러한 잠재적 이점들의 식별은 본 개시의 이점을 갖는 설계자들이 이용할 수 있는 개선 유형(들)을 예시하기 위해 의도된다. 이러한 이점들이 허용적으로 설명되는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급)은 이러한 이점들이 실제로 실현될 수 있는지 여부에 대한 의심을 전달하려는 것이 아니라, 오히려 이러한 이점들의 실현이 종종 추가 요인들에 달려 있다는 기술적 현실을 인식하려는 의도이다.This disclosure may discuss potential benefits that may arise from the disclosed embodiments. Not all implementations of these embodiments will necessarily exhibit any or all of the potential benefits. Whether or not a particular implementation realizes benefits depends on many factors, some of which are outside the scope of this disclosure. In fact, there are many reasons why an implementation within the scope of the claims may not exhibit some or all of the disclosed benefits. For example, a particular implementation may include other circuitry outside the scope of this disclosure that negates or reduces one or more of the disclosed benefits with respect to one of the disclosed embodiments. Additionally, suboptimal design practices (e.g., implementation techniques or tools) of a particular implementation may also negate or reduce the disclosed benefits. Even assuming a skilled implementation, the realization of benefits may still depend on other factors, such as the environmental conditions in which the implementation is deployed. For example, the inputs provided to a particular implementation may prevent one or more of the problems addressed in this disclosure from occurring in a particular case, and as a result, the benefits of the solution may not be realized. Given the existence of possible factors outside of this disclosure, it is expressly intended that any potential advantages described herein should not be construed as claim limitations that must be satisfied in order to prove infringement. Rather, the identification of these potential advantages is intended to illustrate the type(s) of improvements that designers who have the benefit of the present disclosure may utilize. That these advantages are permissively described (e.g., stating that a particular advantage "may" occur) is not intended to convey doubt as to whether such advantages can actually be realized, but rather to recognize the technical reality that realization of such advantages often depends on additional factors.
달리 언급되지 않는 한, 실시예들은 제한적이지 않다. 즉, 개시된 실시예들은 특정한 특징과 관련하여 단 하나의 예만이 설명되는 경우에도 본 개시에 기초하여 작성된 청구항들의 범위를 제한하려는 의도가 아니다. 개시된 실시예들은 제한적인 것이 아니라 예시적인 것으로 의도되었으며, 본 개시에는 이에 반대되는 어떠한 진술들도 존재하지 않는다. 따라서, 본 출원은 개시된 실시예들뿐만 아니라 본 개시의 이점을 갖는 본 기술 분야의 통상의 기술자에게 명백한 이러한 대안들, 수정들 및 등가물들을 포괄하는 청구항들을 허용하도록 의도된다.Unless otherwise stated, the embodiments are not limiting. That is, the disclosed embodiments are not intended to limit the scope of claims made based on this disclosure, even if only one example is described with respect to a particular feature. The disclosed embodiments are intended to be illustrative, not restrictive, and nothing in this disclosure contains any statement to the contrary. Accordingly, this application is intended to allow claims covering not only the disclosed embodiments, but also such alternatives, modifications, and equivalents as would be apparent to one skilled in the art having the benefit of this disclosure.
예를 들어, 본 출원의 특징들은 임의의 적절한 방식으로 조합될 수 있다. 따라서, 이러한 임의의 특징들의 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안 새로운 청구항들이 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들의 특징들은 다른 독립항들에 종속하는 청구항들을 포함하여 적절한 경우 다른 종속 청구항들의 특징과 조합될 수 있다. 마찬가지로, 각각의 독립 청구항들의 특징들은 적절한 경우 조합될 수 있다.For example, the features of the present application may be combined in any suitable manner. Accordingly, new claims may be drafted during the examination of the present application (or an application claiming priority thereto) for any combination of such features. In particular, referring to the appended claims, the features of the dependent claims may be combined with the features of other dependent claims, including claims dependent on other independent claims, where appropriate. Likewise, the features of each independent claim may be combined where appropriate.
따라서, 첨부된 종속 청구항들은 각각이 하나의 다른 청구항에 종속되도록 작성될 수 있지만, 추가적인 종속들도 고려된다. 본 개시와 일치하는 종속에서 특징들의 임의의 조합들이 고려되고 본 출원 또는 다른 출원에서 청구될 수 있다. 요컨대, 조합들은 첨부된 청구항들에 구체적으로 열거된 것으로 제한되지 않는다.Accordingly, although the attached dependent claims may each be written to depend on one another, additional dependencies are contemplated. Any combination of features in a dependency that is consistent with the present disclosure is contemplated and may be claimed in this or another application. In short, the combinations are not limited to those specifically recited in the attached claims.
적절한 경우, 하나의 포맷이나 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷이나 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.Where appropriate, claims written in one format or statutory type (e.g., apparatus) are also considered to be intended to support corresponding claims written in another format or statutory type (e.g., method).
******
본 개시는 법적 문서이기 때문에, 다양한 용어들과 문구들이 행정적, 사법적 해석의 대상이 될 수 있다. 본 개시에 기초하여 초안이 작성된 청구항들을 해석하는 방법을 결정하는 데 본 개시 전반에 걸쳐 제공된 정의들뿐만 아니라 다음 문단들이 사용되어야 한다는 공고가 여기에 제공된다.Because this disclosure is a legal document, various terms and phrases may be subject to administrative and judicial interpretation. It is provided herein that the following paragraphs, in addition to the definitions provided throughout this disclosure, should be used in determining how to interpret claims drafted based on this disclosure.
항목의 단수 형태(즉, "a", "an" 또는 "the"가 앞에 오는 명사 또는 명사구)에 대한 지칭들은 문맥상 명백하게 달리 지시하지 않는 한 "하나 이상"을 의미하는 것으로 의도된다. 따라서, 청구항에서 "항목"에 대한 지칭은 문맥을 수반하지 않고 항목의 추가 인스턴스들을 배제하지 않는다. "복수"의 항목들은 항목들 중 2개 이상의 세트를 지칭한다.References to a singular form of an item (i.e., a noun or noun phrase preceded by "a," "an," or "the") are intended to mean "one or more" unless the context clearly dictates otherwise. Thus, references to "an item" in a claim do not exclude additional instances of the item, regardless of the context. A "plurality" of items refers to a set of two or more of the items.
"할 수 있다(may)"라는 단어는 본 명세서에서 의무적인 의미(즉, 해야 한다(must))가 아니라 허용적인 의미(즉, 할 가능성을 가짐, 할 수 있음)로 사용된다.The word "may" is used in this specification in a permissive sense (i.e., having the possibility of doing, being able to do) rather than an obligatory sense (i.e., must).
"포함하는(comprising)" 및 "포함하는(including)"이라는 용어와 그 형태들은 개방형이며 "포함하지만 이에 한정되지는 않는"을 의미한다.The terms "comprising" and "including" and their forms are open-ended and mean "including but not limited to."
옵션들의 목록과 관련하여 본 개시에서 "또는"이라는 용어가 사용되는 경우, 문맥상 달리 제공되지 않는 한 일반적으로 포괄적인 의미로 사용되는 것으로 이해될 것이다. 따라서 "x 또는 y"를 언급하는 것은 "x 또는 y, 또는 둘 모두"와 등가이므로, 1) x이지만 y는 아니고, 2) y이지만 x는 아니고, 3) x와 y 모두를 포괄한다. 반면, "x 또는 y 중 어느 하나지만 둘 모두는 아님"과 같은 문구는 "또는"이 배타적인 의미로 사용되고 있음을 분명히 한다.Where the term "or" is used herein in connection with a list of options, it will generally be understood to be used in an inclusive sense unless the context provides otherwise. Thus, referring to "x or y" is equivalent to "x or y, or both," and thus encompasses 1) x but not y, 2) y but not x, and 3) both x and y. On the other hand, a phrase such as "either x or y, but not both" makes it clear that "or" is being used in an exclusive sense.
"w, x, y 또는 z, 또는 이들의 임의의 조합" 또는 "...w, x, y 및 z 중 적어도 하나"에 대한 언급은 세트의 요소들의 전체 개수까지 단일 요소와 관련된 모든 가능성들을 포괄하려는 의도이다. 예를 들어, 세트 [w, x, y, z]가 주어지면, 이러한 표현들은 세트의 임의의 단일 요소(예를 들어, w이지만 x, y 또는 z는 아님), 임의의 2개의 요소들(예를 들어, w 및 x이지만 y 또는 z는 아님), 임의의 3개의 요소들(예를 들어, w, x 및 y이지만 z는 아님) 및 모든 4개 요소들을 포괄한다. 따라서, "...w, x, y 및 z 중 적어도 하나"라는 문구는 세트 [w, x, y, z]의 적어도 하나의 요소를 지칭하며, 이에 의해 이러한 요소들의 목록에서 가능한 모든 조합들을 포괄한다. 이러한 문구는 w의 적어도 하나의 인스턴스, x의 적어도 하나의 인스턴스, y의 적어도 하나의 인스턴스, 그리고 z의 적어도 하나의 인스턴스가 있는 것을 필요로 하는 것으로 해석되어서는 안 된다.References to "w, x, y, or z, or any combination thereof" or "... at least one of w, x, y, and z" are intended to encompass all possibilities relating to a single element, up to the full number of elements in the set. For example, given a set [w, x, y, z], such expressions encompass any single element of the set (e.g., w but not x, y, or z), any two elements (e.g., w and x but not y or z), any three elements (e.g., w, x, and y but not z), and all four elements. Thus, the phrase "... at least one of w, x, y, and z" refers to at least one element of the set [w, x, y, z], and thereby encompasses all possible combinations of that list of elements. Such phrases should not be interpreted as requiring that there be at least one instance of w, at least one instance of x, at least one instance of y, and at least one instance of z.
본 개시에서 다양한 "라벨(label)들"이 명사들 또는 명사구들 앞에 올 수 있다. 문맥상 달리 제공되지 않는 한, 특징부에 사용되는 상이한 라벨들(예를 들어, "제1 회로", "제2 회로", "특정 회로", "주어진 회로" 등)은 특징부의 상이한 인스턴스들을 지칭한다. 또한, 특징부에 적용될 때 "제1", "제2" 및 "제3"이라는 라벨들은 달리 명시하지 않는 한 임의의 유형의 순서(예를 들어, 공간적, 시간적, 논리적 등)를 의미하지 않는다.In this disclosure, various "labels" may precede nouns or noun phrases. Unless otherwise provided by context, different labels used in a feature (e.g., "a first circuit," "a second circuit," "a particular circuit," "a given circuit," etc.) refer to different instances of the feature. Furthermore, the labels "first," "second," and "third" when applied to a feature do not imply any type of order (e.g., spatial, temporal, logical, etc.) unless otherwise specified.
"에 기초하여"라는 문구는 또는 결정에 영향을 미치는 하나 이상의 요인들을 설명하는 데 사용된다. 이러한 용어는 추가 요인들이 결정에 영향을 미칠 수 있는 가능성을 배제하지 않다. 즉, 결정은 특정 요인들에만 기초할 수도 있거나, 특정 요인들뿐만 아니라 특정되지 않은 다른 요인들에도 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 미치는 요인임을 특정한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 요인에 기초할 수도 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 기초하여 결정되는 실시예를 포괄하도록 의도된다. 본 명세서에 사용되는 바와 같이, "에 기초하여"라는 문구는 "에 적어도 부분적으로 기초하여"라는 문구와 동의어이다.The phrase "based on" is used to describe one or more factors that influence a decision. This term does not exclude the possibility that additional factors may influence the decision. That is, the decision may be based solely on the particular factors, or it may be based on both the particular factors and unspecified other factors. Consider the phrase "determine A based on B." This phrase specifies that B is a factor used in determining A or influencing the determination of A. This phrase does not exclude that the determination of A may be based on some other factor, such as C. This phrase is also intended to encompass embodiments in which A is determined solely on B. As used herein, the phrase "based on" is synonymous with the phrase "based at least in part on."
"에 응답하여" 및 "에 응답하는"이라는 문구는 효과를 촉발하는 하나 이상의 요인들을 설명한다. 이러한 문구는 추가 요인들이 특정된 요인들과 공동으로 또는 특정된 요인들과 독립적으로 영향을 미치거나 아니면 효과를 촉발할 수 있는 가능성을 배제하지 않는다. 즉, 효과는 해당 요인들에만 응답할 수 있거나, 특정 요인들뿐만 아니라 특정되지 않은 다른 요인들에도 응답할 수 있다. "B에 대한 응답으로 A를 수행한다"라는 문구를 고려한다. 이러한 문구는 B가 A의 성과를 촉발하거나 A에 대한 특정 결과를 촉발하는 요인임을 특정한다. 이러한 문구는 A를 수행하는 것이 또한 C와 같은 일부 다른 요인에 대한 응답일 수도 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A를 수행하는 것이 B와 C에 공동으로 응답할 수 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 응답하여 수행되는 실시예를 포괄하도록 의도된다. 본 명세서에 사용되는 바와 같이, "에 응답하는"이라는 문구는 "에 적어도 부분적으로 응답하는"이라는 문구와 동의어이다. 마찬가지로, "에 응답하여"라는 문구는 "에 적어도 부분적으로는 응답하여"라는 문구와 동의어이다.The phrases "in response to" and "in response to" describe one or more factors that trigger an effect. These phrases do not exclude the possibility that additional factors may act or trigger the effect jointly with or independently of the specified factors. That is, the effect may be responsive only to the factors in question, or may be responsive not only to the specified factors but also to other, unspecified factors. Consider the phrase "performs A in response to B." This phrase specifies that B is a factor that triggers the outcome of A or triggers a particular outcome for A. This phrase does not exclude that performing A may also be responsive to some other factor, such as C. This phrase also does not exclude that performing A may be jointly responsive to B and C. This phrase is also intended to encompass embodiments in which A is performed solely in response to B. As used herein, the phrase "in response to" is synonymous with the phrase "at least partially responsive to." Similarly, the phrase "in response to" is synonymous with the phrase "at least in part in response to."
******
본 개시 내에서, 상이한 엔티티들("유닛들", "회로들", 다른 컴포넌트들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 설명―[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]―은 본 명세서에서 구조(즉, 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 설명은 이 구조가 동작 시 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조가 현재 동작되고 있지 않더라도, 구조는 일부 태스크를 수행하도록 "구성된다"고 할 수 있다. 따라서, 일부 태스크를 수행하도록 "구성된" 것으로 설명되거나 언급된 엔티티는 태스크 등을 구현하기 위해 실행가능한 프로그램 명령어들을 저장하는 메모리 및 프로세서 유닛을 갖는 디바이스, 회로, 시스템과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형의 것을 지칭하는 데 사용되지 않는다.Within this disclosure, different entities (which may be variously referred to as "units," "circuits," other components, etc.) may be described or claimed as being "configured to" perform one or more tasks or operations. This description—[an entity] configured to [perform one or more tasks]—is used herein to refer to a structure (i.e., a physical thing). More specifically, this description is used to indicate that the structure is arranged to perform one or more tasks when in operation. A structure may be said to be "configured" to perform some task even if the structure is not currently in operation. Thus, an entity described or referred to as being "configured to" perform some task refers to a physical thing, such as a device, circuit, system, etc., having a memory and a processor unit that store executable program instructions for implementing the task, etc. This phrase is not used herein to refer to intangible things.
일부 경우들에서, 다양한 유닛들/회로들/컴포넌트들은 태스크 또는 동작들의 세트를 수행하는 것으로 본 명세서에서 설명될 수 있다. 해당 엔티티들은 특별히 언급되지 않은 경우에도 해당 태스크들/동작들을 수행하도록 "구성된" 것으로 이해된다.In some instances, various units/circuits/components may be described herein as performing a set of tasks or operations. Such entities are understood to be "configured" to perform such tasks/operations, even if not specifically stated otherwise.
"구성된"이라는 용어는 "구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는 특정 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 그러나, 이러한 프로그래밍되지 않은 FPGA는 해당 기능을 수행하도록 "구성가능"할 수 있다. 적절한 프로그래밍 후에, FPGA는 특정 기능을 수행하도록 "구성된" 것으로 말할 수 있다.The term "configured" is not intended to mean "configurable." For example, an unprogrammed FPGA would not be considered "configured" to perform a particular function. However, such an unprogrammed FPGA may be "configurable" to perform that function. After proper programming, the FPGA may be said to be "configured" to perform a particular function.
본 개시에 기초한 미국 특허 출원들의 목적들을 위해, 구조가 하나 이상의 태스크들을 수행하도록 "구성된다"는 청구항에서의 언급은 해당 청구항 요소에 대해 35 U.S.C.§112(f)을 적용하지 않고자 명백히 의도된다. 출원인이 본 개시에 기초하여 미국 특허 출원의 진행 동안 섹션 112(f)의 적용을 바란다면, [기능을 수행]"하기 위한 수단" 구성을 사용하여 청구항 요소들을 열거할 것이다.For purposes of United States patent applications based on this disclosure, reference in a claim to a structure being "configured to" perform one or more tasks is expressly intended to exempt 35 U.S.C. §112(f) from application to that claim element. If an applicant desires to invoke Section 112(f) during the prosecution of a United States patent application based on this disclosure, he or she will list claim elements using the "means for" [performing the function] construct.
본 개시에서는 상이한 "회로들"이 설명될 수 있다. 이러한 회로들 또는 "회로부(circuitry)"는 조합 로직, 클럭킹된(clocked) 저장 디바이스들(예를 들어, 플립-플롭들, 레지스터들, 래치들 등), 유한 상태 기계들, 메모리(예를 들어, 랜덤-액세스 메모리, 삽입된 동적 랜덤-액세스 메모리), 프로그래밍 가능 로직 어레이들 등과 같은 다양한 유형들의 회로 요소들을 포함하는 하드웨어를 구성한다. 회로부는 맞춤형으로 설계되거나, 표준 라이브러리들로부터 취해질 수 있다. 다양한 구현들에서, 회로부는 적절하게 디지털 컴포넌트들, 아날로그 컴포넌트들, 또는 둘 모두의 조합을 포함할 수 있다. 특정 유형들의 회로들은 일반적으로 "유닛들"(예를 들어, 디코드 유닛, 산술 로직 유닛(arithmetic logic unit, ALU), 기능 유닛, 메모리 관리 유닛(memory management unit, MMU) 등)으로 지칭될 수 있다. 이러한 유닛들은 또한 회로들 또는 회로부를 지칭한다.In this disclosure, different "circuits" may be described. These circuits or "circuitry" constitute hardware including various types of circuit elements, such as combinational logic, clocked storage devices (e.g., flip-flops, registers, latches, etc.), finite state machines, memory (e.g., random-access memory, embedded dynamic random-access memory), programmable logic arrays, etc. The circuitry may be custom designed or taken from standard libraries. In various implementations, the circuitry may include a combination of digital components, analog components, or both, as appropriate. Specific types of circuits may be generally referred to as "units" (e.g., a decode unit, an arithmetic logic unit (ALU), a functional unit, a memory management unit (MMU), etc.). Such units may also be referred to as circuits or circuitry.
따라서, 도면들에 예시되고 본 명세서에서 설명된 개시된 회로들/유닛들/컴포넌트들 및 다른 요소들은 이전 단락에서 설명된 것들과 같은 하드웨어 요소들을 포함한다. 많은 경우들에서, 특정 회로 내의 하드웨어 요소들의 내부 배열은 해당 회로의 기능을 설명함으로써 특정될 수 있다. 예를 들어, 특정 "디코드 유닛"은 "명령어의 op코드를 프로세싱하고 해당 명령어를 복수의 기능 유닛들 중 하나 이상으로 라우팅하는" 기능을 수행하는 것으로 설명될 수 있으며, 이는 디코드 유닛이 이러한 기능을 수행하도록 "구성되는" 것을 의미한다. 이러한 기능의 사양은 컴퓨터 기술 분야의 통상의 기술자들에게 회로에 대한 가능한 구조들의 세트를 암시하기에 충분하다.Accordingly, the disclosed circuits/units/components and other elements illustrated in the drawings and described herein include hardware elements such as those described in the preceding paragraphs. In many cases, the internal arrangement of hardware elements within a particular circuit can be specified by describing the functionality of that circuit. For example, a particular "decode unit" may be described as performing the function of "processing an opcode of an instruction and routing the instruction to one or more of a plurality of functional units," meaning that the decode unit is "configured" to perform that function. Such a functional specification is sufficient to suggest a set of possible architectures for the circuit to one of ordinary skill in the computer arts.
다양한 실시예들에서, 이전 단락에서 논의된 바와 같이, 회로들, 유닛들, 및 이들이 구현하도록 구성된 기능들 또는 동작들에 의해 정의된 다른 요소들, 배열 및 그러한 회로들/유닛들/컴포넌트들은 서로에 대해 그리고 이들이 상호작용하는 방식으로, 마이크로아키텍처 정의의 물리적 구현을 형성하도록 집적 회로에서 궁극적으로 제조되거나 FPGA로 프로그래밍되는 하드웨어의 마이크로아키텍처 정의를 형성한다. 따라서, 마이크로아키텍처 정의는 본 기술 분야의 통상의 기술자들에 의해 많은 물리적 구현들이 도출될 수 있는 구조로 인식되며, 이들 모두는 마이크로아키텍처 정의에 의해 설명되는 더 넓은 구조에 속한다. 즉, 본 개시에 따라 공급되는 마이크로아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/컴포넌트들의 디스크립션을 Verilog 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조를 구현할 수 있다. HDL 설명은 종종 기능적인 것으로 보일 수 있는 방식으로 표현된다. 그러나, 본 분야의 당업자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 컴포넌트의 구조를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 이러한 HDL 설명은 거동 코드(통상적으로 합성 불가능), 레지스터 전달 언어(register transfer language, RTL) 코드(거동 코드와 달리 통상적으로 합성 가능) 또는 구조적 코드(예를 들어, 로직 게이트들을 특정하는 넷리스트 및 그 연결성)의 형태를 취할 수 있다. HDL 설명은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 이후에 합성될 수 있으며, 타이밍, 전력 및 다른 이유들로 수정되어 마스크들을 생성하고 궁극적으로 집적 회로를 생산하기 위해 파운드리로 전송되는 최종 설계 데이터베이스가 된다. 일부 하드웨어 회로들 또는 그 부분들은 또한 회로도 편집기(schematic editor)로 맞춤-설계되고 합성된 회로부와 함께 집적 회로 설계로 캡처될 수 있다. 집적 회로들은 트랜지스터들 및 다른 회로 요소들(예를 들어, 커패시터들, 저항들, 인덕터들 등과 같은 수동 요소들)을 포함할 수 있고, 트랜지스터들과 회로 요소들 사이를 상호 연결할 수 있다. 일부 실시예들은 하드웨어 회로들을 구현하기 위해 함께 커플링된 다수의 집적 회로들을 구현할 수 있고/있거나 일부 실시예들에서는 개별 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(field programmable gate array)와 같은 프로그래밍가능한 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로의 그룹의 설계와 이러한 회로의 후속 로우-레벨 구현 간의 이러한 분리는 일반적으로 이러한 프로세스가 회로 구현 프로세스의 상이한 단계에서 수행되므로 회로가 무엇을 수행하도록 구성되는지에 대한 설명을 넘어 회로 또는 로직 설계자가 로우-레벨 구현에 대한 구조의 특정 세트를 특정하지 않는 시나리오로 귀결된다.In various embodiments, as discussed in the preceding paragraphs, the circuits, units, and other elements, arrangements, and operations defined by them, the circuits/units/components, in relation to each other and in the manner in which they interact, form a microarchitectural definition of hardware that is ultimately fabricated in an integrated circuit or programmed into an FPGA to form a physical implementation of the microarchitectural definition. Accordingly, the microarchitectural definition is recognized by those skilled in the art as a structure from which many physical implementations may be derived, all of which fall within the broader structure described by the microarchitectural definition. That is, one skilled in the art, provided with the microarchitectural definition provided in accordance with the present disclosure, can, without undue experimentation and with the application of conventional techniques, implement the structure by coding the description of the circuits/units/components in a hardware description language (HDL), such as Verilog or VHDL. The HDL description is often expressed in a manner that may appear functional. However, to those skilled in the art, such HDL descriptions are the means by which the structure of a circuit, unit, or component is translated into the next level of implementation detail. Such HDL descriptions may take the form of behavioral code (typically non-synthesizable), register transfer language (RTL) code (typically synthesizable, unlike behavioral code), or structural code (e.g., a netlist specifying the logic gates and their connectivity). The HDL description may then be synthesized into a library of cells designed for a given integrated circuit fabrication technology, modified for timing, power, and other reasons, to create masks and ultimately become the final design database that is sent to the foundry to produce the integrated circuit. Some hardware circuits or portions thereof may also be captured as an integrated circuit design, along with the circuit portions that are custom-designed and synthesized with a schematic editor. Integrated circuits may include transistors and other circuit elements (e.g., passive elements such as capacitors, resistors, inductors, etc.), and interconnections between the transistors and the circuit elements. Some embodiments may implement a number of integrated circuits coupled together to implement the hardware circuits and/or in some embodiments discrete elements may be used. Alternatively, the HDL design may be synthesized into and implemented in a programmable logic array, such as a field programmable gate array (FPGA). This separation between the design of a group of circuits and the subsequent low-level implementation of those circuits typically results in a scenario where the circuit or logic designer does not specify a particular set of structures for the low-level implementation, beyond a description of what the circuit is configured to do, as these processes are typically performed at different stages of the circuit implementation process.
회로의 동일한 사양을 구현하기 위해 회로 요소들의 많은 상이한 로우-레벨 조합이 사용될 수 있다는 사실은 해당 회로에 대해 다수의 등가 구조를 초래한다. 언급한 바와 같이, 이러한 로우-레벨 회로 구현은 제조 기술, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트에 제공되는 셀의 라이브러리 등의 변화에 따라 변할 수 있다. 많은 경우, 이러한 상이한 구현을 생성하기 위해 상이한 설계 도구 또는 방법론에 의해 이루어진 선택은 임의적일 수 있다.The fact that many different low-level combinations of circuit elements can be used to implement the same circuit specification results in many equivalent structures for that circuit. As noted, these low-level circuit implementations can vary depending on variations in manufacturing technology, the foundry chosen to manufacture the integrated circuit, the library of cells available for a particular project, etc. In many cases, the choices made by different design tools or methodologies to generate these different implementations can be arbitrary.
또한, 주어진 실시예에 대해 회로의 특정 기능 사양의 단일 구현이 다수의 디바이스(예를 들어, 수백만 개의 트랜지스터)를 포함하는 것이 일반적이다. 따라서, 이러한 정보의 엄청난 양은 등가의 가능한 구현의 광범위한 어레이는 물론이고 단일 실시예를 구현하는 데 사용되는 로우-레벨 구조의 전체 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시는 산업계에서 일반적으로 채용되는 기능적 약칭을 사용하여 회로의 구조를 설명한다.In addition, it is common for a single implementation of a particular functional specification of a circuit for a given embodiment to include a large number of devices (e.g., millions of transistors). Thus, the sheer volume of this information makes it impractical to provide a full description of the low-level structure used to implement a single embodiment, let alone the vast array of equivalent possible implementations. For this reason, the present disclosure describes the structure of the circuit using functional abbreviations commonly employed in the industry.
다음 항목들은 도면들 및 위의 설명과 일치하는 예시적인 실시예들을 설명한다.The following items describe exemplary embodiments consistent with the drawings and the description above.
1. 프로세서로서,1. As a processor,
명령어 분배 회로를 포함하며, 명령어 분배 회로는,It includes a command distribution circuit, and the command distribution circuit is:
예측과 연관된 제1 조건부 명령어를 수신하고; 그리고Receiving a first conditional instruction associated with a prediction; and
제1 조건부 명령어의 예측에 따라 실행을 위해 복수의 실행 파이프라인들 중 하나에 제1 조건부 명령어를 분배하도록 구성되며, 복수의 실행 파이프라인들은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 상이한 레이턴시들을 제공하는 제1 실행 파이프라인 및 제2 실행 파이프라인을 포함하고; 그리고configured to distribute the first conditional instruction to one of a plurality of execution pipelines for execution based on prediction of the first conditional instruction, the plurality of execution pipelines including a first execution pipeline and a second execution pipeline providing different latencies for processing mispredicted conditional instructions; and
제1 실행 파이프라인은,The first execution pipeline is:
제1 조건부 명령어를 수신하는 것에 응답하여,In response to receiving the first conditional command,
제1 조건부 명령어를 실행하고;Execute the first conditional instruction;
제1 조건부 명령어의 예측이 예측 오류라고 결정하고; 그리고determines that the prediction of the first conditional instruction is a prediction error; and
제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하도록 구성되는, 프로세서.A processor configured to cause execution of a first conditional instruction in a second execution pipeline in response to determining that the prediction of the first conditional instruction is a misprediction.
2. 항목 1에 있어서, 제2 실행 파이프라인은,2. In item 1, the second execution pipeline,
제1 조건부 명령어를 실행하고;Execute the first conditional instruction;
제1 조건부 명령어의 예측이 예측 오류라고 결정하고; 그리고determines that the prediction of the first conditional instruction is a prediction error; and
제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 실행을 위해 제1 조건부 명령어의 타깃 어드레스로부터 명령어가 획득되게 하도록 구성되는, 프로세서.A processor configured to, in response to determining that the prediction of the first conditional instruction is a misprediction, cause an instruction to be obtained from the target address of the first conditional instruction for execution.
3. 항목 1에 있어서, 제1 조건부 명령어의 예측은 하나 이상의 기준들에 대한 신뢰 수준과 연관되고, 하나 이상의 기준들은 (a) 예측이 바이어스 테이블을 사용하는 바이어스 예측 회로에 의해 제공된다는 것 또는 (b) 예측이 조건부 명령어들의 예측 이력에 적어도 부분적으로 기초하는 하나 이상의 테이블들을 사용하는 명령어 예측 회로에 의해 제공된다는 것 중 적어도 하나를 포함하는, 프로세서.3. A processor according to item 1, wherein the prediction of the first conditional instruction is associated with a confidence level for one or more criteria, wherein the one or more criteria include at least one of: (a) that the prediction is provided by a bias prediction circuit using a bias table, or (b) that the prediction is provided by an instruction prediction circuit using one or more tables that are at least in part based on a prediction history of conditional instructions.
4. 항목 3에 있어서, 명령어 분배 회로는 제1 조건부 명령어를, 제1 조건부 명령어의 예측이 높은 신뢰 수준과 연관될 때 실행을 위해 제1 실행 파이프라인에 분배하거나, 또는 제1 조건부 명령어의 예측이 낮은 신뢰 수준과 연관될 때 실행을 위해 제2 실행 파이프라인에 분배하도록 구성되는, 프로세서.4. A processor according to item 3, wherein the instruction distribution circuit is configured to distribute the first conditional instruction to the first execution pipeline for execution when the prediction of the first conditional instruction is associated with a high confidence level, or to distribute the first conditional instruction to the second execution pipeline for execution when the prediction of the first conditional instruction is associated with a low confidence level.
5. 항목 3에 있어서,5. In item 3,
제3 실행 파이프라인 - 제3 실행 파이프라인은,Third Execution Pipeline - The third execution pipeline is:
높은 신뢰 수준의 예측과 연관된 제2 조건부 명령어를 실행하고; 그리고Executes a second conditional instruction associated with a high confidence level prediction; and
제2 조건부 명령어의 예측이 예측 오류라고 결정하도록 구성됨 -; 및- configured to determine that the prediction of the second conditional instruction is a prediction error; and
제1 예측 오류 선택 회로를 추가로 포함하며, 제1 예측 오류 선택 회로는,It additionally includes a first prediction error selection circuit, wherein the first prediction error selection circuit comprises:
제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 되기 전에, 제1 실행 파이프라인으로부터의 제1 조건부 명령어의 연령과 제3 실행 파이프라인으로부터의 제2 조건부 명령어의 연령을 비교하고;Before the first conditional instruction is executed in the second execution pipeline, the age of the first conditional instruction from the first execution pipeline is compared with the age of the second conditional instruction from the third execution pipeline;
제1 조건부 명령어가 제2 조건부 명령어보다 더 오래된 것이라고 결정하는 것에 응답하여, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하도록 구성되는, 프로세서.A processor configured to cause the first conditional instruction to be executed in a second execution pipeline in response to determining that the first conditional instruction is older than the second conditional instruction.
6. 항목 3에 있어서,6. In item 3,
제4 실행 파이프라인 - 제4 실행 파이프라인은,4th Execution Pipeline - The 4th execution pipeline is:
낮은 신뢰 수준의 예측과 연관된 제3 조건부 명령어를 실행하고; 그리고Execute a third conditional instruction associated with a low confidence level prediction; and
제3 조건부 명령어의 예측이 예측 오류라고 결정하도록 구성됨 -; 및- configured to determine that the prediction of the third conditional instruction is a prediction error; and
제2 예측 오류 선택 회로 - 제2 예측 오류 선택 회로는,Second prediction error selection circuit - The second prediction error selection circuit is,
제2 실행 파이프라인으로부터의 제1 조건부 명령어의 연령과 제4 실행 파이프라인으로부터의 제3 조건부 명령어의 연령을 비교하고; 그리고Compare the age of the first conditional instruction from the second execution pipeline with the age of the third conditional instruction from the fourth execution pipeline; and
실행을 위해 제1 및 제3 조건부 명령어들 중 더 오래된 것의 타깃 어드레스로부터 명령어가 획득되게 하도록 구성됨 - 를 추가로 포함하는, 프로세서.A processor further comprising: - configured to cause an instruction to be obtained from a target address of an older one of the first and third conditional instructions for execution.
7. 항목 1에 있어서, 제2 실행 파이프라인은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 제1 실행 파이프라인보다 더 적은 레이턴시를 제공하고, 더 적은 레이턴시를 제공하기 위해, 제2 실행 파이프라인은, 제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 실행을 위해 제1 조건부 명령어의 타깃 어드레스로부터 명령어를 획득하도록 프로세서의 다른 회로에 직접 지시하도록 구성되는, 프로세서.7. In item 1, the second execution pipeline provides lower latency than the first execution pipeline for processing mispredicted conditional instructions, and to provide lower latency, the second execution pipeline is configured to, in response to determining that the prediction of the first conditional instruction is a misprediction, directly direct another circuit of the processor to obtain an instruction from the target address of the first conditional instruction for execution.
8. 항목 1에 있어서, 제2 실행 파이프라인은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 제1 실행 파이프라인보다 더 적은 레이턴시를 제공하고, 제2 실행 파이프라인은 제1 실행 파이프라인보다 더 적은 수의 스테이지들을 포함하는, 프로세서.8. A processor according to item 1, wherein the second execution pipeline provides lower latency than the first execution pipeline for processing mispredicted conditional instructions, and the second execution pipeline includes fewer stages than the first execution pipeline.
9. 항목 1에 있어서, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하기 위해, 제1 실행 파이프라인은,9. In item 1, in order to cause the first conditional instruction to be executed in the second execution pipeline, the first execution pipeline,
제2 실행 파이프라인에 버블을 생성하고; 그리고Create a bubble in the second execution pipeline; and
제1 조건부 명령어가 제2 실행 파이프라인에 의해 실행될 수 있도록 제1 조건부 명령어가 버블에 삽입되게 하도록 구성되는, 프로세서.A processor configured to cause a first conditional instruction to be inserted into a bubble such that the first conditional instruction can be executed by the second execution pipeline.
10. 항목 9에 있어서, 제2 실행 파이프라인은,10. In item 9, the second execution pipeline,
제1 조건부 명령어와 동일한 사이클에서 비조건부 명령어를 실행하도록 추가로 구성되는, 프로세서.A processor further configured to execute a non-conditional instruction in the same cycle as a first conditional instruction.
11. 방법으로서,11. As a method,
프로세서의 명령어 분배 회로에서, 예측과 연관된 제1 조건부 명령어를 수신하는 단계;In an instruction distribution circuit of a processor, a step of receiving a first conditional instruction associated with a prediction;
명령어 분배 회로를 사용하여, 제1 조건부 명령어의 예측에 따라 실행을 위해 복수의 실행 파이프라인들 중 하나에 제1 조건부 명령어를 분배하는 단계 - 복수의 실행 파이프라인들은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 상이한 레이턴시들을 제공하는 제1 실행 파이프라인 및 제2 실행 파이프라인을 포함함 -;Distributing a first conditional instruction to one of a plurality of execution pipelines for execution based on a prediction of the first conditional instruction using an instruction distribution circuit, wherein the plurality of execution pipelines include a first execution pipeline and a second execution pipeline providing different latencies for processing mispredicted conditional instructions;
제1 실행 파이프라인을 사용하여, 제1 조건부 명령어를 실행하는 단계;A step of executing a first conditional instruction using a first execution pipeline;
제1 실행 파이프라인을 사용하여, 제1 조건부 명령어의 예측이 예측 오류라고 결정하는 단계; 및Using the first execution pipeline, determining that the prediction of the first conditional instruction is a prediction error; and
제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하는 단계를 포함하는, 방법.A method comprising: in response to determining that a prediction of a first conditional instruction is a prediction misprediction, causing the first conditional instruction to be executed in a second execution pipeline.
12.
항목 11에 있어서,12. In
제2 실행 파이프라인을 사용하여, 실행을 위해 제1 조건부 명령어의 타깃 어드레스로부터 명령어가 획득되게 하는 단계를 추가로 포함하는, 방법.A method further comprising the step of causing an instruction to be obtained from a target address of a first conditional instruction for execution using a second execution pipeline.
13.
항목 11에 있어서, 제1 조건부 명령어의 예측은 하나 이상의 기준들에 대한 신뢰 수준과 연관되고, 하나 이상의 기준들은 (a) 예측이 바이어스 테이블을 사용하는 바이어스 예측 회로에 의해 제공된다는 것 또는 (b) 예측이 조건부 명령어들의 예측 이력에 적어도 부분적으로 기초하는 하나 이상의 테이블들을 사용하는 명령어 예측 회로에 의해 제공된다는 것 중 적어도 하나를 포함하는, 방법.13. A method according to
14. 항목 13에 있어서,14. In item 13,
제1 조건부 명령어를, 제1 조건부 명령어의 예측이 하나 이상의 기준들을 만족시킬 때 실행을 위해 제1 실행 파이프라인에 분배하거나, 또는 제1 조건부 명령어의 예측이 하나 이상의 기준들을 만족시키지 못할 때 실행을 위해 제2 실행 파이프라인에 분배하는 단계를 추가로 포함하는, 방법.A method further comprising the step of distributing a first conditional instruction to a first execution pipeline for execution when a prediction of the first conditional instruction satisfies one or more criteria, or distributing the first conditional instruction to a second execution pipeline for execution when a prediction of the first conditional instruction does not satisfy the one or more criteria.
15. 항목 13에 있어서,15. In item 13,
제3 실행 파이프라인을 사용하여, 기준들을 만족시키는 예측과 연관된 제2 조건부 명령어를 실행하는 단계;Using a third execution pipeline, executing a second conditional instruction associated with a prediction satisfying the criteria;
제2 조건부 명령어의 예측이 예측 오류라고 결정하는 단계를 추가로 포함하며,An additional step of determining that the prediction of the second conditional instruction is a prediction error is included,
제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하는 단계는,The step that causes the first conditional instruction to be executed in the second execution pipeline is:
제1 예측 오류 선택 회로를 사용하여, 제1 조건부 명령어의 연령과 제2 조건부 명령어의 연령을 비교하는 단계; 및A step of comparing the age of the first conditional instruction and the age of the second conditional instruction using a first prediction error selection circuit; and
제1 조건부 명령어가 제2 조건부 명령어보다 더 오래된 것이라고 결정하는 것에 응답하여, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하는 단계를 추가로 포함하는, 방법.A method further comprising, in response to determining that the first conditional instruction is older than the second conditional instruction, causing the first conditional instruction to be executed in the second execution pipeline.
16. 항목 13에 있어서,16. In item 13,
제4 실행 파이프라인을 사용하여, 기준들을 만족시키지 못하는 예측과 연관된 제3 조건부 명령어를 실행하는 단계;Using the fourth execution pipeline, executing the third conditional instruction associated with the prediction that does not satisfy the criteria;
제3 조건부 명령어의 예측이 예측 오류라고 결정하는 단계;A step of determining that the prediction of the third conditional instruction is a prediction error;
제2 예측 오류 선택 회로를 사용하여, 제1 조건부 명령어의 연령과 제3 조건부 명령어의 연령을 비교하는 단계; 및A step of comparing the age of the first conditional instruction and the age of the third conditional instruction using a second prediction error selection circuit; and
실행을 위해 제1 및 제3 조건부 명령어들 중 더 오래된 것의 타깃 어드레스로부터 명령어가 획득되게 하는 단계를 추가로 포함하는, 방법.A method further comprising the step of causing an instruction to be obtained from a target address of an older one of the first and third conditional instructions for execution.
17. 항목 13에 있어서,17. In item 13,
명령어 분배 회로에서, 기준들을 만족시키는 예측과 연관된 제4 조건부 명령어를 수신하는 단계; 및In a command distribution circuit, a step of receiving a fourth conditional command associated with a prediction satisfying criteria; and
제2 실행 파이프라인의 점유에 기초하여 실행을 위해 제2 실행 파이프라인에 제4 조건부 명령어를 분배하는 단계를 추가로 포함하는, 방법.A method further comprising the step of distributing a fourth conditional instruction to the second execution pipeline for execution based on occupancy of the second execution pipeline.
18.
항목 11에 있어서, 제2 실행 파이프라인은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 제1 실행 파이프라인보다 더 적은 레이턴시를 제공하고, 제2 실행 파이프라인은 제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여 실행을 위해 타깃 어드레스로부터 명령어가 획득되도록 직접 지시하기 위한 통신 경로를 갖는, 방법.18. A method according to
19. 시스템으로서,19. As a system,
하나 이상의 프로세서들을 포함하며, 하나 이상의 프로세서들은 개별적으로,comprising one or more processors, wherein the one or more processors individually:
명령어 분배 회로를 포함하며, 명령어 분배 회로는,It includes a command distribution circuit, and the command distribution circuit is:
예측과 연관된 제1 조건부 명령어를 수신하고; 그리고Receiving a first conditional instruction associated with a prediction; and
제1 조건부 명령어의 예측에 따라 제1 조건부 명령어를 실행하기 위해 복수의 실행 파이프라인들 중 하나를 선택하도록 구성되며, 복수의 실행 파이프라인들은 잘못 예측된 조건부 명령어들을 프로세싱하기 위해 상이한 레이턴시들을 제공하는 제1 실행 파이프라인 및 제2 실행 파이프라인을 포함하고; 그리고A method is configured to select one of a plurality of execution pipelines to execute a first conditional instruction based on a prediction of the first conditional instruction, wherein the plurality of execution pipelines include a first execution pipeline and a second execution pipeline providing different latencies for processing mispredicted conditional instructions; and
제1 실행 파이프라인은,The first execution pipeline is:
제1 조건부 명령어를 수신하는 것에 응답하여,In response to receiving the first conditional command,
제1 조건부 명령어를 실행하고;Execute the first conditional instruction;
제1 조건부 명령어의 예측이 예측 오류라고 결정하고; 그리고determines that the prediction of the first conditional instruction is a prediction error; and
제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 제1 조건부 명령어가 제2 실행 파이프라인에서 실행되게 하도록 구성되는, 시스템.A system configured to cause the first conditional instruction to be executed in a second execution pipeline in response to determining that the prediction of the first conditional instruction is a misprediction.
20. 항목 19에 있어서, 제2 실행 파이프라인은,20. In item 19, the second execution pipeline,
제1 조건부 명령어를 실행하고;Execute the first conditional instruction;
제1 조건부 명령어의 예측이 예측 오류라고 결정하고; 그리고determines that the prediction of the first conditional instruction is a prediction error; and
제1 조건부 명령어의 예측이 예측 오류라고 결정하는 것에 응답하여, 실행을 위해 제1 조건부 명령어의 타깃 어드레스로부터 명령어가 획득되게 하도록 구성되는, 시스템.A system configured to, in response to determining that a prediction of a first conditional instruction is a misprediction, cause an instruction to be obtained from a target address of the first conditional instruction for execution.
위의 개시가 완전히 이해되면 다양한 변형들 및 수정들이 본 기술 분야의 통상의 기술자에게 명백해질 것이다. 다음의 청구범위는 모든 그러한 변형들 및 수정들을 망라하는 것으로 해석되도록 의도된다.Once the above disclosure is fully understood, various modifications and variations will become apparent to those skilled in the art. It is intended that the following claims be interpreted to encompass all such modifications and variations.
Claims (20)
페치 및 디코드 회로를 포함하며, 상기 페치 및 디코드 회로는,
조건부 명령어의 조건이 바이어스된 참(biased true) 또는 바이어스된 거짓(biased false)인지 여부의 바이어스 예측을 제공하도록 구성된 바이어스 예측 회로 - 바이어스된 참 또는 바이어스된 거짓의 바이어스 예측은, 상기 바이어스 예측 회로가 상기 조건부 명령어의 상기 조건이 항상 참 또는 항상 거짓이라고 예측함을 나타냄 -; 및
상기 조건부 명령어의 상기 조건이 참 또는 거짓인지 여부의 명령어 예측을 제공하도록 구성된 명령어 예측 회로를 포함하고,
상기 페치 및 디코드 회로는,
상기 조건부 명령어의 상기 조건이 바이어스된 참 또는 바이어스된 거짓이라는 바이어스 예측에 응답하여, 상기 바이어스 예측 회로로부터의 상기 바이어스 예측을 사용하여 상기 조건부 명령어의 타깃 어드레스를 결정하도록 구성되고, 그리고
상기 바이어스 예측 회로로부터의 상기 바이어스 예측 및 상기 명령어 예측 회로로부터의 상기 명령어 예측은 상기 페치 및 디코드 회로에서의 상기 조건부 명령어의 프로세싱의 상이한 스테이지들에서 제공되는, 프로세서.As a processor,
A fetch and decode circuit is included, wherein the fetch and decode circuit comprises:
A bias prediction circuit configured to provide a bias prediction of whether a condition of a conditional instruction is biased true or biased false, wherein the bias prediction of biased true or biased false indicates that the bias prediction circuit predicts that the condition of the conditional instruction is always true or always false; and
An instruction prediction circuit configured to provide an instruction prediction of whether the condition of the conditional instruction is true or false,
The above fetch and decode circuit,
In response to a bias prediction that the condition of the conditional instruction is biased true or biased false, the bias prediction from the bias prediction circuit is configured to determine a target address of the conditional instruction, and
A processor wherein the bias prediction from the bias prediction circuit and the instruction prediction from the instruction prediction circuit are provided at different stages of processing of the conditional instruction in the fetch and decode circuit.
상기 조건부 명령어의 어드레스에 기초하여 바이어스 테이블 내의 값을 식별하고; 그리고
상기 바이어스 테이블 내의 상기 조건부 명령어의 상기 식별된 값에 기초하여 상기 바이어스 예측을 제공하도록 구성되는, 프로세서.In the first paragraph, to provide the bias prediction, the bias prediction circuit,
Identifying a value in the bias table based on the address of the above conditional instruction; and
A processor configured to provide said bias prediction based on said identified value of said conditional instruction within said bias table.
상기 바이어스 테이블 내의 상기 값의 엔트리에 대응하는 어떠한 조건부 명령어도 상기 바이어스 예측 회로에 의해 조우되지(encountered) 않았음을 나타내는 제1 값;
상기 조건부 명령어의 상기 조건이 바이어스된 거짓임을 나타내는 제2 값;
상기 조건부 명령어의 상기 조건이 바이어스된 참임을 나타내는 제3 값; 및
상기 조건부 명령어의 상기 조건이 바이어스되지 않은 것임을 나타내는 제4 값
을 포함하는 복수의 값들 중 하나인, 프로세서.In the second paragraph, the value for the conditional instruction in the bias table is,
A first value indicating that no conditional instruction corresponding to an entry of said value in said bias table has been encountered by said bias prediction circuit;
A second value indicating that the condition of the above conditional instruction is biased false;
a third value indicating that the condition of the above conditional instruction is biased true; and
A fourth value indicating that the condition of the above conditional instruction is unbiased.
A processor, one of multiple values including .
상기 조건부 명령어의 상기 조건이 바이어스된 참 또는 바이어스된 거짓이 아니라는 바이어스 예측에 응답하여, 상기 명령어 예측 회로로부터의 상기 명령어 예측을 사용하여 상기 조건부 명령어의 상기 타깃 어드레스를 결정하도록 추가로 구성되는, 프로세서.In the first paragraph, the fetch and decode circuit,
A processor further configured to determine the target address of the conditional instruction using the instruction prediction from the instruction prediction circuit, in response to a bias prediction that the condition of the conditional instruction is neither biased true nor biased false.
상기 조건부 명령어의 상기 조건이 바이어스된 참 또는 바이어스된 거짓이라는 상기 바이어스 예측에 응답하여, 상기 조건부 명령어가 비조건부 명령어(non-conditional instruction)로 재코딩되게(recoded) 하도록 추가로 구성되는, 프로세서.In the first paragraph, the fetch and decode circuit,
A processor further configured to cause the conditional instruction to be recoded into a non-conditional instruction in response to the bias prediction that the condition of the conditional instruction is biased true or biased false.
(a) 상기 바이어스 예측 회로로부터의 상기 바이어스 예측 또는 (b) 상기 명령어 예측 회로로부터의 상기 명령어 예측 중 적어도 하나에 기초하여 상기 조건부 명령어를 상이한 실행 파이프라인들 중 하나에 분배하도록 구성된 명령어 분배 회로를 추가로 포함하는, 프로세서.In the first paragraph,
A processor further comprising an instruction distribution circuit configured to distribute the conditional instruction to one of the different execution pipelines based on at least one of (a) the bias prediction from the bias prediction circuit or (b) the instruction prediction from the instruction prediction circuit.
프로세서의 페치 및 디코드 회로의 바이어스 예측 회로를 사용하여, 조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인지 여부의 바이어스 예측을 제공하는 단계 - 바이어스된 참 또는 바이어스된 거짓의 바이어스 예측은 상기 조건부 명령어의 상기 조건이 항상 참 또는 항상 거짓인 것으로 예측됨을 나타냄 -;
상기 페치 및 디코드 회로의 명령어 예측 회로를 사용하여, 상기 조건부 명령어의 상기 조건이 참 또는 거짓인지 여부의 명령어 예측을 제공하는 단계; 및
상기 조건부 명령어의 상기 조건이 바이어스된 거짓의 바이어스된 참이라는 바이어스 예측에 응답하여, 상기 바이어스 예측 회로로부터의 상기 바이어스 예측을 사용하여 상기 조건부 명령어의 타깃 어드레스를 결정하는 단계를 포함하며,
상기 바이어스 예측 및 상기 명령어 예측은 상기 페치 및 디코드 회로를 사용하여 상기 조건부 명령어를 프로세싱하는 상이한 스테이지들에서 제공되는, 방법.As a method,
A step of providing a bias prediction of whether a condition of a conditional instruction is biased true or biased false, using a bias prediction circuit of a fetch and decode circuit of a processor, wherein the bias prediction of biased true or biased false indicates that the condition of the conditional instruction is predicted to be always true or always false;
A step of providing an instruction prediction of whether the condition of the conditional instruction is true or false by using the instruction prediction circuit of the above fetch and decode circuit; and
In response to a bias prediction that the condition of the conditional instruction is biased false or biased true, a step of determining a target address of the conditional instruction using the bias prediction from the bias prediction circuit,
A method wherein said bias prediction and said instruction prediction are provided at different stages of processing said conditional instruction using said fetch and decode circuitry.
상기 조건부 명령어의 어드레스에 기초하여 바이어스 테이블 내의 값을 식별하는 단계; 및
상기 바이어스 테이블 내의 상기 조건부 명령어의 상기 식별된 값에 기초하여 상기 예측을 제공하는 단계를 포함하는, 방법.In the 11th paragraph, the step of providing the bias prediction of whether the condition of the conditional instruction is biased true or biased false,
A step of identifying a value in a bias table based on the address of the conditional instruction; and
A method comprising the step of providing the prediction based on the identified value of the conditional instruction within the bias table.
상기 바이어스 테이블 내의 상기 값의 엔트리에 대응하는 어떠한 조건부 명령어도 상기 바이어스 예측 회로에 의해 조우되지 않았음을 나타내는 제1 값;
상기 조건부 명령어의 상기 조건이 바이어스된 거짓임을 나타내는 제2 값;
상기 조건부 명령어의 상기 조건이 바이어스된 참임을 나타내는 제3 값; 및
상기 조건부 명령어의 상기 조건이 바이어스되지 않은 것임을 나타내는 제4 값
을 포함하는 복수의 값들 중 하나인, 방법.In the 12th paragraph, the value for the conditional instruction in the bias table is,
A first value indicating that no conditional instruction corresponding to an entry of said value in said bias table has been encountered by said bias prediction circuit;
A second value indicating that the condition of the above conditional instruction is biased false;
a third value indicating that the condition of the above conditional instruction is biased true; and
A fourth value indicating that the condition of the above conditional instruction is unbiased.
A method, wherein one of a plurality of values including .
상기 바이어스된 테이블 내의 상기 조건부 명령어에 대한 상기 값을, (a) 상기 조건부 브랜치의 실행이 상기 조건부 명령어의 상기 조건이 각각 참 또는 거짓임을 나타낼 때 상기 제1 값으로부터 상기 제2 또는 제3 값으로 변경하거나, 또는 (b) 상기 조건부 명령어의 상기 실행이 상기 바이어스 테이블 내의 상기 조건부 명령어에 대한 상기 값이 상기 조건부 명령어의 상기 실행의 결과와 미스매칭됨을 나타낼 때 상기 제2 또는 제3 값으로부터 상기 제4 값으로 변경하는 단계를 포함하는, 방법.In Article 13,
A method comprising the step of changing the value for the conditional instruction in the biased table from the first value to the second or third value when (a) execution of the conditional branch indicates that the condition of the conditional instruction is true or false, respectively, or (b) changing the value for the conditional instruction in the biased table from the second or third value to the fourth value when the execution of the conditional instruction indicates that the value mismatches the result of the execution of the conditional instruction.
상기 바이어스 테이블의 포화(saturation)를 검출하는 단계; 및
상기 바이어스 테이블의 상기 포화를 검출하는 것에 응답하여, 상기 바이어스 테이블 내의 적어도 하나의 값을 상기 제4 값으로부터 상기 제1 값으로 변경하는 단계를 포함하는, 방법.In Article 11,
A step of detecting saturation of the above bias table; and
A method comprising: in response to detecting said saturation of said bias table, changing at least one value in said bias table from said fourth value to said first value.
상기 조건부 명령어의 상기 조건이 바이어스된 참 또는 바이어스된 거짓이 아니라는 바이어스 예측에 응답하여, 상기 명령어 예측 회로로부터의 상기 명령어 예측을 사용하여 상기 조건부 명령어의 상기 타깃 어드레스를 결정하는 단계를 추가로 포함하는, 방법.In Article 11,
A method further comprising: determining a target address of the conditional instruction using the instruction prediction from the instruction prediction circuit, in response to a bias prediction that the condition of the conditional instruction is neither biased true nor biased false.
상기 조건부 명령어의 상기 조건이 강하게 거짓(strongly false)임을 나타내는 제1 값;
상기 조건부 명령어의 상기 조건이 약하게 거짓(weakly false)임을 나타내는 제2 값;
상기 조건부 명령어의 상기 조건이 약하게 참임을 나타내는 제3 값; 및
상기 조건부 명령어의 상기 조건이 강하게 참임을 나타내는 제4 값
을 포함하는 복수의 값들 중 하나인, 방법.In the 11th paragraph, the first table includes a value corresponding to the conditional command, and the value in the first table is,
A first value indicating that the condition of the above conditional instruction is strongly false;
A second value indicating that the condition of the above conditional instruction is weakly false;
a third value indicating that the condition of the above conditional instruction is weakly true; and
A fourth value indicating that the above condition of the above conditional command is strongly true.
A method, wherein one of a plurality of values including .
하나 이상의 프로세서들을 포함하며, 상기 하나 이상의 프로세서들은 개별적으로,
페치 및 디코드 회로를 포함하고, 상기 페치 및 디코드 회로는,
조건부 명령어의 조건이 바이어스된 참 또는 바이어스된 거짓인지 여부의 바이어스 예측을 제공하도록 구성된 바이어스 예측 회로 - 바이어스된 참 또는 바이어스된 거짓의 바이어스 예측은, 상기 바이어스 예측 회로가 상기 조건부 명령어의 상기 조건이 항상 참 또는 항상 거짓이라고 예측함을 나타냄 -; 및
상기 조건부 명령어의 상기 조건이 참 또는 거짓인지 여부의 명령어 예측을 제공하도록 구성된 명령어 예측 회로를 포함하고,
상기 페치 및 디코드 회로는,
상기 조건부 명령어의 상기 조건이 바이어스된 참 또는 바이어스된 거짓이라는 바이어스 예측에 응답하여, 상기 바이어스 예측 회로로부터의 상기 바이어스 예측을 사용하여 상기 조건부 명령어의 타깃 어드레스를 결정하도록 구성되고, 그리고
상기 바이어스 예측 및 상기 명령어 예측은 상기 페치 및 디코드 회로에서의 상기 조건부 명령어를 프로세싱하는 상이한 스테이지들에서 제공되는, 시스템.As a system,
comprising one or more processors, wherein the one or more processors individually:
A fetch and decode circuit is included, wherein the fetch and decode circuit comprises:
A bias prediction circuit configured to provide a bias prediction of whether a condition of a conditional instruction is biased true or biased false, wherein the bias prediction of biased true or biased false indicates that the bias prediction circuit predicts that the condition of the conditional instruction is always true or always false; and
An instruction prediction circuit configured to provide an instruction prediction of whether the condition of the conditional instruction is true or false,
The above fetch and decode circuit,
In response to a bias prediction that the condition of the conditional instruction is biased true or biased false, the bias prediction from the bias prediction circuit is configured to determine a target address of the conditional instruction, and
The system wherein the bias prediction and the instruction prediction are provided at different stages of processing the conditional instruction in the fetch and decode circuit.
상기 조건부 명령어의 어드레스에 기초하여 바이어스 테이블 내의 값을 식별하고; 그리고
상기 바이어스 테이블 내의 상기 조건부 명령어의 상기 식별된 값에 기초하여 상기 바이어스 예측을 제공하도록 구성되고,
상기 바이어스 테이블 내의 상기 조건부 명령어에 대한 상기 값은,
상기 바이어스 테이블 내의 상기 값의 엔트리에 대응하는 어떠한 조건부 명령어도 상기 바이어스 예측 회로에 의해 조우되지 않았음을 나타내는 제1 값;
상기 조건부 명령어의 상기 조건이 바이어스된 거짓임을 나타내는 제2 값;
상기 조건부 명령어의 상기 조건이 바이어스된 참임을 나타내는 제3 값; 및
상기 조건부 명령어의 상기 조건이 바이어스되지 않은 것임을 나타내는 제4 값
을 포함하는 복수의 값들 중 하나인, 시스템.In the 19th paragraph, to provide the bias prediction, the bias prediction circuit,
Identifying a value in the bias table based on the address of the above conditional instruction; and
configured to provide the bias prediction based on the identified value of the conditional instruction in the bias table,
The above values for the above conditional instructions in the above bias table are,
A first value indicating that no conditional instruction corresponding to an entry of said value in said bias table has been encountered by said bias prediction circuit;
A second value indicating that the condition of the above conditional instruction is biased false;
a third value indicating that the condition of the above conditional instruction is biased true; and
A fourth value indicating that the condition of the above conditional instruction is unbiased.
A system, one of multiple values including .
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/590,719 | 2022-02-01 | ||
US17/590,722 US11809874B2 (en) | 2022-02-01 | 2022-02-01 | Conditional instructions distribution and execution on pipelines having different latencies for mispredictions |
US17/590,722 | 2022-02-01 | ||
US17/590,719 US12067399B2 (en) | 2022-02-01 | 2022-02-01 | Conditional instructions prediction |
PCT/US2023/011993 WO2023150114A1 (en) | 2022-02-01 | 2023-01-31 | Conditional instructions prediction |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240124412A true KR20240124412A (en) | 2024-08-16 |
Family
ID=87552786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020247025880A KR20240124412A (en) | 2022-02-01 | 2023-01-31 | Conditional instruction prediction |
Country Status (2)
Country | Link |
---|---|
KR (1) | KR20240124412A (en) |
WO (1) | WO2023150114A1 (en) |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5539911A (en) * | 1991-07-08 | 1996-07-23 | Seiko Epson Corporation | High-performance, superscalar-based computer system with out-of-order instruction execution |
US6499101B1 (en) * | 1999-03-18 | 2002-12-24 | I.P. First L.L.C. | Static branch prediction mechanism for conditional branch instructions |
EP2063355B1 (en) * | 2007-11-22 | 2017-09-20 | Sony Interactive Entertainment Europe Limited | Branch prediction method |
JP6273718B2 (en) * | 2013-08-13 | 2018-02-07 | 富士通株式会社 | Arithmetic processing device and control method of arithmetic processing device |
US11163577B2 (en) * | 2018-11-26 | 2021-11-02 | International Business Machines Corporation | Selectively supporting static branch prediction settings only in association with processor-designated types of instructions |
-
2023
- 2023-01-31 KR KR1020247025880A patent/KR20240124412A/en unknown
- 2023-01-31 WO PCT/US2023/011993 patent/WO2023150114A1/en active Application Filing
Also Published As
Publication number | Publication date |
---|---|
WO2023150114A9 (en) | 2024-05-10 |
WO2023150114A1 (en) | 2023-08-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9836304B2 (en) | Cumulative confidence fetch throttling | |
US20240248717A1 (en) | Atomic Operation Predictor to Predict Whether An Atomic Operation Will Complete Successfully | |
US11249766B1 (en) | Coprocessor synchronizing instruction suppression | |
US20240329990A1 (en) | Processing of Synchronization Barrier Instructions | |
US20240311319A1 (en) | Scalable Interrupts | |
US11809874B2 (en) | Conditional instructions distribution and execution on pipelines having different latencies for mispredictions | |
US11175917B1 (en) | Buffer for replayed loads in parallel with reservation station for rapid rescheduling | |
US20230359557A1 (en) | Request Ordering in a Cache | |
US20240248844A1 (en) | Decoupling Atomicity from Operation Size | |
US11379240B2 (en) | Indirect branch predictor based on register operands | |
US11755331B2 (en) | Writeback hazard elimination using a plurality of temporary result-storage elements | |
US11556485B1 (en) | Processor with reduced interrupt latency | |
US12067399B2 (en) | Conditional instructions prediction | |
KR20240124412A (en) | Conditional instruction prediction | |
US10983801B2 (en) | Load/store ordering violation management | |
US12001847B1 (en) | Processor implementing parallel in-order execution during load misses | |
US12008369B1 (en) | Load instruction fusion | |
US11630771B2 (en) | Poison mechanisms for deferred invalidates |