KR20070057906A - Sharing monitored cache lines across multiple cores - Google Patents
Sharing monitored cache lines across multiple cores Download PDFInfo
- Publication number
- KR20070057906A KR20070057906A KR1020077007487A KR20077007487A KR20070057906A KR 20070057906 A KR20070057906 A KR 20070057906A KR 1020077007487 A KR1020077007487 A KR 1020077007487A KR 20077007487 A KR20077007487 A KR 20077007487A KR 20070057906 A KR20070057906 A KR 20070057906A
- Authority
- KR
- South Korea
- Prior art keywords
- processor core
- address range
- update
- address
- state
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30083—Power or thermal control instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
- G06F9/3891—Concurrent instruction execution, e.g. pipeline, 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
Abstract
Description
본 발명은 프로세서에 관한 것이고, 특히 변화에 대한 캐시 라인(cache lines)의 모티터링(monitoring)에 관한 것이다.TECHNICAL FIELD The present invention relates to processors, and in particular, to monitoring cache lines for changes.
많은 응용 프로그램이 다른 응용 프로그램과 상호작용하도록 라이팅(writing)된다. 추가적으로, 많은 응용 프로그램들이 멀티-스레드된(multi-threded) 응용으로서 라이팅된다. 멀티-스레드된 응용은 상대적으로 독립적으로 실행하도록 설계된 다수 코드 시퀀스(code sequences)(스레드(threads))를 갖는다. 이 스레드(또는 응용)는 다양한 방법으로 서로 통신할 수 있다. 간결함을 위해, 용어 "스레드"는 이 설명 내에서 멀티-스레드된 응용으로부터의 코드 시퀀스를 언급하거나 또는 만약 응용이 그 자체로 멀티-스레드되지 않았다면 전체로서 응용을 언급하기 위해 사용된다.Many applications are written to interact with other applications. In addition, many applications are written as multi-threded applications. Multi-threaded applications have multiple code sequences (threads) designed to execute relatively independently. These threads (or applications) can communicate with each other in a variety of ways. For brevity, the term "thread" is used within this description to refer to a code sequence from a multi-threaded application or to refer to an application as a whole if the application is not multi-threaded by itself.
메모리 위치는 종종 스레드들 사이에서 통신하기 위해 사용된다. 예를 들어, 메모리 위치는, 메모리의 더 커다란 영역에 대한 억세스(access)를 제어하고, 주변 장치와 같은 컴퓨터 시스템 내에서의 또 다른 리소스(resource)에 대한 억세스를 제어하고, 특별한 코드 시퀀스(종종 "임계 지역(critical section)"으로 언급됨)를 실행하는 능력을 제어하고, 기타 등등을 제어하는데 사용되는 세마포어(semaphore)를 저장하도록 정의될 수 있다. 상기 것들 중 어떤 것은 아래에서 보호되는 리소스로 언급된다. 일반적으로, 스레드는 세마포어에 억세스할 수 있고 그 상태를 점검할 수 있다. 만약 그 상태가, 보호되는 리소스를 스레드가 제어할 수 있다고 표시한다면, 이 스레드는 세마포어 상태를 바꾸어, 보호되는 리소스를 이 스레드가 제어한다고 표시할 수 있다. 만약에 그 상태가, 보호되는 리소스의 제어 내에 또 다른 스레드가 있다고 표시한다면, 이 스레드는 (예를 들어, 보호되는 리소스와 함께 종료되었다고 표시하도록 세마포어를 라이팅하는 다른 스레드에 의해) 그 상태가 바뀔 때까지 세마포어를 계속 점검할 수 있다. 메모리 위치는 또한 스레드들 사이에서 다른 메시지(message)들을 보내기 위해 (또는 메시지가 이용가능하다고 표시하기 위해) 사용될 수도 있다. 만약 소정의 스레드가 또 다른 스레드로부터의 메시지를 기다리고 있다면, 이 메시지가 이용가능하다고 표시하는 값으로 메모리 위치가 라이팅될 때까지 상기 소정의 스레드는 메모리 위치를 계속 점검할 수 있다. 다른 많은 예들이 존재하며, 여기서 스레드는 또 다른 스레드와 통신하기 위해 메모리 위치를 사용한다.Memory locations are often used to communicate between threads. For example, a memory location controls access to a larger area of memory, controls access to another resource within a computer system, such as a peripheral device, and may be a special code sequence (often Can be defined to store semaphores used to control the ability to execute " critical section " Some of these are referred to below as protected resources. In general, a thread can access a semaphore and check its status. If the state indicates that the thread can control the protected resource, this thread can change the semaphore state, indicating that this thread controls the protected resource. If the state indicates that there is another thread in the control of the protected resource, this thread will change its state (for example, by another thread writing a semaphore to indicate that it has terminated with the protected resource). You can keep checking the semaphore until The memory location may also be used to send other messages between threads (or to indicate that a message is available). If a thread is waiting for a message from another thread, the thread can continue to check the memory location until the memory location is written to a value indicating that the message is available. Many other examples exist, where a thread uses a memory location to communicate with another thread.
일반적으로, 스레드가 요구된 상태에 대한 메모리 위치를 점검하고 있고 그리고 메모리 위치 내의 요구된 상태를 찾지 못하는 경우, 스레드는 "스핀 루프(spin loop)"로 들어가고, 여기서 스레드는 요구된 상태에 대해 점검하면서 메모리 위치에 반복적으로 억세스한다. 메모리 위치가 결국 요구된 상태로 라이팅 될 때, 스레드는 스핀 루프에서 나올 수 있다. 스레드가 스핀 루프에 있는 동안, 스레 드는 실제로 유용한 일을 달성하지 못하고 있다. 그러나, 스레드를 실행하는 프로세서는 스핀 루프를 실행하는 파워(power)를 소비하고 있다.In general, if a thread is checking the memory location for the requested state and cannot find the required state in the memory location, the thread enters a "spin loop" where the thread checks for the requested state. Repeatedly accessing memory locations. When the memory location is eventually written to the required state, the thread can exit the spin loop. While the thread is in the spin loop, the thread is not really doing anything useful. However, the processor executing the thread is consuming the power to execute the spin loop.
어떤 명령 세트 구조는 프로세서가 이러한 상황들에 대해 최적화되도록 하는 명령들을 정의한다(만약 프로그래머가, 스핀 루프에서 그리고 스레드가 메모리 위치 내의 요구된 상태를 기다리는 다른 경우에 이 명령들을 사용한다면). 예를 들어, 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)을 통한 업데이트에 관해 통보받는다.Some instruction set structures define instructions that allow the processor to optimize for these situations (if the programmer uses these instructions in the spin loop and in other cases where the thread waits for the required state in a memory location). For example, the x86 instruction set (with Streaming Single instruction multiple data extensions 3, or SSE3) defines a MONITOR / MWAIT instruction pair. The MONITOR instruction can be used to establish an address range that the processor monitors for updates (eg, due to a store executed by another processor). The MWAIT instruction may be used to cause the processor to enter an "implementation dependent optimized state" while waiting for an update. The processor emerges in an implementation dependent optimization state in response to storage in the monitored address range (and also for some interrupts and for other reasons not related to the monitored address range). In general, a processor is informed about updates through normal coherency mechanisms implemented within the processor.
일 실시예로, 시스템은 제 1 프로세서 코어(processor core)와 제 2 프로세서 코어를 포함한다. 상기 제 1 프로세서 코어는 상기 제 1 프로세서 코어가 업데이트에 대해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위 표시를 전달하도록 구성된다. 상기 제 1 프로세서 코어는, 상기 제 1 프로세서 코어로 하여금 업데이트에 대해 상기 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하여 상기 어드레스 범위 표시를 전달하도록 구성된다. 상기 제 2 프로세서 코어는 상기 어드레스 범위 표시를 수신하도록 연결되고, 상기 어드레스 범위 내에서 적어도 하나의 바이트(byte)를 업데이트 하는 저장 동작을 실행하는 것에 응답하여, 상기 제 1 프로세서 코어에 신호를 보내도록 구성된다. 상기 제 1 프로세서 코어는 상기 제 2 프로세서 코어로부터의 상기 신호를 수신하도록 연결되고, 상기 신호에 응답하여 제 1 상태에서 나오도록 구성되며, 여기서 상기 제 1 상태는 상기 제 1 프로세서 코어가 상기 어드레스 범위에서의 업데이트를 기다리고 있는 상태이다.In one embodiment, the system includes a first processor core and a second processor core. The first processor core is configured to convey an address range indication that identifies the address range that the first processor core is monitoring for updates. The first processor core is configured to convey the address range indication in response to executing the first instruction defined by the first processor core to monitor the address range for an update. The second processor core is coupled to receive the address range indication, and in response to performing a store operation to update at least one byte within the address range, to signal the first processor core. It is composed. The first processor core is coupled to receive the signal from the second processor core and is configured to exit from a first state in response to the signal, wherein the first state is such that the first processor core is in the address range. Waiting for an update from.
또 다른 실시예로, 방법이 고려된다. 이 방법은 제 1 프로세서 코어가 업데이트에 대해 모니터링 하고 있는 어드레스 범위를 식별하는 어드레스 범위를 식별하는 어드레스 범위 표시를 상기 제 1 프로세서 코어로부터 제 2 프로세서 코어로 전달하는 단계와, 여기서 상기 전달은 상기 제 1 프로세서 코어가 업데이트에 대한 상기 어드레스 범위를 모니터링 하도록 정의된 제 1 명령을 실행하는 것에 응답하며; 상기 제 2 프로세서 코어 내의 상기 어드레스 범위 내에서 적어도 하나의 바이트를 업데이트 하는 저장 동작을 실행하는 단계와; 상기 저장 동작에 응답하여, 상기 제 1 프로세서 코어에 신호를 보내는 단계와; 그리고 상기 제 1 프로세서 코어에서의 제 1 상태에서 나오는 단계를 포함하며, 여기서 상기 제 1 프로세서 코어는 상기 신호를 보내는 것에 응답하여 상기 어드레스 범위 내에서 상기 업데이트를 기다리고 있다.In another embodiment, a method is contemplated. The method includes passing an address range indication from the first processor core to a second processor core identifying an address range that identifies an address range that a first processor core is monitoring for updates, wherein the forwarding is performed by the first processor core. One processor core is responsive to executing a first instruction defined to monitor the address range for updates; Executing a store operation to update at least one byte within the address range in the second processor core; In response to the storing operation, sending a signal to the first processor core; And exiting from a first state in the first processor core, where the first processor core is waiting for the update within the address range in response to sending the signal.
또 다른 실시예로, 모니터 유닛(monotor unit)을 포함하는 프로세서 코어가 고려된다. 상기 프로세서 코어는 제 1 명령에 응답하여 업데이트에 대한 어드레스 범위를 모니터링하도록 구성된다. 상기 프로세서 코어는 상기 어드레스 범위에 대한 상기 업데이트를 기다리기 위해 제 1 상태에 들어가도록 구성된다. 상기 모니터 유닛은 상기 제 1 명령을 실행하는 것에 응답하여 상기 어드레스 범위를 식별하는 어드레스 범위 표시를 제 2 프로세서 코어에 전달하도록 구성되고, 그리고 상기 제 2 프로세서 코어가 상기 어드레스 범위에서의 적어도 하나의 바이트를 업데이트하고 있다는 것을 표시하는 상기 제 2 프로세서 코어로부터의 신호를 수신하도록 구성된다. 상기 프로세서 코어는 상기 신호에 응답하여 상기 제 1 상태에서 나오도록 구성된다.In another embodiment, a processor core that includes a monitor unit is contemplated. The processor core is configured to monitor the address range for the update in response to the first instruction. The processor core is configured to enter a first state to wait for the update to the address range. The monitor unit is configured to deliver an address range indication to a second processor core in response to executing the first command, the second processor core being at least one byte in the address range. And receive a signal from the second processor core indicating that it is updating. The processor core is configured to exit the first state in response to the signal.
다음의 세부적인 설명은 첨부되는 도면을 참조하며, 이 도면은 이제 간단히 설명된다. The following detailed description refers to the accompanying drawings, which are now briefly described.
도 1은 복수의 프로세서 코어를 포함하는 컴퓨터 시스템의 일 실시예의 블록도이다.1 is a block diagram of one embodiment of a computer system including a plurality of processor cores.
도 2는 모니터 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.2 is a flowchart illustrating operation of one embodiment of a processor core during execution of a monitor instruction.
도 3은 MWait 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.3 is a flowchart illustrating operation of one embodiment of a processor core during execution of an MWait instruction.
도 4는 저장 명령의 실행 동안 프로세서 코어의 일 실시예의 동작을 나타낸 순서도이다.4 is a flow diagram illustrating operation of one embodiment of a processor core during execution of a store instruction.
도 5는 캐시 라인의 업데이트를 기다리는 동안 낮은 파워 상태에 들어가기 위한 프로세서 코어의 일 실시예의 동작을 나타내는 상태 머신도이다.5 is a state machine diagram illustrating the operation of one embodiment of a processor core to enter a low power state while waiting for an update of a cache line.
도 6은 동일한 노드에서의 프로세서 코어가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어의 일 실시예의 동작을 나타내는 예이다.6 is an example illustrating operation of one embodiment of a processor core when the processor core in the same node updates the monitored cache line.
도 7은 또 다른 노드에서의 프로세서 코어가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어의 일 실시예의 동작을 나타내는 예이다.7 is an example illustrating operation of one embodiment of a processor core when the processor core at another node updates the monitored cache line.
본 발명의 다양한 수정과 대안적 형태가 가능하지만, 그 특정 실시예들은 도면에서 예로서 도시되며, 그리고 본원에서 세부적으로 설명된다. 그러나, 이것에 대한 도면과 세부적 설명은 본 발명을 개시되는 특별한 형태에 한정하려는 것이 아니고, 그 반대로 본 발명은 첨부되는 특허청구범위에 의해 정해지는 바와 같이 본 발명의 사상과 범위 내에 있는 모든 수정물, 등가물 및 대안적인 것을 포괄하는 것을 의도한다는 것을 이해해야한다.While various modifications and alternative forms of the invention are possible, specific embodiments thereof are shown by way of example in the drawings and are described in detail herein. However, the drawings and detailed description thereof are not intended to limit the invention to the particular forms disclosed, and on the contrary, the invention is contemplated by all modifications that fall within the spirit and scope of the invention as defined by the appended claims. It should be understood that the intention is to cover equivalents, alternatives, and alternatives.
x86 명령 세트 구조(MONITOR 및 MWAT 명령들을 정의하는 적어도 SSE3 확장(extensions)을 포함하며, AMD64TM 확장 또는 어떤 다른 확장과 같은 다른 확장을 포함할 수 있음)를 구현하는 프로세서 코어를 포함하는 예시적 실시예들이 아래에서 설명된다. 다른 실시예들은 어떤 명령 세트 구조를 구현할 수 있고, 그리고 모 니터링 되는 어드레스 범위(예를 들어, 캐시 라인, 또는 다른 어떤 어드레스 범위)를 확립하도록 정의되고 그리고 프로세서 코어로 하여금 모니터링 되는 어드레스 범위 내에서 적어도 하나의 바이트에 대한 업데이트를 기다리는 상태에 들어가도록 정의된 하나 또는 그 이상의 명령들을 포함할 수 있다. 즉, 명령 또는 명령들을 실행하는 것에 응답하여, 프로세서 코어는 어드레스 범위를 모니터링 할 수 있고 모니터링되는 어드레스 범위 내에서의 업데이트를 기다리는 상태로 들어갈 수 있다. MONITOR 및 MWAIT 명령들은 이러한 명령들의 예로서 사용된다. 명세서에서의 편리함을 위해, MONITOR 명령은 모니터 명령으로 언급되며(대문자가 아님) 그리고 MWAIT는 MWait 명령으로 언급된다(단지 M과 W만 대문자임).Example implementation that includes a processor core that implements an x86 instruction set structure (including at least SSE3 extensions defining MONITOR and MWAT instructions, and may include other extensions such as AMD64 ™ extensions or any other extension) Examples are described below. Other embodiments may implement some instruction set structure, and are defined to establish a monitored address range (eg, cache line, or any other address range) and allow the processor core to at least within the monitored address range. It may include one or more instructions defined to enter a state waiting for an update for one byte. That is, in response to executing the instruction or instructions, the processor core may monitor the address range and enter a state waiting for an update within the monitored address range. The MONITOR and MWAIT instructions are used as examples of these instructions. For convenience in the specification, the MONITOR command is referred to as the monitor command (not in uppercase) and MWAIT is referred to as the MWait command (only M and W are uppercase).
이제 도 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)에 연결된다.Turning now to FIG. 1, shown is a block diagram of one embodiment of a
프로세서 코어(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)에 연결된다.Additional details of one embodiment of processor cores 18A-18B are shown in FIG. 1. Processor cores 18C-18D may be similar. In the illustrated embodiment, processor core 18A includes a monitor unit 26A that includes
프로세서 코어들(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 명령의 실행을 통해 들어간 상태에서 (만약 그 상태에 여전히 있다면) 나올 수 있다. 어떤 실시예에서, 모니터링 되는 어드레스 범위에 저장 동작의 탐지 신호를 보내는 수신하는 프로세서 코어는, 정상 통신 인터페이스를 통한 코히런시 통신의 전송을 통해 일어날 수 있는 것보다 더 빠르게 모니터링 프로세서 코어가 상기 상태에서 나올 수 있게 할 수 있다.Each of the processor cores 18A-18D may be configured to monitor an address range in response to executing a monitor command. In addition, the monitoring processor cores 18A-18D may pass an address range indication to at least one other process core 18A-18D (“receiving processor core”) that identifies the address range being monitored. For example, in the illustrated embodiment, the monitoring processor cores 18A-18D may pass address range indications to other processor cores 18A-18D at the same nodes 12A-12B. That is, processor core 18A may pass its address range indication to processor core 18B (or vice versa), and processor core 18C may pass its address range indication to
일반적으로, 어드레스 범위 표시는 모니터링 되는 어드레스 범위를 정의하는 어떠한 값 또는 값들이 될 수 있다. 예를 들어, 어드레스 범위는 메모리 내의 인접 하는 바이트들의 블록에 대응할 수 있다. 만약 블록의 크기가 고정되어 있다면(예를 들어 캐시 라인, 또는 고정된 수의 캐시 라인, 또는 캐시 라인의 부분), 블록의 베이스 어드레스(base address)가 사용될 수 있다. 마찬가지로, 만약 크기가 변할 수 있지만 프로세서 코어들(18A-18D) 각각이 동일한 크기로 프로그래밍 된다면, 베이스 어드레스가 사용될 수 있다. 다른 실시예에서, 베이스 어드레스 및 크기 또는 베이스 어드레스 및 엔딩 어드레스(ending address)는 어드레스 범위를 식별할 수 있다. 이 설명의 나머지 부분에 대해서, 캐시 라인이 어드레스 범위의 크기이고 그리고 캐시 라인의 베이스 어드레스가 어드레스 범위 표시로서 사용되는 실시예가 예로서 사용된다. 그러나, 다른 실시예들은 어떠한 사이즈 어드레스 범위 및 어떠한 대응하는 어드레스 범위 표시를 사용할 수 있다.In general, the address range indication can be any value or values that define the address range being monitored. For example, the address range may correspond to a block of contiguous bytes in the memory. If the size of the block is fixed (e.g., a cache line, or a fixed number of cache lines, or portions of the cache line), the base address of the block can be used. Likewise, if the size may vary but each of the processor cores 18A-18D is programmed to the same size, the base address may be used. In other embodiments, the base address and size or base address and ending address may identify the address range. For the remainder of this description, an embodiment where the cache line is the size of the address range and the base address of the cache line is used as the address range indication is used as an example. However, other embodiments may use any size address range and any corresponding address range indication.
프로세서 코어(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)를 수신하지 않는 것을 확실하게 할 수 있다(그 다음으로 이것은 무효화 프로브를 야기하지 않고 이후에 업데이트 할 수 있다).It is shown in more detail in FIG. 1 so that processor cores 18A-18B include monitor units 26A- 26B. The operation of monitor unit 26A (and its
만약 매치(match)가 비교기(30A)에 의해 탐지된다면, 모니터 유닛(26A)은 프 로세서 코어(18A)로 하여금 (예를 들어, 도 1에서의 WMait 신호의 어서팅을 통해) MWait 명령에 응답하여 들어간 상태에서 나오게 한다. 프로세서 코어(18A)는 MWait 명령의 다음에 오는 명령들을 계속 실행할 수 있다. 소프트웨어는 모니터링 되는 캐시 라인 안에서의 값을 점검하기 위해 MWait 명령의 다음에 오는 명령들을 포함할 수 있고, 만약 요구된 상태가 발견되지 않으면, 모니터 명령/MWait 명령으로 다시 분기하여 상기 상태에 다시 들어간다.If a match is detected by the
모니터 유닛(26A)은 또한 모니터링 되는 캐시 라인의 어드레스를 모니터 유닛(26B)에 전달한다. 예시된 실시예에서, 모니터 유닛(26A)은 레지스터(28A)로부터의 어드레스를 모니터 유닛(26B)에 직접 출력할 수 있다. 다른 실시예에서, 어드레스는 다른 방식으로 전달될 수 있다. 예를 들어, 어드레스는 인터페이스를 통해 브리지(20A)에 전송될 수 있고(예를 들어, 어드레스가 모니터링되는 어드레스라는 것을 표시하도록 코드화된 통신으로서) 그리고 브리지(20A)는 프로세서 코어(18B)에 대한 통신을 라우팅(routing) 할 수 있다.Monitor unit 26A also conveys the address of the cache line to be monitored to monitor unit 26B. In the illustrated embodiment, monitor unit 26A may directly output an address from
유사한 방식으로, 모니터 유닛(26A)은 모니터 유닛(26B)에 의해 모니터링 되는 어드레스를 수신할 수 있다. 예시된 실시예에서, 모니터 유닛(26A)은 모니터 유닛(26B)으로부터 모니터링된 어드레스(도 1에서 MAddrS)의 섀도우 카피(shadow copy)를 저장하도록 레지스터(26B)를 포함한다. 모니터 유닛(26A)은 프로세서 코어(18A)에 의해 수행된 저장 동작의 어드레스(도 1에서 StAddr)와 MAddrS를 비교한다. 만약 MAddrS 어드레스에 의해 표시된 캐시 라인에 대한 저장이 탐지된다면(비교기 30B), 모니터 유닛(26A)은 모니터 유닛(26B)에 대한 Wakeup-ST 신호를 어서팅 할 수 있다. 다른 실시예에서, 모니터 유닛(26B)은 레지스터(28C)의 출력을 모니터 유닛(26A)에 계속 공급할 수 있고, 그리고 레지스터(28B)는 이러한 실시예에서 구현될 수 없다.In a similar manner, monitor unit 26A can receive an address monitored by monitor unit 26B. In the illustrated embodiment, monitor unit 26A includes a register 26B to store a shadow copy of the monitored address (MAddrS in FIG. 1) from monitor unit 26B. The monitor unit 26A compares the address of the storage operation performed by the processor core 18A (StAddr in FIG. 1) with MAddrS. If storage for the cache line indicated by the MAddrS address is detected (
모니터 유닛(26B)은 모니터 유닛(26A)에 대한 Wakeup-ST 신호를 유사하게 발생시킬 수 있다. 모니터 유닛(26B)으로부터 어서팅된 Wakeup-ST 신호를 수신하는 것에 응답하여, 모니터 유닛(26A)은 MWait 명령에 응답하여 들어간 상태에서 나오도록 구성되며, 이것은 캐시 라인에 대한 무효화 프로브를 탐지하는 것과 유사하다.The monitor unit 26B can similarly generate a Wakeup-ST signal for the monitor unit 26A. In response to receiving the asserted Wakeup-ST signal from the monitor unit 26B, the monitor unit 26A is configured to exit in response to the MWait command, which is equivalent to detecting an invalidation probe for the cache line. similar.
일반적으로, 프로세서 코어(18A)는 컴퓨터 시스템(10)의 다른 컴포넌트들(예를 들어, 주변 장치(16A-16B), 모니터링된 어드레스의 섀도우 카피 및 Wakeup-ST 신호의 상기 언급된 프로세서 코어(18B)와의 통신을 제외하고서의 프로세서 코어(18B-18D), 메모리 제어기(22A-22B), 등)과 통신하기 위해 브리지(20A)에 대한 인터페이스를 사용할 수 있다. 이 인터페이스는 어떤 요구된 방식으로 설계될 수 있다. 캐시 코히런트(cache coherent) 통신은 상기 언급된 바와 같이, 인터페이스를 위해 정의될 수 있다. 일 실시예에서, 브리지(20A)와 프로세서 코어(18A-18B) 사이의 인터페이스 상에서의 통신은 HT 인터페이스 상에 사용된 것과 유사한 패킷(packet)들의 형태일 수 있다. 다른 실시예에서는, 어떤 요구된 통신이 사용될 수 있다(예를 들어, 버스 인터페이스 상에서의 트랜잭션(transaction)). 다른 실시예에서, 프로세서 코어(18A-18B)는 브리지(20A)에 대한 인터페이스를 공유할 수 있다(예를 들어 공유된 버스 인터페이스).In general, processor core 18A may be configured with other components of computer system 10 (eg,
브리지(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)에 관하여 유사할 수 있다.The bridge 20A is generally configured to receive communications from the processor cores 18A-18B and the
메모리(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)하기 위해 요구 큐들을 포함할 수 있다.Memory 14A-14B may include a suitable memory device. For example, the memory 14A-14B includes one or more Rambus DRAMs (RDARMs) synchronous DRAMs, Double Data Rate (DDR) SDRAMs, static RAMs, and the like. can do. The address space of
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)에 대한 비-코히런트 링크들을 통해 연결된다.The
주변 장치(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)를 구현할 수 있다. 어떤한 레벨의 집적 및 개별 컴포넌트들이 사용될 수 있다.In one embodiment, each of the nodes 12A-12B may be a single integrated circuit chip that includes the circuitry shown in FIG. 1 herein. That is, each node 12A-12B may be a chip multiprocessor (CMP). Other embodiments may implement nodes 12A-12B as two or more separate integrated circuits as required. Any level of integration and discrete components can be used.
일반적으로, 프로세서 코어(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)는 각각 별개의 집적 회로를 포함할 수 있다.In general, processor cores 18A-18D may include circuitry designed to execute instructions defined in a given instruction set structure. In other words, the processor core circuitry may be configured to fetch, decode, execute, and store the results of the instructions defined within the instruction set structure. Processor cores 18A-18D may include any desired configuration, including superpipelined, superscalar, or a combination thereof. Other configurations may include scalars, pipelined, non-pipelined, and the like. Various embodiments may use out of orde speculative execution or sequential execution. The processor core, together with any of the above configurations, may include microcoding for one or more instructions or other functions. Various embodiments may implement various other design features, such as caches, Translation Lookaside Buffers (TLBs), and the like. In a CMP embodiment, the processor cores within a given node 12A-12B may include circuitry contained within the CMP. In other embodiments, processor cores 18A-18D may each include separate integrated circuits.
상기 설명된 바와 같이, 프로세서 코어(18A-18D)는 명령 실행 동안 저장 동 작을 수행하도록 구성될 수 있다. 다양한 실시예에서, 저장 동작은 명시적 저장 명령의 결과일 수 있고, 목적지로서 메모리 오퍼랜드(operand)를 갖는 다른 명령에서는 암시적일 수 있으며, 또는 양쪽 모두일 수 있다. 일반적으로, 저장 동작은 저장 동작과 관련된 어드레스에 의해 특정된 메모리 위치에서의 하나 또는 그 이상의 바이트들의 업데이트일 수 있다.As described above, processor cores 18A-18D may be configured to perform a storage operation during instruction execution. In various embodiments, the store operation may be the result of an explicit store instruction, may be implicit in other instructions having a memory operand as a destination, or both. In general, the storage operation may be an update of one or more bytes at a memory location specified by an address associated with the storage operation.
어서팅되고, 디어서팅(deasserting)되고, 발생되는 등의 다양한 신호들이 앞서 설명되었다. 일반적으로, 신호는 소스에 의해 수신기로 전송되는 어떠한 표시일 수 있다. 신호는 예를 들어 어서팅 또는 디어서팅 될 수 있는 하나 또는 그 이상의 신호 라인들을 포함할 수 있다.Various signals such as being asserted, deasserted, generated, and the like have been described above. In general, the signal may be any indication transmitted by the source to the receiver. The signal may include one or more signal lines that may be asserted or deasserted, for example.
주의할 것으로, 본 실시예가 노드들 사이에서의 통신 및 노드와 주변 장치 사이에서의 통신을 위해 HT 인터페이스를 사용하는 반면, 다른 실시예는 앞서의 통신 중 어느 하나를 위한 어떤 요구된 인터페이스 또는 인터페이스들을 사용할 수 있다. 예를 들어, 다른 패킷 기반의 인터페이스가 사용될 수 있고, 버스 인터페이스가 사용될 수 있고, 다양한 표준 주변 인터페이스가 사용될 수 있는 등등이다(예를 들어, 주변 컴포넌트 상호연결(Peripheral Component Interconnect, PCI), PCI 익스프레스(express) 등).It should be noted that while the present embodiment uses the HT interface for communication between nodes and for communication between nodes and peripheral devices, other embodiments use any required interface or interfaces for any of the foregoing communications. Can be used. For example, other packet-based interfaces may be used, bus interfaces may be used, various standard peripheral interfaces may be used (eg, Peripheral Component Interconnect (PCI), PCI Express), and the like. (express) and so on).
주의할 것으로, 도 1에 도시된 컴퓨터 시스템(10)은 두 개의 노드(12A-12B)를 포함하는 반면, 다른 실시예들은 하나의 노드 또는 두 개의 노드보다 많은 노드를 구현할 수 있다. 마찬가지로, 각 노드(12A-12B)는 다양한 실시예에서 두 개 또는 그 이상의 프로세서 코어들을 포함할 수 있다. 어떤 실시예에서, 노드 안의 각 각의 프로세서 코어 내의 모니터 유닛(26)은 동일한 노드 안의 각각 다른 프로세서 코어로부터의 모니터링된 캐시 라인들의 어드레스를 수신하도록 구성될 수 있고, 그리고 모니터링 되는 캐시 라인들 각각에 대한 저장 동작에 대해 모니터링 하도록 구성될 수 있다. 다른 실시예에서, 각각 다른 모니터링된 캐시 라인들에 대한 저장 동작을 탐지하기 위해 프로세서 코어들의 서브세트(subset)는 식별될 수 있고 구성될 수 있다. 컴퓨터 시스템(10)의 다양한 실시예들은 노드(12A-12B) 당 다른 수의 HT 인터페이스를 포함할 수 있고, 하나 또는 그 이상의 노드들 등등에 연결된 다른 수의 주변 장치들을 포함할 수 있다.Note that
도 2-4는 다양한 명령들을 실행하기 위해 프로세서 코어(18A-18D)의 일 실시예의 동작을 나타내는 순서도이고, 그리고 도 5는 프로세서 코어(18A-18D)의 일 실시예의 예시적 상태를 나타내는 상태 머신도이다. 아래의 도 2-5의 설명에서, 프로세서 코어(18A)는 예로서 사용되지만, 프로세서 코어(18B-18D)는 유사하다. 도 2-4를 통해 도시된 각각의 명령에 대해서, 명령을 실행하는 프로세서 코어(18A-18D)는 도면의 간단함과 간결함을 위해 도 2-4에서 도시되지 않은 다른 동작(예를 들어 예외에 대한 점검 등)을 수행할 수 있다.2-4 are flowcharts illustrating the operation of one embodiment of processor cores 18A-18D to execute various instructions, and FIG. 5 is a state machine representing an exemplary state of one embodiment of processor cores 18A-18D. It is also. In the description of FIGS. 2-5 below, processor core 18A is used as an example, but processor cores 18B-18D are similar. For each instruction shown through FIGS. 2-4, the processor cores 18A-18D executing the instruction may be modified to other operations (e.g., exceptions) not shown in FIGS. Checks, etc.).
이제 도 2로 돌아가서, 모니터 명령을 실행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도가 도시된다. 프로세서 코어(18A)는 도 2에 도시된 동작을 수행하기 위해 마이크로코드(microcode) 및/또는 회로를 포함할 수 있다. 도 2에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직(combinatorial logic)에 의해 병렬로 수행될 수 있다. 다양한 실시예에서 요구되는 바와 같이 순서도에서 설명된 동작은 다수 클럭 싸이클(clock cycles)을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.Turning now to FIG. 2, a flow chart illustrating the operation of one embodiment of processor core 18A for executing monitor instructions is shown. Processor core 18A may include microcode and / or circuitry to perform the operations shown in FIG. 2. Although the blocks shown in FIG. 2 are shown in a particular order to facilitate understanding, any order may be used. Moreover, the blocks may be performed in parallel by combinatorial logic in processor core 18A. As required in various embodiments, the operations described in the flowcharts can be pipelined through multiple clock cycles and / or blocks can be pipelined through multiple 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 명령에 대한 응답을 결정하는 데 사용될 수 있다.In this embodiment, the address of the cache line to be monitored is defined to be in the EAX register (or RAX register if AMD64 ™ extension is implemented by processor core 18A). In other embodiments, processor core 18A may add two or more operands to generate the address of the cache line being monitored. In some embodiments, if the protected mode is enabled, the contents of the EAX register are added to the segment base address defined in one of the segment registers for a linear address. Offset. In another embodiment, the segment base address can be zero, and the content of the EAX register is probably the same as the linear address. If paging is enabled (
도 3은 MWait 명령을 실행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도이다. 프로세서 코어(18A)는 도 3에 도시된 동작을 수행하기 위해 마이크로코드 및/또는 회로를 포함할 수 있다. 도 3에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직에 의해 병렬로 수행될 수 있다. 다양한 실시예에서 요구되는 바와 같이 순서도에서 설명된 동작은 다수 클럭 싸이클을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.3 is a flow chart illustrating the operation of one embodiment of processor core 18A for executing MWait instructions. Processor core 18A may include microcode and / or circuitry to perform the operations shown in FIG. 3. Although the blocks shown in FIG. 3 are shown in a particular order for ease of understanding, any order may be used. Moreover, the blocks may be performed in parallel by combinatorial logic in processor core 18A. As required in various embodiments, the operations described in the flowcharts can be pipelined through multiple clock cycles and / or blocks can be pipelined through multiple clock cycles.
만약 모니터 유닛(26A)이 모니터 명령의 이전 실행을 통해 아밍된다면(그리고 캐시 라인에 대한 그 다음 업데이트의 탐지가 존재하지 않는다면--결정 블록(50), "예" 레그), 프로세서 코어(18A)는 이 실시예에서 수면(sleep) 상태로 들어갈 수 있다(블록(52)). 다른 실시예들에서 MWait 명령에 응답하여 다양한 상태로 들어갈 수 있다(예를 들어, 앞서 설명된 구현 의존성 최적화된 상태). 수면 상태는 파워 보존 상태일 수 있으며, 이 상태에서 프로세서 코어(18A)는 파워 소모를 감소시키려 한다. 어떤 실시예에서 프로세서 코어(18A)는 수면 상태에서 명령을 실행하는 것을 멈출 수 있다. 다양한 실시예에서, 수면 상태는 파워 소모를 감소시키기 위해 하나 또는 그 이상의 다음의 것들을 포함할 수 있다. 프로세서 코어(18A)가 동작하는 클럭 주파수를 감소시키는 것, 다양한 회로에 대한 클럭들을 게이팅(gating)하는 것, 클럭을 턴오프(turn off)하는 것, 위상 고정 루프 또는 다른 클럭 발생 회로를 턴오프하는 것, (모니터 유닛을 제외하고) 프로세서 코어를 파워 다운(power down)하는 것, 등. 수면 상태는 예를 들어 개인용 컴퓨터 시스템 내에서의 파워 관리의 다양한 실시예에서 사용되는 스톱 그랜트(stop grant) 상태들 중 어느 하나일 수 있다. 다른 실시예에서, 다른 상태들이 사용될 수 있다. 예를 들어, 만약 프로세서 코어(18A)가 멀티-스레딩(multi-threading) 설비들(facilties)을 구현한다면, 프로세서 코어(18A)는, 모니터링 되는 캐시 라인에 대한 업데이트가 탐지될 때까지 MWait 명령의 실행에 관한 또 다른 스레드를 실행하는 것으로 스위칭(switching) 할 수 있다.If monitor unit 26A is armed through the previous execution of the monitor instruction (and if there is no detection of the next update to the cache line--
만약 모니터 유닛(26A)이 아밍되지 않는다면(결정 블록(50), "아니오" 레그), 프로세스 코어(18A)는 MWait 명령에 관해 어떠한 행동을 취할 수 없고 그리고 MWait 명령의 다음에 오는 다음 명령과 함께 실행을 계속 할 수 있다. 모니터 유닛(26A)은, 만약 모니터 명령이 MWait 명령 이전에 실행되지 않는다면, (비록 다른 명령들이 모니터 명령과 MWait 명령 사이에서 실행될 수 있을지라도) 모니터 유 닛(26A)은 아밍될 수 없다. 추가적으로, 만약 모니터 명령이 이전에 실행된다면, 모니터 유닛(26A)은 아밍될 수 없으나, MWait 명령의 실행 전에, 모니터링된 캐시 라인의 업데이트는 탐지된다.If monitor unit 26A is not armed (
다음으로 도 4로 돌아가서, 저장 동작을 수행하기 위한 프로세서 코어(18A)의 일 실시예의 동작을 설명하는 순서도가 도시된다. 프로세서 코어(18A)는 도 4에 도시된 동작을 수행하기 위한 회로 및/또는 마이크로코드를 포함할 수 있다. 도 4에 도시된 블록들이 이해를 쉽게 하기 위해 특별한 순서로 도시되었지만, 어떠한 순서가 사용될 수 있다. 더욱이, 블록들은 프로세서 코어(18A) 내의 조합 로직에 의해 병렬로 수행될 수 있다. 다양한 실시예에서, 요구되는 바와 같이, 순서도에서 설명된 동작은 다수 클럭 싸이클을 통해 파이프라인될 수 있고 그리고/또는 블록들은 다수 클럭 싸이클을 통해 파이프라인될 수 있다.4, a flow diagram illustrating the operation of one embodiment of the processor core 18A for performing the storage operation is shown. Processor core 18A may include circuitry and / or microcode to perform the operations illustrated in FIG. 4. Although the blocks shown in FIG. 4 are shown in a particular order to facilitate understanding, any order may be used. Moreover, the blocks may be performed in parallel by combinatorial logic in processor core 18A. In various embodiments, as desired, the operations described in the flowcharts can be pipelined through multiple clock cycles and / or blocks can be pipelined through multiple clock cycles.
모니터 유닛(26A)은 저장 동작의 어드레스를 레지스터(28B)(MAddrS 어드레스를 저장하는 레지스터) 내의 어드레스에 비교한다. 만약 저장 어드레스가 MAddrS와 매칭(matching) 된다면(결정 블록(54), "예" 레그), 모니터 유닛(26A)은 프로세서 코어(18B)에 대한 Wakeup-ST 신호를 어서팅 할 수 있다(블록(56)). 어느 한 경우에나, 프로세서 코어(18A)는 메모리를 업데이트 함으로써 저장을 완료할 수 있다(블록(58)). 이 메모리는, 캐시를 구현한 프로세서 코어(18A)의 실시예에서, 캐시 내에서 업데이트될 수 있다. 추가적으로, 캐시 코히런시는 컴퓨터 시스템(10) 내에서 구현된 코히런시 프로토콜(protocol)에 따라 유지될 수 있다.The monitor unit 26A compares the address of the storage operation with the address in the
도 5는 모니터/MWait 명령의 구현에 관한 프로세서 코어(18A)의 예시적 상태 를 도시한 상태 머신도이다. 다른 목적의 다른 상태들이 프로세서 코어(18A)의 다양한 실시예에 의해 구현될 수 있다. 도 5에는 정상 상태(60), 아밍된 상태(62), 수면 상태(64)가 도시된다.5 is a state machine diagram illustrating an example state of the processor core 18A regarding the implementation of the monitor / MWait instruction. Other states for other purposes may be implemented by various embodiments of the processor core 18A. 5 shows a steady state 60, an armed state 62, and a sleep state 64.
정상 상태(60)는 (모니터/MWait 명령에 대해 정의된 바와 같이) 명령들이 실행되고 있고 캐시 라인의 모니터링이 수행되고 있지 않은 프로세서 코어(18A)의 상태일 수 있다. 아밍된 상태(62)는 모니터 유닛(26A)이, (모니터 명령의 실행을 통해) 모니터링 되는 캐시 라인의 어드레스로 업데이트 되고 MWait 명령의 그 다음 실행을 기다리고 있는 상태일 수 있다. 수면 상태(64)는 상기 언급된 파워 보존 상태이다. 다른 상태들이 상기 언급된 바와 같이 다른 실시예에서 수면 상태(64) 대신에 사용될 수 있다.Steady state 60 may be a state of processor core 18A where instructions are being executed (as defined for a monitor / MWait instruction) and no monitoring of cache lines is being performed. The armed state 62 may be a state in which the monitor unit 26A is updated with the address of the cache line being monitored (via execution of a monitor instruction) and waiting for the next execution of the MWait instruction. Sleep state 64 is the power conservation state mentioned above. Other states may be used instead of the sleep state 64 in other embodiments as mentioned above.
만약 프로세서 코어(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), 등을 포함할 수 있다.If processor core 18A is in normal state 60 and a monitor command is executing, the state machine transitions to armed state 62. In the armed state 62, if an invalidation probe for the monitored cache line is detected (if WExit asserted), or if the asserted Wakeup-ST signal is received by the monitor unit 26A, the state machine again. Transition to steady state 60. This transition indicates when an update to the monitored cache line occurs before the MWait command is executed. On the other hand, if the MWait instruction is executed while the state machine is in the armed state 62, the state machine transitions to the sleep state 64. The state machine may be configured for invalidation probes (WExit) for monitored cache lines, assertion of Wakeup-ST signals to monitor unit 26A (Wakeup-ST), or any defined for MWait instructions and / or processor core implementations. In response to detecting another exit condition, it may transition from sleep state 64 to steady state 60. Other escape conditions may vary from embodiment to embodiment, but may include the delivery of external interrupts to the processor core 18A, reset of the processor core 18A, and the like.
도 6은 동일한 노드(12A) 내에 있는 프로세서 코어(예를 들어, 프로세서 코어(18B))가 모니터링된 캐시 라인을 업데이트하는 경우 프로세서 코어(18A)의 동작을 나타내는 예이다. 프로세서 코어(18A)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18A, 노드 12A" 아래에서 보여진다. 프로세서 코어(18B)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18B, 노드 12A" 아래에서 보여진다. 프로세서 코어(18A)는 모니터 명령을 실행하고, 모니터 유닛(26A)을 모니터링 하고 아밍하기 위한 캐시 라인의 어드레스 "A"를 확립한다. 그 다음으로 상기 코드는 어드레스 A에 대한 점검(도 6에서 "점검 [A]"로 표시됨)을 포함하다. 이 점검은 모니터링된 캐시 라인 내의 메모리 위치를 읽는 것과 이것을 요구된 상태에 비교하는 것을 포함한다. 만약 요구된 상태가 메모리 위치 내에 있다면, 점검은 MWait 명령 주위로 분기할 수 있고 그 이후의 프로세싱을 계속할 수 있다. 점검은 모니터 명령의 실행을 갖는 레이스 조건(race condition)에서 일어나는 캐시 라인에 대한 업데이트를 탐지할 수 있다. 예를 들어, 요구된 상태가 캐시 라인 내에 존재하지 않고 프로세서 코어(18A)는 MWait 명령을 실행한다. 따라서 프로세서 코어(18A)는 수면 상태(화살표(70))로 들어간다.6 is an example illustrating operation of processor core 18A when a processor core (eg, processor core 18B) within the same node 12A updates a monitored cache line. The code executed by processor core 18A is shown under the heading (bold) “processor core 18A, node 12A”. The code executed by processor core 18B is shown under the heading (in bold) “processor core 18B, node 12A”. Processor core 18A executes a monitor instruction and establishes an address " A " of the cache line for monitoring and arming monitor unit 26A. The code then includes checking for address A (indicated by " check [A] " in FIG. 6). This check involves reading the memory location in the monitored cache line and comparing it to the required state. If the requested state is in a memory location, the check can branch around the MWait instruction and continue processing thereafter. The check can detect updates to cache lines that occur in a race condition with the execution of a monitor command. For example, the requested state does not exist in the cache line and processor core 18A executes the MWait instruction. Processor core 18A thus enters the sleep state (arrow 70).
프로세서 코어(18B)는 어드레스 A에 대한 저장 동작을 실행하고 그리고 저장 동작의 어드레스가 프로세서 코어(18A)로부터의 섀도우된 모니터 어드레스(MAddrS)와 매칭하는 지를 (모니터 유닛(28B) 내에서) 탐지한다. 따라서, 프로세서 코어(18B)(그리고 더 특별하게는 모니터 유닛(28B))는 Wakeup-ST 신호를 어서팅 함으로써(화살표(72)) 프로세서 코어(18A)(그리고 더 특별하게는 모니터 유닛(26A))에 신호를 보낸다. 프로세서 코어(18A)는 어드레스 A를 다시 점검하고(도 6에서 점검[A]) 캐시 라인 내의 요구된 상태를 탐지한다. 따라서, 프로세서 코어(18A)는 다른 명령과 함께 실행을 계속한다.The processor core 18B executes a storage operation for address A and detects (in
도 7은, 또 다른 노드(12B) 내의 프로세서 코어(예를 들어, 프로세서 코어(18C))가 모니터링된 캐시 라인을 업데이트 하는 경우, 프로세서 코어(18A)의 동작을 나타내는 예이다. 프로세서 코어(18A)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18A, 노드 12A" 아래에서 보여진다. 프로세서 코어(18C)에 의해 실행되는 코드는 표제(굵게 된 것) "프로세서 코어 18C, 노드 12B" 아래에서 보여진다. 추가적으로, 프로세서 코어(18C)와 프로세서 코어(18A) 사이의 통신의 전송은 도 7의 가운데에서 보여진다. 도 6의 예와 유사하게, 프로세서 코어(18A)는 모니터 명령을 실행하고, 모니터 유닛(26A)을 모니터링 하고 아밍하기 위해 캐시 라인의 어드레스 "A"를 확립하고, 어드레스 "A"를 점검하고, 그리고 MWait 명령을 실행한다. 따라서 프로세서 코어(18A)는 수면 상태에 들어간다(화살표(74)).7 is an example illustrating the operation of processor core 18A when a processor core (eg, processor core 18C) in another node 12B updates a monitored cache line. The code executed by processor core 18A is shown under the heading (bold) “processor core 18A, node 12A”. The code executed by processor core 18C is shown under the heading (in bold) “processor core 18C, node 12B”. Additionally, the transmission of communication between processor core 18C and processor core 18A is shown in the middle of FIG. Similar to the example of FIG. 6, processor core 18A executes a monitor command, establishes address “A” of the cache line, monitors address “A”, to monitor and arm monitor unit 26A, Then run the MWait command. Processor core 18A thus enters a sleep state (arrow 74).
프로세서 코어(18C)는 어드레스 A에 대한 저장 명령을 실행한다. 본 실시예에서는, 프로세서 코어(18C)는 프로세서 코어(18A)에 의해 모니터링 되는 어드레스의 섀도우 카피를 가지지 않으며, 따라서 저장을 완료하기 위해 코히런시 동작의 정상 전송을 계속한다. 특히, 프로세서 코어(18C)는 노드(12B) 내의 브리지(20B)에 무효화 프로브를 전송한다(화살표(76)). 브리지(20B)는 그 다음에 노드(12A)에 이 모효화 프로브를 전송한다(그리고 브리지(20A) 내에 도착한다). 브리지(20A)는 그 다음에 프로세서 코어(18A)에 이 무효화 프로브를 전송하고, 프로세서 코어(18A)는 이 무효화 프로브의 어드레스가 레지스터(28A) 내의 어드레스와 매칭되는 지를 탐지한다. 따라서, 프로세서 코어(18A)는 수면 상태에서 나온다(화살표(78)). 프로세서 코어(18A)는 어드레스 A를 다시 점검하고(도 7에서 점점[A]), 그리고 캐시 라인 내의 요구된 상태를 탐지한다. 따라서, 프로세서 코어(18A)는 다른 명령들을 갖는 실행을 계속한다.Processor core 18C executes a store instruction for address A. In this embodiment, processor core 18C does not have a shadow copy of the address monitored by processor core 18A and thus continues normal transmission of coherency operations to complete storage. In particular, processor core 18C sends an invalidation probe to bridge 20B in node 12B (arrow 76).
여러 변형 및 수정이 앞서 개시된 내용을 충분히 이해했다면 본 발명의 기술 분야에서 숙련된 기술을 갖은 자들에게는 명백할 것이다. 다음의 특허청구범위는 이러한 모든 변형 및 수정을 포함하는 것으로 해석되도록 의도된 것이다.Many modifications and variations will be apparent to those of ordinary skill in the art having a thorough understanding of the foregoing. The following claims are intended to be construed to include all such variations and modifications.
본 발명은 일반적으로 프로세서 및 변화에 대한 캐시 라인의 모니터링에 응용가능하다.The present invention is generally applicable to the monitoring of processors and cache lines for changes.
Claims (11)
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/956,685 | 2004-10-01 | ||
US10/956,685 US7257679B2 (en) | 2004-10-01 | 2004-10-01 | Sharing monitored cache lines across multiple cores |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20070057906A true KR20070057906A (en) | 2007-06-07 |
KR101216190B1 KR101216190B1 (en) | 2012-12-28 |
Family
ID=35994769
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020077007487A KR101216190B1 (en) | 2004-10-01 | 2005-09-21 | Sharing monitored cache lines across multiple cores |
Country Status (8)
Country | Link |
---|---|
US (1) | US7257679B2 (en) |
EP (1) | EP1807754B1 (en) |
JP (1) | JP4982375B2 (en) |
KR (1) | KR101216190B1 (en) |
CN (1) | CN101036116B (en) |
DE (1) | DE602005020960D1 (en) |
TW (1) | TWI366132B (en) |
WO (1) | WO2006039162A2 (en) |
Families Citing this family (46)
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 |
US7444474B2 (en) * | 2005-05-16 | 2008-10-28 | Texas Instruments Incorporated | Determining the presence of a virtual address in a cache |
US7484053B2 (en) * | 2005-05-16 | 2009-01-27 | Texas Instruments Incorporated | Cross-referencing cache line addresses with corresponding names |
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 |
US9710384B2 (en) | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8095735B2 (en) | 2008-08-05 | 2012-01-10 | Convey Computer | Memory interleave for heterogeneous computing |
US8122229B2 (en) * | 2007-09-12 | 2012-02-21 | Convey Computer | Dispatch mechanism for dispatching instructions from a host processor to a co-processor |
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 |
US9015399B2 (en) * | 2007-08-20 | 2015-04-21 | Convey Computer | Multiple data channel memory module architecture |
US8561037B2 (en) * | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
US20090106755A1 (en) * | 2007-10-19 | 2009-04-23 | Sundeep Chandhoke | Programmable Controller with Multiple Processors Using Scanning and Data Acquisition Architectures |
US9336051B2 (en) * | 2007-10-19 | 2016-05-10 | National Instruments Corporation | Programmable controller with multiple processors using a scanning architecture |
US20090309243A1 (en) * | 2008-06-11 | 2009-12-17 | Nvidia Corporation | Multi-core integrated circuits having asymmetric performance between cores |
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 |
US20100115233A1 (en) * | 2008-10-31 | 2010-05-06 | Convey Computer | Dynamically-selectable vector register partitioning |
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 |
TWI450084B (en) * | 2010-12-22 | 2014-08-21 | Via Tech Inc | Decentralized power management distributed among multiple processor cores |
US8782451B2 (en) * | 2010-12-22 | 2014-07-15 | Via Technologies, Inc. | Power state synchronization in a multi-core processor |
US8635476B2 (en) * | 2010-12-22 | 2014-01-21 | Via Technologies, Inc. | Decentralized power management distributed among multiple processor cores |
US8631256B2 (en) | 2010-12-22 | 2014-01-14 | Via Technologies, Inc. | Distributed management of a shared power source to a multi-core microprocessor |
US8930676B2 (en) | 2010-12-22 | 2015-01-06 | Via Technologies, Inc. | Master core discovering enabled cores in microprocessor comprising plural multi-core dies |
US8637212B2 (en) | 2010-12-22 | 2014-01-28 | Via Technologies, Inc. | Reticle set modification to produce multi-core dies |
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 |
US9460038B2 (en) | 2010-12-22 | 2016-10-04 | Via Technologies, Inc. | Multi-core microprocessor internal bypass bus |
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 |
US9310875B2 (en) | 2011-12-22 | 2016-04-12 | Intel Corporation | Instruction that specifies an application thread performance state |
EP2831721B1 (en) | 2012-03-30 | 2020-08-26 | 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 |
US9471133B2 (en) | 2013-08-28 | 2016-10-18 | Via Technologies, Inc. | Service processor patch 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 (en) * | 2015-11-13 | 2019-06-05 | Necプラットフォームズ株式会社 | Out-of-range reference detection device, method and program |
US10289516B2 (en) | 2016-12-29 | 2019-05-14 | Intel Corporation | NMONITOR instruction for monitoring a plurality of addresses |
CN108009121B (en) * | 2017-12-21 | 2021-12-07 | 中国电子科技集团公司第四十七研究所 | Dynamic multi-core configuration method for application |
US11176042B2 (en) * | 2019-05-21 | 2021-11-16 | Arm Limited | Method and apparatus for architectural cache transaction logging |
US11237960B2 (en) | 2019-05-21 | 2022-02-01 | Arm Limited | Method and apparatus for asynchronous memory write-back in a data processing system |
CN113157543B (en) * | 2021-05-14 | 2023-07-21 | 海光信息技术股份有限公司 | Trusted measurement method and device, server and computer readable storage medium |
US20220394023A1 (en) * | 2021-06-04 | 2022-12-08 | Winkk, Inc | Encryption for one-way data stream |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2916421B2 (en) * | 1996-09-09 | 1999-07-05 | 株式会社東芝 | Cache flush device and data processing method |
JPH10149285A (en) * | 1996-11-18 | 1998-06-02 | Hitachi Ltd | Method for controlling execution of instruction and information processor |
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 |
-
2004
- 2004-10-01 US US10/956,685 patent/US7257679B2/en active Active
-
2005
- 2005-09-21 WO PCT/US2005/033819 patent/WO2006039162A2/en active Application Filing
- 2005-09-21 EP EP05800246A patent/EP1807754B1/en active Active
- 2005-09-21 JP JP2007534659A patent/JP4982375B2/en active Active
- 2005-09-21 DE DE602005020960T patent/DE602005020960D1/en active Active
- 2005-09-21 CN CN2005800334872A patent/CN101036116B/en active Active
- 2005-09-21 KR KR1020077007487A patent/KR101216190B1/en active IP Right Grant
- 2005-09-26 TW TW094133303A patent/TWI366132B/en active
Also Published As
Publication number | Publication date |
---|---|
US20060075060A1 (en) | 2006-04-06 |
TWI366132B (en) | 2012-06-11 |
CN101036116A (en) | 2007-09-12 |
JP4982375B2 (en) | 2012-07-25 |
WO2006039162A2 (en) | 2006-04-13 |
DE602005020960D1 (en) | 2010-06-10 |
TW200627271A (en) | 2006-08-01 |
WO2006039162A3 (en) | 2007-03-15 |
US7257679B2 (en) | 2007-08-14 |
CN101036116B (en) | 2010-08-11 |
EP1807754A2 (en) | 2007-07-18 |
KR101216190B1 (en) | 2012-12-28 |
JP2008515096A (en) | 2008-05-08 |
EP1807754B1 (en) | 2010-04-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101216190B1 (en) | Sharing monitored cache lines across multiple cores | |
US7627722B2 (en) | Method for denying probes during proactive synchronization within a computer system | |
US20210357214A1 (en) | Methods, apparatus, and instructions for user-level thread suspension | |
CN111506534B (en) | Multi-core bus architecture with non-blocking high performance transaction credit system | |
JP5372929B2 (en) | Multi-core processor with hierarchical microcode store | |
KR101814412B1 (en) | Providing snoop filtering associated with a data buffer | |
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 | |
US20160019168A1 (en) | On-Demand Shareability Conversion In A Heterogeneous Shared Virtual Memory | |
CN114756502A (en) | On-chip atomic transaction engine | |
EP1329804B1 (en) | Mechanism for processing speculative LL and SC instructions in a pipelined processor | |
CN115577402A (en) | Secure direct peer-to-peer memory access requests between devices | |
US9928115B2 (en) | Hardware migration between dissimilar cores | |
US6704854B1 (en) | Determination of execution resource allocation based on concurrently executable misaligned memory operations | |
US11775336B2 (en) | Apparatus and method for performance state matching between source and target processors based on interprocessor interrupts | |
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 |