KR20010073182A - 전송을 적재하는 저장 메커니즘 - Google Patents

전송을 적재하는 저장 메커니즘 Download PDF

Info

Publication number
KR20010073182A
KR20010073182A KR1020017003691A KR20017003691A KR20010073182A KR 20010073182 A KR20010073182 A KR 20010073182A KR 1020017003691 A KR1020017003691 A KR 1020017003691A KR 20017003691 A KR20017003691 A KR 20017003691A KR 20010073182 A KR20010073182 A KR 20010073182A
Authority
KR
South Korea
Prior art keywords
storage
load
byte
queue
store
Prior art date
Application number
KR1020017003691A
Other languages
English (en)
Other versions
KR100626858B1 (ko
Inventor
위트데이비드비.
Original Assignee
토토라노 제이. 빈센트
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 토토라노 제이. 빈센트, 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 토토라노 제이. 빈센트
Publication of KR20010073182A publication Critical patent/KR20010073182A/ko
Application granted granted Critical
Publication of KR100626858B1 publication Critical patent/KR100626858B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing 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

전송을 적재하는 저장 메커니즘{MECHANISM FOR STORE TO LOAD FORWARDING}
슈퍼스칼라 프로세서들은 클록 사이클 당 다수의 명령들을 발생하여 실행함으로써 또한, 설계와 관련된 초고속 가능 클록 주파수를 채용함으로써 고성능을 성취하려 한다. 오랜 동안, 슈퍼스칼라 프로세서들에 의해 동시에 발생되고/발생되거나 실행될 수 있는 명령들의 개수는 증가하여 슈퍼스칼라 프로세서들의 성능을 향상시켜왔다.
불행하게도, 더 많은 명령들이 동시에 수행됨에 따라, 적재물들을 신속하게 처리하는 것이 더욱 중요하여진다. 적재물들은 외부 메모리(반대로 내부 레지스터들)에 접근가능하고, 상기 외부 메모리에서 상기 적재물에 의해 접근된 상기 메모리 로케이션에 저장된 상기 데이터는 상기 프로세서로(예를 들면, 내부 레지스터로) 전송된다. 반대로, 저장물들(stores)은 외부 메모리에 접근가능하고, 상기 외부 메모리에서 상기 프로세서에 의해 생성된 데이터는 상기 저장물에 의해 접근된 메모리 로케이션에 저장된다. 적재물들과 저장물들이 외부 메모리에 접근 가능하도록 정의되고, 상기 프로세서의 내부의 하나 이상의 캐시들이 채용되어 상기 캐시들에서 적중(hit)이 있는 접근들에 대한 메모리 대시 시간을 감소시킨다.
적재물들이 데이터를 메모리에서 상기 프로세서로 전송하여, 상기 데이터가 후속되는 명령 동작들에 의해 동작되기 때문에, 상기 적재물들을 신속하게 처리하여 상기 후속되는 명령 동작들에 상기 데이터를 제공하는 것이 중요하다. 만약 상기 데이터가 신속하게 제공되지 않으면, 상기 후속하는 명령 동작들은 멈춘다. 만약 다른 명령들이 실행 계획 동안에 이용가능하지 않으면, 전체 명령은 감소될 것이다( 또한 따라서 성능도 감소시킨다). 슈퍼스칼라 프로세서들이 동시에 많은 개수의 명령들을 발생하고/실행하고자 하게 됨에 따라, 상기 효과들도 향상된다. 따라서, 신속한 적재물 처리의 필요성이 증대된다.
또한, 프로세서에서 동시에 발생되고/실행되는 명령들의 개수의 증가는 평균적으로 저장 큐에 상주하는 저장물들의 개수를 증가시킨다. 일반적으로, 저장물들이 비-추측적인(non-speculative)인 것으로 알려진 후가 되기 전까지는 메모리로 보내지지 않는다. 예를 들면, 저장들은 폐기되기 전까지는 보내지지 않는다. 상기 저장물들은 메모리로 보내지기 전까지 상기 저장 큐에 놓여지고, 상기 저장 큐는 저장될 상기 저장 및 데이터의 주소 오퍼랜드들을 사용하여 생성된 저장 주소를 포함한다.
상기 저장 큐의 수많은 개수의 저장물들이 성능 문제를 제시하지 않을 때, 수많은 개수의 저장물들은 적재물들의 신속한 처리를 위해 성능 문제를 간접적으로 제시할 것이다. 상기 저장 큐 내의 저장물들의 개수가 증가함에 따라, 적재물에 의해 접근된 데이터가 상기 저장 큐(캐시/외부 메모리에 반대되는)에 있는가능성(likelihood)이 증가된다. 또한, 상기 적재물에 의해 접근된 몇몇의 바이트들은 상기 저장 큐내의 하나의 이전의 저장물에 의해 변경되고, 반면에 상기 적재물에 의해 접근된 다른 바이트들은 상기 저장 큐내의 다른 이전의 저장물에 의해 변경되는 가능성이 또한 증가한다. 또한, 상기 적재물에 의해 사용되는 저장 데이터가 상기 저장 큐에서 사용가능하지 않을 가능성이 증가한다. 상기 이벤트들이 더욱 자주 발생함에 따라, 신속한 적재물 처리의 방해들이 증가한다.
본 발명은 프로세서들의 영역에 관한 것이고, 자세하게는 메모리 종속성 검사 및 다음 적재물들(load)로의 저장 데이터의 전송에 관한 것이다.
본 발명의 다른 목적들과 특징들은 하기의 도면을 참조하여 하기의 상세한 설명을 통하여 명확하여질 것이다:
도 1은 프로세서의 일실시예의 블록 다이아그램이다.
도 2는 도 1의 상기 프로세서의 일실시예의 부분들을 도시한 블록 다이아그램으로서, 데이터 캐시와, 적재/저장 유닛 및 기능 유닛들을 포함한다.
도 3은 도 2의 상기 적재/저장 유닛의 일실시예에 따른 저장 큐와 전송 논리를 도시한 블록 다이아그램이다.
도 4는 도 3의 상기 저장 큐의 저장 데이터 부분의 실시예의 구현을 나타내는 다이아그램이다.
도 5는 도 3의 상기 전송 논리의 일실시예를 나타내는 다이아그램이다.
도 6은 도 2의 상기 저장 큐로부터의 전송 데이터의 실시예를 도시한다.
도 7은 도 1의 상기 프로세서를 포함하는 컴퓨터 시스템의 블록 다이아그램이다.
본 발명은 다양한 변형들과 대체 형태로 변경될 수있고, 특정의 실시예들은도면들에 의한 예로서 도시되고, 하기에서 상세히 설명될 것이다. 상기 도면들과 상세한 설명은 본 발명을 개시된 특정의 형태로 제한하기 위한 것이 아니고, 반대로 본 발명은 첨부된 청구범위들에 의해 정의되는 바와 같이 본 발명의 범위와 정신 내에서의 모든 변형들과, 균등물들 및 대체물들을 포함한다.
상술된 문제들은 적재물에 저장 전송을 제공하도록 된 적재물/저장 유닛에 의해 대부분 해결된다. 상기 적재물/저장 유닛은 다른 바이트들로부터 상기 적재물에 독립적으로 접근되는 각 바이트에 대하여 상기 적재물/저장 유닛에 포함된 저장 큐를 검색하고, 가장 최신의 저장물(프로그램 순서에 따라)을 결정하여 상기 바이트를 갱신한다. 따라서, 만약 상기 적재물에 의해 접근된 하나 이상의 바이트들이 하나의 저장물에 의해 변경되고, 반면에 상기 적재물에 의해 접근된 하나 이상의 다른 바이트들이 다른 저장물에 의해 변경된다고 하더라도, 상기 전송 메커니즘은 상기 적재물에 의해 접근된 상기 바이트들을 어셈블한다. 장점으로서, 적재 데이터는 만약 상기 적재 데이터가 상기 저장 큐 내에 저장되었다면, 상기 저장 큐로부터 전송될 것이다. 특히, 적재 데이터는 임의의 개수의 저장물로부터 정확하게 전송될 것이다. 예를 들면, 전송은 0 저장물(만약 상기 저장 큐가 비어있거나 특정 적재물에 대하여 상기 저장 큐내에 적중들이 없다면)로부터, 1 저장물(만약 상기 저장물이 상기 적재물에 의해 접근된 각 바이트를 갱신하는 가장 최근이 것이면), 또는 N저장물들(N은 상기 적재물에 의해 접근된 바이트들의 개수)까지 발생한다. 적재물들은 신속하게 처리될 것이고, 그럼으로써 상기 적재/저장 유닛을 포함하는 프로세서의 전체 성능이 향상될 것이다.
일실시예에서, 상기 적재/저장 유닛은 적재물과 저장물들의 주소들의 예정된 세트의 가장 적게 중요한 비트들로부터 비트 벡터를 생성한다. 상기 비트 벡터는 가장 적게 중요한 비트들의 개수에 의해 정의된 범위 내의 각 바이트에 대한 비트를 포함한다. 상기 비트는 상기 바이트가 (저장 비트 벡터에 대하여) 갱신되었는가 또는 (적재 비트 벡터들에 대하여) 접근되었는가를 나타낸다. 상기 적재/저장 유닛은 상기 비트 벡터들을 검사하여 ( 또한 상기 비트를 생성하도록 된 상기 가장 적게 중요한 비트들을 제외하고, 상기 저장 및 적재 주소들의 남은 비트들을 비교하여) 가장 최신으로 갱신된 각 바이트를 위치시킨다. 상기 비트 벡터들이 각각의 접근되고/갱신된 바이트를 개별적으로 식별하기 때문에, 가장 최신으로 갱신된 각 바이트를 위치시키는 과정은 각 바이트에 대하여 ( 또한 병렬적으로) 독립적으로 수행될 것이다. 다양한 저장 큐 엔트리들로부터 선택된 상기 바이트들은 모두 합하여져서 상기 적재물에 의해 접근된 일련의 바이트들을 형성한다.
일반적으로 말하면, 저장 큐로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법이 고려된다. 상기 적재물에 의해 접근된 제 1 바이트는 상기 저장 큐 내의 제 1 저장 큐 엔트리로부터 선택된다. 상기 제 1 저장 큐 엔트리에 대응하는 제 1 저장물은 프로그램 순서 상으로 상기 제 1 바이트를 갱신시키는 가장 최신의 것이다. 상기 적재물에 의해 접근된 제 2 바이트는 상기 저장 큐 내의 제 2 저장큐 엔트리로부터 선택되고, 상기 제 2 저장 큐 엔트리는 상기 제 1 저장 큐 엔트리와 다르다. 상기 제 2 저장 큐 엔트리에 대응하는 제 2 저장물은 프로그램 순서 상으로, 상기 제 2 바이트를 갱신하는 최신의 것이다. 상기 제 2 바이트의 선택 과정은 상기 제 1 바이트를 선택하는 과정에 독립적이다.
적재/저장 유닛이 고려된다. 상기 적재/저장 유닛은 저장물에 대응하는 주소들과 데이터를 저장하도록 된 저장 큐로 이루어지고, 상기 저장물은 상기 저장 큐에 연결된 데이터 캐시 및 전송 논리로 아직 폐기되지 않은 것이다. 상기 전송 논리는 추가적으로 적재 주소를 수신하도록 되고, 상기 적재 주소에 대응하는 적재물에 의해 접근된 다수의 바이트들 중의 각 하나에 대하여 독립적으로 결정되도록 되고, 상기 저장 큐 내에 저장된 상기 저장물들 중의 하나가 가장 최근에 갱신된 상기 다수의 바이트들의 각 하나이다. 적어도 상기 다수의 바이트들 중의 하나는 상기 저장 큐 내의 하나의 저장물로부터 제공될 수 있고, 상기 다수의 바이트들 중의 적어도 다른 하나는 상기 저장 큐 내의 다른 저장물로부터 제공될 수 있다.
또한, 프로세서가 고려된다. 상기 프로세서는 하나 이상의 주소 생성 유닛들을 포함하는 적어도 하나의 실행 코어로 이루어진다. 상기 주소 생성 유닛들은 적재물에 대응하는 적재 주소들과 저장물에 대응하는 저장 주소들을 생성하도록 된다. 상기 프로세서는 상기 실행 코어와 연결된 적재/저장 유닛을 추가적으로 구비하고, 상기 적재/저장 유닛은 상기 저장 주소들과 상기 프로세서 내에서 미결인 저장물들에 대한 대응하는 저장 데이터를 저장하도록 된 저장 큐를 포함한다. 또한, 상기 적재/저장 유닛은 상기 적재 주소들을 수신하도록 되고, 만약 상기 적재물에대응하는 저장 데이터가 상기 저장 큐에 저장되었다면, 상기 저장 큐로부터 상기 적재물들에 대응하는 저장 데이터를 전송한다. 상기 적재/저장 유닛은 특정의 적재물에 의해 접근된 각 바이트에 대하여, 한 바이트 한 바이트(a byte by byte)의 기준으로 독립적으로 데이터를 전송하는 상기 저장 큐로부터 상기 저장 큐 내의 특정의 저장물을 선택하도록 된다.
도 1은 프로세서(10)의 일실시예를 나타내는 블록 다이아그램이다. 다른 실시예들이 가능하고 고려된다. 도 1에서, 상기 프로세서(10)는 라인 예측기(12)와, 명령 캐시(I-캐시)(14)와, 정렬 유닛(16)과, 분기 히스토리 테이블(18)과, 간접 주소 캐시(20)와, 리턴 스택(22)과, 디코드 유닛(24)과, 예측기 오류 디코드 유닛(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)은 적재물들을 위해 포함된 저장 큐로부터의 전송을 제공한다. 상기 전송 메커니즘은 상기 다른 바이트들로부터 독립적인 상기 적재물의 각 바이트에 대한 상기 저장 큐를 검색하여, (프로그램 순서로) 가장 최근 저장물을 결정하여 상기 바이트를 갱신한다. 따라서, 만약 상기 적재물에 의해 접근된 하나 이상의 바이트들은 하나의 저장물에 의해 변경되고, 반면에 상기 적재물에 의해 접근된 하나 이상의 다른 바이트들은 다른 저장물에 의해 변경된다고 하더라도, 상기 전송 메커니즘은 상기 적재물에 의해 접근된 상기 바이트들을 어셈블할 것이다. 장점으로서, 상기 적재 데이터는 만약 상기 적재 데이터가 상기 저장 큐에 저장되었다면 상기 저장 큐로부터 전송될 것이다. 적재물들은 신속하게 처리됨으로써, 상기 프로세서(10)의 성능이 전체적으로 향상된다.
상술된 바와 같이, 상기 단어 "프로그램 순서(program order)"는 실행되는 프로그램 내에서 설명된 명령들의 순서를 나타낸다. 특정 저장물은, 만약 상기 특정 저장물과 전송이 시도되고 있는 적재물 간에 어느 저장물들도 바이트를 갱신하지 않으면, 프로그램 순서로 상기 바이트를 갱신하는 가장 최신의 것이다.
하나의 특정 실시예에서, 적재/저장 유닛(42)은 적재물들과 저장물들의 주소들의 소정의 세트의 가장 적게 중요한 비트들로부터 비트 벡터를 생성한다. 상기 비트 벡터는 가장 적게 중요한 비트들의 개수에 의해 정의된 범위에서의 각 바이트에 대한 비트를 포함한다. 상기 비트는 상기 바이트가 (저장 비트 벡터들에 대하여) 갱신되었는가 또는 (적재 비트 벡터들에 대하여) 접근되었는가를 나타낸다. 예를 들면, 세트된 상기 비트는 상기 바이트가 갱신되고/접근된 것을 나타내고, 클리어된 상기 비트는 상기 바이트가 갱신되지 않고/접근되지 않은 것을 나타낸다. 다른 방법으로, 클리어된 상기 비트는 상기 바이트가 갱신되고/접근된 것을 나타내고, 세트된 상기 비트는 상기 바이트가 갱신되지 않고/접근되지 않은 것을 나타낸다. 적재/저장 유닛(42)은 상기 저장 주소들이 상기 저장 큐로 저장됨에 따라, 상기 저장 비트 벡터들을 생성하고, 상기 대응하는 적재 주소들을 데이터 캐시(44) 및 적재/저장 유닛(42)에 제시한 때 상기 적재 비트 벡터들을 생성할 것이다. 적재/저장 유닛(42)은 상기 비트 벡터들을 검사하여( 또한 상기 비트 벡터들을 생성하는 상기 가장 적게 중요한 비트들을 제외하고, 저장 및 적재 주소들의 남아있는 비트들을 비교하여) 가장 최근에 갱신된 각 바이트를 위치시킨다. 상기 비트 벡터들은 각 접근되고/갱신된 바이트를 식별하기 때문에, 상기 가장 최신으로 갱신된 각 바이트를 위치시키는 단계는 각 바이트에 대하여 독립적으로 (또한 병렬적으로) 수행될 것이다. 다양한 저장 큐 엔트리들로부터 선택된 상기 바이트들은 상기 적재물에 의해 접근된 일련의 바이트들을 형성하도록 모두 합하여진다.
적재물과 저장물들은 일반적으로 상기 적재/저장에 의해 접근되거나 갱신된 메모리 내의 상기 메모리 위치를 식별하는 적재물과 저장물에 관련된 주소를 저장한다. 상기 적재/저장의 하나 이상의 주소 오퍼랜드들이 상기 주소를 생성하도록 프로세서(10)에 의해 사용된다. 주소 오퍼랜드들은 상기 명령에서 인코드된 변위들 뿐만 아니라, 레지스터 값들을 포함할 것이다.
도 1의 실시예에서, 프로세서(10)는 가변 바이트 길이, 복합 명령 세트 연산(complex instruction set computing: CISC) 명령 세트 아키텍쳐를 채용한다. 예를 들면, 프로세서(10)는 x86 명령 세트 아키텍쳐(IA-32로 지칭되는)를 채용할 것이다. 다른 실시예들은 고정 길이 명령 세트 아키텍쳐들과, 감소된 명령 세트 연산(reduced instruction set computing: RISC) 명령 세트 아키텍쳐를 포함하는 다른 명령 세트 아키텍쳐를 채용할 것이다.
라인 예측기(12)는 I-캐시(14)에 대한 패치 주소들을 생성하도록 되고, 추가적으로 명령 동작들의 라인에 관한 정보를 정렬 유닛(16)에 제공하도록 된다. 일반적으로, 라인 예측기(12)는 프로세서(10)에 의해 이전에 추측적으로 패치된 명령 동작들의 라인들과, 상기 라인의 패치 상에서 선택되는 각 라인에 대응하는 하나이상의 다음 패치 주소들을 저장한다. 일실시예에서, 라인 예측기(12)는 1K 엔트리들을 저장하도록 되고, 각각의 엔트리는 명령 동작들의 하나의 라인을 정의한다. 라인 예측기(12)는 예를 들면, 4개의 뱅크(bank)의 256 엔트리들로 뱅크됨으로써 이중 포팅(dual porting)없이 동시 판독 및 갱신이 가능하게 한다.
라인 예측기(12)는 상기 다음 패치 주소를 I-캐시(14)에 제공하여 상기 대응하는 명령 바이트들을 패치한다. I-캐시(14)는 명령 바이트들을 저장하는 고속 캐시 메모리이다. 일실시예에 따르면, I-캐시(14)는 예를 들면, 64 바이트 캐시 라인들을 채용하는 256 킬로바이트인 4-웨이 세트 관련 구성으로 이루어진다. 그러나, 어느 I-캐시 구조도 적절할 것이다. 따라서, 상기 다음 패치 주소는 명령 동작들의 대응하는 라인에 관련된 패치 정보로의 입력으로서 라인 예측기(12)에 다시 제공된다. 상기 다음 패치 주소는 PC 사일로 및 재전송 유닛(48)에 알려진 예외 조건들에 대한 응답으로 ITB(50)에 의해 제공된 주소에 의해 폐기될 것이다.
상기 라인 예측기에 의해 제공된 상기 다음 패치 주소는 상기 라인 내의 (만약 상기 라인이 비-분기 명령으로 종료되면) 마지막 명령에 이어지는 주소일 것이다. 또한, 상기 다음 패치 주소는 상기 라인을 종료시키는 분기 명령의 목적지 주소일 것이다. 다른 예로, 상기 라인은 리턴 명령에 의해 종료될 것이고, 상기 경우에, 상기 다음 패치 주소는 리턴 스택(22)으로부터 인출된다.
패치 주소에 대한 응답으로, 라인 예측기(12)는 상기 패치 주소에서 개시하는 명령 동작들의 라인에 관한 정보를 정렬 유닛(16)에 제공한다. 정렬 유닛(16)은 I-캐시로부터 상기 패치 주소에 대응하는 명령 바이트들을 수신하여 상기 제공된명령 동작 정보에 따라 일련의 발행 위치(issue position)들로의 명령 바이트들을 선택한다. 특히, 라인 예측기(12)는 상기 라인 명령 동작들 내의 각 명령에 대한 이동량(shift amount)과, 상기 라인을 구성하는 일련의 명령 동작들로의 명령들의 맵핑을 제공한다. 명령은 다수의 명령 동작들에 대응함으로써, 상기 명령에 대응하는 이동량은 다수의 발행 위치들로의 명령 바이트들을 선택하는데 사용된다. 발행 위치는 상기 라인 내의 각각의 가능한 명령 동작을 위해 제공된다. 일실시예에서, 명령 동작의 하나의 라인은 6개까지의 명령들에 대응하는 8개까지의 명령 동작들을 포함한다. 일반적으로, 상술된 바와 같이, 명령 동작들의 라인은 디코드 유닛(24)으로 동시에 발행된 명령 동작들의 그룹을 나타낸다. 명령 동작들의 라인은 마이크로프로세서(10)의 파이프라인을 통하여 유닛으로서 명령 큐들(36)로 진행한다. 각 개별 명령 동작들이 명령 큐들(36)에 저장된 때, 아무런 순서로 실행될 것이다.
디코드 유닛(24)내의 상기 발행 위치들( 및 명령 큐들(36)로의 후속하는 파이프라인 스테이지들)은 상기 파이프라인 스테이지들 내의 상기 하드웨어에 대한 상기 라인 내의 명령 동작들의 프로그램 순서를 정의한다. 정렬 유닛(16)에 의해 발행 위치로 정렬된 명령 동작은 명령 큐(36A), (36B) 내에 저장될 때까지 상기 발생 위치에 남아있다. 따라서, 제 1 발생 위치는 만약 상기 제 1 발행 위치내의 명령 동작이 프로그램 순서로 제 2 발행 위치 내의 명령 동작이전 이면, 사이 제 2 발행 위치의 이전인 것으로 나타난다. 유사하게, 제 1 발행 위치가 만약 상기 제 1 발행 위치내의 명령 동작이 프로그램 순서로 제 2 발행 위치 내이 명령 동작이후이면, 상기 제 2 발행 위치이후인 것으로 나타난다. 상기 발행 위치들 내의 명령 동작들은 상기 라인 내의 다른 명령 동작들의 이전이거나 또는 이후인 것으로 또한 나타난다.
상술된 바와 같이, 명령 동작( 또는 ROP)는 실행 코어들(40A), (40B) 내의 실행 유닛이 단일 엔트리로서 실행되도록 된 동작이다. 단순한 명령들이 단일 명령 동작에 대응할 것이고, 반면에 보다 복잡한 명령들의 다수의 명령 동작들에 대응할 것이다. 상기 보다 복잡한 명령들 중의 일부는 마이크로코드 유닛(28) 내에 마이크로코드 루틴들로서 배치될 것이다. 또한, 비-CISC 명령 세트들을 채용한 배치들은 각 명령에 대한 단일 명령 동작을 채용할 것이다(즉, 명령 및 명령 동작이 상기 배치들에서 동일하여 질 것이다). 특정 실시예에서, 라인은 6개까지의 명령들에 대응하는 8개까지의 명령 동작들로 구성될 것이다. 또한, 상기 특정의 실시예는 만약 분기 명령이 검출되면, 6개의 명령들 및/또는 8개 명령 동작들 이하로 하나의 라인을 종료시킬 것이다. 상기 라인으로의 명령 동작들에 관한 추가적인 제한들이 원하다면 채용될 것이다.
라인 예측기(12)에 의해 생성된 상기 다음 패치 주소는 분기 히스토리 테이블(18)과, 간접 주소 캐시(20) 및 리턴 스택(22)으로 전송된다. 분기 히스토리 테이블(18)은 상기 다음 패치 주소에 의해 식별된 상기 라인을 종료시키는 조건 분기 명령에게 분기 히스토리를 제공한다. 라인 예측기(12)는 분기 히스토리 테이블(18)에 의해 제공된 상기 예측을 사용하여 상기 라인을 종료시키는 조건 분기 명령이 예측되고 채택되었는가 또는 채택되지 않았는가를 판단한다. 일실시예에서, 라인 예측기(12)는 채택되거나 채택되지 않도록 선택되어지는 분기 예측을 저장할 것이고, 분기 히스토리 테이블(18)은 상기 라인 예측기 예측을 취소하고 다른 다음 패지 주소가 선택되어지도록 하는 보다 정확한 예측을 제공하는 데 사용된다. 간접 주소 캐시(20)는 자주 변화하는 간접 분기 목적지 주소들을 예측하곤 한다. 라인 예측기(12)는 다음 패치 주소로서, 이전에 생성된 간접 목적지 주소를 저장할 것이다. 간접 주소 캐시(20)는 만약 상기 대응하는 라인이 간접 분기 명령에 의해 종료되면, 라인 예측기(12)에 의해 제공된 상기 다음 패치 주소를 폐기할 것이다. 또한, 명령 동작들의 라인 내의 마지막 명령에 후속하는 주소는 만약 상기 라인이 서브루틴 호출 명령에 의해 종료되면, 상기 리턴 스택(22) 상으로 주입될 것이다. 리턴 스택(22)은 리턴 명령에 의해 종료된 라인들에 대한 가능한 다음 패치 주소로서, 상기 리턴 스택(22)의 탑에 저장된 주소를 라인 예측기(12)에 제공한다.
다음 패치 주소와 명령 동작 정보를 상술된 블록들에 제공하는 것에 추가하여, 라인 예측기(12)는 다음 패치 주소와 명령 동작 정보를 PC 사일로 및 재전송 유닛(48)로 전송하도록 된다. PC 사일로 및 재전송 유닛(48)은 상기 패치 주소와 라인 정보를 저장하고, 명령들의 순서에 따른 폐기뿐만 아니라, 예외들에 관한 명령 패칭을 재전송하는 것을 담당한다. PC 사일로 및 재전송 유닛(48)은 프로세서(10) 내에서 미결된 명령 동작들의 다수의 라인들에 대응하는 명령 동작 정보와 패치 주소를 저장하는 원형 버퍼를 구비할 것이다. 명령들의 라인을 폐기할 때, 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들의 최대는 하나의 라인에 할당될 것이다. 따라서, 각 라인 내의 첫번째의 ROP는 다수의 8인 R#로 인도될 것이다. 따라서 사용되지 않은 R#는 자동적으로 생략된다.
상술에서 다음 주소들을 예측하고 명령 동작 정보를 명령 동작들의 라인들에게 제공하는 라인 예측기(12)를 개시하였다. 상기 동작은 각 패치 주소가 라인 예측기(12)에 적중하는 동안에 발생한다. 라인 예측기(12)에서 오류(miss)를 검출하면, 정렬 유닛(16)은 상기 대응하는 명령 바이트들을 I-캐시(14)로부터 예측기 오류 디코드 유닛(26)으로 전송한다. 예측기 오류 디코드 유닛(26)은 오류인 패치 주소에 의해 나타난 상기 오프셋에서 개시한 상기 명령들을 디코드하고 명령 동작 정보의 라인과 다음 패치 주소를 생성한다. 예측기 오류 디코드 유닛(26)은 프로세서(10)가 설계된 바에 같이, 명령 동작들의 라인 상에 어떠한 제한들(예를 들면, 명령 동작들의 최대 개수, 명령들의 최대 개수, 분기 명령들의 종료 등)을 강화한다. 라인의 디코드를 완료한 때, 예측기 오류 디코드 유닛(26)은 상기 정보를 저장을 위해 라인 예측기(12)에 제공한다. 예측기 오류 디코드 유닛(26)은 명령들이 디코드되는 대로 상기 명령들을 이동시키도록 된다. 도 1에서, 상기 선택사항은 점선으로 나타난다. 다른 방법으로, 예측기 오류 디코드 유닛(26)은 명령 정보의 라인을 디코드하여 저장을 위해 라인 예측기(12)에 제공한다. 다음으로, 상기 오류인 패치 주소는 라인 예측기(12)에서 재시도되고, 적중이 검출될 것이다. 또한, 라인 예측기(12) 내의 적중은 검출될 것이고, I-캐시 내의 오류가 발생할 것이다. 상기 대응하는 명령 바이트들은 외부 인터페이스 유닛(46)을 통해 패치되고 I-캐시(14)에 저장될 것이다.
일실시예에서, 라인 예측기(12)와 I-캐시(14)는 물리적인 어드레싱(physical addressing)을 채용한다. 그러나, 예외를 검출한 때, PC 사일로 및 재전송 유닛(48)이 논리(또는 가상) 주소를 공급받을 것이다. 따라서, 상기 재전송 주소들은 라인 예측기(12)로의 표시를 위해 (상기 대응하는 명령 바이트들을 판독하기 위한 I-캐시(14)와 병렬적으로) ITB(50)에 의해 번역될 것이다. 또한, PC 사일로 및 재전송 유닛(48)은 상대적 분기 목적지 주소들과 같은 PC 상대적 연산에서의 사용을 위해 가상 예견(lookahead) PC값을 관리한다. 각 라인에 대응하는 가상 예견 PC는 ITB(50)에 의해 번역되어 상기 대응하는 물리적 주소가 라인 예측기(12)에 의해 생성된 상기 물리적 패치 주소에 대응하는 것을 확증한다. 만약 대응오류가 발생하면, 라인 예측기(12)는 상기 정확한 물리적 주소로 갱신되고 상기 정확한 명령이 패치된다. PC 사일로 및 재전송 유닛(48)은 가장 최근에 폐기된 명령들의 주소를 나타내는 폐기(retire) PC값을 관리한다. 본 실시예에서, PC 사일로 및 재전송 유닛(48)은 명령 동작들의 라인을 동시에 폐기시킨다. 따라서, PC 사일로 및 재전송 유닛(48)은 상기 라인을 나타내는 R#을 맵 유닛(30)과, 명령 큐들(36A), (36B), 및 적재/저장 유닛(42)으로 전송한다.
디코드 유닛(24)은 상술된 바와 같이, 다수의 발행 위치들에서 정렬 유닛(16)으로부터 명령 동작들을 수신하도록 된다. 디코드 유닛(24)은 병렬적으로 각 발행 위치를 따라 정렬된 (상기 명령 바이트들에 대응하는 명령 동작이 특정 발행 위치에서 생성되는 것의 표시와 함께) 상기 명령 바이트들을 디코드한다. 디코드 유닛(24)은 각 명령 동작에 대한 소스 및 목적 오퍼랜드들을 식별하고 실행 코어들(40A), (40B)에 의해 사용된 명령 동작 인코딩을 생성한다. 디코드 유닛(24)은 마이크로코드로 배치된 명령들을 위해 마이크로코드 유닛(28)으로부터 마이크로코드 루틴들을 패치하도록 된다.
일실시예에 따라, 하기의 명령 동작들은 프로세서(10)에 의해 제공된다: 부동점 덧셈(혼합 매체를 포함하여), 부동점 곱셈(혼합 매체를 포함하여), 분기, 적재. 저장 주소 생성, 및 저장 데이터. 각 명령 동작은 2개의 소스 레지스터 오퍼랜드들과 하나의 목적 레지스터 오퍼랜드까지를 채용할 것이다. 일실시예에 따라, 단일 목적 레지스터 오퍼랜드는 정수 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)은 각 논리 레지스터에 대응하는 물리적 레지스터 번호들을 저장하고, 각 논리 레지스터에 대한 상기 이송된 레지스터 스테이트를 나타낸다. 상기 대응하는 논리 레지스터를 새로운 물리적 레지스터 번호들로 갱신할 때, 설계 명칭변경 블록(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-캐시에 제공하여 메모리 데이터 동작들을 수행하도록 한다. 실행 코어들(40A), (40B)는 적재 ROP들을 실행하고 주소 ROP들을 저장하여, 상기 명령들의 주소 오퍼랜드들을 기준으로 한, 적재를 각각 생성하고 주소들을 각각 저장한다. 특히, 적재 주소들과 저장 주소들은 실행 코어들(40A), (40B)에 의하여 생성된 때 D-캐시(44)에 (실행 코어들(40A), (40B)와 D-캐시(44)간의 연결을 통하여 직접적으로) 제시된다. D-캐시(44)에 적중한 적재 주소들은 D-캐시(44)로부터 레지스터 파일들(38)로 전송되는 데이터를 발생시킨다. 반면에, 적중한 저장 주소들은 저장 큐 엔트리로 할당된다. 후속하여, 상기 저장 데이터는 저장 데이터 명령 동작(상기 저장 데이터를 레지스터 파일(38A), (38B)로부터 적재/저장 유닛(42)으로 전송하는 데 사용되는)에 의해 제공된다. 따라서, 저장물은 본 실시예에서 저장 주소 명령 동작과 저장 데이터 명령 동작으로 이루어진다. 달리 말하면, 상기 저장 주소 명령 동작과 대응하는 저장 데이터 명령 동작은 동일한 명령으로부터 유래된다. 상기 저장물은 명령이거나, 메모리 목적 오퍼랜드를 구비한 다른 명령의 내재하는 부분일 것이다. 상기 저장 명령의 폐기시에, 상기 데이터는 D-캐시(44)에 저장된다. 또한, 적재/저장 유닛(42)은 D-캐시(44)를 (외부 인터페이스(46)를 통하여) 놓치고 상기 놓친 적재/저장 동작들을 재시도하는 적재/저장 주소들을 위한 적재/저장 버퍼를 구비할 것이다. 적재/저장 유닛(42)은 추가적으로 적재/저장 메모리 종송성들을 처리하도록 한다.
도 2는 프로세서(10)의 부분들의 일실시예인 블록 다이아그램을 도시한다. 다른 실시예들도 가능하고 고려된다. 도 2의 실시예에서, 저장 주소 생성 유닛(store address generation unit: AGU)(40AA)와 적재 AGU(40AB), 및 저장 데이터 유닛(40AC)가 도시된다. 저장 AGU(40AB)와, 저장 데이터 유닛(40AC)는 실행 코어(40A)(도 1에 도시된) 내에 포함된다. 실행 코어(40B)는 일실시예에서 단순하게 구성될 수 있다. 또한, 실행 코어(40B)는 도 2에 도시된 하나 이상의 실행 유닛들을 생략할 것이다. 또한, 도 2에는 실행 코어(40A)에 포함되는 저장 번역 버퍼(store translation buffer: TB)(40AD)와 적재 TB(40AE)가 도시된다. 적재/저장 큐(60)와, 전송 논리(62), 및 저장 큐(64)를 구비한 적재/저장 유닛(42)와, D-캐시(44)가 도시된다. 결론적으로, 회전/다중화(rotate/mux) 회로가 도시된다. 저장 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)와, 전송 논리(620, 및 데이터 캐시(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)는 실행되었으나 폐기되지 않은 저장물들을 보유한다. 따라서, 저장 큐(640는 저장 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)에 제공한다. 만약 전송 논리(62)가 적재 ROP가 저장 큐(64)내의 저장물로부터 전송된 데이터를 수신하면, 전송 논리(62)는 회전/다중화 회로(66)에 신호를 보내어서 저장 큐(64)로부터 제공된 상기 데이터를 선택하도록 한다. 또한, 저장 큐(64)로부터 제공된 상기 데이터는 메모리 순서로 이루어진다(즉, 상기 바이트들은 대응하는 저장물들의 주소에 따라 정렬된 바이트 로케이션들 내의 저장 큐(64)에 저장된다). 사익 데이터는 회전되어 레지스터 파일들(38A), (38B)내의 저장을 위해 적절하게 정렬된다. 전송 논리(62)는 상기 신호를 또한 제공한다. 결국, 만약 전송 논리(62)가 적재 ROP가 저장 큐(64)로부터 전송된 데이터를 수신하지 않았으면, 전송 논리(62)는 회전/다중화 회로(66)에 신호를 보내어 데이터 캐시(44)의 출력을 선택하도록 한다.
적재 ROP는 상기 적재 ROP에 의해 접근된 저장 데이터를 제공하는 상기 저장 데이터 ROP이전에 실행될 것이다. 상기의 경우에, 저장 큐(64)는 접근된 바이트들 대신에 상기 저장 데이터 ROP의 R#를 제공할 것이다. 상기 적재 ROP는 상기 저장 데이터 ROP의 스케줄링 이후의 실행동안에 재스케줄링될 것이다. 적재/저장 유닛(42)은 저장 데이터가 상기 적재(또한 어느 후속하는 스케줄링된 ROP들)의 재스케줄링을 허용하는 상기 적재의 전송에 이용가능하지 않을 때 명령 큐들(36A), (36B)에 신호를 보낸다. 또한, 맵 유닛(30)은 상기 저장 데이터가 사용가능하지 않은 경우인 적재 적중 저장 경우들(load hit store cases)을 예측하도록 된다. 상기 저장 데이터 ROP의 R#는 PC 사일로(48)에 제공되고, 상기 PC 사일로(48)는 상기 저장 명령에 관련된 정보를 맵 유닛(30)에 제공하여 후속하는 적재 적중 저장(상기 저장 데이터가 사용가능하지 않은) 시나리오들을 예측하는 데 사용한다.
상술된 바에 따라 적재 주소들 및 저장 주소들을 저장 큐(64)에 제공하는 것이 아니라, 적재 및 저장 주소들은 데이터 캐시(44)에 제시되어 데이터 캐시(44) 내의 적중이 검출되었는가를 판단하도록 한다. 적재 ROP들에 있어서, 만약 데이터 캐시(44)내의 적중이 검출되면, 데이터는 데이터 캐시(44)에서부터 레지스터 파일들(38A), (38B)로 전송된다. 만약 적재 ROP가 데이터 캐시(44)를 놓치면(오류이면), 상기 적재 ROP는 후속하는 재시도 동안에( 및 만약 상기 적재 ROP가 적재/저장 큐(60)의 헤드에 도달하고, 더 빠른 메모리 동작으로부터 캐시 필(cache fill)을 통하여 d-캐시(44) 내의 적중이 됨이 없이 더 이상 추측되지 않는 다면, 메모리로부터의 놓친(오류인) 캐시 라인을 패치하기 위해 외부 인터페이스 유닛(46)으로의 전송 동안에) 적재/저장 큐(60)로 저장된다. 상기 적재 ROP가 데이터 캐시(44)에 재시도된 때, 전송 논리(62)로 이동되어 저장 큐(64)내의 저장 데이터가 상기 적재 ROP로 전송되었는가를 판단하도록 한다. 적중/실패(hit/miss) 표시는 상기 저장이 적재/저장 큐(60)내의 엔트리(적재 ROP들과 유사한)로 할당되었는가를 판단한다. 그러나, 저장 주소 ROP들은 적중/오류 상태와 상관없이 저장큐(64)로 할당된다. 많은 수의 엔트리들이 채용되면, 적재/저장 큐(60)는 128 엔트리들로 구성되고, 저장 큐(64)는 일실시예에서 64 엔트리들로 구성된다.
PC 사일로(48)는 폐기 콘트롤 신호들을 저장 큐(64)에 제공한다. 상술된 바와 같이, 본 실시예에서, 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)를 포함한다. 또한, 한 쌍의 비트 벡터 생성기들(70A), (70B)이 도시된다. 도 3은 간략한 도면으로서, 하나의 적재 주소에 대한 데이터의 전송을 도시한다. 도 2에 도시된 바와 같이, 저장 큐(64)는 3개까지의 적재 ROP들(각각 실행 코어(40A), (40B)로부터의 각 하나씩과, 적재/지정 큐(60)로부터 재시도된 적재들을 위한 하나)에 대한 적재 데이터를 제공하도록 된다. 유사한 하드웨어가 다른 적재 ROP들에 대하여 채용될 것이다. 본 실시예에서, 적재 정보는 적재 TB(40AE)로부터 및, 저장 TB(40AD)로부터의 저장 주소 정보로부터 수신된 것으로 나타날 것이다. 저장 데이터 정보는 저장 데이터 유닛(40AC)으로부터 수신된 것으로 나타날 것이다. 또한, 상기 주소들은 가상 주소들이 전송 목적을 위해 사용되는 실시예에서의 AGU들로부터 직접적으로 수신될 것이다.
비트 벡터 생성기(70A)는 상기 적재 주소의 가장 적게 중요한 소정의 개수의 비트들과, 적재 TB(40AE)로부터의 상기 적재의 크기(즉, 상기 적재 주소에서 시작하는 접근된 바이트들의 개수)의 표시를 수신하도록 연결되고, 추가적으로 전송 논리(62)에 연결된다. 유사하게, 비트 벡터 생성기(70B)는 상기 저장 주소의 가장 적게 중요한 소정의 개수의 비트들과, 저장 TB(40AD)로부터의 상기 저장물의 크기를 수신하도록 연결되고, 저장 비트 벡터 큐(64B)에 연결된다. 여러 실시예에서 적재물들이 하나의 크기일 때, 크기 정보는 생략될 것이다. 저장 비트 벡터 큐(60B)와 저장 주소 큐(64A)는 전송 논리(62)에 연결되고, 상기 전송 논리(62)는 일련의 다중화기(muxes)(72A) 내지 (72H) 및 회전/다중화 회로(66)에 추가적으로 연결된다. 다중화기(72A0, (72H)는 회전/다중화 회로(66)에 연결되고, 저장 데이터 큐(64C)에 연결된다. 저장 데이터 큐(64C)는 폐기되는 R#를 수신하도록 PC 사일로(48)에 연결될 뿐만 아니라, 저장 데이터 유닛(70AC)으로부터의 대응하는 R#와 저장 데이터를수신하도록 연결된다. 또한, 저장 데이터 큐(64C)는 저장 TB(40AD)로부터의 저장 주소 ROP에 대응하는 R#를 수신하도록 연결된다. 저장 주소 큐(64A)는 저장 TB(40AD)로부터의 저장 주소와, 적재 TB(40AE)로부터의 적재 주소를 수신하도록 연결된다. 특히, 저장 주소 큐(64A)는 비트 벡터 생성기들(70A)에 의해 수신된 가장 적게 중요한 비트들을 제외한 주소들을 수신하도록 연결된다.
비트 벡터 생성기(70A), (70B)에 의해 수신된 소정의 개수의 가장 적게 중요한 비트들은 접근되거나 갱신된 바이트들이 상주하는 바이트들의 범위를 정의한다. 달리 말하면, 상기 가장 적게 중요한 비트들을 제외한 주소는 바이트들의 상기 범위내의 일련의 바이트들과 동일하다. 상기 비트는, 만약 상기 바이트가 상기 대응하는 적재 또는 저장에 대한 응답으로 접근되면/갱신되면, 세트되고, 만약 상기 바이트가 상기 대응하는 적재 또는 저장에 대한 응답으로 접근되지/갱신되지 않으면, 클리어된다. 비트 벡터 생성기(70B)에 의해 생성된 저장 비트 벡터는 저장 비트 벡터 큐(64B)에 저장된다. 따라서, 저장 비트 벡터는 저장 큐(64)에 제시된 각 저장 주소에 대하여 생성된다. 비트 벡터 생성기(70A)에 의해 생성된 적재 비트 벡터들은 전송 논리(62)에 제공된다.
상기 적재 주소의 남은 비트들(상기 적재 비트 벡터를 형성하는 데 사용되는 상기 비트들을 제외하고)은 저장 주소 큐(64A)에 제공된다. 상기 적재 주소는 저장 주소 큐(64A)에 저장된 상기 저장 주소들과 비교된다. 저장 주소 큐(64A)는 예를 들면, 상기 저장 주소 큐(64A)내에 저장된 상기 저장 주소들에 반대되는 적재 주소들에 대한 내용 주소화 기억장치(content addressable memory: CAM)일 것이다. 다른 구성들과 가능할 것이다. 제공된 적재 주소에 맞는 저장 주소를 포함하는 저장 주소 큐(64A) 내의 각 엔트리는 "적중" 신호를 전송 논리(62)로 설정한다.
상기 적재 비트 벡터와, 저장 주소 큐(64A)로부터의 적중 신호들에 추가하여, 전송 논리(62)는 저장 큐(64) 내의 저장물들에 대응하는 상기 저장 비트 벡터들을 수신한다. 전송 논리(62)는 각 바이트를 독립적으로 처리하고, 상기 적재 비트 벡터 내의 대응하는 비트를 검사하여, 상기 바이트가 접근되는가를 판단하고, 각 저장 비트 벡터내의 대응하는 비트를 검사하여, 상기 바이트가 대응하는 저장물에 의해 갱신되었는가를 판단한다. 바이트가 갱신되었음을 (저장 주소 큐(64A)로부터의 대응하는 설정된 적중 신호와, 상기 저장 비트 벡터 내의 대응하는 비트를 통하여) 표시하는 각 저장 큐 엔트리는 전송 논리(62) 내의 픽 원(pick one) 회로에 참여하고, 상기 픽 원 회로는 상기 저장 큐에 저장물들의 프로그램 순서에 따라 가장 최근에 갱신된 바이트를 선택한다. 상기 선택된 바이트는 전송 논리(62)에 의해 다중화기(72)로 삽입된 선택 신호들을 통하여 저장 데이터 큐(64C)로부터 검색된다. 각 다중화기(72A) 내지 (72H)은 저장 큐(64)내의 다른 바이트에 대응한다. 예를 들면, 다중화기(72A)는 전송 논리(62)의 제어 하에서 저장 큐(64) 내의 각 엔트리의 바이트 0 위치로부터 적재 데이터의 바이트 0을 선택한다. 유사하게, 다중화기(72H)는 전송 논리(62)의 제어 하에서 저장 큐(64)내의 각 엔트리의 바이트 7 위치로부터의 상기 적재 데이터의 바이트 7을 선택한다. 다른 바이트 위치들은 다른 다중화기(도 3에서 간략화로 인하여 도시되지 않음)에 의해 선택된다. 추가적으로, 전송 논리(62)는 적재 데이터 바이트들이 저장 큐(64)로부터 제공되었는가를 판단하여, 회전/다중화 회로(66)로의 입력들로서, 다중화기(72)로부터 제공된 상기 데이터 바이트들을 선택하도록 콘트롤들을 회전/다중화 회로(66)에 제공한다.
회전 콘트롤들은 전송 논리(62)에 의해 제공된다. 데이터 바이트들은 메모리 순서대로(즉, 본 실시예에서의 8 바이트 데이터 큐 엔트리들에 대한 8 바이트 경계와 같이, 상기 큐 엔트리의 크기인 경계로 정렬된 메모리 블록 내의 메모리 로케이션들에 대응하는 큐 엔트리 내의 바이트 로케이션들로) 저장 큐(64C)에 저장된다. 메모리로의 적재물 및 저장물이 상기 메모리 로케이션들에 관한 어느 정렬을 구비하면, 상기 레지스터 내의 바이트 로케이션들은 고정된다. 따라서, 다중화기(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 대응(match)은 상기 유효 비트를 세트시킬 것이다. 만약 상기 데이터가 유효하지 않으면, 저장 데이터 큐(64C)는 상기 데이터 대신에 다중화기(72A) 내지 (72H)로의 입력으로서, 저장 데이터 동작의 R#을 제공할 것이다. 다른 면으로, 만약 상기 데이터가 유효하지 않으면, R#을 자동적으로 제공하는 저장 데이터 큐(64C) 내의 각 바이트 로케이션에 R#가 저장될 것이다.
본 실시예에서, 비트 벡터는 상기 저장 데이터 큐가 엔트리마다 8바이트까지의 저장 데이터를 저장하는 때, 16비트를 포함한다. 본 실시예는 저장물마다 8바이트까지의 저장 데이터를 지원한다. 그러나, 16비트의 비트 벡터는 정렬되지 않은 8바이트 값들의 명확한 지원을 허용하도록 지원될 것이다. 달리 말하면, 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은 상기 라인을 식별하는 R#의 일부분과, PC 사일로(48)에 의해 제공된 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)시킬 때 제공된다. 하나의 인에이블 신호는 상기 큐 엔트리 내의 각 바이트를 위해 제공된다. 만약 상기 바이트에 대한 상기 인에이블 신호가 설정되면, 상기 큐 엔트리는 상기 큐 엔트리에 연결된 상기 버스 상의 상기 바이트를 구동시킨다. 만약 상기 인에이블 신호가 해제되면, 상기 큐 엔트리는 상기 큐 엔트리에 연결된 상기 버스 상의 바이트를 구동하지 않는다. 상기 구조는 일반적으로 "와이어 OR(wired OR)" 구조로 언급된다.
도 5는 전송 논리(62)의 일실시예의 일부분을 나타내는 블록 다이아그램을 도시한다. 다른 실시예들도 가능하고 고려된다. 도 5의 실시예에서, 전송 논리(62)는 다수의 픽 원 회로들(적재물에 전송되는 각 바이트에 대한 하나, 예를 들면, 특정의 실시예에서 8개의 픽 원 회로들)을 포함한다. 예를 들면, 도 5에 픽 원 회로들(80A), (80B)가 도시된다. 또한, 조합 논리가 전송 논리(62)에 제공되어 저장 주소 큐(64C)에 대한 적중 신호들뿐만 아니라, 비트 벡터 생성기(70A)와 저장 비트 벡터 큐(64B)로부터의 상기 비트 벡터들을 처리한다. 예를 들면, 조합 논리(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)는 상기 적재 데이터의 바이트 1을 제공하도록 연결된 다중화기에게 선택 신호들 또는 각 큐 엔트리(도 4)의 바이트 1에 대한 인에이블 신호들을 제공할 것이다. 일실시예에서, 저장 큐(64)는 헤드 포인터와, 테일 포인터(tail pointer)를 구비한 원형 선입 선출(first-in, first-out: FIFO) 버퍼로서 구현되고, 상기 헤드 포인터는 상기 큐내의 가장 오래된 엔트리를 나타내고, 상기 테일 포인터는 상기 가장 최근의 엔트리를 나타낸다. 엔트리들이 삭제되는 것과 같이 엔트리들을 이동시키는 대신에, 상기 헤드 포인터와 테일 포인터를 증가시키고 감소시킴으로써 상기 큐로 저장물들을 부가하고 삭제할 수 있다. 픽 원 회로들(80A), (80B)는 상기 실시예에서 상기 헤드 포인터와 테일 포인터를 수신하여, 테일 포인터에 의해 나타나는 상기 엔트리에 대응하는 상기 신호로부터의 조합 논리(82A) 내지 (82D)와 같은 조합 논리로부터의 입력 신호들로부터 상기 헤드 포인터에 의해 나타난 상기 엔트리에 대응하는 상기 신호까지를 검색한다. 상기 실시예에서, 저장물은 프로그램 순서대로 저장 큐(64)에 할당될 것이다. 다른 방법으로, R#가 사용되어 상기 저장 큐 내의 상기 저장물들의 순서를 판단한다.
비록 도 5는 상기 저장 큐로부터의 바이트들의 선택에 참여하는 저장 큐 엔트리들의 논리적 결정을 개시하는 조합 논리(82A) 내지 (82D)를 도시하고 있으나, 어느 적절한 논리도 사용될 수 있다. 상기 입력 신호(설정된/해제된)들의 의미들은 변경되어 선택적인 조합 논리를 제공하고, 논리적으로 균등인 일련의 논리 게이트들이 채용될 것이다. 추가적인 논리 블록(도 5에 도시되지 않음)은 회전/다중화 회로(66_에 대한 선택 및 회전 콘트롤들을 생성하기 위해 채용된다. 상기 선택 콘트롤들은 저장 큐(64)로부터의 상기 바이트들의 선택을 기준으로 하고, 상기 회전 콘트롤들은 가장 적게 중요한 적재 주소 비트들(메모리 내 및 저장 데이터 큐(64C) 내에서 바이트들의 정렬을 정의하는)과, 상기 적재물의 크기(상기 목적지 레지스터로 전송되는 바이트들의 개수를 정의하는)를 기준으로 할 것이다.
도 6은 일련의 저장 큐 엔트리들로부터의 전송의 일실시예를 도시한다. 저장 주소 큐(64A)와, 저장 비트 벡터 큐(64B), 및 저장 데이터 큐(64C)가 도시된다. 실시예를 단순화하기 위해, 5개의 엔트리들이 도시된다. 그러나, 상기 저장 큐는 적절한 개수의 엔트리들을 포함한다. 예를 들면, 저장 큐(64)는 일실시예에서 64개의 엔트리들을 포함한다. 저장 주소 큐(64A)는 대응하는 엔트리들(94A) 내지 (94E)를 포함한다. 저장 비트 벡터 큐(64B)는 대응하는 엔트리들(92A) 내지 (92E)를 포함하고, 저장 데이터 큐(62C)는 대응하는 엔트리들(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의 갱신을 나타낸다. 그러나, 저장 주소 큐 엔트리(90C)내의 상기 주소(비트 벡터 큐 엔트리(92C)에 대응하는)는 상기 주소 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이다. 따라서, 상기 적재물에 대한 전송된 데이터는 76 DD DE F0(16진수)이다. 상기 값 76은 엔트리(94E)의 바이트 위치 3으로부터 유래된다. 상기 값 DD는 엔트리(94D)의 바이트 위치 2로부터 유래된다. 상기 값들 DE 및 F0은 엔트리(94B)의 각각 바이트 위치 1과 0으로부터 유래된다. 상기 값들은 상기 예에서 저장 데이터 큐(64C) 내의 굵은 글자로 나타난다.
상기 실시예에서 나타난 바와 같이, 상기 적재물에 의해 접근된 상기 바이트들은 비록 상기 바이트들이 2개 이상의 다른 저장물로부터 유래되었을지라도 어셈블될 것이다. 장점으로서, 적재 데이터는 임의의 개수의 저장물로부터 정확하게 전송될 것이다. 예를 들면, 전송은 0 저장물들(만약 저장 큐(64)가 비어있거나, 특정의 저장물에 대한 저장 큐(64)에서 아무런 적중도 검출되지 않으면), 1 저장물(만약 상기 저장물이 상기 적재물에 의해 접근된 각 바이트를 갱신하는 가장 최신의 것이면), N 저장물들(N이 상기 적재물에 의해 접근된 바이트들의 개수인 때)로부터 발생할 것이다.
도 7은 프로세서(10)를 포함한 컴퓨터 시스템(200)의 일실시예의 블록 다이아그램을 도시하고, 상기 프로세서(10)는 버스 브리지(202)를 통하여 다양한 시스템 구성요소들과 연결된다. 다른 실시예들도 가능하고 고려된다. 도시된 시스템에서, 주 메모리(204)는 메모리 버스(206)를 통하여 버스 브리지(202)에 연결되고, 그래픽 콘트롤러(208)는 AGP 버스(210)를 통하여 버스 브리지(202)에 연결된다. 결국, 다수의 PCI 디바이스들(212A),(212B)는 PCI 버스(214)를 통하여 버스 브리지(202)에 연결된다. 제 2 버스 브리지(216)는 추가적으로 제공되어 EISA/ISA 버스(220)를 통한여 하나 이상의 EISA 또는 ISA 디바이스들(218)로의 전기적 인터페이스를 수용하도록 한다. 프로세서(10)는 외부 인터페이스(52)를 통하여 버스 브리지(202)와 연결된다.
버스 브리지(202)는 프로세서(10), 주 메모리(204), 그래픽 콘트롤러(208), 그리고 PCI 버스(214)에 부착된 디바이스들 간의 인터페이스를 제공한다. 버스 브리지(202)와 연결된 어떤 디바이스에서 연산이 수신되면, 버스 브리지(202)는 상기 연산의 목표(예를 들어, 특정 디바이스 또는 PCI 버스(214)의 경우, 그 목표가 PCI 버스(214)에 있는 특정 디바이스)를 식별한다. 버스 브리지(202)는 상기 연산을 상기 목표 디바이스로 전달한다. 버스 브리지(202)는 일반적으로 소스 디바이스에 의해 사용되는 프로토콜 또는 상기 목표 디바이스 혹은 버스에 의해 사용되는 프로토콜로부터 연산을 해석한다.
PCI 버스(214)에서 ISA/EISA 버스에 대한 인터페이스를 부가적으로 제공하기 위해서, 원한다면 제 2버스 브리지(216)는 부가적인 기능을 포함할 수 있다. 예를 들어, 일 실시예에 있어서, 제 2버스 브리지(216)는 PCI 버스(214)에 대한 소유권을 중재하기(arbitrating) 위해서 마스터 PCI 중재기(master PCI arbiter)(미도시)를 포함할 수 있다. 제 2버스 브리지(216)의 외부 또는 내부적으로 포함되는 입출력 콘트롤러(미도시) 역시 원한다면 키보드 및 마우스(222) 그리고 다양한 직렬 및 병렬 포트들을 선택적으로 지원하도록 컴퓨터 시스템(200) 내에 포함될 수 있다. 다른 실시예에서는, 외부 캐시 유닛(미도시)이 프로세서(10)와 버스 브리지(202) 간의 CPU 버스(224)와 더 연결될 수 있다. 대안적으로, 상기 외부 캐시는 버스 브리지(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) 상에 문자나 그림들의 표시를 제어하기 위해 제공된다. 그래픽 콘트롤러(208)는 당 업계에서 잘 알려진 바와 같이 3차원 데이터 구조들을 주 메모리(204)에서 효율적으로 이동시킬 수 있도록 한 전형적인 그래픽 가속기로 구체화 될 수 있다. 그래서 그래픽 콘트롤러(208)는 AGP 버스(210)의 마스터일 수 있고, 즉, 버스 브리지(202) 내의 목표 인터페이스에 대해 억세스를 요청 및 수신할 수 있어 주 메모리(204)에 대한 억세스들 획득할 수 있다. 전용 그래픽 버스는 주 메모리(204)로 부터 빠른 검색을 수용한다. 특정한 연산들에서, 그래픽 콘트롤러(208)는 AGP 버스(210)상에서 PCI 프로토콜 처리(transaction)들을 생성하도록 더 구성될 수 있다. 그래서, 버스 브리지(202)의 상기 AGP 인터페이스는 AGP 프로토콜 처리 및 PCI 프로토콜 목표 및 초기화 처리들 모두를 지원하기 위한 기능을 포함할 수 있다. 표시부(26)는 그림과 문자가 표시될 수 있는 임의의 전자 표시부이다. 적절한 표시부(226)는 캐소드 광선 튜브("CRT"), 액정 표시기("LCD")등을 포함한다.
AGP, PCI 및 ISA 또는 EISA 버스들이 상술된 설명에서 예로서 사용되는 경우, 어느 버스 아키텍쳐는 원하면 교체되어질 수 있다. 또한, 컴퓨터 시스템(200)은 추가적인 프로세서들(예를 들면, 컴퓨터 시스템(200)의 선택적 구성요소로서 도시된 프로세서(10a))을 포함하는 다중처리 컴퓨터 시스템일 것이다. 프로세서(10a)는 프로세서(10)와 유사한 것이다. 특히, 프로세서(10a)는 프로세서(10)의 동일한 프로세서일 것이다. 프로세서(10a)는 프로세서(10)(도 7에 도시된)와 외부 인터페이스(52)를 공유하거나, 독립 버스를 통하여 버스 브리지(202)에 연결된다.
다양한 신호들이 상기에서 설정되거나 해제될 수 있다. 특정 신호는 논리 1의 값을 전송할 때 설정되고, 논리 0의 값을 전송할 때 해제되도록 정의될 수 있다. 다른 방법으로, 특정 신호는 논리 0의 값을 전송할 때 설정되고, 논리 1의 값을 전송할 때 해제되도록 정의할 수도 있다. 특정 신호에 적용되는 정의는 설계상의 선택의 문제이다.
본 발명은 프로세서들과 컴퓨터 시스템의 분야에서 적용될 수 있다.
수많은 변형과 변경들이 상술된 개시를 충분히 이해하는 종래 기술에 익숙한 사람들에게는 명백할 것이다. 하기의 청구항들은 그러한 변경들과 변형들을 포함하도록 해석되어야 할 것이다.

Claims (18)

  1. 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법에 있어서, 상기 방법은:
    상기 저장 큐(64) 내의 제 1 저장 큐 엔트리로부터 상기 적재물에 의해 접근된 제 1 바이트를 선택하는 단계와, 상기 제 1 저장 큐 엔트리에 대응하는 제 1 저장물은 프로그램 순서로 상기 제 1 바이트를 가장 최신으로 갱신하고;
    상기 저장 큐(64) 내의 제 2 저장 큐 엔트리로부터 상기 적재물에 의해 접근된 제 2 바이트를 선택하는 단계를 포함하고, 상기 제 2 저장 큐 엔트리는 사이 제 1 저장 큐 엔트리와 상이하고, 상기 제 2 저장 큐 엔트리에 대응하는 제 2 저장물은 상기 제 2 바이트를 프로그램 순서로 가장 최신으로 갱신하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  2. 제 1 항에 있어서,
    상기 제 2 바이트를 선택하는 단계는 상기 제 1 바이트의 선택 단계와 독립적인 제 2 바이트를 선택하는 단계를 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  3. 제 1 항에 있어서,
    상기 방법은 상기 적재물에 대응하는 적재 주소의 소정의 개수의 가장 적게중요한 비트들에 의해 정의된 소정의 범위 내의 각 바이트에 대응하는 비트를 구비하는 적재 비트 벡터를 생성하는 단계로, 상기 비트는 대응하는 바이트가 상기 적재물에 의해 접근되었는지의 여부를 나타내고;
    상기 제 1 저장물에 대응하는 제 1 저장 주소의 상기 소정의 개수의 가장 적게 중요한 비트들에 의해 정의된 소정의 범위 내의 각 바이트에 대응하는 비트를 구비한 제 1 저장 비트 벡터를 생성하는 단계로, 상기 비트는 대응하는 바이트가 상기 제 1 저장물에 의해 갱신되었는지의 여부를 나타내고;
    상기 제 2 저장물에 대응하는 제 2 저장 주소의 상기 소정의 개수의 가장 적게 중요한 비트들에 의해 정의된 소정의 범위내의 각 바이트에 대응하는 비트를 구비하는 제 2 저장 비트 벡터를 생성하는 단계를 포함하고, 상기 비트는 대응하는 바이트가 상기 제 2 저장물에 의해 갱신되었는지의 여부를 나타내는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  4. 제 3 항에 있어서,
    상기 제 1 바이트를 선택하는 단계는:
    상기 제 1 바이트가 상기 적재물에 의해 접근되었는가를 판단하기 위해 상기 적재 비트 벡터 내의 대응하는 비트를 검사하는 단계 및;
    상기 제 1 저장물이 상기 제 1 바이트를 갱신하였는가를 판단하기 위해 상기 제 1 저장 비트 벡터 내의 대응하는 비트를 검사하는 단계를 포함하고;
    상기 제 2 바이트를 선택하는 단계는:
    상기 제 2 바이트가 상기 적재물에 의해 접근되었는가를 판단하기 위해 상기 적재 비트 벡터 내의 대응하는 비트를 검사하는 단계 및;
    상기 제 2 저장물이 상기 제 2 바이트를 갱신하였는가를 판단하기 위해 상기 제 2 저장 비트 벡터 내의 대응하는 비트를 검사하는 단계를 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  5. 제 4 항에 있어서,
    상기 방법은: 상기 소정의 개수의 가장 적게 중요한 비트들을 제외한 상기 적재 주소와 상기 제 1 저장 주소를 비교하는 단계와, 상기 제 1 바이트를 선택하는 단계는 상기 비교 단계에 응답하여 실행되고;
    상기 소정의 개수의 가장 적게 중요한 비트들을 제외한 상기 적재 주소와 상기 제 2 저장 주소를 비교하는 단계를 포함하고, 상기 제 2 바이트를 선택하는 단계는 상기 비교 단계에 대한 응답으로 실행되는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  6. 제 3 항에 있어서,
    상기 방법은 상기 제 1 저장 큐 엔트리 내에 상기 제 1 저장 비트를 저장하는 단계 및, 상기 제 2 저장 큐 엔트리 내에 상기 제 2 저장 비트 벡터를 저장하는 단계를 추가적으로 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  7. 제 2 항에 있어서,
    상기 방법은 상기 제 1 바이트를 선택하는 단계와 상기 제 2 바이트를 선택하는 단계와 독립적으로, 상기 저장 큐로부터 상기 적재물에 의해 접근된 제 3 바이트를 선택하는 단계를 추가적으로 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  8. 제 7 항에 있어서,
    상기 제 3 바이트를 선택하는 단계는 상기 제 1 저장물이 프로그램 순서로 상기 제 3 바이트를 가장 최신으로 갱신하였는지의 판단에 대한 응답으로 상기 제 1 저장 큐 엔트리로부터 상기 제 3 바이트를 선택하는 단계를 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  9. 제 7 항에 있어서,
    상기 제 3 바이트를 선택하는 단계는 상기 제 2 저장물이 프로그램 순서로 상기 제 3 바이트를 가장 최신으로 갱신하였는지의 판단에 대한 응답으로 상기 제 2 저장 큐 엔트리로부터 상기 제 3 바이트를 선택하는 단계를 포함하는 것을 특징으로 하는 저장 큐(64)로부터 적재물에 의해 접근된 저장 데이터를 전송하는 방법.
  10. 데이터 캐시(44)로 아직 폐기되지 않은 저장물들에 대응하는 데이터와 주소들을 저장하도록 된 저장 큐(64) 및;
    상기 저장 큐(64)에 연결되고 적재 주소를 수신하도록 된 전송 논리(62)를 포함하고, 상기 전송 논리(62)는 상기 저장 큐(64)에 저장된 상기 저장물들 중의 하나가 상기 적재 주소에 대응하는 적재물에 의해 접근된 다수의 바이트들 중의 각각의 하나 주에서 가장 최신으로 갱신되었는지를 판단하도록 되고, 상기 전송 논리는 상기 저장 큐(64) 내의 하나의 저장물로부터 상기 다수의 바이트들 중의 적어도 하나와, 상기 저장 큐(64) 내의 다른 저장물로부터 상기 다수의 바이트들 중의 다른 하나를 선택하도록 되는 것을 특징으로 하는 적재/저장 유닛(42).
  11. 제 10 항에 있어서,
    상기 전송 논리(62)는 상기 다수의 바이트들 중의 각각의 다른 하나를 선택하는 것과 독립적으로 상기 다수의 바이트들 중의 각 하나를 선택하도록 되는 것을 특징으로 하는 적재/저장 유닛(42).
  12. 제 10 항에 있어서,
    상기 적재/저장 유닛(42)은: 상기 저장 큐(64)에 연결되어 각 저장 주소의 다수의 가장 적게 중요한 비트들을 수신하도록 되는 제 1 비트 벡터 생성기(70B)와, 상기 제 1 비트 벡터 생성기(70B)는 상기 각 저장 주소에 대응하는 저장 비트 벡터를 생성하도록 되고, 상기 저장 비트 벡터의 각 비트는 바이트에 대응하고, 상기 바이트가 상기 저장물에 의해 갱신되었음을 나타내고, 상기 적재/저장 유닛(42)은 상기 저장 큐(64) 내의 상기 저장 비트 벡터를 저장하도록 되고;
    상기 전송 논리(62)에 연결되고 상기 적재 주소의 다수의 가장 적재 중요한 비트들을 수신하도록 된 제 2 비트 벡터 생성기(70A)를 구비하고, 상기 제 2 비트 벡터 생성기(70A)는 상기 적재 주소에 대응하는 적재 비트 벡터를 생성하도록 되고, 상기 적재 비트 벡터의 각 비트는 바이트에 대응하고, 상기 바이트가 상기 적재 주소에 대응하는 적재물에 의해 접근되었음을 나타내고.
    상기 전송 논리(62)는 상기 적재 주소(상기 다수의 가장 적게 중요한 비트들을 제외한)와 상기 저장 주소(상기 다수의 가장 적게 중요한 비트들을 제외한)를 비교하여 상기 적재물에 의해 접근된 각 바이트가 가장 최신으로 갱신되었는가를 판단하는 결과와, 상기 적재 비트 벡터와 상기 저장 비트 벡터를 검사하도록 되는 것을 특징으로 하는 적재/저장 유닛(42).
  13. 프로세서(10)에 있어서,
    하나 이상의 주소 생성 유닛들(40AA)를 구비하는 적어도 하나의 실행 코어(40A)와, 상기 주소 생성 유닛(40AA)은 적재물들에 대응하는 적재 주소들과, 저장물에 대응하는 저장 주소들을 생성하도록 되고;
    상기 실행 코어(40A)에 연결된 적재/저장 유닛(42)으로 구성되고, 상기 적재/저장 유닛(42)은 상기 프로세서(10) 내에서 미결인 저장물들에 대한 대응하는 저장 데이터와 상기 저장 주소들을 저장하도록 되고, 상기 적재/저장 유닛(42)은 만약 상기 적재물들에 대응하는 저장 데이터가 상기 저장 큐(64)에 저장되었으면,상기 적재 주소들을 수신하여 상기 저장 큐(64)로부터 상기 적재물들에 대응하는 저장 데이터를 전송하도록 되고, 상기 적재/저장 유닛(42)은 상기 저장 큐(64) 내의 특정 저장물을 선택하도록 되고, 상기 저장 큐(64)로부터 특정 적재물에 의해 접근된 각 바이트에 대한 한 바이트 한 바이트(a byte by byte) 기준으로 데이터를 전송하는 것을 특징으로 하는 프로세서.
  14. 제 13 항에 있어서,
    상기 실행 코어(40A)는 저장 데이터를 상기 적재/저장 유닛(42)으로 전송하도록 된 저장 데이터 유닛(40AC)을 추가적으로 구비하고, 상기 저장 데이터 유닛(40AC)은 저장 데이터 명령 동작의 실행에 대한 응답으로 저장 데이터를 전송하도록 되는 것을 특징으로 하는 프로세서.
  15. 제 14 항에 있어서,
    상기 하나 이상의 주소 생성 유닛들(40AA)은 저장 주소 명령 동작에 대한 응답으로 상기 저장 주소를 생성하도록 된 저장 주소 생성 유닛(40AA)을 구비하는 것을 특징으로 하는 프로세서.
  16. 제 15 항에 있어서,
    상기 프로세서(10)는 동일 명령으로부터 상기 저장 주소 명령 동작과 상기 저장 데이터 명령 동작을 유래하도록 하는 것을 특징으로 하는 프로세서.
  17. 제 13 항에 있어서,
    상기 프로세서(10)는 상기 실행 코어(40A)와 상기 적재/저장 유닛(42)에 연결된 데이터 캐시(44)를 추가적으로 구비하고, 상기 데이터 캐시(44)는 상기 저장 큐(64) 내의 상기 데이터의 결핍에 대한 응답으로 상기 특정 적재물에 의해 접근된 데이터를 제공하도록 되는 것을 특징으로 하는 프로세서.
  18. 제 13 항에 있어서,
    상기 적재/저장 유닛(42)은 상기 특정 저장물에 대응하는 저장 비트 벡터를 생성하도록 되고, 상기 저장 비트 벡터의 각각의 비트는 바이트에 대응하고 상기 바이트가 상기 특정 저장물에 의해 갱신되었는지의 여부를 나타내고, 상기 적재/저장 유닛(42)은 상기 저장 큐(64) 내의 상기 저장 비트 벡터를 저장하도록 되고, 상기 적재/저장 유닛(42)은 상기 특정 적재물에 대응하는 적재 비트 벡터를 생성하도록 되고, 상기 적재 비트 벡터의 각각의 비트는 바이트에 대응하고 상기 바이트가 상기 특정 적재물에 의해 접근되는지의 여부를 나타내는 것을 특징으로 하는 프로세서.
KR1020017003691A 1998-09-22 1999-04-03 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템 KR100626858B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
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
US09/158,465 1998-09-22

Publications (2)

Publication Number Publication Date
KR20010073182A true KR20010073182A (ko) 2001-07-31
KR100626858B1 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 (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU1634600A (en) * 1998-12-30 2000-07-24 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
US20070288725A1 (en) * 2006-06-07 2007-12-13 Luick David A A Fast and Inexpensive Store-Load Conflict Scheduling and Forwarding Mechanism
US7461238B2 (en) * 2006-06-07 2008-12-02 International Business Machines Corporation Simple load and store disambiguation and scheduling at predecode
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
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
US7752393B2 (en) * 2006-11-16 2010-07-06 International Business Machines Corporation Design structure 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
EP2350842B1 (en) * 2008-10-30 2015-02-25 Hewlett-Packard Development Company, L.P. Redundant array of independent disks (raid) write cache sub-assembly
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
US9632947B2 (en) * 2013-08-19 2017-04-25 Intel Corporation Systems and methods for acquiring data for loads at different access times from hierarchical sources using a load queue as a temporary storage buffer and completing the load early
US9619382B2 (en) 2013-08-19 2017-04-11 Intel Corporation Systems and methods for read request bypassing a last level cache that interfaces with an external fabric
US9665468B2 (en) 2013-08-19 2017-05-30 Intel Corporation Systems and methods for invasive debug of a processor without processor execution of instructions
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
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
US10416999B2 (en) 2016-12-30 2019-09-17 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator
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
US10467183B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods for pipelined runtime services in a spatial array
US10469397B2 (en) 2017-07-01 2019-11-05 Intel Corporation Processors and methods with configurable network-based dataflow operator circuits
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
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
US10445234B2 (en) 2017-07-01 2019-10-15 Intel Corporation Processors, methods, and systems for a configurable spatial accelerator with transactional and replay 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
US10380063B2 (en) 2017-09-30 2019-08-13 Intel Corporation Processors, methods, and systems with a configurable spatial accelerator having a sequencer dataflow operator
US10445098B2 (en) 2017-09-30 2019-10-15 Intel Corporation Processors and methods for privileged configuration in a spatial array
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
US10606590B2 (en) 2017-10-06 2020-03-31 International Business Machines Corporation Effective address based load store unit in out of order processors
US10572256B2 (en) 2017-10-06 2020-02-25 International Business Machines Corporation Handling effective address synonyms in a load-store unit that operates without address translation
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
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
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
US11175924B2 (en) 2017-10-06 2021-11-16 International Business Machines Corporation Load-store unit with partitioned reorder queues with single cam port
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
US10445250B2 (en) 2017-12-30 2019-10-15 Intel Corporation Apparatus, methods, and systems with 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
US10853073B2 (en) 2018-06-30 2020-12-01 Intel Corporation Apparatuses, methods, and systems for conditional operations 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
US10891240B2 (en) 2018-06-30 2021-01-12 Intel Corporation Apparatus, methods, and systems for low latency communication 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
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
US10817291B2 (en) 2019-03-30 2020-10-27 Intel Corporation Apparatuses, methods, and systems for swizzle operations in a configurable spatial accelerator
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

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE69429612T2 (de) * 1993-10-18 2002-09-12 Via Cyrix Inc Schreibpuffer für einen superskalaren Mikroprozessor mit Pipeline
US5471598A (en) * 1993-10-18 1995-11-28 Cyrix Corporation Data dependency detection and handling in a microprocessor with write buffer
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

Also Published As

Publication number Publication date
DE69932066T2 (de) 2007-06-21
WO2000017746A1 (en) 2000-03-30
US6141747A (en) 2000-10-31
KR100626858B1 (ko) 2006-09-22
JP2002525742A (ja) 2002-08-13
DE69932066D1 (en) 2006-08-03
JP3871884B2 (ja) 2007-01-24
EP1116103A1 (en) 2001-07-18
EP1116103B1 (en) 2006-06-21

Similar Documents

Publication Publication Date Title
KR100626858B1 (ko) 단일 적재 워드를 형성하기 위해서 별개의 저장 버퍼 엔트리들로부터의 개별 바이트들의 전송을 적재하는 저장 시스템
EP1095330B1 (en) Register renaming in which moves are accomplished by swapping rename tags
US6041405A (en) Instruction length prediction using an instruction length pattern detector
US6442707B1 (en) Alternate fault handler
US6247106B1 (en) Processor configured to map logical register numbers to physical register numbers using virtual register numbers
US6125441A (en) Predicting a sequence of variable instruction lengths from previously identified length pattern indexed by an instruction fetch address
US6519682B2 (en) Pipelined non-blocking level two cache system with inherent transaction collision-avoidance
JP3919802B2 (ja) プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法
US6351804B1 (en) Control bit vector storage for a microprocessor
US6088789A (en) Prefetch instruction specifying destination functional unit and read/write access mode
US6622237B1 (en) Store to load forward predictor training using delta tag
US6119223A (en) Map unit having rapid misprediction recovery
US6694424B1 (en) Store load forward predictor training
US8171240B1 (en) Misalignment predictor
US20030074530A1 (en) Load/store unit with fast memory data access mechanism
US6212621B1 (en) Method and system using tagged instructions to allow out-of-program-order instruction decoding
US6393546B1 (en) Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values
KR100572040B1 (ko) 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서
US5951671A (en) Sharing instruction predecode information in a multiprocessor system
US5946468A (en) Reorder buffer having an improved future file for storing speculative instruction execution results
US5915110A (en) Branch misprediction recovery in a reorder buffer having a future file

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