KR101216190B1 - 다수 코어들을 가로질러 모니터링되는 캐시 라인 공유 - Google Patents

다수 코어들을 가로질러 모니터링되는 캐시 라인 공유 Download PDF

Info

Publication number
KR101216190B1
KR101216190B1 KR1020077007487A KR20077007487A KR101216190B1 KR 101216190 B1 KR101216190 B1 KR 101216190B1 KR 1020077007487 A KR1020077007487 A KR 1020077007487A KR 20077007487 A KR20077007487 A KR 20077007487A KR 101216190 B1 KR101216190 B1 KR 101216190B1
Authority
KR
South Korea
Prior art keywords
processor core
address range
update
address
state
Prior art date
Application number
KR1020077007487A
Other languages
English (en)
Other versions
KR20070057906A (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 KR20070057906A publication Critical patent/KR20070057906A/ko
Application granted granted Critical
Publication of KR101216190B1 publication Critical patent/KR101216190B1/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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30083Power or thermal control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • 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
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

일 실시예에서, 시스템은 제 1 프로세서 코어 및 제 2 프로세서 코어를 포함한다. 제 1 프로세서 코어는 제 1 프로세서 코어가 업데이트를 위해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위 표시를 전달하도록 구성된다. 제 1 프로세서 코어는 제 1 프로세서 코어로 하여금 이 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하여 어드레스 범위 표시를 전달하도록 구성된다. 제 2 프로세서 코어는 이 어드레스 범위 표시를 수신하도록 연결되고, 이 어드레스 범위 내의 적어도 하나의 바이트를 업데이트 하는 저장 동작을 실행하는 것에 응답하여 제 1 프로세서 코어에 신호를 보내도록 구성된다. 제 1 프로세서 코어는 제 2 프로세서 코어로부터 이 신호를 수신하도록 연결되고, 제 1 프로세서 코어가 이 신호에 응답하여 어드레스 범위 내의 업데이트를 기다리고 있는 제 1 상태에서 나오도록 구성된다.
Figure R1020077007487
프로세서 코어, 어드레스 범위 표시, 업데이트, 모니터링

Description

다수 코어들을 가로질러 모니터링되는 캐시 라인 공유{SHARING MONITORED CACHE LINES ACROSS MULTIPLE CORES}
본 발명은 프로세서에 관한 것이고, 특히 변화에 대한 캐시 라인(cache lines)의 모티터링(monitoring)에 관한 것이다.
많은 응용 프로그램이 다른 응용 프로그램과 상호작용하도록 라이팅(writing)된다. 추가적으로, 많은 응용 프로그램들이 멀티-스레드된(multi-threded) 응용으로서 라이팅된다. 멀티-스레드된 응용은 상대적으로 독립적으로 실행하도록 설계된 다수 코드 시퀀스(code sequences)(스레드(threads))를 갖는다. 이 스레드(또는 응용)는 다양한 방법으로 서로 통신할 수 있다. 간결함을 위해, 용어 "스레드"는 이 설명 내에서 멀티-스레드된 응용으로부터의 코드 시퀀스를 언급하거나 또는 만약 응용이 그 자체로 멀티-스레드되지 않았다면 전체로서 응용을 언급하기 위해 사용된다.
메모리 위치는 종종 스레드들 사이에서 통신하기 위해 사용된다. 예를 들어, 메모리 위치는, 메모리의 더 커다란 영역에 대한 억세스(access)를 제어하고, 주변 장치와 같은 컴퓨터 시스템 내에서의 또 다른 리소스(resource)에 대한 억세스를 제어하고, 특별한 코드 시퀀스(종종 "임계 지역(critical section)"으로 언급됨)를 실행하는 능력을 제어하고, 기타 등등을 제어하는데 사용되는 세마포어(semaphore)를 저장하도록 정의될 수 있다. 상기 것들 중 어떤 것은 아래에서 보호되는 리소스로 언급된다. 일반적으로, 스레드는 세마포어에 억세스할 수 있고 그 상태를 점검할 수 있다. 만약 그 상태가, 보호되는 리소스를 스레드가 제어할 수 있다고 표시한다면, 이 스레드는 세마포어 상태를 바꾸어, 보호되는 리소스를 이 스레드가 제어한다고 표시할 수 있다. 만약에 그 상태가, 보호되는 리소스의 제어 내에 또 다른 스레드가 있다고 표시한다면, 이 스레드는 (예를 들어, 보호되는 리소스와 함께 종료되었다고 표시하도록 세마포어를 라이팅하는 다른 스레드에 의해) 그 상태가 바뀔 때까지 세마포어를 계속 점검할 수 있다. 메모리 위치는 또한 스레드들 사이에서 다른 메시지(message)들을 보내기 위해 (또는 메시지가 이용가능하다고 표시하기 위해) 사용될 수도 있다. 만약 소정의 스레드가 또 다른 스레드로부터의 메시지를 기다리고 있다면, 이 메시지가 이용가능하다고 표시하는 값으로 메모리 위치가 라이팅될 때까지 상기 소정의 스레드는 메모리 위치를 계속 점검할 수 있다. 다른 많은 예들이 존재하며, 여기서 스레드는 또 다른 스레드와 통신하기 위해 메모리 위치를 사용한다.
일반적으로, 스레드가 요구된 상태에 대한 메모리 위치를 점검하고 있고 그리고 메모리 위치 내의 요구된 상태를 찾지 못하는 경우, 스레드는 "스핀 루프(spin loop)"로 들어가고, 여기서 스레드는 요구된 상태에 대해 점검하면서 메모리 위치에 반복적으로 억세스한다. 메모리 위치가 결국 요구된 상태로 라이팅 될 때, 스레드는 스핀 루프에서 나올 수 있다. 스레드가 스핀 루프에 있는 동안, 스레 드는 실제로 유용한 일을 달성하지 못하고 있다. 그러나, 스레드를 실행하는 프로세서는 스핀 루프를 실행하는 파워(power)를 소비하고 있다.
어떤 명령 세트 구조는 프로세서가 이러한 상황들에 대해 최적화되도록 하는 명령들을 정의한다(만약 프로그래머가, 스핀 루프에서 그리고 스레드가 메모리 위치 내의 요구된 상태를 기다리는 다른 경우에 이 명령들을 사용한다면). 예를 들어, x86 명령 세트(Streaming Single instruction multiple data Extensions 3, 또는 SSE3를 가짐)는 MONITOR/MWAIT 명령 쌍을 정의한다. MONITOR 명령은 프로세서가 (예를 들어, 또 다른 프로세서에 의해 실행되는 저장(store)으로 인해) 업데이트(update)를 위해 모니터링(monitoring)하는 어드레스 범위(address range)을 확립하기 위해 사용될 수 있다. MWAIT 명령은 프로세서로 하여금 업데이트를 기다리는 동안 "구현 의존성 최적화된 상태(implementation dependent optimized state)"에 들어가도록 하는데 사용될 수 있다. 프로세서는 모니터링된 어드레스 범위에서의 저장에 응답하여 (그리고 또한 어떤 인터럽트(interrupts)에 대해서 그리고 모니터링된 어드레스 범위와 관계없는 다른 이유에 대해서) 구현 의존성 최적화된 상태에서 나온다. 일반적으로, 프로세서는 프로세서 내에서 구현되는 정상 코히런시 매커니즘(coherency mechanism)을 통한 업데이트에 관해 통보받는다.
일 실시예로, 시스템은 제 1 프로세서 코어(processor core)와 제 2 프로세서 코어를 포함한다. 상기 제 1 프로세서 코어는 상기 제 1 프로세서 코어가 업데이트에 대해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위 표시를 전달하도록 구성된다. 상기 제 1 프로세서 코어는, 상기 제 1 프로세서 코어로 하여금 업데이트에 대해 상기 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하여 상기 어드레스 범위 표시를 전달하도록 구성된다. 상기 제 2 프로세서 코어는 상기 어드레스 범위 표시를 수신하도록 연결되고, 상기 어드레스 범위 내에서 적어도 하나의 바이트(byte)를 업데이트 하는 저장 동작을 실행하는 것에 응답하여, 상기 제 1 프로세서 코어에 신호를 보내도록 구성된다. 상기 제 1 프로세서 코어는 상기 제 2 프로세서 코어로부터의 상기 신호를 수신하도록 연결되고, 상기 신호에 응답하여 제 1 상태에서 나오도록 구성되며, 여기서 상기 제 1 상태는 상기 제 1 프로세서 코어가 상기 어드레스 범위에서의 업데이트를 기다리고 있는 상태이다.
또 다른 실시예로, 방법이 고려된다. 이 방법은 제 1 프로세서 코어가 업데이트에 대해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위를 식별하는 어드레스 범위 표시를 상기 제 1 프로세서 코어로부터 제 2 프로세서 코어로 전달하는 단계와, 여기서 상기 전달은 상기 제 1 프로세서 코어가 업데이트에 대한 상기 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하며; 상기 제 2 프로세서 코어 내의 상기 어드레스 범위 내에서 적어도 하나의 바이트를 업데이트 하는 저장 동작을 실행하는 단계와; 상기 저장 동작에 응답하여, 상기 제 1 프로세서 코어에 신호를 보내는 단계와; 그리고 상기 제 1 프로세서 코어에서의 제 1 상태에서 나오는 단계를 포함하며, 여기서 상기 제 1 프로세서 코어는 상기 신호를 보내는 것에 응답하여 상기 어드레스 범위 내에서 상기 업데이트를 기다리고 있다.
또 다른 실시예로, 모니터 유닛(monotor unit)을 포함하는 프로세서 코어가 고려된다. 상기 프로세서 코어는 제 1 명령에 응답하여 업데이트에 대한 어드레스 범위를 모니터링하도록 구성된다. 상기 프로세서 코어는 상기 어드레스 범위에 대한 상기 업데이트를 기다리기 위해 제 1 상태에 들어가도록 구성된다. 상기 모니터 유닛은 상기 제 1 명령을 실행하는 것에 응답하여 상기 어드레스 범위를 식별하는 어드레스 범위 표시를 제 2 프로세서 코어에 전달하도록 구성되고, 그리고 상기 제 2 프로세서 코어가 상기 어드레스 범위에서의 적어도 하나의 바이트를 업데이트하고 있다는 것을 표시하는 상기 제 2 프로세서 코어로부터의 신호를 수신하도록 구성된다. 상기 프로세서 코어는 상기 신호에 응답하여 상기 제 1 상태에서 나오도록 구성된다.
다음의 세부적인 설명은 첨부되는 도면을 참조하며, 이 도면은 이제 간단히 설명된다.
도 1은 복수의 프로세서 코어를 포함하는 컴퓨터 시스템의 일 실시예의 블록도이다.
도 2는 모니터 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.
도 3은 MWait 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.
도 4는 저장 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.
도 5는 캐시 라인의 업데이트를 기다리는 동안 낮은 파워 상태에 들어가기 위한 프로세서 코어의 일 실시예의 동작을 나타내는 상태 머신도이다.
도 6은 동일한 노드에서의 프로세서 코어가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어의 일 실시예의 동작을 나타내는 예이다.
도 7은 또 다른 노드에서의 프로세서 코어가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어의 일 실시예의 동작을 나타내는 예이다.
본 발명의 다양한 수정과 대안적 형태가 가능하지만, 그 특정 실시예들은 도면에서 예로서 도시되며, 그리고 본원에서 세부적으로 설명된다. 그러나, 이것에 대한 도면과 세부적 설명은 본 발명을 개시되는 특별한 형태에 한정하려는 것이 아니고, 그 반대로 본 발명은 첨부되는 특허청구범위에 의해 정해지는 바와 같이 본 발명의 사상과 범위 내에 있는 모든 수정물, 등가물 및 대안적인 것을 포괄하는 것을 의도한다는 것을 이해해야한다.
x86 명령 세트 구조(MONITOR 및 MWAT 명령들을 정의하는 적어도 SSE3 확장(extensions)을 포함하며, AMD64TM 확장 또는 어떤 다른 확장과 같은 다른 확장을 포함할 수 있음)를 구현하는 프로세서 코어를 포함하는 예시적 실시예들이 아래에서 설명된다. 다른 실시예들은 어떤 명령 세트 구조를 구현할 수 있고, 그리고 모 니터링 되는 어드레스 범위(예를 들어, 캐시 라인, 또는 다른 어떤 어드레스 범위)를 확립하도록 정의되고 그리고 프로세서 코어로 하여금 모니터링 되는 어드레스 범위 내에서 적어도 하나의 바이트에 대한 업데이트를 기다리는 상태에 들어가도록 정의된 하나 또는 그 이상의 명령들을 포함할 수 있다. 즉, 명령 또는 명령들을 실행하는 것에 응답하여, 프로세서 코어는 어드레스 범위를 모니터링 할 수 있고 모니터링되는 어드레스 범위 내에서의 업데이트를 기다리는 상태로 들어갈 수 있다. MONITOR 및 MWAIT 명령들은 이러한 명령들의 예로서 사용된다. 명세서에서의 편리함을 위해, MONITOR 명령은 모니터 명령으로 언급되며(대문자가 아님) 그리고 MWAIT는 MWait 명령으로 언급된다(단지 M과 W만 대문자임).
이제 도 1로 돌아가면, 컴퓨터 시스템(10)의 일 실시예의 블록도가 도시된다. 도시된 실시예에서, 컴퓨터 시스템(10)은 노드(nodes)(12A-12B)와, 메모리(memory)(12A-1B)와, 주변 장치(16A-16B)를 포함한다. 노드(12A-12B)는 연결되고, 그리고 노드(12B)는 주면 장치(16A-16B)에 연결된다. 노드(12A-12B) 각각은 각각각 메모리(14A-14B)에 연결된다. 노드(12A)는 브리지(bridge)(20A)에 연결된 프로세서 코어(18A-18B)를 포함하며, 이 브리지는 메모리 제어기(22A)와 복수의 하이퍼트랜스포트(HyperTransportTM, HT) 인터페이스(interface) 회로(24A-24C)에 더 연결된다. 노드(12B)는 유사하게 브리지(20B)에 연결된 프로세서 코어(18C-18D)를 포함하며, 이 브리지는 메모리 제어기(22B)와 복수의 하이퍼트랜스포트(HT) 인터페이스 회로(24D-24F)에 더 연결된다. HT 회로들(24C-24D)은 (본 실시예에서는, HT 인 터페이스를 통해) 연결되고 그리고 HT 회로(24F)는 주변 장치(16A)에 연결되며, 이 주변 장치(16A)는 (본 실시예에서는, HT 인터페이스를 사용하여) 데이지 체인(daisy chain) 구성으로 주변 장치(16B)에 연결된다. 메모리 제어기(22A-22B)는 각각 메모리(14A-14B)에 연결된다.
프로세서 코어(18A-18B)의 일 실시예의 추가적인 세부사항이 도 1에 도시된다. 프로세서 코어(18C-18D)는 비슷할 수 있다. 예시된 실시예에서, 프로세서 코어(18A)는 레지스터(registers)(28A-28B)와 비교기(30A-30B)를 포함하는 모니터 유닛(26A)을 포함한다. 레지스터(28A)는 비교기(30A)에 연결되고, 이 비교기(30A)는 브리지(20A)에 더 연결되어 인터페이스로부터 무효화 프로브(invalidating probe)(P-Inv)의 어드레스를 수신한다. 레지스터(28B)는 비교기(30B)에 연결되고, 이 비교기(30B)는 프로세서 코어(18A)로부터 저장 어드레스(StAddr)를 수신하기 위해 더 연결된다. 비교기(30B)의 출력은 Wakeup-ST 신호로서 모니터 유닛(26B)에 연결된다. 모니터 유닛(26B)은, 예시된 실시예에서, 레지스터(28A-28B)와 비교기(30A-30B)와 유사하게 각각 레지스터(28C-28D)와 비교기(30C-30D)를 포함한다. 비교기(30D)의 출력은 Wakeup-ST 신호로서 모니터 유닛(26A)에 연결된다. 레지스터(28A)는 레지스터(28D)에 연결되고 그리고 레지스터(28B)는 레지스터(28C)에 연결된다.
프로세서 코어들(18A-18D) 각각은 모니터 명령을 실행하는 것에 응답하여 어드레스 범위를 모니터링 하도록 구성될 수 있다. 추가적으로, 모니터링 프로세서 코어(18A-18D)는 모니터링 되는 어드레스 범위를 식별하는 어드레스 범위 표시를 적어도 하나의 다른 프로세스 코어(18A-18D)("수신하는 프로세서 코어")에 전달할 수 있다. 예를 들어, 예시된 실시예에서, 모니터링 프로세서 코어(18A-18D)는 어드레스 범위 표시를 동일한 노드(12A-12B)에서의 다른 프로세서 코어(18A-18D)에 전달할 수 있다. 즉, 프로세서 코어(18A)는 그 어드레스 범위 표시를 프로세서 코어(18B)에 전달할 수 있고(그 반대의 경우도 마찬가지), 그리고 프로세서 코어(18C)는 그 어드레스 범위 표시를 프로세서 코어(18D)에 전달할 수 있다(그 반대의 경우도 마찬가지). 수신하는 프로세서 코어(18A-18D)는, 수신하는 프로세서 코어(18A-18D)가 명령 실행에 응답하여 수행하는 어드레스 범위에 대한 저장 동작에 대해 모니터링 할 수 있다. 만약 이러한 저장이 탐지된다면, 수신하는 프로세서 코어(18A-18D)는 모니터링하는 프로세서 코어(18A-18D)에 신호를 보낼 수 있다. 예를 들어, 예시된 실시예에서, 수신하는 프로세서 코어(18A-18D)는 모니터링하는 프로세서 코어(18A-18D)에 대한 Wakeup-ST 신호를 어서팅(asserting) 할 수 있다. 모니터링하는 프로세서 코어(18A-18D)는 상기 신호에 응답하여 MWait 명령의 실행을 통해 들어간 상태에서 (만약 그 상태에 여전히 있다면) 나올 수 있다. 어떤 실시예에서, 모니터링 되는 어드레스 범위에 저장 동작의 탐지 신호를 보내는 수신하는 프로세서 코어는, 정상 통신 인터페이스를 통한 코히런시 통신의 전송을 통해 일어날 수 있는 것보다 더 빠르게 모니터링 프로세서 코어가 상기 상태에서 나올 수 있게 할 수 있다.
일반적으로, 어드레스 범위 표시는 모니터링 되는 어드레스 범위를 정의하는 어떠한 값 또는 값들이 될 수 있다. 예를 들어, 어드레스 범위는 메모리 내의 인접 하는 바이트들의 블록에 대응할 수 있다. 만약 블록의 크기가 고정되어 있다면(예를 들어 캐시 라인, 또는 고정된 수의 캐시 라인, 또는 캐시 라인의 부분), 블록의 베이스 어드레스(base address)가 사용될 수 있다. 마찬가지로, 만약 크기가 변할 수 있지만 프로세서 코어들(18A-18D) 각각이 동일한 크기로 프로그래밍 된다면, 베이스 어드레스가 사용될 수 있다. 다른 실시예에서, 베이스 어드레스 및 크기 또는 베이스 어드레스 및 엔딩 어드레스(ending address)는 어드레스 범위를 식별할 수 있다. 이 설명의 나머지 부분에 대해서, 캐시 라인이 어드레스 범위의 크기이고 그리고 캐시 라인의 베이스 어드레스가 어드레스 범위 표시로서 사용되는 실시예가 예로서 사용된다. 그러나, 다른 실시예들은 어떠한 사이즈 어드레스 범위 및 어떠한 대응하는 어드레스 범위 표시를 사용할 수 있다.
프로세서 코어(18A-18B)가 모니터 유닛(26A-26B)을 포함하도록 도 1에서 더 세부적으로 도시된다. 모니터 유닛(26A)(및 그 레지스터(28A-28B) 및 비교기(30A-30B))의 동작이 더 세부적으로 설명되며, 모니터 유닛(26B)의 동작은 비슷할 수 있다. 레지스터(28A)는 모니터 유닛(28A)에 의해 모니터링 되는 어드레스(MAddr)를 저장한다. 즉, 프로세서 코어(18A)는 프로세서 코어(18A)에 의한 모니터 명령의 실행 동안 발생되는 어드레스로 레지스터(28A)를 라이팅할 수 있다. MAddr은 어드레스에 의해 표시되는 캐시 라인의 업데이트를 표시하는 어떠한 통신으로 프로세서 코어(18A)에 공급되는 어드레스와 비교기(30A)를 통해 비교된다. 예를 들어, 예시된 실시예에서, 무효화 프로브(P-Inv)는 업데이트의 표시일 수 있다. 일반적으로, 프로브(probe)는, 프로브의 수신기가 프로브에 의해 식별되는 캐시 라인을 가지는 지를 결정하고 그리고 만약 발견된다면 그 캐시 라인에 대한 상태 변화를 특정하도록 코히런시 스킴(coherency schemes)에서 사용되는 통신이다(그리고 가능하게는 수정된 캐시 라인이 메모리 또는 요구기(requestor)로 리턴(return) 하도록 요구한다). 무효화 프로브는 캐시 라인의 상태 변화를 무효(invalid)로 특정한다. 무효화 프로브는 소스 디바이스(source device)(예를 들어 프로세서, 주변 장치 등)에 의해 업데이트되는 다른 캐시에서의 캐시 라인을 무효화하도록 어떤 코히런시 스킴에서 사용될 수 있다. 다른 표시들이 사용될 수 있다. 예를 들어, 쓰기 동작은 무효화 프로브 대신에 또는 무효화 프로브에 더하여 사용될 수 있다. 또 다른 예로서, 읽기 동작의 소스가 캐시 라인을 수정할 예정이라고 표시하는 읽기 동작은 업데이트의 표시 일 수 있다. 이러한 읽기 동작은 종종 동작을 수정하려는 목적의 읽기, 읽기 수정 동작(read modify operation), 또는 읽기 배타적 동작(read exclusive operation)으로 언급된다. 다른 실시예에서, MAddr은 프로세서 코어(18A)에 의해 수신되는 어떠한 프로브의 주소와 비교될 수 있고, 심지어는 프로브가 업데이트를 표시하지 않을지라도 그러하다. 이러한 비교는 프로세서 코어(18A)로 하여금 MWait 상태에서 나오게 하고 (명령 시퀀스 내의 MWait 명령을 따르는 명령들을 통해) 캐시 라인을 다시 읽도록 할 수 있다. 이러한 방식으로, 소프트웨어는 프로브를 야기하는 모니터링된 캐시 라인에 대한 억세스의 소스가 캐시 라인의 배타적 카피(exclusive copy)를 수신하지 않는 것을 확실하게 할 수 있다(그 다음으로 이것은 무효화 프로브를 야기하지 않고 이후에 업데이트 할 수 있다).
만약 매치(match)가 비교기(30A)에 의해 탐지된다면, 모니터 유닛(26A)은 프 로세서 코어(18A)로 하여금 (예를 들어, 도 1에서의 WMait 신호의 어서팅을 통해) MWait 명령에 응답하여 들어간 상태에서 나오게 한다. 프로세서 코어(18A)는 MWait 명령의 다음에 오는 명령들을 계속 실행할 수 있다. 소프트웨어는 모니터링 되는 캐시 라인 안에서의 값을 점검하기 위해 MWait 명령의 다음에 오는 명령들을 포함할 수 있고, 만약 요구된 상태가 발견되지 않으면, 모니터 명령/MWait 명령으로 다시 분기하여 상기 상태에 다시 들어간다.
모니터 유닛(26A)은 또한 모니터링 되는 캐시 라인의 어드레스를 모니터 유닛(26B)에 전달한다. 예시된 실시예에서, 모니터 유닛(26A)은 레지스터(28A)로부터의 어드레스를 모니터 유닛(26B)에 직접 출력할 수 있다. 다른 실시예에서, 어드레스는 다른 방식으로 전달될 수 있다. 예를 들어, 어드레스는 인터페이스를 통해 브리지(20A)에 전송될 수 있고(예를 들어, 어드레스가 모니터링되는 어드레스라는 것을 표시하도록 코드화된 통신으로서) 그리고 브리지(20A)는 프로세서 코어(18B)에 대한 통신을 라우팅(routing) 할 수 있다.
유사한 방식으로, 모니터 유닛(26A)은 모니터 유닛(26B)에 의해 모니터링 되는 어드레스를 수신할 수 있다. 예시된 실시예에서, 모니터 유닛(26A)은 모니터 유닛(26B)으로부터 모니터링된 어드레스(도 1에서 MAddrS)의 섀도우 카피(shadow copy)를 저장하도록 레지스터(26B)를 포함한다. 모니터 유닛(26A)은 프로세서 코어(18A)에 의해 수행된 저장 동작의 어드레스(도 1에서 StAddr)와 MAddrS를 비교한다. 만약 MAddrS 어드레스에 의해 표시된 캐시 라인에 대한 저장이 탐지된다면(비교기 30B), 모니터 유닛(26A)은 모니터 유닛(26B)에 대한 Wakeup-ST 신호를 어서팅 할 수 있다. 다른 실시예에서, 모니터 유닛(26B)은 레지스터(28C)의 출력을 모니터 유닛(26A)에 계속 공급할 수 있고, 그리고 레지스터(28B)는 이러한 실시예에서 구현될 수 없다.
모니터 유닛(26B)은 모니터 유닛(26A)에 대한 Wakeup-ST 신호를 유사하게 발생시킬 수 있다. 모니터 유닛(26B)으로부터 어서팅된 Wakeup-ST 신호를 수신하는 것에 응답하여, 모니터 유닛(26A)은 MWait 명령에 응답하여 들어간 상태에서 나오도록 구성되며, 이것은 캐시 라인에 대한 무효화 프로브를 탐지하는 것과 유사하다.
일반적으로, 프로세서 코어(18A)는 컴퓨터 시스템(10)의 다른 컴포넌트들(예를 들어, 주변 장치(16A-16B), 모니터링된 어드레스의 섀도우 카피 및 Wakeup-ST 신호의 상기 언급된 프로세서 코어(18B)와의 통신을 제외하고서의 프로세서 코어(18B-18D), 메모리 제어기(22A-22B), 등)과 통신하기 위해 브리지(20A)에 대한 인터페이스를 사용할 수 있다. 이 인터페이스는 어떤 요구된 방식으로 설계될 수 있다. 캐시 코히런트(cache coherent) 통신은 상기 언급된 바와 같이, 인터페이스를 위해 정의될 수 있다. 일 실시예에서, 브리지(20A)와 프로세서 코어(18A-18B) 사이의 인터페이스 상에서의 통신은 HT 인터페이스 상에 사용된 것과 유사한 패킷(packet)들의 형태일 수 있다. 다른 실시예에서는, 어떤 요구된 통신이 사용될 수 있다(예를 들어, 버스 인터페이스 상에서의 트랜잭션(transaction)). 다른 실시예에서, 프로세서 코어(18A-18B)는 브리지(20A)에 대한 인터페이스를 공유할 수 있다(예를 들어 공유된 버스 인터페이스).
브리지(20A)는 일반적으로 프로세서 코어(18A-18B) 및 HT 회로(24A-24C)로부터의 통신들을 수신하도록 구성되고 그리고 통신 타입, 통신 내의 어드레스 등에 의존하는 메모리 제어기(22A), HT 회로(24A-24C), 프로세서 코어(18A-18B)에 이러한 통시들을 라우팅하도록 구성된다. 일 실시예에서, 브리지(20A)는 시스템 요구 큐(System Request Queue, SRQ)를 포함하며, 수신된 통신들은 브리지(20A)에 의해 SRQ에 라이팅된다. 브리지(20A)는 프로세서 코어(18A-18B), HT 회로(24A-24C), 및 메모리 제어기(22A) 사이에서 목적지 또는 목적지들로의 라우팅을 위해 SRQ로부터의 통신을 스케쥴링(scheduling) 할 수 있다. 브리지(20B)는 프로세서 코어(18C-18D), HT 회로(24D-24F), 및 메모리 제어기(22B)에 관하여 유사할 수 있다.
메모리(14A-14B)는 적당한 메모리 디바이스를 포함할 수 있다. 예를 들어, 메모리(14A-14B)는 하나 또는 그 이상의 램버스 DRAM(Rambus DRAM, RDARM) 동기식 DRAM(synchronous DRAM), 더블 데이터 레이트(Double Data Rate, DDR) SDRAM, 스태틱(static) RAM 등을 포함할 수 있다. 컴퓨터 시스템(10)의 어드레스 공간은 메모리들(14A-14B) 사이에서 나누어질 수 있다. 각 노드(12A-12B)는, 어떤 어드레스가 어떤 메모리(14A-14B)에 매핑(mapping) 되는 지를 결정하는 위해, 그리고 따라서 특별한 어드레스에 대한 메모리 요구가 어떤 노드(12A-12B)에 라우팅되어야 하는 지를 결정하기 위해 사용되는 메모리 맵(memory map)을 (예를 들어, 브리지(20A) 내에) 포함할 수 있다. 메모리 제어기(22A-22B)는 메모리(14A-14B)로의 인터페이싱을 위한 제어 회로를 포함할 수 있다. 추가적으로, 메모리 제어기(22A-22B)는 메모리 요구 등을 큐잉(queuing)하기 위해 요구 큐들을 포함할 수 있다.
HT 회로(22A-24F)는 HT 링크(link)로부터의 패킷들을 수신하고 HT 링크 상에 패킷들을 전송하기 위해 다양한 버퍼 및 제어 회로를 포함할 수 있다. HT 인터페이스는 패킷들을 전송하기 위한 단방향성 링크를 포함한다. 각 HT 회로(24A-24F)는 이러한 두 개의 링크들(전송을 위한 것 하나와 수신을 위한 것 하나)에 연결될 수 있다. 소정의 HT 인터페이스는 캐시 코히런트 방식에서 (예를 들어, 노드(12A-12B) 사이에서) 동작 될 수 있거나 또는 비-코히런트 방식에서 (예를 들어, 주변 장치(16A-16B)로/로부터) 동작 될 수 있다. 예시된 실시예에서, HT 회로(24C와 24D)는 노드(12A-12B) 사이의 통신을 위한 코히런트 HT 링크들을 통해 연결된다. HT 회로(24A-24B와 24E)는 사용되지 않으며, 그리고 HT 회로(24F)는 주변 장치(16A-16B)에 대한 비-코히런트 링크들을 통해 연결된다.
주변 장치(16A-16B)는 어떤 타입의 주변 장치일 수 있다. 예를 들어, 주변 장치(16A-16B)는 또 다른 컴퓨터 시스템과 통신하기 위한 디바이스를 포함할 수 있고, 이 디바이스는 상기 또 다른 컴퓨터 시스템에 연결될 수 있다(예를 들어, 네트워크 인터페이스 카드 또는 모뎀). 더욱이, 주변 장치(16A-16B)는 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 제어기 SCSI(Small Computor Systems Interface) 어댑터 및 전화통신 카드(telephony card), 사운드 카드, GPIB 또는 필드(field) 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드를 포함할 수 있다. 용어 "주변 장치"는 입력/출력(I/O) 디바이스를 포함하려는 의도임을 주의해야 한다.
일 실시예에서, 노드(12A-12B) 각각은 본원의 도 1에 도시된 회로를 포함하 는 단일 집적 회로 칩(chip)일 수 있다. 즉, 각 노드(12A-12B)는 칩 멀티프로세서(Chip MultiProcessor, CMP)일 수 있다. 다른 실시예는 요구된 바와 같이 두 개 또는 그 이상의 개별 집적 회로로서 노드(12A-12B)를 구현할 수 있다. 어떤한 레벨의 집적 및 개별 컴포넌트들이 사용될 수 있다.
일반적으로, 프로세서 코어(18A-18D)는 소정의 명령 세트 구조에서 정의된 명령들을 실행하기 위해 설계된 회로를 포함할 수 있다. 즉, 프로세서 코어 회로는 명령 세트 구조 내에서 정의된 명령들의 결과를 가져오고(fetch), 디코딩(decodign)하고, 실행하고, 그리고 저장하도록 구성될 수 있다. 프로세서 코어(18A-18D)는 수퍼파이프라인(superpipelined), 스퍼스칼라(superscalar), 또는 그것들의 조합을 포함하는, 어떤 요구된 구성을 포함할 수 있다. 다른 구성은 스칼라(scalar), 파이프라인(pipelined), 비-파이프라인(non-pipelined) 등을 포함할 수 있다. 다양한 실시예들이 비순서적 추론 실행(out of orde speculative execution) 또는 순서적 실행을 사용할 수 있다. 프로세서 코어는, 상기 구성들 중 어느 하나와 함께, 하나 또는 그 이상의 명령들 또는 다른 기능들에 대한 마이크로코딩(microcoding)을 포함할 수 있다. 다양한 실시예들이 캐시, 변환 색인 버퍼(Translation Lookaside Buffers, TLBs) 등과 같은 다양한 다른 디자인 특성을 구현할 수 있다. CMP 실시예에서, 소정의 노드(12A-12B) 내의 프로세서 코어는 CMP 내에 포함된 회로를 포함할 수 있다. 다른 실시예에서, 프로세서 코어(18A-18D)는 각각 별개의 집적 회로를 포함할 수 있다.
상기 설명된 바와 같이, 프로세서 코어(18A-18D)는 명령 실행 동안 저장 동 작을 수행하도록 구성될 수 있다. 다양한 실시예에서, 저장 동작은 명시적 저장 명령의 결과일 수 있고, 목적지로서 메모리 오퍼랜드(operand)를 갖는 다른 명령에서는 암시적일 수 있으며, 또는 양쪽 모두일 수 있다. 일반적으로, 저장 동작은 저장 동작과 관련된 어드레스에 의해 특정된 메모리 위치에서의 하나 또는 그 이상의 바이트들의 업데이트일 수 있다.
어서팅되고, 디어서팅(deasserting)되고, 발생되는 등의 다양한 신호들이 앞서 설명되었다. 일반적으로, 신호는 소스에 의해 수신기로 전송되는 어떠한 표시일 수 있다. 신호는 예를 들어 어서팅 또는 디어서팅 될 수 있는 하나 또는 그 이상의 신호 라인들을 포함할 수 있다.
주의할 것으로, 본 실시예가 노드들 사이에서의 통신 및 노드와 주변 장치 사이에서의 통신을 위해 HT 인터페이스를 사용하는 반면, 다른 실시예는 앞서의 통신 중 어느 하나를 위한 어떤 요구된 인터페이스 또는 인터페이스들을 사용할 수 있다. 예를 들어, 다른 패킷 기반의 인터페이스가 사용될 수 있고, 버스 인터페이스가 사용될 수 있고, 다양한 표준 주변 인터페이스가 사용될 수 있는 등등이다(예를 들어, 주변 컴포넌트 상호연결(Peripheral Component Interconnect, PCI), PCI 익스프레스(express) 등).
주의할 것으로, 도 1에 도시된 컴퓨터 시스템(10)은 두 개의 노드(12A-12B)를 포함하는 반면, 다른 실시예들은 하나의 노드 또는 두 개의 노드보다 많은 노드를 구현할 수 있다. 마찬가지로, 각 노드(12A-12B)는 다양한 실시예에서 두 개 또는 그 이상의 프로세서 코어들을 포함할 수 있다. 어떤 실시예에서, 노드 안의 각 각의 프로세서 코어 내의 모니터 유닛(26)은 동일한 노드 안의 각각 다른 프로세서 코어로부터의 모니터링된 캐시 라인들의 어드레스를 수신하도록 구성될 수 있고, 그리고 모니터링 되는 캐시 라인들 각각에 대한 저장 동작에 대해 모니터링 하도록 구성될 수 있다. 다른 실시예에서, 각각 다른 모니터링된 캐시 라인들에 대한 저장 동작을 탐지하기 위해 프로세서 코어들의 서브세트(subset)는 식별될 수 있고 구성될 수 있다. 컴퓨터 시스템(10)의 다양한 실시예들은 노드(12A-12B) 당 다른 수의 HT 인터페이스를 포함할 수 있고, 하나 또는 그 이상의 노드들 등등에 연결된 다른 수의 주변 장치들을 포함할 수 있다.
도 2-4는 다양한 명령들을 실행하기 위해 프로세서 코어(18A-18D)의 일 실시예의 동작을 나타내는 순서도이고, 그리고 도 5는 프로세서 코어(18A-18D)의 일 실시예의 예시적 상태를 나타내는 상태 머신도이다. 아래의 도 2-5의 설명에서, 프로세서 코어(18A)는 예로서 사용되지만, 프로세서 코어(18B-18D)는 유사하다. 도 2-4를 통해 도시된 각각의 명령에 대해서, 명령을 실행하는 프로세서 코어(18A-18D)는 도면의 간단함과 간결함을 위해 도 2-4에서 도시되지 않은 다른 동작(예를 들어 예외에 대한 점검 등)을 수행할 수 있다.
이제 도 2로 돌아가서, 모니터 명령을 실행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도가 도시된다. 프로세서 코어(18A)는 도 2에 도시된 동작을 수행하기 위해 마이크로코드(microcode) 및/또는 회로를 포함할 수 있다. 도 2에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직(combinatorial logic)에 의해 병렬로 수행될 수 있다. 다양한 실시예에서 요구되는 바와 같이 순서도에서 설명된 동작은 다수 클럭 싸이클(clock cycles)을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.
본 실시예에 있어서, 모니터링 되는 캐시 라인의 어드레스는 EAX 레지스터(또는 만약 AMD64TM 확장이 프로세서 코어(18A)에 의해 구현된다면, RAX 레지스터)내에 존재하도록 정의된다. 다른 실시예에서, 프로세서 코어(18A)는 모니터링 되는 캐시 라인의 어드레스를 발생시키기 위해 두 개 또는 그 이상의 오퍼랜드를 더 할 수 있다. 어떤 실시예서, 만약 보호되는 모드가 인에이블(enable) 된다면, EAX 레지스터의 콘테츠(contents)는 선형 어드레스를 위해 세그먼트(segment) 레지스터들 중 하나 내에 정의된 세그먼트 베이스 어드레스(segment base address)에 더해지는 오프셋(offset)이다. 다른 실시예에서, 세그먼트 베이스 어드레스는 제로(0)일 수 있고, 그리고 EAX 레지스터의 콘텐츠는 아마 선형 어드레스와 같다. 만약 페이징(paging)이 인에이블 된다면(결정 블록(40), "예" 레그(leg)), 어드레스는 페이징 매커니즘을 통해 물리적 어드레스로 변환되는 가상 어드레스(virtual address)(예를 들어, 선형 어드레스)(블록(42))이다. 물리적 어드레스는 모니터 유닛(26A)에 의해 모니터링되는 어드레스일 수 있다. 어느 경우에나, 프로세서 코어(18A)는, 모니터링 되는 어드레스를 모니터 유닛(26A) 내에서의 MAddr 레지스터(28A)에 라이팅 할 수 있다(블록(44)). 추가적으로, 프로세서 코어(18A)는 이 어 드레스를 다른 프로세서 코어(18B)에 전달할 수 있다(블록(46)). 다른 실시예에서, 프로세서 코어(18A)는 이 어드레스를 하나 이상의 다른 프로세서 코어에 전달할 수 있다. 프로세서 코어(18A)는 모니터 유닛(26A)를 또한 "아밍(arming)" 할 수 있다(블록(48)). 일반적으로, 모니터 유닛(26A)를 아밍하는 것은 모니터 명령이 실행되는 것을 (그리고 따라서 모니터링 되는 어드레스가 모니터 유닛(26A) 내에서 확립되는 것을) 표시하는 상태에 모니터 유닛(26A)을 놓는 것을 말할 수 있다. 아밍된 상태는, 아래에서 더 세부적으로 설명되는 바와 같이, MWait 명령에 대한 응답을 결정하는 데 사용될 수 있다.
도 3은 MWait 명령을 실행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도이다. 프로세서 코어(18A)는 도 3에 도시된 동작을 수행하기 위해 마이크로코드 및/또는 회로를 포함할 수 있다. 도 3에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직에 의해 병렬로 수행될 수 있다. 다양한 실시예에서 요구되는 바와 같이 순서도에서 설명된 동작은 다수 클럭 싸이클을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.
만약 모니터 유닛(26A)이 모니터 명령의 이전 실행을 통해 아밍된다면(그리고 캐시 라인에 대한 그 다음 업데이트의 탐지가 존재하지 않는다면--결정 블록(50), "예" 레그), 프로세서 코어(18A)는 이 실시예에서 수면(sleep) 상태로 들어갈 수 있다(블록(52)). 다른 실시예들에서 MWait 명령에 응답하여 다양한 상태로 들어갈 수 있다(예를 들어, 앞서 설명된 구현 의존성 최적화된 상태). 수면 상태는 파워 보존 상태일 수 있으며, 이 상태에서 프로세서 코어(18A)는 파워 소모를 감소시키려 한다. 어떤 실시예에서 프로세서 코어(18A)는 수면 상태에서 명령을 실행하는 것을 멈출 수 있다. 다양한 실시예에서, 수면 상태는 파워 소모를 감소시키기 위해 하나 또는 그 이상의 다음의 것들을 포함할 수 있다. 프로세서 코어(18A)가 동작하는 클럭 주파수를 감소시키는 것, 다양한 회로에 대한 클럭들을 게이팅(gating)하는 것, 클럭을 턴오프(turn off)하는 것, 위상 고정 루프 또는 다른 클럭 발생 회로를 턴오프하는 것, (모니터 유닛을 제외하고) 프로세서 코어를 파워 다운(power down)하는 것, 등. 수면 상태는 예를 들어 개인용 컴퓨터 시스템 내에서의 파워 관리의 다양한 실시예에서 사용되는 스톱 그랜트(stop grant) 상태들 중 어느 하나일 수 있다. 다른 실시예에서, 다른 상태들이 사용될 수 있다. 예를 들어, 만약 프로세서 코어(18A)가 멀티-스레딩(multi-threading) 설비들(facilties)을 구현한다면, 프로세서 코어(18A)는, 모니터링 되는 캐시 라인에 대한 업데이트가 탐지될 때까지 MWait 명령의 실행에 관한 또 다른 스레드를 실행하는 것으로 스위칭(switching) 할 수 있다.
만약 모니터 유닛(26A)이 아밍되지 않는다면(결정 블록(50), "아니오" 레그), 프로세스 코어(18A)는 MWait 명령에 관해 어떠한 행동을 취할 수 없고 그리고 MWait 명령의 다음에 오는 다음 명령과 함께 실행을 계속 할 수 있다. 모니터 유닛(26A)은, 만약 모니터 명령이 MWait 명령 이전에 실행되지 않는다면, (비록 다른 명령들이 모니터 명령과 MWait 명령 사이에서 실행될 수 있을지라도) 모니터 유 닛(26A)은 아밍될 수 없다. 추가적으로, 만약 모니터 명령이 이전에 실행된다면, 모니터 유닛(26A)은 아밍될 수 없으나, MWait 명령의 실행 전에, 모니터링된 캐시 라인의 업데이트는 탐지된다.
다음으로 도 4로 돌아가서, 저장 동작을 수행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도가 도시된다. 프로세서 코어(18A)는 도 4에 도시된 동작을 수행하기 위한 회로 및/또는 마이크로코드를 포함할 수 있다. 도 4에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직에 의해 병렬로 수행될 수 있다. 다양한 실시예에서, 요구되는 바와 같이, 순서도에서 설명된 동작은 다수 클럭 싸이클을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.
모니터 유닛(26A)은 저장 동작의 어드레스를 레지스터(28B)(MAddrS 어드레스를 저장하는 레지스터) 내의 어드레스에 비교한다. 만약 저장 어드레스가 MAddrS와 매칭(matching) 된다면(결정 블록(54), "예" 레그), 모니터 유닛(26A)은 프로세서 코어(18B)에 대한 Wakeup-ST 신호를 어서팅 할 수 있다(블록(56)). 어느 한 경우에나, 프로세서 코어(18A)는 메모리를 업데이트 함으로써 저장을 완료할 수 있다(블록(58)). 이 메모리는, 캐시를 구현한 프로세서 코어(18A)의 실시예에서, 캐시 내에서 업데이트될 수 있다. 추가적으로, 캐시 코히런시는 컴퓨터 시스템(10) 내에서 구현된 코히런시 프로토콜(protocol)에 따라 유지될 수 있다.
도 5는 모니터/MWait 명령의 구현에 관한 프로세서 코어(18A)의 예시적 상태 를 도시한 상태 머신도이다. 다른 목적의 다른 상태들이 프로세서 코어(18A)의 다양한 실시예에 의해 구현될 수 있다. 도 5에는 정상 상태(60), 아밍된 상태(62), 수면 상태(64)가 도시된다.
정상 상태(60)는 (모니터/MWait 명령에 대해 정의된 바와 같이) 명령들이 실행되고 있고 캐시 라인의 모니터링이 수행되고 있지 않은 프로세서 코어(18A)의 상태일 수 있다. 아밍된 상태(62)는 모니터 유닛(26A)이, (모니터 명령의 실행을 통해) 모니터링 되는 캐시 라인의 어드레스로 업데이트 되고 MWait 명령의 그 다음 실행을 기다리고 있는 상태일 수 있다. 수면 상태(64)는 상기 언급된 파워 보존 상태이다. 다른 상태들이 상기 언급된 바와 같이 다른 실시예에서 수면 상태(64) 대신에 사용될 수 있다.
만약 프로세서 코어(18A)가 정상 상태(60)에 있고 모니터 명령이 실행되고 있다면, 상태 머신은 아밍된 상태(62)로 전이한다. 아밍된 상태(62)에서, 만약 모니터링된 캐시 라인에 대한 무효화 프로브가 탐지된다면(WExit 어서팅 된다면), 또는 어서팅된 Wakeup-ST 신호가 모니터 유닛(26A)에 의해 수신된다면, 상태 머신은 다시 정상 상태(60)로 전이한다. 이 전이는 모니터링된 캐시 라인에 대한 업데이트가 MWait 명령이 수행되기 전에 일어나는 경우를 나타낸다. 다른 한편으로, 만약 MWait 명령이, 상태 머신이 아밍된 상태(62)에 있는 동안 실행된다면, 상태 머신은 수면 상태(64)로 전이한다. 상태 머신은, 모니터링된 캐시 라인에 대한 무효화 프로브(WExit), 모니터 유닛(26A)에 대한 Wakeup-ST 신호의 어서팅(Wakeup-ST), 또는 MWait 명령 및/또는 프로세서 코어 구현에 대해 정의된 어떤 다른 탈출(exit) 조 건(Other-Exit)을 탐지하는 것에 응답하여, 수면 상태(64)로부터 정상 상태(60)로 전이할 수 있다. 다른 탈출 조건은 실시예마다 변할 수 있지만, 프로세서 코어(18A)에 대한 외부 인터럽트의 전달, 프로세서 코어(18A)의 리세트(reset), 등을 포함할 수 있다.
도 6은 동일한 노드(12A) 내에 있는 프로세서 코어(예를 들어, 프로세서 코어(18B))가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어(18A)의 동작을 나타내는 예이다. 프로세서 코어(18A)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18A, 노드 12A" 아래에서 보여진다. 프로세서 코어(18B)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18B, 노드 12A" 아래에서 보여진다. 프로세서 코어(18A)는 모니터 명령을 실행하고, 모니터 유닛(26A)을 모니터링 하고 아밍하기 위한 캐시 라인의 어드레스 "A"를 확립한다. 그 다음으로 상기 코드는 어드레스 A에 대한 점검(도 6에서 "점검 [A]"로 표시됨)을 포함하다. 이 점검은 모니터링된 캐시 라인 내의 메모리 위치를 읽는 것과 이것을 요구된 상태에 비교하는 것을 포함한다. 만약 요구된 상태가 메모리 위치 내에 있다면, 점검은 MWait 명령 주위로 분기할 수 있고 그 이후의 프로세싱을 계속할 수 있다. 점검은 모니터 명령의 실행을 갖는 레이스 조건(race condition)에서 일어나는 캐시 라인에 대한 업데이트를 탐지할 수 있다. 예를 들어, 요구된 상태가 캐시 라인 내에 존재하지 않고 프로세서 코어(18A)는 MWait 명령을 실행한다. 따라서 프로세서 코어(18A)는 수면 상태(화살표(70))로 들어간다.
프로세서 코어(18B)는 어드레스 A에 대한 저장 동작을 실행하고 그리고 저장 동작의 어드레스가 프로세서 코어(18A)로부터의 섀도우된 모니터 어드레스(MAddrS)와 매칭하는 지를 (모니터 유닛(28B) 내에서) 탐지한다. 따라서, 프로세서 코어(18B)(그리고 더 특별하게는 모니터 유닛(28B))는 Wakeup-ST 신호를 어서팅 함으로써(화살표(72)) 프로세서 코어(18A)(그리고 더 특별하게는 모니터 유닛(26A))에 신호를 보낸다. 프로세서 코어(18A)는 어드레스 A를 다시 점검하고(도 6에서 점검[A]) 캐시 라인 내의 요구된 상태를 탐지한다. 따라서, 프로세서 코어(18A)는 다른 명령과 함께 실행을 계속한다.
도 7은, 또 다른 노드(12B) 내의 프로세서 코어(예를 들어, 프로세서 코어(18C))가 모니터링된 캐시 라인을 업데이트 하는 경우, 프로세서 코어(18A)의 동작을 나타내는 예이다. 프로세서 코어(18A)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18A, 노드 12A" 아래에서 보여진다. 프로세서 코어(18C)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18C, 노드 12B" 아래에서 보여진다. 추가적으로, 프로세서 코어(18C)와 프로세서 코어(18A) 사이의 통신의 전송은 도 7의 가운데에서 보여진다. 도 6의 예와 유사하게, 프로세서 코어(18A)는 모니터 명령을 실행하고, 모니터 유닛(26A)을 모니터링 하고 아밍하기 위해 캐시 라인의 어드레스 "A"를 확립하고, 어드레스 "A"를 점검하고, 그리고 MWait 명령을 실행한다. 따라서 프로세서 코어(18A)는 수면 상태에 들어간다(화살표(74)).
프로세서 코어(18C)는 어드레스 A에 대한 저장 명령을 실행한다. 본 실시예에서는, 프로세서 코어(18C)는 프로세서 코어(18A)에 의해 모니터링 되는 어드레스의 섀도우 카피를 가지지 않으며, 따라서 저장을 완료하기 위해 코히런시 동작의 정상 전송을 계속한다. 특히, 프로세서 코어(18C)는 노드(12B) 내의 브리지(20B)에 무효화 프로브를 전송한다(화살표(76)). 브리지(20B)는 그 다음에 노드(12A)에 이 모효화 프로브를 전송한다(그리고 브리지(20A) 내에 도착한다). 브리지(20A)는 그 다음에 프로세서 코어(18A)에 이 무효화 프로브를 전송하고, 프로세서 코어(18A)는 이 무효화 프로브의 어드레스가 레지스터(28A) 내의 어드레스와 매칭되는 지를 탐지한다. 따라서, 프로세서 코어(18A)는 수면 상태에서 나온다(화살표(78)). 프로세서 코어(18A)는 어드레스 A를 다시 점검하고(도 7에서 점점[A]), 그리고 캐시 라인 내의 요구된 상태를 탐지한다. 따라서, 프로세서 코어(18A)는 다른 명령들을 갖는 실행을 계속한다.
여러 변형 및 수정이 앞서 개시된 내용을 충분히 이해했다면 본 발명의 기술 분야에서 숙련된 기술을 갖은 자들에게는 명백할 것이다. 다음의 특허청구범위는 이러한 모든 변형 및 수정을 포함하는 것으로 해석되도록 의도된 것이다.
본 발명은 일반적으로 프로세서 및 변화에 대한 캐시 라인의 모니터링에 응용가능하다.

Claims (11)

  1. 프로세서 코어(18A)에 있어서,
    제 1 명령에 응답하여 업데이트를 위한 어드레스 범위를 모니터링하도록 구성된 모니터 유닛(26A)을 포함하고, 여기서 상기 프로세서 코어(18A)는 상기 어드레스 범위에 대한 상기 업데이트를 기다리는 제 1 상태(64)에 들어가도록 구성되고, 그리고 상기 모니터 유닛(26A)은 상기 제 1 명령을 실행하는 것에 응답하여 상기 어드레스 범위를 식별하는 어드레스 범위 표시를 제 2 프로세서 코어(18B)에 전달하도록 구성되고, 그리고 상기 모니터 유닛(26A)은, 상기 제 2 프로세서 코어(18B)가 상기 어드레스 범위 내의 적어도 하나의 바이트를 업데이트하고 있는 것을 표시하는, 상기 제 2 프로세서 코어(18B)로부터의 신호(Wakeup-ST)를 수신하도록 구성되고, 상기 프로세서 코어(18A)는 상기 신호(Wakeup-ST)에 응답하여 상기 제 1 상태(64)에서 나오도록 구성되는 것을 특징으로 하는 프로세서 코어.
  2. 제 1 항에 있어서,
    상기 어드레스 범위 표시는 인접하는 메모리 바이트들의 블록을 식별하는 어드레스를 포함하는 것을 특징으로 하는 프로세서 코어.
  3. 제 1 항에 있어서,
    컴퓨터 시스템의 다른 컴포넌트들과 통신하기 위한 인터페이스(24C)를 더 가 지며, 그리고 상기 프로세서 코어(18A)는, 만약 상기 인터페이스(24C)로부터의 업데이트의 표시가 상기 어드레스 범위 내에서의 업데이트를 표시한다면, 상기 업데이트의 표시를 수신하는 것에 응답하여 상기 제 1 상태(64)에서 나오도록 더 구성되는 것을 특징으로 하는 프로세서 코어.
  4. 제 3 항에 있어서,
    상기 업데이트의 표시는 프로브인 것을 특징으로 하는 프로세서 코어.
  5. 제 1 항에 있어서,
    상기 모니터 유닛(26A)은 상기 제 2 프로세서 코어(18B)로부터 수신된 제 2 어드레스 범위 표시의 섀도우 카피를 저장하도록 더 구성되며, 여기서 상기 제 2 프로세서 코어(18B)는 상기 제 2 어드레스 범위 표시에 의해 표시된 제 2 어드레스 범위 내에서의 업데이트에 대해 모니터링 하는 것을 특징으로 하는 프로세서 코어.
  6. 제 5 항에 있어서,
    상기 모니터 유닛(26A)은, 상기 제 2 어드레스 범위 내에서의 적어도 하나의 바이트를 업데이트하는 제 2 저장 동작을 실행하는 상기 프로세서 코어(18A)에 응답하여, 상기 제 2 프로세서 코어(18B)에 신호를 보내도록 구성되는 것을 특징으로 하는 프로세서 코어.
  7. 제 1 항에 있어서,
    상기 제 1 상태는 파워 보존 상태를 포함하는 것을 특징으로 하는 프로세서 코어.
  8. 제 1항 내지 7항 중 어느 한 항에 따른 상기 프로세서 코어(18A)와; 그리고
    상기 어드레스 범위 표시를 수신하도록 연결되고 그리고, 상기 어드레스 범위 내에서 적어도 하나의 바이트를 업데이트하는 저장 동작을 실행하는 것에 응답하여, 상기 프로세서 코어(18A)에 신호를 보내도록 구성된 제 2 프로세서 코어(18B)를 포함하는 시스템.
  9. 제 1 프로세서 코어(18A)가 업데이트에 대해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위 표시를 상기 제 1 프로세서 코어(18A)로부터 제 2 프로세서 코어(18B)로 전달하는 단계와,
    여기서 상기 전달은 상기 제 1 프로세서 코어(18A)로 하여금 업데이트에 대한 상기 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하며;
    상기 제 2 프로세서 코어(18B)가 상기 어드레스 범위 내에서 적어도 하나의 바이트를 업데이트 하는 저장 동작을 실행하는 단계와;
    상기 저장 동작에 응답하여, 상기 제 1 프로세서 코어(18A)에 신호를 보내는 단계와; 그리고
    상기 신호에 응답하여, 상기 제 1 프로세서 코어(18A)가 상기 어드레스 범위 내에서 상기 업데이트를 기다리는 제 1 상태에서 나오는 단계를 포함하는 것을 특징으로 하는 방법.
  10. 제 9 항에 있어서,
    상기 제 1 프로세서 코어는 컴퓨터 시스템의 다른 컴포넌트들과 통신하기 위한 인터페이스에 연결되고, 상기 방법은 만약 상기 인터페이스로부터의 업데이트의 표시가 상기 어드레스 범위 내에서의 업데이트를 표시한다면, 상기 업데이트의 표시를 수신하는 것에 응답하여 상기 제 1 프로세서 코어가 상기 제 1 상태에서 나오는 것을 더 포함하는 것을 특징으로 하는 방법.
  11. 제 10 항에 있어서,
    상기 업데이트의 표시는 프로브인 것을 특징으로 하는 방법.
KR1020077007487A 2004-10-01 2005-09-21 다수 코어들을 가로질러 모니터링되는 캐시 라인 공유 KR101216190B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/956,685 US7257679B2 (en) 2004-10-01 2004-10-01 Sharing monitored cache lines across multiple cores
US10/956,685 2004-10-01

Publications (2)

Publication Number Publication Date
KR20070057906A KR20070057906A (ko) 2007-06-07
KR101216190B1 true KR101216190B1 (ko) 2012-12-28

Family

ID=35994769

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077007487A KR101216190B1 (ko) 2004-10-01 2005-09-21 다수 코어들을 가로질러 모니터링되는 캐시 라인 공유

Country Status (8)

Country Link
US (1) US7257679B2 (ko)
EP (1) EP1807754B1 (ko)
JP (1) JP4982375B2 (ko)
KR (1) KR101216190B1 (ko)
CN (1) CN101036116B (ko)
DE (1) DE602005020960D1 (ko)
TW (1) TWI366132B (ko)
WO (1) WO2006039162A2 (ko)

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7213093B2 (en) * 2003-06-27 2007-05-01 Intel Corporation Queued locks using monitor-memory wait
US7502948B2 (en) 2004-12-30 2009-03-10 Intel Corporation Method, system, and apparatus for selecting a maximum operation point based on number of active cores and performance level of each of the active cores
US7484053B2 (en) * 2005-05-16 2009-01-27 Texas Instruments Incorporated Cross-referencing cache line addresses with corresponding names
US7444474B2 (en) * 2005-05-16 2008-10-28 Texas Instruments Incorporated Determining the presence of a virtual address in a cache
US8281083B2 (en) 2005-06-30 2012-10-02 Intel Corporation Device, system and method of generating an execution instruction based on a memory-access instruction
US9003421B2 (en) * 2005-11-28 2015-04-07 Intel Corporation Acceleration threads on idle OS-visible thread execution units
US20070271450A1 (en) * 2006-05-17 2007-11-22 Doshi Kshitij A Method and system for enhanced thread synchronization and coordination
US8561037B2 (en) * 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US8122229B2 (en) * 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
US9015399B2 (en) * 2007-08-20 2015-04-21 Convey Computer Multiple data channel memory module architecture
US8095735B2 (en) * 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US8156307B2 (en) * 2007-08-20 2012-04-10 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US9336051B2 (en) * 2007-10-19 2016-05-10 National Instruments Corporation Programmable controller with multiple processors using a scanning architecture
US20090106755A1 (en) * 2007-10-19 2009-04-23 Sundeep Chandhoke Programmable Controller with Multiple Processors Using Scanning and Data Acquisition Architectures
US20090309243A1 (en) * 2008-06-11 2009-12-17 Nvidia Corporation Multi-core integrated circuits having asymmetric performance between cores
US20100115233A1 (en) * 2008-10-31 2010-05-06 Convey Computer Dynamically-selectable vector register partitioning
US8205066B2 (en) * 2008-10-31 2012-06-19 Convey Computer Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor
US8156275B2 (en) * 2009-05-13 2012-04-10 Apple Inc. Power managed lock optimization
US8364862B2 (en) * 2009-06-11 2013-01-29 Intel Corporation Delegating a poll operation to another device
US8423745B1 (en) 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
US8782451B2 (en) * 2010-12-22 2014-07-15 Via Technologies, Inc. Power state synchronization in a multi-core processor
US8637212B2 (en) 2010-12-22 2014-01-28 Via Technologies, Inc. Reticle set modification to produce multi-core dies
US9460038B2 (en) 2010-12-22 2016-10-04 Via Technologies, Inc. Multi-core microprocessor internal bypass bus
US8631256B2 (en) 2010-12-22 2014-01-14 Via Technologies, Inc. Distributed management of a shared power source to a multi-core microprocessor
US8635476B2 (en) * 2010-12-22 2014-01-21 Via Technologies, Inc. Decentralized power management distributed among multiple processor cores
US8972707B2 (en) 2010-12-22 2015-03-03 Via Technologies, Inc. Multi-core processor with core selectively disabled by kill instruction of system software and resettable only via external pin
TWI450084B (zh) * 2010-12-22 2014-08-21 Via Tech Inc 配置在多重處理器核心之間之分散式電源管理
US8930676B2 (en) 2010-12-22 2015-01-06 Via Technologies, Inc. Master core discovering enabled cores in microprocessor comprising plural multi-core dies
US8819349B2 (en) * 2011-07-08 2014-08-26 Facebook, Inc. Invoking operating system functionality without the use of system calls
US8713262B2 (en) * 2011-09-02 2014-04-29 Nvidia Corporation Managing a spinlock indicative of exclusive access to a system resource
US8868843B2 (en) 2011-11-30 2014-10-21 Advanced Micro Devices, Inc. Hardware filter for tracking block presence in large caches
CN106909444B (zh) 2011-12-22 2021-01-12 英特尔公司 用于指定应用线程性能状态的指令的指令处理装置及相关方法
US9396020B2 (en) 2012-03-30 2016-07-19 Intel Corporation Context switching mechanism for a processing core having a general purpose CPU core and a tightly coupled accelerator
US10430190B2 (en) 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US9218288B2 (en) * 2012-06-15 2015-12-22 International Business Machines Corporation Monitoring a value in storage without repeated storage access
US9507404B2 (en) 2013-08-28 2016-11-29 Via Technologies, Inc. Single core wakeup multi-core synchronization mechanism
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
JP6525267B2 (ja) * 2015-11-13 2019-06-05 Necプラットフォームズ株式会社 範囲外参照検出装置、方法およびプログラム
US10394678B2 (en) * 2016-12-29 2019-08-27 Intel Corporation Wait and poll instructions for monitoring a plurality of addresses
CN108009121B (zh) * 2017-12-21 2021-12-07 中国电子科技集团公司第四十七研究所 面向应用的动态多核配置方法
US11237960B2 (en) 2019-05-21 2022-02-01 Arm Limited Method and apparatus for asynchronous memory write-back in a data processing system
US11176042B2 (en) * 2019-05-21 2021-11-16 Arm Limited Method and apparatus for architectural cache transaction logging
US11553337B2 (en) 2019-12-10 2023-01-10 Winkk, Inc. Method and apparatus for encryption key exchange with enhanced security through opti-encryption channel
CN113157543B (zh) * 2021-05-14 2023-07-21 海光信息技术股份有限公司 一种可信度量方法及装置、服务器、计算机可读存储介质
US20220394023A1 (en) * 2021-06-04 2022-12-08 Winkk, Inc Encryption for one-way data stream

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2916421B2 (ja) * 1996-09-09 1999-07-05 株式会社東芝 キャッシュフラッシュ装置およびデータ処理方法
JPH10149285A (ja) * 1996-11-18 1998-06-02 Hitachi Ltd 命令実行制御方法および情報処理装置
US6493741B1 (en) 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6721856B1 (en) * 2000-10-26 2004-04-13 International Business Machines Corporation Enhanced cache management mechanism via an intelligent system bus monitor
US7363474B2 (en) * 2001-12-31 2008-04-22 Intel Corporation Method and apparatus for suspending execution of a thread until a specified memory access occurs
US7266587B2 (en) * 2002-05-15 2007-09-04 Broadcom Corporation System having interfaces, switch, and memory bridge for CC-NUMA operation

Also Published As

Publication number Publication date
CN101036116B (zh) 2010-08-11
TWI366132B (en) 2012-06-11
JP4982375B2 (ja) 2012-07-25
TW200627271A (en) 2006-08-01
US20060075060A1 (en) 2006-04-06
WO2006039162A3 (en) 2007-03-15
WO2006039162A2 (en) 2006-04-13
EP1807754A2 (en) 2007-07-18
CN101036116A (zh) 2007-09-12
DE602005020960D1 (de) 2010-06-10
KR20070057906A (ko) 2007-06-07
US7257679B2 (en) 2007-08-14
JP2008515096A (ja) 2008-05-08
EP1807754B1 (en) 2010-04-28

Similar Documents

Publication Publication Date Title
KR101216190B1 (ko) 다수 코어들을 가로질러 모니터링되는 캐시 라인 공유
US7627722B2 (en) Method for denying probes during proactive synchronization within a computer system
US12020031B2 (en) Methods, apparatus, and instructions for user-level thread suspension
CN111506534B (zh) 具有非阻塞高性能事务信用***的多核总线架构
KR101814412B1 (ko) 데이터 버퍼와 연관된 스누프 필터링의 제공
US6754859B2 (en) Computer processor read/alter/rewrite optimization cache invalidate signals
US20090037932A1 (en) Mechanism for broadcasting system management interrupts to other processors in a computer system
CN114756502A (zh) 片上原子事务引擎
EP1329804B1 (en) Mechanism for processing speculative LL and SC instructions in a pipelined processor
US9928115B2 (en) Hardware migration between dissimilar cores
CN115577402A (zh) 设备之间的安全直接对等存储器访问请求
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations
US7650483B2 (en) Execution of instructions within a data processing apparatus having a plurality of processing units

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
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: 20151118

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20191115

Year of fee payment: 8