KR100626858B1 - 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템 - Google Patents
단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템 Download PDFInfo
- Publication number
- KR100626858B1 KR100626858B1 KR1020017003691A KR20017003691A KR100626858B1 KR 100626858 B1 KR100626858 B1 KR 100626858B1 KR 1020017003691 A KR1020017003691 A KR 1020017003691A KR 20017003691 A KR20017003691 A KR 20017003691A KR 100626858 B1 KR100626858 B1 KR 100626858B1
- Authority
- KR
- South Korea
- Prior art keywords
- storage
- load
- byte
- queue
- address
- Prior art date
Links
- 239000000872 buffer Substances 0.000 title description 9
- 238000003860 storage Methods 0.000 claims abstract description 365
- 239000013598 vector Substances 0.000 claims abstract description 108
- 238000011068 loading method Methods 0.000 claims abstract description 49
- 230000005540 biological transmission Effects 0.000 claims description 50
- 238000000034 method Methods 0.000 claims description 40
- 230000004044 response Effects 0.000 claims description 12
- 238000012545 processing Methods 0.000 claims description 5
- 238000012546 transfer Methods 0.000 abstract description 16
- 230000007246 mechanism Effects 0.000 abstract description 8
- 206010038933 Retinopathy of prematurity Diseases 0.000 description 44
- 238000010586 diagram Methods 0.000 description 11
- 230000008569 process Effects 0.000 description 11
- 238000013519 translation Methods 0.000 description 8
- 230000001419 dependent effect Effects 0.000 description 5
- 238000013461 design Methods 0.000 description 4
- 238000000802 evaporation-induced self-assembly Methods 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 230000008901 benefit Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000011664 signaling Effects 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 230000033228 biological regulation Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000006073 displacement reaction Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000003999 initiator Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30018—Bit or string 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/3824—Operand accessing
- G06F9/3826—Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
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
적재/저장 유닛(42)은 다른 바이트들과 독립하여 적재에 의해 액세스되는 각 바이트에 대한 거기에 포함되는 저장 큐(64)를 검색하여, (프로그램 순서로) 그 바이트를 갱신하기 위한 가장 최신의 저장을 판단한다. 따라서, 적재에 의해 액세스되는 하나 또는 그 이상의 바이트들이 하나의 저장에 의해 변경되고, 적재에 의해 액세스되는 하나 또는 그 이상의 다른 바이트들이 다른 저장에 의해 변경된다하더라도, 전송 메커니즘은 적재에 의해 액세스되는 바이트들을 어셈블할 수 있다. 특히, 적재 데이터를 임의의 수의 저장들로부터 정확하게 전송할 수 있다. 다시 말하면, 전송은 최대 N 저장(여기서, N은 적재에 의해 액세스되는 바이트의 수임)까지 일어날 수 있다. 하나의 특정 실시예에서, 상기 적재/저장 유닛(42)은 적재들 및 저장들의 주소들의 소정의 세트의 최하위 비트들로부터 비트 벡터를 생성한다. 상기 비트 벡터는 최하위 비트들의 수에 의해 정의되는 범위내의 각 바이트에 대한 비트를 포함한다. 상기 비트는, 바이트가 (저장 비트 벡터들에 대하여) 갱신되는지, 또는 (적재 비트 벡터들에 대하여) 액세스되는지를 나타낸다. 그 다음에, 상기 적재/저장 유닛(42)은 각 바이트의 가장 최신의 갱신을 배치하기 위해서 상기 비트 벡터들을 검사한다(그리고 상기 비트 벡터들을 생성하는데 이용된 최하위 비트들을 제외한, 상기 저장 및 적재 주소들의 나머지 비트들을 비교한다).
Description
본 발명은 프로세서들의 분야에 관한 것으로 특히, 메모리 의존성 검사 및 저장 데이터의 후속 적재들(loads)로의 전송에 관한 것이다.
EP-A-0 651 331은 슈퍼파이프라인, 슈퍼스칼라 마이크로프로세서를 위한 기록 버퍼를 개시한다. 판독 명령의 판독 물리적 주소가 상기 기록 버퍼의 모든 엔트리들(entries)내의 물리적 주소값들 각각에 대하여 비교된다는 점에서, 기록 후 판독(read-after-write: RAW) 의존성들과 같은 의존성들이나 데이터 해저드들(data hazards)을 검출하기 위한 규정들이 제공된다. 데이터를 기록 동작으로부터 후속의 판독으로 전송하기 위해, RAW 해저드의 경우, 상기 판독은 단지 상기 기록 동작에 의해 기록될 바이트들의 서브셋을 형성하는 바이트들을 포함한다는 조건이 충족되어야 한다.
US-A-5 606 670은 순서를 벗어난(out-of-order) 실행 컴퓨터 시스템 상에서 적재 동작을 위해 저장 버퍼에 신호를 보내어 버퍼된 저장 데이터를 출력하도록 하는 방법 및 장치를 개시한다. 이들 버퍼된 메모리 저장 동작들의 실행 상태들을 고려하여, 상기 메모리 적재 동작이 발생되는 시간에 기능적으로 의존하는 상기 버퍼된 메모리 저장 동작들의 가변적인 서브셋으로부터 메모리 적재 동작을 위해 저장 데이터를 조건적으로 전송하는 저장 전송 회로가 제공된다.
슈퍼스칼라 프로세서들은 클록 사이클 당 다수의 명령들을 발행하여 실행함으로써 또한, 설계에 일치하는 가능한 한 가장 높은 클록 주파수를 채용함으로써 고성능을 달성하는 것을 시도한다. 오랜 동안, 슈퍼스칼라 프로세서들에 의해 동시에 발행 및/또는 실행 가능한 명령들의 수가 증가하여 슈퍼스칼라 프로세서들의 성능을 향상시켜 왔다.
US-A-5 606 670은 순서를 벗어난(out-of-order) 실행 컴퓨터 시스템 상에서 적재 동작을 위해 저장 버퍼에 신호를 보내어 버퍼된 저장 데이터를 출력하도록 하는 방법 및 장치를 개시한다. 이들 버퍼된 메모리 저장 동작들의 실행 상태들을 고려하여, 상기 메모리 적재 동작이 발생되는 시간에 기능적으로 의존하는 상기 버퍼된 메모리 저장 동작들의 가변적인 서브셋으로부터 메모리 적재 동작을 위해 저장 데이터를 조건적으로 전송하는 저장 전송 회로가 제공된다.
슈퍼스칼라 프로세서들은 클록 사이클 당 다수의 명령들을 발행하여 실행함으로써 또한, 설계에 일치하는 가능한 한 가장 높은 클록 주파수를 채용함으로써 고성능을 달성하는 것을 시도한다. 오랜 동안, 슈퍼스칼라 프로세서들에 의해 동시에 발행 및/또는 실행 가능한 명령들의 수가 증가하여 슈퍼스칼라 프로세서들의 성능을 향상시켜 왔다.
불행하게도, 보다 많은 명령들이 동시에 실행되기 위해서, 적재들을 신속하게 처리하는 것이 보다 중요하게 되었다. 적재(load)는, 적재에 의해 액세스되는 메모리 장소에 저장된 데이터가 프로세서(예를 들면, 내부 레지스터)에 전송되는 (내부 레지스터들에 대립하는 것으로서) 외부 메모리에의 액세스이다. 반대로, 저장(store)은, 프로세서에 의해 생성된 데이터가 저장에 의해 액세스되는 메모리 장소에 저장되는 외부 메모리에의 액세스이다. 적재 및 저장이 외부 메모리에 액세스하도록 정의되지만은, 프로세서 내부의 하나 또는 그 이상의 캐시들을 이용하여 그 캐시들에서 적중(hit)한 액세스들에 대한 메모리 대기 시간을 감소시킬 수도 있다.
적재들이 데이터를 메모리에서 프로세서로 전송하여, 전형적으로 상기 데이터가 후속 명령 연산들에 의해 동작될 수 있기 때문에, 상기 데이터를 후속 명령 연산들에 제공하기 위해서는 적재들을 신속하게 처리하는 것이 중요하다. 만약 상기 데이터가 신속하게 제공되지 않으면, 후속 명령 연산들은 멈춘다. 만약 실행을 위한 스케줄링에 다른 명령들이 이용가능하지 않으면, 전체 명령 처리량은 감소할 수 있다(그리고 이에 따라 성능이 감소할 수 있다). 슈퍼스칼라 프로세서들이 보다 다수의 명령들을 동시에 발행/실행하고자 함에 따라, 이러한 효과들이 증가할 수 있다. 따라서, 신속한 적재 처리의 필요성도 증가한다.
또한, 프로세서내에서 동시에 발행/실행되는 명령의 수가 증가하면, 저장 큐(queue)내에 있는 저장의 수도 평균적으로 증가하게 된다. 전형적으로, 저장은 그 저장이 추론적이지 않은(non-speculative) 것으로 알려진 후까지는 메모리(캐시 또는 외부 메모리)에 넘겨지지 않는다. 예를 들면, 저장은 퇴거(retire)될 때까지 넘겨지지 않을 수 있다. 저장은 메모리에 넘겨질 수 있을 때까지 저장 큐내에 놓여짐으로써, 저장의 주소 오퍼랜드 및 저장될 데이터를 이용하여 생성되는 저장 주소를 포함한다.
저장 큐내의 다수의 저장들은 단독으로는 성능 문제를 나타내지 않을 수 있지만, 상기 다수의 저장들은 적재들의 신속한 처리에 대한 성능 문제를 간접적으로 나타낼 수 있다. 저장 큐내의 저장들의 수가 증가하면, 적재에 의해 액세스되는 데이터가 (캐시/외부 메모리에 대립되는 것으로서) 저장 큐에 있을 가능성이 증가하게 된다. 또한, 적재에 의해 액세스되는 몇개의 바이트들은 저장 큐내의 하나의 선행 저장에 의해 변경되고, 적재에 의해 액세스되는 다른 바이트들은 저장 큐내의 다른 선행 저장에 의해 변경될 가능성도 역시 증가한다. 또한, 적재에 의해 이용되는 저장 데이터가 저장 큐내에서 이용가능하지 않을 가능성이 증가한다. 이러한 이벤트들이 보다 빈번하게 발생하면, 신속한 적재 처리를 더 가로막게 된다.
상술된 문제들은 대부분 적재에 저장 전송을 제공하도록 구성된 적재/저장 유닛에 의해 해결된다. 상기 적재/저장 유닛은 상기 적재에 의해 액세스되는 각각의 바이트에 대하여 그외의 다른 바이트들과 독립적으로 거기에 포함된 저장 큐를 검색하여, 그 바이트를 갱신하기 위해서 (프로그램 순서로) 가장 최신의 저장을 결정한다. 따라서, 상기 적재에 의해 액세스되는 1개 또는 그 이상의 바이트들이 1개의 저장에 의해 변경되고, 상기 적재에 의해 액세스되는 1개 또는 그 이상의 다른 바이트들이 다른 저장에 의해 변경된다 하더라도, 전송(forwarding) 메커니즘은 상기 적재에 의해 액세스되는 바이트들을 어셈블(assemble)할 수 있다. 장점적으로, 만약 적재 데이터가 저장 큐내에 저장되어 있다면, 적재 데이터는 저장 큐로부터 전송될 수 있다. 특히, 적재 데이터는 임의의 수의 저장으로부터 정확하게 전송될 수 있다. 예를 들면, 전송은 0 저장(저장 큐가 비어있거나, 또는 특정 적재에 대하여 저장 큐내에 적중들이 검출되지 않을 경우), 1 저장(그 저장이 적재에 의해 액세스되는 각각의 바이트를 갱신하기 위한 최근의 것인 경우), 또는 최대 N 저장(여기서, N은 적재에 의해 액세스되는 바이트의 수임)으로부터 발생할 수 있다. 적재들은 신속하게 처리될 수 있고, 이로써 상기 적재/저장 유닛을 포함하는 프로세서의 전체 성능이 향상될 수 있다.
하나의 특정 실시예에서, 상기 적재/저장 유닛은 적재들 및 저장들의 주소들의 최하위 비트들의 소정의 세트로부터 비트 벡터를 생성한다. 상기 비트 벡터는 최하위 비트들의 수에 의해 정해진 범위내의 각각의 바이트에 대한 비트를 포함한다. 이 비트는, 그 바이트가 (저장 비트 벡터에 대하여) 갱신되는지, 또는 (적재 비트 벡터들에 대하여) 액세스되는지를 나타낸다. 그 다음, 상기 적재/저장 유닛은 상기 비트 벡터들을 검사하여 (그리고 상기 비트 벡터들을 생성하는데 이용된 최하위 비트들을 제외한, 상기 저장 및 적재 주소들의 나머지 비트들을 비교하여) 각각의 바이트의 가장 최신의 갱신을 배치한다. 상기 비트 벡터들은 각각의 액세스/갱신된 바이트를 개별적으로 식별하기 때문에, 각각의 바이트의 가장 최신의 갱신을 배치하기 위한 처리는 각각의 바이트에 대하여 독립적으로(그리고 병렬적으로) 수행될 수 있다. 다양한 저장 큐 엔트리들로부터 선택된 바이트들은 그 다음에 함께 합체되어 적재에 의해 액세스되는 바이트들의 세트를 형성한다.
대체로, 저장 큐로부터 적재에 의해 액세스되는 저장 데이터의 전송을 위한 방법이 고려된다. 적재에 의해 액세스되는 제 1 바이트는 저장 큐내의 제 1 저장 큐 엔트리로부터 선택된다. 상기 제 1 저장 큐 엔트리에 대응하는 제 1 저장은 상기 제 1 바이트를 갱신하기 위해서, 프로그램 순서로 가장 최신이다. 적재에 의해 액세스되는 제 2 바이트는 저장 큐내의 제 2 저장 큐 엔트리로부터 선택되며, 상기 제 2 저장 큐 엔트리는 상기 제 1 저장 큐 엔트리와 다르다. 상기 제 2 저장 큐 엔트리에 대응하는 제 2 저장은 상기 제 2 바이트를 갱신하기 위해서, 프로그램 순서로 가장 최신이다. 상기 제 2 바이트의 선택은 상기 제 1 바이트의 선택과 독립적이다.
적재/저장 유닛이 고려된다. 상기 적재/저장 유닛은, 아직 데이터 캐시에 퇴거되어 있지 않은 저장들에 대응하여, 거기에 결합되는 논리(logic)을 전송하는 주소들 및 데이터를 저장하도록 구성된 저장 큐를 포함한다. 이러한 전송을 위한 논리 유닛은 또한 적재 주소를 수신하도록 결합되어, 상기 적재 주소에 대응하는 적재에 의해 액세스되는 다수의 바이트들 중의 각각의 1개에 대하여 독립적으로, 상기 저장 큐에 저장되는 저장들 중의 어느 저장이 상기 다수의 바이트들 중의 그 1개의 가장 최신의 갱신인지를 결정하도록 구성된다. 상기 저장 큐내의 하나의 저장으로부터 상기 다수의 바이트들 중 적어도 1개가 제공가능하고, 상기 저장 큐내의 다른 저장으로부터 상기 다수의 바이트들 중 적어도 다른 1개가 제공가능하다.
또한, 프로세서가 고려된다. 상기 프로세서는 하나 이상의 주소 생성 유닛들을 포함하는 적어도 하나의 실행 코어를 포함한다. 상기 주소 생성 유닛들은 적재들에 대응하는 적재 주소들 및 저장들에 대응하는 저장 주소들을 생성하도록 구성된다. 상기 프로세서는 상기 실행 코어에 연결되는 적재/저장 유닛을 더 포함하며, 상기 적재/저장 유닛은 상기 프로세서내에서 처리중의 저장들에 대한 저장 주소들 및 대응하는 저장 데이터를 저장하도록 구성되는 저장 큐를 포함한다. 또한, 상기 적재/저장 유닛은 상기 적재 주소들을 수신하여, 만약 상기 적재들에 대응하는 저장 데이터가 상기 저장 큐에 저장되어 있다면, 상기 적재들에 대응하는 저장 데이터를 상기 저장 큐로부터 전송하도록 구성된다. 상기 적재/저장 유닛은 특정의 적재에 의해 액세스되는 각각의 바이트에 대하여, 바이트별로(on a byte by byte basis) 상기 저장 큐로부터 데이터를 독립적으로 전송하기 위한 상기 저장 큐내의 특정의 저장을 선택하도록 구성된다.
본 발명의 다른 목적들 및 장점들은 첨부 도면들을 참조로 한 다음의 상세한 설명을 통하여 명확하게 될 것이다.
도 1은 프로세서의 일 실시예의 블록도이다.
도 2는 도 1에 도시된 상기 프로세서의 일 실시예의 부분들을 도시한 블록도로서, 데이터 캐시, 적재/저장 유닛 및 기능 유닛들을 포함한다.
도 3은 도 2에 도시된 상기 적재/저장 유닛의 일 실시예에 따른 저장 큐 및 전송을 위한 논리 유닛을 예시하는 블록도이다.
도 4는 도 3에 도시된 상기 저장 큐의 저장 데이터 부분의 실시예를 예시하는 도면이다.
도 5는 도 3에 도시된 상기 전송을 위한 논리 유닛의 일 실시예를 예시하는 도면이다.
도 6은 도 2에 도시된 상기 저장 큐로부터의 전송 데이터의 예를 도시한다.
도 7은 도 1에 도시된 상기 프로세서를 포함하는 컴퓨터 시스템의 블록도이다.
본 발명은 다양한 수정들과 변형들을 갖지만, 본원에서는 특정 실시예들을 예시적으로 도면들에 도시하여 상세하게 설명하기로 한다. 그러나, 이러한 특정 실시예들은 본 발명을 개시된 특정 형태로만 한정하지 않으며, 본 발명은 첨부된 청구항들에 의해 정의되는 본 발명의 정신과 범위내에 있는 모든 수정들, 등가물들 및 대안들을 포함한다는 것을 이해해야 한다.
도 1은 프로세서(10)의 일 실시예를 나타내는 블록도이다. 다른 실시예들이 가능하고 고려된다. 도 1의 실시예에서, 프로세서(10)는 라인 예측기(12), 명령 캐시(I-캐시)(14), 정렬 유닛(16), 분기 히스토리 테이블(18), 간접 주소 캐시(20), 리턴 스택(22), 디코드 유닛(24), 예측기 미스 디코드 유닛(predictor miss decode unit)(26), 마이크로코드 유닛(28), 맵 유닛(30), 맵 사일로(map silo)(32), 아키텍쳐 명칭변경 블록(architectural renames block)(34), 한쌍의 명령 큐들(36A-36B), 한쌍의 레지스터 파일들(38A-38B), 한쌍의 실행 코어들(40A-40B), 적재/저장 유닛(42), 데이터 캐시(D-캐시)(44), 외부 인터페이스 유닛(46), PC 사일로 및 재전송 유닛(48), 그리고 명령 TLB(ITB)(50)를 포함한다. 상기 라인 예측기(12)는 ITB(50), 예측기 미스 디코드 유닛(26), 분기 히스토리 테이블(18), 간접 주소 캐시(20), 리턴 스택(22), PC 사일로 및 재전송 블록(48), 정렬 유닛(16), 그리고 I-캐시(14)에 연결된다. I-캐시(14)는 정렬 유닛(16)에 연결된다. 정렬 유닛(16)은 예측기 미스 디코드 유닛(26) 및 디코드 유닛(24)에 더 연결된다. 디코드 유닛(24)은 마이크로코드 유닛(28) 및 맵 유닛(30)에 더 연결된다. 맵 유닛(30)은 맵 사일로(32), 아키텍쳐 명칭변경 블록(34), 명령 큐들(36A-36B), 적재/저장 유닛(42), 실행 코어들(40A-40B), 그리고 PC 사일로 및 재전송 블록(48)에 연결된다. 명령 큐들(36A-36B)은 서로 연결되며, 또한 각각의 실행 코어들(40A-40B) 및 레지스터 파일들(38A-38B)에 연결된다. 레지스터 파일들(38A-38B)은 서로 연결되며, 또한 각각의 실행 코어들(40A-40B)에 연결된다. 실행 코어들(40A-40B)은 적재/저장 유닛(42), 데이터 캐시(44), 그리고 PC 사일로 및 재전송 유닛(48)에 더 연결된다. 적재/저장 유닛(42)은 PC 사일로 및 재전송 유닛(48), D-캐시(44), 그리고 외부 인터페이스 유닛(46)에 연결된다. D-캐시(44)는 레지스터 파일들(38)에 연결되고, 외부 인터페이스 유닛(46)은 외부 인터페이스(52)에 연결된다. 문자와 병기된 참조 번호로 지칭되는 요소들은 참조 번호만으로 총체적으로 지칭될 것이다. 예를 들면, 명령 큐들(36A-36B)은 명령 큐들(36)로서 총체적으로 지칭될 것이다.
대체로, 적재/저장 유닛(42)은 적재를 위해 거기에 포함되는 저장 큐로부터의 전송을 제공한다. 이 전송 메커니즘은 상기 적재의 각각의 바이트에 대하여 그외의 다른 바이트들과 독립적으로 저장 큐를 검색하여, 그 바이트를 갱신하기 위하여 (프로그램 순서로) 가장 최신의 저장을 결정한다. 따라서, 상기 적재에 의해 액세스되는 1개 또는 그 이상의 바이트들이 1개의 저장에 의해 변경되고, 상기 적재에 의해 액세스되는 1개 또는 그 이상의 다른 바이트들이 다른 저장에 의해 변경된다 하더라도, 상기 전송 메커니즘은 상기 적재에 의해 액세스되는 바이트들을 어셈블할 수 있다. 장점적으로, 만약 적재 데이터가 저장 큐내에 저장되어 있다면, 적재 데이터는 저장 큐로부터 전송될 수 있다. 적재들은 신속하게 처리될 수 있고, 이로써 프로세서(10)의 전체 성능이 향상될 수 있다.
본원에서 이용되는 바와 같이, "프로그램 순서"라는 용어는 실행되는 프로그램에서 특정되는 명령들의 시퀀스를 나타낸다. 어느 특정의 저장은 바이트를 갱신하기 위해서, 만약 그 특정의 저장과 전송이 시도되고 있는 적재와의 사이의 다른 어떠한 저장들도 상기 바이트를 갱신하지 않는다면, 프로그램 순서로 가장 최신이다.
하나의 특정 실시예에서, 적재/저장 유닛(42)은 적재들 및 저장들의 주소들의 최하위 비트들의 소정의 세트로부터 비트 벡터를 생성한다. 상기 비트 벡터는 최하위 비트들의 수에 의해 정해진 범위내의 각 바이트에 대한 비트를 포함한다. 상기 비트는 그 바이트가 (저장 비트 벡터들에 대하여) 갱신되는지 또는 (적재 비트 벡터들에 대하여) 액세스되는지를 나타낸다. 예를 들면, 세트(set)된 비트는 그 바이트가 갱신/액세스된 것을 나타내고, 클리어(clear)된 비트는 그 바이트가 갱신/액세스되지 않은 것을 나타낸다. 대안적으로, 클리어된 비트는 그 바이트가 갱신/액세스된 것을 나타내고, 세트된 비트는 그 바이트가 갱신/액세스되지 않은 것을 나타낼 수 있다. 적재/저장 유닛(42)은, 저장 주소들이 저장 큐에 저장되기 때문에 저장 비트 벡터들을 생성할 수 있고, 데이터 캐시(44) 및 적재/저장 유닛(42)에의 대응하는 적재 주소들의 제출시에 적재 비트 벡터들을 생성할 수 있다. 그 다음에, 적재/저장 유닛(42)은 상기 비트 벡터들을 검사하여 (그리고 상기 비트 벡터들을 생성하는데 이용된 최하위 비트들을 제외한, 상기 저장 및 적재 주소들의 나머지 비트들을 비교하여) 각각의 바이트의 가장 최신의 갱신을 배치한다. 상기 비트 벡터들은 각각의 액세스/갱신된 바이트를 개별적으로 식별하기 때문에, 각각의 바이트의 가장 최신의 갱신을 배치하기 위한 처리는 각각의 바이트에 대하여 독립적으로(그리고 병렬로) 수행될 수 있다. 다양한 저장 큐 엔트리들로부터 선택된 바이트들은 그 다음에 함께 합체되어 적재에 의해 액세스되는 바이트들의 세트를 형성한다.
적재들 및 저장들은 일반적으로 그와 관련하는 주소를 가지고 있어, 이 주소는 상기 적재/저장에 의해 액세스되거나 갱신되는 메모리내의 메모리 장소를 식별한다는 것에 주목할 필요가 있다. 상기 적재/저장의 하나 또는 그 이상의 주소 오퍼랜드들이 프로세서(10)에 의해 상기 주소를 생성하는데 이용된다. 주소 오퍼랜드들은 레지스터 값들 뿐만아니라 명령내에 인코드되는 변위(displacement)들을 포함할 수 있다.
도 1의 실시예에서, 프로세서(10)는 가변 바이트 길이, 복합 명령 세트 컴퓨팅(complex instruction set computing: CISC) 명령 세트 아키텍쳐를 채용한다. 예를 들면, 프로세서(10)는 x86 명령 세트 아키텍쳐(IA-32라고도 칭해짐)를 채용할 수 있다. 다른 실시예들은 고정 길이 명령 세트 아키텍쳐들 및 감소된 명령 세트 컴퓨팅(reduced instruction set computing: RISC) 명령 세트 아키텍쳐를 포함하는 다른 명령 세트 아키텍쳐들을 채용할 수 있다.
라인 예측기(12)는 I-캐시(14)에 대한 인출 주소들을 생성하도록 구성되고, 추가적으로 정렬 유닛(16)에 명령 연산들의 라인에 관한 정보를 제공하도록 구성된다. 일반적으로, 라인 예측기(12)는 프로세서(10)에 의해 이전에 추론적으로 인출된 명령 연산들의 라인들과, 상기 라인의 인출시에 선택되는 각 라인에 대응하는 1개 또는 그 이상의 후속 인출 주소들을 저장한다. 일 실시예에서, 라인 예측기(12)는 1K 엔트리들을 저장하도록 구성되며, 각각의 엔트리는 명령 연산들의 1개의 라인을 정의한다. 필요한 경우, 라인 예측기(12)는 예를 들면, 256 엔트리들의 4개의 뱅크(bank)로 뱅크되어, 듀얼 포팅(dual porting)없이 그 각각을 동시에 판독 및 갱신 가능하게 한다.
라인 예측기(12)는 그 후속 인출 주소를 I-캐시(14)에 제공하여, 대응하는 명령 바이트들을 인출한다. I-캐시(14)는 명령 바이트들을 저장하는 고속 캐시 메모리이다. 일 실시예에 따르면, I-캐시(14)는 예를 들면, 256 킬로바이트의, 64 바이트 캐시 라인들을 이용하는 4-웨이 세트 결합 구성(four way set associative organization)으로 이루어진다. 그러나, 어떠한 I-캐시 구조도 적절할 수 있다. 또한, 상기 후속 인출 주소는 명령 연산들의 대응하는 라인에 관한 인출 정보로의 입력으로서 라인 예측기(12)에 되돌려 제공된다. 상기 후속 인출 주소는 PC 사일로 및 재전송 유닛(48)에 보고되는 예외 상태들에 응답하여 ITB(50)에 의해 제공된 주소에 의해 무효로 될 수 있다.
상기 라인 예측기에 의해 제공되는 후속 인출 주소는 라인내의 (만약 이 라인이 비-분기 명령으로 종결한다면) 마지막 명령에 이어지는 주소일 수 있다. 대안적으로, 후속 인출 주소는 라인을 종결시키는 분기 명령의 목적지 주소일 수 있다. 다른 대안으로서, 라인은 리턴 명령에 의해 종결될 수 있으며, 이 경우에, 후속 인출 주소는 리턴 스택(22)으로부터 얻을 수 있다.
인출 주소에 응답하여, 라인 예측기(12)는 정렬 유닛(16)에, 인출 주소에서 개시하는 명령 연산들의 라인에 관한 정보를 제공한다. 정렬 유닛(16)은 I-캐시(14)로부터 상기 인출 주소에 대응하는 명령 바이트들을 수신하고, 제공된 명령 연산 정보에 따라 명령 바이트들을 선택하여 발행 위치(issue position)들의 세트내에 제공한다. 특히, 라인 예측기(12)는 상기 라인 명령 연산들 내의 각 명령에 대한 시프트량(shift amount)과, 상기 라인을 포함하는 명령 연산들의 세트에의 명령들의 맵핑을 제공한다. 명령은 다수의 명령 연산들에 대응할 수 있음으로써, 그 명령에 대응하는 시프트량을 이용하여 다수의 발행 위치들로의 명령 바이트들을 선택할 수 있다. 발행 위치는 라인내의 가능한 명령 연산의 각각에 대해서 제공된다. 일 실시예에서, 명령 연산들의 하나의 라인은 최대 6개의 명령들에 대응하는 최대 8개의 명령 연산들을 포함할 수 있다. 일반적으로, 본원에서 이용되는 바와 같이, 명령 연산들의 라인은 디코드 유닛(24)에 동시에 발행되는 명령 연산들의 그룹을 나타낸다. 명령 연산들의 라인은 마이크로프로세서(10)의 파이프라인을 통하여 한 유닛으로서 명령 큐들(36)에 진행한다. 명령 큐들(36)에 저장되면, 개개의 명령 연산들은 임의의 순서로 실행될 수 있다.
디코드 유닛(24)내의 발행 위치들(그리고 명령 큐들(36)로의 후속하는 파이프라인단들)은 그들의 파이프라인들 내의 하드웨어에 대한 라인내의 명령 연산들의 프로그램 순서를 정의한다. 정렬 유닛(16)에 의해 발행 위치에 정렬된 명령 연산은 명령 큐(36A-36B) 내에 저장될 때까지 그 발행 위치에 남게 된다. 따라서, 제 1 발행 위치내의 명령 연산이 프로그램 순서로 제 2 발행 위치내에 동시에 있는 명령 연산에 선행하는 경우, 제 1 발행 위치는 제 2 발행 위치에 선행한다고 칭해질 수 있다. 이와 유사하게, 제 1 발행 위치내의 명령 연산이 프로그램 순서로 제 2 발행 위치내에 동시에 있는 명령 연산에 후속하는 경우, 제 1 발행 위치가 제 2 발행 위치에 후속한다고 칭해질 수 있다. 발행 위치들 내의 명령 연산들은 라인내의 그외 다른 명령 연산들에 선행 또는 후속한다고 칭해질 수도 있다.
본원에서 이용되는 바와 같이, 명령 연산(또는 ROP)은 실행 코어들(40A-40B) 내의 실행 유닛이 단일 엔티티로서 실행하도록 구성되는 연산이다. 간단한 명령들은 단일 명령 연산에 대응하며, 보다 복잡한 명령들은 다수의 명령 연산들에 대응한다. 상기 보다 복잡한 명령들 중의 일부는 마이크로코드 루틴들로서 마이크로코드 유닛(28)내에서 실현될 수 있다. 또한, 비-CISC 명령 세트들을 이용하는 실시예들은 각 명령에 대한 단일 명령 연산을 이용할 수 있다(즉, 이러한 실시예들에서 명령 및 명령 연산은 같은 의미를 나타낼 수 있다). 하나의 특정 실시예에서, 라인은 최대 6개의 명령들에 대응하는 최대 8개의 명령 연산들을 포함할 수 있다. 또한, 상기 특정 실시예는 만약 분기 명령이 검출되면, 6개의 명령들 및/또는 8개의 명령 연산들 이하로 하나의 라인을 종결시킬 수 있다. 필요한 경우, 상기 라인에 대한 명령 연산들에 관한 추가적인 제한들을 이용할 수도 있다.
라인 예측기(12)에 의해 생성되는 후속 인출 주소는 분기 히스토리 테이블(18), 간접 주소 캐시(20) 및 리턴 스택(22)에 전송된다. 분기 히스토리 테이블(18)은 후속 인출 주소에 의해 식별되는 라인을 종결시키는 조건부 분기 명령에 대한 분기 히스토리를 제공한다. 라인 예측기(12)는 분기 히스토리 테이블(18)에 의해 제공되는 예측을 이용하여, 라인을 종결시키는 조건부 분기 명령이 테이큰(taken)이라고 예측되어야 하는지 또는 낫테이큰(not taken)이라고 예측되어야 하는지를 판단한다. 일 실시예에서, 라인 예측기(12)는 테이큰 또는 낫테이큰을 선택하는데 이용될 분기 예측을 저장할 수 있고, 분기 히스토리 테이블(18)은 상기 라인 예측기 예측을 취소하여 다른 후속 인출 주소가 선택되어지도록 하는 보다 정확한 예측을 제공하는데 사용된다. 간접 주소 캐시(20)는 빈번하게 변화하는 간접 분기 목적지 주소들을 예측하는데 이용된다. 라인 예측기(12)는 후속 인출 주소로서, 이전에 생성된 간접 목적지 주소를 저장할 수 있다. 대응하는 라인이 간접 분기 명령에 의해 종결되는 경우, 간접 주소 캐시(20)는 라인 예측기(12)에 의해 제공되는 후속 인출 주소를 무효로 할 수 있다. 또한, 라인이 서브루틴 호출 명령에 의해 종결되는 경우, 명령 연산들의 라인내의 마지막 명령에 후속하는 주소가 리턴 스택(22)에 밀어낼 수 있다. 라인들에 대한 가능한 후속 인출 주소가 리턴 명령에 의해 종결되었을 때, 리턴 스택(22)은 그 상부에 저장되는 주소를 라인 예측기(12)에 제공한다.
상기에 언급된 블록들에 후속 인출 주소 및 명령 연산 정보를 제공하는 것에 추가하여, 라인 예측기(12)는 PC 사일로 및 재전송 유닛(48)에 후속 인출 주소 및 명령 연산 정보를 제공하도록 구성된다. PC 사일로 및 재전송 유닛(48)은 인출 주소 및 라인 정보를 저장하고, 예외들에 관한 명령어 인출의 재전송 뿐만 아니라 명령들의 순서에 따른 퇴거를 담당한다. PC 사일로 및 재전송 유닛(48)은 프로세서(10)내에서 처리중일 수 있는 명령 연산들의 다수의 라인들에 대응하는 인출 주소 및 명령 연산 정보를 저장하는 원형 버퍼(circular buffer)를 포함할 수 있다. 명령들의 라인의 퇴거시에, PC 사일로 및 재전송 유닛(48)은 각각 조건부 분기 및 간접 분기의 실행에 따라 분기 히스토리 테이블(18) 및 간접 주소 캐시(20)를 갱신할 수 있다. 예외를 처리할 때, PC 사일로 및 재전송 유닛(48)은 예외-유발(exception-causing) 명령에 후속하는 리턴 스택(22)으로부터의 엔트리들을 제거할 수 있다. 또한, PC 사일로 및 재전송 유닛(48)은 예외-유발 명령의 표시를 맵 유닛(30), 명령 큐들(36) 및 적재/저장 유닛(42)에 전송하여, 이러한 유닛들이 예외-유발 명령에 후속하는 명령들을 취소하여 그에 따라 추론 상태를 회복한다.
일 실시예에서, PC 사일로 및 재전송 유닛(48)은 각 명령 연산에 시퀀스 번호(R#)를 할당하여, 프로세서(10)내에서 처리중인 명령 연산들의 순서를 식별한다. PC 사일로 및 재전송 유닛(48)은 라인을 수반하는 각각의 가능한 명령 연산에 R#들을 할당할 수 있다. 라인이 명령 연산들의 최대수보다 적은 명령 연산들을 포함하는 경우, 할당된 R#들의 일부는 그 라인에 대해서 이용되지 않을 것이다. 그러나, PC 사일로 및 재전송 유닛(48)은 명령 연산들의 후속 라인에 상기 R#들의 후속 세트를 할당하도록 구성됨으로써, 할당되었으나 이용되지 않은 R#들은 명령 연산들의 대응하는 라인이 퇴거될 때까지 이용되지 않은 상태로 남게된다. 이러한 방식으로, 소정의 라인에 할당된 R#들의 일부는 프로세서(10)내의 라인을 식별하는데 이용될 수 있다. 일 실시예에서, 최대 8개의 ROP가 1개의 라인에 배치될 수 있다. 따라서, 각 라인 내의 제 1 ROP에는 8의 배수인 R#가 할당될 수 있다. 이에 따라, 이용되지 않은 R#들은 자동적으로 스킵(skip)된다.
상술에서, 후속 주소들을 예측하여 명령 연산의 라인에 관한 명령 연산 정보를 제공하는 라인 예측기(12)를 설명하였다. 이 연산은 각 인출 주소가 라인 예측기(12)에 적중하는 한 일어난다. 라인 예측기(12)에서 미스(miss)를 검출하면, 정렬 유닛(16)은 대응하는 명령 바이트들을 I-캐시(14)로부터 예측기 미스 디코드 유닛(26)으로 전송한다. 예측기 미스 디코드 유닛(26)은 미스한 인출 주소에 의해 특정되는 오프셋에서 시작하는 명령들을 디코드하여 명령 연산 정보의 라인과 후속 인출 주소를 생성한다. 예측기 미스 디코드 유닛(26)은 프로세서(10) 설계(예를 들면, 명령 연산의 최대수, 명령의 최대수, 분기 명령의 종결 등)에 따라 명령 연산들의 라인에 임의의 제한들을 가한다. 라인의 디코드를 완료하면, 예측기 미스 디코드 유닛(26)은 저장을 위해 정보를 라인 예측기(12)에 제공한다. 예측기 미스 디코드 유닛(26)은 명령들이 디코드될 때 명령들을 디스패치(dispatch)하도록 구성될 수 있다. 도 1에서, 이러한 선택사항이 점선으로 표시되어 있다. 대안적으로, 예측기 미스 디코드 유닛(26)은 명령 정보의 라인을 디코드하여 저장을 위해 라인 예측기(12)에 제공한다. 그 다음으로, 미스한 인출 주소가 라인 예측기(12)에서 다시 시도되어, 적중이 검출될 수 있다. 또한, 라인 예측기(12)내의 적중이 검출되어, I-캐시(14)내의 미스가 일어날 수 있다. 대응하는 명령 바이트들은 외부 인터페이스 유닛(46)을 통해 인출되어 I-캐시(14)에 저장될 수 있다.
일 실시예에서, 라인 예측기(12) 및 I-캐시(14)는 물리적 주소 지정(physical addressing)을 이용한다. 그러나, 예외를 검출하면, PC 사일로 및 재전송 유닛(48)에는 논리(또는 가상) 주소가 공급될 것이다. 따라서, 재전송 주소들은 라인 예측기(12)(그리고 대응하는 명령 바이트들을 판독하기 위해 병행하여 I-캐시(14))로의 제공을 위해서 ITB(50)에 의해 변환된다. 또한, PC 사일로 및 재전송 유닛(48)은 상대 분기 목적지 주소들과 같은 PC 상대 계산들에서의 이용을 위해 가상 룩 어헤드(lookahead) PC 값을 유지한다. 각 라인에 대응하는 가상 룩 어헤드 PC를 ITB(50)에 의해 변환하여, 대응하는 물리 주소가 라인 예측기(12)에 의해 생성되는 물리 인출 주소와 정합(match)하는 것을 증명한다. 만약 부정합(mismatch)이 일어나면, 라인 예측기(12)는 정확한 물리 주소로 갱신되어 정확한 명령이 인출된다. PC 사일로 및 재전송 유닛(48)은 게다가 보호 경계를 넘는 인출 등에 관한 예외들을 처리한다. PC 사일로 및 재전송 유닛(48)은 또한 가장 최신의 퇴거된 명령들의 주소를 나타내는 퇴거 PC 값(retire PC value)을 유지한다. 본 실시예에서, PC 사일로 및 재전송 유닛(48)은 명령 연산들의 라인을 동시에 퇴거할 수 있다. 따라서, PC 사일로 및 재전송 유닛(48)은 라인의 R# 표시를 맵 유닛(30), 명령 큐들(36A-36B) 및 적재/저장 유닛(42)에 전송할 수 있다.
디코드 유닛(24)은 상술된 바와 같이, 다수의 발행 위치들에서 정렬 유닛(16)으로부터 명령 연산들을 수신하도록 구성된다. 디코드 유닛(24)은 각 발행 위치에 대해서 병렬로(명령 바이트들에 대응하는 어느 명령 연산이 특정 발행 위치에서 생성될 것인가에 대한 표시에 따라) 정렬된 명령 바이트들을 디코드한다. 디코드 유닛(24)은 각 명령 연산에 대한 소스 및 목적 오퍼랜드들을 식별하여, 실행 코어들(40A-40B)에 의해 이용되는 명령 연산 인코딩을 생성한다. 또한, 디코드 유닛(24)은 마이크로코드로 구현된 명령들에 대한 마이크로코드 유닛(28)으로부터의 마이크로코드 루틴들을 인출하도록 구성된다.
하나의 특정 실시예에 따르면, 다음의 명령 연산들 즉, 정수, 부동 소수점 덧셈(멀티미디어를 포함함), 부동 소수점 곱셈(멀티미디어를 포함함), 분기, 적재, 저장 주소 생성 및 저장 데이터는 프로세서(10)에 의해 지원된다. 각 명령 연산은 최대 2개의 소스 레지스터 오퍼랜드와 1개의 목적지 레지스터 오퍼랜드를 이용할 수 있다. 하나의 특정 실시예에 따르면, 단일 목적지 레지스터 오퍼랜드를 정수 ROP들에 할당하여, 정수 결과와 상태 코드(또는 플래그들) 갱신 양쪽 모두를 저장한다. 대응하는 논리 레지스터들은 정수 연산의 퇴거시 대응 PR#를 수신한다. 어떤 명령들은 동일한 타입의 2개의 명령 연산들을 생성하여 2개의 목적지 레지스터들을 갱신한다(예를 들면, ESP 및 특정된 목적지 레지스터를 갱신하는 POP).
디코드된 명령 연산들과 소스 및 목적지 레지스터 번호들이 맵 유닛(30)에 제공된다. 맵 유닛(30)은 물리 레지스터 번호(PR#)들을 각 목적지 레지스터 오퍼랜드 및 각 명령 연산의 소스 레지스터 오퍼랜드에 할당함으로써 레지스터 명칭변경을 수행하도록 구성된다. 상기 물리 레지스터 번호들은 레지스터 파일들(38A-38B)내의 레지스터들을 식별한다. 또한, 맵 유닛(30)은 각 명령 연산에 큐 번호(IQ#)를 할당함으로써, 명령 연산을 저장하도록 할당된 명령 큐들(36A-36B)내의 장소를 식별한다. 맵 유닛(30)은 추가적으로 명령 연산의 소스 오퍼랜드에 할당된 각 물리 레지스터 번호를 갱신하는 명령들의 큐 번호들을 제공함으로써, 각 명령 연산에 대한 의존성의 표시를 제공한다. 맵 유닛(30)은 물리 레지스터 번호들과 각 명령 연산에 할당된 번호들에 대한 명령(뿐만 아니라 대응하는 논리 레지스터 번호들)에 의해 맵 사일로(32)를 갱신한다. 또한, 맵 사일로(32)는 명령들의 라인에 선행하는 논리 레지스터들에 대응하는 룩 어헤드 상태와 PC 사일로에 관한 명령들의 라인을 식별하는 R#을 저장하도록 구성될 수 있다. 전술된 PC 사일로와 유사하게, 맵 사일로(32)는 엔트리들의 원형 버퍼를 포함한다. 각 엔트리는 명령 연산들의 하나의 라인에 대응하는 정보를 저장하도록 구성될 수 있다.
맵 유닛(30) 및 맵 사일로(32)는 추가적으로 PC 사일로(48)로부터 퇴거 지시를 수신하도록 구성된다. 명령 연산들의 라인을 퇴거할 때, 맵 사일로(32)는 상기 라인에 할당된 목적지 물리 레지스터 번호들 및 대응하는 논리 레지스터 번호들을 아키텍쳐 명칭변경 블록(34)에 저장을 위해 옮긴다. 아키텍쳐 명칭변경 블록(34)은 각 논리 레지스터에 대한 커미트된(committed) 레지스터 상태를 나타내는, 각 논리 레지스터에 대응하는 물리 레지스터 번호들을 저장한다. 상기 대응하는 논리 레지스터를 새로운 물리 레지스터 번호들로 갱신할 때, 아키텍쳐 명칭변경 블록(34)으로부터 변위되는 물리 레지스터 번호들은 후속하는 명령들에 대한 배치를 위해서, 물리 레지스터 번호들의 프리 리스트(free list)에 리턴된다. 일 실시예에서, 상기 프리 리스트에 물리 레지스터 번호를 리턴하기 전에, 그 물리 레지스터 번호들은 아키텍쳐 명칭변경 블록(34)내의 남아있는 물리 레지스터 번호들과 비교된다. 만약 물리 레지스터 번호가 변위된 후에도 아키텍쳐 명칭변경 블록(34)내에 표시된다면, 그 물리 레지스터 번호는 프리 리스트에 추가되지 않는다. 이러한 실시예는, 동일한 물리 레지스터 번호를 이용하여 명령의 하나 이상의 결과를 저장하는 경우에 이용될 수 있다. 예를 들면, x86 명령 세트 아키텍쳐를 이용하는 실시예는, 부동 소수점 오퍼랜드를 저장하기에 충분히 큰 물리 레지스터들을 제공할 수 있다. 이러한 방식으로, 물리 레지스터는 임의의 타입의 오퍼랜드를 저장하는데 이용될 수 있다. 그러나, 정수 오퍼랜드들 및 상태 코드 오퍼랜드들은 소정의 물리 레지스터내의 공간을 충분히 활용하지 않는다. 이러한 실시예에서, 프로세서(10)는 단일 물리 레지스터를 할당하여 정수 결과와 명령의 상태 코드 결과 모두를 저장한다. 물리 레지스터에 대응하는 상태 코드 결과를 오버라이트(overwrite)하는 명령의 후속하는 퇴거는 동일한 정수 레지스터를 갱신하지 않아도 되고, 그에 따라 물리 레지스터는 새로운 상태 코드 결과를 커미트할 때에 자유롭지 않을 가능성이 있다. 이와 유사하게, 물리 레지스터에 대응하는 정수 레지스터를 갱신하는 명령의 후속하는 퇴거는 상기 상태 코드 레지스터를 갱신하지 않아도 되고, 그에 따라 물리 레지스터는 새로운 정수 결과를 커미트할 때에 자유롭지 않을 가능성이 있다.
또한, 맵 유닛(30) 및 맵 사일로(32)는 PC 사일로(48)로부터 예외 표시들을 수신하도록 구성된다. 예외-유발 명령 연산을 포함한 라인에 후속하는 명령 연산들의 라인들은 맵 사일로(32)내에서 무효(invalid)로 표시된다. 명령 연산들의 후속하는 라인들에 대응하는 물리 레지스터 번호들은 퇴거를 위한 대응하는 라인들의 선택시에 자유롭게 된다(그리고 아키텍쳐 명칭변경 블록(34)은 무효화된 목적지 레지스터들로 갱신되지 않는다). 또한, 맵 유닛(30)에 의해 유지되는 룩 어헤드 레지스터 상태는 예외-유발 명령에 대응하는 룩 어헤드 레지스터로 복원된다.
명령 연산들의 라인, 소스 물리 레지스터 번호들, 소스 큐 번호들 및 목적지 물리 레지스터 번호들은 맵 유닛(30)에 의해 할당된 큐 번호들에 따라 명령 큐들(36A-36B)에 저장된다. 일 실시예에 따라, 명령 큐들(36A-36B)은 대칭이며, 어떠한 명령들도 저장할 수 있다. 또한, 특정 명령 연산에 대한 의존성들은 어떤 명령 큐에 저장되는 그외 다른 명령 연산들에 관하여 일어날 수 있다. 맵 유닛(30)은, 예를 들면, 명령 연산들의 라인을 명령 큐들(36A-36B) 중의 하나에 저장하여, 명령 연산들의 다음 라인을 명령 큐들(36A-36B) 중의 다른 하나에 저장한다. 명령 연산은 적어도 그 명령 연산이 실행을 위해서 스케줄링될 때까지는 명령 큐(36A-36B)에 남는다. 일 실시예에서, 명령 연산들은 퇴거될 때까지 명령 큐들(36A-36B)에 남는다.
명령 큐들(36A-36B)은 특정의 명령 연산을 실행을 위해서 스케줄링할 때에, 그 특정의 명령 연산이 어느 클록 사이클에서 레지스터 파일들(38A-38B)을 갱신할 것인가를 결정한다. 실행 코어들(40A-40B)내의 다른 실행 유닛들은 다른 수의 파이프라인단(이에 따라 다른 대기 시간)을 이용할 수 있다. 또한, 어떤 명령들은 다른 명령들보다 파이프라인내에서 보다 긴 대기 시간을 경험할 수 있다. 따라서, (클록 사이클들의 수들에서) 특정의 명령 연산에 대한 대기 시간을 측정하는 카운트다운(countdown)이 생성된다. 명령 큐들(36A-36B)은 (레지스터 파일을 판독하는 의존성 명령 연산들에 선행하여, 또는 그와 동시에 갱신이 일어날 때까지) 특정수의 클록 사이클을 기다리고, 그 다음에 그 특정의 명령 연산에 의존하는 명령 연산들이 스케줄링될 수 있음을 나타낸다. 예를 들면, 하나의 특정 실시예에서, 의존성 명령 연산들은, 그것들이 레지스터 파일들(38A-38B)의 갱신에 관해서 의존하는 명령 연산에 2 클록 사이클 선행하여 스케줄링될 수 있다. 다른 실시예들은, 의존성 명령 연산들을, 레지스터 파일들(38A-38B)의 완료 및 갱신에 관해서 의존하는 명령 연산에 선행 또는 후속하는 다른 수의 클록 사이클에서 스케줄링할 수 있다. 각 명령 큐(36A-36B)는 그 명령 큐내의 명령 연산들에 대한 카운트다운들을 유지하여, 상기 카운트다운의 종료시에 내부적으로 의존성 명령 연산들이 스케줄링되도록 한다. 또한, 그 명령 큐들은 상기 카운트다운의 종료시에 그외 다른 명령 큐에 표시들을 제공한다. 후속하여, 그외 다른 명령 큐는 의존성 명령 연산들을 스케줄링할 수 있다. 그외 다른 명령 큐로의 명령 연산 완료들의 이러한 지연된 전송에 의해, 레지스터 파일들(38A-38B)은 실행 코어들(40A-40B) 중 하나에 의해 제공된 결과들을 그외 다른 레지스터 파일에 전달할 수 있다. 레지스터 파일들(38A-38B) 각각은 프로세스(10)에 의해 이용되는 물리 레지스터 세트를 구현하며, 실행 코어들(40A-40B) 중의 하나에 의해 갱신된다. 이 갱신들은 다른 레지스터 파일에 전달된다. 명령 큐들(36A-36B)은 그 의존성들이 만족되었을 때(즉, 상기 큐내의 순서에 대해서 순서를 벗어나) 명령을 스케줄링할 수 있다.
명령 큐(36A)로부터 스케줄링된 명령 연산들은 레지스터 파일(38A)로부터의 소스 물리 레지스터 번호들에 따라 소스 오퍼랜드들을 판독하고, 실행을 위해서 실행 코어(40A)로 이동된다. 실행 코어(40A)는 상기 명령 연산을 수행하여 레지스터 파일(38A) 내의 목적지에 할당된 물리 레지스터를 갱신한다. 일부 명령 연산들은 목적지 레지스터들을 갖지 않으며, 실행 코어(40A)는 이러한 경우에 목적지 물리 레지스터를 갱신하지 않는다. 또한, 실행 코어(40A)는 PC 사일로 및 재전송 유닛(48)에 상기 명령 연산의 R#와 명령 연산에 관한 예외 정보(만약 있으면)를 보고한다. 명령 큐(36B), 레지스터 파일(38B) 및 실행 코어(40B)도 유사한 방식으로 동작을 행할 수 있다.
일 실시예에서, 실행 코어(40A)와 실행 코어(40B)는 대칭이다. 각 실행 코어(40)는 예를 들면, 부동 소수점 덧셈 유닛, 부동 소수점 곱셈 유닛, 2개의 정수 유닛, 분기 유닛, 적재 주소 생성 유닛, 저장 주소 생성 유닛 및 저장 데이터 유닛을 포함할 수 있다. 실행 유닛들의 다른 구성들도 가능하다.
목적지 레지스터들을 갖지 않는 명령 연산에는 저장 주소 생성, 저장 데이터 연산 및 분기 연산이 있다. 저장 주소/저장 데이터 연산들은 결과들을 적재/저장 유닛(42)에 제공한다. 적재/저장 유닛(42)은 D-캐시(44)에 인터페이스를 제공하여 메모리 데이터 연산들을 수행하도록 한다. 실행 코어들(40A-40B)은 적재 ROP들 및 저장 주소 ROP들을 실행하여, 명령들의 주소 오퍼랜드들에 근거하여, 각각 적재 및 저장 주소들을 생성한다. 특히, 적재 주소들 및 저장 주소들은 실행 코어들(40A-40B)에 의한 생성시에 D-캐시(44)에 (실행 코어들(40A-40B) 및 D-캐시(44) 간의 연결을 통하여 직접적으로) 보내질 수 있다. D-캐시(44)에 적중한 적재 주소들에 의해, 데이터는 D-캐시(44)로부터 레지스터 파일들(38)에 전송되게 된다. 다른 한편으로, 적중한 저장 주소들은 저장 큐 엔트리에 배치된다. 후속하여, 상기 저장 데이터는 (상기 저장 데이터를 레지스터 파일들(38A-38B)로부터 적재/저장 유닛(42)으로 전송하는데 이용되는) 저장 데이터 명령 연산에 의해 제공된다. 따라서, 저장은 이 실시예에서 저장 주소 명령 연산 및 저장 데이터 명령 연산을 포함할 수 있다. 다시 말하면, 상기 저장 주소 명령 연산 및 대응하는 저장 데이터 명령 연산은 동일한 명령으로부터 유래된다. 상기 저장은 명령일 수 있거나, 또는 메모리 목적지 오퍼랜드를 갖는 다른 명령의 암시적인 부분(implicit portion)일 수 있다. 상기 저장 명령의 퇴거시에, 데이터는 D-캐시(44)에 저장된다. 또한, 적재/저장 유닛(42)은 (외부 인터페이스(46)를 통하여) 후속하는 캐시 필(cache fills)을 위해서 D-캐시(44)를 미스한 적재/저장 주소들을 저장하여, 미스한 적재/저장 연산들을 다시 시도하기 위해 적재/저장 버퍼를 포함할 수 있다. 적재/저장 유닛(42)은 적재/저장 메모리 의존성들을 처리하도록 더 구성된다.
도 2는 프로세서(10)의 부분들의 일 실시예의 블록도를 도시한다. 다른 실시예들도 가능하고 고려된다. 도 2의 실시예에서, 저장 주소 생성 유닛(address generation unit: AGU)(40AA) 및 적재 AGU(40AB) 및 저장 데이터 유닛(40AC)이 도시되어 있다. 저장 AGU(40AA), 적재 AGU(40AB) 및 저장 데이터 유닛(40AC)은 실행 코어(40A)(도 1에 도시되어 있음)내에 포함되어 있다. 실행 코어(40B)는 일 실시예에서와 유사하게 구성될 수 있다. 대안적으로, 실행 코어(40B)는 도 2에 도시된 실행 유닛들 중 하나 또는 그 이상을 생략할 수도 있다. 도 2에는 실행 코어(40A)에 포함될 수 있는 저장 변환 버퍼(translation buffer: TB)(40AD) 및 적재 TB(40AE)가 추가적으로 예시되어 있다. D-캐시(44) 및 적재/저장 유닛(42)이 예시되어 있으며, 이 적재/저장 유닛(42)은 적재/저장 큐(60), 전송을 위한 논리 유닛(62) 및 저장 큐(64)를 포함한다. 마지막으로, 회전/멀티플렉서(rotate/mux) 회로(66)가 도시되어 있다. 저장 AGU(40AA)는 저장 TB(40AD)에 연결되며, 이 저장 TB(40AD)는 추가로 D-캐시(44), 적재/저장 큐(60) 및 저장 큐(64)에 연결된다. 적재 AGU(40AB)는 적재 TB(40AE)에 연결되며, 이 적재 TB(40AE)는 추가로 데이터 캐시(44), 적재/저장 큐(60) 및 전송을 위한 논리 유닛(62)에 연결된다. 저장 데이터 유닛(40AC)은 저장 큐(64)에 연결된다. PC 사일로(48) 역시 저장 큐(64)에 연결된다. 저장 큐(64), 전송을 위한 논리 유닛(62) 및 데이터 캐시(44)는 회전/멀티플렉서 회로(66)에 연결되며, 이 회전/멀티플렉서 회로(66)는 추가로 레지스터 파일들(38A-38B)에 연결된다. 데이터 캐시(44)는 적재/저장 큐(60) 및 저장 큐(64)에 연결된다. 실행 코어(40B)는 본 실시예에서 데이터 캐시(44), 적재/저장 큐(60), 전송을 위한 논리 유닛(62) 및 저장 큐(64)에도 연결된다.
저장 AGU(40AA)는 저장 주소 ROP들을 실행하여, 그 저장 주소 ROP가 유래된 저장에 대응하는 저장 주소를 생성한다. 생성되는 주소는 가상 주소(virtual address: VA)이며, 물리 주소(physical address: PA)로의 변환을 위해 저장 TB(40AD)에 이동된다. 임의의 적절한 변환 메커니즘이 이용될 수 있으며, 변환 메커니즘은 일반적으로 프로세서(10)에 의해 이용되는 명령 세트 아키텍쳐에 따라 정의된다. 예를 들면, 프로세서(10)의 일 실시예는 x86 명령 세트 아키텍쳐를 이용한다. 이러한 실시예에서, 상기 가상 주소는 최초로 세그먼테이션(segmentation) 메커니즘을 통하여 선형 주소(linear address)로 변환되는 논리 주소이다. 논리 주소와 선형 주소가 동일한 평면 주소 지정 모드(flat addressing mode)가 이용될 수 있다. 선형 주소는 페이징(paging) 메커니즘을 통하여 물리 주소로 변환된다. 저장 TB(40AD)는 변환을 신속하게 수행하기 위해서 최근에 이용된 변환들을 저장한다. 만약 소정의 주소에 대한 변환이 저장 TB(40AD)에서 발견되지 않으면, 변환 버퍼 재적재 시퀀스(translation buffer reload sequence)가 실행되어 대응하는 변환을 위해 외부 메모리에 저장된 변환 정보를 검색한다.
저장 큐(64)는 프로세서(10)내의 처리중인(즉, 발행되었으나 아직 퇴거되지 않은) 저장들에 대응하는 주소들과 데이터를 저장한다. 특히, 본 실시예에서, 저장 큐(64)는 실행되었으나 아직 퇴거되지 않은 저장들을 보유한다. 따라서, 저장 큐(64)는 저장 TB(40AD)로부터 물리 저장 주소 및 대응하는 R#를 수신하도록 구성된다. 주소를 수신하면, 저장 큐(64)는 저장을 위한 저장 큐 엔트리를 배치하여 거기에 상기 저장 주소를 둔다. 저장 큐(64)는 실행 코어(40B)내의 저장 AGU/저장 TB 구조로부터 물리 저장 주소들을 유사하게 수신할 수도 있다.
결과적으로, 저장에 대응하는 저장 데이터 ROP는 저장 데이터 유닛(40AC)에 의해 실행된다. 저장 데이터 유닛(40AC)은 상기 저장 데이터 ROP에 할당된 R#에 따라 저장 데이터를 저장 큐(64)에 전송한다. 저장 큐(64)는 상기 저장 데이터를, 대응하는 저장에 할당된 저장 큐 엔트리에 저장한다. 저장 큐(64)는 실행 유닛(40B)내의 저장 데이터 유닛으로부터 저장 데이터를 유사하게 수신할 수도 있다.
저장 AGU(40AA) 및 저장 TB(40AD)의 동작과 유사하게, 적재 AGU(40AB) 및 적재 TB(40AE)는 적재 ROP에 대응하는 적재 물리 주소를 생성하여, 그 적재 물리 주소를 전송을 위한 논리 유닛(62)에 전송한다. 전송을 위한 논리 유닛(62)은 적재에 의해 액세스된 바이트들이 저장 큐(64)에 저장되었는지 여부를 판단한다. 각각의 액세스된 바이트를 독립적으로 처리함으로써, 전송을 위한 논리 유닛(62)은 그 바이트에 대한 가장 최신의 저장을 위한 저장 큐(64)를 검색한다. 만약 갱신이 놓여지면, 바이트가 저장 큐(64)로부터 선택되어 회전/멀티플렉서 회로(66)에 제공된다. 이러한 방식으로, 각각의 액세스된 바이트는 저장 큐(64)내의 가장 최신의 갱신으로부터 제공된다(갱신이 그 바이트에 대하여 놓여지는 경우). 경우에 따라서, 각 바이트는 개별 저장으로부터 제공될 수 있거나, 또는 2개 또는 그 이상의 바이트들은 동일한 저장으로부터 제공될 수 있고, 그외 다른 바이트들은 다른 저장들로부터 제공될 수 있거나, 또는 동일한 저장은 모든 액세스된 바이트들을 제공할 수 있다. 따라서, 저장 큐(64)로부터 선택된 상기 액세스된 바이트들은 효과적으로 합체되어, 회전/멀티플렉서 회로(66)에서 적재 데이터를 제공한다.
전송을 위한 논리 유닛(62)은 또한 선택 및 회전 제어들을 회전/멀티플렉서 회로(66)에 제공한다. 만약 적재 ROP가 저장 큐(64)내의 저장으로부터의 전송 데이터를 수신한 것을 전송을 위한 논리 유닛(62)이 검출하면, 전송을 위한 논리 유닛(62)은 회전/멀티플렉서 회로(66)에 저장 큐(64)로부터 제공된 데이터를 선택하도록 신호를 보낸다. 또한, 저장 큐(64)로부터 제공된 데이터는 메모리 순서로 이루어진다(즉, 바이트들은 대응하는 저장들의 주소에 따라 정렬된 바이트 장소들에서 저장 큐(64)에 저장된다). 상기 데이터는 레지스터 파일들(38A-38B)내에서의 저장을 위해서 적절하게 정렬되도록 회전될 수 있다. 전송을 위한 논리 유닛(62) 역시 이러한 시그널링을 제공한다. 마지막으로, 만약 적재 ROP가 저장 큐(64)로부터의 전송 데이터를 수신하지 않은 것을 전송을 위한 논리 유닛(62)이 검출하면, 전송을 위한 논리 유닛(62)은 회전/멀티플렉서 회로(66)에 데이터 캐시(44)의 출력을 선택하도록 신호를 보낸다.
적재 ROP는 상기 적재 ROP에 의해 액세스된 저장 데이터를 제공하는 저장 데이터 ROP에 선행하여 실행될 수 있음에 주목할 필요가 있다. 이러한 경우, 저장 큐(64)는 액세스된 바이트들 대신에 저장 데이터 ROP의 R#를 제공할 수 있다. 상기 적재 ROP는 상기 저장 데이터 ROP의 스케줄링에 후속하는 실행을 위해서 재스케줄링될 수 있다. 적재/저장 유닛(42)은 저장 데이터가 적재에의 전송에 이용가능하지 않을 때에 명령 큐들(36A-36B)에 적재(뿐만 아니라 임의의 후속하여 스케줄링된 ROP들)의 재스케줄링을 허용하도록 신호를 보낸다. 또한, 맵 유닛(30)은 저장 데이터가 이용가능하지 않은 적재 적중 저장의 경우들을 예측하도록 구성된다. 저장 데이터 ROP의 R#가 PC 사일로(48)에 제공될 수 있는 것에 의해, (저장 데이터가 이용가능하지 않은) 후속하는 적재 적중 저장 시나리오들의 예측에 이용하기 위해서 맵 유닛(30)에 저장 명령에 관한 정보를 제공할 수 있다.
상술된 바에 따라 저장 큐(64)에 적재 주소 및 저장 주소를 제공하는 것에 추가하여, 적재 주소 및 저장 주소는 데이터 캐시(44)내의 적중이 검출되었는지를 판단하기 위해서 데이터 캐시(44)에 제공된다. 적재 ROP들에 대해서, 데이터 캐시(44)내의 적중이 검출되면, 데이터는 데이터 캐시(44)에서부터 레지스터 파일들(38A-38B)에 전송된다. 적재 ROP가 데이터 캐시(44)를 미스하면, 상기 적재 ROP는 후속하는 재시도를 위해서(그리고 상기 적재 ROP가 적재/저장 큐(60)의 헤드에 도달하고, w/o가 보다 빠른 메모리 연산으로부터의 캐시 필을 통하여 d-캐시(44) 내의 적중이 되는 것이 더이상 추론적이지 않다면, 최종적으로는 외부 인터페이스 유닛(46)에 전송하여 메모리로부터의 미스한 캐시 라인을 인출하기 위해서) 적재/저장 큐(60)에 저장된다. 데이터 캐시(44)에 재시도되면, 적재 ROP는 또한 전송을 위한 논리 유닛(62)에 옮겨져서, 저장 큐(64)내의 저장 데이터가 상기 적재 ROP에 대해서 전송될 것인지를 판단한다. (실행 코어(40A) 또는 실행 코어(40B)의 어느쪽으로부터) 데이터 캐시(44)에 시도된 각각의 적재 ROP에 대한 적중/미스 표시가 적재/저장 큐(60)에 옮겨져서, 그 적재 ROP가 거기에 저장될 것인지를 판단한다. 저장 주소 ROP들에 대해서, 상기 적중/미스 표시는 저장이 (적재 ROP들과 유사하게) 적재/저장 큐(60)내의 엔트리에 배치되는지 여부를 판단한다. 그러나, 저장 주소 ROP들은 그 적중/미스 상태에 관계없이 저장 큐(64)에 배치된다. 임의의 수의 엔트리들이 이용될 수 있지만은, 적재/저장 큐(60)는 128개의 엔트리들을 포함할 수 있으며, 저장 큐(64)는 일 실시예에서 64개의 엔트리들을 포함할 수 있다는 것에 주목할 필요가 있다.
PC 사일로(48)는 저장 큐(64)에 퇴거 제어 신호(retirement control signal)들을 제공한다. 상술된 바와 같이, 본 실시예에서, PC 사일로(48)는 ROP들의 라인을 동시에 퇴거한다. PC 사일로(48)는 퇴거된 ROP들의 R#를 저장 큐(64)에 제공하여, 저장 큐(64)가 데이터 캐시(44)에 커미트하기 위한 저장 데이터를 선택한다. 만약 특정 저장이 즉시 커미트될 수 없다면(즉, 만약 상기 저장이 데이터 캐시(44)내의 미스이거나 또는 하나 이상의 저장이 동시에 퇴거되면), 저장 큐(64)는 그 특정 저장의 퇴거를 기록하고 후속하여 저장 데이터를 커미트할 수 있다.
도 2(그리고 이하의 그외 다른 도면들)에 도시된 실시예는 물리 주소들을 이용하여 적재 전송에 대한 저장을 수행하지만은, 가상 주소, 논리 주소 및 선형 주소가 이용되는 다른 실시예들이 고려된다는 것에 주목할 필요가 있다. 비록 상기 실시예에서 실행 코어(40B)가 실행 코어(40A)와 동일한 적재/저장 실행 자원들을 갖는 것(즉, 실행 코어(40A)와 실행 코어(40B)가 실행 자원들에 대하여 대칭인 것)으로 설명되어 있지만은, 다른 실시예들은 필요에 따라 비대칭 실행 자원들을 이용할 수 있다는 것에 더 주목할 필요가 있다.
도 3은 저장 큐(64)와 전송을 위한 논리 유닛(62)의 일 실시예를 예시하는 블록도를 도시한다. 다른 실시예들이 가능하고 고려된다. 도 3에 예시된 바와 같이, 저장 큐(64)는 저장 주소 큐(64A), 저장 비트 벡터 큐(64B) 및 저장 데이터 큐(64C)를 포함한다. 또한, 도 3에는 한 쌍의 비트 벡터 생성기들(70A-70B)이 도시된다. 도 3은 도면의 간략화를 위해서 1개의 적재 주소에 대한 데이터의 전송을 예시한다. 도 2에 도시된 바와 같이, 저장 큐(64)는 최대 3개의 적재 ROP들(실행 코어(40A-40B)로부터 각각 1개씩 및 적재/저장 큐(60)로부터 재시도되는 적재들을 위해서 1개)에 대한 적재 데이터를 공급하도록 구성될 수 있다. 다른 적재 ROP들을 위해서 유사한 하드웨어가 이용될 수 있다. 이러한 논의에 대해서, 적재 정보는 적재 TB(40AE)로부터 수신되는 것으로서 설명되고, 저장 주소 정보는 저장 TB(40AD)로부터 수신되는 것으로서 설명될 것이다. 저장 데이터 정보는 저장 데이터 유닛(40AC)으로부터 수신되는 것으로서 설명될 것이다. 그러나, 도 2에 도시된 것을 포함한 각각의 정보에 대한 다른 소스들이 고려된다. 또한, 전송의 목적을 위해서 가상 주소가 이용되는 실시예들에서 주소는 AGU들로부터 직접 수신될 수 있다.
비트 벡터 생성기(70A)는 적재 TB(40AE)로부터 적재 주소의 소정 개수의 최하위 비트들과 적재의 크기의 표시(즉, 적재 주소에서 시작하는 액세스되는 바이트들의 수)를 수신하도록 연결되고, 추가로 전송을 위한 논리 유닛(62)에 연결된다. 이와 유사하게, 비트 벡터 생성기(70B)는 저장 TB(40AD)로부터 저장 주소의 소정 개수의 최하위 비트들과 저장의 크기를 수신하도록 연결되고, 저장 비트 벡터 큐(64B)에 연결된다. 적재들이 단지 1개의 크기뿐인 실시예들에서, 크기 정보는 생략될 수 있다는 것에 주목할 필요가 있다. 저장 비트 벡터 큐(60B) 및 저장 주소 큐(64A)는 전송을 위한 논리 유닛(62)에 연결되고, 이 전송을 위한 논리 유닛(62)은 멀티플렉서 세트(72A-72H) 및 회전/멀티플렉서 회로(66)에 추가로 연결된다. 멀티플렉서들(72A-72H)은 회전/멀티플렉서 회로(66)에 연결되고, 저장 데이터 큐(64C)에 연결된다. 저장 데이터 큐(64C)는 저장 데이터 유닛(70AC)으로부터 저장 데이터 및 대응하는 R#을 수신하도록 연결되고, 뿐만 아니라 퇴거 R#을 수신하도록 PC 사일로(48)에 연결된다. 또한, 저장 데이터 큐(64C)는 저장 TB(40AD)로부터 저장 주소 ROP에 대응하는 R#를 수신하도록 연결된다. 저장 주소 큐(64A)는 저장 TB(40AD)로부터 저장 주소를 수신하고, 적재 TB(40AE)로부터 적재 주소를 수신하도록 연결된다. 특히, 저장 주소 큐(64A)는 비트 벡터 생성기(70A)에 의해 수신된 최하위 비트들을 제외한 주소들을 수신하도록 결합된다.
비트 벡터 생성기들(70A 및 70B)에 의해 수신된 소정 개수의 최하위 비트들은 액세스되거나 갱신된 바이트들이 존재할 수 있는 바이트의 범위를 정의한다. 다시 말하면, 상기 최하위 비트들을 제외한 주소는 상기 바이트의 범위내에 있는 바이트들의 세트에 대해서 동일하다. 비트 벡터 생성기들(70A-70B)은 그 범위내에 있는 각각의 바이트에 대한 비트를 갖는 비트 벡터들을 생성한다. 비트는, 바이트가 대응하는 적재 또는 저장에 응답하여 액세스/갱신된 경우에는 세트되고, 바이트가 대응하는 적재 또는 저장에 응답하여 액세스/갱신되지 않은 경우에는 클리어된다. 비트 벡터 생성기(70B)에 의해 생성된 저장 비트 벡터들은 저장 비트 벡터 큐(64B)에 저장된다. 따라서, 저장 비트 벡터들은 저장 큐(64)에 제공되는 각 저장 주소에 대하여 생성된다. 비트 벡터 생성기(70A)에 의해 생성된 적재 비트 벡터들은 전송을 위한 논리 유닛(62)에 제공된다.
(적재 비트 벡터를 형성하는데 이용된 비트들을 제외한) 적재 주소의 나머지 비트들은 저장 주소 큐(64A)에 제공된다. 적재 주소는 저장 주소 큐(64A)에 저장된 저장 주소들과 비교된다. 저장 주소 큐(64A)는 예를 들면, 저장 주소 큐(64A)에 저장된 저장 주소들에 대한 적재 주소들을 위한 내용 주소화 메모리(content addressable memory: CAM)일 수 있다. 대안적인 구성들 역시 가능하다. 제공된 적재 주소에 정합하는 저장 주소를 포함하는 저장 주소 큐(64A)내의 각 엔트리는 전송을 위한 논리 유닛(62)에 "적중" 신호를 어스트(assert)한다.
적재 비트 벡터 및 저장 주소 큐(64A)로부터의 적중 신호들에 추가하여, 전송을 위한 논리 유닛(62)은 저장 큐(64)내의 저장들에 대응하는 저장 비트 벡터들을 수신한다. 전송을 위한 논리 유닛(62)은 각 바이트를 독립적으로 처리함으로써, 적재 비트 벡터내의 대응하는 비트를 검사하여 바이트가 액세스되었는지를 판단하고, 각 저장 비트 벡터내의 대응하는 비트를 검사하여 바이트가 대응하는 저장에 의해 갱신되었는지를 판단한다. (저장 비트 벡터내의 대응하는 비트 및 저장 주소 큐(64A)로부터의 대응하는 어서트된 적중 신호를 통하여) 바이트가 갱신되었음을 표시하는 각 저장 큐 엔트리는, 전송을 위한 논리 유닛(62)내의 픽 원 회로(pick one circuit)에 참여하는데, 이 픽 원 회로는 상기 저장 큐내의 저장들의 프로그램 순서에 따라 바이트에 대한 가장 최신의 갱신을 선택한다. 선택된 바이트는 전송을 위한 논리 유닛(62)에 의해 멀티플렉서(72)에 어서트된 선택 신호들을 통하여 저장 데이터 큐(64C)로부터 검색된다. 각 멀티플렉서(72A-72H)는 저장 큐(64)내의 다른 바이트에 대응한다. 예를 들면, 멀티플렉서(72A)는 전송을 위한 논리 유닛(62)의 제어하에서 저장 큐(64)내의 각 엔트리의 바이트 0 위치로부터 적재 데이터의 바이트 0을 선택한다. 이와 유사하게, 멀티플렉서(72H)는 전송을 위한 논리 유닛(62)의 제어하에서 저장 큐(64)내의 각 엔트리의 바이트 7 위치로부터 적재 데이터의 바이트 7을 선택한다. 다른 바이트 위치들은 다른 멀티플렉서(도 3에서 간단함을 위하여 도시되지 않음)에 의해 선택된다. 또한, 전송을 위한 논리 유닛(62)은 적재 데이터 바이트들이 저장 큐(64)로부터 제공되었는지를 판단하여, 회전/멀티플렉서 회로(66)에 선택 제어들을 제공하여 회전/멀티플렉서 회로(66)에의 입력들로서 멀티플렉서(72)로부터 제공된 데이터 바이트들을 선택한다.
회전 제어들 역시 전송을 위한 논리 유닛(62)에 의해 제공된다. 데이터 바이트들은 저장 큐(64C)에 메모리의 순서로(즉, 본 실시예의 8 바이트 데이터 큐 엔트리들에 대한 8 바이트 경계와 같은, 큐 엔트리의 크기인 경계에 대해 정렬된 메모리 블록내의 메모리 장소들에 대응하는 큐 엔트리내의 바이트 장소들에) 저장된다. 메모리에 대한 적재 및 저장은 메모리 장소들에 대해서 임의의 정렬을 가질 수 있지만은, 레지스터내의 바이트 장소들은 고정된다. 따라서, 멀티플렉서(72)에 의해 제공되는 데이터 바이트들의 회전은 바이트들을 레지스터 파일에 대해 정렬되도록 수행될 수 있다.
일반적으로, 저장 큐(64)내의 엔트리는 저장에 대응하는 저장 주소 ROP의 실행시에 배치된다. 상기 엔트리는 저장 주소 큐(64A)내의 엔트리, 저장 비트 벡터 큐(64B)내의 엔트리 및 저장 데이터 큐(64C)내의 엔트리를 포함한다. 예를 들면, 도 3에 예시된 엔트리들(76A, 76B 및 76C)은 저장 큐(64)내의 저장 큐 엔트리를 포함할 수 있다. (비트 벡터를 생성하는데 이용된 최하위 비트들을 제외한) 저장 주소는 저장 주소 큐(64A)에 저장되고, 대응하는 저장 비트 벡터는 저장 TB(40AD)로부터의 저장 주소의 수신시에 저장 비트 벡터 큐(64B)에 저장된다. 또한, 대응하는 저장 데이터 ROP에 대응하는 R#는 저장 TB(40AD)로부터의 저장 주소의 수신시에 저장 데이터 큐(64C)에 저장된다. 본 실시예에서, 저장 데이터 ROP는 ROP들의 동일 라인내에서 저장 주소 ROP에 이어진다. 따라서, 대응하는 R#는 1 만큼 증분된 저장 주소 ROP의 R#이다.
후속하여, 대응하는 저장 데이터 ROP는 저장 데이터 유닛(40AC)에 의해 실행되고, R# 및 저장 데이터는 저장 데이터 큐(64C)에 제공된다. 저장 데이터 유닛(40AC)에 의해 제공된 R#와 저장 데이터 큐(64C)에 저장된 R#를 비교하여, 그 저장 데이터가 저장되어야 할 엔트리를 결정한다. 저장 데이터 큐(64C)는 예를 들면, 일 실시예에서 저장 데이터 연산의 R#에 대한 CAM으로서 구현될 수 있다. 대안적인 구성들 역시 가능하다. R#에 대한 정합이 검출되는 엔트리가 데이터를 기록한다. 저장 데이터 큐(64C)는 데이터가 유효하다는 것을 나타내는 유효 비트를 추가적으로 포함할 수 있다. CAM 정합은 유효 비트를 세트하는데 이용될 수 있다. 만약 데이터가 유효하지 않으면, 저장 데이터 큐(64C)는 멀티플렉서들(72A-72H)에의 입력으로서 그 데이터 대신에 저장 데이터 연산의 R#을 제공할 수 있다. 대안적으로, 저장 데이터 큐(64C)내의 각 바이트 장소에 R#를 저장하여, 데이터가 아직 유효하지 않을 경우에 R#을 자동적으로 제공한다.
본 실시예에서, 비트 벡터들은 16비트를 포함하고, 저장 데이터 큐는 엔트리당 최대 8바이트의 저장 데이터를 저장한다. 따라서, 본 실시예는 저장당 최대 8 바이트의 저장 데이터를 지원한다. 그러나, 정렬되지 않은 8바이트 값의 명백한 지원을 가능하게 하도록 16비트의 비트 벡터가 지원된다. 다시 말하면, 16비트를 갖는 비트 벡터에 의해, 임의의 정렬되지 않은 8 바이트량을 0 및 1의 마스크로서 나타낼 수 있다. 비트 벡터가 예를 들어, 8비트이면, 전체 비트 벡터는 저장의 정렬에 관계없이(그리고 이에 따라 적재에 의해 액세스되는 바이트들이 저장에 의해 갱신되었는지에 관계없이) 8바이트 저장에 대해서 1들이 될 수 있다. 일반적으로, N이 단일 저장에 의해 갱신가능한 바이트들의 최대수일 때, 2N 비트의 비트 벡터를 이용하는 것이 바람직하다.
16비트를 갖는 비트 벡터들이 본 실시예에서 구현되고, 8 바이트 적재들 및 저장들이 본 실시예에서 지원되는 최대의 적재들 및 저장들이기 때문에, 상기 비트 벡터내의 어떤 비트들은 상호 배타적임에 주목할 필요가 있다. 예를 들면, 비트 벡터에 의해 나타나는 범위내의 바이트 0에 대응하는 비트와 그 범위내의 바이트 8에 대응하는 비트와는 상호 배타적이다. 만약 바이트 0이 액세스/갱신된 것으로 나타나면, 바이트 8은 액세스/갱신된 것으로 나타날 수 없다. 이와 유사하게, 바이트 1과 바이트 9는 상호 배타적이다. 또한, 비트 벡터내의 바이트 0 또는 바이트 8 중 어느 쪽에 대응하는 바이트는 저장 데이터 큐(64C)내의 바이트 0 위치에 저장된다. 따라서, 픽 논리(pick logic)는 비트 벡터 위치 0 및 비트 벡터 위치 8을 검사한 결과들을 논리적으로 OR 연산하여, 저장 데이터 큐(64C)의 바이트 0에 대한 선택 제어들을 생성한다. 그러나, 상기 결과들을 OR 연산하기에 앞서, 상기 비트들을 독립적으로 검사하여, 대응하는 바이트가 적재에 의해 액세스되고 대응하는 저장에 의해 갱신되는지를 판단한다.
PC 사일로(48)는 퇴거된 ROP들의 라인을 나타내는 퇴거 R#을 제공한다. 저장 데이터 큐(64C)는 상기 퇴거 R#을, 저장 데이터 큐(64C)에 저장된 R#들과 비교한다. 저장 데이터 큐(64C)는 일 실시예에 따라 상기 퇴거 R#에 대하여 CAM으로서 동작할 수 있다. 대안적인 구성들이 가능하고 고려된다. 상기 퇴거 R# 상의 CAM은 PC 사일로(48)에 의해 제공되는 R#를 가지는 라인을 식별하는 R#의 부분만을 비교할 수도 있다. 임의의 검출된 정합들은 그 큐 엔트리내의 저장이 퇴거되어, D-캐시(44)에 커미트된다는 것을 나타낸다. 저장 큐(64)는 예를 들어, 그 저장이 d-캐시(44)에 커미트될 수 있는지의 여부를 나타내는 각 엔트리 내의 비트를 포함할 수 있다. 그 비트는 퇴거 R#의 비교에 따라 세트될 수 있다. 저장이 퇴거된 것으로 나타나면, 저장은 d-캐시(44)로의 전송을 위해 저장 큐(64)로부터 선택될 수 있다. d-캐시(44)를 갱신하면, 저장은 저장 큐(64)로부터 삭제될 수 있다.
이 상세한 설명 및 도 3에는 어떤 비트 범위들 및 그외 다른 특징들의 크기들이 설명되지만, 이러한 범위들 및 크기들은 단지 예시적인 것이며, 설계 선택의 문제에 의해 변경될 수 있다는 것에 주목할 필요가 있다. 비트 벡터 생성기들(70A-70B)을 이용하는 것에 대한 대안으로서, 주소 생성 유닛들을 구성하여 대응하는 비트 벡터들을 생성할 수 있다는 것에도 또한 주목할 필요가 있다. 상술된 CAM 구조들에 대한 하나의 대안은 비교를 수행하기 위해서 거기에 연결되는 개별 비교기 회로들을 갖는 레지스터들내에서 큐 엔트리들을 실시할 수도 있다는 것에도 또한 주목할 필요가 있다. 다른 대안들도 역시 가능하다.
도 4는 도 3에 도시된 개별 멀티플렉서 회로들(72A-72H)을 제거할 수 있는 저장 데이터 큐(64C)의 실시예를 도시한다. 도 3에 도시된 것을 포함하는 다른 대안적인 구성들이 고려된다. 도 4에 도시된 바와 같이, 저장 데이터 큐(64C)는 멀티플렉서들(72A-72H) 각각의 출력들로서 도 3에 예시된 일련의 적재 바이트 버스들에 연결된다. 각 저장 큐 엔트리의 바이트 0은 적재, 바이트 0 버스에 연결된다. 이와 유사하게, 각 저장 큐 엔트리의 바이트 1은 적재, 바이트 1 버스에 연결되고, 각 저장 큐 엔트리의 다른 바이트들도 이와 같이 연결된다. 지금까지 멀티플렉서들(72A-72H)에 제공된 선택 신호들은 인에이블(enable) 신호들로서 큐 엔트리들 각각에 제공된다. 큐 엔트리내의 각 바이트에 대해서 하나의 인에이블 신호가 제공된다. 만약 그 바이트에 대한 인에이블 신호가 어서트되면, 큐 엔트리는 거기에 연결되는 버스상의 바이트를 구동한다. 만약 인에이블 신호가 디어서트(deassert)되면, 큐 엔트리는 거기에 연결되는 버스상의 바이트를 구동하지 않는다. 이러한 구성을 전형적으로 "와이어드 OR(wired OR)" 구성이라 칭한다.
도 5는 전송을 위한 논리 유닛(62)의 일 실시예의 일부분의 블록도를 도시한다. 다른 실시예들도 가능하고 고려된다. 도 5의 실시예에서, 전송을 위한 논리 유닛(62)은 다수의 픽 원 회로들(적재에 전송될 수 있는 각 바이트에 대해서 1개의 픽 원 회로, 예를 들어 하나의 특정 실시예에서 8개의 픽 원 회로들)을 포함한다. 예를 들어, 도 5에 픽 원 회로들(80A-80B)이 도시되어 있다. 또한, 전송을 위한 논리 유닛(62)에 조합 논리가 제공되어, 비트 벡터 생성기(70A) 및 저장 비트 벡터 큐(64B)로부터의 비트 벡터들 뿐만 아니라 저장 주소 큐(64A)에 대한 적중 신호들을 처리한다. 예를 들어, 조합 논리(82A)는 저장 큐 엔트리 0에 대한 바이트 0 및 바이트 8을 처리하기 위해서 제공된다. 이와 유사하게, 조합 논리(82B)는 저장 큐 엔트리 1에 대한 바이트 0 및 바이트 8을 처리하고, 조합 논리(82C 및 82D)는 각각 저장 큐 엔트리들 0 및 1에 대한 바이트 1 및 바이트 9를 처리한다. 다른 조합 논리(도시되지 않음)는 다른 바이트들 및/또는 다른 저장 큐 엔트리들을 처리한다.
픽 원 회로(80A)는 저장 데이터 큐(64C)로부터 바이트 0을 선택한다. 픽 원 회로(80B)는 저장 데이터 큐(64C)로부터 바이트 1을 선택한다. 다른 픽 원 회로들(도 5에 도시되지 않음)을 이용하여, 바이트 2 내지 바이트 7을 선택한다. 픽 원 회로들(80A 및 80B)은 각 저장 큐 엔트리에 대하여 그 엔트리가 적재에 의해 액세스되는 특정의 바이트를 갱신하는 저장을 저장하고 있는지의 여부를 판단하는 조합 논리로부터 입력 신호들을 수신하도록 각각 연결된다. 예를 들어, 조합 논리(82A)는 저장 큐 엔트리 0내의 저장이 비트 벡터에 의해 정의되는 바이트의 범위내에서 바이트 0 또는 바이트 8(각각 SBV0(0) 및 SBV0(8))을 갱신하여, 대응하는 바이트 0 또는 바이트 8이 적재(각각 LBV(0) 및 LBV(8))에 의해 액세스되는지를 판단한다. 그 결과 얻을 수 있는 판단들은 함께 논리적으로 OR 되어(액세스 바이트 0 및 바이트 8이 본 실시예에서 상호 배타적이기 때문), 엔트리 0(ST0 적중)에 대한 저장 주소 큐(64A)에 대한 적중 신호와 조합된다. 만약 바이트가 적재에 의해 액세스되어, (대응하는 비트 벡터들에 의해 나타나는 바와 같이) 저장에 의해 갱신되어, (비트 벡터들의 생성에 이용된 비트들을 제외한) 적재 및 저장 주소들이 정합하면, 조합 논리는 픽 원 회로들에 신호를 어서트하고, 저장 큐 엔트리는 픽 원에 참여한다. 그렇지 않으면, 상기 신호는 픽 원 논리 회로에 디어서트되고, 저장 큐 엔트리는 픽 원에 참여하지 않는다.
유사하게, 조합 논리(82B)는 저장 큐 엔트리 1(도 5의 SBV1)로부터의 저장 큐 비트 벡터와, 적재 비트 벡터와, 저장 큐 엔트리 1(도 5의 ST1 적중)에 대한 저장 주소 큐 적중 신호를 분석하여 신호를 어서트/디어서트한다. 조합 논리(82C 및 82D)는 바이트 1 및 바이트 9에 대한 저장 및 적재 비트 벡터(조합 논리(82C)에 대해서 저장 큐 엔트리 0 및 조합 논리(82D)에 대해서 저장 큐 엔트리 1)로부터의 비트들을 검사한다.
상기 픽 원 회로들은 서로 독립적이고, 상기 픽 원 회로가 할당받은 바이트의 가장 최신의 갱신을 선택한다. 예를 들어, 픽 원 회로(80A)는 바이트 0 및 바이트 8에 대한 비트 벡터 표시 및 저장 주소 큐 적중 신호에 응답하여 저장 데이터 큐(64C)로부터 바이트 0을 선택한다. 이와 독립적으로, 픽 원 회로(80B)는 저장 데이터 큐(64C)로부터 바이트 1을 선택한다. 따라서, 픽 원 회로(80A)는 멀티플렉서(72A)(도 3)에 선택 신호들을 제공하거나, 또는 각 큐 엔트리(도 4)의 바이트 0에 대한 인에이블 신호를 제공한다. 이와 유사하게, 픽 원 회로(80B)는 적재 데이터(도 3)의 바이트 1을 제공하도록 연결된 멀티플렉서에 선택 신호들을 제공하거나, 또는 각 큐 엔트리(도 4)의 바이트 1에 대한 인에이블 신호들을 제공할 수 있다. 일 실시예에서, 저장 큐(64)는 큐내의 가장 오래된 엔트리를 나타내는 헤드 포인터와 가장 최근의 엔트리를 나타내는 테일 포인터(tail pointer)를 갖는 원형 선입 선출(first-in, first-out: FIFO) 버퍼로서 구현된다. 엔트리들이 삭제될 때에 엔트리를 시프트하는 대신에, 상기 헤드 포인터 및 테일 포인터를 증가 및 감소시킴으로써 큐에 저장들을 부가 및 삭제한다. 픽 원 회로들(80A-80B)은 이러한 실시예를 위해 상기 헤드 포인터 및 테일 포인터를 수신하여, 조합 논리(82A-82D)와 같은 조합 논리로부터의 입력 신호들로부터, 상기 테일 포인터에 의해 나타나는 엔트리에 대응하는 신호로부터 상기 헤드 포인터에 의해 나타나는 엔트리에 대응하는 신호까지를 스캔(scan)한다. 이러한 실시예에 대해서, 저장은 저장 큐(64)에 프로그램 순서대로 할당될 수 있다. 대안으로서, 필요한 경우, R#들을 이용하여 상기 저장 큐내의 저장들의 순서를 판단한다.
비록 도 5에는, 저장 큐로부터의 바이트들의 선택에 관계하는 저장 큐 엔트리들의 논리적 결정을 예시하기 위해서 조합 논리(82A-82D)가 도시되어 있지만은, 임의의 적절한 논리가 이용될 수 있다는 것에 주목할 필요가 있다. 필요에 따라, (어서트/디어서트된) 입력 신호들의 의미(sense)들은 대안적인 조합 논리를 제공하기 위해서 변경되어, 논리적으로 등가인 논리 게이트 세트가 또한 이용될 수 있다. 추가 논리 블록(도 5에 도시되지 않음)을 이용하여, 회전/멀티플렉서 회로(66)에 대한 선택 및 회전 제어들을 생성한다는 것에도 또한 주목할 필요가 있다. 상기 선택 제어들은 전송을 위한 저장 큐(64)로부터의 바이트들의 선택에 근거할 수 있으며, 상기 회전 제어들은 (메모리내 및 그에 따른 저장 데이터 큐(64C)내의 바이트들의 정렬을 정의하는) 최하위 적재 주소 비트들과, (목적지 레지스터에 몇개의 바이트가 전송되는지를 정의하는) 적재의 크기에 근거할 수 있다.
도 6은 저장 큐 엔트리들의 예시적인 세트로부터의 전송의 일 실시예를 도시한다. 도 6에는 저장 주소 큐(64A), 저장 비트 벡터 큐(64B) 및 저장 데이터 큐(64C)가 도시되어 있다. 실시예를 단순화하기 위해, 5개의 엔트리들이 도시된다. 그러나, 상기 저장 큐는 임의의 적절한 수의 엔트리들을 포함할 수 있다. 예를 들면, 저장 큐(64)는 일 실시예에서 64개의 엔트리들을 포함할 수 있다. 저장 주소 큐(64A)는 엔트리들(90A-90E)을 포함한다. 저장 비트 벡터 큐(64B)는 대응하는 엔트리들(92A-92E)을 포함하고, 저장 데이터 큐(64C)는 대응하는 엔트리들(94A-94E)을 포함한다. 다시 말하면, 엔트리들(90A, 92A 및 94A)은 저장 큐(64)내의 제 1 엔트리를 포함한다. 이와 유사하게, 엔트리들(90B, 92B 및 94B)은 저장 큐(64)내의 제 2 엔트리를 포함한다. 상기 실시예에서, 상기 저장 큐 헤드 포인터는 엔트리들(90A, 92A 및 94A)을 포함하는 엔트리가 상기 큐내의 가장 오래된 엔트리인 것을 나타내고, 상기 저장 큐 테일 포인터는 엔트리들(90E, 92E 및 94E)을 포함하는 엔트리가 가장 최신의 엔트리인 것을 나타낸다. 남은 엔트리들은 가장 오래된 엔트리와 가장 최신의 엔트리의 사이에 존재한다.
저장 주소 큐 엔트리들(90A, 90B, 90D 및 90E)은 각각 특정 주소 A1을 저장한다. 저장 주소 큐 엔트리(90C)는 다른 주소 A2를 저장한다. 각 저장에 대응하는 비트 벡터들이 저장 비트 벡터 큐 엔트리들(92A-92E)에 나타나고, 저장 데이터는 저장 데이터 큐 엔트리들(94A-94E)에 나타난다.
상기 실시예에서, 적재는 도 6에 도시된 바와 같이 주소 A1 및 적재 비트 벡터를 구비하여 실행된다. 적재 비트 벡터에 따라, 4개의 바이트들(바이트 11, 10, 9 및 8)이 액세스된다. 저장 비트 벡터 큐(64B)내의 비트 벡터들을 검사하여, 액세스된 바이트들에의 하기의 갱신이 나타난다. 즉, 엔트리들(92B 및 92E)내의 비트 벡터들은 바이트 11에의 갱신을 나타내고; 엔트리들(92B 및 92D)내의 비트 벡터들은 바이트 10에의 갱신을 나타내고; 엔트리들(92B 및 92C)내의 비트 벡터는 바이트 9 및 8에의 갱신을 나타낸다. 그러나, (비트 벡터 큐 엔트리(92C)에 대응하는) 저장 주소 큐 엔트리(90C)내의 주소는 주소 A2를 저장한다. 적재는 주소 A1에 액세스하기 때문에, 엔트리들(90C, 92C 및 94C)내의 저장은 전송 고려사항으로부터 제거된다. 따라서, 픽 원 회로들은 (92B 및 92E)에 대응하는 엔트리들로부터의 바이트 11과; 엔트리들(92B 및 92D)로부터의 바이트 10과; 엔트리(92B)로부터의 바이트 9 및 8에의 가장 최신의 갱신을 스캔한다.
전술한 바와 같이, 테일 포인터는 가장 최신의 엔트리가 (90E)에 대응하는 엔트리임을 나타내고, 헤드 포인터는 가장 오래된 엔트리가 (90A)에 대응하는 엔트리임을 나타낸다. 따라서, 바이트 11은 엔트리(94E)로부터 선택되고; 바이트 10은 엔트리(94D)로부터 선택되고, 바이트 9 및 8은 엔트리(92B)로부터 선택된다. 바이트 11은 저장 데이터 큐내의 바이트 위치 3이고, 유사하게 바이트 10은 바이트 위치 2이고, 바이트 9는 바이트 위치 1이고, 바이트 8은 바이트 위치 0이다. 따라서, 적재에 대해서 전송된 데이터는 (16진법으로) 76 DD DE F0이다. 값 76은 엔트리(94E)의 바이트 위치 3으로부터 얻어진다. 값 DD는 엔트리(94D)의 바이트 위치 2로부터 얻어진다. 값 DE와 값 F0은 엔트리(94B)의 바이트 위치 1과 바이트 위치 0으로부터 (각각) 얻어진다. 이들 값들은 상기 예에서 저장 데이터 큐(64C)내의 굵은 글자로 나타난다.
이 실시예가 나타내는 바와 같이, 적재에 의해 액세스된 바이트들은 비록 그 바이트들이 2개 또는 그 이상의 서로다른 저장들로부터 얻어지더라도, 어셈블될 수 있다. 장점으로서, 적재 데이터는 임의의 수의 저장으로부터 정확하게 전송될 수 있다. 예를 들면, 전송은 0 저장들(저장 큐(64)가 비어있거나, 특정의 저장에 대해서 저장 큐(64)에서 어떠한 적중도 검출되지 않는 경우), 1 저장(그 저장이 적재에 의해 액세스되는 각 바이트를 갱신하기 위해서 가장 최신인 경우) 또는 N 저장들(여기서, N은 적재에 의해 액세스되는 바이트의 수임)로부터 일어날 수 있다.
도 7은 버스 브리지(202)를 통하여 다양한 시스템 구성요소들과 연결되는 프로세서(10)를 포함한 컴퓨터 시스템(200)의 일 실시예의 블록도를 도시한다. 다른 실시예들도 가능하고 고려된다. 도시된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통하여 버스 브리지(202)에 연결되고, 그래픽 콘트롤러(208)는 AGP 버스(210)를 통하여 버스 브리지(202)에 연결된다. 마지막으로, 복수의 PCI 디바이스들(212A-212B)이 PCI 버스(214)를 통하여 버스 브리지(202)에 연결된다. EISA/ISA 버스(220)를 통하여 하나 이상의 EISA 또는 ISA 디바이스(218)에 전기적 인터페이스를 제공하기 위해서 이차적인 버스 브리지(216)가 더 제공된다. 프로세서(10)는 외부 인터페이스(52)를 통하여 버스 브리지(202)에 연결된다.
버스 브리지(202)는 프로세서(10), 주 메모리(204), 그래픽 콘트롤러(208), 그리고 PCI 버스(214)에 부착된 디바이스들과의 사이에 인터페이스를 제공한다. 버스 브리지(202)에 연결된 디바이스들 중 하나로부터 동작을 받으면, 버스 브리지(202)는 그 동작의 타겟을 식별한다(예를 들어, 특정 디바이스 또는 PCI 버스(214)의 경우, 그 타겟은 PCI 버스(214)상에 있다). 버스 브리지(202)는 그 동작을 타겟 디바이스에 전달한다. 일반적으로, 버스 브리지(202)는 소스 디바이스 또는 버스에 의해 이용되는 프로토콜로부터 상기 타겟 디바이스 또는 버스에 의해 이용되는 프로토콜로 동작을 변환한다.
ISA/EISA 버스에 PCI 버스(214)에 대한 인터페이스를 제공하는 것에 추가하여, 이차적인 버스 브리지(216)는 필요에 따라 부가적인 기능을 더 편성할 수 있다. 이차적인 버스 브리지(216)와 일체화거나 또는 그것과 외부에 있는 입력/출력 콘트롤러(도시되지 않음)를 컴퓨터 시스템(200)내에 포함시켜서, 필요에 따라 키보드 및 마우스(222)에 대하여 그리고 다양한 직렬 및 병렬 포트들에 대하여 동작적 지원을 제공한다. 다른 실시예들에서, 프로세서(10)와 버스 브리지(202) 간의 외부 인터페이스(52)에 외부 캐시 유닛(도시되지 않음)을 더 결합시킬 수 있다. 대안적으로, 외부 캐시는 버스 브리지(202)에 연결될 수 있고, 상기 외부 캐시에 대한 캐시 콘트롤 로직은 버스 브리지(202)에 일체화시킬 수 있다.
주 메모리(204)는 응용 프로그램이 저장되어 있고, 프로세서(10)가 주로 실행되는 메모리이다. 적절한 주 메모리(204)는 DRAM(동적 임의 액세스 메모리:Dynamic Random Access Momory)을 포함한다. 예를 들면, 주 메모리(204)는 복수의 뱅크로 된 SDRAM(동기화 DRAM)을 포함할 수 있다. 대안적으로, 주 메모리(204)는 RAMBUS DRAM(RDRAM) 또는 임의의 다른 적절한 DRAM을 포함할 수 있다.
PCI 디바이스들(212A-212B)은 다양한 주변 디바이스 예를 들면, 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 콘트롤러, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드 등을 예시한 것이다. 유사하게, ISA 디바이스(218)는 다양한 종류의 주변 디바이스 예를 들면, 모뎀, 사운드 카드, 그리고 GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 수집 카드 등을 예시한 것이다.
그래픽 콘트롤러(208)는 표시부(226)상의 텍스트 및 이미지들의 렌더링(rendering)을 제어하기 위해서 제공된다. 그래픽 콘트롤러(208)는 주 메모리(204)로 그리고 거기로부터 효율적으로 시프트할 수 있는 3차원 데이터 구조들을 렌더링하기 위해서 당업계에 일반적으로 잘 알려진 전형적인 그래픽 가속기를 실시할 수 있다. 따라서, 그래픽 콘트롤러(208)는, 그래픽 콘트롤러(208)가 버스 브리지(202)내의 타겟 인터페이스에 대해 액세스를 요청 및 수신할 수 있어 주 메모리(204)에의 액세스를 획득할 수 있다는 점에서 AGP 버스(210)의 마스터가 될 수 있다. 전용 그래픽 버스는 주 메모리(204)로부터의 데이터의 신속한 검색을 제공한다. 어떤 동작들에 대해서, 그래픽 콘트롤러(208)는 AGP 버스(210)상에서 PCI 프로토콜 트랜잭션(transaction)들을 생성하도록 더 구성될 수 있다. 따라서, 버스 브리지(202)의 상기 AGP 인터페이스는 AGP 프로토콜 트랜잭션 및 PCI 프로토콜 타겟 및 개시 트랜잭션(initiator transaction) 모두를 지원하기 위한 기능을 포함할 수 있다. 표시부(226)는 이미지 또는 텍스트가 표시될 수 있는 임의의 전자 표시부이다. 적절한 표시부(226)로는 음극선관("CRT"), 액정 표시기("LCD") 등이 있다.
상술된 설명에서의 예로서 AGP, PCI 및 ISA 또는 EISA 버스들이 이용되지만은, 필요에 따라 임의의 버스 아키텍쳐들이 대체될 수 있다는 것에 주목할 필요가 있다. 또한, 컴퓨터 시스템(200)은 추가적인 프로세서들(예를 들면, 컴퓨터 시스템(200)의 선택적인 구성요소로서 도시된 프로세서(10a))을 포함하는 다중처리 컴퓨터 시스템일 수 있다는 것에도 더 주목할 필요가 있다. 프로세서(10a)는 프로세서(10)와 유사한 것일 수 있다. 특히, 프로세서(10a)는 프로세서(10)와 동일한 복제품일 수도 있다. 프로세서(10a)는 (도 7에 도시된 바와 같이) 프로세서(10)와 외부 인터페이스(52)를 공유하거나, 또는 독립 버스를 통하여 버스 브리지(202)에 연결될 수 있다.
다양한 신호들이 본원에서는 어서트되거나 디어서트되는 것으로 설명된다는 것에 주목할 필요가 있다. 특정 신호는 논리 1의 값을 가질 때 어서트되고, 논리 0의 값을 가질 때 디어서트되도록 정의될 수 있다. 대안적으로, 특정 신호는 논리 0의 값을 가질 때 어서트되고, 논리 1의 값을 가질 때 디어서트되도록 정의할 수도 있다. 특정 신호에 대해서 어느 정의가 적용되는지는 설계 선택의 문제이다.
본 발명은 프로세서 및 컴퓨터 시스템의 분야에 적용가능하다.
상기의 개시를 완전히 이해한 이 기술분야의 당업자에게는 다수의 변형 및 변경이 명백할 것이다. 하기의 청구항들은 모든 이러한 변형 및 변경을 포함하는 것을 의도하는 것이다.
Claims (26)
- 저장 큐(64)로부터 적재에 의해 액세스되는 저장 데이터를 전송하는 방법에 있어서,상기 저장 큐(64)내의 제 1 저장 큐 엔트리로부터 상기 적재에 의해 액세스되는 제 1 바이트를 선택하는 단계-여기에서 상기 제 1 저장 큐 엔트리에 대응하는 제 1 저장은 상기 제 1 바이트를 갱신하기 위한 프로그램 순서에서 가장 최신임-와;상기 저장 큐(64)내의 제 2 저장 큐 엔트리로부터 상기 적재에 의해 액세스되는 제 2 바이트를 선택하는 단계-여기에서 상기 제 2 저장 큐 엔트리는 상기 제 1 저장 큐 엔트리와 상이하고, 상기 제 2 저장 큐 엔트리에 대응하는 제 2 저장은 상기 제 2 바이트를 갱신하기 위한 프로그램 순서에서 가장 최신이고, 상기 제 2 바이트를 선택하는 단계는 상기 제 1 바이트를 선택하는 단계와 독립적임-를 포함하는 것을 특징으로 하는 방법.
- 제 1 항에 있어서,다수의 비트들을 구비한 적재 비트 벡터를 생성하는 단계-여기에서 상기 각각의 비트는 상기 적재에 대응하는 적재 어드레스의 소정 개수의 최하위 비트들에 의해 정의된 소정 범위의 바이트들 내의 다수의 바이트들 중에서 각각의 바이트에 대응하고, 상기 비트는 상기 각각의 바이트가 상기 적재에 의해 액세스되는지 여부를 나타냄-와;다수의 비트들을 구비한 제 1 저장 비트 벡터를 생성하는 단계-여기에서 상기 각각의 비트는 상기 제 1 저장에 대응하는 제 1 저장 어드레스의 상기 소정 개수의 최하위 비트들에 의해 정의된 소정 범위의 바이트들 내의 다수의 바이트들 중에서 각각의 바이트에 대응하고, 상기 비트는 상기 각각의 바이트가 상기 제 1 저장에 의해 갱신되는지 여부를 나타냄-와;다수의 비트들을 구비한 제 2 저장 비트 벡터를 생성하는 단계-여기에서 상기 각각의 비트는 상기 제 2 저장에 대응하는 제 2 저장 어드레스의 상기 소정 개수의 최하위 비트들에 의해 정의된 소정 범위의 바이트들 내의 다수의 바이트들 중에서 각각의 바이트에 대응하고, 상기 비트는 상기 각각의 바이트가 상기 제 2 저장에 의해 갱신되는 지 여부를 나타냄-를 추가로 포함하는 것을 특징으로 하는 방법.
- 제 2 항에 있어서,상기 제 1 바이트를 선택하는 단계는,상기 적재 비트 벡터내의 대응하는 비트를 검사하여 상기 제 1 바이트가 상기 적재에 의해 액세스됨을 판단하는 단계와; 그리고상기 제 1 저장 비트 벡터내의 대응하는 비트를 검사하여 상기 제 1 저장이 상기 제 1 바이트를 갱신함을 판단하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 3 항에 있어서,상기 소정 개수의 최하위 비트들을 제외한 상기 적재 주소와 상기 제 1 저장 주소를 비교하는 단계를 더 포함하며, 상기 제 1 바이트를 선택하는 단계는 상기 비교 단계에 응답하여 수행되는 것을 특징으로 하는 방법.
- 제 4 항에 있어서,상기 제 2 바이트를 선택하는 단계는,상기 적재 비트 벡터내의 대응하는 비트를 검사하여 상기 제 2 바이트가 상기 적재에 의해 액세스됨을 판단하는 단계와; 그리고상기 제 2 저장 비트 벡터내의 대응하는 비트를 검사하여 상기 제 2 저장이 상기 제 2 바이트를 갱신함을 판단하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 5 항에 있어서,상기 소정 개수의 최하위 비트들을 제외한 상기 적재 주소와 상기 제 2 저장 주소를 비교하는 단계를 더 포함하며, 상기 제 2 바이트를 선택하는 단계는 상기 비교 단계에 응답하여 수행되는 것을 특징으로 하는 방법.
- 제 2 항에 있어서,상기 제 1 저장 큐 엔트리에 상기 제 1 저장 비트 벡터를 저장하는 단계와,상기 제 2 저장 큐 엔트리에 상기 제 2 저장 비트 벡터를 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제 1 항에 있어서,상기 제 1 바이트를 선택하는 단계 및 상기 제 2 바이트를 선택하는 단계와 독립하여 상기 저장 큐로부터 상기 적재에 의해 액세스되는 제 3 바이트를 선택하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제 8 항에 있어서,상기 제 3 바이트를 선택하는 단계는, 상기 제 1 저장이 상기 제 3 바이트를 갱신하기 위한 프로그램 순서에서 가장 최신인 것임을 판단하는 단계에 응답하여, 상기 제 1 저장 큐 엔트리로부터 상기 제 3 바이트를 선택하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 8 항에 있어서,상기 제 3 바이트를 선택하는 단계는, 상기 제 2 저장이 상기 제 3 바이트를 갱신하기 위한 프로그램 순서에서 가장 최신인 것임을 판단하는 단계에 응답하여, 상기 제 2 저장 큐 엔트리로부터 상기 제 3 바이트를 선택하는 단계를 포함하는 것을 특징으로 하는 방법.
- 제 1 항에 있어서,저장 주소 명령 연산의 실행시에 상기 제 1 저장 큐 엔트리를 할당하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제 11 항에 있어서,저장 데이터 명령 연산의 실행시에 상기 제 1 저장 큐 엔트리에 데이터를 저장하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 제 12 항에 있어서,단일 명령으로부터 상기 저장 주소 명령 연산 및 상기 저장 데이터 명령 연산을 도출하는 단계를 더 포함하는 것을 특징으로 하는 방법.
- 데이터 캐시로 아직 퇴거되지 않은 저장들에 대응하는 주소들 및 데이터를 저장하도록 구성되는 저장 큐와;상기 저장 큐에 결합되어 적재 주소를 수신하는 전송을 위한 논리 유닛-여기에서 상기 전송을 위한 논리 유닛은 상기 적재 주소에 대응하는 적재에 의해 액세스되는 복수의 바이트들 중의 각각의 하나에 대하여 독립적으로, 상기 저장 큐에 저장된 상기 저장들 중의 어느 하나가 상기 복수의 바이트들 중 상기 어느 하나의 가장 최신의 갱신인지를 판단하도록 구성되고, 또한 상기 전송을 위한 논리 유닛은 상기 저장 큐내의 하나의 저장으로부터 상기 복수의 바이트들 중의 적어도 하나를 선택하고, 상기 저장 큐내의 다른 저장으로부터 상기 복수의 바이트들 중의 적어도 다른 하나를 선택하도록 구성됨-을 포함하는 것을 특징으로 하는 적재/저장 유닛.
- 제 14 항에 있어서,상기 저장 큐에 결합되어 각 저장 주소의 복수의 최하위 비트들을 수신하기 위한 제 1 비트 벡터 생성기-여기에서 상기 제 1 비트 벡터 생성기는 상기 각 저장 주소에 대응하는 저장 비트 벡터를 생성하도록 구성되며, 상기 저장 비트 벡터의 각 비트는 바이트에 대응하여, 그 바이트가 상기 저장에 의해 갱신되는지의 여부를 나타냄-를 더 포함하고,상기 저장 큐에 상기 저장 비트 벡터를 저장하도록 구성되는 것을 특징으로 하는 적재/저장 유닛.
- 제 15 항에 있어서,상기 전송을 위한 논리 유닛에 결합되어 상기 적재 주소의 복수의 최하위 비트들을 수신하기 위한 제 2 비트 벡터 생성기를 더 포함하며, 여기서 상기 제 2 비트 벡터 생성기는 상기 적재 주소에 대응하는 적재 비트 벡터를 생성하도록 구성되며, 상기 적재 비트 벡터의 각 비트는 바이트에 대응하여, 그 바이트가 상기 적재 주소에 대응하는 적재에 의해 액세스되는지의 여부를 나타내는 것을 특징으로 하는 적재/저장 유닛.
- 제 16 항에 있어서,상기 전송을 위한 논리 유닛은 상기 적재 비트 벡터와, 상기 저장 비트 벡터와, 그리고 (상기 복수의 최하위 비트들을 제외한) 상기 적재 주소와 (상기 복수의 최하위 비트들을 제외한) 상기 저장 주소의 비교 결과를 검사하여, 상기 적재에 의해 액세스되는 각 바이트에 대한 가장 최신의 갱신을 판단하도록 구성되는 것을 특징으로 하는 적재/저장 유닛.
- 프로세서에 있어서,하나 또는 그 이상의 주소 생성 유닛들을 포함하는 적어도 하나의 실행 코어-여기에서 상기 주소 생성 유닛들은 적재들에 대응하는 적재 주소들 및 저장들에 대응하는 저장 주소들을 생성하도록 구성됨-와;상기 실행 코어에 결합된 적재/저장 유닛-여기에서 상기 적재/저장 유닛은 상기 프로세서내의 처리중의 저장들에 대한 상기 저장 주소들 및 이에 대응하는 저장 데이터를 저장하도록 구성되는 저장 큐를 포함하며, 상기 적재/저장 유닛은 상기 적재들에 대응하는 저장 데이터가 상기 저장 큐에 저장되어 있다면, 상기 적재 주소들을 수신하여 상기 저장 큐로부터 상기 적재들에 대응하는 저장 데이터를 전송하도록 구성되며, 상기 적재/저장 유닛은 소정의 적재에 의해 액세스되는 각각의 바이트에 대하여, 바이트 별로, 상기 저장 큐로부터 데이터를 독립적으로 전송하기 위해 상기 저장 큐내의 소정의 저장을 선택하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 18 항에 있어서,상기 실행 코어는 저장 데이터를 상기 적재/저장 유닛에 전송하도록 구성되는 저장 데이터 유닛을 더 포함하는 것을 특징으로 하는 프로세서.
- 제 19 항에 있어서,상기 저장 데이터 유닛은 저장 데이터 명령 연산의 실행에 응답하여 저장 데이터를 전송하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 20 항에 있어서,상기 하나 또는 그 이상의 주소 생성 유닛들은 저장 주소 명령 연산에 응답하여 상기 저장 주소를 생성하도록 구성되는 저장 주소 생성 유닛을 포함하는 것을 특징으로 하는 프로세서.
- 제 20 항에 있어서,상기 프로세서는 상기 저장 주소 명령 연산 및 상기 저장 데이터 명령 연산을 동일한 명령으로부터 도출하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 18 항에 있어서,상기 적재/저장 유닛에 결합되는 제 2 실행 코어를 더 포함하며, 여기서 상기 제 2 실행 코어는 하나 또는 그 이상의 주소 생성 유닛들을 포함하며, 상기 주소 생성 유닛들은 적재들에 대응하는 적재 주소들 및 저장들에 대응하는 저장 주소들을 생성하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 18 항에 있어서,상기 실행 코어 및 상기 적재/저장 유닛에 결합되는 데이터 캐시를 더 포함하며, 여기서 상기 데이터 캐시는 상기 저장 큐에 상기 데이터가 없는 것에 응답하여 상기 소정의 적재에 의하여 액세스되는 데이터를 제공하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 18 항에 있어서,상기 적재/저장 유닛은 상기 소정의 저장에 대응하는 저장 비트 벡터를 생성하도록 구성되며, 여기서 상기 저장 비트 벡터의 각 비트는 바이트에 대응하며, 이 바이트가 상기 소정의 저장에 의해 갱신되는지의 여부를 나타내며, 상기 적재/저장 유닛은 상기 저장 큐에 상기 저장 비트 벡터를 저장하도록 구성되는 것을 특징으로 하는 프로세서.
- 제 25 항에 있어서,상기 적재/저장 유닛은 상기 소정의 적재에 대응하는 적재 비트 벡터를 생성하도록 구성되며, 여기서 상기 적재 비트 벡터의 각 비트는 바이트에 대응하며, 이 바이트가 상기 소정의 적재에 의해 액세스되는지의 여부를 나타내는 것을 특징으로 하는 프로세서.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/158,465 | 1998-09-22 | ||
US09/158,465 US6141747A (en) | 1998-09-22 | 1998-09-22 | System for store to load forwarding of individual bytes from separate store buffer entries to form a single load word |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20010073182A KR20010073182A (ko) | 2001-07-31 |
KR100626858B1 true KR100626858B1 (ko) | 2006-09-22 |
Family
ID=22568258
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020017003691A KR100626858B1 (ko) | 1998-09-22 | 1999-04-03 | 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템 |
Country Status (6)
Country | Link |
---|---|
US (1) | US6141747A (ko) |
EP (1) | EP1116103B1 (ko) |
JP (1) | JP3871884B2 (ko) |
KR (1) | KR100626858B1 (ko) |
DE (1) | DE69932066T2 (ko) |
WO (1) | WO2000017746A1 (ko) |
Families Citing this family (88)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000041182A1 (en) * | 1998-12-30 | 2000-07-13 | Intel Corporation | Memory array organization |
US7779236B1 (en) * | 1998-12-31 | 2010-08-17 | Stmicroelectronics, Inc. | Symbolic store-load bypass |
US6247097B1 (en) * | 1999-01-22 | 2001-06-12 | International Business Machines Corporation | Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions |
US6594754B1 (en) | 1999-07-07 | 2003-07-15 | Intel Corporation | Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters |
US6625723B1 (en) * | 1999-07-07 | 2003-09-23 | Intel Corporation | Unified renaming scheme for load and store instructions |
US6385676B1 (en) * | 1999-07-12 | 2002-05-07 | Hewlett-Packard Company | Coherent ordering queue for computer system |
US6523109B1 (en) | 1999-10-25 | 2003-02-18 | Advanced Micro Devices, Inc. | Store queue multimatch detection |
US6481251B1 (en) | 1999-10-25 | 2002-11-19 | Advanced Micro Devices, Inc. | Store queue number assignment and tracking |
US6591342B1 (en) * | 1999-12-14 | 2003-07-08 | Intel Corporation | Memory disambiguation for large instruction windows |
US6970996B1 (en) | 2000-01-04 | 2005-11-29 | National Semiconductor Corporation | Operand queue for use in a floating point unit to reduce read-after-write latency and method of operation |
US7065632B1 (en) * | 2000-04-07 | 2006-06-20 | Ip First Llc | Method and apparatus for speculatively forwarding storehit data in a hierarchical manner |
US6678807B2 (en) * | 2000-12-21 | 2004-01-13 | Intel Corporation | System and method for multiple store buffer forwarding in a system with a restrictive memory model |
US7739483B2 (en) * | 2001-09-28 | 2010-06-15 | Intel Corporation | Method and apparatus for increasing load bandwidth |
US20030177312A1 (en) * | 2002-03-15 | 2003-09-18 | Aravindh Baktha | Controlling a store data forwarding mechanism during execution of a load operation |
US7085889B2 (en) | 2002-03-22 | 2006-08-01 | Intel Corporation | Use of a context identifier in a cache memory |
US7202942B2 (en) * | 2003-05-28 | 2007-04-10 | Doppler, Ltd. | System and method for measuring velocity using frequency modulation of laser output |
EP1462934A1 (en) * | 2003-03-29 | 2004-09-29 | Deutsche Thomson-Brandt Gmbh | Method and apparatus for forwarding of results |
US7177982B2 (en) * | 2004-01-16 | 2007-02-13 | International Business Machines Corporation | Method to maintain order between multiple queues with different ordering requirements in a high frequency system |
US7376817B2 (en) * | 2005-08-10 | 2008-05-20 | P.A. Semi, Inc. | Partial load/store forward prediction |
US7461238B2 (en) * | 2006-06-07 | 2008-12-02 | International Business Machines Corporation | Simple load and store disambiguation and scheduling at predecode |
US20070288725A1 (en) * | 2006-06-07 | 2007-12-13 | Luick David A | A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism |
US7594100B2 (en) * | 2006-09-29 | 2009-09-22 | Sun Microsystems, Inc. | Efficient store queue architecture |
US7600098B1 (en) * | 2006-09-29 | 2009-10-06 | Sun Microsystems, Inc. | Method and system for efficient implementation of very large store buffer |
US7752393B2 (en) * | 2006-11-16 | 2010-07-06 | International Business Machines Corporation | Design structure for forwarding store data to loads in a pipelined processor |
US7640414B2 (en) * | 2006-11-16 | 2009-12-29 | International Business Machines Corporation | Method and apparatus for forwarding store data to loads in a pipelined processor |
US7721066B2 (en) * | 2007-06-05 | 2010-05-18 | Apple Inc. | Efficient encoding for detecting load dependency on store with misalignment |
US8447911B2 (en) * | 2007-07-05 | 2013-05-21 | Board Of Regents, University Of Texas System | Unordered load/store queue |
US7849290B2 (en) * | 2007-07-09 | 2010-12-07 | Oracle America, Inc. | Store queue architecture for a processor that supports speculative execution |
US8645670B2 (en) * | 2008-02-15 | 2014-02-04 | International Business Machines Corporation | Specialized store queue and buffer design for silent store implementation |
US8627047B2 (en) | 2008-02-15 | 2014-01-07 | International Business Machines Corporation | Store data forwarding with no memory model restrictions |
KR101475113B1 (ko) * | 2008-10-30 | 2014-12-22 | 휴렛-팩커드 디벨롭먼트 컴퍼니, 엘.피. | 컴퓨터 시스템 및 복수 배열 독립 디스크(raid) 기록 캐시 서브-어셈블리 |
US20100250850A1 (en) * | 2009-03-25 | 2010-09-30 | Faraday Technology Corp. | Processor and method for executing load operation and store operation thereof |
US8914617B2 (en) * | 2009-12-26 | 2014-12-16 | Intel Corporation | Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register |
US10157060B2 (en) | 2011-12-29 | 2018-12-18 | Intel Corporation | Method, device and system for control signaling in a data path module of a data stream processing engine |
US9128725B2 (en) | 2012-05-04 | 2015-09-08 | Apple Inc. | Load-store dependency predictor content management |
US9600289B2 (en) | 2012-05-30 | 2017-03-21 | Apple Inc. | Load-store dependency predictor PC hashing |
US20140244984A1 (en) * | 2013-02-26 | 2014-08-28 | Advanced Micro Devices, Inc. | Eligible store maps for store-to-load forwarding |
US9665468B2 (en) | 2013-08-19 | 2017-05-30 | Intel Corporation | Systems and methods for invasive debug of a processor without processor execution of instructions |
US9619382B2 (en) | 2013-08-19 | 2017-04-11 | Intel Corporation | Systems and methods for read request bypassing a last level cache that interfaces with an external fabric |
US9632947B2 (en) * | 2013-08-19 | 2017-04-25 | Intel Corporation | Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early |
US9361227B2 (en) | 2013-08-30 | 2016-06-07 | Soft Machines, Inc. | Systems and methods for faster read after write forwarding using a virtual address |
US10331583B2 (en) | 2013-09-26 | 2019-06-25 | Intel Corporation | Executing distributed memory operations using processing elements connected by distributed channels |
US9710268B2 (en) | 2014-04-29 | 2017-07-18 | Apple Inc. | Reducing latency for pointer chasing loads |
US9483409B2 (en) | 2015-02-05 | 2016-11-01 | International Business Machines Corporation | Store forwarding cache |
US9891824B2 (en) | 2015-04-24 | 2018-02-13 | International Business Machines Corporation | Sub-block input/output (I/O) commands for storage device including byte stream buffer |
US10514925B1 (en) | 2016-01-28 | 2019-12-24 | Apple Inc. | Load speculation recovery |
US10437595B1 (en) | 2016-03-15 | 2019-10-08 | Apple Inc. | Load/store dependency predictor optimization for replayed loads |
US10402168B2 (en) | 2016-10-01 | 2019-09-03 | Intel Corporation | Low energy consumption mantissa multiplication for floating point multiply-add operations |
US10416999B2 (en) | 2016-12-30 | 2019-09-17 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10572376B2 (en) * | 2016-12-30 | 2020-02-25 | Intel Corporation | Memory ordering in acceleration hardware |
US10474375B2 (en) * | 2016-12-30 | 2019-11-12 | Intel Corporation | Runtime address disambiguation in acceleration hardware |
US10558575B2 (en) | 2016-12-30 | 2020-02-11 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10469397B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods with configurable network-based dataflow operator circuits |
US10387319B2 (en) | 2017-07-01 | 2019-08-20 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with memory system performance, power reduction, and atomics support features |
US10467183B2 (en) | 2017-07-01 | 2019-11-05 | Intel Corporation | Processors and methods for pipelined runtime services in a spatial array |
US10515049B1 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Memory circuits and methods for distributed memory hazard detection and error recovery |
US10515046B2 (en) | 2017-07-01 | 2019-12-24 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator |
US10445234B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with transactional and replay features |
US10445451B2 (en) | 2017-07-01 | 2019-10-15 | Intel Corporation | Processors, methods, and systems for a configurable spatial accelerator with performance, correctness, and power reduction features |
US10496574B2 (en) | 2017-09-28 | 2019-12-03 | Intel Corporation | Processors, methods, and systems for a memory fence in a configurable spatial accelerator |
US11086816B2 (en) | 2017-09-28 | 2021-08-10 | Intel Corporation | Processors, methods, and systems for debugging a configurable spatial accelerator |
US10445098B2 (en) | 2017-09-30 | 2019-10-15 | Intel Corporation | Processors and methods for privileged configuration in a spatial array |
US10380063B2 (en) | 2017-09-30 | 2019-08-13 | Intel Corporation | Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator |
US11175924B2 (en) | 2017-10-06 | 2021-11-16 | International Business Machines Corporation | Load-store unit with partitioned reorder queues with single cam port |
US10579387B2 (en) | 2017-10-06 | 2020-03-03 | International Business Machines Corporation | Efficient store-forwarding with partitioned FIFO store-reorder queue in out-of-order processor |
US10417002B2 (en) | 2017-10-06 | 2019-09-17 | International Business Machines Corporation | Hazard detection of out-of-order execution of load and store instructions in processors without using real addresses |
US10572256B2 (en) | 2017-10-06 | 2020-02-25 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10394558B2 (en) | 2017-10-06 | 2019-08-27 | International Business Machines Corporation | Executing load-store operations without address translation hardware per load-store unit port |
US10606591B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Handling effective address synonyms in a load-store unit that operates without address translation |
US10606590B2 (en) | 2017-10-06 | 2020-03-31 | International Business Machines Corporation | Effective address based load store unit in out of order processors |
US10445250B2 (en) | 2017-12-30 | 2019-10-15 | Intel Corporation | Apparatus, methods, and systems with a configurable spatial accelerator |
US10417175B2 (en) | 2017-12-30 | 2019-09-17 | Intel Corporation | Apparatus, methods, and systems for memory consistency in a configurable spatial accelerator |
US10565134B2 (en) | 2017-12-30 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for multicast in a configurable spatial accelerator |
US11307873B2 (en) | 2018-04-03 | 2022-04-19 | Intel Corporation | Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging |
US10564980B2 (en) | 2018-04-03 | 2020-02-18 | Intel Corporation | Apparatus, methods, and systems for conditional queues in a configurable spatial accelerator |
US11200186B2 (en) | 2018-06-30 | 2021-12-14 | Intel Corporation | Apparatuses, methods, and systems for operations in a configurable spatial accelerator |
US10891240B2 (en) | 2018-06-30 | 2021-01-12 | Intel Corporation | Apparatus, methods, and systems for low latency communication in a configurable spatial accelerator |
US10459866B1 (en) | 2018-06-30 | 2019-10-29 | Intel Corporation | Apparatuses, methods, and systems for integrated control and data processing in a configurable spatial accelerator |
US10853073B2 (en) | 2018-06-30 | 2020-12-01 | Intel Corporation | Apparatuses, methods, and systems for conditional operations in a configurable spatial accelerator |
US10678724B1 (en) | 2018-12-29 | 2020-06-09 | Intel Corporation | Apparatuses, methods, and systems for in-network storage in a configurable spatial accelerator |
US10817291B2 (en) | 2019-03-30 | 2020-10-27 | Intel Corporation | Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator |
US11029927B2 (en) | 2019-03-30 | 2021-06-08 | Intel Corporation | Methods and apparatus to detect and annotate backedges in a dataflow graph |
US10965536B2 (en) | 2019-03-30 | 2021-03-30 | Intel Corporation | Methods and apparatus to insert buffers in a dataflow graph |
US10915471B2 (en) | 2019-03-30 | 2021-02-09 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit allocation in a configurable spatial accelerator |
US11037050B2 (en) | 2019-06-29 | 2021-06-15 | Intel Corporation | Apparatuses, methods, and systems for memory interface circuit arbitration in a configurable spatial accelerator |
US11907713B2 (en) | 2019-12-28 | 2024-02-20 | Intel Corporation | Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator |
US11379241B2 (en) * | 2020-07-30 | 2022-07-05 | International Business Machines Corporation | Handling oversize store to load forwarding in a processor |
US12086080B2 (en) | 2020-09-26 | 2024-09-10 | Intel Corporation | Apparatuses, methods, and systems for a configurable accelerator having dataflow execution circuits |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5471598A (en) * | 1993-10-18 | 1995-11-28 | Cyrix Corporation | Data dependency detection and handling in a microprocessor with write buffer |
DE69429612T2 (de) * | 1993-10-18 | 2002-09-12 | Via-Cyrix, Inc. | Schreibpuffer für einen superskalaren Mikroprozessor mit Pipeline |
US5878245A (en) * | 1993-10-29 | 1999-03-02 | Advanced Micro Devices, Inc. | High performance load/store functional unit and data cache |
US5588126A (en) * | 1993-12-30 | 1996-12-24 | Intel Corporation | Methods and apparatus for fordwarding buffered store data on an out-of-order execution computer system |
US5784586A (en) * | 1995-02-14 | 1998-07-21 | Fujitsu Limited | Addressing method for executing load instructions out of order with respect to store instructions |
US5832297A (en) * | 1995-04-12 | 1998-11-03 | Advanced Micro Devices, Inc. | Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations |
US5802588A (en) * | 1995-04-12 | 1998-09-01 | Advanced Micro Devices, Inc. | Load/store unit implementing non-blocking loads for a superscalar microprocessor and method of selecting loads in a non-blocking fashion from a load/store buffer |
US5835747A (en) * | 1996-01-26 | 1998-11-10 | Advanced Micro Devices, Inc. | Hierarchical scan logic for out-of-order load/store execution control |
US6021485A (en) * | 1997-04-10 | 2000-02-01 | International Business Machines Corporation | Forwarding store instruction result to load instruction with reduced stall or flushing by effective/real data address bytes matching |
-
1998
- 1998-09-22 US US09/158,465 patent/US6141747A/en not_active Expired - Lifetime
-
1999
- 1999-04-03 KR KR1020017003691A patent/KR100626858B1/ko not_active IP Right Cessation
- 1999-04-03 DE DE69932066T patent/DE69932066T2/de not_active Expired - Lifetime
- 1999-04-03 JP JP2000571340A patent/JP3871884B2/ja not_active Expired - Fee Related
- 1999-04-03 EP EP99916331A patent/EP1116103B1/en not_active Expired - Lifetime
- 1999-04-03 WO PCT/US1999/007332 patent/WO2000017746A1/en active IP Right Grant
Also Published As
Publication number | Publication date |
---|---|
DE69932066T2 (de) | 2007-06-21 |
JP2002525742A (ja) | 2002-08-13 |
US6141747A (en) | 2000-10-31 |
EP1116103B1 (en) | 2006-06-21 |
WO2000017746A1 (en) | 2000-03-30 |
EP1116103A1 (en) | 2001-07-18 |
DE69932066D1 (en) | 2006-08-03 |
JP3871884B2 (ja) | 2007-01-24 |
KR20010073182A (ko) | 2001-07-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100626858B1 (ko) | 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템 | |
US6122727A (en) | Symmetrical instructions queue for high clock frequency scheduling | |
US6553482B1 (en) | Universal dependency vector/queue entry | |
US6256721B1 (en) | Register renaming in which moves are accomplished by swapping tags | |
US6212622B1 (en) | Mechanism for load block on store address generation | |
KR100592122B1 (ko) | 가상 레지스터 번호들을 이용하여 논리적 레지스터 번호들을 물리적 레지스터 번호들로 맵핑시키도록 구성된 프로세서 | |
US5944815A (en) | Microprocessor configured to execute a prefetch instruction including an access count field defining an expected number of access | |
JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
US6125441A (en) | Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address | |
US6088789A (en) | Prefetch instruction specifying destination functional unit and read/write access mode | |
EP0795828A2 (en) | Dynamic set prediction method and apparatus for a multi-level cache system | |
US6427192B1 (en) | Method and apparatus for caching victimized branch predictions | |
US8171240B1 (en) | Misalignment predictor | |
US20030074530A1 (en) | Load/store unit with fast memory data access mechanism | |
KR20020097149A (ko) | 종속성 체인을 발행 또는 재발행할 수 있는 스케줄러 | |
KR20000070468A (ko) | 슈퍼스칼라 마이크로프로세서용 회선 지향 재조정 버퍼 | |
WO2007019001A1 (en) | Call return stack way prediction repair | |
US6393546B1 (en) | Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values | |
US6212621B1 (en) | Method and system using tagged instructions to allow out-of-program-order instruction decoding | |
US6332187B1 (en) | Cumulative lookahead to eliminate chained dependencies | |
KR100572040B1 (ko) | 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서 | |
US6282629B1 (en) | Pipelined processor for performing parallel instruction recording and register assigning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant | ||
FPAY | Annual fee payment |
Payment date: 20110812 Year of fee payment: 6 |
|
LAPS | Lapse due to unpaid annual fee |