KR100567099B1 - L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치 - Google Patents

L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치 Download PDF

Info

Publication number
KR100567099B1
KR100567099B1 KR1020037014576A KR20037014576A KR100567099B1 KR 100567099 B1 KR100567099 B1 KR 100567099B1 KR 1020037014576 A KR1020037014576 A KR 1020037014576A KR 20037014576 A KR20037014576 A KR 20037014576A KR 100567099 B1 KR100567099 B1 KR 100567099B1
Authority
KR
South Korea
Prior art keywords
cache
store
load
temporary
storage
Prior art date
Application number
KR1020037014576A
Other languages
English (en)
Other versions
KR20040012812A (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 KR20040012812A publication Critical patent/KR20040012812A/ko
Application granted granted Critical
Publication of KR100567099B1 publication Critical patent/KR100567099B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • 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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • 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/383Operand prefetching
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • 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/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/50Control mechanisms for virtual memory, cache or TLB
    • G06F2212/507Control mechanisms for virtual memory, cache or TLB using speculative control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Abstract

본 발명의 한가지 실시예는 멀티프로세서 시스템에서 가-저장 동작(speculative store operations)을 촉진시키는 시스템을 제공한다. 이 시스템은 멀티프로세서 시스템의 L2 캐시에서 처리중인 가-저장 동작의 레코드를 관리함으로서 운영되며, 이때, 가-저장 동작은 선행 로드 동작이 되돌아오기 전에 예측치로(speculatively) 실행되는 저장 동작이다. L1 캐시로부터 L2 캐시에서 로드 동작을 수신하면, 로드 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작의 레코드를 시스템이 검사한다. 만약 일치하는 가-저장 동작이 있다면, 일치하는 가-저장 동작 완료 이후에 로드 동작이 진행됨을 시스템이 보장한다.

Description

L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장 촉진 방법 및 장치{METHOD AND APPARATUS FOR FACILITATING SPECULATIVE STORES IN A MULTIPROCESSOR SYSTEM}
본 발명은 멀티프로세서 시스템 설계에 관한 것이다. 특히 본 발명은 멀티프로세서 시스템에서의 가-로드(speculative load) 동작과 가-저장 동작(speculative store operations)을 촉진시키는 방법 및 장치에 관한 것이다.
고속 연산 성능을 구현하기 위해, 컴퓨터 시스템 설계자들은 병렬로 동작하는 여러개의 프로세서를 이용하여 단일 연산 작업을 수행하는 것을 시도하고 있다. 대중적인 한가지 멀티프로세서 설계는 단일 레벨 2(L2) 캐시(180)와 메모리(183)를 공유하는 레벨 1(L1) 캐시(161-164)에 연결된 다수의 프로세서(151-154)를 포함한다(도 1 참조). 동작 중, 프로세서(151)가 국부 L1 캐시(161)에 존재하지 않는 데이터 아이템에 액세스할 경우, 시스템은 L2 캐시(180)로부터 데이터 아이템을 불러들이려 시도한다. 데이터 아이템이 L2 캐시(180)에 없을 경우, 시스템은 메모리(183)로부터 데이터를 L2 캐시(180)로 불러들여, 그후 L2 캐시(180)로부터 L1 캐시(161)로 데이터 아이템을 불러들인다.
동일한 데이터 아이템의 사본이 두개 이상의 L1 캐시에 존재할 경우 코히어 런시 문제점이 발생할 수 있다. 이 경우에, L1 캐시(161)의 데이터 아이템의 제 1 버전에 대한 수정이 상기 제 1 버전을, L1 캐시(162)의 데이터 아이템의 제 2 버전과 다른 것이도록 하게 할 수 있다.
코히어런시 문제점을 극복하기 위해, 컴퓨터 시스템들은 버스(170) 사이에서 동작하는 코히어런시 프로토콜을 제공하는 경우가 자주 있다. 코히어런시 프로토콜은, 데이터 아이템의 한 사본이 L1 캐시(161)에서 수정될 경우, L1 캐시(162-164), L2 캐시(180), 그리고 메모리(183) 내 동일한 데이터 아이템의 다른 사본들이 이 수정을 반영하도록 업데이트되거나 무효화되는 것을 보장한다.
코히어런시 프로토콜들은 버스(170) 사이에서 무효화 메시지를 송출함으로서 무효화를 실행하는 것이 일반적이다. 이러한 무효화가 자주 발생할 경우, 이 무효화 메시지는 버스(170)에 정체를 일으킬 수 있고, 따라서, 전체 시스템 성능을 저하시킬 수 있다.
이 문제점을 극복하기 위해, 일부 설계자들은 L2 캐시(180) 내 디렉토리 정보의 관리 가능성을 연구하기 시작하였다. 이에 의하면, 시스템이 모든 L1 캐시에 방송 메시지를 보내는 대신에 데이터 아이템을 내장한 L1 캐시에게만 무효화 정보를 전송한다(이 종류의 시스템은, L1 캐시(161-164)와의 통신에 단일 공유 버스(170)를 이용하는 도 1에 도시되는 예에서와는 달리, L1 캐시(161-164) 각각에 대한 무효화 메시지용 별도의 통신 경로가 있다고 가정한다).
멀티프로세서 시스템의 성능이 계속하여 증가함에 따라, 로드 및 저장 동작의 배열을 크게 제한하는 메모리 모델을 지원하기가 점차 어려워지고 있다. 자주 사용되는 메모리 모델 중 한가지는 "TSO(Total Store Order)" 메모리 모델이다. TSO 모델 하에서는, 주어진 프로세서로부터의 로드 및 저장이 프로그램 순으로 실행되며, 단, 로드가 앞서의 저장을 추월할 수 있다. 보다 구체적으로, TSO 메모리 모델 하에서는 저장이 이전 저장을 추월할 수 없고, 저장이 이전 로드를 추월할 수 없다. 그러나, 로드는 이전 저장을 추월할 수 있다. 이로 인해, 시스템이 다음의 로드를 실행 중일 때, 앞서의 저장이 아주 느림보처럼 발생할 수 있다.
불행하게도, 로드 및 저장 동작의 배열에 대해 이러한 제한을 가함으로서, 멀티프로세서 성능이 크게 저하될 수 있다. 왜냐하면, 차후의 메모리 동작을 실행하기 전에 이전의 메모리 동작의 완료를 멀티프로세서 시스템이 기다려야 하기 때문이다.
이보다 좀 덜 제한적인 모델은 "릴리스 컨시스턴시(release constistency)"로서, 이 경우에는, 임계 영역이 여기될 때마다 프로세서가 공유 데이터의 컨시스턴트 뷰(constistent view)를 본다는 것이 유일한 제약이다. 이 메모리 모델은 TSO보다 덜 제한적이며, 더 양호한 멀티프로세서 성능을 보일 수 있다. 불행하게도, 여러 기존의 대대로 사용되던 응용프로그램들은 TSO같이 제한적 메모리 모델을 이용하고 있다.
따라서, 이러한 대대로 사용되는 응용프로그램(legacy applications)들을 구동시키기 위해, TSO 메모리 모델처럼 제한적 메모리 모델 하에서 프로그램의 효율적 병렬 실행을 촉진시키는 방법 및 장치가 필요하다.
발명의 한 실시예는 멀티프로세서 시스템에서 가-로드(speculative load) 동작을 촉진시키는 시스템을 제공한다. 이 시스템은 멀티프로세서 시스템의 한 프로세서에서 완료된 가-로드 동작의 레코드를 관리함으로서 운영된다. 이때, 가-로드 동작은 선행 로드 동작이 되돌아오기 전에 예측하여(speculatively) 개시되는 로드 동작이다. 그후, 시스템은 프로세서에 연결된 L1 캐시에서 무효화 신호를 수신하고, 이때, 무효화 신호는 L1 캐시의 특정 라인이 무효화될 것인 지를 표시한다. 이 무효화 신호에 따라, 시스템은 무효화 신호가 전달되는 L1 캐시 내 동일한 위치로 완료되어 전달되는, 일치하는 가-로드 동작이 존재하는 지를 결정하기 위해 가-로드 동작의 레코드를 검사한다. 일치하는 가-로드 동작이 존재할 경우, 시스템은 일치하는 가-로드 동작을 리플레이시켜서, 무효화 신호를 촉발시킨 이벤트가 완료된 후에, 상기 일치하는 가-로드 동작이 발생하게 한다.
발명의 한 실시예에서, 가-로드 동작의 레코드는 다수의 뱅크를 포함하며, 이때, 각각의 뱅크는 L2 캐시의 특정 뱅크에 전달되는 가-로드 동작들을 가진다.
발명의 한 실시예에서, 가-로드 동작의 레코드는 가-로드 동작의 결과를 지닌 L1 캐시의 엔트리에 대한 세트 및 방향 정보(set and way information)를 관리한다.
발명의 한 실시예에서, 무효화 신호는 캐시 코히어런시 프로토콜 동작의 결과로 수신된다.
발명의 한 실시예에서, 무효화 신호는 L1 캐시 내 특정 라인에 연계된 저장 동작의 결과로 수신된다.
발명의 한 실시예에서, 무효화 신호는 L2 캐시 내 해당 라인의 무효화 결과로 수신된다.
발명의 한 실시예에서, 가-로드 동작의 레코드는 각각의 가-로드 동작에 대한 인디케이터를 포함한다. 이 인디케이터는 가-로드 동작이 완료되었는 지를 명시한다.
발명의 한 실시예에서, 가-로드 동작의 레코드 관리는 새로운 가-로드 동작이 완료될 때마다 레코드를 업데이트하는 과정을 포함한다.
발명의 한 실시예에서, 시스템은 L2 캐시로부터 프로세서에서 리플레이 신호를 수신하고, 이때, 리플레이 신호는 세트 및 방향 위치를 식별한다. 이 리플레이 신호에 따라, 완료되어 특정 세트 및 방향 위치에 전달되는 가-로드 동작을 리플레이시킨다. 시스템이 대응하는 무효화를 실행하지 않으면서 이 리플레이를 실행한다는 것에 주목하여야 한다.
발명의 한 실시예에서, 멀티프로세서 시스템은 TSO(Total Store Ordering) 메모리 모델을 구현하며, 이 모델에서는 로드가 앞선 저장을 추월할 수 있고, 로드는 앞선 로드를 추월할 수 없으며, 저장은 앞선 로드를 추월할 수 없고, 그리고 저장은 앞선 저장을 추월할 수 없다.
발명의 또다른 실시예에서는 멀티프로세서 시스템에서 가-로드 동작을 촉진시키는 시스템이 제공된다. 이 시스템은 L2 캐시를 통해 관련 L1 캐시에게로 데이터 값들을 되돌려보낸 가-로드 동작의 L2 캐시에서 레코드를 관리함으로서 운영된다. 이때, 가-로드 동작은 선행 로드 동작이 되돌아오기 전에 예측하여 개시되는 로드 동작이다. 무효화 이벤트 수신에 따라, 시스템은 L2 캐시의 타겟 라인을 무효화시킨다. 시스템은 L2 캐시의 타겟 라인 무효화에 영향받는 가-로드 동작에 관련된 L1 캐시를 식별하기 위해 레코드에서 탐색(lookup)을 실행한다. 그후, 시스템은 영향받은 가-로드 동작을 리플레이시키기 위해 영향받은 L1 캐시에 리플레이 명령을 보내어, L2 캐시의 타겟 라인 무효화 이후, 영향받은 가-로드 동작이 이루어지게 한다.
발명의 한 실시예에서, 레코드 관리는 L1 캐시로부터 로드 미스 동작(load miss operation)를 L2 캐시에서 수신하는 과정을 포함한다. 이때, 로드 미스 동작에 관련된 L1 캐시 위치에 대하여 되돌아온 가-로드 동작이 존재하는 지 여부를 명시하는 정보가 로드 미스 동작에 포함된다. 이러한 가-로드 동작이 존재할 경우, 시스템은 L1 캐시가 가-로드 동작에 관련되어 있음을 표시하기 위해 레코드를 업데이트한다.
본 실시예의 변형으로서, 로드 미스 동작은 로드 미스 동작에 관련된 L1 캐시 위치를 식별하고, 레코드 업데이트는 레코드의 L 캐시 위치를 레코딩하는 과정을 포함하여, 차후 리플레이 명령이 L1 캐시 위치를 포함시키도록 한다. 로드 미스 동작이 가-로드 미스 동작이 아닐 경우, 시스템은 L1 캐시의 관련 엔트리가 되돌아온 가-로드 동작에 관련없음을 표시하기 위해 레코드를 업데이트한다.
발명의 한 실시예에서, 리플레이 명령이 L2 캐시 라인에 대해 한개 이상의 L1 캐시에 전달될 경우, 시스템은 L2 캐시 라인이 되돌아온 가-로드 동작에 관련없음을 표시하도록 레코드를 업데이트한다.
발명의 한 실시예에서, L2 캐시는 L1 캐시의 라인들에 대한 엔트리들을 포함하는 리버스 디렉토리(reverse directory)를 포함한다. 이때, 각각의 엔트리는 L2 캐시의 관련 엔트리를 식별한다. 본 실시예에 대한 변형으로서, 리버스 디렉토리는 L1 캐시 각각 내의 각각의 엔트리에 해당하는 고정 엔트리를 포함한다. 본 실시예에 대한 변형으로서, 리버스 디렉토리의 각각의 엔트리는 L2 캐시의 해당 엔트리 위치를 명시하는 정보를 포함한다.
발명의 한 실시예는 멀티프로세서 시스템에서 가-저장 동작(speculative store operations)을 촉진시키는 시스템을 제공한다. 이 시스템은 멀티프로세서 시스템에서의 L2 캐시에서 처리중인 가-저장 동작의 레코드를 관리함으로서 운영된다. 이때, 가-저장 동작은 선행 저장 동작이 되돌아오기 전에 예측하여 실행되는 저장 동작이다. L1 캐시로부터 L2 캐시에서 로드 동작을 수신하면, 시스템은 로드 동작이 전달될 동일 위치로 전달되는, 일치하는 가-저장 동작이 있는 지를 결정하기 위해 가-저장 동작의 레코드를 검사한다. 만약 그러하다면, 시스템은 일치하는 가-저장 동작이 완료된 후 로드 동작이 발생하는 것을 보장한다.
발명의 한 실시예에서, 일치하는 가-저장 동작이 완료된 후 로드 동작이 발생함을 보장하는 것은, 차후에 로드 동작을 프로세서로 하여금 재시도하게 하도록 프로세서에 재시도(retry) 동작을 전달하는 과정을 포함한다.
발명의 한 실시예에서, 일치하는 가-저장 동작이 완료된 후 로드 동작이 발생함을 보장하는 것은 L2 캐시에서 로드 동작이 완료되기 전에 일치하는 가-저장 동작이 완료되기를 기다리는 과정을 포함한다.
발명의 한 실시예에서, L2 캐시에서 일치하는 가-저장 동작이 완료되면, L2 캐시에 의해 로드 동작이 발생하고, 로드 동작은 일치하는 가-저장 동작에 의해 무효화되는 라인들을 지닌 다른 L1 캐시에 무효화 신호를 전송한다.
발명의 한 실시예에서, 프로세서로부터 가-저장 동작을 L2 캐시에서 수신하면, 시스템은 레코드에 가-저장 동작을 저장한다.
발명의 한 실시예에서, L2 캐시에서 저장 동작을 완료하면, 시스템은 저장 동작을 개시한 소스 프로세서에 확인 메시지를 전송한다. 확인 메시지에 따라 소스 프로세서로부터 이동(move) 신호를 수신하면, 시스템은 주어진 저장 동작이 더 이상 예측치가 아님을 표시하도록 레코드를 업데이트한다.
본 실시예에 대한 변형으로서, 소스 프로세서에서 확인 메시지를 수신하면, 소스 프로세서는 이동 신호를 L2 캐시에 보내기 전에 모든 선행 저장 동작이 완료될 때까지 기다린다.
본 실시예에 대한 변형으로서, L2 캐시에서 저장 동작을 완료하면, 시스템은 저장 동작에 의해 덮어쓰여진 캐시 라인을 지닌 L1 캐시에 무효화 신호를 보낸다.
발명의 한 실시예에서, 상기 L2 캐시에 연결된 각각의 프로세서에 대하여, 가-저장 동작의 레코드는 가-저장 동작을 지닌 저장 큐(store queue)를 포함한다.
발명의 한 실시예에서, L2 캐시는 다수의 뱅크를 포함하며, 각각의 L2 뱅크에 대하여, 가-저장 동작의 레코드는 L2 캐시에 연결된 각각의 프로세서에 대하여 한개씩의 저장 큐를 포함한다.
발명의 한 실시예에서, 시스템은 타겟 캐시 라인으로의 주어진 저장 동작을 실행하기 위해 타겟 캐시 라인에 대한 리드-투-오온(read-to-own) 요청을 수신한다. 리드-투-오온(read-to-own) 요청을 수신하면, 시스템은 타겟 캐시 라인으로 전달되는 일치하는 가-저장 동작이 존재하는 지를 결정하기 위해 가-저장 동작의 레코드를 검사한다. 만약 그러하다면, 시스템은 기록 전용 상태(write-only state)의 요청 프로세서에 타겟 캐시 라인을 넘겨서, 요청 프로세서가 타겟 캐시 라인에 기록 동작(판독 동작은 아님)을 실행할 수 있게 한다. 따라서, 데드락 컨디션(deadlock condition)을 피할 수 있다.
발명의 한 실시예에서, 본 시스템은 멀티프로세서 시스템에서 프로세서에 연결되는 L1 캐시로부터 L2 캐시에서 저장 동작을 수신한다. 시스템은 저장 동작이 전달되는 동일 위치로 전달되는 일치하는 가-저장 동작이 있는 지를 결정하기 위해 가-저장 동작의 레코드를 검사한다. 만약 그러하다면, 시스템은 저장 동작을 드롭한다.
도 1A는 멀티프로세서 시스템의 도면.
도 1B는 발명의 한 실시예에 따른 리버스 디렉토리를 지닌 멀티프로세서 시스템의 도면.
도 2는 발명의 한 실시예에 따르는 멀티프로세서 시스템 내 멀티뱅크를 지닌 L2 캐시 도면.
도 3은 본 발명의 한 실시예에 따른 리버스 디렉토리의 도면.
도 4는 본 발명의 한 실시예에 따른 리버스 디렉토리 입력의 도면.
도 5는 본 발명의 한 실시예에 따른 리버스 디렉토리 입력의 생성/업데이트 과정의 순서도.
도 6은 발명의 한 실시예에 따른 무효화를 수행하기 위해 리버스 디렉토리 입력을 이용하는 과정의 순서도.
도 7은 본 발명의 한 실시예에 따르는 관련 저장 동작에 따른 가-로드 동작의 리플레이 도면.
도 8은 본 발명의 한 실시예에 따른 가-로드 동작에 관련된 여러 구조 상태도.
도 9A는 본 발명의 한 실시예에 따라 무효화 이벤트에 따른 가-로드 동작의 리플레이를 설명하는 순서도.
도 9B는 발명의 한 실시예에 따르는 명백한 외부적 리플레이 명령에 따른 가-로드 동작의 리플레이를 설명하는 순서도.
도 10A는 본 발명의 한 실시예에 따라 L2 캐시에서 가-로드 디렉토리의 동작을 설명하는 순서도.
도 10B는 발명의 한 실시예에 따라 L2 캐시에서 가-로드 디렉토리의 업데이트를 설명하는 순서도.
도 11은 발명의 한 실시예에 따라 완료된 가-저장 동작에 의해 촉발된 가-로드 동작의 리플레이 도면.
도 12는 발명의 한 실시예에 따르는 가-저장 동작에 관련된 여러 구조 도면.
도 13A는 발명의 한 실시예에 따라 관련 가-저장 동작에 따른 가-로드 동작 의 지연을 보여주는 순서도.
도 13B는 발명의 한 실시예에 따라 L2 캐시에서 가-저장 동작을 업데이트하는 과정의 순서도.
도 14는 발명의 한 실시예에 따라 리플레이 동작에 의해 유발되는 잠재적 데드락 컨디션의 도면.
도 15는 발명의 한 실시예에 따르는 캐시 코히어런시 프로토콜에 대한 상태도 일부 도면.
도 16은 발명의 한 실시예에 따라 데드락 컨디션을 피하기 위한 기록 전용 상태(write-only state)의 처리 과정 순서도.
도 17A-C는 발명의 한 실시예에 따른, 프로세서와 저장 동작 간의 관계도.
도 18은 발명의 한 실시예에 따라 관련 가-저장 동작을 감지하면 저장 동작을 드롭시키는 과정의 순서도.
멀티프로세서 시스템
도 1B는 본 발명의 한 실시예에 따른 리버스 디렉토리를 구비한 멀티프로세서 시스템(100)을 도시한다. 멀티프로세서 시스템(100)의 상당부분이 단일 반도체 칩(1010) 내에 위치한다. 특히, 반도체 칩(101)은 레벨 1(L1) 캐시(112, 122, 132, 142)를 각각 내포하는 다수의 프로세서(110, 120, 130, 140)를 포함한다. L1 캐시(112, 122, 132, 142)는 별도의 명령 및 데이터 캐시일 수도 있고, 또는 통합된 명령/데이터 캐시일 수도 있다. L1 캐시(112, 122, 132, 142)는 레벨 2(L2) 캐 시(106)에 연결되며, 레벨 2 (L2) 캐시(106)는 리버스 디렉토리(302)를 포함하고, 리버스 디렉토리(302)는 아래 도 3-6을 참고하여 보다 상세하게 설명될 것이다. L2 캐시(106)는 메모리 콘트롤러(104)를 통해 칩 외부의 메모리(102)에 연결된다.
발명의 한 실시예에서, L1 캐시(112, 122, 132, 142)는 라이트-스루(write-through) 캐시로서, 이는 L1 캐시(112, 122, 132, 142)에 대한 모든 업데이트가 자동적으로 L2 캐시(106)에 전파됨을 의미한다. 이는 코히어런스 프로토콜을 단순하게 한다. 왜냐하면, L1 캐시(112)에 있는 데이터 아이템을 프로세서(110)가 요구할 경우, 프로세서(110)가 데이터 소싱(sourcing)을 위해 L1 캐시(112)를 기다릴 필요없이 L2 캐시(106)로부터 데이터를 수신할 수 있기 때문이다.
멀티뱅크를 지닌 L2 캐시
도 2는 발명의 한 실시예에 따른 멀티 뱅크를 지닌 L2 캐시(106)를 도시한다. 본 실시예에서, L2 캐시(106)는 네 개의 뱅크(202-205)로 구현되며, 이때, 네 개의 뱅크(202-205)는 스위치(220)를 통해 프로세서(110, 120, 130, 140)에 의해 병렬로 액세스될 수 있다. 메모리 요청이 전달될 네 개의 뱅크(202-205) 중 하나를 결정하기 위해 2비트의 어드레스만이 요구된다. 스위치(120)는 입출력 장치와 통신하기 위한 입/출력 포트(150)를 추가적으로 포함한다. 또한, 이들 뱅크(202-205) 각각은 리버스 디렉토리를 포함한다. 더욱이, 각각의 뱅크(202-205)는 독자적인 메모리 콘트롤러(212-215)를 가지며, 이는 칩 외부 메모리(232-235)의 관련 뱅크에 연결된다.
이 구조로, L2 캐시의 독자적 뱅크에 각각의 L1 캐시를 동시에 연결할 수 있 고, 이는 L2 캐시(106)로의 대역폭을 증가시킨다.
리버스 디렉토리
도 3은 발명의 한 실시예에 따른 관련 리버스 디렉토리(302)와 함께 L2 뱅크(202)를 도시한다. L2 뱅크(202)는 명령 및 데이터를 저장하기 위한 8-방향 세트 어소시에이티브 캐시(304)를 내장한다. 어드레스의 일부는 캐시(304) 내 세트를 결정하는 데 사용되며, 이는 캐시(304)의 행으로 표시된다. 주어진 세트 내에서, 8가지의 서로 다른 입력이 8개의 서로 다른 "방향 위치(way locations)" 각각에 저장될 수 있고, 이는 캐시(304)의 8개의 열에 의해 표시된다.
리버스 디렉토리(302)는 각각의 L1 캐시에 대해 별도의 블록을 포함한다. 보다 구체적으로 말하자면, 블록(312)은 L1 캐시(112)에, 블록(322)은 L1 캐시(122)에, 블록(332)은 L1 캐시(132)에, 블록(342)은 L1 캐시(142)에 관련된다.
이 블록들(312, 322, 332, 342)은 관련 L1 캐시(112, 122, 132, 142)의 각각의 라인에 대한 입력을 각각 포함한다. 더욱이, L1 캐시(112)가 4-방향 세트 어소시에이티브 캐시로 조직되기 때문에, 리버스 디렉토리(302) 내의 관련 블록(312)은 동일한 방식으로 또한 조직된다. 그러나, L1 캐시(112) 내의 입력들이 데이터 및 명령을 내포함에 비해, 관련 블록(312) 내의 입력들은 캐시(304) 내 라인 위치를 명시하는 인덱스 정보를 내포한다.
리버스 디렉토리 입력
도 4는 발명의 한 실시예에 따라 리버스 디렉토리 입력(430)이 어떻게 생성되는 지를 도시한다.
도 4의 상부는 메모리(102) 내 데이터 아이템(또는 명령)의 어드레스(400)를 도시한다. L1 캐시(112)는 이 어드레스를 L1 태그(412), L1 세트 번호(414), 그리고 L1 라인 오프셋(418)으로 나눈다. L1 세트 번호(414)는 4방향 세트 어소시에이티브 L1 캐시(112)의 구체적 세트를 탐색하는 데 사용된다. L1 태그(412)는 L1 캐시(112)에 저장되며, 각각의 세트에 대해 4-방향 세트-어소시에이티브 메모리를 구현할 용도로 비교 실행에 사용된다. L1 라인 오프셋(418)은 L1 캐시(112)의 라인 내 구체적 데이터 아이템의 위치를 결정한다.
L2 캐시(106)는 어드레스(400)를 L2 태그(402), L2 세트 번호(404), L2 뱅크 번호(406), 그리고 L2 라인 오프셋(408)으로 나눈다. L2 뱅크 번호(406)는 L2 캐시(106)의 네 개의 뱅크(202-205)로부터 구체적 뱅크를 결정한다. L2 세트 번호(404)는 L2 캐시(106)의 8-방향 어소시에이티브 뱅크의 구체적 세트를 탐색하는 데 사용된다. L2 태그(402)는 L2 캐시(106)의 구체적 뱅크에 저장되며, 각 세트에 대한 8-방향 세트-어소시에이티브 메모리를 구현할 용도로 비교 실행에 사용된다. L2 라인 오프셋(408)은 L2 캐시(106)의 라인 내 특정 데이터 아이템의 위치를 결정한다.
리버스 디렉토리(302) 내 어드레스(400)에 대한 관련 입력(430)은 잘려진 L2 세트 번호(424), L2 방향 번호(429), 그리고 유효 비트(427)를 내포한다. 잘려진 L2 세트 번호(424)는 L1 캐시(112) 내 입력 위치로부터 결정될 수 없는 L2 세트 번호(404)의 일부분을 포함한다. 다시 말해서, 잘려진 L2 세트 번호(424)는 L1 세트 번호(414)와 겹쳐지지 않는 L2 세브 번호(404) 부분을 내포한다. L2 방향 번호(429)는 캐시(304)에서, 라인에 대한 8가지 가능한 방향 위치로부터, 라인의 열 위치를 명시하는 3-비트 인덱스를 내포한다. 마지막으로, 유효 비트(427)는 입력(430)이 유효한 지를 표시한다.
L2 캐시(106) 내 각각의 라인에 대한 L1 캐시 위치를 저장하는 대신에, 도시되는 실시예는 각각의 L1 캐시 위치를 저장하며, 이 입력들은 L1 위치에 관련된 L2 캐시 위치를 명시한다.
따라서, 각각의 L2 입력으로부터 L21 입력에 대한 포인터를 유지시키는 대신에, 각각의 L1 입력으로부터 해당 L2 입력까지 리버스 방향으로 포인터를 유지시키기 때문에, 디렉토리(302)를 "리버스 디렉토리"로 여길 수 있다. 이는 L2 입력에 비해 L1 입력이 적기 때문에 메모리를 절약할 수 있다.
리버스 디렉토리 입력 생성 과정
도 5는 발명의 한 실시예에 따르는 리버스 디렉토리 입력을 생성 또는 업데이트하는 과정의 순서도이다. 이 과정은 라인 호출 요청이 L1 캐시(112)로부터 L2 캐시(106)에서 수신될 때 시작된다(502). 이 요청은 어드레스(400), L1 캐시(112)를 식별하는 L1 캐시 번호, 그리고 불러들여진 후 라인이 저장될 L1 캐시(112) 내 방향 위치를 포함한다.
그 다음으로, 요청이 L2 캐시(106)에 미스(miss)를 발생시키면, 시스템은 메모리(102)로부터 라인을 L2 캐시(106)로 불러들인다(504). 이 호출이 L2 캐시(106)의 기존 입력을 무효화시킬 경우, 리버스 디렉토리(302)의 대응 입력이 무효화될 수 있다.
그후 시스템은 L2 캐시(106)로부터 라인을 불러들이고, L1 캐시(112)에 라인을 보낸다(506).
시스템은 리버스 디렉토리(302)에 대한 입력(430)을 또한 구축한다(508). 이 입력은 잘려진 L2 세트 번호(424), L2 방향 번호(429), 그리고 유효 비트(427)를 포함한다(도 4 참조).
시스템은 리버스 디렉토리(302)의 위치에 입력을 저장한다(510). 이 위치는 다수의 아이템에 의해 결정된다. L2 뱅크 번호(406)로부터, 시스템은 L2 뱅크(202)를 조사해봐서 안다. L1 캐시 번호로부터, 시스템은L1 캐시(112)에 관련된 블록(312)을 조사해봐서 안다. 어드레스(400)로부터, 시스템은 특정 L1 세트에 관련된 행을 결정한다. 요청과 함께 수신한 L1 방향 위치로부터, 시스템은 상기 행 내의 열을 결정한다.
리버스 디렉토리 입력의 이용 과정
도 6은 발명의 한 실시예에 따른 무효화 실행을 위해 리버스 디렉토리 입력을 이용하는 과정의 순서도를 도시한다. 이 시스템은 L2 캐시(106)의 업데이트를 유발시키는 요청을 수신함으로서 시작된다(602). 이 요청은 또다른 프로세서에 의한 타겟 입력에 대한 저장 히트(store hit), 로드 미스(load miss), 또는 저장 미스(store miss)를 포함할 수 있다.
그 후, 시스템은 리버스 디렉토리(302)의 요청에 대한 입력을 재구축한다. 이는 타겟 입력이 위치하는 L2 방향 번호(429)를 결정하는 데 L2 캐시(106)의 탐색을 수행함으로서(604), 그리고 도 4에 도시되는 바와 같이 어드레스(400)로부터 L2 세트 번호(404)를 불러들임으로서(606) 실현된다. 이 값들은 리버스 디렉토리 입력(130)을 구축하도록 조합된다.
그후, 시스템은 어떤 L1 캐시가 입력을 내포하는 지를 결정하기 위해 리버스 디렉토리(302)를 검색하는 데 이 입력을 이용한다(608). 시스템은 L2 뱅크 번호(406)에 의해 명시되는 L2 캐시(206)의 뱅크에 관련된 리버스 디렉토리를 검색하기만 하면 된다. 더욱이, 리버스 디렉토리 내 세트 번호는 어드레스로부터 결정될 수 있고, 이는 검색이 각각의 세트에 대해 네가지 가능한 "방향(ways)"의 입력들을 고려하기만 하면 된다는 것을 의미한다. 요청이 또다른 프로세서에 의한 저장 히트일 경우, 시스템은 저장 히트를 유발한 프로세서에 대한 뱅크를 검색할 필요가 없다.
상기 입력을 내포한 각각의 L1 캐시의 경우, 시스템은 L1 캐시에 무효화 메시지를 전송한다. 이 무효화 메시지는 L1 방향 번호를 포함하여, L1 캐시의 관련 탐색을 피할 수 있게 한다. 시스템은 무효화되었음을 표시하기 위해 해당 리버스 디렉토리 입력을 또한 업데이트한다(610).
무효화에 따른 가-로드의 리플레이(Replaying a Speculative Load in Response to an Invalidation)
도 7은 발명의 한 실시예에 따르는 무효화 신호에 따른 가-로드(speculative load) 동작의 리플레이 도면이다. 도 7은 좌측에서 우측으로 진행하는 시간 라인을 포함한다. 명령 발생은 시간 라인 위에 나타나는 화살표로 표시되며, 이에 대응하는 명령 완료는 시간 라인 아래 나타나는 화살표로 표시된다.
도 7의 좌측에서 시작되는 저장 A 동작과 저장 B 동작은 제 2 프로세서로부터 발급된다. 그후, 제 1 프로세서가 로드 A 동작을 발급하고, 이어서 로드 A 동작이 완료되기 전에 로드 B 동작을 발급한다.
로드 A 동작이 완료되기 전에 로드 B 동작이 완료된다. 이는 로드 B 동작이 로드 A 동작을 추월하였기 때문에 TSO 메모리 모델에서 문제가 될 수 있다. 이 추월은 TSO 메모리 모델을 위협한다. 그러나, 로드 B 동작이 완료되는 시점과 로드 A 동작이 완료되는 시점 사이에 어떤 메모리 동작도 이루어지지 않을 경우, 로드 B 동작이 먼저 종료된다는 사실이 눈에 띄지 않을 것이다.
그러나, 도 7에 도시되는 바와 같이, 로드 B 동작 완료 시점과 로드 A 동작 완료 시점 사이의 구간에서 제 2 프로세서로부터의 저장 A 동작과 저장 B 동작이 모두 완료된다. 그러므로, 로드 B 동작은 B의 예전값을 되보낼 것이고, 로드 A 동작은 A의 새로운 값을 되보낸다. 결과적으로, 선행하는 로드 A 동작에 앞서 로드 B 동작이 종료된다는 사실이 제 2 프로세서의 눈에 띌 것이고, 이는 TSO 메모리 모델을 위협한다는 것을 의미한다.
이 문제 해결을 위해, 발명의 한 실시예는 제 1 프로세서가 로드 B 동작을 리플레이시키게 한다. 그래서, 저장 B 동작이 완료된 후 로드 B 동작이 일어나게 한다(도 7).
도 8은 발명의 한 실시예에 따라 가-로드 동작을 리플레이시키는 데 관련된 여러 구조를 도시한다. 도 8에서처럼, 프로세서(151)는 명령 윈도(802)에 연결되며, 명령 윈도(802)는 완료되어야할 "인-플라이트(in-flight)" 명령의 리스트를 지 닌다. 명령 윈도(802)가 다수의 로드 및 저장 동작을 프로그램 순으로 포함하는 것에 주목하여야 한다.
프로세서(151)는 L2 캐시(106)와 통신하는 로컬 L1 캐시(161)에 또한 연결된다. 한개의 L2 뱅크(202)만이 도 8에 도시되지만, L1 캐시(161)는 도 8에 도시되지 않은 나머지 L2 뱅크(203-205)와도 통신한다.
L1 캐시(161)는 스플릿 로드 버퍼(split load buffer)(804)에 연결되며, 스플릿 로드 버퍼(804)는 프로세서(151)가 완료한 가-로드를 기억한다. 이로 인해, 어떤 완료된 가-로드 동작이 동일 위치로의 저장 동작 때문에 리플레이될 필요가 있는 지를 시스템이 결정할 수 있다.
스플릿 로드 버퍼(804)가 네 개의 큐로 나누어진다. 멀티프로세서 시스템(100)의 각각의 L2 뱅크에 대해 큐가 한개씩 할당된다. 큐 중 하나에서의 어떤 주어진 엔트리(808)는 L1 세트(809)와 L1 방향(way)(810)만을 지닌다. L1 캐시의 특정 세트와 특정 방향에 대한 무효화가 완료된 가-로드 동작의 리플레이를 필요로하는 지를 결정하는 데 이것만이 필요한 것이다.
가-로드 동작이 프로세서(151)에 의해 개시될 때마다 엔트리가 스플릿 로드 버퍼(804)에 추가된다. 엔트리가 더 이상 예측치(speculative)가 아닌 후라면 언제라도, 스플릿 로드 버퍼(108)로부터 엔트리를 버릴 수 있다. 이는 모든 선행 로드들이 완료되었음을 의미한다. 발명의 한 실시예에서, 엔트리 관련 명령이 명령 윈도(802)로부터 버려짐과 동시에 엔트리가 스플릿 로드 버퍼(804)로부터 버려진다.
발명의 한 실시예에서, 모든 가-로드가 스플릿 로드 버퍼(804)에 저장되며, 완료되지 않은 가-로드 동작도 포함된다. 본 실시예에서, 관련 가-로드 동작이 완료되었는 지 여부를 표시하기 위해 각각의 엔트리에 추가적인 비트가 포함된다.
본 발명은 도 8에 도시되는 정확한 스플릿 로드 버퍼 구현에 제한되지 않는다. 일반적으로, 완료된 가-로드 동작을 기억하는 어떤 구조도 사용될 수 있다.
다수의 구조가 L2 뱅크(202) 근처에 위치한다. 도 3을 참고하여 논의한 리버스 디렉토리(302)에 추가하여, L2 뱅크(202)는 가-로드 디렉토리(812)와 또한 관련된다. 가-로드 디렉토리(812)는 리버스 디렉토리(302)와 유사한 구조를 취하며, 단지, L1 캐시 퇴거로 인해 리버스 디렉토리(302)가 관련 L2 캐시 위치를 지시하지 않을 경우라도, 리플레이될 필요가 있을 수 있는 완료된 가-로드 동작을 지닌 L 캐시 위치를 기억한다는 점에서 차이가 있다. L2 캐시 라인(106) 내 라인에 대한 저장 동작 중, 어떤 L1 캐시에 무효화 신호를 보내야 하는 지를 결정하는 데 리버스 디렉토리(302)가 사용된다는 점을 주목하여야 한다. 다시 말해서, 완료된 가-로드 동작에 관련된 퇴거된 L1 캐시에 대한 L2 캐시 라인을 가-로드 디렉토리(812)가 기억한다.
엔트리가 L1 캐시로부터 퇴거되면, 리버스 디렉토리(302)의 해당 엔트리가 제거된다. 그러나, 관련 L2 캐시 라인이 무효화될 경우, 완료된 가-로드 동작을 리플레이하기 위해 완료된 가-로드 동작에 관련된 L1 캐시 엔트리를 시스템이 기억할 필요가 있다.
이를 위해, 완료된 가-로드 동작을 지닌 특정 프로세서에 리플레이 메시지가 전달될 필요가 있는 지를 결정하기 위해 시스템이 가-로드 디렉토리(812)를 이용한 다. 가-로드 디렉토리(812)의 구조는 리버스 디렉토리(302)의 구조를 본딴다. 그러므로, 가-로드 디렉토리(812)의 엔트리(817)는 잘려진 L2 세트 번호(818)와, L2 방향 번호(820), 그리고 유효 비트(822)를 지닌다. 그러나, L2 세트 번호(818)와 L2 방향 번호(820)가 0과 1 값에 추가하여 "취급안함(don't care)" 값을 지닐 수 있기 때문에, 엔트리(817)는 리버스 디렉토리(302)의 엔트리와 다르다. don't care 값(가끔씩 "X"로 불림)은 그 비트가 0 값이나 1 값을 가질 수 있음을 표시한다. 이 don't care 값으로 인해, 가-로드 디렉토리가 특정 L1 캐시 위치에 대한 완료된 가-로드 동작에 관련된 모든 가능한 L2 엔트리를 기억할 수 있다.
리버스 디렉토리(302)와 가-로드 디렉토리(812)의 엔트리들은 동일 상태에서시작된다. 그러나, L1 무효화로 인해 특정 L1 캐시 위치가 다른 L2 캐시 라인을 가리킬 수 있기 때문에, 가-로드 디렉토리(218)의 해당 L1 캐시 엔트리가 don't care 값으로 채워지기 시작한다. 어느 비트 위치가 변경되었는 지 결정하기 위해 L2 세트 번호(818)와 L2 방향 번호(820)에 대한 기존 비트와 새 비트를 XOR 처리함으로서 새 don't care 값이 연산될 수 있다. L2 세트 번호(818)와 L2 방향 번호(820)의 각각의 비트에 대한 세가지 가능한 값(0, 1, X)을 표시하기 위해 최소한 2비트 이상이 필요하다.
로드 동작 중, 가-로드 디렉토리(812)는 어드레스(811)와 L1 방향 번호(816)를 포함하여 L1 캐시(161)로부터 다수의 신호를 수신한다. 이 신호들은 가-비트(814)를 또한 포함하며, 이 비트(814)는 완료된 가-로드 동작에 역시 관련된 L1 캐시 위치에 로드 동작이 전달되는 지를 표시한다.
L1 캐시로부터의 저장 동작 중, 해당 L2 캐시 라인이 업데이트되고, 무효화 신호가 L2 캐시 라인을 지닌 다른 모든 L1 캐시에 전달된다. 이는 L2 캐시 라인을 지닌 모든 L1 캐시 위치를 탐색하기 위해 리버스 디렉토리(302)에서 탐색을 실행함으로서 이루어진다. 이미 퇴거되었으나 그럼에도 불구하고, 완료된 가-로드 동작에 관련되어 있는 L1 캐시 라인을 식별하기 위해 가-로드 디렉토리(812)에서 유사한 탐색이 실행된다. 이때, L2 캐시 라인에 대한 저장이 완료된 가-로드 동작에 영향을 미친다. 이렇게 퇴거된 L1 캐시 라인이 식별되면, 리플레이 신호가 L1 캐시에 전달된다. 이는, L1 세트 및 방향 정보(824)에 추가하여 L1 캐시에 추가적인 "리플레이 전용(replay only)" 비트(826)를 보냄으로서 이루어진다. 이 리플레이 전용 비트(826)는 L1 캐시 라인이 리플레이 동작에 추가하여 무효화될 필요가 있는 지, 또는, L1 캐시 라인이 이미 퇴거되었기 때문에 리플레이 동작만이 요구되는 지를 명시한다.
본 발명은 도 8에 도시되는 정확한 가-로드 디렉토리 구현에 제한되는 것을 의미하는 것은 아니다. 일반적으로, L2 캐시 라인의 무효화에 영향받는 완료된 가-로드 동작에 관련된 L1 캐시 위치를 기억하는 어떤 구조도 본 발명에 사용될 수 있다.
도 9A는 발명의 한 실시예에 따르는, 무효화 이벤트에 따른 가-로드 동작의 리플레이를 설명하는 순서도이다. 본 시스템은 완료된 가-로드 동작의 레코드를 프로세서에서 관리함으로서 운영된다(902). 도 8에 나타난 실시예에서, 이 레코드는 스플릿 로드 버퍼(804) 형태를 취한다. 그후, 시스템은 L2 뱅크(202)로부터 L1 캐시(161)에서 무효화 신호(823)를 수신한다(단계 904). 이 시스템은 L1 캐시(161)의 특정 엔트리를 무효화시키기 위해 무효화 신호(823)로부터 세트 및 방향 정보(824)를 이용한다(905). 동일한 L1 캐시 엔트리에 대해 완료된 어떤 일치하는 가-로드 동작이 있는 지를 결정하기 위해 시스템은 레코드를 검사한다(906). 만약 그러하다면, 시스템은 일치하는 가-로드 동작을 리플레이한다(908).
리플레이 명령에 따라 가-로드를 리플레이
도 9B는 발명의 한 실시예에 따라, 명백한 외부적 리플레이 명령에 따른 가-로드 동작의 리플레이를 설명하는 순서도이다. L1 캐시(161)에서 리플레이 전용 신호(826)를 수신하면(910), 동일한 L1 캐시 엔트리에 대해 완료된 어떤 일치하는 가-로드 동작이 있는 지를 결정하기 위해 시스템은 레코드를 검사한다(911). 만약 그러하다면, 시스템은 일치하는 가-로드 동작을 리플레이한다(912).
L2 캐시에서의 가-로드 디렉토리
도 10A는 발명의 한 실시예에 따라, L2 뱅크(202)에서 가-로드 디렉토리의 동작을 설명하는 순서도이다. 특정 L2 캐시 라인에 관련된 되돌아온 가-로드 동작의 레코드를 L2 뱅크(202)에서 관리함으로서 시스템이 운영된다(1002). 도 8에 도시되는 발명의 실시예에서, 레코드는 가-로드 디렉토리(812) 형태를 취한다.
그후, 타겟 L2 캐시 라인에 대한 업데이트처럼, 타겟 L2 캐시 라인에 대한 무효화 이벤트에 따라, 시스템은 다수의 동작을 실행한다. 1) 시스템은 상기 타겟 캐시 라인을 무효화시킨다. 2) 시스템은 L2 캐시 라인의 무효화에 영향받을 되돌아온 가-로드 동작에 관련된 L1 캐시 라인을 식별하기 위해 가-로드 디렉토리(812)에 대한 탐색을 실행한다. 이때, don't care 값으로 인해 실제 존재치보다 더 많은 일치사항이 표시될 수 있다. 3) 그후, 시스템은 영향받은 가-로드 동작을 리플레이하도록 잠재적으로 영향받은 L1 캐시에 리플레이 명령(또는 무효화 신호)를 보낸다(1004).
도 10B는 발명의 한 실시예에 따라 L2 뱅크(202)에서 가-로드 디렉토리(812)의 업데이트를 설명하는 순서도이다. 시스템은 L1 캐시로부터 L2 뱅크(202)에서 로드 미스(load miss)를 수신함으로서 운영된다(1006). 그후, 로드 미스가 예측치(speculative)인지를 결정하기 위해, 시스템이 가-비트(814)를 검사한다. 이는, 동작이 완료된 가-로드에 대한 L1 캐시 엔트리에 로드 미스가 관련되었음을 의미한다(1008). 만약 그러하다면, 시스템은 추가적인 가-로드 동작을 설명하기 위해 가-로드 디렉토리(812)를 업데이트한다(1010). 로드 미스로 인해, 리버스 디렉토리(302)의 L1 캐시 엔트리가 새 L2 캐시 라인을 가리킬 경우, 가-로드 디렉토리(812)의 해당 엔트리가 don't care 비트로 업데이트되어, 옛 L2 캐시 라인과 새 L2 캐시 라인을 모두 커버한다.
로드 미스가 예측치가 아닐 경우, 시스템은 되돌아온 가-로드 동작에 관련 L1 캐시 엔트리가 관련되지 않았음을 표시하기 위해 레코드를 업데이트한다(1012). 이는 가-로드 디렉토리(812)의 엔트리를 리버스 디렉토리(302)의 해당 엔트리와 같도록 하기 위해 don't care 비트 모두를 삭제함으로서 이루어진다. 로드 미스가 예측치로 표시되지 않았다는 사실은, 모든 선행 로드 동작들이 L1 캐시 위치에 대해 완료되었음을 의미한다. 이는, L1 캐시 위치에 관련된 가-로드 동작이 더 이상 예 측치가 아님을 의미한다.
가-저장에 따른 가-로드 리플레이
도 11은 발명의 한 실시예에 따라, 완료된 가-저장 동작(speculative store operations)에 의해 유발되는 가-로드 동작의 리플레이를 도시하는 도면이다. 도 11은 좌측에서 우측으로 진행하는 시간 라인을 도시한다. 명령 발급은 시간 라인 위에 표시되는 화살표로, 해당 명령 완료는 시간 라인 아래 나타나는 화살표로 표시된다.
도 11의 예에서, 제 1 프로세서는 로드 A 동작을 발생시키고, 이후, 선행 로드 A 동작이 완료되기 전에 로드 B 동작을 발생시킨다. 그후, 제 2 프로세서는 저장 A 동작을 발생시키고, 선행 저장 A 동작이 완료되기 전에 저장 B 동작을 발생시킨다. 이어서, 저장 B 동작은 저장 A 동작이 완료되기 전에 완료된다.
이는 저장 B 동작이 저장 A 동작을 추월하였기 때문에 TSO 메모리 모델에 문제점이 될 수 있다. 왜냐하면, 이는 TSO 메모리 모델을 위협하기 때문이다. 그러나, 저장 B 동작 완료 시점과 저장 A 동작 완료 시점 사이에 어떤 메모리 동작도 발생하지 않을 경우, 먼저 완료된 저장 B 동작이 아무 차이도 보이지 않을 것이다.
그러나, 도 11에 도시되는 바와 같이, 제 1 프로세서에 대한 저장 B 동작 완료 시점과 저장 A 동작 완료 시점 사이의 구간에서 제 1 프로세서로부터의 로드 A 동작이 완료된다. 따라서, 로드 A 동작은 옛 A 값을 되보낼 것이고, 로드 B 동작은 새 B 값을 되보낸다. 결과적으로, 선행 저장 A 동작에 앞서 완료된 저장 B 동작이 눈에 띌 것이고, 이는 TSO 메모리 모델이 침해받음을 의미한다.
이 문제점을 해결하기 위해, 발명의 한 실시예에서는 저장 A 동작이 완료된 이후일 때까지 로드 A 동작의 완료가 지연된다. 이는 캐시 미스가 발생한 경우처럼 로드 A 동작을 취급함으로서, 그리고 캐시 미스에 대한 라인 필(line fill)로서 저장 A 동작의 완료를 취급함으로서 달성될 수 있다. 이 방식으로 저장 A 동작이 완료됨으로서, 로드 A 동작이 완료될 것이다.
발명의 또다른 실시예에서, L2 캐시는 로드 A 동작을 발원시킨 L1 캐시에 리트라이(retry) 신호를 보낸다. 이로 인해, L1 캐시는 저장 A 동작 완료 후 차후에 로드 A 동작을 재시도한다.
저장 동작 파괴 데이터 값이 메모리에 저장되어 있기 때문에 저장 동작은 리플레이될 수 없다. 그러므로, 본 발명은 간섭형 로드 명령을 지연시키거나 리플레이시킴으로서 이 문제점을 피해나가며, 따라서, 저장 동작의 비정상적 완료가 눈에 띄지 않는다.
가-저장 동작(speculative store operations)
도 12는 발명의 한 실시예에 따라 가-저장 동작에 관련된 여러 구조를 도시한다. 도 12에 도시되는 바와 같이, 프로세서(151)는 L1 캐시(161)를 포함하며, 저장 버퍼(1202)에 관련된다.
저장 버퍼(1202)는 진행중인 저장 동작을 기억한다. 이를 위해, 저장 버퍼(1202)는 각각의 엔트리에 대해 추가적인 "complete(완료)" 비트를 포함하며, 이 비트는, 저장 동작이 완료됨을 표시하는 메모리 수직구조의 로우 레벨로부터 확인 메시지가 수령되었는 지 여부를 표시한다.
L2 캐시(106)에서, 각각의 L2 뱅크는 프로세서(110, 120, 130, 140)에 대한 프로세서당 저장 큐(a per processor store queue)를 포함한다. 도 12는 L2 뱅크(202)와 L2 뱅크(203)에 대해 각각 프로세서 당 저장 큐(1206, 1208)를 포함한다. 프로세서 당 저장 큐는 L2 뱅크(204-205)에 대해서도 존재하지만 도 12에 도시되지는 않았다.
프로세서 당 저장 큐(1206, 1208)는 각각의 프로세서로부터 아직 완료되지 않은 가-저장 동작을 지닌다. 이로 인해 시스템은, 주어진 가-저장 동작이 완료될 때까지 다음의 로드 동작을 지연시킬 필요가 있는 지를 결정할 수 있다.
도 13A는 발명의 한 실시예에 따라 관련 가-저장 동작에 따른 가-로드 동작지연 과정의 순서도이다. 이 시스템은 가-저장 동작의 레코드를 관리함으로서 시작된다(1302). 도 12에 도시되는 발명의 실시예에서, 이 레코드는 프로세서 당 저장 큐(1206, 1208)의 형태를 취한다.
그후, 시스템은 L2 뱅크(202)에서 로드 동작을 수신한다(1304). 로드가 어떤 특별한 가-저장 동작과 일치하는 지를 결정하기 위해 시스템이 프로세서당 저장 큐를 검사한다(1306). 만약 일치한다면, 시스템은 일치하는 가-저장 동작이 완료될 때까지 로드 동작을 지연시킨다(1308). 상술한 바와 같이, 이는 저장이 완료될 때까지 로드 동작의 완료를 지연시키거나, 로드 동작을 재시도시키는 과정을 포함할 수 있다.
도 13B는 발명의 한 실시예에 따라 L2 뱅크(202)에서 가-저장 정보를 업데이트시키는 과정의 순서도이다. L2 뱅크(202)에서 프로세서(151)로부터 가-저장 동작 을 수신하면(1310), 시스템은 프로세서(151)에 관련된 저장 큐에 가-저장 동작을 입력한다(1312). 그후 시스템에 의해 저장 동작이 L2 뱅크(202)에서 완료된다(1314). L2 뱅크(202)는 그후 가-저장 동작이 완료되었음을 표시하는 확인 메시지를 프로세서(151)에 보낸다(1316). 그후, 프로세서(151)는 모든 선행 저장 동작이 완료될 때까지 기다리고, 그후 L2 뱅크(202)에 "이동(move)" 명령을 다시 보낸다(1318). 프로세서(151)에서 저장 버퍼(1202)를 검사함으로서 모든 선행 저장 동작이 완료되는 시기를 프로세서(151)가 말할 수 있다. 마지막으로, 프로세서(151)로부터 이동 신호를 수신하면, L2 캐시는 저장 동작이 더 이상 예측치가 아님을 표시하기 위해 프로세서 당 저장 큐(1206)를 업데이트한다(1320). 이는 프로세서 당 저장 큐(1206)로부터 저장 동작을 제거함으로서 달성될 수 있다.
데드락 방지를 위한 기록-전용 상태 이용
도 14는 발명이 한 실시예에 따라 리플레이 동작에 의해 유발되는 잠재적 데드락을 도시한다. 도 14는 좌측에서 우측으로 진행하는 시간 라인을 도시한다. 명령 발급은 시간 라인 위에 나타나는 화살표로, 그리고 명령 완료는 시간 라인 아래에 나타나는 화살표로 표시된다.
도 14에 도시되는 예에서, 제 1 프로세서는 저장 A 동작을 발급하고, 제 2 프로세서는 저장 B 동작을 발생시킨다. 그후, 저장 A 동작이 완료되기 전에 제 1 프로세서가 저장 B 동작을 예측치로 발생시킨다. 마찬가지로, 저장 A 동작이 완료되기 전에 제 2 프로세서는 저장 B 동작을 예측치로 발생시킨다.
그후, 제 1 프로세서에 의한 가-저장 B 동작은 제 1 프로세서에 의한 선행 저장 A 동작이 완료되기 전에 완료된다. 마찬가지로, 제 1 프로세서에 의한 선행 저장 B 동작이 완료되기 전에 제 2 프로세서에 의한 가-저장 A 동작이 완료된다.
이어서, 제 1 프로세서에 대한 저장 A 동작으로 인해, 코히어런시 프로토콜의 일부분으로 메모리 요소 A에 RTO(Request-To-Own) 동작이 발생한다. 메모리 요소 A의 소유권을 얻기 위해 제 1 프로세서가 RTO A 동작을 실행할 필요가 있다. 그래서, 제 1 프로세서가 저장 A 동작 완료를 위해 메모리 요소 A를 수정할 수 있도록 한다. 마찬가지로, 메모리 요소 B의 소유권을 얻기 위해 제 2 프로세서는 메모리 요소 B에서 RTO B 동작이 발생하게 한다. 따라서, 저장 B 동작을 완료하도록 제 2 프로세서가 메모리 요소 B를 수정할 수 있다.
그러나, 메모리 요소 A가 제 2 프로세서에 의한 가-저장 동작의 대상이기 때문에, 제 2 프로세서에 의한 선행 저장 B 동작이 완료될 때까지 제 1 프로세서에 의한 RTO A 동작은 RTO A 동작을 지연시킨다. 마찬가지로, 메모리 요소 B가 제 1 프로세서에 의한 가-저장 동작의 대상이기 때문에, 제 1 프로세서에 의한 선행 저장 A 동작이 완료될 때까지 제 2 프로세서에 의한 RTO B 동작은 RTO B 동작을 지연시킬 것이다. 이로인해, 제 1 프로세서와 제 2 프로세서 사이에 데드락 컨디션이 발생한다.
발명의 한 실시예에서는 "W"로 표시되는 "기록 전용(write only)" 캐시 라인 상태를 캐시 코히어런시 프로토콜에 삽입함으로서 이 데드락 조건을 피할 수 있다(도 15 참조). 도 15에서, 이 캐시 코히어런시 프로토콜은 다음의 MOESI상태 중 일상적인 상태 전이 전부를 포함한다. 즉, 수정형(M), 소유형(O), 배타적(E), 공유형(S), 그리고 무효형(I) 상태가 그 예가 된다. 이 표준 MOESI 전이는 간략화를 위해 도시되지 않았다. 추가적으로, 이 프로토콜은 기록 전용 "W" 상태를 포함한다.
시스템 동작 중, 가-저장 동작이 존재하는 캐시 라인에서 프로세서가 RTO동작을 수행할 때, 프로세서는 기록 전용 상태로 캐시 라인을 수용한다. 캐시 라인이 더 이상 예측치가 아닐 경우, 기록 전용 상태는 수정된 상태로 업그레이드된다.
구체적으로, 도 16은 발명의 한 실시예에 따라 데드락 컨디션을 방지하기 위해 기록 전용 상태를 이용하는 과정을 설명하는 순서도이다. 타겟 캐시 라인에 대한 프로세서로부터의 RTO 요청을 수신하면(1602), 시스템은 가-저장 동작의 레코드를 검사한다(1604). 일치하는 가-저장 동작이 존재할 경우, 상기 타겟 캐시 라인을 현재 지니고 있는 소스 프로세서는 타겟 캐시 라인을 요청 프로세서에 기록 전용 상태로 전달한다(1606). 소스 프로세서는 로컬 L2 캐시에서 타겟 캐시 라인을 무효화시킨다. 상기 캐시 라인은 이어서 또다른 요청 프로세서에 기록 전용 상태로 전달된다. 마지막으로, 이동 메시지를 수신하면, 시스템은 모든 프로세서에 업그레이드 메시지를 송출하여, 타겟 캐시 라인을 현재 지니고 있는 프로세서가 수정을 위해 타겟 캐시 라인의 상태를 업그레이드시킬 수 있다(1608).
저장-동작 드롭(Dropping Store Operations)
가-저장 동작이 또다른 프로세서의 현재 진행중인 저장 동작과 같은 어드레스로 전달될 때 문제 상황이 발생할 수 있다. 도 17A를 보면, 어드레스 A와 어드레스 B가 L2 캐시(106)의 서로 다른 뱅크에 위치한다고 가정한다. 또한, 프로세서 P1 에서 실행되는 프로그램이 저장 A 동작을 명시하고 그후 저장 B 동작을 명시한다고 가정한다. 마찬가지로, 프로세서 P2에서 실행되는 프로그램은 저장 B 동작을 명시하고 이어서 저장 A 동작을 명시한다고 가정한다.
도 17A에서, P1으로부터의 저장 A 동작이 발생하기 전에, P1으로부터의 저장 B 동작이 무순서로 발생된다. 그러나, 이는 프로그램 실행에 영향을 미치지 않는다. 왜냐하면, 이 두 저장 동작 사이에서 발생하는 어떤 로드 동작도 앞서 설명한 메커니즘에 의해 취급되기 때문이다. 더욱이, P1으로부터의 두 저장 동작 사이에서 P2로부터의 어떤 저장 동작도 발생하지 않는다.
도 17B에서, P1으로부터의 저장 B 동작은 앞서와 마찬가지로, P1으로부터의 저장 A 동작 발생 이전에 무순서로 실행된다. 그러나 본 예에서, P2로부터의 저장 B 동작과 저장 A 동작은 P1으로부터의 이 두 저장 동작 사이에서 발생된다. 이는 모든 저장 동작이 완료된 후, 어드레스 A가 P1에 의해 기록된 값을 지니고 어드레스 B가 P2에 의해 기록된 값을 지니기 때문에 문제가 될 수 있다. 저장 동작이 프로그램 순서로 진행될 경우 이 결과는 나타날 수 없다. 이 문제점을 해결하기 위해, 시스템은, 동일한 어드레스에 대한 P1으로부터의 현재 진행중인 저장 동작을 만날 때, P2에 의한 어드레스 B에 대한 저장 동작을 드롭시킨다. 이 과정은 도 18을 참고하여 보다 상세하게 설명될 것이다.
도 17C에서, P1으로부터의 저장 B 동작이 앞서와 마찬가지로, P1으로부터의 저장 A 동작 이전에 무순서로 이루어진다. 그러나 본 예에서, P2로부터의 저장 A 동작이 P1으로부터의 이 두 저장 동작 사이에서 이루어진다. 이는 모든 저장 동작 완료 후, 어드레스 A가 P1에 의해 기록된 값을, 어드레스 B가 P2에 의해 기록된 값을 지니기 때문에 문제가 될 수 있다. 저장 동작이 프로그램 순서로 진행될 경우 이 결과는 나타날 수 없다. 이 문제점을 해결하기 위해, 시스템은, 동일한 어드레스에 대한 P2로부터의 현재 진행중인 저장 동작을 만날 때, P1에 의한 어드레스 A에 대한 저장 동작을 드롭시킨다. 이 과정은 도 18을 참고하여 보다 상세하게 설명될 것이다.
도 18은 발명의 한 실시예에 따라 관련 가-저장 동작을 감지할 때 저장 동작을 드롭시키는 과정을 설명하는 순서도를 도시한다. 이 시스템은 가-저장 동작의 레코드를 관리함으로서 시작된다(1802). 도 12에 도시되는 발명의 실시예에서, 이 레코드는 프로세서 당 저장 큐(1206, 1208)의 형태를 취한다.
그후, 시스템은 L2 뱅크(202)에서 저장 동작을 수신한다(1804). 저장 동작이 다른 프로세서로부터의 어떤 특별한 가-저장 동작과 일치하는 지를 결정하기 위해 시스템은 프로세서당 저장 큐를 검사한다(1806). 만약 일치한다면, 시스템은 프로세서당 저장 큐로부터 저장 동작을 삭제함으로서 저장 동작을 드롭시킨다(1808).



