KR101123378B1 - 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼 - Google Patents

인덱스 검사를 사용하는 저장-로드 포워딩 버퍼 Download PDF

Info

Publication number
KR101123378B1
KR101123378B1 KR1020067000431A KR20067000431A KR101123378B1 KR 101123378 B1 KR101123378 B1 KR 101123378B1 KR 1020067000431 A KR1020067000431 A KR 1020067000431A KR 20067000431 A KR20067000431 A KR 20067000431A KR 101123378 B1 KR101123378 B1 KR 101123378B1
Authority
KR
South Korea
Prior art keywords
load
stlf
buffer
entries
address
Prior art date
Application number
KR1020067000431A
Other languages
English (en)
Other versions
KR20060052788A (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 KR20060052788A publication Critical patent/KR20060052788A/ko
Application granted granted Critical
Publication of KR101123378B1 publication Critical patent/KR101123378B1/ko

Links

Images

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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Computer And Data Communications (AREA)
  • Hardware Redundancy (AREA)
  • Semiconductor Lasers (AREA)
  • Advance Control (AREA)
  • Stored Programmes (AREA)

Abstract

마이크로프로세서(100)는 로드 및 저장 오퍼레이션들을 디스패치하도록 구성된 디스패치 유닛(104)과 상기 디스패치 유닛(104)에 의해 디스패치된 로드 및 저장 오퍼레이션들에 관한 정보를 저장하도록 구성된 로드 저장 유닛(126)을 포함한다. 로드 저장 유닛(126)은 복수의 엔트리(320)를 포함하는 STLF(저장-로드 포워딩) 버퍼(305)를 포함한다. 로드 저장 유닛(126)은 로드 오퍼레이션의 어드레스의 적어도 일부분에 종속하는 인덱스를 생성하고, 상기 인덱스를 상기 복수의 엔트리(320) 중 하나를 선택하는데 사용하고, 그리고 상기 복수의 엔트리(320) 중 상기 하나에 포함된 데이터를 상기 로드 오퍼레이션의 결과로서 포워딩하도록 구성된다.

Description

인덱스 검사를 사용하는 저장-로드 포워딩 버퍼{STORE-TO-LOAD FORWARDING BUFFER USING INDEXED LOOKUP}
본 발명은 마이크로프로세서 분야에 관한 것이고, 특히 마이크로프로세서에서 저장-로드 포워딩(store-to-load forwarding)(STLF)의 수행에 관한 것이다.
고성능 마이크로프로세서에서, 로드 저장 유닛(load store unit)은 전형적으로 L1 캐시 액세스를 대기하는 수개의 미결(outstanding) 로드 및 저장 오퍼레이션을 위한 저장부를 포함한다. 이러한 유형의 마이크로프로세서 아키텍처에 적용될 수 있는 일반적인 성능 향상은 오래된 저장 오퍼레이션(프로그램 순서에서 이전에 발생한 저장 오퍼레이션)으로부터의 데이터를 새로운 로드 오퍼레이션(프로그램 순서에서 후에 발생한 로드 오퍼레이션)으로 포워딩하는 메커니즘을 실행하는 것이다.
이러한 데이터의 저장-로드 포워딩은 L1 데이터 캐시로의 액세스를 회피함으로써 실행 효율성을 상당히 개선한다. STLF가 전형적으로 달성되는 방법은 로드 오퍼레이션이 실행 파이프라인의 데이터 캐시 액세스 스테이지에 있는 동안 모든 오래된 저장 오퍼레이션들을 검색하는 것이다. 로드 오퍼레이션의 어드레스(address)는 로드 저장 유닛에 상주하는 모든 저장 오퍼레이션의 어드레스와 비교된다. 우 선, 로드 오퍼레이션과 동일한 어드레스를 타겟(target)으로 하는 모든 저장 오퍼레이션이 식별되고 이러한 그룹핑(grouping)은 로드 오퍼레이션보다 새로운 모든 저장 오퍼레이션들을 제거함으로써 정교해지게(refine) 된다. 로드 오퍼레이션보다 오래된 모든 저장 오퍼레이션들이 식별되면, 이러한 저장 오퍼레이션들의 상대적인 연령이 비교되어 로드 오퍼레이션보다는 오래된 것 중 가장 최근의 저장 오퍼레이션을 찾을 수 있게 된다. 그 다음, 상기 최근의 저장 오퍼레이션과 관련된 데이터가 로드 오퍼레이션으로 포워딩되어 L1 데이터 캐시를 액세스할 필요없이 정상적으로 완료되도록 한다.
로드 오퍼레이션과 동일한 어드레스를 타겟으로 하는 가장 최근의 저장 오퍼레이션을 찾아내는데 사용되는 어드레스 비교 및 검색 알고리즘은 비교적 복잡하고 실행을 위해 수많은 조합 로직 레벨들(levels of combinatorial logic)을 필요로 한다. 전형적으로, 로드 저장 유닛은 L1을 액세스함으로써 완료하도록 대기하는 오퍼레이션들을 저장한다. 이러한 저장부의 각 라인은 로드 또는 저장 오퍼레이션들에 대한 다중 엔트리(multiple entry)를 포함한다. 로드 오퍼레이션의 어드레스가 이용가능한 때, 이는 각 엔트리의 어드레스에 비교되어야 하고 모든 매칭(matching) 엔트리들은 저장 오퍼레이션들로서 검증되어야만 한다. 일단 로드 오퍼레이션의 타겟 어드레스와 매칭하는 모든 저장 오퍼레이션 엔트리들이 식별되면, 로드 오퍼레이션보다는 오래된 것 중 가장 최근의 오퍼레이션을 식별하는데 파인드-퍼스트 알고리즘(find-first algorithm)이 이용된다. 그 다음, 적당한 엔트리로부터의 데이터가 로드 오퍼레이션으로 포워딩된다.
고성능 마이크로프로세서에서, 이러한 STLF 기능은 전형적으로 로드 오퍼레이션의 완료를 위한 임계 경로(critical path)의 일부분으로서 유효 로드 대기시간(effective load latency)에 상당한 영향을 미친다. 상기 개관된 각 프로시저(procedure)를 수행하는데 소요되는 시간은 상기 유효 로드 대기시간에 상당히 기여하고, 일부 경우에 마이크로프로세서가 동작할 수 있는 최대 주파수를 제한할 수 있다.
인덱스 저장-로드 포워딩(indexed store-to-load forwarding)을 수행하는 방법 및 시스템의 다양한 실시예들이 개시된다. 일 실시예에서, 마이크로프로세서는 로드 및 저장 오퍼레이션들을 디스패치(dispatch)하도록 구성된 디스패치 유닛과 이 디스패치 유닛에 의해 디스패치된 로드 및 저장 오퍼레이션들에 관한 정보를 저장하도록 구성된 로드 저장 유닛을 포함한다. 상기 로드 저장 유닛은 복수의 엔트리를 포함하는 STLF(저장-로드 포워딩) 버퍼를 포함한다. 상기 로드 저장 유닛은 로드 오퍼레이션의 어드레스에 종속하는(dependent) 인덱스를 생성하도록 구성되며, 상기 인덱스는 복수의 엔트리 중 하나를 선택하고 상기 복수의 엔트리 중 하나에 포함된 데이터를 로드 오퍼레이션의 결과로서 포워딩하는데 사용된다. STLF 버퍼에서 상기 복수의 엔트리 중 선택된 하나는 저장 오퍼레이션에 관련된 어드레스, 데이터 및 데이터 크기를 저장하도록 구성된다. 상기 인덱스는 어드레스에 포함된 어드레스 비트들의 전부 또는 일부로부터 생성된다. 상기 어드레스는 실제의 또는 가상의 어드레스이다. 인덱스 STLF 버퍼를 포함하는 마이크로프로세서는 컴퓨터 시스템에 포함된다.
일 실시예에서, 로드 저장 유닛은 상기 복수의 엔트리 중 하나에 포함된 정보가 상기 로드 오퍼레이션에 관련된 정보와 매칭하지 않는다면, 상기 복수의 엔트리 중 하나에 포함된 데이터를 로드 오퍼레이션의 결과로서 포워딩하지 않도록 구성된다.
상기 로드 저장 유닛은 저장 오퍼레이션의 어드레스의 적어도 일부분에 종속하는 추가의 인덱스를 생성함으로써 저장 오퍼레이션에 할당할 복수의 엔트리 중 하나를 선택하도록 구성된다. 일부 실시예에서, 로드 저장 유닛은 저장 오퍼레이션의 어드레스 및 저장 오퍼레이션에 의해 오퍼레이팅되는 데이터의 바이트 수 모두에 종속하는 추가 인덱스를 생성하도록 구성된다. 유사하게, 로드 저장 유닛은 로드 오퍼레이션의 어드레스 및 상기 로드 오퍼레이션에 의해 오퍼레이팅되는 데이터의 바이트 수 모두에 종속하는 로드 오퍼레이션에 대한 인덱스를 생성하도록 구성된다. 일 실시예에서, 추가적인 인덱스는 저장 오퍼레이션이 타겟으로 하는 어드레스의 하위 부분을, 저장 오퍼레이션에 의해 오퍼레이팅되는 데이터의 바이트 수를 밑 2로 로그값을 취한 만큼 우측 천이함으로써 생성된다.
상기 로드 저장 유닛은 STLF 버퍼의 오퍼레이션을 검증하도록 구성된 STLF 검사기(STLF checker)를 포함한다. STLF 검사기는 로드 오퍼레이션과 동일한 어드레스를 타켓으로 하는 발행된 모든 저장 오퍼레이션들을 식별하기 위해 어소시에이티브(associative) 어드레스 비교를 수행하고 상기 로드 오퍼레이션보다 오래된 것 중 가장 최근에 발행된 저장 오퍼레이션을 선택하기 위한 파인드-퍼스트 알고리즘을 실행하도록 구성된다. 만약 STLF 검사기가 STLF 버퍼의 잘못된(incorrect) 오퍼레이션들을 확인했다면, STLF 검사기는 로드 오퍼레이션을 재연(replay)하도록 구성된다. 또한, 만약 STLF 검사기가 STLF 버퍼의 잘못된 오퍼레이션을 검출한다면, STLF 검사기는 상기 로드 오퍼레이션에 종속하는 하나 이상의 추가 오퍼레이션들을 재연하도록 구성될 수 있다. 상기 로드 저장 유닛은 상기 STLF 버퍼에 포함된 복수의 엔트리 중 하나의 데이터를 로드 오퍼레이션의 결과로서 포워딩하는 것에 응답하여 상기 로드 오퍼레이션의 결과를 추론적인 값(speculative value)으로 식별하도록 구성된다. 만약 STLF 버퍼가 로드 오퍼레이션에 대해 올바르게(correctly) 오퍼레이팅되었음을 STLF가 검증한다면, 상기 로드 저장 유닛은 로드 오퍼레이션의 결과가 추론적인 것이 아님을 표시하도록 구성된다.
하기의 상세한 설명을 첨부된 도면과 함께 고려할 때 본 발명을 더욱 잘 이해할 수 있다.
도 1은 일 실시예에 따른 STLF 버퍼를 포함하는 마이크로프로세서를 도시한다.
도 2는 일 실시예에 따른 로드 저장 유닛의 블록 다이어그램을 도시한다.
도 3은 일 실시예에 따른 STLF 버퍼를 포함하는 마이크로프로세서를 오퍼레이팅하는 방법의 흐름 차트이다.
도 4는 일 실시예에 따른 저장-로드 포워딩 버퍼에 더하여 STLF 검사기를 포함하는 마이크로프로세서를 오퍼레이팅하는 방법의 흐름 챠트이다.
도 5는 일 실시예에 따른 STLF 버퍼를 구비하는 마이크로프로세서가 포함된 예시적인 컴퓨터 시스템을 도시한다.
도 6은 다른 실시예에 따른 예시적인 컴퓨터 시스템을 도시한다.
본 발명은 다양한 수정들 및 대체 형상들이 가능하지만, 이들의 특정 실시예들이 도면에서 예시로서 도시되고 본 명세서에서 상세하게 설명될 것이다. 그러나 이들에 대한 도면들 및 상세한 설명은 본 발명을 개시된 특정 형태로 제한하기 위함이 아니고, 첨부된 청구항들에 의해 정의된 본 발명의 정신 및 범위 내에 있는 모든 수정물, 균등물 및 대체물들을 포함하도록 의도된다. 본 명세서에서 표제부(heading)는 문장 구성을 위한 것에 불과하며, 발명의 상세한 설명이나 청구범위의 한정 또는 해석을 위해 이용되는 것은 아니라는 점을 유의해야 한다. 게다가, 단어 "할 수도 있다(may)"는 본원을 통해 허용적인 의미(즉, 가능성을 갖는, 할 수 있는)로 사용되며 필수적인 의미(즉, 강제성)로 사용되지 않음을 주목하여야 한다. 용어 "포함한다" 및 이의 파생어는 "포함하지만, 이에 한정되지 않는다"를 의미한다. 용어 "접속된"은 "직접 또는 간접 접속된"을 의미하고 "연결된"은 "직접 또는 간접 연결된"을 의미한다.
도 1은 저장-로드 포워딩(STLF) 버퍼(140)를 포함하는 마이크로프로세서(100)의 일 실시예에 포함된 로직 컴포넌트(component)들의 블록 다이어그램이다. 마이크로프로세서(100)는 시스템 메모리(200)에 저장된 명령어들을 실행하도록 구성된다. 이러한 명령어들의 다수는 시스템 메모리(200)에 저장된 데이터를 오퍼레이팅한다. 시스템 메모리(200)는 컴퓨터 시스템을 통해 물리적으로 분산될 수 있고 하나 이상의 마이크로프로세서(100)에 의해 액세스될 수 있음을 주목하자. 일부 실시예에서, 마이크로프로세서(100)는 x86 아키텍처와 호환가능하도록 설계된다. 또 한, 주목할 사항으로 마이크로프로세서(100)는 도 1에 도시된 것에 추가하여 다른 수많은 컴포넌트를 포함하고 및/또는 이들에 연결될 수 있다. 예를 들면, 추가의 캐시 레벨들이 마이크로프로세서(100)와 시스템 메모리(200) 사이에(마이크로프로세서(100)의 내부 및/또는 외부에) 포함될 수 있다. 유사하게, 마이크로프로세서(100)는 일부 실시예에서 시스템 메모리(200)를 제어하도록 구성된 메모리 제어기를 포함한다. 추가로, 로직 컴포넌트들 사이의 상호접속부(interconnect)들은 실시예들에 따라 가변한다.
마이크로프로세서(100)는 명령어 캐시(106)와 데이터 캐시(128)를 포함한다. 마이크로프로세서(100)는 시스템 메모리(200)에 연결된 프리페치 유닛(prefetch unit)(108)을 포함한다. 프리페치 유닛(108)은 명령어 캐시(106) 내의 저장을 위해서, 시스템 메모리(200)로부터 명령어 코드를 프리페치할 수 있다. 일 실시예에서, 프리페치 유닛(108)은 시스템 메모리(200)로부터 명령어 캐시(106)로 코드를 버스트 전송하도록 구성될 수도 있다. 프리페치 유닛(108)은 다양한 특정 코드 프리페치 기술 및 알고리즘을 이용한다. 명령어 캐시(106)에서 소정의 어드레스 미스(miss)에 응답하여 시스템 메모리(200)로부터 명령어가 페치된다. 디스페치 유닛(104)은 명령어 캐시(106)로부터 명령어를 수신하도록 구성될 수 있으며 그리고, 디코딩된 오퍼레이션 및/또는 부분적으로 디코딩된 오퍼레이션을 트레이스 캐시(160)로부터 수신하도록 구성될 수 있다. 디스페치 유닛(104)은 명령어 캐시(106)로부터 수신된 명령어들을 디코딩하기 위한 디코드 유닛(140)을 포함할 수 있다. 또한, 디스페치 유닛(104)은 마이크로코딩된 명령어들을 처리하는 경우에 이용되는 마이크로코드 유닛도 포함할 수 있다.
디스패치 유닛(dispatch unit)(104)은 스케줄러(118)들에 오퍼레이션들을 디스패치하도록 구성된다. 하나 이상의 스케줄러(118)가 디스패치 유닛(104)으로부터 디스패치된 오퍼레이션들을 수신하고 하나 이상의 실행 코어(124)에 오퍼레이션들을 발행하도록 연결된다. 실행 코어(들)(124)는 데이터 캐시(128)로의 액세스를 수행하도록 구성된 로드 저장 유닛(126)을 포함한다. 실행 코어(들)(124)에 의해 생성된 결과들이 결과 버스(130)에 출력된다. 이러한 결과는 후속으로 발행되는 명령 어들에 대한 오퍼랜드(operand) 값으로서 사용되고 및/또는 레지스터 파일(116)에 저장된다. 퇴거 큐(retire queue)(102)는 스케줄러(들)(118) 및 디스패치 유닛(104)에 연결된다. 퇴거 큐는 발행된 각 오퍼레이션이 언제 퇴거 될지를 결정하도록 구성된다.
명령어 캐시(106)는 디스패치 유닛(104)에 의한 수령 전에 명령어들을 임시로 저장한다. 프리페치 유닛(108)을 통해 시스템 메모리(200)로부터 코드를 프리페칭 함으로써 명령어 코드가 명령어 캐시(106)에 제공된다. 명령어 캐시(106)는 다양한 구성으로 구현된다(예컨대, 세트-어소시에이티브(set-associative), 풀-어소시에이티브(fully-associative), 또는 직접 매핑(direct-mapping)).
디스패치 유닛(104)은 오퍼랜드 어드레스 정보, 즉시 데이터 및/또는 변위 데이터뿐만 아니라 실행 코어(들)(124)에 의해 실행가능한 비트 인코딩된 오퍼레이션들(bit-encoded operation)을 포함하는 신호들을 출력한다. 디코드 유닛(140)은 특정 명령어들을 실행 코어(들)(124)에 의해 실행 가능한 하나 이상의 오퍼레이션들로 디코딩하는데 사용된다. 단순한 명령어들은 단일 오퍼레이션에 대응한다. 더욱 복잡한 명령어들은 복수의 오퍼레이션에 대응한다. 레지스터의 업데이트를 포함하는 오퍼레이션을 수신하면, 디스패치 유닛(104)은 추론 레지스터 상태(speculative register state)를 저장하기 위해 레지스터 파일(116) 내에 레지스터 위치를 예약한다(대안적인 실시예에서, 각 레지스터에 대한 하나 이상의 추론 레지스터 상태들을 저장하기 위해 재배열(reorder) 버퍼가 사용된다). 레지스터 재명명을 용이하게 하기 위해 레지스터 맵은 소스 및 목적 오퍼랜드의 논리적 레지스터 명칭을 물리적 레지스터 명칭으로 변환한다. 이러한 레지스터 맵은 레지스터 파일(116) 내의 어떤 레지스터가 현재 할당되었는지 할당되지 않았는지를 추적한다.
오퍼레이션들이 디스패치 유닛(104)에 의해 처리되는 때, 만약 필요한 오퍼랜드가 레지스터 위치라면, 레지스터 어드레스 정보는 레지스터 맵이나 재배열 버퍼(reorder buffer)에 라우팅된다. 예를 들면, x86 아키텍처에서 8개의 32-비트 로직 레지스터(예컨대, EAX, EBX, ECX, EDX, EBP, ESI, EDI 및 ESP)가 존재한다. 물리적 레지스터 파일(116)(또는 재배열 버퍼)은 상기 로직 레지스터들의 컨텐츠를 변경하고 부적절한 실행을 허용하는 결과들에 대한 저장부를 포함한다. 레지스터 파일(116) 내의 물리적 레지스터는 상기 로직 레지스터들 중 하나의 컨텐츠를 수정하는 각 오퍼레이션의 결과를 저장하도록 할당된다. 따라서, 특정 프로그램의 실행 동안에 수많은 포인트에서, 레지스터 파일(116)(또는, 대안적인 실시예에서 재배열 버퍼)은 소정의 로직 레지스터의 추론적으로 실행되는 컨텐츠를 포함하는 하나 이상의 레지스터들을 구비할 수 있다.
레지스터 맵은 물리적 레지스터를 오퍼레이션에 대한 목적 오퍼랜드로서 지정된 특정 로직 레지스터로 할당한다. 레지스터 파일(116)은 소정의 오퍼레이션에서 소스 오퍼랜드로서 지정된 로직 레지스터에 할당된 하나 이상의 기 할당된 물리적 레지스터들을 포함한다. 레지스터 맵은 상기 로지컬 레지스터에 가장 최근에 할당된 물리적 레지스터에 대한 태그를 제공한다. 상기 태그는 레지스터 파일(116) 내의 오퍼랜드의 데이터 값에 액세스하거나 상기 결과 버스(130) 상의 결과 포워딩을 통해 데이터 값을 수신하는데 사용된다. 만약 오퍼랜드가 메모리 위치에 대응한 다면, 오퍼랜드 값은 로드 저장 유닛(126)을 통해 결과 버스 상(레지스터 파일(116) 내의 저장 및/또는 결과 포워딩을 위한)에 제공된다. 오퍼랜드 데이터 값은 오퍼레이션이 하나 이상의 스케줄러(들)(118)에 의해 발행된 때 실행 코어(들)(124)에 제공된다. 주목할 사항으로, 대안적인 실시예에서, 오퍼레이션이 디스패치된 때, (오퍼레이션이 발행된 때, 대응하는 실행 코어(124)에 제공되는 대신에) 오퍼랜드 값들은 대응하는 스케줄러(118)에 제공된다는 점이다.
디스패치 유닛(104)의 출력에서 제공되는 비트 인코딩된 오퍼레이션들 및 즉시 데이터는 하나 이상의 스케줄러들(118)에 라우팅된다. 주목할 사항으로, 본원에서 사용되는 바와 같이 스케줄러는 오퍼레이션들의 실행이 준비된 때를 검출하고 하나 이상의 실행 유닛들에 준비된 오퍼레이션들을 발행하는 디바이스이다. 예를 들면, 예약 스테이션이 스케줄러이다. 각 스케줄러(118)는 실행 코어(124)로의 발행 대기 중인 수개의 오퍼레이션들에 대한 오퍼레이션 정보(예컨대, 오퍼랜드 값, 오퍼랜드 태그 및/또는 즉시 데이터뿐 아니라 비트 인코딩된 실행 비트들)를 유지할 수 있다. 일부 실시예에서, 각 스케줄러(118)는 오퍼랜드 값 저장부를 제공하지 않는다. 대신에, 실행 코어(들)(124)에 의해 읽게될 오퍼랜드 값들이 언제 필요한지를 결정하기 위해(레지스터 파일(116) 또는 결과 버스(130)로부터), 각 스케줄러는 발행된 오퍼레이션들 및 레지스터 파일(116)에서 이용가능한 결과들을 모니터한다. 일부 실시예에서, 각 스케줄러(118)는 전용 실행 코어(124)와 관련이 있다. 다른 실시예에서, 단일 스케줄러(118)는 하나 보다 많은 실행 코어(들)(124)에 오퍼레이션들을 발행한다.
스케줄러(118)는 실행 코어(들)(124)에 의해 실행될 오퍼레이션 정보를 임시로 저장하도록 제공된다. 전술한 바와 같이, 각 스케줄러(118)는 펜딩(pending) 오퍼레이션들에 대한 오퍼레이션 정보를 저장한다. 추가로, 각 스케줄러는 이미 실행되었지만 여전히 재발행될 가능성이 있는 오퍼레이션들에 대한 오퍼레이션 정보를 저장한다. 오퍼레이션들은 실행을 위해 적시에 이용가능하게 된 필요한 모든 오퍼랜드 값들에 응답하여 실행 코어(들)(124)에 발행된다. 따라서, 오퍼레이션들이 실행되는 순서는 본래 프로그램 명령어 시퀀스의 순서와 동일하지 않을 것이다.
일 실시예에서, 실행 코어(들)(124) 각각은 덧셈 및 뺄셈의 정수 계산 오퍼레이션들 뿐 아니라 이동, 회전, 로지컬 오퍼레이션 및 분기 오퍼레이션들을 수행하도록 구성되는 컴포넌트들을 포함한다. 부동 소수점 유닛이 또한 부동 소수점 오퍼레이션들을 제공하도록 포함된다. 하나 이상의 실행 코어(들)(124)이 로드 저장 유닛(126)에 의해 수행될 로드 및 저장 메모리 오퍼레이션들에 대한 어드레스 생성을 수행하도록 구성된다.
만약 레지스터 값이 업데이트 된다면, 실행 코어(들)(124) 내의 컴포넌트들에 의해 생성된 결과들은 레지스터 파일(116)로의 결과 버스(130) 상에 출력된다. 만약 메모리 위치의 컨텐츠들이 변경된다면, 실행 코어(들)(124) 내에서 생성된 결과들이 로드 저장 유닛(126)으로 제공된다.
로드 저장 유닛(126)은 실행 코어(들)(124)와 데이터 캐시(128) 사이에 인터페이스를 제공한다. 일 실시예에서, 로드 저장 유닛(126)은 펜딩 로드 또는 저장에 대한 데이터와 어드레스 정보를 위한 수개의 저장 위치를 구비한 로드 저장 버퍼로 구성될 수 있다. 또한, 로드 저장 유닛(126)은 데이터 코히어런시(coherency)가 유지되고 있음을 보증하기 위해 펜딩 저장 명령어들에 대한 로드 명령어들의 종속성 검사를 수행한다.
데이터 캐시(128)는 로드 저장 유닛(126)과 시스템 메모리(200) 사이에 전송되는 데이터를 임시로 저장하도록 제공된 캐시 메모리이다. 전술한 명령어 캐시(106)와 같이, 데이터 캐시(128)는 세트 어소시에이티브 구성을 포함하는 다양한 특유의 메모리 구성으로 구현될 수 있다. 추가로, 데이터 캐시(106) 및 명령어 캐시(128)는 일부 실시예에서 통합된 캐시로 구현될 수 있다.
로드 저장 유닛
도 2는 일 실시예에 따른 저장-로드 포워딩(STLF) 버퍼(305)를 포함하는 로드 저장 유닛(126)을 도시한다. 로드 저장 유닛(126)은 또한 디스패치되었지만 아직 퇴거되지 않은 미결 오퍼레이션들에 대한 오퍼레이션 저장부(307)를 포함한다. 오퍼레이션 저장부(307)는 로드 저장 유닛(126) 내의 모든 미결 오퍼레이션들을 추적한다. 오퍼레이션 저장부(307)는 디스패치된 각 로드 오퍼레이션 및 디스패치된 각 저장 오퍼레이션에 대한 엔트리(310)를 포함한다.
엔트리(310)는 상기 엔트리가 로드 또는 저장에 할당되었는지 여부를 표시하는 정보(313)를 포함한다(또는, 일부 실시예에서 엔트리가 메모리 어드레스로부터 로드된 값을 오퍼레이팅하는 오퍼레이션에 대응하고 메모리 어드레스로 상기 결과를 저장한다면, 엔트리가 로드 및 저장 모두를 포함하는 것으로 표시한다). 추가로, 엔트리(310)는 태그(315)(예컨대, 마이크로프로세서(100) 내의 상기 오퍼레이션 및/또는 그 결과를 식별할 수 있는), 어드레스(317) 및/또는 데이터(319)를 포함한다. 엔트리(310)는 오퍼레이션을 디스패치하는 디스패치 유닛(104)에 응답하여 할당되고 오퍼레이션을 퇴거하는 퇴거 큐(102)에 응답하여 할당해제된다.
STLF 버퍼(305) 내의 각 엔트리(320)는 고유한 인덱스에 의해 선택된다. 로드 저장 유닛(126)은 오퍼레이션의 어드레스 모두 또는 일부로부터 인덱스를 생성하고 상기 인덱스를 상기 오퍼레이션에 대해 액세스하기 위한 엔트리를 선택하는데 사용한다. 예를 들면, 로드 저장 유닛(126)은 어드레스 내의 비트들의 서브세트(subset)로부터 인덱스를 생성한다. 사용되는 어드레스는 물리적 어드레스 또는 가상 어드레스일 것이다. 일부 실시예에서, 상기 인덱스는 또한 오퍼레이션의 데이터 크기에 종속될 수 있다.
일부 실시예에서, 저장 오퍼레이션에 대한 어드레스 및 데이터 모두가 이용가능한 때, 저장 오퍼레이션은 동일한 어드레스를 타겟으로 하는 가장 최근의 로드 오퍼레이션으로 포워딩된 데이터를 구비하고 있기 때문에 실용적이다. 이 시점에서, 로드 저장 유닛은 STLF 버퍼(305) 내의 엔트리(320)를 저장 오퍼레이션으로 할당한다. 로드 저장 유닛(126)은 저장 오퍼레이션의 어드레스의 적어도 일부분으로부터 인덱스를 계산함으로써 저장 오퍼레이션으로 할당되는 엔트리(320)를 선택한다. 상기 인덱스에 의해 선택된 엔트리(320)는 상기 저장 오퍼레이션으로 할당된다. STLF 버퍼(305) 내의 엔트리(320)는 상기 엔트리가 할당된 저장 오퍼레이션의 어드레스(321), 데이터(327), 및 데이터 크기(329)(예컨대, 저장 오퍼레이션에 의해 오퍼레이팅되는 데이터의 바이트 수) 모두 또는 일부를 포함한다. STLF 버퍼 (305) 내의 모든 엔트리는 저장 오퍼레이션에 관련된 최대 데이터 량을 저장하기에 충분한 용량을 갖는다.
로드 오퍼레이션의 어드레스가 이용가능한 때는 언제나, 로드 저장 유닛(126)이 STLF 버퍼(305) 내의 엔트리(320)를 선택하기 위해 로드의 어드레스 모두 또는 일부에 기초하여 인덱스를 생성한다. 만약, 선택된 엔트리(320)에 포함되는 어드레스 정보(321) 및/또는 데이터 크기 정보(329)가 상기 로드 오퍼레이션에 관련된 어드레스 정보 및/또는 데이터 크기 정보와 매칭하면, STLF 버퍼(305)는 상기 엔트리 내의 데이터(327)를 로드 오퍼레이션의 결과로서 포워딩한다. 주목할 사항으로, 엔트리(320) 내에 포함된 어드레스 정보(321), 데이터 크기 정보(329) 및/또는 다른 정보가 적어도 부분적으로 로드 오퍼레이션에 관련된 정보와 매칭한다면 "매칭"이 발생한다는 점이다. 예를 들면, 엔트리는 로드와 관련된 정보와 매칭하는 엔트리 정보의 서브세트 또는 일부분에 응답하여 매칭된 것으로 간주 된다. 다른 실시예에서, 엔트리의 모든 정보가 완전히 로드 정보와 매칭한 때만 매칭이 발생한다.
일부 실시예에서, 엔트리(320)의 인덱스는 오퍼레이션 어드레스의 하위 순위 비트들을 포함한다. 다른 실시예에서, 상기 인덱스는 오퍼레이션의 어드레스에 대한 일부 변환 함수를 수행함으로써 생성된다. 일부 실시예에서, 소정의 모든 어드레스 및 데이터 크기 쌍이 단일 인덱스(동일한 인덱스가 복수의 서로 다른 어드레스로부터 형성될 수 있음을 유의하자)로 매핑되도록 인덱스가 생성된다. 따라서, 로드 오퍼레이션의 어드레스가 STLF 버퍼(305)로의 인덱스로 사용되는 때는, 단일 엔트리(320)가 선택될 것이다. 인덱스 STLF 버퍼(305)를 사용하는 것은 종래의 STLF 버퍼를 사용하여 저장-로드 포워딩을 수행하는 데 필요한 사이클보다 적은 사이클로 저장-로드 포워딩이 수행될 수 있도록 한다.
일부 실시예에서, STLF 버퍼(305)는 크기가 제한되므로 로드 저장 유닛의 오퍼레이션 저장부(307)에 저장되는 오퍼레이션 수에 비해 제한된 수의 엔트리를 저장할 수 있다. 이는 특정 조건하에서 STLF 버퍼(305)의 엔트리(320)에 대한 충돌(conflict)을 야기한다. 예를 들면, STLF 버퍼(305)는 0x0h 내지 0xFh 어드레스에 대응하는 16개의 엔트리들을 저장할 수 있는 용량을 갖는다. 명령어 시퀀스는 각각 4 바이트의 데이터를 저장하는 일련의 저장 오퍼레이션들을 발행한다. 제 1 저장 오퍼레이션이 0x00h 어드레스를 타겟으로 하고, 제 2 저장 오퍼레이션이 0x04h, 제 3 저장 오퍼레이션이 0x08h를 타겟으로 하는 등으로 일련의 저장 오퍼레이션들이 일련의 메모리 어드레스들을 타겟으로 한다. 직접 매핑 인덱스 방법을 사용하는 실시예에서, 제일 처음 4개의 저장 오퍼레이션들은 STLF 버퍼(305) 내의 엔트리들(320)이 인덱스 0x0h, 0x4h, 0x8h, 및 0xCh에서 생성되도록 한다. 일련의 열 내에서 후속 저장 오퍼레이션은 어드레스 0x10h를 타겟으로 하고 이 저장 오퍼레이션의 엔트리(320)에 대한 인덱스는 0x0h일 것이다. 상기 인덱스는 어드레스 0x00h를 타겟으로 하는 상기 제 1 저장 오퍼레이션에 대해서 생성된 것과 동일하기 때문에, 상기 로드 저장 유닛(126)은 이 두 개의 저장 오퍼레이션들에 대해서 STLF 버퍼 내의 동일 엔트리(320)를 선택한다.
어드레스 0x10h를 갖는 저장 오퍼레이션이 어드레스 0x00h를 갖는 저장 오퍼 레이션과 같은 동일한 엔트리를 나타내기 때문에, STLF 버퍼(305) 내의 다른 엔트리들이 현재 할당되지 않을지라도, 저장 오퍼레이션들 양자 모두가 동시에 STLF 버퍼에 나타나지 않는다. 만약 새로운 저장 오퍼레이션에 대해서 STLF 버퍼(305) 내에 어떠한 엔트리도 할당되지 않는다면, 로드 저장 유닛(126)은 새로운 저장 오퍼레이션에 관한 데이터를 즉시 동일한 어드레스를 타겟으로 하는 로드 오퍼레이션으로 포워딩하지 않는다. 반면에, 만약 엔트리가 어드레스 0x10h를 갖는 새로운 저장 오퍼레이션에 할당되어 어드레스 0x00h를 갖는 저장 오퍼레이션에 대한 정보를 겹쳐쓰기 한다면, 로드 저장 유닛(126)은 오래된 저장 오퍼레이션에 관한 데이터를 즉시 동일한 어드레스를 타겟으로 하는 로드 오퍼레이션으로 포워딩하지 않는다.
STLF 버퍼(305)로의 인덱스를 생성하는 때 어드레스들에 대해 해싱 함수(hashing function)나 다른 변환을 적용함으로써 연속적인 어드레스들에 액세스하는 일련의 저장 오퍼레이션들 사이의 충돌 가능성이 감소될 수 있다. 일 실시예에서, 로드 저장 유닛(126)은 오퍼레이션의 어드레스를 log2(데이터 크기)와 같은 양만큼 우측 천이함으로써 각 인덱스를 형성할 수 있다. 전술한 예시에서, 상기 해싱 함수의 적용은 어드레스 0x00h를 타겟으로 하는 저장 오퍼레이션을 인덱스 0x0h의 엔트리(320)로 변환한다. 어드레스 0x04h를 타겟으로하는 저장 오퍼레이션에 대해서, 로드 저장 유닛(126)은 인덱스 0x1h에 엔트리를 할당할 것이다. 유사하게, 로드 저장 유닛은 인덱스 0x2h에 의해 선택된 엔트리를 어드레스 0x08h를 갖는 저장 오퍼레이션에 할당한다. 이전에 어드레스 0x00h를 타겟으로 하는 저장 오퍼레이션과 충돌하는 어드레스 0x10h를 타겟으로 하는 저장 오퍼레이션은 인덱스 0x4에 의 해 선택된 엔트리를 할당받고 더 이상 충돌을 야기하지 않을 것이다. 따라서, STLF 버퍼(305) 내의 엔트리들(320)에 대한 인덱스들의 생성에 해싱 함수 또는 다른 변환을 포함시키는 것은 STLF 버퍼의 저장 용량의 활용을 개선할 것이다.
STLF 버퍼(305) 내로의 인덱스들을 생성하기 위한 전술한 바와 같은 로드 및 저장 오퍼레이션들에 대한 타겟 어드레스들의 변환은, 동일한 최대 데이터 크기 세그먼트 내의 서로 다른 바이트들로 복수의 저장 오퍼레이션들에 할당된 엔트리들이 동시에 STLF 버퍼(305)에 공존할 수 있게 한다. 그러나, 하위 순위 비트들이 천이될 때 정밀도에 있어 다소 손실을 겪게되어, STLF 버퍼(305) 내에서 히트(hit)를 결정하기 위해 어드레스(321) 및 데이터 크기(329) 양자 모두를 비교하는 것이 필요하다. 예를 들면, 어드레스 0x00h, 0x02h, 및 0x04h로의 2 바이트 저장 오퍼레이션들에 대한 엔트리들은 각각 인덱스 위치 0x0h, 0x1h, 및 0x2h에서 STLF 버퍼(305) 내에 공존할 것이다. 어드레스 0x04h를 타겟으로 하는 4 바이트 로드 오퍼레이션의 매칭 시도는 유효한 엔트리가 발견되는 0x1h의 STLF 버퍼(305)로의 인덱스를 생성하지만, 0x1h의 엔트리를 생성했던 저장 오퍼레이션이 2 바이트의 데이터만 오퍼레이팅하기 때문에, 로드 저장 유닛은 이러한 매칭 시도에 대해 미스를 생성해야 한다. STLF 버퍼(305) 내의 엔트리들과 로드 오퍼레이션들의 데이터 크기 및 어드레스 양자 모두를 비교하는 것은 적어도 다소 잘못된 매칭을 배제한다.
일부 실시예에서, STLF 버퍼(305)로의 인덱스를 생성하기 위해 어드레스들에 대한 변환을 사용하는 때일지라도, 2개 이상의 저장 오퍼레이션들이 동일한 STLF 버퍼 엔트리(320)에 매핑되는 상황이 발생한다. 이러한 상황에서, 이러한 저장 오퍼레이션들과 동일한 어드레스를 타겟으로 하는 로드 오퍼레이션에 대해서 데이터를 잘못된 저장 오퍼레이션으로부터 포워딩할 수 있는 가능성이 존재한다. STLF 버퍼(305)가 데이터를 잘못 포워딩한 일부 실시예에서, STLF 버퍼(305)는 추론적으로 포워딩된 결과들을 식별한다. 예를 들면, 포워딩된 데이터와 관련된 비트는 상기 데이터가 추론적 임을 표시하도록 설정된다. 이러한 결과들은 STLF 검사기(303)와 같은 검증 메커니즘에 의해 검증되기 전까지 추론적인 것으로 식별된다.
STLF 검사기(303)는 STLF 오퍼레이션들의 정확성을 검증하는 수단이다. 일부 실시예에서, STLF 검사기(303)는 어소시에이티브 검사를 수행하고 파인드-퍼스트 알고리즘을 실행하는 종래의 STLF 버퍼와 같이 실시된다. 따라서, STLF 검사기(303)는 로드 오퍼레이션의 어드레스를 로드 저장 유닛(126)의 오퍼레이션 저장부(307) 내의 모든 저장 오퍼레이션들의 어드레스들과 비교한다. 일단 모든 매칭 엔트리들(310)이 식별되면, STLF 검사기(303)는 로드 오퍼레이션보다 오래된 것 중에 가장 최근의 저장 오퍼레이션에 할당된 엔트리(310)를 식별하기 위해 파인드-퍼스트 알고리즘을 사용한다. 그 다음, 식별된 엔트리(310)로부터의 데이터(319)가 로드 오퍼레이션의 결과로서 포워딩된 값으로 선택된다. STLF 검사기(303)는 저장-로드 포워딩을 수행하는데 STLF 버퍼(305)보다 상당히 많은 사이클을 소요한다.
STLF 검사기(303)는 로드 오퍼레이션으로 포워딩될 데이터에 대한 올바른 소스를 정확하게 식별한다. 만약 STLF 검사기(303) 및 STLF 버퍼(305)가 소정의 로드 오퍼레이션의 결과로서 포워딩된 데이터의 소스로서 동일한 저장 오퍼레이션을 식별한다면, STLF 버퍼(305)에 의해 로드 오퍼레이션의 결과로서 포워딩된 데이터는 더 이상 추론적이지 않으며 로드 저장 유닛은 이러한 효과에 대한 표시를 생성할 것이다. 예를 들면, 포워딩된 데이터에 관련된 비트는 상기 데이터가 더이상 추론적이지 않음을 표시하도록 처리된다. 한편, 만약 STLF 검사기(303)가 STLF 버퍼(305)로부터 데이터를 포워딩하는데 사용되었던 것과 다른 저장 오퍼레이션을 식별한다면, 로드 오퍼레이션 및 추론적인 데이터를 오퍼레이팅했던 다른 모든 후속 오퍼레이션들은 무효의 결과들을 생성했을 것이다. 로드 오퍼레이션이 이전의 저장 오퍼레이션으로부터 데이터를 포워딩 받았어야함에도 불구하고 그렇지 않은 경우, STLF 검사기(303)는 또한 STLF 버퍼(305)가 데이터를 로드 오퍼레이션의 결과로서 포워딩하지 않은 상황을 검출한다.
STLF 검사기(303)는 STLF 버퍼(305)에서 잘못 포워딩되거나 STLF 버퍼(305)에서 잘못하여 포워딩되지 않은 로드 오퍼레이션들을 삭제한다. 이러한 경우에, STLF 검사기(303)는 상기 로드 오퍼레이션이 재연되도록 한다(예컨대, 스케줄러(118)에 신호를 제공함으로써). 상기 STLF 검사기(303)는 잘못 포워딩된(또는 잘못하여 포워딩되지 않은) 로드 오퍼레이션이 포워딩 받았어야 하는 저장 오퍼레이션을 식별하는 정보를 또한 생성한다. 로드 오퍼레이션이 로드 저장 유닛(126) 내에서 재연될 때, 상기 로드 저장 유닛(126)은 STLF 검사기(303)에 의해 식별된 저장 오퍼레이션으로부터의 데이터를 로드 오퍼레이션의 결과로서 포워딩하는데 상기 정보를 사용한다. 대안적으로, 로드 저장 유닛(126)은 STLF 버퍼(305)의 잘못된 오퍼레이션으로 인해 STLF 검사기(303)가 삭제하고 재연하도록 한 로드 오퍼레이션에 대한 포워딩 결과를 억제(suppress)하도록 구성된다.
도 3은 일 실시예에 따른 저장-로드 포워딩 버퍼를 포함하는 마이크로프로세서를 운영하는 방법의 흐름 챠트이다. 405에서 저장 오퍼레이션의 타겟 어드레스 및 관련 데이터 모두가 유효한 때, 410에서 저장 오퍼레이션의 어드레스 및/또는 데이터 크기 모두 또는 일부로부터 생성된 인덱스에 기초하여 저장 오퍼레이션으로의 할당을 위해 저장-로드 포워딩 버퍼 내의 엔트리가 선택된다. 상기 선택된 엔트리는 상기 저장 오퍼레이션에 대한 타겟 어드레스 모두 또는 일부를 저장한다(예컨대, 상기 엔트리는 상기 인덱스를 생성하는데 사용되지 않은 타겟 어드레스의 상위 순위 비트들을 포함하는 태그를 저장한다). 상기 엔트리는 또한 상기 데이터의 크기를 나타내는 값과 함께 저장 오퍼레이션에 관련된 데이터를 저장한다.
415에서 로드 오퍼레이션과 관련된 어드레스가 수신된 때, 420에서 로드 저장 유닛은 상기 어드레스에 기초하여 STLF 버퍼로의 인덱스를 생성한다. 만약 상기 인덱스에 의해 선택된 엔트리가 유효하다면, 425에서 상기 로드 저장 유닛은 상기 엔트리의 어드레스 및 데이터 크기를 상기 로드 오퍼레이션의 것들과 비교한다. 430에서, 상기 매칭 엔트리로부터의 데이터는 로드 오퍼레이션의 결과로서 포워딩된다. 만약 상기 선택된 엔트리의 어드레스 및/또는 데이터 크기가 상기 로드 오퍼레이션의 것들과 매칭하지 않는다면, 어떠한 데이터도 상기 로드의 결과로서 포워딩되지 않는다.
도 4는 일 실시예에 따른 인덱스 저장-로드 포워딩 버퍼에 더하여 STLF 검사기를 포함하는 마이크로프로세서를 오퍼레이팅하는 방법의 흐름챠트이다. 도 3의 오퍼레이션들 420-435와 함께, 505에서 로드 오퍼레이션에 대한 어드레스가 수신된 때, 510에서 STLF 검사기는 또한 매칭하는 타겟 어드레스들을 구비하는 모든 상주 저장 오퍼레이션들을 식별하기 위해 오퍼레이션 저장부 내를 조사하기 시작한다. 515에서, 로드 오퍼레이션 보다 오래된 저장 오퍼레이션들의 그룹으로부터, 상기 STLF 검사기는 로드 오퍼레이션에 포워딩될 데이터를 위한 올바른 소스로서 가장 최근의 저장 오퍼레이션을 선택한다. 520에서, 상기 로드 저장 유닛은 STLF 버퍼로부터 로드 오퍼레이션으로 데이터를 포워딩하도록 선택된(430에서) 저장 오퍼레이션을 상기 515에서 STLF 검사기에 의해 식별된 저장 오퍼레이션과 비교한다. 만약, 515에서 STLF 검사기에 의해 식별된 것 이외의 임의의 저장 오퍼레이션으로부터 로드 오퍼레이션으로 데이터가 포워딩되었다면, 또는 어떠한 데이터도 로드 오퍼레이션으로 포워딩되지 않고(435에서) 515에서 STLF 검사기에 의해 매칭 저장 오퍼레이션이 식별되었다면, 상기 로드 저장 유닛은 임의의 후속 오퍼레이션들과 함께 로드 오퍼레이션을 재연할 것이다. 525에서, 상기 임의의 후속 오퍼레이션들은 로드 오퍼레이션의 결과에 종속된다. 일부 실시예에서, 상기 로드 저장 유닛은 515에서 식별된 저장 오퍼레이션의 아이덴티티(identity)를 로드 오퍼레이션의 후속 재프로세싱(reprocessing)에서 사용하도록 로드 오퍼레이션으로 포워딩할 데이터의 올바른 소스로서 제공한다. 다른 실시예에서, 로드 저장 유닛은 로드 오퍼레이션의 후속 재프로세싱 상에 저장-로드 포워딩을 억제한다.
예시적인 컴퓨터 시스템
도 5는 버스 브리지(902)를 통해 다양한 시스템 컴포넌트와 연결된 마이크로프로세서(100)를 포함하는 컴퓨터 시스템(900)의 일 실시예의 블록 다이어그램을 도시한다. 마이크로프로세서(100)는 전술한 바와 같은 STLF 버퍼(305)와 검사기(303)를 포함하는 로드 저장 유닛을 포함한다. 컴퓨터 시스템의 다른 실시예들이 가능하고 예기될 수 있다. 도시된 시스템에서, 주 메모리(200)가 메모리 버스(906)를 통해 버스 브리지(902)에 연결되고, 그래픽 제어기(908)가 AGP 버스(910)를 통해 버스 브리지(902)에 연결된다. 수개의 PCI 디바이스들(912A-912B)이 PCI 버스(914)를 통해 버스 브리지(902)에 연결된다. 제 2 버스 브리지(916)가 또한 EISA/ISA 버스(920)를 통해 하나 이상의 EISA 또한 ISA 디바이스들(918)로의 전기적 인터페이스를 제공하기 위해 제공된다. 본 예시에서, 마이크로프로세서(100)가 CPU 버스(924)를 통해 버스 브리지(902)에 연결되고 선택적 L2 캐시(928)에 연결된다. 일부 실시예에서, 마이크로프로세서(100)는 집적 L1 캐시(도시되지 않음)를 포함한다.
버스 브리지(902)는 마이크로프로세서(100), 주 메모리(200), 그래픽 제어기(908), 및 PCI 버스(914)에 부착된 디바이스들 사이에 인터페이스를 제공한다. 오퍼레이션이 버스 브리지(902)에 연결된 디바이스들 중 하나로부터 수신되면, 버스 브리지(902)는 상기 오퍼레이션의 타겟(예컨대, 특정 디바이스 또는 PCI 버스(914)의 경우에 상기 타겟은 PCI 버스(914) 상에 있다)을 식별한다. 버스 브리지(902)는 상기 오퍼레이션을 상기 타겟 디바이스에 라우팅한다. 버스 브리지(902)는 일반적으로 오퍼레이션을 소스 디바이스나 버스에 의해 사용되는 프로토콜로부터 타겟 디바이스나 버스에 의해 사용되는 프로토콜로 변환한다.
PCI 버스(914)에 대한 ISA/EISA 버스로의 인터페이스를 제공하는 것에 추가하여, 제 2 버스 브리지(916)는 추가의 기능을 도입한다. 제 2 버스 브리지(916)의 외부에 또는 제 2 버스 브리지와 함께 통합된 입력/출력 제어기(도시되지 않음)가 컴퓨터 시스템(900)에 포함되어, 키보드 및 마우스(922) 및 다양한 직렬 및 병렬 포트에 대한 운영상의 지원을 제공한다. 다른 실시예들에서, 외부 캐시 유닛(도시되지 않음)이 또한 마이크로프로세서(100)와 버스 브리지(902) 사이에서 CPU 버스(924)에 연결된다. 대안적으로, 외부 캐시가 버스 브리지(902)에 연결되고 외부 캐시에 대한 캐시 제어 로직이 버스 브리지(902)에 통합된다. L2 캐시(928)가 마이크로프로세서(100)의 후면 구성에서 도시된다. 주목할 사항으로, L2 캐시(928)가 마이크로프로세서(100)로부터 격리되어, 마이크로프로세서(100)를 갖는 카트리지(cartridge)(예컨대, 슬롯 1 또는 슬롯 A)에 통합되거나 마이크로프로세서(100)를 갖는 반도체 기판 상에 집적될 수 있다는 점이다.
주 메모리(200)는 애플리케이션 프로그램이 저장되고 마이크로프로세서(100)가 우선 실행하는 메모리이다. 적당한 주 메모리(200)는 DRAM을 포함한다. 예를 들면, 복수의 SDRAM나 램버스 DRAM(Rambus DRAM) 뱅크들이 적당할 수 있다.
PCI 디바이스들(912A-912B)은 네트워크 인터페이스 카드, 비디오 가속기, 오디오 카드, 하드 또는 플로비 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드와 같은 다양한 주변 버스들의 예시이다. 유사하게, ISA 디바이스(918)는 모뎀, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드(field bus interface card)와 같은 다양한 데이터 수집 카드와 같은 다양한 유형의 주변 디바이스들의 예시이다.
디스플레이(926) 상에 텍스트와 영상의 렌더링(rendering)을 제어하도록 그래픽 제어기(908)가 제공된다. 그래픽 제어기(908)는 주 메모리(200)로 및 주 메모리로부터 효과적으로 이동할 수 있는 3차원 데이터 구조를 렌더링하는 것으로 당해 업계에 일반적으로 알려진 전형적인 그래픽 가속기를 포함한다. 따라서, 그래픽 제어기(908)는 AGP 버스(910)의 마스터(master)인바, 이는 버스 브리지(902) 내의 타겟 인터페이스로 액세스를 요청하고 수신할 수 있어서 주 메모리(200)로의 액세스를 획득할 수 있기 때문이다. 전용 그래픽 버스는 주 메모리(200)로부터 데이터의 급속 검색을 제공한다. 특정 오퍼레이션에 대해서, 그래픽 제어기(908)는 또한 AGP 버스(910) 상에 PCI 프로토콜 트랜잭션들을 생성하도록 구성된다. 따라서, 버스 브리지(902)의 AGP 인터페이스는 PCI 프로토콜 타겟 및 개시 트랜잭션들 뿐 아니라 AGP 프로토콜 트랜잭션들 모두를 지원하는 기능을 포함할 수 있다. 디스플레이(926)는 영상 또는 텍스트가 제공될 수 있는 임의의 전자 디스플레이이다. 적당한 디스플레이(926)는 음극선 튜브(CRT), 액정 디스플레이(LCD) 등을 포함할 수 있다.
주목할 사항으로, 상기에서 AGP, PCI 및 ISA 또는 EISA 버스가 예시로서 사용되었지만, 모든 버스 아키텍처가 필요시에 대체될 수 있다는 점이다. 또한, 컴퓨터 시스템(900)은 추가의 마이크로프로세서(예컨대, 컴퓨터 시스템(900)의 선택적 컴포넌트로 도시된 마이크로프로세서(100a))를 포함하는 마이크로프로세싱 컴퓨터 시스템일 수 있다. 마이크로프로세서(100a)는 마이크로프로세서(100)와 유사하다. 더욱 상세하게, 마이크로프로세서(100a)는 마이크로프로세서(100)의 동일한 카피(copy)이다. 마이크로프로세서(100a)는 독립적인 버스를 통해 버스 브리지(902)에 접속되거나(도 5에 도시된 바와 같이) 또는 마이크로프로세서와 CPU 버스(924)를 공유한다. 게다가, 마이크로프로세서(100a)는 L2 캐시(928)에 유사한 선택적인 L2 캐시(928a)에 연결된다.
도 6에서, 전술한 바와 같이 마이크로프로세서(100)를 포함하는 컴퓨터 시스템(900)의 다른 실시예가 도시된다. 다른 실시예들이 가능하고 예기된다. 도 6의 실시예에서, 컴퓨터 시스템(900)은 수 개의 프로세싱 노드(1012A, 1012B, 1012C 및 1012D)를 포함한다. 각 프로세싱 노드는 각각의 프로세싱 노드(1012A-1012D) 내에 포함된 메모리 제어기(1016A-1016D)를 통해 각 메모리(200A-200D)에 연결된다. 추가로, 프로세싱 노드(1012A-1012D)는 상기 프로세싱 노드들(1012A-1012D) 사이에서 통신하는데 사용되는 인터페이스 로직을 포함한다. 예를 들면, 프로세싱 노드(1012A)는 프로세싱 노드(1012B)와 통신하기 위한 인터페이스 로직(1018A)과, 프로세싱 노드(1012C)와 통신하기 위한 인터페이스 로직(1018B), 및 또 다른 프로세싱 노드(도시되지 않음)와 통신하기 위한 제 3 인터페이스 로직(1018C)을 포함한다. 유사하게, 프로세싱 노드(1012B)는 인터페이스 로직(1018D, 1018E 및 1018F)를 포함하고; 프로세싱 노드(1012C)는 인터페이스 로직(1018G, 1018H 및 1018I)를 포함하고; 그리고 프로세싱 노드(1012D)는 인터페이스 로직(1018J, 1018K 및 1018L)을 포함한다. 프로세싱 노드(1012D)는 인터페이스 로직(1018L)을 통해 복수의 입력/출력 디바이스들(예컨대, 데이지 체인 구성(daisy chain configuration) 내의 디바이스들(1020A-1020B))과 통신하도록 연결된다. 다른 프로세싱 노드들은 유사한 방식으로 다른 I/O 디바이스들과 통신할 것이다.
프로세싱 노드들(1012A-1012D)은 프로세싱 노드들 사이의 통신을 위해 패킷 기반 링크를 실행한다. 본 실시예에서, 상기 링크는 단방향 라인들 세트들(sets of unidirectional lines)(예컨대, 라인(1024A)은 프로세싱 노드(1012A)로부터 프로세싱 노드(1012B)로 패킷을 전송하는데 사용되고 라인(1024B)은 프로세싱 노드(1012B)로부터 프로세싱 노드(1012A)로 패킷을 전송하는데 사용된다)로서 구현된다. 다른 라인들 세트(1024C-1024H)가 도 6에 도시된 바와 같은 다른 프로세싱 노드들 사이에 패킷을 전송하는데 사용된다. 일반적으로, 각 라인들 세트(1024)는 하나 이상의 데이터 라인들, 상기 데이터 라인들에 대응하는 하나 이상의 클록 라인들(clock lines), 및 운반되는 패킷의 유형을 나타내는 하나 이상의 제어 라인들을 포함한다. 상기 링크는 프로세싱 노들 사이에서 통신하기 위해 캐시 코히런트 방식으로 또는 프로세싱 노드와 I/O 디바이스(또는 PCI 버스 또는 ISA 버스와 같은 종래 구성의 I/O 버스에 대한 버스 브리지) 사이에서 통신하기 위해 넌코히런트(non-coherent) 방식으로 오퍼레이팅된다. 게다가, 상기 링크는 도시된 바와 같이 I/O 디바이스들 사이의 데이지 체인 구조를 사용하여 넌코히어런트 방식으로 오퍼레이팅될 수 있다. 주목할 사항은, 하나의 프로세싱 노드로부터 다른 프로세싱 노드로 전송되는 패킷은 하나 이상의 중간 노드들을 통과한다는 점이다. 예를 들면, 프로세싱 노드(1012A)에 의해 프로세싱 노드(1012D)로 전송된 패킷은 도 6에 도시된 바와 같이 프로세싱 노드(102B)나 프로세싱 노드(1012C)를 통해 통과한다. 모든 적당한 라우팅 알고리즘이 사용될 수 있다. 컴퓨터 시스템(900)의 다른 실시예들은 도 6에 도시된 실시예들보다 많거나 적은 프로세싱 노드들을 포함할 수 있다.
일반적으로, 노드들 사이의 상기 라인들(1024) 상에 하나 이상의 비트 시간들로서 전송될 수 있다. 비트 시간은 대응하는 클록 라인들 상의 클록 신호의 상승 또는 하강 에지일 것이다. 패킷들은 트랜잭션을 개시하기 위한 커맨드 패킷, 캐시 코히어런시를 유지하기 위한 프로브 패킷, 및 프로브와 커맨드에 대한 응답으로부터 응답 패킷을 포함한다.
메모리 제어기 및 인터페이스 로직에 더하여 프로세싱 노드들(1012A-1012D)은 하나 이상의 마이크로프로세서들을 포함한다. 일반적으로 말해서, 프로세싱 노드는 적어도 하나의 마이크로프로세서를 포함하고 선택적으로 필요한 경우에 메모리 및 다른 로직과 통신하기 위해 메모리 제어기를 포함한다. 각 마이크로프로세서는 일부 실시예들에서 STLF 버퍼(305) 및/또는 STLF 검사기(303)를 포함한다. 더욱 상세하게, 각 프로세싱 노드(1012A-1012D)는 마이크로프로세서(100)의 하나 이상의 카피를 포함한다. 외부 인터페이스 유닛(1012D)은 메모리 제어기(1016D) 뿐 아니라 노드 내에 인터페이스 로직(1018L)을 포함한다.
메모리들(200A-200D)은 모든 적당한 메모리 디바이스들을 포함한다. 예를 들면, 메모리(200A-200D)는 하나 이상의 RAMBUS DRAM들(RDRAM들), 동기식 DRAM(SDRAM), 정적 RAM등을 포함한다. 컴퓨터 시스템(900)의 어드레스 공간은 메모리들(200A-200D) 사이에 분할된다. 각 프로세싱 노드(1012A-1012D)는 어떤 어드레스가 어떤 메모리들(200A-200D)로 매핑되었는지, 따라서 특정 어드레스에 대한 메모리 요청이 어떤 프로세싱 노드(1012A-1012D)로 라우팅되어야 하는지를 결정하는데 사용되는 메모리 맵을 포함한다. 일 실시예에서, 컴퓨터 시스템(900) 내의 어드 레스에 대한 코히어런시 포인트는 상기 어드레스에 대응하는 바이트를 저장하는 메모리에 연결된 메모리 제어기(1016A-1016D)이다. 즉, 메모리 제어기(1016A-1016D)는 대응하는 메모리(200A-200D)에 대한 각 메모리 액세스가 캐시 코히어런트 방식으로 발생하였음을 보증한다. 메모리 제어기(1016A-1016D)는 메모리들(200A-200D)로 인터페이스하는 제어 회로소자를 포함한다. 추가로, 메모리 제어기(1016A-1016D)는 메모리 요청들을 큐잉(queuing)하는 메모리 큐를 포함한다.
인터페이스 로직(1018A-1018L)은 링크로부터 패킷을 수신하고 링크로 전송될 패킷들을 버퍼링하는 다양한 버퍼들을 포함한다. 컴퓨터 시스템(900)은 패킷 전송의 임의의 적당한 흐름 제어 메커니즘을 이용한다. 예를 들면, 일 실시예에서, 각 인터페이스 로직(1018)은 인터페이스 로직이 접속되는 링크의 다른 종단에 있는 수신기 내의 각 버퍼 유형의 개수의 집계를 저장한다. 수신 인터페이스 로직이 패킷을 저장하기 위한 빈공간을 갖고 있지 않다면 인터페이스 로직은 패킷을 전송하지 않는다. 수신 버퍼는 패킷을 순방향으로 라우팅함으로써 비워져 이용가능한 상태로 되기 때문에, 수신 인터페이스 로직은 상기 버퍼가 이용가능하게 되었음을 표시하는 메시지를 전송 인터페이스 로직에 전송한다. 이러한 메커니즘은 "쿠폰-기반(coupon-based)" 시스템으로 지칭된다.
I/O 디바이스들(1020A-1020B)은 모든 적당한 I/O 디바이스들이다. 예를 들면, I/O 디바이스들(1020A-1020B)은 상기 디바이스들이 연결된 다른 컴퓨터 시스템과 통신하기 위한 디바이스들(예컨대, 네트워크 인터페이스 카드 또는 모뎀)을 포함한다. 게다가, I/O 디바이스들(1020A-1020B)은 비디오 가속기, 오디오 카드, 하 드 또는 플로피 디스크 드라이브 또는 드라이브 제어기, SCSI(소형 컴퓨터 시스템 인터페이스) 어댑터 및 전화 카드, 사운드 카드, 및 GPIB 또는 필드 버스 인터페이스 카드(field bus interface card)와 같은 다양한 데이터 수집 카드를 포함한다. 주목할 사항으로, 용어 "I/O 디바이스" 및 용어 "주변 디바이스"는 본 명세서에서 동의어로서 사용된다.
본 명세서에서 사용되는 바와 같이, 용어 "클록 사이클"은 명령어 프로세싱 파이프라인들의 다양한 스테이지들이 그들의 작업을 완료하는 시간 간격을 일컫는다. 명령어 및 컴퓨팅 값들은 클록 사이클을 정의하는 클록 신호에 따라 메모리 요소(레지스터나 어레이와 같은)에 의해 획득된다. 예를 들면, 메모리 요소는 클록 신호의 상승 또는 하강 에지에 따른 값을 획득한다.
상기에서, 신호는 "어서트(assert)"되는 것으로 기술된다. 신호는 특정 정보 부분을 나타내는 값을 운반할 때 어서트되는 것으로 정의된다. 특정 신호는 이진 1 값 또는 대안적으로 이진 0 값을 운반할 때 어서트되는 것으로 정의될 수 있다.
본 명세서를 일단 숙지한 당해 기술분야의 당업자에게는 다양한 수정 변경이 가능할 것이다. 후술하는 청구항들은 이러한 모든 수정 변경을 포괄하도록 해석되어야 한다.
본 발명은 일반적으로 마이크로프로세서 분야에 응용할 수 있다.

Claims (10)

  1. 마이크로프로세서(100)로서,
    로드 및 저장 오퍼레이션들을 디스패치하는 디스패치 유닛(104)과; 그리고
    상기 디스패치 유닛(104)에 의해 디스패치된 상기 로드 및 저장 오퍼레이션들에 관한 정보를 저장하는 로드 저장 유닛(126)을 포함하며,
    상기 로드 저장 유닛(126)은 STLF(저장-로드 포워딩) 버퍼(305)를 포함하고,
    상기 STLF 버퍼(305)는 복수의 엔트리(320)들을 포함하고, 상기 복수의 엔트리들 각각은 그 엔트리에 고유한 고정된 인덱스 값을 이용하여 선택가능하며,
    상기 로드 저장 유닛(126)은:
    상기 로드 오퍼레이션의 어드레스의 전부 또는 일부에 종속하는 인덱스 값을 생성하고, 상기 생성된 인덱스 값은 상기 고정된 인덱스 값들 중 하나이며;
    상기 복수의 엔트리(320)들 중 하나의 엔트리를 선택하기 위하여 상기 생성된 인덱스 값을 사용하여 상기 STLF 버퍼에 인덱싱하며; 그리고
    상기 복수의 엔트리(320)들 중 상기 생성된 인덱스 값에 의해 선택된 상기 하나의 엔트리에 포함된 데이터를 상기 로드 오퍼레이션의 결과로서 포워딩하는 것을 특징으로 하는 마이크로프로세서.
  2. 제1항에 있어서,
    만약 상기 복수의 엔트리(320) 중 상기 하나에 포함된 정보가 상기 로드 오퍼레이션에 관한 정보와 매칭하지 않는다면, 상기 로드 저장 유닛(126)은 상기 복수의 엔트리(320) 중 상기 하나에 포함된 상기 데이터를 상기 로드 오퍼레이션의 상기 결과로서 포워딩하지 않는 것을 특징으로 하는 마이크로프로세서.
  3. 제1항에 있어서,
    상기 로드 저장 유닛(126)은 저장 오퍼레이션의 어드레스의 전부 또는 일부에 종속하는 추가 인덱스를 생성함으로써 저장 오퍼레이션에 할당하기 위해 복수의 엔트리(320) 중 어느 하나를 선택하도록 된 것을 특징으로 하는 마이크로프로세서.
  4. 제1항에 있어서,
    상기 로드 저장 유닛(126)은 상기 STLF 버퍼(305)의 오퍼레이션을 검증하는 STLF 검사기(303)를 더 포함하는 것을 특징으로 하는 마이크로프로세서.
  5. 제4항에 있어서,
    상기 STLF 검사기(303)는 상기 로드 오퍼레이션과 동일한 어드레스를 타겟으로 하는 모든 발행된 저장 오퍼레이션들을 식별하기 위해 어소시에이티브 어드레스 비교를 수행함과 아울러, 상기 로드 오퍼레이션보다 오래된 것 중에서 가장 최근에 발행된 저장 오퍼레이션을 선택하기 위해 파인드-퍼스트 알고리즘을 실행하는 것을 특징으로 하는 마이크로프로세서.
  6. 시스템 메모리(200)와 그리고 상기 시스템 메모리(200)에 연결된 마이크로프로세서(100)를 포함하는 컴퓨터 시스템(900)에 있어서,
    로드 및 저장 오퍼레이션들을 디스패치하는 디스패치 유닛(104)과; 그리고
    상기 디스패치 유닛(104)에 의해 디스패치된 상기 로드 및 저장 오퍼레이션들에 관한 정보를 저장하는 로드 저장 유닛(126)을 포함하며,
    상기 로드 저장 유닛(126)은 STLF(저장-로드 포워딩) 버퍼(305)를 포함하고,
    상기 STLF 버퍼(305)는 복수의 엔트리(320)를 포함하고, 상기 복수의 엔트리들 각각은 그 엔트리에 고유한 고정된 인덱스 값을 이용하여 선택가능하며,
    상기 로드 저장 유닛(126)은:
    상기 로드 오퍼레이션의 어드레스의 전부 또는 일부에 종속하는 인덱스 값을 생성하고, 상기 생성된 인덱스 값은 상기 고정된 인덱스 값들 중 하나이며;
    상기 복수의 엔트리(320)들 중 하나의 엔트리를 선택하기 위하여 상기 생성된 인덱스 값을 사용하여 상기 STLF 버퍼에 인덱싱하며; 그리고
    상기 복수의 엔트리(320)들 중 상기 생성된 인덱스 값에 의해 선택된 상기 하나의 엔트리에 포함된 데이터를 상기 로드 오퍼레이션의 결과로서 포워딩하는 것을 특징으로 하는 컴퓨터 시스템(900).
  7. 마이크로 프로세서의 동작 방법으로서,
    로드 오퍼레이션의 어드레스를 수신하는 단계와;
    상기 어드레스에 대응하는 인덱스 값을 생성하는 단계와;
    STLF(저장-로드 포워딩) 버퍼(305)에 포함된 복수의 엔트리(320)들 중 하나의 엔트리를 선택하기 위하여 생성된 상기 인덱스 값을 이용하여 상기 STLF 버퍼(305)에 인덱싱하는 단계와, 상기 복수의 엔트리들 각각은 그 엔트리에 고유한 고정된 인덱스 값을 이용하여 선택가능하며 그리고 상기 생성된 인덱스 값은 상기 고정된 인덱스 값들 중 하나이며; 그리고
    상기 복수의 엔트리(320)들 중 상기 생성된 인덱스 값에 의해 선택된 상기 하나의 엔트리에 포함된 데이터를 상기 로드 오퍼레이션의 결과로서 포워딩하는 단계를 포함하는 마이크로 프로세서의 동작 방법.
  8. 제7항에 있어서,
    상기 로드 오퍼레이션과 동일한 어드레스를 타겟으로 하는 모든 발행된 저장 오퍼레이션들을 식별하기 위해 어소시에이티브 어드레스 비교를 수행함과 아울러, 상기 로드 오퍼레이션보다 오래된 것 중 가장 최근에 발행된 저장 오퍼레이션을 선택하도록 파인드-퍼스트 알고리즘을 실행함으로써 상기 STLF 버퍼(305)의 오퍼레이션을 검증하는 단계를 더 포함하는 것을 특징으로 하는 마이크로 프로세서의 동작 방법.
  9. 제8항에 있어서,
    만약 상기 검증하는 단계에서 상기 STLF 버퍼(305)의 잘못된 오퍼레이션이 확인된다면, 상기 로드 오퍼레이션을 재연하는 단계를 더 포함하는 것을 특징으로 하는 마이크로 프로세서의 동작 방법.
  10. 제8항에 있어서,
    상기 STLF 버퍼(305) 내에 포함된 상기 엔트리의 상기 데이터를 상기 로드 오퍼레이션의 상기 결과로서 포워딩함에 응답하여 상기 오퍼레이션의 결과를 추론적인 값으로 식별하는 단계와; 그리고
    만약 상기 STLF 버퍼(305)가 상기 로드 오퍼레이션에 대해 올바르게 오퍼레이팅된 것으로 상기 검증 단계에서 검증된다면, 상기 로드 오퍼레이션의 결과가 추론적인 것이 아님을 표시하는 단계를 더 포함하는 것을 특징으로 하는 마이크로 프로세서의 동작 방법.
KR1020067000431A 2003-07-08 2004-06-02 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼 KR101123378B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/615,101 US7321964B2 (en) 2003-07-08 2003-07-08 Store-to-load forwarding buffer using indexed lookup
US10/615,101 2003-07-08
PCT/US2004/017093 WO2005010750A2 (en) 2003-07-08 2004-06-02 Store-to-load forwarding buffer using indexed lookup

Publications (2)

Publication Number Publication Date
KR20060052788A KR20060052788A (ko) 2006-05-19
KR101123378B1 true KR101123378B1 (ko) 2012-03-27

Family

ID=33564489

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020067000431A KR101123378B1 (ko) 2003-07-08 2004-06-02 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼

Country Status (8)

Country Link
US (1) US7321964B2 (ko)
JP (1) JP2007527563A (ko)
KR (1) KR101123378B1 (ko)
CN (1) CN100432925C (ko)
DE (1) DE112004001248B4 (ko)
GB (1) GB2420202B (ko)
TW (1) TWI324744B (ko)
WO (1) WO2005010750A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
GB2416891B (en) * 2005-11-09 2006-11-01 Streamshield Networks Ltd A network implemented content processing system
CN101901132B (zh) * 2009-08-12 2013-08-21 威盛电子股份有限公司 微处理器以及相关储存方法
US9442735B1 (en) * 2012-04-13 2016-09-13 Marvell International Ltd. Method and apparatus for processing speculative, out-of-order memory access instructions
US9361103B2 (en) * 2012-11-02 2016-06-07 Advanced Micro Devices, Inc. Store replay policy
US10169391B2 (en) * 2015-10-21 2019-01-01 International Business Machines Corporation Index management
US10282298B2 (en) 2017-06-13 2019-05-07 Microsoft Technology Licensing, Llc Store buffer supporting direct stores to a coherence point
US10303603B2 (en) 2017-06-13 2019-05-28 Microsoft Technology Licensing, Llc Low power multi-core coherency
US11113056B2 (en) * 2019-11-27 2021-09-07 Advanced Micro Devices, Inc. Techniques for performing store-to-load forwarding

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6393536B1 (en) * 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
KR100708010B1 (ko) * 1999-11-10 2007-04-16 어드밴스드 마이크로 디바이시즈, 인코포레이티드 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼

Family Cites Families (74)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4521851A (en) 1982-10-13 1985-06-04 Honeywell Information Systems Inc. Central processor
US4594660A (en) 1982-10-13 1986-06-10 Honeywell Information Systems Inc. Collector
US5276828A (en) 1989-03-01 1994-01-04 Digital Equipment Corporation Methods of maintaining cache coherence and processor synchronization in a multiprocessor system using send and receive instructions
US5487156A (en) 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5655096A (en) 1990-10-12 1997-08-05 Branigin; Michael H. Method and apparatus for dynamic scheduling of instructions to ensure sequentially coherent data in a processor employing out-of-order execution
US5778219A (en) 1990-12-14 1998-07-07 Hewlett-Packard Company Method and system for propagating exception status in data registers and for detecting exceptions from speculative operations with non-speculative operations
JP2693651B2 (ja) * 1991-04-30 1997-12-24 株式会社東芝 並列プロセッサー
US5488729A (en) 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
JPH0820949B2 (ja) 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
JP3199465B2 (ja) 1992-07-22 2001-08-20 株式会社日立製作所 情報処理装置
WO1994008287A1 (en) 1992-09-29 1994-04-14 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US5619662A (en) 1992-11-12 1997-04-08 Digital Equipment Corporation Memory reference tagging
US5467473A (en) 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
IE80854B1 (en) 1993-08-26 1999-04-07 Intel Corp Processor ordering consistency for a processor performing out-of-order instruction execution
DE69429061T2 (de) 1993-10-29 2002-07-18 Advanced Micro Devices Inc Superskalarmikroprozessoren
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
US5724536A (en) 1994-01-04 1998-03-03 Intel Corporation Method and apparatus for blocking execution of and storing load operations during their execution
US5465336A (en) 1994-06-30 1995-11-07 International Business Machines Corporation Fetch and store buffer that enables out-of-order execution of memory instructions in a data processing system
US5555432A (en) 1994-08-19 1996-09-10 Intel Corporation Circuit and method for scheduling instructions by predicting future availability of resources required for execution
US6216200B1 (en) 1994-10-14 2001-04-10 Mips Technologies, Inc. Address queue
US5625789A (en) 1994-10-24 1997-04-29 International Business Machines Corporation Apparatus for source operand dependendency analyses register renaming and rapid pipeline recovery in a microprocessor that issues and executes multiple instructions out-of-order in a single cycle
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5673426A (en) 1995-02-14 1997-09-30 Hal Computer Systems, Inc. Processor structure and method for tracking floating-point exceptions
US5745729A (en) 1995-02-16 1998-04-28 Sun Microsystems, Inc. Methods and apparatuses for servicing load instructions
US5887152A (en) 1995-04-12 1999-03-23 Advanced Micro Devices, Inc. Load/store unit with multiple oldest outstanding instruction pointers for completing store and load/store miss 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
US5625835A (en) 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5761712A (en) 1995-06-07 1998-06-02 Advanced Micro Devices Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
US5717883A (en) 1995-06-28 1998-02-10 Digital Equipment Corporation Method and apparatus for parallel execution of computer programs using information providing for reconstruction of a logical sequential program
US5652859A (en) 1995-08-17 1997-07-29 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for handling snoops in multiprocessor caches having internal buffer queues
US5710902A (en) 1995-09-06 1998-01-20 Intel Corporation Instruction dependency chain indentifier
JP3115515B2 (ja) * 1995-10-03 2000-12-11 ポリプラスチックス株式会社 ポリアセタール共重合体の製造方法
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5926642A (en) 1995-10-06 1999-07-20 Advanced Micro Devices, Inc. RISC86 instruction set
US5799165A (en) 1996-01-26 1998-08-25 Advanced Micro Devices, Inc. Out-of-order processing that removes an issued operation from an execution pipeline upon determining that the operation would cause a lengthy pipeline delay
US5884059A (en) 1996-01-26 1999-03-16 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US5835747A (en) 1996-01-26 1998-11-10 Advanced Micro Devices, Inc. Hierarchical scan logic for out-of-order load/store execution control
US5781790A (en) 1995-12-29 1998-07-14 Intel Corporation Method and apparatus for performing floating point to integer transfers and vice versa
US5742791A (en) 1996-02-14 1998-04-21 Advanced Micro Devices, Inc. Apparatus for detecting updates to instructions which are within an instruction processing pipeline of a microprocessor
US5748978A (en) 1996-05-17 1998-05-05 Advanced Micro Devices, Inc. Byte queue divided into multiple subqueues for optimizing instruction selection logic
US6108769A (en) 1996-05-17 2000-08-22 Advanced Micro Devices, Inc. Dependency table for reducing dependency checking hardware
WO1998006038A1 (en) 1996-08-07 1998-02-12 Sun Microsystems, Inc. Architectural support for software pipelining of loops
US5781752A (en) 1996-12-26 1998-07-14 Wisconsin Alumni Research Foundation Table based data speculation circuit for parallel processing computer
US5978900A (en) 1996-12-30 1999-11-02 Intel Corporation Renaming numeric and segment registers using common general register pool
US6016540A (en) 1997-01-08 2000-01-18 Intel Corporation Method and apparatus for scheduling instructions in waves
US6065105A (en) 1997-01-08 2000-05-16 Intel Corporation Dependency matrix
US5923862A (en) 1997-01-28 1999-07-13 Samsung Electronics Co., Ltd. Processor that decodes a multi-cycle instruction into single-cycle micro-instructions and schedules execution of the micro-instructions
US5768555A (en) 1997-02-20 1998-06-16 Advanced Micro Devices, Inc. Reorder buffer employing last in buffer and last in line bits
US5996068A (en) 1997-03-26 1999-11-30 Lucent Technologies Inc. Method and apparatus for renaming registers corresponding to multiple thread identifications
US5941983A (en) 1997-06-24 1999-08-24 Hewlett-Packard Company Out-of-order execution using encoded dependencies between instructions in queues to determine stall values that control issurance of instructions from the queues
US5987594A (en) 1997-06-25 1999-11-16 Sun Microsystems, Inc. Apparatus for executing coded dependent instructions having variable latencies
US5850533A (en) 1997-06-25 1998-12-15 Sun Microsystems, Inc. Method for enforcing true dependencies in an out-of-order processor
US6070238A (en) 1997-09-11 2000-05-30 International Business Machines Corporation Method and apparatus for detecting overlap condition between a storage instruction and previously executed storage reference instruction
US5915117A (en) 1997-10-13 1999-06-22 Institute For The Development Of Emerging Architectures, L.L.C. Computer architecture for the deferral of exceptions on speculative instructions
US6076153A (en) 1997-12-24 2000-06-13 Intel Corporation Processor pipeline including partial replay
US6098166A (en) 1998-04-10 2000-08-01 Compaq Computer Corporation Speculative issue of instructions under a load miss shadow
US6108770A (en) 1998-06-24 2000-08-22 Digital Equipment Corporation Method and apparatus for predicting memory dependence using store sets
US6360314B1 (en) * 1998-07-14 2002-03-19 Compaq Information Technologies Group, L.P. Data cache having store queue bypass for out-of-order instruction execution and method for same
US6212622B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Mechanism for load block on store address generation
US6122727A (en) 1998-08-24 2000-09-19 Advanced Micro Devices, Inc. Symmetrical instructions queue for high clock frequency scheduling
US6212623B1 (en) 1998-08-24 2001-04-03 Advanced Micro Devices, Inc. Universal dependency vector/queue entry
JP3866921B2 (ja) 1998-08-24 2007-01-10 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ストアアドレス生成およびユニバーサルな依存性ベクトルに基づくロードブロックのためのメカニズム
US6321328B1 (en) 1999-03-22 2001-11-20 Hewlett-Packard Company Processor having data buffer for speculative loads
US6266744B1 (en) * 1999-05-18 2001-07-24 Advanced Micro Devices, Inc. Store to load forwarding using a dependency link file
US6622237B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Store to load forward predictor training using delta tag
US6542984B1 (en) 2000-01-03 2003-04-01 Advanced Micro Devices, Inc. Scheduler capable of issuing and reissuing dependency chains
US6622235B1 (en) 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6502185B1 (en) 2000-01-03 2002-12-31 Advanced Micro Devices, Inc. Pipeline elements which verify predecode information
US6651161B1 (en) 2000-01-03 2003-11-18 Advanced Micro Devices, Inc. Store load forward predictor untraining
US6694424B1 (en) 2000-01-03 2004-02-17 Advanced Micro Devices, Inc. Store load forward predictor training
US6877086B1 (en) * 2000-11-02 2005-04-05 Intel Corporation Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter
JP3497832B2 (ja) * 2001-03-28 2004-02-16 株式会社半導体理工学研究センター ロード・ストアキュー

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6393536B1 (en) * 1999-05-18 2002-05-21 Advanced Micro Devices, Inc. Load/store unit employing last-in-buffer indication for rapid load-hit-store
KR100708010B1 (ko) * 1999-11-10 2007-04-16 어드밴스드 마이크로 디바이시즈, 인코포레이티드 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023219204A1 (ko) * 2022-05-11 2023-11-16 서울시립대학교 산학협력단 명령어를 처리하는 방법 및 이를 위한 프로세서 모듈

Also Published As

Publication number Publication date
US7321964B2 (en) 2008-01-22
TWI324744B (en) 2010-05-11
GB0526408D0 (en) 2006-02-08
TW200511110A (en) 2005-03-16
US20050010744A1 (en) 2005-01-13
WO2005010750A3 (en) 2006-01-05
GB2420202A (en) 2006-05-17
DE112004001248T5 (de) 2006-08-10
DE112004001248B4 (de) 2008-08-21
JP2007527563A (ja) 2007-09-27
KR20060052788A (ko) 2006-05-19
CN100432925C (zh) 2008-11-12
GB2420202B (en) 2006-12-06
CN1836207A (zh) 2006-09-20
WO2005010750A2 (en) 2005-02-03

Similar Documents

Publication Publication Date Title
KR100708010B1 (ko) 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US7003629B1 (en) System and method of identifying liveness groups within traces stored in a trace cache
US6622237B1 (en) Store to load forward predictor training using delta tag
US6523109B1 (en) Store queue multimatch detection
US8364907B2 (en) Converting victim writeback to a fill
US8069336B2 (en) Transitioning from instruction cache to trace cache on label boundaries
US7472260B2 (en) Early retirement of store operation past exception reporting pipeline stage in strongly ordered processor with load/store queue entry retained until completion
EP1244961B1 (en) Store to load forwarding predictor with untraining
US6481251B1 (en) Store queue number assignment and tracking
US6694424B1 (en) Store load forward predictor training
US6088789A (en) Prefetch instruction specifying destination functional unit and read/write access mode
KR100698493B1 (ko) 좁은 피연산자들에서 계산을 수행하는 방법 및 장치
JP2007536626A (ja) ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法
US8239638B2 (en) Store handling in a processor
KR20010073182A (ko) 전송을 적재하는 저장 메커니즘
JP2003514299A5 (ko)
JPH08504977A (ja) スーパースカラ・マイクロプロセサにおけるロード及び/又はストア動作を扱うシステム及び方法
KR19990072271A (ko) 고성능의추론적인오정렬로드연산
CN107038125A (zh) 具有加速预取请求的独立流水线的处理器高速缓存
CN114600080A (zh) 解耦访问执行处理
KR101123378B1 (ko) 인덱스 검사를 사용하는 저장-로드 포워딩 버퍼
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations
US7043626B1 (en) Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US7694110B1 (en) System and method of implementing microcode operations as subroutines

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
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: 20150130

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20160127

Year of fee payment: 5

LAPS Lapse due to unpaid annual fee