KR101472079B1 - 효율적인 로드 큐 스누핑 - Google Patents

효율적인 로드 큐 스누핑 Download PDF

Info

Publication number
KR101472079B1
KR101472079B1 KR1020117001687A KR20117001687A KR101472079B1 KR 101472079 B1 KR101472079 B1 KR 101472079B1 KR 1020117001687 A KR1020117001687 A KR 1020117001687A KR 20117001687 A KR20117001687 A KR 20117001687A KR 101472079 B1 KR101472079 B1 KR 101472079B1
Authority
KR
South Korea
Prior art keywords
load
hit
data cache
snoop
index
Prior art date
Application number
KR1020117001687A
Other languages
English (en)
Other versions
KR20110034648A (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
Priority claimed from US12/143,985 external-priority patent/US8214602B2/en
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20110034648A publication Critical patent/KR20110034648A/ko
Application granted granted Critical
Publication of KR101472079B1 publication Critical patent/KR101472079B1/ko

Links

Images

Abstract

일 실시예에서, 프로세서(10)는 데이터 캐시(16)와 로드/저장 유닛(LSU)(20)을 포함한다. LSU(20)는 큐(24) 및 제어 유닛(26)을 포함하며, 큐(24) 내의 각각의 엔트리는 데이터 캐시(16)에 액세스했으나 퇴거되지 않은 서로 다른 로드(different load)에 할당된다. 제어 유닛(26)은 데이터 캐시(16)의 내용이 변경됨에 따라, 큐(24)에 나타낸(represented) 각각의 로드의 데이터 캐시 히트 상태를 갱신하도록 구현된다. 제어 유닛(26)은 상기 제 1 로드에 대하여 스누프 히트를 감지하도록 구현되며, 상기 감지는 상기 스누프 인덱스가 상기 제 1 엔트리에 저장된 로드 인덱스에 매치되고, 상기 제 1 로드의 상기 데이터 캐시 히트 상태가 히트를 나타내며, 데이터 캐시(16)는 상기 스누프 오퍼레이션에 대하여 스누프 히트를 감지하고, 상기 제 1 엔트리에 저장된 로드 웨이(load way)가 상기 데이터 캐시(16)의 제 1 웨이에 매치되는 것에 대한 응답으로 이루어진다.

Description

효율적인 로드 큐 스누핑{EFFICIENT LOAD QUEUE SNOOPING}
본 발명은 프로세서 분야에 관한 것이며, 보다 구체적으로는 프로세서에서의 로드 프로세싱(load processing) 및 메모리 배열 유지보수(memory ordering maintenance)에 관한 것이다.
프로세서는 일반적으로 데이터를 메모리로/로부터 이동시키기 위하여 메모리 오퍼레이션(memory operation)을 사용한다. "메모리 오퍼레이션"이라는 용어는 프로세서와 메모리 사이의 데이터 이동(transfer)-비록 그 이동이 캐시에서 달성될 수 있다하더라도-을 규정하는 오퍼레이션을 지칭한다. 메모리 로드 오퍼레이션들(load memory operations)은 메모리로부터 프로세서로의 데이터 이동을 규정하고, 메모리 저장 오퍼레이션들(store memory operations)은 프로세서로부터 메모리로의 데이터 이동을 규정한다. 메모리 로드 오퍼레이션들은 본 명세서에서 보다 간략하게 "로드(loads)"라고 칭할 것이며, 마찬가지로, 메모리 저장 오퍼레이션들은 "저장(stores)"이라고 칭할 것이다. 메모리 오퍼레이션들은, 프로세서에 의해 사용되는 명령 세트(instruction set)에 따라, 정의된 기능(예를 들어 산술 기능, 논리 기능, 등)을 수행하기 위하여 메모리 오퍼랜드(operand)에 직접 액세스하는 명령내에 암시(implicit)되는 것이거나, 단지 데이터 이동만을 수행하는 명시 명령(explicit instruction)일 수 있다.
몇몇 명령 세트 아키텍쳐들(예를 들어, x86 명령 세트 아키텍쳐)은 메모리 명령들에 대한 엄격한 정렬(strong ordering)을 필요로한다. 일반적으로, 메모리 오퍼레이션들이 규정된 프로그램 순서로 발생된 것으로 나타나면 상기 메모리 오퍼레이션들은 강하게 정렬된 것이다. 프로세서는 흔히 성능을 향상시키기 위해 (프로그램) 순서에서 벗어나 로드들(loads)을 수행한다. 그러나 로드가 순서에서 벗어나 수행된다면, 엄격한 메모리 배열 규칙들을 위배할 가능성이 있다.
예를 들어, 만약 제 1 프로세서가 어드레스 A1에 대한 저장 명령(store to address A1)을 수행하고 이어서 어드레스 A2에 대한 저장 명령을 수행하며 그리고 제 2 프로세서가 어드레스 A2에 대한 로드 명령(load to address A2)을 수행(제 2 프로세서의 데이터 캐시(cache)에서 미스(miss)가 발생)하고 이어서 어드레스 A1에 대한 로드 명령을 수행(제 2 프로세서의 데이터 캐시에서 히트(hit)가 발생)한다면, 이는 엄격한 메모리 배열 규칙에 위배될 수 있다. 엄격한 메모리 배열 규칙에 의하면, 상기와 같은 상황에서, 어드레스 A2에 대한 로드 명령이 어드레스 A2에 대한 저장 명령으로부터 저장 데이터(store data)를 수신한다면, 어드레스 A1에 대한 로드 명령은 어드레스 A1에 대한 저장 명령으로부터 저장 데이터를 수신해야만 한다. 그러나, 어드레스 A2에 대한 로드 명령이 서비스되는 동안에 어드레스 A1에 대한 로드 명령이 완료될 수 있다면, 하기의 상황이 발생할 수 있다: (i) 어드레스 A1에 대한 로드 명령이 어드레스 A1에 대한 저장 명령에 앞서 데이터를 수신하고; (ii) 어드레스 A1에 대한 저장 명령이 완료되고, (iii) 어드레스 A2에 대한 저장 명령이 완료되고; (iv) 어드레스 A2에 대한 로드 명령이 완료되어 어드레스 A2에 대한 저장 명령에 의해 제공되는 데이터를 수신할 수 있다. 이 결과는 정확하지 않을 것이다.
일 실시예에 의하면, 프로세서는 데이터 캐시(cache) 그리고 그 데이터 캐시와 연결된 로드/저장 유닛(LSU: load/store unit)로 구성된다. LSU는 하나의 큐(queue)를 포함하며, 상기 큐 내의 각 엔트리(entry)는 데이터 캐시에 액세스했으나 퇴거(retirement)되지 않은 서로 다른 로드 명령에 할당된다. LSU는 큐와 연결된 제어 유닛을 더 포함하고, 상기 제어 유닛은 데이터 캐시의 내용이 변화함에 따라 큐에 나타내어진 각각의 로드 명령의 데이터 캐시 히트상태(data cache hit status)를 갱신(update)하도록 구성된다. LSU는 스누프 인덱스(snoop index)를 수신하도록 연결되며, 여기서 인덱스는 캐시 내부에 인덱싱하는데 사용되는 어드레스 비트들의 서브세트(subset)이다. 스누프 인덱스는 프로세서에 의해 수신된 스누프 오퍼레이션(snoop operation)에 대응하고, 제어 유닛은, 상기 스누프 인덱스가 상기 제1 엔트리에 저장된 로드 인덱스에 매치되는 것과, 상기 제1 로드의 데이터 캐시 히트 상태가 히트를 나타내는 것과, 상기 데이터 캐시가 상기 스누프 오퍼레이션에 대한 스누프 히트를 검출하는 것과, 그리고 상기 제1 엔트리 내에 저장된 로드 웨이가 상기 스누프 오퍼레이션이 히트인 상기 데이터 캐시의 제1 웨이에 매칭되는 것에 응답하여, 상기 큐의 제 1 엔트리 내의 제 1 로드에 관한 스누프 히트를 검출하도록 되어 있다. 로드 웨이란, 그 로드가 히트되는 데이터 캐시의 웨이(way of the data cache)이다.
일 실시예에 의하면, 프로세서는 데이터 캐시(cache) 그리고 그 데이터 캐시와 연결된 로드/저장 유닛(LSU: load/store unit)로 구성된다. LSU는 큐(queue)를 포함하며, 상기 큐의 각각의 엔트리(entry)는 데이터 캐시에 액세스(access)했으나 퇴거(retirement)되지 않은 서로 다른 로드에 할당된다. LSU는 큐와 연결된 제어 유닛을 더 포함하고, 상기 제어 유닛은 데이터 캐시의 내용이 변화함에 따라 큐에 명시된 각 로드의 데이터 캐시 히트 상태를 갱신도록 구성된다. LSU는 프로세서가 수신한 스누프 오퍼레이션에 대응되는 스누프 인덱스(snoop index)를 수신하도록 연결되고, 제어 유닛은 적어도 다음의 두 가지 경우, 즉, (i) 스누프 인덱스가 제 1 엔트리에 저장된 로드 인덱스와 매칭되고, 그 제 1 로드의 데이터 캐시 히트 상태가 히트를 나타내며, 그리고 데이터 캐시가 스누프 오퍼레이션에 대한 스누프 히트를 검출하는 것에 응답하고 (ii) 상기 스누프 오퍼레이션이 상기 데이터 캐시 내에서 히트하는지 여부와 관계없이, 그 스누프 인덱스가 로드 인덱스와 매치되고 제 1 로드의 데이터 캐시 히트 상태가 히트가 아님을 나타내는 것에 응답하는 경우에 큐의 제 1 엔트리 내의 제 1 로드에 대한 스누프 히트를 검출하도록 구성된다.
이하 상세한 설명은 첨부된 도면을 참조하여, 여기서 간단히 설명한다.
도 1은 프로세서의 일 실시예에 대한 블록도이다.
도 2는 로드를 실행하는 동안에 프로세서의 일 실시예의 동작을 도시한 흐름도이다.
도 3은 스누프를 위한 프로세서의 일 실시예의 동작을 도시한 흐름도이다.
도 4는 스누프를 위한 프로세서의 일 실시예의 동작을 도시한 진리표이다.
도 5는 로드 큐에서 로드를 관찰하는 프로세서의 일 실시예의 동작을 도시한 흐름도이다.
도 6은 로드 큐에서 로드를 모니터링하는 프로세서의 일 실시예의 동작을 도시한 진리표이다.
본 발명은 다양한 변경과 대안적인 형태로 될 수 있으며, 그 특정 실시예들은 도면에서 예시적으로 보인 것이며 이하에서 구체적으로 설명될 것이다. 그러나, 도면과 구체적으로 설명된 형태로 발명을 제한할 의도는 아니라는 것이 이해될 것이며, 여기 첨부된 청구항에 정의된 바에 의하여 본 발명의 의도와 범위에 포함되는 모든 변경물, 대응물, 그리고 대체물들도 포함한다.
일 실시예에서, 프로세서의 로드/저장 유닛(LSU: load/store unit)는 복수의 엔트리들을 구비한 로드 큐를 구현한다. 각각의 엔트리는 서로 다른 로드에 할당되며 상기 엔트리가 유효(valid)한 것으로 표시된다면, 그 로드는 프로세서의 데이터 캐시에 액세스했으나, 프로세서의 설계된 상태(architectured state)(예를 들어, 명령의 목적지(destination)인 설계된 레지스터(architectured register))에 그 결과들을 커미트(commit)함로써, 아직 퇴거되지는 않았다.
데이터 캐시는 몇몇 로드들 및 저장들이 미스(miss)될 한정된 저장소(finite storage)이다. 메모리 오퍼레이션에 의해 액세스되는 데이터가 액세스시 캐시 내부에 저장되어 있으면 그 메모리 오퍼레이션은 그 캐시에서 "히트(hit)"되며, 메모리 오퍼레이션에 의해 액세스되는 데이터가 캐시 내부에 저장되지 않았다면 "미스(miss)"된다. 로드가 데이터 캐시를 미스할 때, 그 데이터는 일반적으로 메모리로부터 미스된 캐시 라인(missing cache line)을 판독하고 그것을 캐시에 저장하는 캐시 필 오퍼레이션(cache fill operation)을 이용하여 캐시로 로드된다. 데이터는 "캐시 라인"이라 불리는 단위들(units)로 캐시에 저장되는데, 이것은 캐시 내부에서 할당(allocation)될 그리고 할당 해제(deallocation)될 연속적인 바이트들(contiguous bytes)의 최소 개수이다.
LSU는 데이터 캐시가 액세스되는 동안 로드의 히트/미스 결과를 이용하여 로드 큐 내의 로드의 데이터 캐시 히트 상태를 초기화(initialize)할 수 있다. 그 다음 LSU는 (로드가 큐 내부에 아직 나타나 있으며 따라서 퇴거되지 않은 동안) 데이터 캐시 콘텐츠가 바뀜에 따라 할당된 큐 엔트리 내부의 로드에 대한 데이터 캐시 히트 상태를 추적(track)할 수 있다. 예를 들어, 액세스되는 시기에는 로드가 캐시 히트였으나, 그 로드에 의해 히트된 캐시 라인이 무효화(invalidated) 되었다면, 그 할당된 로드 큐 엔트리의 데이터 캐시 히트 상태는 "히트(hit)"에서 "히트 아님(not hit)"으로 변경될 수 있다. 예를 들어, 캐시 라인은, 다른 캐시 라인의 캐시 필(fill)에 의해 오버라이팅(overwritting)될 때, 또는 캐시 필에 제공된 캐시 라인에 대한 가능한 에일리어스들(aliases)을 제거하기 위한 백 프로브(back probe)로 인하여 무효화 될 수 있다. 일부 실시예들에서, LSU는 또한 캐시 필들(fills) 그 자체를 추적하여, 로드에 의해 액세스된 캐시 라인이 필(fill)을 통하여 캐시에 기록되면, 상기 로드의 데이터 캐시 히트 상태를 "히트 아님(not hit)"에서 "히트(hit)"로 변경할 수 있다. 이러한 실시예에서, 히트/미스 상태를 항상 정확하게 알 수 있기 때문에, "히트 아님(not hit)" 상태는 "미스(miss)"일 수 있다. 다른 실시예에서는 초기 데이터 캐시 액세스시 데이터 캐시를 미스한 로드의 데이터 캐시 히트 상태를 히트로 갱신(update)하지 않을 수 있다. 이러한 실시예에서, "히트 아님(not hit)"의 데이터 캐시 히트 상태는 그 로드가 히트됨을 알지 못한다는 것을 나타낸다. 이는 미스일 수도 있고, (로드가 데이터 캐시를 액세스한 후에 캐시 필이 발생함으로 인하여) 히트일 수도 있다. 다른 측면에서 보면, "히트 아님(not hit)" 상태는 캐시의 로드에 대한 히트/미스 상태가 알려지지 않음(unknown)을 나타낸다. 어느 경우이든, "히트(hit)" 상태는 그 로드가 현재 캐시 히트임을 의미한다. 주목할 점은, 큐 엔트리가 실제로 로드 자체를 저장하는 것이 아니라 그 로드와 관련 있는 데이터(예로, 인덱스(index), 웨이(way), 데이터 캐시 히트 상태, 등)을 저장하기 때문에, 로드는 큐 엔트리에 나타낸(represented) 것과 같은 것을 지칭할 수 있다는 것이다. 본 상세한 설명에서는 큐 또는 큐 엔트리 내의 로드를 지칭할 때도 있으나, 로드는 엔트리 내에 실질적으로 저장된다기보다는 오히려 일반적으로 엔트리로 나타내어진다.
LSU는 스누프 오퍼레이션의 전체 어드레스를 로드 오퍼레이션에 응답하여 액세스된 어드레스(즉 "로드 어드레스")와 비교하지 않고, 그 로드에 대한 큐 엔트리 내의 데이터 캐시 상태 및 데이터 캐시에 대한 스누프 오퍼레이션의 캐시 히트/미스 결과를 이용하여 그 로드에 대한 히트/미스를 검출할 수 있다. 보다 구체적으로, 로드 큐는 로드 어드레스에 의해 식별되는 캐시 라인을 저장할 수 있는 데이터 캐시의 엔트리 또는 엔트리들을 식별하는 로드 어드레스의 부분을 저장할 수 있다. 이러한 로드 어드레스의 부분을 "인덱스(index)"라고 지칭한다. 추가적으로, 세트 어쏘씨에이티브 데이터 캐시들(set associative data caches)에서, 캐시 히트가 검출되면 그 로드가 히트되는 "웨이(way)"가 또한 저장될 수 있다. "웨이"는 적격 저장 위치들(eligible storage locations)("세트(set)") 중 위치가 실제로 캐시 라인을 저장하는지를 식별한다. 만약 주어진 로드의 데이터 캐시 히트 상태가 "히트"이고, 주어진 로드의 큐 엔트리 내의 로드 인덱스가 스누프 어드레스의 대응 부분("스누프 인덱스")에 매치되고, 데이터 캐시 내에서 스누프 오퍼레이션이 히트되고, 그리고 데이터 캐시(18) 내의 스누프 오퍼레이션에 의해 히트된 웨이가 큐 엔트리의 로드 웨이에 매치되면, 그 주어진 로드에 대해 스누프 오퍼레이션은 스누프 히트 된다. 만약, 주어진 로드의 데이터 캐시 히트 상태가 히트이고, 앞서 언급된 다른 요소들 중 어느 하나라도 사실이 아니라면(not true), 스누프 오퍼레이션은 주어진 로드를 미스한 것으로 알려진다. 따라서, 데이터 히트 상태가 히트인 로드들에 대하여 정확한 스누프 히트 결과가 계산될 수 있다. 대부분의 작업(workloads)에서 로드의 대다수가 데이터 캐시에서 히트되기 때문에, 그 결과는 전체 어드레스 비교(full address compare)가 수행되는 솔루션에 가깝다고 할 수 있다.
데이터 캐시 히트 상태가 히트 아님일 경우에, 스누프 인덱스는 로드의 큐 엔트리 내의 로드 인덱스와 비교될 수 있다. 인덱스 매치는 스누프 히트로 처리될 수 있다. 스누프 히트는 정확하지 않을 수도 있으나, 추정된 스누프 히트(persumed snoop hit)에 대한 정정 동작(corrective action)를 행하더라도 기능성(functionality)에 영향을 미치지 않으며 성능(performance)에만 영향을 미친다. 따라서, 이런 경우 정확한 결과가 생성된다.
로드에 대하여 스누프 히트가 검출되는 경우(그리고 그 스누프가 스누핑 프로세서가 아닌 엔티티(entity) 또는 또 다른 프로세서에 의한 저장 명령(store)에 대한 응답이라면), 그 로드가 로드 큐내의 가장 오래된 미결 로드(the oldest load outstanding in the load queue)가 아니라면 엄격한 메모리 배열에 대한 위반이 발생했을 가능성이 있다. 일 실시예에서, 각 엔트리는 로드가 재동기화될 것임을 나타내도록 설정될 수 있는 재동기화 지시자(resync indication), 예를 들어, 재동기화 비트(resync bit)를 포함한다. 재동기화는 일반적으로 로드의 캐시 액세스를 반복하고 로드 데이터를 목적지에 포워딩하고, 그리고 적어도 그 로드에 종속적인 오퍼레이션들을 재실행하는 것을 지칭할 수 있다. 스누프 히트가 검출된 로드를 반복하는 것은 (스누프를 야기한 오퍼레이션에 의해 로드 데이터가 수정되었다고 간주하면) 수정된 데이터가 포워딩될 수 있게 해주고, 종속적인 명령들에 대한 새로운 결과들을 생성 하게 해준다. 따라서, 로드는 저장 후 발생한 것처럼 보인다. 추가적으로, 로드 큐 내의 선행 로드(preceding load) 전에 저장이 발생하고(즉, 선행 로드가 캐시 미스 됨) 스누프 히트 로드가 선행 로드에 대하여 비순차적으로 수행되었다면, 그 스누프 히트 로드는 재동기화를 통해서 선행 로드와 순차적으로 수행된 것처럼 보일 수 있다. 따라서, 엄격한 정렬(strong ordering)이 유지될 수 있다.
재동기화는 다양한 방식으로 수행될 수 있다. 예를 들어, 재동기화 로드 오퍼레이션(resynchronizing load operation) 후의 각각의 오퍼레이션이 플러시(flush)되고, 대응 명령들이 재페치(refetch)(또는 페치/디코드/스케줄 유닛(fetch/decode/schedule unit: 12) 내의 스케쥴링 하드웨어(scheduling hardware)에 아직 저장되어 있다면 재스케쥴(reschedule))될 수 있다. 대안적으로, 스케쥴러에서 의존성 체인(dependency chain)이 검출되면, 정확한 결과들을 생성하기 위하여 종속 명령들(dependent instructions)만이 재스케쥴될 필요가 있다.
아래에 설명된 구현은 세트 어쏘씨에이티브 데이터 캐시 구현을 사용할 수 있다. 그러나, 다른 실시예에서는 직접 매핑된(direct-mapped) 데이터 캐시 구현도 사용될 수 있다. 직접 매핑된(direct-mapped) 구현에서, "웨이" 비교("way" comparison)는 생략될 수 있다. 만약 로드 인덱스가 스누프 인덱스에 매치된다면, 스누프 히트가 발생하는지 결정하는데 캐시 스누프 히트 결과와 데이터 캐시 히트 상태가 이용될 수 있다(예를 들어, 스누프 캐시 히트이고 데이터 캐시 히트 상태가 히트이면 스누프 히트를 나타내며, 스누프 캐시 미스이고 데이터 캐시 히트 상태가 히트이면 스누프 히트 아님을 나타냄). 만약 데이터 캐시 히트 상태가 "히트 아님"이면, 데이터 캐시에서의 스누프 히트/미스 결과에 독립적으로, 인덱스 비교로부터의 매치가 스누프 히트로서 처리될 수 있다.
스누프 오퍼레이션은 일반적으로, 프로토콜에 따라 조작되는 데이터의 임의의 캐시 복사본(cached copies)이 조작된 데이터(manipulated data)와 일관성을 유지하게 하기 위하여, 캐시 코히런스 프로토콜(cahce coherence protocol)의 일부로서 프로세서와 통신되는 임의의 오퍼레이션일 수 있다. 예를 들어, 일부 프로토콜들은 코히어런스 포인트(예로, 캐시 라인의 홈 노드, 메모리 컨트롤러, 등)로부터의 명시적 프로브 명령들(explicit probe commands)의 전송을 포함할 수 있고, 프로세서는 프로브 명령에 응답하여 스누프하며 프로브 응답(probe response)을 제공한다. 버스기반(bus-based) 구현들에서, 프로브 명령은 정의된 버스 사이클일 수 있고, 프로브 응답은 버스 사이클의 응답 단계(response phase)에서 전송될 수 있다. 패킷 기반(packet-based) 구현 또는 점-대-점(point-to-point) 구현에서는, 프로브 및 프로브 응답이 각각 패킷들 또는 점-대-점 명령들일 수 있다. 다른 프로토콜들에서는, 다른 프로세서들에 의해 시작되는 오퍼레이션들(즉, 판독 또는 기록 오퍼레이션들) 그 자체들이 프로세서들이 서로 연결된 인터커넥트(interconnect)로부터 스누프될 수 있으며, 스누핑 프로세서(snooping processor)는 어드레스 스누핑의 결과 및 스누프된 판독/기록 오퍼레이션(snooped read/write operation)을 기초로 적절한 동작을 행할 수 있다. 일 실시예에서, 캐시 라인의 무효화를 야기하는 스누프 오퍼레이션들이 로드 큐에 대비되어 체크된다. 이런 스누프 오퍼레이션들은 다른 프로세서가 (하나 또는 이상의 저장을 포함하는) 캐시 라인 내의 대응 데이터를 변경하려는 시도의 결과이거나, 다른 객체(즉, 외부 장치)가 데이터를 (예로, 직접 메모리 액세스(DMA: direct memory access) 기록을 이용하여) 변경한 결과이다. 일반적으로, 스누프된 캐시 라인의 갱신을 나타내는 임의의 스누프 오퍼레이션은 가능한 재동기화를 검출하도록 로드 큐에 대비하여 스누프될 수 있다.
이제 도 1을 참조하면, 프로세서(10)의 일 실시예의 블록도가 도시된다. 도시된 실시예에서, 프로세서(10)는 페치/디코드/스케줄 유닛(fetch/decode/schedule unit: 12), 어드레스 생성 유닛(AGU:14), 변환 색인 버퍼(translation lookaside buffer)(TLB: 16), 데이터 캐시(18), LSU(20), 그리고 외부 인터페이스 유닛(22)을 포함한다. LSU(20)는 로드 큐(LDQ:24)와 로드 큐(24)와 연결된 제어 유닛(26)을 포함한다. LSU(20)는 또한 다른 구성요소(예를 들어 저장을 위한 저장 큐, 추가적인 로드 데이터를 위한 큐, 다양한 다른 로드/저장 처리 회로 등)를 포함한다. 도시된 실시예에서, 페치/디코드/스케줄 유닛(12)은 AGU(14)와 연결되며, AGU(14)는 TLB(16) 및 데이터 캐시(18)와 연결된다. TLB(16)은 데이터 캐시(18) 및 LSU(20)(보다 구체적으로 로드 큐(24))와 연결된다. 데이터 캐시(18)는 LSU(20)(보다 구체적으로 로드 큐(24)와 제어 유닛(26)), 그리고 LSU(20)와 더 연결된 외부 인터페이스 유닛(22)(보다 구체적으로 제어 유닛(26)과 로드 큐(24))와 연결된다.
페치/디코드/스케줄 유닛(12)은 일반적으로 명령들을 페치하고, 각각의 명령을 실행될 하나 이상의 오퍼레이션들로 디코딩하고, 그리고 프로세서(10)에 의해 실행되기 위한 오퍼레이션들을 스케쥴링하는 회로를 포함한다. 비-로드/저장 오퍼레이션(non-load/store operations)(예를 들어, 도 1에 도시되지 않은 정수(integer), 부동 소수점(floating point), 멀티미디어 등)을 위해 다양한 실행 하드웨어가 제공될 수 있다. 페치/디코드/스케줄 유닛(12)은 바람직한 구조(structure) 및 오퍼레이션으로 구성될 것이다. 예를 들어, 페치/디코드/스케줄 유닛(12)은 예약 스테이션(reservation station)/재배열 버퍼(reorder buffer) 구성 또는 집중형 스케줄러(centralized scheduler) 구성을 포함할 수 있다. 이 페치/디코드/스케줄 유닛(12)은, 필요하다면, 레지스터 재명명(register renaming) 방법을 구현할 수 있다. 이 페치/디코드/스케줄 유닛(12)은 명령 캐시를 포함할 수 있으며, 명령 캐시 미스들을 위해 캐시 필들을 전송하기 위하여 외부 인터페이스 유닛(22)에 연결될 수 있다.
로드 및 저장을 위해, 페치/디코드/스케줄 유닛(12)은 AGU(14)가 실행하기 위한 오퍼레이션들을 스케줄링할 것이다. AGU(14)는 로드/저장 오퍼레이션의 어드레스 오퍼랜드를 수신할것이고, 로드/저장 오퍼레이션의 가상 어드레스(VA: virtual address)를 생성할 것이다. 어드레스 오퍼랜드는 페치/디코드/스케줄 유닛(12)로부터 공급되거나 오퍼랜드 데이터를 포워딩하는 또 다른 실행부로부터 우회(bypass)될 것이다. 다른 실시예들에서는 하나 이상의 AGU(14)가 있을 수 있다. AGU(14)는 가상 어드레스를 TLB(16) 및 데이터 캐시(18)에 제공할 수 있다. 데이터 캐시(18)는 캐시 룩업 프로세스(cache lookup process)를 시작하기 위해 가상 어드레스를 사용할 수 있다(예를 들어, 인덱스 비트들은 변환(translation)되지 않은 가상 어드레스 비트들로부터 취해질 수 있다). TLB(16)는 가상 어드레스를 물리 어드레스로 변환할 것이고, 히트/미스를 검출하기 위한 태그 비교를 위하여 상기 물리 어드레스를 데이터 캐시(18)에 제공할 것이다. 추가적으로, 물리 어드레스는 LDQ(24)에 제공될 수 있으며, LDQ(24)는 적어도 대응하는 로드에 할당된 로드 큐 엔트리 내의 인덱스를 저장한다. 이 인덱스는 도 1에서 로드 큐(24) 엔트리들 내의 Idx 필드로서 도시된다.
로드 큐 엔트리들은 임의의 바람직한 방식으로 로드들에 할당된다. 일 실시예에서, 엔트리는 대응하는 로드가 페치/디코드/스케줄 유닛(12)에 의해 스케줄되거나 디코드 될 때 할당될 수 있다. 대안적으로, 실행되는 동안 LSU(20)에 의해 엔트리들이 수신됨에 따라 상기 엔트리들이 할당될 것이다. 임의의 할당 기법이 사용될 수 있다.
데이터 캐시(18)는 태그 비교를 완료하고, 캐시 히트/미스 결과를 제어 부(26)에 신호한다(도 1의 "캐시 히트" 신호). 데이터 캐시(18)는 또한 로드 큐(24)에 히트 웨이(hitting way)를 제공할 수 있다(도 1의 "캐시 웨이" 및 로드 큐(24) 엔트리들에서 설명된 웨이 필드). 제어 유닛(26)은 상기 웨이를 로드에 할당된 로드 큐(24) 엔트리에 기입되게할 것이다. 일 실시예에서, 캐시 웨이는 웨이를 표시하기 위하여 원-핫 인코드(one-hot encoded) 될 수 있다. 이러한 실시예에서, 웨이는 미스를 표시하기 위해 어떤 비트도 설정되지 않은 채 제공될 수 있으며, 제어 유닛(26)은, 로드 큐 엔트리로 하여금, 히트/미스 신호와는 독립적으로, 그 엔트리의 웨이 필드에 데이터 캐시(18)에 의해 제공되는 캐시 웨이를 저장하게 할 것이다. 제어 부(26)는 또한 캐시 히트 또는 캐시 미스가 검출되는지 여부에 응답하여 (다른 구현들에서는 데이터 캐시 히트 상태에 대한 임의의 표시가 사용될 수 있지만, 도 1에 도시된 바와 같이, 히트 비트로서) 로드에 대한 데이터 캐시 히트 상태를 초기화할 수 있다. 예를 들어, 히트 비트는 히트를 표시하기 위해 1로 설정되고 히트 아님을 표시하기 위해 0에 설정(또는 클리어됨)되거나 그 반대로 될 수도 있다. 엔트리가 유효한지 아닌지를 표시하기 위하여 유효 비트(valid bit)가 또한 제공되며, (검출된 스누프 히트로 인하여) 로드에 대해 재동기화가 수행될지 여부를 표시하는 재동기화 비트가 또한 제공된다. 로드가 퇴거되거나, 로드 큐(24) 내에 나타나는 가장 오래된 로드인 때, 프로세서(10)는 재동기화를 수행할 것이다. 예를 들면, 제어 유닛(26)은 로드를 재동기화하기 위해 페치/디코드/스케줄 유닛(12)에 신호할 것이다.
일 실시예에서, LSU(20)는 오정렬된 로드(misaligned loads)들 또한 처리할 것이다. 일반적으로, 로드를 수행하기 위해 적어도 두 개의 오버랩되지 않는(non-overlapping) 액세스들이 필요하다면 상기 로드는 오정렬된(misaligned) 것이다. 오정렬(misalignment)은 임의의 바람직한 방식으로 정의될 수 있다. 예를 들어, 만약 두 개의 서로 다른(일반적으로 메모리에서 연속적인) 캐시 라인들에서 바이트를 액세스한다면 로드는 오정렬 될 것이다. 이러한 로드는 두 개의 캐시 라인에서 바이트를 액세스하기 위해 두 개의 데이터 캐시 액세스를 사용할 것이다. 다른 실시예는 오정렬된 로드들을 정의하기 위해 다른 경계들(boundries)를 사용할 것이다.
오정렬(MA: misalgined) 비트는 오정렬된 로드에 할당된 큐 엔트리 내에서 설정될 것이고, 오정렬된 로드의 제 2 액세스를 위한 인덱스가 엔트리의 Idx2 필드에 저장될 것이다. 즉, Idx 필드는 오정렬된 로드의 제 1 부분의 인덱스로 저장할 수 있고, Idx2 필드는 오정렬된 로드의 제 2 부분의 인덱스를 저장할 수 있다. 몇몇 실시예에서 데이터 캐시 히트 상태와 히트 웨이는 오정렬된 로드들의 제 2 부분에서 추적(tracking)될 것이다. 도시한 실시예에서, 인덱스만이 저장되고 오정렬된 로드의 제 2 부분은 데이터 캐시 히트 상태가 히트되지 않은 것처럼 처리된다. 오정렬된 로드는 상대적으로 드물고 따라서 오정렬된 로드의 제 2 부분에서 부정확하게 재동기화함으로 인한 성능 저하는 미미할 것으로 예측된다.
큐(24)는 임의의 바람직한 방식으로 구성될 수 있다. 예를 들어, 일 실시예에서, Idx, 웨이, 그리고 Idx2 필드는 도 1에서 도시된 바와 같이 CAM(content addressable memory)로서 구현될 것이다. 큐(24)의 나머지(remainder)는 랜덤 액세스 메모리(RAM), 또는 하나 이상의 레지스터(registers)들, 플롭들(flops), 또는 다른 클록 저장 장치들에 구현될 수 있다. CAM, RAM, 레지스터, 플롭, 및/또는 다른 클록 저장 장치의 임의의 조합이 다양한 실시예들에서 사용될 수 있다. CAM으로서 Idx, 웨이, Idx2 필드를 구현하는 것은 필드들을 스누프 인덱스들과 스누프 웨이들에 대조(match against)될 수 있게 하고, 또한 데이터 캐시 히트 상태를 유지하기 위한 웨이들 및 필/필 에일리어스 인덱스들(fill/fill alias indexes)에 대조될 수 있게 한다. CAM 히트/미스 결과는 제어 유닛(26)에 제공될 수 있다.
특히, 만약 로드가 초기에 데이터 캐시(16)에서 히트로서 검출된다면, 로드에 의해 히트되는 캐시 라인은 후속적으로 (스누프 오퍼레이션이 아닌 오퍼레이션에 의해)무효화 될 것이다. 예를 들어, 캐시 라인은 캐시 필 오퍼레이션에 제공되는 서로 다른 캐시 라인을 저장하기 위해 축출(eviction)될 수 있다. 외부 인터페이스 유닛(22)는 필을 수행하기 위해 데이터 캐시(18)에 필 어드레스를 제공할 것이다. 외부 인터페이스 유닛(18)는 또한 로드 큐(24)에 캐시 필의 인덱스를 제공할 것이다(도 1의 스누프/필 인덱스). 데이터 캐시(18)는 필에 의해 어떤 웨이가 기입되는지를 표시할 것이다(도 1의 스누프/필 웨이). 외부 인터페이스 유닛(22)는 오퍼레이션이 제어 유닛(26) 및 데이터 캐시(18)에 대한 스누프/필 제어 인터페이스를 사용하는 필임을 나타낼 수 있다. 만약 필 인덱스가 Idx 필드와 매칭하고, 필 웨이가 웨이 필드에 매칭되고, 데이터 캐시 히트 상태가 주어진 엔트리에 대해 히트를 표시한다면, 제어 유닛(26)은 주어진 엔트리에서 히트 아님(not hit)을 표시하기 위하여 데이터 캐시 필 상태를 갱신(update)할 수 있다.
일 실시예에서, 데이터 캐시(18)는 액세스하는 동안 데이터 캐시를 위해 히트 웨이를 예측하기 위한 웨이 예측(way prediction)을 표시할 수 있다. 만약 예측된 웨이(predicted way)에서 액세스가 히트가 아니면, 그것은 미스로서 신호될 것이고, 데이터 캐시(18)는 캐시 필을 개시할 수 있다. 액세스가 또 다른 (예측되지 않은) 웨이에서 히트되는 것이 가능하다. 가능성에 대비하기 위하여, 데이터 캐시(18)는 필이 데이터 캐시(18)에 기입될 때, 잠재적인 복제(potentially duplicate) (에일리어스) 캐시 라인을 무효화 하기 위해서, 각각의 방법으로 "백 프로브(Back Probe)"를 수행할 것이다. 일 실시예로, N 이 데이터 캐시(18) 내의 웨이들의 수 이상의 정수라면, 외부 인터페이스 유닛(22)는 필 데이터가 데이터 캐시(18)에 기입될 준비가 되기 최소한 N 클럭 전에 필 어드레스를 전송할 것이다. N 클럭 동안, 백 프로브가 수행되어 잠재적인 에일리어스 캐시 라인(potential alias cache line)을 제거할 수 있다. 데이터 캐시(18)는 로드 큐(24) Idx 필드들과의 대조를 위하여 각각의 백 프로브에 대한 필 에일리어스 인덱스(도 1의 필에일리어스 인덱스(FillAlias Idx))를 제공할 수 있으며, 스누프/필 웨이는 백 프로브의 웨이를 나타낼 것이다. 만약 로드 큐(24) 엔트리(인덱스 및 웨이)에서 매치가 검출되고, 백 프로브가 데이터 캐시에서 히트되고, 엔트리에서 데이터 캐시 히트 상태가 히트를 표시한다면, 제어 유닛(26)은 그 엔트리 내에서 히트가 아님을 표시하기 위하여 데이터 캐시 히트 상태를 갱신할 것이다.
데이터 캐시 히트 상태가 모니터링될 준비가 된(in place) 상태로, 로드들에 관한 스누프 히트들의 검출이 로드 큐(24)에서 수행된다. 외부 인터페이스 유닛(22)는 스누프 인덱스(도 1의 스누프/필 인덱스)를 로드 큐(24)에 제공할 수 있으며, 상기 스누프 인덱스는 스누프가 발생함(도 1의 스누프/필 제어)을 표시할 것이고, 데이터 캐시(18)에 스누프 어드레스(도 1의 스누프/필 주소)를 제공할 것이다. 데이터 캐시(18)는 스누프 히트 또는 미스(도 1의 스누프 히트)를 제어 유닛(28)에 신호할 수 있으며, 스누프에 의해 히트된 웨이(도 1의 스누프/필 웨이)를 로드 큐(24)에 제공할 수 있다. 스누프 히트가 데이터 캐시(18)에서 검출되고, 스누프 인덱스가 Idx 필드에 매치되고, 스누프 웨이가 웨이 필드에 매치되고, 그리고 데이터 캐시 히트 상태가 히트라면, 그 로드에 대해 스누프 히트가 검출된다. 만약 데이터 캐시 히트 상태가 히트가 아니라면, 캐시에서의 스누프 히트/미스와는 독립적으로 Idx 필드가 스누프 인덱스에 매치되는 경우에 로드에서 스누프 히트가 검출된다.
도 1에서는 인덱스, 웨이, 히트 표시가 별개의 신호 경로들로서 도시되지만, 상기 경로들은 공유된 경로들일 수 있음에 주목하여야 한다. 예를 들어, 만약 주어진 일 타입의 인덱스(예를 들어 필에일리어스 인덱스) 및 또 다른 타입(예를 들어 스누프/필 인덱스)의 인덱스가 동시에 제공될 수 없다면, 공유 경로가 사용될 수 있다. 마찬가지로, 서로 다른 타입의 웨이들이 동시에 제공될 수 없거나 서로 다른 타입의 두 개의 히트들이 동시에 신호될 수 없다면, 공유 경로/히트 신호가 사용될 수 있다.
본 설명은 일반적으로 다양한 오퍼레이션들을 수행하도록 구성되는 제어 유닛을 참조한다(또는 다양한 동작을 수행하는 제어 유닛을 간략히 참조한다). 일반적으로, 제어 부는 오퍼레이션들을 구현하는 회로를 포함한다. 상기 회로는 결합 논리(combinational logic), 상태 머신(state machines), 경로(pipelines), 레지스터(registers), 플롭(flops), 래치(latches) 등과 같은 클럭된 저장 장치의 임의의 조합을 포함할 수 있다. 마찬가지로, 오퍼레이션들을 수행하도록 구성된 또는 단순히 오퍼레이션을 수행하는 것으로서 설명된 다른 유닛 또는 컴포넌트는, 오퍼레이션들을 실시하는 회로를 포함할 수 있다.
이제 도 2를 참조하면, 로드의 실행 중에 프로세서(10) 일 실시예의 동작을 설명하는 흐름도가 도시된다. 프로세서(10)(보다 구체적으로 LSU(20), 더욱 구체적으로는 제어 유닛(26))는 도 2에 도시된 동작을 구현하는 회로를 포함한다. 이해하기 쉽도록 블록들이 특정한 순서로 도시되었지만, 다른 순서들이 사용될 수 있다. 추가적으로, 블록들은 결합 논리 회로(combinatorial logic circuitry)에서 병렬적으로 수행될 수 있다. 블록들, 블록들의 결합, 및/또는 흐름도는 전체로서 복수의 클럭 사이클들에 걸쳐 파이프라인될 수 있다.
로드는 데이터 캐시(18)를 액세스(access)할 수 있으며, 데이터 캐시(18)는 로드의 히트/미스 신호를 보낼 것이다. 만약 로드가 캐시 히트이면(결정 블록 30, "예") 제어 유닛(26)은 로드에 할당된 로드 큐(24) 엔트리에 히트 웨이(hitting way)를 기입할 수 있으며(블록 32), 히트 비트를 설정할 수 있다(블록 34). 만약 로드가 캐시 히트가 아니면(결정 블록 30, "아니오"), 제어 유닛(26)은 히트 비트를 클리어할 것이다(블록 36). 어느 경우에든, 제어 유닛(26)은 로드에 할당된 로드 큐 엔트리의 Idx 필드에 로드 인덱스를 기입할 수 있으며(블록 38), 엔트리 내에 유효 비트를 설정할 것이고, 엔트리에서 재동기화 비트(resync bit)를 클리어할 것이다(블록 40).
만약 로드가 오정렬이면(결정 블록 42, "예" ), 제어 유닛(26)은 로드에 할당된 로드 큐 엔트리의 Idx2 필드에(블록 44) 제 2 인덱스(조정 불량 로드의 제 2 부분을 위하여)를 기입할 수 있으며, 엔트리의 MA 비트를 설정할 것이다(블록 46). 그렇지 않다면(결정 블록 42, "아니오"), 제어 유닛(26)은 엔트리에서 MA 비트를 클리어할것이다(블록 48).
도 3은 스누프 오퍼레이션을 위한 프로세서(10)의 일 실시예의 동작을 도시한 흐름도이다. 프로세서(10)(보다 구체적으로, LSU(20), 심지어 더욱 구체적으로는 제어 유닛(26))는 도 3에서 도시된 동작을 구현하는 회로를 포함할 수 있다. 이해하기 쉽도록 블록들이 특정한 순서로 도시되었지만, 다른 순서들이 사용될 수 있다. 추가적으로, 블록들은 결합 논리 회로(combinatorial logic circuitry)에서 병렬적으로 수행될 수 있다. 블록들, 블록들의 결합, 및/또는 흐름도는 전체로서 복수의 클럭 사이클들에 걸쳐 파이프라인될 수 있다. 도 3에서 도시한 동작은 로드 큐(24) 내의 각각의 유효 엔트리에서 병렬적으로 발생할 수 있다.
엔트리에서 히트 비트가 설정되는 경우에(결정 블록 50, "예"), 스누프가 캐시 히트이고 (히트에 대한) 스누프 인덱스 및 웨이가 로드 인덱스 및 로드 웨이와 매치되면 데이터 캐시 히트 상태는 히트이고 따라서 스누프 히트가 발생한다. 그렇지 않다면, 로드 큐에서 스누프 히트가 검출되지 않는다. 따라서, 만약 스누프가 캐시 히트이고(결정 블록 52, "네"), 스누프 인덱스 및 스누프 웨이가 엔트리 내의 인덱스(Idx) 및 웨이(Way)에 매치되면(결정 블록 54, "예"), 제어 유닛(26)은 엔트리 내의 재동기화(R) 비트를 설정할 수 있다(블록 56).
만약 히트 비트가 엔트리에서 클리어되면(결정 블록 50, "아니오"), 데이터 캐시 히트 상태는 히트 아님이된다. 그러므로, 만약 스누프 인덱스가 로드 인덱스에 매치되면(결정 블록 58, "예") 스누프 히트가 추정되고, 제어 유닛(26)가 엔트리 내의 재동기화 비트를 설정한다(블록 56). 로드가 오정렬인 경우(엔트리에서 설정된 MA 비트 - 결정 블록 60, "예"), 제 2 인덱스(Idx2)가 스누프 인덱스에 매치되 면(결정 블록 62, "예"), 스누프 히트가 추정되고, 제어 유닛(26)가 엔트리 내의 재동기화 비트를 설정한다(블록 56).
도 4는 도 3의 흐름도에서 설명된 동작을 도시하는 진리표이다. 진리표(64)는 엔트리의 Idx 필드의 매칭에 근거한 R 비트의 설정을 도시한다. 히트 비트 열은 엔트리 내의 히트 비트의 상태를 표시한다. 캐시 히트 열은 스누프가 캐시 히트인지 여부를 표시한다. 인덱스 매치 열은 Idx 필드가 스누프 인덱스에 매치되는지 여부를 표시한다. 웨이 매치 열은 Way 필드가 스누프 웨이에 매치되는지 여부를 표시하고, R 비트 열은 R 비트의 결과 상태를 표시한다. "x"는 "돈 케어(don't care)" 상태를 표시한다. 주목할 점은 R 비트는 거의 고정(sticky)된다는 것이다. 즉, 이 실시예에서, 일단 R 비트가 설정되면, 엔트리가 다른 로드에 재할당될때(또는 적어도, 엔트리가 무효화될 때(예를 들어, 로드가 퇴거되거나 그렇지 않은 경우 로드 큐(24)로부터 제거될 때)까지)까지 R 비트는 설정된 상태로 유지된다. 진리표(66)는 오정렬된 로드에 대한 R 비트의 설정을 도시한다. MA 비트 열은 엔트리 내의 MA 비트를 표시한다. 인덱스2 매치 열은 스누프 인덱스가 엔트리의 Idx2 필드에 매치되는지 여부를 표시한다. 그리고 R 비트 열은 R 비트의 결과 상태를 다시 표시한다.
도 5는 로드 큐에서 나타난 로드를 위한 데이터 캐시 히트 상태를 관찰하는(이 경우, 히트 비트에 의해 표시된) 프로세서 실시예의 동작을 도시하는 흐름도이다. 프로세서(10)(보다 구체적으로, LSU(20), 심지어 보다 구체적으로 제어 유닛(26))는 도 5에서 보이는 동작을 구현하는 회로를 구성할 것이다. 이해하기 쉽도록 블록들이 특정한 순서로 도시되었지만, 다른 순서들이 사용될 수 있다. 추가적으로, 블록들은 결합 논리 회로(combinatorial logic circuitry)에서 병렬적으로 수행될 수 있다. 블록들, 블록들의 결합, 및/또는 흐름도는 전체로서 복수의 클럭 사이클들에 걸쳐 파이프라인될 수 있다. 도 5에서 도시된 동작은 로드 큐(24) 내의 각각의 유효 엔트리들에서 병렬적으로 발생될 수 있다.
필 에일리어스(fill alias)가 데이터 캐시(18)에 의해 백 프로브(Back Probe)를 통해 조사(probe)되고(결정 블록 70, "예"), 엔트리에서 히트 비트가 설정되고(결정 블록 72, "예"), 백 프로브가 캐시 히트이고(결정 블록 74, "예"), 그리고 필 에일리어스 인덱스 및 히트 웨이가 엔트리 내의 Idx 및 Way 필드와 매치되면(결정 블록 76, "예"), 엔트리내에 나타내어진 로드에 의한 캐시 라인 히트가 백 프로브에 의해 무효화된다. 따라서, 제어 유닛(26)은 히트 비트를 클리어할 수 있다(그러므로 데이터 캐시 히트 상태를 히트 아님으로 설정함)(블록 78). 만약 히트 비트가 설정(결정 블록 72, "예")되지만 백 프로브가 캐시 미스이거나(결정 블록 74, "아니오"), 인덱스 및 웨이 매치 중 적어도 하나가 검출되지 않을 때(결정 블록 76, "아니오"), 히트 비트는 영향받지 않는다. 마찬가지로, 히트 비트가 클리어되면(결정 블록 72, "아니오"), 히트 비트는 영향받지 않는다. 이 경우, 동일한 캐시 라인이 또 다른 웨이에 기입될 수 있도록 에일리어스(alias)는 무효화됨에 주목하여야 한다. 다른 실시예들에서는 히트 비트를 클리어하는 대신 캐시 라인이 채워지는 웨이를 표시하기 위하여 엔트리의 웨이 필드를 갱신할 수 있다.
캐시 필이 완료되는 경우(결정 블록 80, "예"), 필(fill)에 대하여 데이터 캐시(18)에 의해 표시된 캐시 히트 상태와는 독립적으로 인덱스 및 웨이가 필 인덱스 및 필 웨이에 매치되면(결정 블록 82, "예") 로드에 의한 캐시 라인 히트가 축출(eviction)될 것이다. 그러므로, 히트 비트가 클리어된다(블록 84). 그렇지 않은 경우에는, 히트 비트는 영향을 받지 않는다.
도 6은 도 5의 흐름도에서 설명된 동작을 도시하는 진리표이다. 진리표(90)는 백 프로브에 대해 에일리어스 매치를 검출하는 것을 도시한다. 히트 비트 열은 엔트리 내의 히트 비트의 상태를 표시한다. 캐시 히트 열은 백 프로브가 캐시 히트인지 여부를 표시한다. 인덱스 매치 열은 Idx 필드가 필 에일리어스 인덱스에 매치되는지 여부를 표시한다. 웨이 매치 열은 Way 필드가 필 웨이에 매치되는지 여부를 표시하고, 에일리에서 매치 열은 에일리어스 매치가 검출되는지 여부를 표시한다. "x"는 "돈 케어" 상태를 표시한다. 진리표(92)는 캐시 필 그 자체에 대해 필 매치를 검출하는 것을 도시한다. 히트 비트, 인덱스 매치, 웨이 매치 열들은 진리표(90)와 유사하며, 필 매치 열은 필 매치가 검출되는지 여부를 표시한다. 마지막으로, 진리표(94)는 히트 비트의 현재 상태를 표시하는 히트 비트 열을 포함하고, 에일리어스 매치와 필 매치는 표 90과 92, 그리고 새로운 히트 비트 값으로부터 발생된다.
도 2 내지 6의 설명은 히트 비트를 사용하여 데이터 캐시 히트 상태를 나타낸 특정한 실시예를 참조한다. 그러나, 다른 실시예들은 임의의 요구되는 형식을 사용하여 데이터 캐시 히트 상태를 나타낼 수 있다.
당업자에게는 위의 개시를 완전히 이해함에 따른 다양한 수정 및 변형들이 자명할 것이다. 하기의 청구항들은 모든 그러한 수정 및 변형을 포괄하도록 의도된 것이다.
본 발명은 일반적으로 프로세서 분야에 적용가능한 것이다.

Claims (18)

  1. 프로세서로서,
    데이터 캐시와; 그리고
    상기 데이터 캐시에 연결된 로드/저장 유닛(load/store unit)(LSU)을 포함하며, 상기 LSU는 큐(queue)를 포함하고, 상기 큐의 각각의 엔트리(entry)는, 상기 엔트리가 유효한 것으로 표시되면, 상기 데이터 캐시에 액세스했으나 퇴거(retire)되지는 않은 서로 다른 로드(different load)에 할당되며, 상기 LSU는 상기 큐에 연결된 제어 유닛을 더 포함하고, 상기 제어 유닛은 스누프 오퍼레이션(snoop operation)들 및 다른 오퍼레이션들에 응답하여 상기 데이터 캐시의 컨텐츠가 변함에 따라 상기 큐에 나타난(represented) 각각의 로드의 데이터 캐시 히트 상태(data cache hit status)를 갱신(update)하도록 되어있으며, 상기 LSU는 상기 프로세서에 의해 수신된 스누프 오퍼레이션에 대응하는 스누프 인덱스(index)를 수신하도록 연결되고, 상기 제어 유닛은, 상기 스누프 인덱스가 제 1 엔트리에 저장된 로드 인덱스(load index)와 매칭하는 것과, 제 1 로드의 데이터 캐시 히트 상태가 히트를 나타내는 것과, 상기 데이터 캐시가 상기 스누프 오퍼레이션에 대해 스누프 히트를 검출하는 것과, 그리고 상기 제 1 엔트리 내에 저장된 로드 웨이(load way)가 상기 스누프 오퍼레이션이 히트인 상기 데이터 캐시의 제1 웨이(first way)와 매칭하는 것에 응답하여, 상기 큐의 제 1 엔트리 내의 제 1 로드에 관한 스누프 히트를 검출하도록 되어 있고; 그리고 상기 로드 웨이는 상기 로드가 히트되는 상기 데이터 캐시의 웨이이고, 상기 제어 유닛은 상기 데이터 캐시 내의 상기 제 1 로드에 의해 히트되는 캐시 라인의 무효화(invalidation)에 응답하여 히트 아님(not hit)을 나타내도록 상기 제 1 로드의 데이터 캐시 히트 상태를 갱신하도록 된 것을 특징으로 하는 프로세서.
  2. 제 1 항에 있어서,
    상기 제어 유닛은, 또한, 상기 스누프 인덱스가 상기 로드 인덱스와 매칭함과 상기 제 1 로드의 데이터 캐시 히트 상태가 히트 아님을 나타냄에 응답하여, 상기 제 1 로드에 관한 스누프 히트를 검출하도록 된 것을 특징으로 하는 프로세서.
  3. 제 2 항에 있어서,
    상기 제어 유닛은, 상기 제 1 로드가 상기 데이터 캐시에 액세스할 때 캐시 미스에 응답하여 상기 제 1 로드의 데이터 캐시 히트 상태를 히트 아님으로 설정하도록 된 것을 특징으로 하는 프로세서.
  4. 제 2 항에 있어서,
    상기 제어 유닛은 상기 큐 내의 상기 제 1 로드에 관한 필 히트(fill hit)에 응답하여 상기 제 1 로드의 데이터 캐시 히트 상태를 히트 아님으로 설정하도록 된 것을 특징으로 하는 프로세서.
  5. 제 1 항에 있어서,
    상기 제 1 로드가 오정렬된(misaligned) 것에 응답하여, 제 2 인덱스가 상기 제 1 엔트리에 저장되며, 그리고 상기 로드 인덱스는 상기 오정렬된 로드(misalined load)의 제 1 부분에 대응하고 상기 제 2 인덱스는 상기 오정렬된 로드의 제 2 부분에 대응하는 것을 특징으로 하는 프로세서.
  6. 제 5 항에 있어서,
    상기 데이터 캐시 히트 상태가 상기 오정렬된 로드의 제 1 부분에 대응하고 상기 로드 웨이는 상기 오정렬된 로드의 제 1 부분에 대응하는 것을 특징으로 하는 프로세서.
  7. 제 6 항에 있어서,
    상기 제어 유닛은, 또한, 상기 제 2 인덱스가 상기 스누프 인덱스와 매칭하고 상기 제 1 로드가 오정렬된 것에 응답하여 상기 제 1 로드에 관한 스누프 히트를 검출하도록 된 것을 특징으로 하는 프로세서.
  8. 프로세서에서 제 1 로드를 위해 데이터 캐시에 액세스하는 단계와;
    큐의 제 1 엔트리 내에 데이터 캐시 히트 상태를 저장하는 단계와, 상기 제 1 로드는 제 1 큐 엔트리에 할당되고;
    스누프 오퍼레이션들 및 다른 오퍼레이션들에 응답하여 상기 데이터 캐시의 컨텐츠가 변함에 따라 상기 데이터 캐시 히트 상태를 갱신하는 단계와, 상기 갱신하는 단계는 상기 데이터 캐시 내의 상기 제 1 로드에 의해 히트되는 캐시 라인을 무효화하는 것에 응답하여 히트 아님을 나타내도록 상기 제 1 로드의 데이터 캐시 히트 상태를 갱신하는 단계를 포함하고;
    상기 프로세서에서 스누프 오퍼레이션에 대응하는 스누프 인덱스를 수신하는 단계와; 그리고
    상기 스누프 인덱스가 상기 제1 엔트리에 저장된 로드 인덱스에 매칭되는 것과, 상기 제1 로드의 데이터 캐시 히트 상태가 히트를 나타내는 것과, 상기 데이터 캐시가 상기 스누프 오퍼레이션에 대한 스누프 히트를 검출하는 것과, 그리고 상기 제1 엔트리 내에 저장된 로드 웨이가 상기 스누프 오퍼레이션이 히트인 상기 데이터 캐시의 제1 웨이와 매칭하는 것에 응답하여, 상기 제1 로드에 관한 스누프 히트를 검출하는 단계를 포함하며,
    상기 로드 웨이는 상기 로드가 히트되는 상기 데이터 캐시의 웨이임을 특징으로 하는 방법.
  9. 제 8 항에 있어서,
    상기 스누프 인덱스가 제2 로드에 할당되는 상기 큐의 제 2 엔트리 내의 제 2 로드 인덱스와 매칭하고 상기 제 2 로드의 제 2 데이터 캐시 히트 상태가 히트 아님을 나타냄에 응답하여 제 2 로드에 관한 스누프 히트를 검출하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  10. 제 9 항에 있어서,
    상기 제 2 로드가 상기 캐시에 액세스할 때 캐시 미스에 응답하여 상기 제 2 데이터 캐시 히트 상태를 히트 아님으로 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  11. 제 9 항에 있어서,
    상기 큐 내의 상기 제 2 로드에 관한 필 히트에 응답하여 상기 제 2 데이터 캐시 히트 상태를 히트 아님으로 설정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  12. 제 8 항에 있어서,
    상기 제 1 로드가 오정렬된 것에 응답하여, 제 2 인덱스를 상기 제 1 엔트리에 저장하는 단계를 더 포함하고, 상기 로드 인덱스는 상기 오정렬된 로드의 제 1 부분에 대응하고 상기 제 2 인덱스는 상기 오정렬된 로드의 제 2 부분에 대응하는 것을 특징으로 방법.
  13. 제 12 항에 있어서,
    상기 데이터 캐시 히트 상태가 상기 오정렬된 로드의 제 1 부분에 대응하고 상기 로드 웨이는 상기 오정렬된 로드의 제 1 부분에 대응하는 것을 특징으로 하는 방법.
  14. 제 13 항에 있어서,
    상기 제 2 인덱스가 상기 스누프 인덱스와 매칭하고 상기 제 1 로드가 오정렬된 것에 응답하여 상기 제 1 로드에 관한 스누프 히트를 검출하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  15. 프로세서로서,
    데이터 캐시와; 그리고
    상기 데이터 캐시에 연결된 로드/저장 유닛(LSU)을 포함하며, 상기 LSU는 큐를 포함하고, 상기 큐의 각각의 엔트리는, 상기 엔트리가 유효한 것으로 표시되면, 상기 데이터 캐시에 액세스했으나 퇴거되지는 않은 서로 다른 로드에 할당되며, 상기 LSU는 상기 큐에 연결된 제어 유닛을 더 포함하고, 상기 제어 유닛은 스누프 오퍼레이션들 및 다른 오퍼레이션들에 응답하여 상기 데이터 캐시의 컨텐츠가 변함에 따라 상기 큐에 나타난 각각의 로드의 데이터 캐시 히트 상태를 갱신하도록 되어있으며, 상기 LSU는 상기 프로세서에 의해 수신된 스누프 오퍼레이션에 대응하는 스누프 인덱스를 수신하도록 연결되고, 상기 제어 유닛은, 적어도 2가지 경우들: (i) 상기 스누프 인덱스가 제 1 엔트리에 저장된 로드 인덱스와 매칭되고, 제 1 로드의 데이터 캐시 히트 상태가 히트를 나타내며, 그리고 상기 데이터 캐시가 상기 스누프 오퍼레이션에 대한 스누프 히트를 검출하는 것에 응답하는 경우, 및 (ii) 상기 스누프 오퍼레이션이 상기 데이터 캐시 내에서 히트하는지 여부와 관계없이, 상기 스누프 인덱스가 상기 로드 인덱스와 매칭하고 상기 제 1 로드의 데이터 캐시 히트 상태가 히트가 아님을 나타내는 것에 응답하는 경우에 상기 큐의 제 1 엔트리 내의 제 1 로드에 대한 스누프 히트를 검출하도록 되고, 상기 제어 유닛은 상기 데이터 캐시 내의 상기 제 1 로드에 의해 히트되는 캐시 라인의 무효화에 응답하여 히트 아님을 나타내도록 상기 제 1 로드의 데이터 캐시 히트 상태를 갱신하도록 된 것을 특징으로 하는 프로세서.
  16. 제 15 항에 있어서,
    상기 데이터 캐시는 복수의 웨이들을 포함하는 것과 관련하여 설정되고, 상기 제 1 엔트리는 상기 복수의 웨이들 중 상기 제 1 로드가 히트하는 것을 나타내는 로드 웨이를 저장하도록 되고, 경우 (i)은 상기 스누프 히트가 검출되는 상기 캐시의 제 1 웨이와 매칭하는 상기 로드 웨이에 또한 응답하는 것을 특징으로 하는 프로세서.
  17. 제 15 항에 있어서,
    상기 제어 유닛은: (i) 상기 제 1 로드가 상기 데이터 캐시에 액세스할 때 캐시 미스에 응답하거나 (ii) 상기 큐 내의 상기 제 1 로드에 관한 필 히트에 응답하여, 상기 제 1 로드의 데이터 캐시 히트 상태가 히트 아님으로 설정하도록 된 것 을 특징으로 하는 프로세서.
  18. 제 15 항에 있어서,
    상기 제 1 로드가 오정렬된 것에 응답하여 제 2 인덱스가 상기 제 1 엔트리에 저장되고, 그리고 상기 로드 인덱스는 상기 오정렬된 로드의 제 1 부분에 대응하고 상기 제 2 인덱스는 상기 오정렬된 로드의 제 2 부분에 대응하며, 그리고 상기 데이터 캐시 히트 상태는 상기 오정렬된 로드의 제 1 부분에 대응하고, 그리고 상기 제어 유닛은, 또한, 상기 제 2 인덱스가 상기 스누프 인덱스에 매칭되고 상기 제 1 로드가 오정렬된 것에 응답하여 상기 제 1 로드에 관한 스누프 히트를 검출하도록 된 것을 특징으로 하는 프로세서.
KR1020117001687A 2008-06-23 2009-06-23 효율적인 로드 큐 스누핑 KR101472079B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/143,985 2008-06-23
US12/143,985 US8214602B2 (en) 2008-06-23 2008-06-23 Efficient load queue snooping

Publications (2)

Publication Number Publication Date
KR20110034648A KR20110034648A (ko) 2011-04-05
KR101472079B1 true KR101472079B1 (ko) 2014-12-24

Family

ID=

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170072645A (ko) * 2015-12-17 2017-06-27 삼성전자주식회사 프로세서 및 프로세서에서 데이터를 처리하는 방법

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100373849B1 (ko) 2000-03-13 2003-02-26 삼성전자주식회사 어소시어티브 캐시 메모리

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100373849B1 (ko) 2000-03-13 2003-02-26 삼성전자주식회사 어소시어티브 캐시 메모리

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20170072645A (ko) * 2015-12-17 2017-06-27 삼성전자주식회사 프로세서 및 프로세서에서 데이터를 처리하는 방법
KR102523418B1 (ko) * 2015-12-17 2023-04-19 삼성전자주식회사 프로세서 및 프로세서에서 데이터를 처리하는 방법

Similar Documents

Publication Publication Date Title
US9268708B2 (en) Level one data cache line lock and enhanced snoop protocol during cache victims and writebacks to maintain level one data cache and level two cache coherence
US8364907B2 (en) Converting victim writeback to a fill
US9513904B2 (en) Computer processor employing cache memory with per-byte valid bits
US8316188B2 (en) Data prefetch unit utilizing duplicate cache tags
US6681295B1 (en) Fast lane prefetching
EP1224557B1 (en) Store to load forwarding using a dependency link file
US6523109B1 (en) Store queue multimatch detection
KR100708010B1 (ko) 인덱스와 선택적 경로 정합에 기반하여 데이터를 포워딩하는 저장 버퍼
US7707361B2 (en) Data cache block zero implementation
US8051248B2 (en) Transient transactional cache
US8239638B2 (en) Store handling in a processor
US20080010417A1 (en) Read/Write Permission Bit Support for Efficient Hardware to Software Handover
EP1388065A2 (en) Method and system for speculatively invalidating lines in a cache
US8214602B2 (en) Efficient load queue snooping
US20210011729A1 (en) Managing Commit Order for an External Instruction Relative to Queued Instructions
US6467027B1 (en) Method and system for an INUSE field resource management scheme
US8108621B2 (en) Data cache with modified bit array
KR19990006478A (ko) 멀티 사이클 데이터 캐쉬 판독을 위한 데이터 레지스터
US20050273563A1 (en) System and method for canceling write back operation during simultaneous snoop push or snoop kill operation in write back caches
KR101472079B1 (ko) 효율적인 로드 큐 스누핑
US8108624B2 (en) Data cache with modified bit array
US11416400B1 (en) Hardware cache coherency using physical address proxies