Claims (27)

  1. 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법으로서, 이 방법은,
    - 멀티프로세서 시스템의 L2 캐시에서 처리중인 가-저장 동작(speculative store operations)의 레코드를 관리하고,
    이때, 가-저장 동작은 선행 저장 동작이 되돌아오기 전에 예측치로(speculatively) 실행되는 저장 동작이며,
    - 멀티프로세서 시스템의 프로세서에 연결된 L1 캐시로부터 L2 캐시에서 로드 동작(load operations)을 수신하며,
    - 로드 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작의 레코드를 검사하고, 그리고
    - 일치하는 가-저장 동작이 있을 경우, 일치하는 가-저장 동작이 완료된 후 로드 동작이 실행됨을 보장하는,
    이상의 단계를 포함하는 것을 특징으로 하는, 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  2. 제 1 항에 있어서, 일치하는 가-저장 동작의 완료 이후 로드동작의 실행을 보장하는 상기 단계는, 차후에 로드 동작을 프로세서가 재시도하도록 프로세서에 리트라이 동작(retry operations)을 전달하는 과정을 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  3. 제 1 항에 있어서, 일치하는 가-저장 동작의 완료 이후 로드동작의 실행을 보장하는 상기 단계는, L2 캐시에서 로드 동작 완료 이전에 일치하는 가-저장 동작이 완료를 기다리는 과정을 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  4. 제 3 항에 있어서, L2 캐시에서 일치하는 가-저장 동작이 완료되면, L2 캐시에 의해 로드 동작이 진행되고, 일치하는 가-저장 동작에 의해 무효화되는 라인을 지닌 다른 L1 캐시에 L2 캐시가 무효화 신호를 전달하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  5. 제 1 항에 있어서, 가-저장 동작의 레코드를 관리하는 상기 단계는,
    - L2 캐시에서 주어진 프로세서로부터 주어진 가-저장 동작을 수신하고, 이때, 주어진 가-저장 동작은 이것이 예측치임을 나타내도록 표시되며, 그리고
    - 주어진 가-저장 동작을 레코드에 저장하는,
    이상의 과정을 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  6. 제 1 항에 있어서, L2 캐시에서 주어진 저장 동작이 완료되면, 상기 방법은,
    - 주어진 저장 동작을 개시한 소스 프로세서에 확인 메시지를 전송하고, 그 리고
    - 상기 확인 메시지에 따라 소스 프로세서로부터 이동 신호를 수신하면, 주어진 저장 동작이 더 이상 예측치가 아님을 표시하도록 레코드를 업데이트하는,
    이상의 단계를 추가로 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  7. 제 6 항에 있어서, 소스 프로세서에서 확인 메시지를 수신하면, L2 캐시에 이동 신호를 보내기 전에 모든 선행 저장 동작이 완료될 때까지 소스 프로세서가 기다리는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  8. 제 6 항에 있어서, L2 캐시에서 주어진 저장 동작이 완료되면, 상기 방법은,
    - 주어진 저장 동작으로 덮어쓰여진 캐시 라인을 지닌 L1 캐시에 무효화 신호를 전달하는
    단계를 추가로 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  9. 제 1 항에 있어서, L2 캐시에 연결된 각각의 프로세서에 대하여, 가-저장 동작의 레코드는 가-저장 동작을 지닌 저장 큐를 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  10. 제 1 항에 있어서,
    상기 L2 캐시는 다수의 뱅크를 포함하고, 그리고
    각각의 L2 뱅크에 대하여, 가-저장 동작의 레코드는 L2 캐시에 연결된 각각의 프로세서에 대한 저장 큐를 포함하며, 이때, 주어진 저장 큐가 가-저장 동작을 지니는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  11. 제 1 항에 있어서, 상기 방법은,
    - 멀티프로세서 시스템의 프로세서에 연결된 L1 캐시로부터 L2 캐시에서 저장 동작을 수신하고,
    - 저장 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작이 레코드를 검사하며, 그리고
    - 일치하는 가-저장 동작이 있을 경우, 저장 동작을 드롭(drop)시키는,
    이상의 단계를 추가로 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  12. 제 1 항에 있어서, 상기 방법은,
    - 타겟 캐시 라인에 대한 주어진 저장 동작을 실행하기 위해 타겟 캐시 라인에 대한 리드-투-오온(read-to-own) 요청을 수신하고,
    - 타겟 캐시 라인에 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작의 레코드를 검사하며, 그리고
    - 일치하는 가-저장 동작이 있을 경우, 타겟 캐시 라인을 요청 프로세서에 기록 전용 상태로 전달하여, 요청 프로세서가 타겟 캐시 라인에 대한 기록 동작을 실행할 수 있도록 하여, 데드락 컨디션(deadlock condition)을 방지하는
    이상의 단계를 추가로 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 방법.
  13. 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치로서, 이 장치는,
    - L2 캐시,
    - L2 캐시에서 처리중인 가-저장 동작(speculative store operations)을 식별하는 정보를 지닌 L2 캐시에서의 레코드,
    이때, 가-저장 동작은 선행 저장 동작이 되돌아오기 전에 예측치로(speculatively) 실행되는 저장 동작이며,
    - 프로세서에 연결된 L1 캐시로부터 로드 동작(load operations)을 수신할 때 아래와 같은 기능을 하는, L2 캐시에서의 로드 처리 메커니즘으로서, 즉,
    1) 로드 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작이 레코드를 검사하고, 그리고
    2) 일치하는 가-저장 동작이 존재할 경우, 일치하는 가-저장 동작의 완료 이후 로드 동작이 진행되는 것을 보장하는,
    이러한 기능을 하는 로드 처리 메커니즘
    을 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  14. 제 13 항에 있어서, 차후에 로드 동작을 프로세서가 재시도할 수 있도록 프로세서에 리트라이 동작(retry operations)을 보냄으로서 일치하는 가-저장 동작이 완료된 후 로드 동작이 진행되는 것을 보장하도록 상기 로드 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  15. 제 13 항에 있어서, L2 캐시에서 로드 동작 완료 이전에 일치하는 가-저장 동작이 완료되는 것을 기다리도록 상기 로드 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  16. 제 15 항에 있어서, L2 캐시에서 일치하는 가-저장 동작이 완료되면, 상기 L2 캐시는,
    - 로드 동작을 진행시키게 하고, 그리고
    - 일치하는 가-저장 동작에 의해 무효화되는 라인을 지닌 다른 L1 캐시에 무효화 신호를 보내는,
    이상의 기능을 행하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  17. 제 13 항에 있어서, 상기 장치는 저장 처리 메커니즘을 추가로 포함하고, 상 기 저장 처리 메커니즘은,
    - L2 캐시에서 주어진 프로세서로부터 주어진 가-저장 동작을 수신하고, 이때, 주어진 가-저장 동작은 예측치임을 나타내도록 표시되며, 그리고
    - 주어진 가-저장 동작을 레코드에 저장하는,
    이상의 기능을 행하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  18. 제 13 항에 있어서, 상기 장치는 저장 처리 메커니즘을 추가로 포함하고,
    이때, L2 캐시에서 주어진 저장 동작이 완료되면, 주어진 저장 동작을 개시한 소스 프로세서에 확인 메시지를 보내도록 상기 저장 처리 메커니즘이 기능하고, 그리고
    또한, 확인 메시지에 따라 소스 프로세서로부터 이동 신호를 수신하면, 주어진 저장 동작이 더 이상 예측치가 아님을 표시하고자 레코드를 업데이트하도록 상기 저장 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  19. 제 18 항에 있어서, 소스 프로세서에서 확인 메시지를 수신하면, L2 캐시에 이동 신호를 보내기 전에 모든 선행 저장 동작이 완료될 때까지 기다리도록 소스 프로세서가 기능하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  20. 제 18 항에 있어서, L2 캐시에서 주어진 저장 동작이 완료되면, 주어진 저장 동작으로 덮어쓰여진 L1 캐시 라인을 지닌 L1 캐시에 무효화 신호를 보내도록 상기 저장 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  21. 제 13 항에 있어서, L2 캐시에 연결된 각각의 프로세서에 대하여, 가-저장 동작의 레코드는 가-저장 동작을 지닌 저장 큐를 포함하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  22. 제 13 항에 있어서,
    L2 캐시는 다수의 뱅크를 포함하고, 그리고
    각각의 L2 뱅크에 대하여, 가-저장 동작의 레코드는 L2 캐시에 연결된 각각의 프로세서에 대해 저장 큐를 포함하며, 이때, 주어진 저장 큐는 가-저장 동작을 지니는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  23. 제 13 항에 있어서,
    - 타겟 캐시 라인에 대해 주어진 저장 동작을 수행하기 위해 타겟 캐시 라인에 대한 리드-투-오온(read-to-own) 요청을 수신하고,
    - 타겟 캐시 라인에 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작의 레코드를 검사하는,
    이러한 기능을 상기 로드 처리 메커니즘이 수행하고, 이때, 일치하는 가-저장 동작이 존재할 경우, 타겟 캐시 라인을 요청 프로세서에 기록 전용 상태로 전달하도록 상기 로드 처리 메커니즘이 기능하며, 그래서, 타겟 캐시 라인에 대한 기록 동작을 요청 프로세서가 실행할 수 있도록 하고, 따라서 데드락 컨디션(deadlock condition)을 방지할 수 있도록 하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  24. 제 13 항에 있어서, 상기 장치는 L2 캐시에서 저장 처리 메커니즘을 추가로 포함하고, 프로세서에 연결된 L1 캐시로부터 저장 동작을 수신하면,
    - 저장 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 존재하는 지 결정하고자 가-저장 동작의 레코드를 검사하고, 그리고
    - 일치하는 가-저장 동작이 존재할 경우, 저장 동작을 드롭시키는,
    이상의 기능을 상기 저장 처리 메커니즘이 수행하는 것을 특징으로 하는 멀티프로세서 시스템에서의 가-저장 동작 촉진 장치.
  25. 가-저장 동작을 촉진시키는 멀티프로세서 시스템으로서, 이 시스템은,
    - L2 캐시,
    - L2 캐시에 연결된 다수의 L1 캐시,
    - 다수의 L1 캐시에 연결된 다수의 프로세서,
    - L2 캐시에서 처리중인 가-저장 동작(speculative store operations)을 식별하는 정보를 지닌 L2 캐시에서의 레코드,
    이때, 가-저장 동작은 선행 저장 동작이 되돌아오기 전에 예측치로(speculatively) 실행되는 저장 동작이며,
    - 다수의 L1 캐시 중 한개의 L1 캐시로부터 로드 동작(load operations)을 수신할 때 아래와 같은 기능을 하는, L2 캐시에서의 로드 처리 메커니즘으로서, 즉,
    1) 로드 동작이 전달되는 동일한 위치로 전달되는 일치하는 가-저장 동작이 있는 지 결정하고자 가-저장 동작이 레코드를 검사하고, 그리고
    2) 일치하는 가-저장 동작이 존재할 경우, 일치하는 가-저장 동작의 완료 이후 로드 동작이 진행되는 것을 보장하는,
    이러한 기능을 하는 로드 처리 메커니즘
    을 포함하는 것을 특징으로 하는 멀티프로세서 시스템.
  26. 제 25 항에 있어서, 차후에 로드 동작을 L1 캐시가 재시도할 수 있도록 L1 캐시에 리트라이 동작(retry operations)을 보냄으로서 일치하는 가-저장 동작이 완료된 후 로드 동작이 진행되는 것을 보장하도록 상기 로드 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템.
  27. 제 25 항에 있어서, L2 캐시에서 로드 동작 완료 이전에 일치하는 가-저장 동작이 완료되는 것을 기다리도록 상기 로드 처리 메커니즘이 기능하는 것을 특징으로 하는 멀티프로세서 시스템.
KR1020037014576A 2001-06-26 2002-06-26 L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치 KR100567099B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US30119601P 2001-06-26 2001-06-26
US60/301,196 2001-06-26
PCT/US2002/022157 WO2003001369A2 (en) 2001-06-26 2002-06-26 Method and apparatus for facilitating speculative stores in a multiprocessor system

Publications (2)

Publication Number Publication Date
KR20040012812A KR20040012812A (ko) 2004-02-11
KR100567099B1 true KR100567099B1 (ko) 2006-03-31

Family

ID=23162357

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020037014576A KR100567099B1 (ko) 2001-06-26 2002-06-26 L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치

Country Status (5)

Country Link
US (1) US6704841B2 (ko)
EP (1) EP1402349A2 (ko)
JP (1) JP4050225B2 (ko)
KR (1) KR100567099B1 (ko)
WO (1) WO2003001369A2 (ko)

Families Citing this family (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040128448A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
US7266673B2 (en) * 2003-05-02 2007-09-04 Advanced Micro Devices, Inc. Speculation pointers to identify data-speculative operations in microprocessor
US7363470B2 (en) * 2003-05-02 2008-04-22 Advanced Micro Devices, Inc. System and method to prevent in-flight instances of operations from disrupting operation replay within a data-speculative microprocessor
US7284097B2 (en) * 2003-09-30 2007-10-16 International Business Machines Corporation Modified-invalid cache state to reduce cache-to-cache data transfer operations for speculatively-issued full cache line writes
US7769950B2 (en) * 2004-03-24 2010-08-03 Qualcomm Incorporated Cached memory system and cache controller for embedded digital signal processor
US7484045B2 (en) 2004-03-30 2009-01-27 Intel Corporation Store performance in strongly-ordered microprocessor architecture
JP2006155080A (ja) * 2004-11-26 2006-06-15 Fujitsu Ltd メモリ制御装置およびメモリ制御方法
US7984248B2 (en) * 2004-12-29 2011-07-19 Intel Corporation Transaction based shared data operations in a multiprocessor environment
US20060179174A1 (en) * 2005-02-02 2006-08-10 Bockhaus John W Method and system for preventing cache lines from being flushed until data stored therein is used
US7644221B1 (en) * 2005-04-11 2010-01-05 Sun Microsystems, Inc. System interface unit
US7376793B2 (en) * 2005-07-21 2008-05-20 Sun Microsystems, Inc. Cache coherence protocol with speculative writestream
US20070186056A1 (en) * 2006-02-07 2007-08-09 Bratin Saha Hardware acceleration for a software transactional memory system
US7404041B2 (en) * 2006-02-10 2008-07-22 International Business Machines Corporation Low complexity speculative multithreading system based on unmodified microprocessor core
EP1986101B1 (en) 2006-02-14 2012-06-20 Fujitsu Ltd. Coherency maintaining device and coherency maintaining method
KR100673497B1 (ko) * 2006-04-14 2007-01-24 (주)핸스건설 유압전달장치
US20080005504A1 (en) * 2006-06-30 2008-01-03 Jesse Barnes Global overflow method for virtualized transactional memory
US9798590B2 (en) * 2006-09-07 2017-10-24 Intel Corporation Post-retire scheme for tracking tentative accesses during transactional execution
US8060482B2 (en) * 2006-12-28 2011-11-15 Intel Corporation Efficient and consistent software transactional memory
US8370705B1 (en) * 2009-09-23 2013-02-05 Nvidia Corporation System and method for calculating a checksum address while maintaining error correction information
US9052967B2 (en) * 2010-07-30 2015-06-09 Vmware, Inc. Detecting resource deadlocks in multi-threaded programs by controlling scheduling in replay
KR101996351B1 (ko) 2012-06-15 2019-07-05 인텔 코포레이션 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
WO2013188311A1 (en) * 2012-06-15 2013-12-19 Soft Machines, Inc. A load store buffer agnostic to threads implementing forwarding from different threads based on store seniority
KR101832574B1 (ko) * 2012-06-15 2018-02-26 인텔 코포레이션 모든 store들이 캐시의 모든 워드들에 대한 검사를 스누핑해야만 하는 것을 방지하기 위해 store들을 필터링하는 방법 및 시스템
KR101745640B1 (ko) * 2012-06-15 2017-06-09 인텔 코포레이션 공유 메모리 자원들을 사용하는 메모리 일관성 모델에서 비순차 load들에 대한 로크 기반 및 동기화 기반 방법
CN104583957B (zh) 2012-06-15 2018-08-10 英特尔公司 具有无消歧乱序加载存储队列的重新排序的推测性指令序列
EP2862084A4 (en) 2012-06-15 2016-11-30 Soft Machines Inc METHOD AND SYSTEM FOR IMPLEMENTING RECOVERY FROM A SPECULATIVE TRANSMISSION OF FAULT FORECASTS / ERRORS DUE TO THE CHANGE AND OPTIMIZATION OF MEMORY LOADS
KR101826399B1 (ko) 2012-06-15 2018-02-06 인텔 코포레이션 Load store 재정렬 및 최적화를 구현하는 명령어 정의
KR102248470B1 (ko) * 2012-06-15 2021-05-06 인텔 코포레이션 메모리로부터 순차적으로 판독하는 load들을 구성하는 메모리 일관성 모델에서 비순차 load들을 갖는 세마포어 방법 및 시스템
CN104583943B (zh) 2012-06-15 2018-06-08 英特尔公司 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
WO2013188754A1 (en) 2012-06-15 2013-12-19 Soft Machines, Inc. A disambiguation-free out of order load store queue
US10574727B2 (en) * 2015-10-21 2020-02-25 Honeywell International Inc. MIB data broadcast using inexpensive method incorporating microcontroller and FPGA
JP6318440B2 (ja) * 2016-10-07 2018-05-09 インテル・コーポレーション 無制限トランザクショナルメモリ(utm)システムの最適化
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
US10691593B1 (en) * 2018-12-19 2020-06-23 Micron Technology, Inc. Predictive data storage hierarchical memory systems and methods
US11061824B2 (en) * 2019-09-03 2021-07-13 Microsoft Technology Licensing, Llc Deferring cache state updates in a non-speculative cache memory in a processor-based system in response to a speculative data request until the speculative data request becomes non-speculative
US10983801B2 (en) * 2019-09-06 2021-04-20 Apple Inc. Load/store ordering violation management
US11960400B2 (en) * 2022-04-26 2024-04-16 Cadence Design Systems, Inc. Managing multiple cache memory circuit operations

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623628A (en) * 1994-03-02 1997-04-22 Intel Corporation Computer system and method for maintaining memory consistency in a pipelined, non-blocking caching bus request queue
US5765208A (en) * 1995-09-29 1998-06-09 Motorola, Inc. Method of speculatively executing store instructions prior to performing snoop operations
US5838943A (en) * 1996-03-26 1998-11-17 Advanced Micro Devices, Inc. Apparatus for speculatively storing and restoring data to a cache memory
US6065103A (en) * 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6463507B1 (en) * 1999-06-25 2002-10-08 International Business Machines Corporation Layered local cache with lower level cache updating upper and lower level cache directories
US6473833B1 (en) * 1999-07-30 2002-10-29 International Business Machines Corporation Integrated cache and directory structure for multi-level caches
US6523109B1 (en) * 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6535962B1 (en) * 1999-11-08 2003-03-18 International Business Machines Corporation System and method for prefetching data using a hardware prefetch mechanism

Also Published As

Publication number Publication date
US20020199063A1 (en) 2002-12-26
JP4050225B2 (ja) 2008-02-20
JP2004533079A (ja) 2004-10-28
WO2003001369A2 (en) 2003-01-03
EP1402349A2 (en) 2004-03-31
US6704841B2 (en) 2004-03-09
WO2003001369A3 (en) 2003-07-03
KR20040012812A (ko) 2004-02-11

Similar Documents

Publication Publication Date Title
KR100567099B1 (ko) L2 디렉토리를 이용한 멀티프로세서 시스템의 가-저장촉진 방법 및 장치
KR100704089B1 (ko) L2 디렉토리를 이용한 멀티프로세서 시스템의 가-로드촉진 방법 및 장치
US7827354B2 (en) Victim cache using direct intervention
US7305523B2 (en) Cache memory direct intervention
US6718839B2 (en) Method and apparatus for facilitating speculative loads in a multiprocessor system
US6434641B1 (en) System for reducing the number of requests presented to a main memory in a memory storage system employing a directory-based caching scheme
KR100243853B1 (ko) 개량된메모리아키텍쳐를위한방법및장치
JP4298800B2 (ja) キャッシュメモリにおけるプリフェッチ管理
US6374332B1 (en) Cache control system for performing multiple outstanding ownership requests
US6457101B1 (en) System and method for providing the speculative return of cached data within a hierarchical memory system
JP2010507160A (ja) データ処理装置の共有メモリへの書込みアクセス要求の処理
JPH10133943A (ja) リンクリスト形成方法
US6105108A (en) Method and apparatus for releasing victim data buffers of computer systems by comparing a probe counter with a service counter
WO1999035578A1 (en) Method for increasing efficiency in a multi-processor system and multi-processor system with increased efficiency
KR100851738B1 (ko) 로우-레벨 캐시를 포함한 액세스 촉진용 리버스 디렉토리
US6202126B1 (en) Victimization of clean data blocks
JP4577729B2 (ja) ライトバックキャッシュにおいてスヌーププッシュ処理やスヌープキル処理が同時発生しているときのライトバック処理をキャンセルするためのシステムおよび方法
WO1997004392A1 (en) Shared cache memory device
US5978886A (en) Method and apparatus for duplicating tag systems to maintain addresses of CPU data stored in write buffers external to a cache
US6839806B2 (en) Cache system with a cache tag memory and a cache tag buffer
US20010032297A1 (en) Cache memory apparatus and data processing system
US5907853A (en) Method and apparatus for maintaining duplicate cache tags with selectable width
JPH07101412B2 (ja) データ事前取出し方法およびマルチプロセッサ・システム

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130305

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20140228

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20150302

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20160303

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20170302

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 14

FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 15