KR101369441B1 - 컴퓨터 시스템 내부의 프로액티브 동기 방법 - Google Patents

컴퓨터 시스템 내부의 프로액티브 동기 방법 Download PDF

Info

Publication number
KR101369441B1
KR101369441B1 KR1020087007115A KR20087007115A KR101369441B1 KR 101369441 B1 KR101369441 B1 KR 101369441B1 KR 1020087007115 A KR1020087007115 A KR 1020087007115A KR 20087007115 A KR20087007115 A KR 20087007115A KR 101369441 B1 KR101369441 B1 KR 101369441B1
Authority
KR
South Korea
Prior art keywords
address
addresses
count value
processor
response
Prior art date
Application number
KR1020087007115A
Other languages
English (en)
Other versions
KR20080038435A (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 KR20080038435A publication Critical patent/KR20080038435A/ko
Application granted granted Critical
Publication of KR101369441B1 publication Critical patent/KR101369441B1/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/46Multiprogramming arrangements
    • 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache 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/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/3017Runtime instruction translation, e.g. macros
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores

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)
  • Multi Processors (AREA)
  • Debugging And Monitoring (AREA)

Abstract

컴퓨터 시스템(100)에서의 프로액티브 동기 방법은 주어진 메모리 리소스(314A-314D)에 대한 독점적 억세스를 요구하는 프로세서를 포함한다. 이 요구는 상기 주어진 메모리 리소스와 관련된 하나 또는 그 이상의 어드레스들을 포함한다. 상기 방법은 또한 복수 개의 어드레스 세트들 각각에 각 어드레스들을 비교하는 단계를 포함한다. 어드레스 세트들의 각 어드레스는 요구자가 그에 대한 독점적 억세스 권한을 가진 개별적인 메모리 리소스에 대응된다. 또한, 하나 또는 그 이상의 어드레스들의 어느 어드레스가 복수 개의 어드레스 세트들 중 어느 어드레스와 매칭되는 것에 대한 응답으로, 상기 방법은 매칭되는 어드레스와 관련된 카운트 값(233)을 리턴하는 단계를 포함한다. 상기 카운트 값은 매칭되는 어드레스를 놓고 경합하는 요구자(requestor)들의 숫자를 나타낸다.

Description

컴퓨터 시스템 내부의 프로액티브 동기 방법{METHOD FOR PROACTIVE SYNCHRONIZATION WITHIN A COMPUTER SYSTEM}
본 발명은 마이크로프로세서에 관한 것으로서, 특히 멀티프로세서 시스템의 프로세서들 사이에서 동기 과정에 관한 것이다.
현대의 마이크로프로세서 성능은 꾸준히 증가해왔고 최근 10년간 드라마틱하게 향상되었다. 성능은 증가된 동작 주파수와 딥 파이프라이닝으로 알려진 기술에 힙입어 증가했다. 일반적으로 말해, 딥 파이프라이닝은 명령 마이프라인들을 많은 단계로 사용하는 것으로 언급되고, 각 단계는 덜 일하며, 그것이 의해 모든 파이프라인이 보다 빠르게 수행하는 것이 가능해진다. 이 기술은 산업을 잘 보호해 왔다. 그러나, 증가된 주파수와 딥 파이프라이닝에는 결점이 존재한다. 예를 들어, 클럭 스큐(clock skew)와 전력 소비는 고 주파수 동작에서 매우 중요하다. 그것으로서, 물리적 제약조건들이 시스템 열적 제한 조건에 의해 부과되었고, 클럭 스큐를 유지함에 있어 증가된 어려움은 기술의 한계를 나타내어 코너에 몰려있다 할 것이다. 그래서, 산업은 성능을 향상시키는 새로운 기술들을 찾는 데에 혈안이 되어 있다. 성능을 향상시키는 기술의 한 종류는 다중 코어 프로세서들의 이용으로 일반적으로 멀티프로세싱이다.
계산 시스템들이 더 많은 프로세서들(또는 프로세서 코어들)을 갖춘 멀티프로세싱 방식들을 사용함에 따라, 동일한 메모리 데이터에 간섭하거나 경합하는 요구자들(Requestor)의 숫자가 증가할 수 있고, 이는 종래의 동기 과정 방법들이 부적절하다는 점에 기인한다. 예를 들어, 프로세서들의 로(low) 숫자가 리소스에 경합하는 경우, 단순히 잠그는(locking) 구조체들은 코드의 임계 섹션들의 적절한 성능을 제공할 수 있다. 예를 들어, 메모리 위치에서의 잠긴(locked) 연산 동작들은 충분할 수 있다. 멀티프로세싱의 스케일이 커짐에 따라, 이러한 기본적 방식들이 더욱 비효율적으로 되었다. 보다 개선된 프로세서들은 극소로(atomically) 단일 메모리 위치를 업데이트하는 하드웨어 동기 기본방식들(CMPXCHG, CMPXCHC8B, CMPXCHG16B)을 포함하는 명령 세트들을 부가하여 포함한다. 그러나, 우리는 이러한 하드웨어 기본방식들이 고성능, 고 프로세서 카운트 멀티프로세서들에 요구되는 성능을 제공하지 못하는 새로운 시대에 들어섰다.
많은 종래의 프로세서들은 낙관적(optimistic) 모델에 기초하고 있다. 즉, 멀티프로세서 환경에서 동작할 때에, 이러한 종래의 프로세서들은 그들이 어떠한 간섭도 탐지되지 않을 때가지 반복적으로 동기 코드를 재실행하는 방식에 의해 동기를 달성한다는 가정하에 동작되도록 디자인되었다. 이러한 동기 방식은 바람직하지 않은 시간 낭비를 초래하고, 특히 많은 프로세서들은 동일한 동기 이벤트를 시도하고 있으며, 하나의 프로세서 이상의 프로세서가 현재 진보를 이루어내지 못하고 있다. 그것으로서, 다른 동기 기술들이 요구된다.
컴퓨터 시스템에서 프로액티브 동기를 제공하는 방법의 다양한 실시예들이 개시되어 있다. 일 실시예에서, 상기 방법은 주어진 메모리 리소스에 대한 독점적 접근을 요구하는 프로세서를 포함한다. 이 요구는 상기 주어진 메모리 리소스에 관련된 하나 또는 그 이상의 어드레스들을 포함할 수 있다. 상기 방법은 또한 하나 또는 그 이상의 어드레스들 각각과 복수 개의 어드레스 세트들의 각 어드레스를 비교하는 단계를 포함하는데, 상기 복수 개의 어드레스 세트들 각각은 요구자(requestor)가 독점적 억세스 권한을 승인받은 대상인 개별적인 메모리 리소스에 대응된다. 또한, 상기 방법은 하나 또는 그 이상의 어드레스들의 어느 어드레스가 복수 개의 어드레스 세트들 중 어느 어드레스와 매칭되는 것에 대한 응답으로, 매칭되는 어드레스와 관련된 카운트 값을 리턴하는 단계를 포함하는데, 상기 카운트 값은 매칭되는 어드레스를 놓고 경합하는 요구자(requestor)들의 숫자를 나타낸다.
하나의 구체적인 실시방안에서, 상기 방법은 복수 개의 어드레스 세트들 내에서 어느 어드레스와 매칭(matching)되는 하나 또는 그 이상의 어드레스들이 없는 경우에 대한 응답으로 0의 패스 카운트 값을 리턴하는 단계를 포함한다.
또 다른 실시예에서, 컴퓨터 시스템은 서로 결합되고 하나 또는 그 이상의 메모리들(314A-314D)에 결합된 하나 또는 그 이상의 프로세서들(18A, 18B)로서, 각 프로세서들은 주어진 메모리 리소스에 대한 독점적 억세스를 요구하기 위해 명령행하도록 설정되고, 이 요구는 상기 주어진 메모리 리소스에 관련된 하나 또는 그 이상의 어드레스들을 포함하는 하나 또는 그 이상의 프로세서들(18A, 18B)과;
하나 또는 그 이상의 어드레스들 각각과 복수 개의 어드레스 세트들의 각 어드레스를 비교하기 위하여 결합된 조정 유닛(arbitration unit)(230)으로서, 상기 복수 개의 어드레스 세트들의 각 어드레스는 요구자(requestor)가 독점적 억세스를 승인받은 대상인 개별적인 메모리 리소스에 대응되는 조정 유닛을 포함하는데,
상기 조정 유닛은 하나 또는 그 이상의 어드레스들의 어느 어드레스가 복수 개의 어드레스 세트들 중 어느 어드레스와 매칭되는 것에 대한 응답으로, 매칭되는 어드레스를 포함하는 세트에 연관되는 카운트 값(233)을 리턴하도록 설정된다. 카운트 값은 매칭되는 어드레스를 놓고 경합하는 요구자들의 숫자를 나타낼 수 있다.
도 1은 컴퓨터 시스템의 일 실시예에 대한 블럭 다이어그램이다.
도 2는 도 1의 프로세싱 노드에 대한 실시예의 세부사항을 나타내는 블럭 다이어그램이다.
도 3은 도 1과 도 2에 나타난 컴퓨터 시스템의 일 실시예의 연산을 나타내는 순서도이다.
도 4는 코히어런시 무효 프로브 수신에 대한 응답으로 도 1과 도 2에 나타난 컴퓨터 시스템의 일 실시예의 연산을 나타내는 순서도이다.
본 발명은 다양한 수정방안들과 대안 형태들로 변형될 수 있지만, 본 발명의 특정 실시예들이 도면에서 예시로써 나타나 있고 본 명세서에서 상세히 설명될 것이다. 그러나, 도면과 상세한 설명 및 실시예는 본 발명을 특정한 개시 형태로 한정하려는 것이 아니라, 첨부된 특허청구범위에 의해 정의된 본 발명의 사상과 범위를 벗어나지 않는 한도에서 본 발명이 모든 수정방안들, 균등물들, 대안들을 포함 하는 것임을 이해해야 할 것이다. 문구 "~일 수 있다"는 본 출원 전체에서 허용적 의미(예를 들어, "~할 가능성이 있다", "~할 수 있다")로 사용되는 것이지, "~해야 한다"와 같은 필수적인 의미로 사용되는 것은 아님이 주목되어야 한다.
소프트웨어에서 고성능 동기 방법들의 구성이 가능하도록 하기 위하여, 개선된 동기 설비(advanced synchronization facility)로서 언급될 수 있는 명령어들의 세트가 사용될 수 있다. 이 설비는 넌-블로킹(non-Blocking) 동기, 웨이트프리(WaitFree) 동기, 트랜잭셔널(Transactional) 동기의 구성, 그리고 이러한 방법들의 구성에 전형적으로 사용되는 비교 및 스왑(Swap)의 기본 방법들의 다양한 형태들의 구성을 함께 지원할 수 있다.
또한, 개선된 동기 설비는 소프트웨어가 많은 다양한 동기 종류를 프로그래밍하게 할 수 있다. 각 동기 종류는 바로 나열될 수 있다: 성공적 완료를 위해 요구되는 캐시 라인들, 실패들이 제어 흐름(control flow)을 리다이렉팅(redirecting)하는 시퀀스 포인트, 성공적인 임계 섹션(critical section)의 결과가 수행되는 데이터 수정 섹션, 그리고 성공이 명령들의 전체 시퀀스를 극소로 보이게 하는 시스템의 나머지를 보이도록 만드는 시퀀스 포인트.
따라서, 개선된 동기 설비의 기능성은 임계 섹션과 관련된 쓰기 권한으로 다중 캐시 라인들의 획득과 방출을 가능하게 할 수 있고, 이는 다른 프로세서들/코어들에 의해 관찰되는 바로는 실질적으로 동시에 일어난다. 이 과정은 선형화(Linearizing)로 언급될 수 있다. 획득 이후에는, 지정된 다중 캐시 라인들의 어 느 것에 대한 수정들이 다른 파티(party)에 관찰되기 이전에 여러 수정예들이 수행된다. 획득과 방출 사이에, 어느 다른 프로세서들도 이 동일한 라인들에 대해 조작할 수 없다(예컨대 쓰기 권한을 갖는 것). 비슷한 방식이 소스-던(Source-Done) 메시지들을 연합된(associated) 라인들에 전송하지 않고서도 수행될 수 있고 이에 의해 수반되는 접근들을 방지할 수 있다. 그러나, 이 해결방안들은 데드락 또는 라이브락(deadlock or livelock)을 야기하거나, 타임아웃(timeout)을 야기한다. 그래서, 개선된 동기 설비를 실행하는 프로세서와 프로세서 코어를 포함하는 컴퓨터 시스템이 아래에 설명된다.
도 1을 보면, 컴퓨터 시스템(100)의 일 실시예가 나타나 있다. 컴퓨터 시스템(100)은 여러 프로세싱 노드들(312A, 312B, 312C, 312D)을 포함한다. 각 프로세싱 노드(312A-312D)는 각 개별적인 프로세싱 노드(312A-312D) 내부에 포함되어 있는 메모리 컨트롤러(316A-316D)를 통해 개별적인 메모리(314A-314D)에 결합되어 있다. 또한, 프로세싱 노드들(312A-312D)은 프로세싱 노드들(312A-312D) 사이의 통신에 사용되는 인터페이스 로직(IF)을 포함한다. 예를 들어, 프로세싱 노드(312A)는 프로세싱 노드(312B)와의 통신을 위하여 인터페이스 로직(318A)을 포함하고, 프로세싱 노드(312C)와의 통신을 위해 인터페이스 로직(318B)를 포함하며, 다른 프로세싱 노드(도면에 나타나지 않은)와의 통신을 위해 인터페이스 로직(318C)을 포함한다. 비슷한 방식으로, 프로세싱 노드(312B)는 인터페이스 로직(318D, 318E, 318F)을 포함하고, 프로세싱 노드(312C)는 인터페이스 로직(318G, 318H, 318I)을 포함하며, 프로세싱 노드(312D)는 인터페이스 로직(318J, 318K, 318L)을 포함한다. 프로 세싱 노드(312D)는 인터페이스 로직(318L)을 통하여 복수 개의 입/출력 장치들(예를 들어 데이지 체인 구성에서의 장치(320A-320B))과 통신할 수 있도록 입/출력 장치들에 결합되어 있다. 다른 프로세싱 노드들은 비슷한 방식으로 다른 입/출력 장치들과 통신할 수 있다. 프로세서들은 이 인터페이스를 시스템의 다른 프로세서들에 연관된 메모리들에 억세스하는 데에 이용할 수 있다. 문자가 뒤따르는 참조 번호를 포함하는 구성요소들은 일반적으로 숫자만 단독으로 참조될 수 있음이 주목되어야 한다. 예를 들어, 일반적으로 프로세싱 노드들을 참조할 때, 프로세싱 노드(312)가 사용될 수 있다.
프로세싱 노드들(312)은 프로세싱 노드 간의 통신을 위하여 패킷에 기반한 링크를 사용한다. 예시된 실시예에서, 상기 링크는 단일 방향 라인들의 세트들로서 사용된다(예를 들어, 라인들(324A)은 프로세싱 노드(312A)로부터 프로세싱 노드(312B)에 패킷들을 송신하는 데에 사용되고 라인들(324B)은 프로세싱 노드(312B)로부터 프로세싱 노드(312A)에 패킷들을 송신하는 데에 사용된다.). 라인들(324C-324H)의 다른 세트들은 도 1에 예시된 대로 다른 프로세싱 노드들 사이에서 패킷들을 송신하는 데에 사용된다. 일반적으로, 라인들(324)의 각 세트는 하나 또는 그 이상의 데이터 라인들, 상기 데이터 라인들에 대응하는 하나 또는 그 이상의 클럭 라인들, 전달된 패킷의 종류를 나타내는 하나 또는 그 이상의 컨트롤 라인들을 포함할 수 있다. 상기 링크는 프로세싱 노드들 간의 통신을 위해 캐시 코히어런트 방식으로 작동할 수 있거나, 프로세싱 노드와 입/출력 장치 사이의 통신을 위해 넌-코히어런트 방식으로 작동할 수 있다(또는 PCI 버스 또는 ISA 버스와 같은 종래의 구조물의 입/출력 버스에의 버스 브리지). 또한, 상기 링크는 (예를 들어 320A와 320B에 나타난)입/출력 장치들 사이에서 데이지-체인 구조를 사용하는 넌-코히어런트 방식으로 작동할 수 있다. 예시적인 실시예에서, 다른 실시예와 다른 링크가 가능하지만, 상기 링크는 코히어런트HyperTransportTM 링크로서 구현될 수 있거나 넌-코히어런트 HyperTransportTM 링크로 구현될 수 있다.
입/출력 장치(320A-320B)는 어떤 적합한 입/출력 장치일 수 있다. 예를 들어, 입/출력 장치(320A-320B)는 상기 장치들과 결합된 다른 컴퓨터 시스템(예를 들어 네트워크 인터페이스 카드 또는 모뎀)과의 통신을 위한 장치들을 포함한다. 또한, 입/출력 장치(320A-320B)는 비디오 가속기, 오디오 카드, 하드 또는 플로피 디스크 드라이브 또는 드라이브 컨트롤러, SCSI(Small Computer Systems Interface) 어댑터와 전화통신 카드, 사운드 카드, GPIB 또는 필드 버스 인터페이스 카드와 같은 다양한 데이터 획득 카드(data acquisition card)를 포함할 수 있다. 용어 "입/출력 장치"와 용어 "주변 장치"는 여기에서 동의어로 쓰인다는 점을 주목해야 한다.
메모리들(314A-314D)은 어느 적합한 메모리 장치들을 포함할 수 있다. 예를 들어, 메모리(314A-314D)는 하나 또는 그 이상의 RAMBUS DRAMs(RDRAMs), 동기(synchronous) DRAMs(SDRAMs), DDR SDRAM, 스태틱(static) RAM 등을 포함할 수 있다. 컴퓨터 시스템(300)의 메모리 어드레스 공간은 메모리들(314A-314D) 사이에서 나뉘어진다. 각 프로세싱 노드(312A-312D)는 어느 어드레스가 메모리들(314A- 314D)에 매핑(mapping)될 것인가를 결정하는 데에 이용되는 메모리 맵을 포함할 수 있고, 그로 인해 특정 어드레스를 위한 메모리 요구가 프로세싱 노드(312A-312D)에 라우팅될 수 있다. 메모리 컨트롤러들(316A-316D)은 메모리들(314A-314D)과의 인터페이싱을 위한 조정 회로(control circuitry)를 포함할 수 있다. 또한, 메모리 컨트롤러들(316A-316D)은 메모리 요구들을 큐잉(queuing)하기 위한 요구 큐(queue)들을 포함할 수 있다. 메모리들(314A-314D)은, 상기의 단락들에서 설명된 대로, 기능성을 구현하기 위하여 프로세서들에 의해 실행가능한 코드를 저장할 수 있다.
하나의 프로세싱 노드로부터 또 다른 프로세싱 노드로의 패킷 송신은 하나 또는 그 이상의 중간 노드들을 거칠 수 있음을 주목해야 한다. 예를 들어, 프로세싱 노드(312A)에 의해 프로세싱 노드(312D)로 송신된 패킷은 도 1에 나타난 대로 프로세싱 노드(312B) 또는 프로세싱 노드(312C)를 거칠 수 있다. 일반적으로, 패킷들은 노드들 사이의 라인들(324)에서 1 또는 그 이상의 비트 타임들로 송신될 수 있다. 비트 타임은 대응되는 클럭 라인들에서의 클럭 신호의 상승 엣지(rising edge) 또는 하강 엣지(falling edge)일 수 있다. 패킷들은 트랜잭션(transaction) 초기화를 위한 명령 패킷들(command packet), 캐시 코히어런시를 유지하기 위한 프로브 패킷, 그리고 프로브들과 들에의 응답으로부터의 응답 패킷들을 포함할 수 있다.
일 실시예에서, 프로세싱 노드들(312)은 또한 하나 또는 그 이상의 프로세서 코어들(도 2에 도시된)을 포함할 수 있다. 각 노드 내부의 상기 프로세서 코어들은 캐시 코히어런트 방식으로 작동하는 내부의 패킷에 기초한 링크들(internal packet-based links)을 통하여 통신할 수 있음을 주목해야 한다. 프로세서 코어들과 프로세싱 노드들(312)은 메모리들(314)의 일부 또는 전부를 공유하도록 구성되어 있다는 점을 또한 주목해야 한다.
일 실시예에서, 다른 아키텍처들도 가능하고 고려될 만함에도 불구하고, 프로세서 코어들의 하나 또는 그 이상은 x86 아키텍처(architecture)를 사용한다. 그것으로서, 다양한 프로세서 코어들 각각의 내부의 명령 디코더 로직은 LOCK 프레픽스(prefix)를 사용하여 명령들을 마킹하도록 설정될 수 있다.. 또한, 아래에서 자세히 설명될 바와 같이, 프로세서 코어 로직은 LOCK된 명령어들과 관련된 마커(marker)들의 식별을 가능하게 할 수 있는 하드웨어(도 2에 도시된)를 포함할 수 있다. 이 하드웨어는 개선된 동기 설비의 부분으로서 코드의 임계 섹션들을 식별하게 하도록 LOCK 명령 프레픽스의 이용을 가능하게 할 수 있다.
동시에 동일한 메모리 참조(memory reference)(예컨대, 코드의 임계 섹션들)에 억세스하는 것을 시도하는 둘 이상의 프로세서에 의해 유발된 간섭 효과들을 줄이기 위해서, 상기 개선된 동기 설비와 그에 관련된 하드웨어가 컴퓨터 시스템(100) 내부에서 구현될 수 있다. 아래에서 상세히 설명될 바와 같이, 상기 개선된 동기 설비는 새로운 명령어들을 이용하고 캐시 코히어런트 구조(fabric) 내부에서 상호 연결되어 있는(interconnected) 동기 조정기(arbiter)(도 2에 도시된)와 같은 하드웨어를 사용할 수 있다. 도 2에 도시된 대로, 동기 조정기(230)는 어느 프로세싱 노드(312)의 노스브리지 유닛(290)에 연결되어 있고, 이는 동기 조정기가 각 노드의 발전된 동기 설비 트랜잭션들과 관련된 명시적 주소들을 관찰할 수 있게 한다. 상기 동기 조정기는 상호연결된 네트워크의 코히어런트 도메인 내에 어디에든 위치할 수 있다. 주목되어야 할 사항으로서, 하나의 동기 조정기가 도시되어 있지만, 시스템이 다중의 가상 머신(virtual machine)들을 지원하도록 구성되어 있고, 이 가상 머신들이 어느 실제의 물리적 메모리들을 공유하지 않는 때에는, 다중의 동기 조정기들은 여러 개의 조정기들 전반에 걸쳐 동기 로드(load)를 분배하도록 구성될 수 있음을 고려해야 한다.
"임계 섹션(critical section)"이 본 명세서 전반에 걸쳐 쓰이고 있음을 주목해야 한다. "임계 섹션"은 하나 또는 그 이상의 메모리 참조 명령들(reference instructions)을 포함하는 개선된 동기 설비에서 사용되는 코드의 섹션으로 언급되는데, 여기에서 메모리 참조 명령들은 LOCK 접두사, ACQUIRE 명령, 그리고 임계 섹션을 끝내는 RELEASE 명령으로 표시되어 있다. 일 실시예에서, 각 임계 섹션의 네 단계가 있다: 1) 임계 섹션 도중에 필요한 캐시 라인(들)의 어드레스(들)를 지정하는 단계(예컨대 임계 섹션 진입), 2) 이 캐시 라인들을 획득하기 위해 메카닉(mechanic)을 통과하는 단계, 3) 극소로 임계 섹션 데이터를 수정하는 단계, 4) 캐시 라인들을 시스템으로 방출하는 단계. 특히, 임계 섹션 코드는 관심 있는 관찰자(interested obsercer)들에 의해 극소로 수행되는 것으로 보일 수 있다 제 1 단계는 지정 단계로 언급될 수 있으며, 제 3 단계는 극소 단계로 언급될 수 있다..
다양한 실행방안에서, 단순한 연산 동작들이 수행될 때 예외를 불러일으키지 않는 한, 소프트웨어는 임계 섹션의 데이터를 읽고 수정하는 사이에 데이터에 대한 '단순한' 연산 및 논리적 조작들을 수행하도록 허용된다. 데이터 조작이 임계 섹션 내부에 예외를 불러 일으킨 경우에는, 임계 섹션의 극소성이 보장되지 못한다. 임계 섹션 소프트웨어는 극소성의 실패를 탐지해야 하고, 적절히 그에 대처해야 하는데, 이는 아래에 자세히 설명된다.
일반적으로, 개선된 동기 설비는 줄어든(weakened) 메모리 모델을 사용하고 캐시어블(cacheable) 데이터에서만 연산한다. 이 줄어든 메모리 모델은 개선된 동기 설비가 임계 섹션을 수행하기 전에 비우기 위하여 다양한 프로세서와 메모리 버퍼들을 기다리는 낭비 주기들을 방지할 수 있다. 그러나, 소프트웨어가 일반적인 PC의 강한 메모리 모델을 필요로 할 경우에는, 소프트웨어는 LFENSE, SFENSE, 또는 MFENSE 명령들을 RELEASE 명령에 앞서 삽입하는데, 이는 일반적인 PC의 메모리 오더를 보장하기 위함이다. 언캐시어블 데이터에의 억세스를 가능하게 하기 위해 캐시어블 동기를 사용하는 경우에는, 마지막 LOCKed Store와 RELEASE 명령 사이의 SFENSE 명령은 캐시어블 동기 데이터가 어느 다른 프로세서에서 전체적으로 보이기 전에 언캐시어블 데이터가 전체적으로 보이도록 보장한다. 이는 최소 성능 감퇴로 최대의 언캐시어블과 캐시어블 억세스들의 오버랩을 가능하게 한다.
다양한 실시예들에서, 인터페이스 로직(318A-318L)은 링크로부터 패킷들을 수신하기 위하여, 그리고 상기 링크에 패킷들이 송신되도록 버퍼링하기 위하여 여러 개의 버퍼를 포함할 수 있다. 컴퓨터 시스템(100)은 패킷들의 송신을 위해 어느 적합한 흐름 제어 메커니즘(flow control mechanism)을 사용할 수 있다. 인터페이스 로직(318A-318L)에 추가하여, 각 프로세싱 노드는 개별적인 버퍼 인터페이스 유닛(BIU)들(220)을 포함할 수 있고(도 2에 도시된 대로), 이는 사전행동 적(proactive) 동기를 가능하게 하도록 기능성을 제공할 수 있다. 예를 들어, 아래에서 더 설명되는 바와 같이, BIU(220)는 ACQUIRE 명령의 수행에 대한 응답으로 동기 조정기(230)에 그 어드레스들을 송신하도록 설정되고 개선된 동기 이벤트에 관련된 특정 어드레스에 설정된다. 상기 BIU(220)는 또한 동기 조정기(230)으로부터 수신된 응답이 상기 어드레스들이 간섭(interference)으로부터 자유로울 수 있는지를 나타내느냐를 결정하도록 설정된다. 상기 응답이 상기 어드레스들이 간섭으로부터 자유로울 수 있는지 여부에 따라, BIU(220)는 프로세서 코어(18) 내부의 레지스터에 실패 카운트 값(count value)을 전송하고, 동기 조정기(230)에 완료 메시지를 전송함에 의해, 프로세서 코어에 실패를 통지할 수 있고, 임계 섹션의 수행을 가능하게 하여 간섭으로부터 자유롭다는 점이 확실해지는 때는 동기 조정기(230)에 완료 메시지를 전송하는 것을 기다릴 수 있다.
도 2는 도 1의 프로세싱 노드(312A)와 동기 조정기(230)의 실시예들의 보다 상세한 실시형태를 예시하는 블럭 다이어그램이다. 도 2를 참조해 보면, 프로세싱 노드(312A)는 프로세서 코어들(18A와 18n)을 포함하는데, 이 n은 프로세서 코어들의 개수를 나타내는 것일 수 있다. 상기 프로세서 코어들이 다양한 실시예들에서 실질적으로 동일하기 때문에, 프로세서 코어(18A)의 상세한 실시형태들만이 아래에 설명된다. 도시된 대로, 프로세서 코어들(18A와 18n)은 노스브릿지 유닛(Northbridge Unit)(290)에 연결된 버스 인터페이스 유닛(220)과 연결되어 있고, 노스브리지 유닛은 메모리 컨트롤러(316A)에 연결되어 있으며, HyperTransportTM 인터페이스 로직 318A-318C에 연결되어 있고, 그리고 단일방향성의 링크들(324I-324J)의 쌍을 통하여 동기 조정기(230)에 연결되어 있다.
프로세서 코어(18A)는 명령들을 수행하도록 설정된 하드웨어를 포함한다. 특히, 많은 프로세서들의 전형으로서, 프로세서 코어(18A)는 하나 또는 그 이상의 명령 수행 파이프라인들을 포함하는데, 이 파이프라인들은 여러 개의 파이프라인 단계(stage)들, 캐시 저장과 제어, 그리고 어드레스 번역 메커니즘(간결함을 위해 적합한 일부분들만 도시된)을 포함한다. 이에 따라, 도시된 프로세서 코어(18A)는 제 1 레벨(L1) 명령 캐시, 사전 인출 로직(prefetch logic), 분기 예측 로직(branch prediction logic)을 포함한다. 이 블럭들은 명령 캐시에 가깝게 결합되어 있기에, 도면에서 블럭(250)으로 도시되었다. 프로세서 코어(18A)는 또한 L1 데이터 캐시(207)을 포함한다. 프로세서 코어(18A)는 또한 명령 디코더(255)와 명령 디스패치(dispatch), 컨트롤 유닛(256)을 포함하는데, 명령 디스패치(dispatch)와 컨트롤 유닛은 명령 디코더(255)로부터의 명령들을 수신하고 스케줄러(259)에 연산을 신속하게 처리하기 위해 결합되어 있을 수 있다. 그리고, 명령 디스패치와 컨트롤 유닛(256)은 (도시되지 않은)MROM(microcode read-only memory)에 결합되어 있을 수 있다. 스케줄러(259)는 명령 디스패치와 컨트롤 유닛(256)로부터의 신속히 처리된 연산들을 수신하고 실행 유닛들(260)에 연산들을 전달하기 위해 결합되어 있다. 다양한 실행방안들에서, 실행 유닛들(260)은 어느 개수의 정수 실행(integer execution) 유닛들과 부동 소수점(floating-point) 유닛들을 포함할 수 있다. 또한, 프로세서 코어(18A)는 TLB(206)와 로드/저장 유닛(270)을 포함한다. 주목되어 야 할 사항으로서, 대안적인 실시예에서 온-칩 L2 캐시가 (도시되지 않았지만) 존재한다.
정 명령들을 실행 유닛들(260) 내부에서 실행가능한 연산들로 디코딩할 수 있다. 명령 디코더(255)는 MROM 내부에 저장된 연산들을 이용하여 직접적 또는 간접적으로 디코딩될 수 있는 명령들을 연산들로 디코딩하도록 설정되어 있다. 명령 디코더(255)는 특단순한 명령들은 단일 연산에 대응될 수 있고, 다른 실시예에서는, 보다 복잡한 명령들은 다중 연산들에 대응될 수 있다. 일 실시예에서, 명령 디코더(255)는 (도시되지 않은)다수의 디코더들을 포함할 수 있다. 각 명령은 연산들이 처음에 MROM에 라우팅되었는지 여부에 따라 다수의 단계에서 컨트롤 값들의 세트로 정렬되고 디코딩될 수 있다. 이 컨트롤 값들은 명령 스트림에서 명령 스트림에서 명령 디스패치, 연산수(operand) 어드레스 정보가 동반되는 컨트롤 유닛(257), 그리고 명령이 포함될 수 있는 변위 데이터(displacement data) 또는 즉시 데이터(immediate data)에 라우팅될 수 있다. 아래에서 더 설명될 바와 같이, 메모리 참조 명령이 LOCK 프레픽스를 포함할 때, 명령 디코더는 마커로 어드레스를 식별할 수 있다.
로드/저장 유닛(270)은 실행 유닛들(260)과 데이터 캐시(270) 사이에 인터페이스를 제공하도록 설정될 수 있다. 일 실시예에서, 로드/저장 유닛(270)은 데이터를 위한 여러 저장 위치들과 로드 EH는 저장로드/저장 버퍼들을 포함할 수 있다. 그와 같이, 예시된 실시예는 LS1(205), 선형 LS2(209), 물리적 LS2(210), 데이터 저장부(211)를 포함한다. 또한, 프로세서 코어(18A)는 마커 로직(208)과 마커 비 트(213)를 포함한다.
일 실시예에서, 임계 섹션은 결정적으로(deterministically) 또는 낙관적으로(optimistically)의 두 가지 방법 중 하나로 처리될 수 있다. 실행의 선택은 아래에 더 자세히 설명된 바와 같이 개선된 동기 설비의 구성에 기초할 것이고 임계 섹션 예측기의 상태에 기초할 것이다. 다양한 실시예들에서, 기초 입/출력 시스템(BIOS)과 운영 체제(OS), 또는 가상 메모리 매니저(VMM) 중 어느 것은 개선된 동기 설비의 연산 모드로 설정할 수 있다. 결정적 실행 모드에서 연산할 때는, 잠긴 메모리 참조 명령들에 의해 지정된 어드레스들은 하나로 묶일 수 있고(bundled up) 간섭을 위해 검사되도록(examined) 한 묶음으로 동기 조정기(230)에 전송된다. 캐시 라인 데이터가 얻어질 수 있으며 임계 섹션이 (가능한 대로) 수행될 수 있다. 반면에, 낙관적 동기 모드에서 연산할 때는, 어떠한 간섭도 나타나지 않고, 임계 섹션이 (동기 조정기(230)를 피하여(bypassing))수행될 수 있으며, 어느 다른 프로세서가 이 임계 섹션과 간섭을 일으킨다면, 이 간섭은 탐지될 것이며 그 후 프로세서는 ACQUIRE 명령으로 돌아가며 극소 단계(atomic phase)로부터 제어 흐름(control flow)을 리다이텍팅(redirecting)한다.
상기 결정적 모드를 실시하기 위해서, 개선된 동기 설비는 동기 조정기(230)를 이용할 수 있다. 위에서 설명된 대로, 동기 조정기(230)는 동기 요구와 관련된 모든 물리적 어드레스들을 검사하고, 어드레스들의 세트를 통과시키거나 실패(i.e 거부)시키는데, 이러한 동작은 어드레스들이 연산되고 있는 도중에 어느 다른 프로세서 코어나 요구자(requestor)가 이러한 어드레스들에서 연산하거나 어드레스들을 요구하는지에 기초한다. 그것으로서, 동기 조정기(230)는 소프트웨어가 미리 간섭을 피할 수 있게 구성되도록 한다. 간섭이 동기 비터(230)에 의해 탐지될 때, 동기 조정기(230)는 프로세서 코어에 요구하기 위해 특유의 숫자(예컨대, 카운트 값(233))를 포함하는 실패 상태로 요구에 응답할 수 있다. 일 실시예에서, 카운트는 요구되는 메모리 리소스들을 놓고 경합하는 요구자들의 숫자를 나타내는 것일 수 있다. 소프트웨어는 이 숫자를 임계 섹션 억세스를 시도하고자 하는 다른 리소스를 선택하는데에 이 숫자를 사용함으로서 임계 섹션을 통한 후속되는 트립들(trips)로 프로액티브하게 간섭을 피하는 데에 이용할 수 있다.
따라서, 도 2에 도시된 바와 같이, 동기 조정기(230)는 여러 개의 엔트리를 갖는 저장공간(storage)(232)을 포함한다. 각 엔트리는 현재 연산 중에 있는 하나 또는 그 이상의 물리적인 요구 어드레스들을 저장할 수 있다. 일 실시예에서, 각 엔트리는 단일 64-바이트 요구로서 운송되는 8 개의 물리적인 어드레스들을 축적할 수 있다. 또한, 동기 조정기 엔트리는 카운트 값(233)을 포함하는데, 이 카운트 값(233)은 엔트리의 모든 어드레스들에 대응된다. 아래에 설명된 바와 같이, 카운트 값은 임계 섹션에서 어느 어드레스들을 놓고 경합하는 요구자(i.e. 간섭자)들의 숫자를 나타낼 수 있다. 동기 조정기(230)가 어드레스들의 세트를 수신할 때, 동기 조정기(230) 내부의 비교 유닛(231)은 세트의 각 어드레스와 저장공간(232)의 모든 어드레스들 사이에서의 매치를 검사한다. 만일 매치가 없는 경우에는, 동기 조정기(230)는 태싱 카운트 값을 리턴하고 저장공간(232) 내부의 어드레스들에 저장함에 의해 통과 응답을 보내도록 설정될 수 있다. 일 실시예에서, 적합한 카운트 값 이 사용될 수 있다 하더라도 상기 패싱 카운트 값은 0이다. 그러나, 만일 어드레스 매치가 존재하는 경우에는, 동기 조정기(230)는 매칭되는 어드레스를 포함하는 어드레스들의 세트에 관련된 카운트 값(233)을 증가시키고, 그 후 실패 응답의 일부분으로서 그 카운트 값을 리턴시켜준다. 비교 유닛(231)은 필요에 따라 갖가지 방법으로 구현된 구조체만 비교할 수 있음을 주목해야 한다. 또한, 다른 실시예에서, 저장공간(232)에 저장된 각 어드레스는 개별적인 카운트와 관련된다. 그것으로서, 카운트 값은 임계 섹션의 개별적인 어드레스 중 하나를 놓고 경합하는 요구자들(간섭자들)의 숫자를 나타낸다.
예시된 실시예에서, 버스 인터페이스 유닛(220)은 카운트 비교 회로(221), 잠긴 라인 버퍼(LLB)(222)와 예측기(223)을 포함한다. BIU(220)은 또한 트랜잭션 송신 및 수신과 관련된 다양한 다른 회로들을 포함하는데, 이 회로들은 명쾌함을 위해 생략되었다. 그것으로서, BIU(220)는 ACQUIRE 명령의 실행에 대한 응답으로 임계 섹션과 관련된 어드레스들의 세트를 LLB(222)로부터 동기 조정기(230)에 송신하도록 설정될 수 있다. 또한, 비교 회로(221)는 카운트가 성공 카운트 값(예컨대 0)인지 또는 실패 카운트 값인지를 검사하기 위해 동기 조정기(230)에 의해 리턴된 카운트 값을 비교하도록 설정될 수 있다. SBB(22)는 저장 공간 구조의 어느 종류를 사용하여 구현될 수 있음을 주목해야 한다. 예를 들어, 필요에 따라 SBB(22)는 현재의 MAB(memory address buffer)의 일부분이거나 분리된 것일 수 있다.
위에서 설명된 바와 같이, 프로세서 코어(18)가 결정적 동기 모드에서 연산할 경우, 임계 섹션과 관련된 어드레스들은 명령 디코딩 도중 LOCK 프레픽스를 사 용함에 의해 마킹될 수 있다. 특히, 개선된 동기 코드 시퀀스들에 명시적으로 참여하는 메모리 참조들은 적절한 MOV 명령과 함께 LOCK 프레픽스를 사용함에 의해 주석이 달릴 수 있다(annotated). LOCKed Kiad 명령들은 아래의 형식을 가질 수 있다.
LOCK MOVx reg,[B+I*s+DISP].
특히, 일반적인 메모리 읽기 명령은 LOCK 프레픽스를 부가함으로써 특별해질 수 있다. 이것은 어드레스가 L1 캐시(그리고 TLB(206))를 통과함에 따라 BIU(220)가 연합되고(associated) 마킹된 물리적 어드레스를 LLB(222)에 모으도록 유도한다. 또한, 메모리 억세스 강도(strength)는 쓰기 권한(write permission) 없이(ReadS, not ReadM or Read) 라인에 억세스하도록(캐시 미스(miss)의 경우) 감소된다. Load 명령은 ACQUIRE 명령이 동기 조정기(230)로부터 리턴될때까지 LS2에서 물러나지 않는다.
BIU(220)으로부터(동기 조정기(230)에)의 요구가 응답을 기다리고 있는 도중에, LLB(222)는 무효화된(INValidate) 시맨틱(semantic)들의 프로브들을 관찰하고, 만약 하나가(또는 그 이상이) 발생한다면, ACQUIRE 명령은 실패하게 될 것이고, 동기 조정기(230)가 성공을 리턴하더라도 그렇게 된다. LOCK 프레픽스는 어느 특정한 캐시 또는 버스의 잠금을 유도하지는 않지만, 메모리에 기반한 MOVe 명령들에 부가되도록 편리한 마커를 단순히 제공한다. 그것으로서, 메모리 명령들(LOCKed Loads로 언급될 수도 있는)에의 LOCKed MOV는 데이터 캐시 파이프라인을 노멀리-다운(normally down) 시키도록 처리될 수 있다.
따라서, 어드레스 번역 도중 각 선형 어드레스는 LS2(209)의 선형 어드레스 부분 내부에 저장될 수 있다. 이에 대응되는 데이터가 데이터 캐시(207)와 데이터 LS2(211)에 저장될 수 있는 한편, 대응되는 물리적 어드레스들은 TBL(206)에, 그리고 물리적 LS2(210) 내부에 저장될 수 있다. 마커 로직(208)은 LOCK 프레픽스 마커가 디코딩 도중 발생하는지 탐지할 수 있고 추가적인 마커 비트(213)를 발생시킬 수 있으며, 그에 의해 각 어드레스를 임계 섹션에서의 참여자로서 마킹할 수 있다. 데이터 캐시의 미스를 가져오는 어느 LOCKed Load는, 쓰기 권한이 검사되었다 하더라도 그것의 캐시 라인 데이터가 메모리 계위(hierarchy)를 통해 Read-to-Share 억세스 시맨틱으로 인출(fetched)되게 한다.
위에 설명된 바와 같이, 프로세서 코어(18)가 결정적 동기 모드에서 연산할 경우에, 임계 섹션에 관련된 어드레스들은 LOCK 프레픽스를 이용함에 의해 명령 디코딩 도중 마킹될 수 있다. 특히, 개선된 동기 코드 시퀀스들에 명시적으로 참여하는 메모리 사전 인출 레퍼런스들은 적절한 PREFETCHW 명령와 같이 LOCK 프레픽스를 사용함에 의해 주석이 달릴 수 있다. 이러한 종류의 LOCKed Load 명령는 아래의 형식을 가질 수 있다.
LOCK PREFETCHW [B+I*s+DISP].
그래서, 일반적 메모리 PREFETCHW 명령은 LOCK 프레픽스를 부가함에 의해 특별해진다. 이는 BIU(220)가 어드레스가 L1 캐시(그리고 TLB(206))를 통과함에 따라 BIU(220)가 연합되고(associated) 마킹된 물리적 어드레스를 LLB(222)에 모으도록 유도한다. 또한, 메모리 억세스 강도는 라인에 실제로 억세스하는 것을 피하도록 감소된다. PREFETCHW 명령은 ACQUIRE 명령이 동기 조정기(230)로부터 리턴될때까지 LS2에서 물러나지 않는다. 이 명령들은 임계 섹션에 참여하고 또한 임계 섹션에 필요한 다른 데이터를 터치하기 위해 데이터(예컨대 포인터)를 필요로 하는 캐시 라인들을 터치하는 데에 이용될 수 있다. 지정 단계(specification phase)에서의 결론에서, ACQUIRE 명령은 임계 섹션을 위한 모든 메모리 참조 어드레스들이 LLB(222)에 저장되어있음을 BIU(220)에 통지하는 데에 이용된다.
ACQUIRE 명령은 아래의 형식을 가질 수 있다.
ACQUIRE reg, imm8
ACQUIRE 명령은 LOCKed 메모리 참조 명령들의 숫자가 ACQUIRE 명령에서의 임시값들과 같은지를 검사한다. 검사가 실패할 경우, ACQUIRE 명령은 실패 코드로 종료되고, 실패하지 않는 경우에는 ACQUIRE 명령은 BIU(220)가 LLB(222)에 저장된 모든 어드레스들을 동기 조정기(230)에 전송하도록 유도한다. 이 명령는 동기 조정기(230)로부터 리턴된 카운트 값은 모든 라인들이 간섭 없이 억세스될 수 있는지를 확인(또는 부인)하는 데에 이용될 수 있게 하기 위하여 데이터 패스(path)에서의 메모리 참조 명령처럼 보인다. 어떠한 어드레스도 이 '로드' 명령을 위해 필요하지 않고, 이는 단위 가상 머신 또는 단위 시스템마다 오로지 1개의 동기 조정기(230)만 존재하기 때문이다. ACQUIRE 명령에 의해 지정된 레지스터는 프로세서 코어(18)의 목적(destination) 레지스터이다.
일 실시예에서, LOCKed Load 연산의 시맨틱들은 무효 프로브(Probe with INValidate)(예컨대 PROBE Inv or PROBE ReadM)의 위치를 모니터링하는 프로브를 포함할 수 있다. 만일 무효 프로브(Probe with INValidate) 위치가 탐지되면, LS1 또는 LS2 큐(queue)는 읽기가 완료되는 것을 기다리지 않고 실패 상태를 리턴할 수 있다. 만일 LOCKed 로드들이 마이크로 구조 한계를 초과할 경우에는 일반-목적 폴트(general-purpose fault)(#GP)가 발생할 수 있다. 만일 ACQUIRE 명령이 실패할 겨우에는, LOCKed 로드들의 카운트는 0으로 리셋될 것이다. 만일 어드레스가 메모리 형(type)으로 후기입(Write Back)되지 않으면, 명령은 페이지 폴트(#PF)또는 #GP 폴트를 발생시키거나 ACQUIRE를 실패하도록 할 수 있다(후속단계로 진입시).
몇몇 임계 섹션들이 데이터 수정이 적절한 것인지를 계산하도록 여러 개의 연산 및 제어 흐름 결정들을 포함할 수 있음이 기대된다. 그러나, 소프트웨어는 이 유형의 명령들이 실제로 제외되지 않도록 조정해야 한다. 일 실시예에서, 연산과 메모리 참조 명령들은 모두 SSE 레지스터들(XMM)에서 처리될 수 있거나, 일반-목적 레지스터들(예컨대 EAX 등)에서, 또는 MMX나 x87 레지스터에서 처리될 수 있다.
위에서 설명된 바와 같이, 동기 조정기(230)는 요구 묶음을 성공(pass)시키거나 실패시킨다. 만일 동기 조정기(230)가 요구에 실패한 경우에는, BIU(220)으로 돌아오는 응답은 0비트 세트(예컨대 RFLAGS.ZF)로 "동기 조정기 Fail-to-ACQUIRE"로 언급될 수 있다. 위에서 설명된 바와 같이, 동기 조정기(230)에 의해 리턴되는 응답은 카운트 값(233)을 포함할 수 있는데, 이는 간섭자들의 숫자를 나타내는 것일 수 있다. 소프트웨어는 이 카운트를 위에 설명된 대로 미래의 간섭을 줄이는 데에 사용할 수 있다. 동기 조정기(230)로부터의 카운트 값(233)은 프로세서 코어(18) 내부의 일반 목적 레지스터(도시되지 않은)에 전달될 수 있고 조건 코 드(condition code)들을 세팅하는 데에 이용될 수도 있다. 동기 조정기(230)가 요구에 성공한 경우에는, BIU(220)으로 돌아오는 응답은 패스 카운트 값(예컨대, 0)을 포함할 수 있다.
일 실시예에서, 동기 조정기 어드레스 저장공간(232)가 가득찬 경우에는, 요구는 예를 들어 (-1)과 같은 음의 카운트 값으로 리턴될 수 있다. 이는 프로세서 코어에서 실행되는 소프트웨어에 시스템 내의 오버로드를 보기 위한 수단을 제공하고 이 소프트웨어가 동기 조정기(230)에 잠깐 동안 요구를 멈추게 하는 것을 가능하게 한다.. 예를 들어, 소프트웨어는 무엇인가의 스케쥴을 조정하거나 동기를 재시도하기 전에 약간의 시간을 단순히 낭비할 수도 있다.
카운트가 0인 경우(동기 조정기(230)에 의해 관찰된 간섭자가 없는 경우를 의미)에는, 프로세서 코어(18)는 필요에 따라 임계 섹션에서 명령들을 실행할 수 있고 캐시 라인들에서 데이터를 조작할 수 있다. 데이터 조작이 완료된 때에는, RELEASE 명령이 임계 섹션의 종료를 알리도록 실행된다. 일 실시예에서, RELEASE 명령은 동기 조정기(230)에 RELEASE 메시지를 전송함에 의해 모든 수정된 데이터가 실질적으로 동시에 보이도록 만들고, 이로써 연합된 캐시 라인들을 시스템으로 돌려보낼 수 있다.
위에서 설명된 바와 같이, 임계 코드 섹션은 LOCK 프레픽스를 가지며 ACQUIRE 명령이 뒤따르는 하나 또는 그 이상의 메모리 참조 명령들을 포함할 수 있다. 또한, 동기 조정기(230)가 Fail-to-Acquire 코드를 제공하거나 무효 프로브(Probe with INValidate)가 캐시 라인들 획득에 앞서서 탐지된 경우에는, 조건부 점프(conditional jump) 명령은 코드가 임계 섹션에서 빠져나오게 하기 위하여 ACQUIRE 명령 뒤에 후속된다. 몇몇 구현방안에서, 조건부 점프는 RELEASE 명령이 뒤따를 수 있다. 2 개의 어셈블리 언어 임계 코드 섹션들이 임계 섹션들의 두 종류들을 예시하도록 아래에 나타나 있다. 뒤따르는 코드 세그먼트들은 단지 논의를 위한 예제일 뿐임을 주목해야 할 것이다. 이와 다른 실시예들이 가능하고 고려될 수 있다.
아래의 제 1 예제 코드 세그먼트는 이중 링크된(doubly linked) 리스트에서 요소의 제거를 예시하고, RELEASE 명령을 이용함을 예시한다.
// Concurrency Queue Version
//p is in RAX
LOCK MOVD A,[RAX+next] // a=p->next
LOCK MOVD B,[RAX+prev] // b=p->prev
LOCK MOVD C,[A+next] // c=a->prev
LOCK MOVD D,[B+next] // d=b->next
ACQUIRE reg
JNZ fails
MOVD [A+next],D // a->prev=d
MOVD [B+prev],C // b->prev=c
MOVD [RAX+next],0 //p->next=NULL
MOVD [RAX+prev],0 //p->prev=NULL
RELEASE
아래의 예시적인 코드 세그먼트는 이중 링크된 리스트에 요소를 삽입하고 RELEASE 명령을 사용하는 것을 예시한다.
// Concurrency Queue Version
//q is in RAX
//p is in RSI
LOCK MOVD S,[RAX+next] // s=q->next
LOCK PREFETCHW [RSI+prev] // touch p->prev
LOCK PREFETCHW [RSI+next] // touch p->next
LOCK PREFETCHW [S+next] // touch s->next
ACQUIRE reg
JNZ fails
MOVD [RAX+next],RSI // q->next=p
MOVD [S+prev],RSI // s->prev=p
MOVD [RSI+next],S //p->next=s
MOVD [RSI+prev],RAX //p->prev=q
RELEASE
일 실시예에서, 개선된 동기 설비는 두 종류의 실패들을 지원하는데, 이는 "Fail-to-ACQUIRE"와 "Fail-to-REQUESTOR"이다. 상기 Fail-to-ACQUIRE는 후속되는 조건부 점프 명령이 극소 단계에서 명령들을 유발시키는 데미지로부터 제어 흐름을 리다이렉팅(redirecting)할 수 있도록 ACQUIRE 명령이 0 비트 세트(예컨대 RFLAGs.ZF)로 완료되게 한다. 0 비트 세트의 동기 조정기 Fail-to-ACQUIRE는 Fail-to-ACQUIRE 실패의 한 종류이다. 프로세서 Fail-to-ACQUIRE는 이와는 다른 종류이다. 일 실시예에서, 임계 섹션들의 수행 도중, 프로세서 코어들은 메모리 트랜잭션들을 관찰함으로써 통신할 수 있다. 이 관찰들은 실행되는 프로세서 코어의 ACQUIRE 명령에서 보이게 될 수 있다. 특히, 임계 섹션에 필요한 어드레스들 수집의 시작과 동기 조정기(230)의 응답 사이의 시간 도중에, 프로세서 코어(18)는 코히어런트 무효 프로브들(예컨대 Probe with INValidate)을 위한 모든 어드레스들을 모니터링한다. 어느 라인들이 무효화된 경우, 동기 조정기(230)로부터의 응답은 무시될 수 있고 ACQUIRE 명령은 0 비트 세트로(예컨대 RFLAGs.ZF) 되는 데 실패한다.
간섭을 위해 검사되고 동기 조정기(230)에 의해 통과된 라인에서 캐시 히트가 존재하는 경우, Fail-to-REQUESTOR 실패는 PROBE 응답으로서 전송될 수 있다. Fail-to-REQUESTOR 응답은 그것이 개선된 동기 설비 임계 섹션에서 현재 프로세싱 중인 경우 요구하는 프로세서가 Fail-to-ACQUIRE 하도록 하거나, 임계 섹션에서 프로세싱되지 않는 경우에는 요구하는 프로세서의 BIU가 메모리 요구를 다시 요구하도록 한다. 그것으로서, BIU(220)는 동기 조정기(230)으로부터 통과 통지를 받기 전에 무효 프로브(Probe with INValidate)를 수신한 것에 대한 응답으로 Fail-to-ACQUIRE를 유발하도록 설정될 수 있다.
임계 섹션의 어드레스들이 한 번 획득되면, 어드레스들이 동기 조정기(230)에 의해 통과되게 한 프로세서 코어(18)는 독점적 억세스(예컨대 쓰기 권한)를 위 한 각 캐시 라인들을 극소 단계에서 처리된 메모리 참조 명령들로서 얻을 수 있다. 통과된 캐시 라인이 도달한 후에, 프로세서 코어(18)는 그 캐시 라인을 홀딩하고 다른 프로세서 코어들이 Fail-to-REQUESTOR 응답들로 코히어런트 무효 프로브들에 응답함에 의해 그 라인을 뺏어가는 것을 방지할 수 있다. Fail-to-REQUESTOR는 NAK(negative-acknowledgement)로도 언급될 수 있음을 주목해야 한다.
위에서 설명된 바와 같이, 프로세서가 Fail-to-REQUESTOR를 수신하고 현재 개선된 동기 명령 시퀀스에 참여하고 있는 경우에, 그 명령 시퀀스는 ACQUIRE 명령에서 실패하도록 유발될 수 있다. 이 경우에, 후속되는 조건부 점프가 실행되고 임계 섹션에서 메모리 참조 명령들의 부분을 유발시키는 데미지가 예방되게 된다. 그러나, 프로세서가 Fail-to-REQUESTOR를 수신하고 개선된 동기 명령 시퀀스에는 참여하지 않는 경우, 요구하는 프로세서의 BIU는 원래의 메모리 트랜잭션을 재요구할 수 있다. 그래서, Fail-to-REQUESTOR의 전송과, 통과된 임계 섹션에서의 다음 코히어런트 무효 프로브의 후속되는 도착 사이의 경과 시간은 동기 조정기에 힘입어 프로세서의 진보를 보장되게 한다. 이 진보의 보장은 개선된 동기 설비가 경합 하에서 현재 존재하는 동기 메커니즘들보다 더욱 효율적이 되게 한다. 따라서, 곧 또는 나중에, 임계 섹션과 간섭 메모리 참조가 함께 수행될 것이다(예컨대, live-lock도 dead-lock도 아닌).
위에서 설명된 바와 같이, 개선된 동기 설비에 참여하는 프로세서의 성능은 임계 섹션 예측기(223)의 사용에 의해 극대화될 수 있다. 초기에 예측기(223)는 어떠한 간섭도 임계 섹션의 실행 도중 기대되지 않게 예측하도록 세팅되어 있을 수 있다. 이러한 모드에서, 프로세서 코어(18)는 사실상 동기 아비터(230)를 사용하지 않을 것이다. 대신 프로세서 코어(18)는 LOCKed 메모리 참조들을 기록할 수 있고 코히어런트 무효 프로브들(Coherent Invalidation PROBEs)에 대응하여 간섭을 탐지하도록 LOCKed 메모리 참조들을 검사할 수 있다. 임계 섹션의 종료가 어느 간섭이 탐지되기 전에 도달되었다면, 임계 섹션의 활동도 보이기 어려울 것이고 임계 섹션은 극소로 실행된 것처럼 동작해왔을 것이다. 이러한 특성은 개선된 동기 설비가 어떠한 경합(contention)도 관찰되지 아니한 경우에 현재 존재하는 동기 메커니즘들과 프로세서 주기로 경쟁할 수 있게 한다.
특히, 간섭이 탐지된 경우에는, 프로세서 코어(18)는 ACQUIRE 명령을 위한 실패 상태를 만들 수 있고 후속되는 조건부 브랜치는 임계 섹션으로부터 제어 흐름을 리다이렉팅하며, 예측기를 결정적 모드 예측을 위해 리셋한다. 다음의 임계 섹션이 탐지된 경우에는, 디코더는 간섭이 일어나는지 예측하고, 동기 조정기(230)를 이용하여(이용 가능하다면) 임계 섹션을 진행시킨다.
일 실시예에서, 개선된 동기 설비는 오정렬된(misaligned) 데이터 아이템들이 실제 임계 섹션에 참여하지 않는 캐시 라인들에 걸쳐져 있지 않은 경우에는이 데이터 아이템들을 수정할 수 있다. 소프트웨어는 모든 터칭된 캐시 라인들이 임계 섹션 엔트리의 일부분으로서 언급되는 한, 동기 아이템들이 캐시 라인 경계들에 걸쳐져 있게 하는 것에 있어서 자유롭다. 데이터 아이템이 캐시 라인으로부터 동기 통신의 부분이 아닌 다른 캐시 라인에 걸쳐져 있는 경우에는, 프로세서는 극소의 실패를 탐지하지도 않고 극소성 부족의 신호를 탐지하지도 않는다.
또한, 임계 섹션 데이터에의 억세스는 주 메모리 내의 데이터의 존재에 종속될 수 있다. 임계 섹션에 필요한 모든 라인들은 임계 섹션으로의 ENTRY 이전에 터치되고, 임계 섹션 진입 이전에 LOCKed Load 또는 LOCKed PREFETCHW 명령들이 수행될 때는 어느 억세스 권한 문제들 또는 페이지-폴트 문제들이 탐지될 수 있다. 어느 리드 인(lead-in) 어드레스들이 폴트를 가져온 경우, 후속되는 ACQUIRE 명령이 실패하게 된다. 임계 섹션으로의 입력 이후에, 어느 명령이 예외를 유발시킨경우, 프로세서는 ACQUIRE 명령에서 실패를 유발시키고, 후속되는 조건부 점프가 임계 섹션으로부터 제어를 리다이렉팅한다.
일 실시예에서, 프로세서 코어(18)의 디코더가 인터럽트를 발생시켜야 한다면, 디코더는 ACQUIRE 명령이 0 비트 세트(예컨대 RFLAGS.ZF)로 실패하도록 조정할 것이며, ACQUIRE 명령에서 인터럽트를 발생시킬 것이다.
동기 조정기(230)이 HyperTransportTM 구조 내에서 노스브리지 유닛에 연결되어 있는 실시예들에서, 동기 조정기(230)는 어떠한 다른 구성요소도 갖지 못한 미리결정된 그리고/또는 보호된 노드 ID를 할당받는 점을 주목해야 한다. 이 할당은 예를 들어 BIOS에 의한 부팅 시간(boot time)에서 이루어진다. 또한, 상기의 실시예들에서, 다른 값들이 고려될 수 있지만, 카운트 값은 64-비트 값으로 리턴될 수 있다.
도 3은 도 1과 도 2에 나타난 컴퓨터 시스템의 실시예들의 연산을 설명하는 순서도이다. 도 1부터 도 3까지 종합하여 참조해 보면, 블럭(405)에서 임계 섹션에 서 현재 연산중이거나 임계 섹션의 부분으로서 억세스된 캐시 라인들의 어드레스들은 리스트에서 유지되고(예컨대 LLB(222) 내부에서) 있다. 예를 들어, 동기 조정기(230)는 어드레스들을 대응되는 임계 섹션에 세트로서 어드레스 저장공간(232)의 엔트리 내부에 저장할 수 있다. 일 실시예에서, 어드레스 저장공간(232)의 각 엔트리는 또한 저장된 어드레스들의 전체 세트에 관련된 카운트 값을 저장할 수 있다(블럭(410)). 위에서 설명된 바와 같이, 카운트 값은 세트 내의 어느 어드레스들을 위한 경합자들(contenders)(i.e. 간섭자들(interferers))의 숫자를 나타내는 것일 수 있다. 또 다른 실시예에서, 동기 조정기(230)는 각 엔트리 내부에 카운트 값들의 숫자를 저장할 수 있고, 엔트리의 각 어드레스는 연합된 카운트 값을 갖는다.
개선된 동기 설비를 구현하는 프로세서 또는 프로세서 코어가 하나 또는 그 이상의 캐시 라인들에 극소 억세스를 요구하는 경우에는, 상기 요구는 임계 코드 섹션의 형식에서 나온(come in) 것이다. 예를 들어, 위에서 설명된 바와 같이, 극소 방식에서(모든 바깥 관찰자들에게 보이는 대로) 명령들의 완성을 보장하기 위해 임계 섹션은 ACQUIRE 명령과 RELEASE 명령이 뒤따르게 되는 LOCKed MOV 명령들의 사용을 포함할 수 있다. 따라서, 요구된 어드레스들의 세트는 간섭을 위해 검사받는다. 일 실시예에서, 어드레스들의 세트는 어드레스 저장공간(232) 내부의 모든 어드레스들에 비교된다(블럭(420)). 위에서 설명된 실시예들에서, LOCKed MOV 명령들은 어드레스들이 마킹되도록 유도한다. 마커는 BIU(220)가 각 마킹된 어드레스를 LLB(222)에 저장하도록 유도한다. ACQUIRE명령은 BIU(220)가 LLB(222)의 전체 어드레스 세트를 동기 조정기(230)에 64-바이트 물리적 어드레스 데이터를 운반하 는(carry) 언캐시어블(unCacheable) 쓰기 형식으로 전송하도록 유도한다. 동기 조정기(230)는 어드레스들의 세트를 저장공간(232)의 모든 어드레스들과 비교한다.
만일 어느 어드레스에 매치가 존재하는 경우(블럭(425)), 매칭 어드레스와 관련된 카운트 값은 증가되고(블럭(455)) 64-비트 응답 데이터를 운반하는 언캐시어블 쓰기에 대한 실패 응답의 부분으로서 새로운 카운트 값이 BIU(220)에 리턴된다(블럭(460)). 또한, 동기 조정기(230)는 실패에 있어서 어드레스들의 세트를 버린다. BIU(220)는 실패 카운트 값을 요구하는 프로세서/코어의 레지스터에 전송하는데, 이 프로세서/코어는 또한 조건 코드 플래그들(condition code flags)을 세팅할 수 있다. 그 결과, 상기 요구하는 프로세서/코어는 그 다음의 연산에서 카운트 값을 또 다른 메모리 리소스들의 세트를 선택하는 데에 사용할 수 있고(블럭(465)), 그것의 다음 동기 시도에서의 간섭을 피할 수 있다. 연산은 위에 설명된 블럭(415)로 진행한다.
블럭(425)으로 돌아가 보면, 만일 저장공간(232)에 매칭되는 어드레스가 없다면, 동기 조정기(230)는 패싱 카운트 값(예컨대 0)을 BIU(220)에 리턴할 수 있다(블럭(430)). 또한, 동기 조정기(230)는 저장공간(232)의 엔트리에 어드레스들의 세트를 저장할 수 있다(블럭(435)). BIU(220)는 ACQUIRE 명령으로 지정된 요구하는 프로세서/코어 레지스터에 패싱 카운트 값을 전송할 수 있다. 그것으로서, 상기 요구하는 프로세서/코어는 데이터를 조작하거나 그렇지 않으면 요구된 어드레스들에서 데이터에 영향을 끼칠 수(operate on) 있다. 만일 연산이 완료되지 아니한 경우에는(블럭(445)), BIU(220)는 완료 메시지를 동기 조정기(230)에 보내는 것을 연기 한다. 임계 섹션에서의 연산이 RELEASE 명령이 수행된 때처럼 완료된 경우에는, BIU(220)는 완료 메시지를 동기 조정기(230)에 전송한다. 완료 메시지를 수신받은 동기 조정기(230)는 대응되는 어드레스들을 저장공간(232)로부터 몰아내고(flush), 그것에 의해 또 다른 프로세서/코어의 사용을 위하여 그 어드레스들이 시스템으로 돌아가도록 한다(블럭(450)). 또한, 로드/저장 유닛(270)은 임계 섹션의 모든 물러간 명령들을 위한 데이터 캐시를 업데이트한다.
위에서 설명된 바와 같이, 코히어런시 무효 프로브는 임계 섹션의 프로세싱 도중 임계 섹션에서 어드레스와 히트되는데(hit on), 그 프로브에 대한 응답은 임계 섹션의 프로세싱 상태에 종속될 수 있다(i.e. 캐시 라인들이 획득되는지 아닌지). 도 4는 코히어런시 무효 프로브가 수신된 때 도 1과 도 2의 실시예들의 연산을 설명하는 순서도이다.
도 1부터 도 4까지 종합하여 참조해 보면, 도 4의 블럭(505)에서, 무효 프로브(Probe with INValidate)가 수신되고 로드/저장 유닛(270)에서 임계 섹션 어드레스와 마주친다. 만일 요구된 라인들이 성공적으로 획득된 경우에는(블럭(510))(예컨대 동기 조정기(230)가 패스 카운트 값을 제공하고 저장공간(232) 내부에 어드레스들의 세트를 저장한 후에 코히어런시 무효 프로브가 수신된 경우), BIU(220)는 Failure-to-Requestor를 프로브에 대한 응답으로서 전송할 수 있다(블럭 (515)). 요구하는 프로세서 코어에서, 프로세서 코어가 임계 섹션에서 연산중인 경우에는 이 Failure-to-Requestor 응답은 ACQUIRE 명령의 실패를 유도해야 하고, 그렇지 않은 경우에는 어드레스들의 재시도가 이루어져야 한다.
블럭(510)으로 돌아가 참조해 보면, 요구된 라인들이 획득된 경우에는, 프로세서 코어는 동기 조정기로부터 수신된 어떤 카운트 값도 무시할 수 있다(블럭(520)). 로드/저장 유닛(270)은 프로브 히트(hit)(예컨대 Prb hit signal)가 있음을 명령 디스패치와 컨트롤 유닛(257)에 통지할 수 있고, 그 결과 Failure-to-Requestor가 존재하게 된다. 그것으로서, ACQUIRE 명령은 위에 설명된 대로 실패하게 된다. 그것으로서, 바깥쪽의 관찰자에게는 ACQUIRE 명령이 단순히 실패한 것으로 보인다.
주목되어야할 사항으로서, 위에서 설명된 컴퓨터 시스템(100)이 하나 또는 그 이상의 프로세서 코어를 갖는 프로세싱 노드들을 포함함에도 불구하고, 다른 실시예들에서, 개선된 동기 설비와 그에 연관된 하드웨어가 필요에 따라 자립형(stand-alone) 프로세서 또는 프로세싱 노드들과 자립형 프로세서의 조합을 사용하여 구현될 수 있음이 고려되어야 할 것이다. 그러한 실시예들에서, 각 자립형 프로세서는 상기 설명된 하드웨어의 전부 또는 일부를 포함할 수 있고 개선된 동기 설비의 일부인 명령들을 수행할 능력을 가질 수 있다. 그것으로서 프로세서와 프로세서 코어는 엄밀하게 다른 것으로 언급되는 경우를 제외하면 어떤 면에서는 동의어로 사용될 수 있다.
앞의 섹션에서 설명된 기능성을 실행하는 코드 그리고/또는 데이터는 억세스가능한(accessible)/읽기 가능한(readable) 컴퓨터 매체에 제공될 수 있다. 일반적으로 말하자면, 억세스 가능한/읽기 가능한 컴퓨터 매체는 명령들 그리고/ 또는 데이터를 컴퓨터에 제공하기 위한 사용 중에 컴퓨터에 의해 억세스 가능한 어느 미디 어를 포함할 수 있다. 예를 들어, 억세스 가능한 컴퓨터 매체는 자기(magnetic) 또는 광(optical) 미디어와 같은 저장 미디어를 포함할 수 있고, 예를 들어 디스크, CD-ROM, 또는 DVD-ROM, CD-R, CD-RW, DVD-R, DVD-RW, RAM(예컨대 SDRAM, RDRAM, SRAM 등), ROM과 같은 휘발성 또는 비휘발성 메모리 미디어, 플래시 메모리, USB 인터페이스와 같은 주변 인터페이스를 통해 억세스 가능한 비휘발성 메모리, 송신 미디어 또는 네트워크 그리고/또는 무선 링크와 같은 통신 매체를 통해 전달 가능한 전기, 전자기, 디지털 신호와 같은 신호들을 통하여 억세스 가능한 미디어 등이 있다.
상기 실시예들이 상당히 상세하게 설명되었으나, 수많은 변형예와 수정예들이 본 개시사항이 전체적으로 평가되는 때에 당업자에게는 자명할 것이다. 첨부된 특허청구범위는 그러한 변형예들과 수정예들을 포괄할 수 있게 해석되도록 의도된 것이다.
본 발명은 일반적으로 마이크로프로세서들에 적용 가능하다.

Claims (10)

  1. 주어진 메모리 리소스에 독점적인 억세스를 요구하는 프로세서(18A, 18B)를 포함시키는 단계로서, 상기 요구는 상기 주어진 메모리 리소스와 관련된 하나 또는 그 이상의 어드레스들을 포함하는 것인 단계와;
    하나 또는 그 이상의 어드레스들 각각과 복수 개의 어드레스 세트들의 각 어드레스를 비교하는 단계로서, 상기 복수 개의 어드레스 세트들 각각은 요구자(requestor)가 독점적 억세스 권한을 승인받은 대상인 개별적인 메모리 리소스에 대응되는 것인 단계; 그리고,
    하나 또는 그 이상의 어드레스들의 어느 어드레스가 복수 개의 어드레스 세트들 중 어느 어드레스와 매칭되는 것에 대한 응답으로, 매칭되는 어드레스와 관련된 카운트 값을 리턴하는 단계로서, 상기 카운트 값은 매칭되는 어드레스를 놓고 경합하는 요구자(requestor)들의 숫자를 나타내는 것인 단계를 포함하고,
    매칭되는 어드레스를 놓고 경합하는 하나 또는 그 이상의 요구자들을 나타내는 실패 카운트 값을 수신하는 것에 대한 응답으로, 상기 프로세서가 후속되는 요구들에 대한 다른 메모리 리소스를 선택하도록 설정되는 것을 특징으로 하는 방법.
  2. 제 1 항에 있어서,
    복수 개의 어드레스 세트들 내에서 어느 어드레스와 매칭(matching)되는 하나 또는 그 이상의 어드레스들이 없는 경우에 대한 응답으로 0의 패스(pass) 카운트 값을 리턴하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  3. 제 1 항에 있어서,
    다른 프로세서가 다른 메모리 리소스에 대한 독점적 억세스 권한을 갖는지를 카운트 값을 사용하여 결정하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  4. 제 1 항에 있어서,
    상기 요구하는 독점적 억세스는 LOCK 프레픽스(prefix)를 갖는 하나 또는 그 이상의 잠긴(locked) 메모리 참조(reference) 명령들을 수행하는 단계를 포함하고,
    상기 LOCK 프레픽스는 상기 잠긴 메모리 참조 명령들에 관련된 어드레스들이 명령 디코딩 도중 하나 또는 그 이상의 지시(indication) 비트로 마킹(marking)되게 하는 것을 특징으로 하는 방법.
  5. 제 4 항에 있어서,
    상기 요구하는 독점적 억세스는 상기 주어진 메모리 리소스의 하나 또는 그 이상의 각 어드레스가 복수 개의 어드레스 세트들의 각 어드레스에 비교되게 하는 ACQUIRE 명령을 수행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  6. 제 4 항에 있어서,
    상기 잠긴 메모리 참조 명령들과 관련된 어드레스들을 프로세서 버퍼에 저장하고, ACQUIRE 명령 수행에 대한 응답으로 프로세서 버퍼 내의 모든 어드레스들을 비교되도록 전송하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  7. 컴퓨터 시스템(100)으로서:
    서로 결합되고 하나 또는 그 이상의 메모리들(314A-314D)에 결합된 하나 또는 그 이상의 프로세서들(18A, 18B)로서, 각 프로세서들은 주어진 메모리 리소스에 대한 독점적 억세스를 요구하기 위해 명령행하도록 설정되고, 이 요구는 상기 주어진 메모리 리소스에 관련된 하나 또는 그 이상의 어드레스들을 포함하는 하나 또는 그 이상의 프로세서들(18A, 18B)과;
    하나 또는 그 이상의 어드레스들 각각과 복수 개의 어드레스 세트들의 각 어드레스를 비교하기 위하여 결합된 조정 유닛(arbitration unit)(230)으로서, 상기 복수 개의 어드레스 세트들의 각 어드레스는 요구자(requestor)가 독점적 억세스를 승인받은 대상인 개별적인 메모리 리소스에 대응되는 조정 유닛을 포함하는 컴퓨터 시스템(100)으로서,
    상기 조정 유닛은 하나 또는 그 이상의 어드레스들의 어느 어드레스가 복수 개의 어드레스 세트들 중 어느 어드레스와 매칭되는 것에 대한 응답으로, 매칭되는 어드레스를 포함하는 세트에 연관되는 카운트 값(233)을 리턴하도록 설정되고,
    매칭되는 어드레스를 놓고 경합하는 하나 또는 그 이상의 요구자들을 나타내는 실패 카운트 값을 수신하는 것에 대한 응답으로, 상기 프로세서가 후속되는 요구들에 대한 다른 메모리 리소스를 선택하도록 설정되는 컴퓨터 시스템(100).
  8. 제 7 항에 있어서,
    상기 조정 유닛은 복수 개의 어드레스 세트들 내에서 어느 어드레스와 매칭(matching)되는 하나 또는 그 이상의 어드레스들이 없는 경우에 대한 응답으로 0의 패스(pass) 카운트 값을 리턴하도록 더 설정되는 것을 특징으로 하는 컴퓨터 시 스템.
  9. 제 7 항에 있어서,
    상기 하나 또는 그 이상의 어드레스들 각각은 다른 프로세서가 다른 메모리 리소스에 대한 독점적 억세스 권한을 갖는지를 카운트 값을 사용하여 결정하도록 더 설정되는 것을 특징으로 하는 컴퓨터 시스템.
  10. 제 7 항에 있어서,
    상기 하나 또는 그 이상의 어드레스들 각각은:
    LOCK 프레픽스(prefix)를 갖는 하나 또는 그 이상의 메모리 참조(reference) 명령들을 수행하며, 상기 LOCK 프레픽스는 상기 LOCK 프레픽스(prefix)를 갖는 하나 또는 그 이상의 메모리 참조 명령들에 관련된 어드레스들이 명령 디코딩 도중 하나 또는 그 이상의 지시(indication) 비트로 마킹(marking)되게 하도록 더 설정되고;
    상기 주어진 메모리 리소스의 하나 또는 그 이상의 각 어드레스가 복수 개의 어드레스 세트들의 각 어드레스에 비교되게 하는 ACQUIRE 명령을 수행하도록 더 설정되는 것을 특징으로 하는 컴퓨터 시스템.
KR1020087007115A 2005-08-23 2006-08-23 컴퓨터 시스템 내부의 프로액티브 동기 방법 KR101369441B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US71054805P 2005-08-23 2005-08-23
US60/710,548 2005-08-23
PCT/US2006/033192 WO2007025112A1 (en) 2005-08-23 2006-08-23 Method for proactive synchronization within a computer system

Publications (2)

Publication Number Publication Date
KR20080038435A KR20080038435A (ko) 2008-05-06
KR101369441B1 true KR101369441B1 (ko) 2014-03-04

Family

ID=37607137

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020087007115A KR101369441B1 (ko) 2005-08-23 2006-08-23 컴퓨터 시스템 내부의 프로액티브 동기 방법

Country Status (7)

Country Link
US (6) US7627722B2 (ko)
JP (1) JP5103396B2 (ko)
KR (1) KR101369441B1 (ko)
CN (1) CN101297270A (ko)
DE (1) DE112006002237B4 (ko)
GB (1) GB2445294B (ko)
WO (1) WO2007025112A1 (ko)

Families Citing this family (55)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7627722B2 (en) * 2005-08-23 2009-12-01 Advanced Micro Devices, Inc. Method for denying probes during proactive synchronization within a computer system
US7681020B2 (en) * 2007-04-18 2010-03-16 International Business Machines Corporation Context switching and synchronization
US20090125519A1 (en) * 2007-11-13 2009-05-14 Intel Corporation Device, system, and method for regulating software lock elision mechanisms
US8108610B1 (en) * 2008-10-21 2012-01-31 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US8135926B1 (en) * 2008-10-21 2012-03-13 Nvidia Corporation Cache-based control of atomic operations in conjunction with an external ALU block
US8108557B2 (en) * 2009-01-22 2012-01-31 Hewlett-Packard Development Company, L.P. System and method for measuring clock skew on a network
US8316368B2 (en) * 2009-02-05 2012-11-20 Honeywell International Inc. Safe partition scheduling on multi-core processors
US9727508B2 (en) * 2009-04-27 2017-08-08 Intel Corporation Address learning and aging for network bridging in a network processor
US9384063B2 (en) * 2009-06-18 2016-07-05 Microsoft Technology Licensing, Llc Eliding synchronization in a concurrent data structure
EP2467852B1 (en) 2009-08-20 2019-05-22 Rambus Inc. Atomic memory device
US8307198B2 (en) * 2009-11-24 2012-11-06 Advanced Micro Devices, Inc. Distributed multi-core memory initialization
US20110208921A1 (en) * 2010-02-19 2011-08-25 Pohlack Martin T Inverted default semantics for in-speculative-region memory accesses
US8793471B2 (en) * 2010-12-07 2014-07-29 Advanced Micro Devices, Inc. Atomic program verification
US9122476B2 (en) 2010-12-07 2015-09-01 Advanced Micro Devices, Inc. Programmable atomic memory using hardware validation agent
US8788794B2 (en) * 2010-12-07 2014-07-22 Advanced Micro Devices, Inc. Programmable atomic memory using stored atomic procedures
KR20120101761A (ko) * 2011-03-07 2012-09-17 삼성전자주식회사 캐시 페이즈 검출기 및 프로세서 코어
US10061618B2 (en) * 2011-06-16 2018-08-28 Imagination Technologies Limited Scheduling heterogenous computation on multithreaded processors
US9037838B1 (en) * 2011-09-30 2015-05-19 Emc Corporation Multiprocessor messaging system
TWI454922B (zh) * 2011-12-19 2014-10-01 Phison Electronics Corp 記憶體儲存裝置及其記憶體控制器與資料寫入方法
WO2013101229A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Structure access processors, methods, systems, and instructions
US9430391B2 (en) 2012-03-29 2016-08-30 Advanced Micro Devices, Inc. Managing coherent memory between an accelerated processing device and a central processing unit
US9086957B2 (en) 2012-08-02 2015-07-21 International Business Machines Corporation Requesting a memory space by a memory controller
CN103020003A (zh) * 2012-12-31 2013-04-03 哈尔滨工业大学 面向多核程序确定性重演的内存竞争记录装置及其控制方法
KR102020358B1 (ko) * 2013-03-14 2019-11-05 삼성전자 주식회사 단말 및 그 단말에서 애플리케이션 동기화 방법
US9146885B2 (en) * 2013-05-17 2015-09-29 Analog Devices, Inc. Parallel atomic increment
US10229043B2 (en) 2013-07-23 2019-03-12 Intel Business Machines Corporation Requesting memory spaces and resources using a memory controller
US9262343B2 (en) * 2014-03-26 2016-02-16 International Business Machines Corporation Transactional processing based upon run-time conditions
US9256553B2 (en) * 2014-03-26 2016-02-09 International Business Machines Corporation Transactional processing based upon run-time storage values
CN104035888B (zh) * 2014-06-11 2017-08-04 华为技术有限公司 一种缓存数据的方法及存储设备
US9710381B2 (en) 2014-06-18 2017-07-18 International Business Machines Corporation Method and apparatus for cache memory data processing
US9740614B2 (en) * 2014-06-27 2017-08-22 International Business Machines Corporation Processor directly storing address range of co-processor memory accesses in a transactional memory where co-processor supplements functions of the processor
US9619386B2 (en) 2015-01-29 2017-04-11 Kabushiki Kaisha Toshiba Synchronization variable monitoring device, processor, and semiconductor apparatus
US9513960B1 (en) 2015-09-22 2016-12-06 International Business Machines Corporation Inducing transactional aborts in other processing threads
US9916179B2 (en) 2015-10-29 2018-03-13 International Business Machines Corporation Interprocessor memory status communication
US9563467B1 (en) 2015-10-29 2017-02-07 International Business Machines Corporation Interprocessor memory status communication
US10261827B2 (en) 2015-10-29 2019-04-16 International Business Machines Corporation Interprocessor memory status communication
US9760397B2 (en) 2015-10-29 2017-09-12 International Business Machines Corporation Interprocessor memory status communication
US9772874B2 (en) * 2016-01-29 2017-09-26 International Business Machines Corporation Prioritization of transactions based on execution by transactional core with super core indicator
US20170300427A1 (en) * 2016-04-18 2017-10-19 Mediatek Inc. Multi-processor system with cache sharing and associated cache sharing method
RU2623806C1 (ru) 2016-06-07 2017-06-29 Акционерное общество Научно-производственный центр "Электронные вычислительно-информационные системы" (АО НПЦ "ЭЛВИС") Способ и устройство обработки стереоизображений
US10237198B2 (en) 2016-12-06 2019-03-19 Hewlett Packard Enterprise Development Lp Shared-credit arbitration circuit
US10944694B2 (en) * 2016-12-06 2021-03-09 Hewlett Packard Enterprise Development Lp Predictive arbitration circuit
US10721185B2 (en) 2016-12-06 2020-07-21 Hewlett Packard Enterprise Development Lp Age-based arbitration circuit
US10452573B2 (en) 2016-12-06 2019-10-22 Hewlett Packard Enterprise Development Lp Scripted arbitration circuit
US11157407B2 (en) 2016-12-15 2021-10-26 Optimum Semiconductor Technologies Inc. Implementing atomic primitives using cache line locking
US10223186B2 (en) * 2017-02-01 2019-03-05 International Business Machines Corporation Coherency error detection and reporting in a processor
US10776282B2 (en) 2017-12-15 2020-09-15 Advanced Micro Devices, Inc. Home agent based cache transfer acceleration scheme
US10693811B2 (en) 2018-09-28 2020-06-23 Hewlett Packard Enterprise Development Lp Age class based arbitration
US10796399B2 (en) 2018-12-03 2020-10-06 Advanced Micro Devices, Inc. Pixel wait synchronization
CN109933543B (zh) * 2019-03-11 2022-03-18 珠海市杰理科技股份有限公司 Cache的数据锁定方法、装置和计算机设备
CN110490581B (zh) * 2019-07-18 2022-09-30 拉货宝网络科技有限责任公司 一种分布式系统临界数据资源更新方法及系统
US20220100504A1 (en) * 2020-09-25 2022-03-31 Advanced Micro Devices, Inc. Shared data fabric processing client reset system and method
US11740973B2 (en) * 2020-11-23 2023-08-29 Cadence Design Systems, Inc. Instruction error handling
US11972117B2 (en) * 2021-07-19 2024-04-30 EMC IP Holding Company LLC Selecting surviving storage node based on environmental conditions
US11892972B2 (en) * 2021-09-08 2024-02-06 Arm Limited Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142676A (en) * 1988-12-28 1992-08-25 Gte Laboratories Incorporated Separate content addressable memories for storing locked segment addresses and locking processor identifications for controlling access to shared memory
JPH0950380A (ja) * 1995-08-04 1997-02-18 Toshiba Corp 通信システム

Family Cites Families (42)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4574350A (en) 1982-05-19 1986-03-04 At&T Bell Laboratories Shared resource locking apparatus
US4725946A (en) 1985-06-27 1988-02-16 Honeywell Information Systems Inc. P and V instructions for semaphore architecture in a multiprogramming/multiprocessing environment
CA2045791A1 (en) * 1990-06-29 1991-12-30 Richard Lee Sites Branch performance in high speed processor
US5285528A (en) * 1991-02-22 1994-02-08 International Business Machines Corporation Data structures and algorithms for managing lock states of addressable element ranges
US5613139A (en) * 1994-05-11 1997-03-18 International Business Machines Corporation Hardware implemented locking mechanism for handling both single and plural lock requests in a lock message
US5968157A (en) * 1997-01-23 1999-10-19 Sun Microsystems, Inc. Locking of computer resources
US6343338B1 (en) * 1997-04-01 2002-01-29 Microsoft Corporation System and method for synchronizing disparate processing modes and for controlling access to shared resources
US6219751B1 (en) * 1998-04-28 2001-04-17 International Business Machines Corporation Device level coordination of access operations among multiple raid control units
US6182186B1 (en) * 1998-06-30 2001-01-30 Sun Microsystems, Inc. Method and apparatus that utilizes lock states to lock resources
US6389519B1 (en) * 1999-07-19 2002-05-14 Ati International Srl Method and apparatus for providing probe based bus locking and address locking
US6651088B1 (en) * 1999-07-20 2003-11-18 Hewlett-Packard Development Company, L.P. Method for reducing coherent misses in shared-memory multiprocessors utilizing lock-binding prefetchs
KR100331565B1 (ko) * 1999-12-17 2002-04-06 윤종용 매트릭스 연산 장치 및 매트릭스 연산기능을 갖는 디지털신호처리 장치
US6668308B2 (en) * 2000-06-10 2003-12-23 Hewlett-Packard Development Company, L.P. Scalable architecture based on single-chip multiprocessing
US6604162B1 (en) * 2000-06-28 2003-08-05 Intel Corporation Snoop stall reduction on a microprocessor external bus
US6678772B2 (en) * 2000-12-19 2004-01-13 International Businesss Machines Corporation Adaptive reader-writer lock
US6976158B2 (en) * 2001-06-01 2005-12-13 Microchip Technology Incorporated Repeat instruction with interrupt
US7325064B2 (en) * 2001-07-17 2008-01-29 International Business Machines Corporation Distributed locking protocol with asynchronous token prefetch and relinquish
US6868476B2 (en) * 2001-08-27 2005-03-15 Intel Corporation Software controlled content addressable memory in a general purpose execution datapath
US20060218556A1 (en) * 2001-09-28 2006-09-28 Nemirovsky Mario D Mechanism for managing resource locking in a multi-threaded environment
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US6986005B2 (en) * 2001-12-31 2006-01-10 Hewlett-Packard Development Company, L.P. Low latency lock for multiprocessor computer system
US7089371B2 (en) * 2002-02-12 2006-08-08 Ip-First, Llc Microprocessor apparatus and method for prefetch, allocation, and initialization of a block of cache lines from memory
US6721816B1 (en) * 2002-02-27 2004-04-13 Advanced Micro Devices, Inc. Selecting independently of tag values a given command belonging to a second virtual channel and having a flag set among commands belonging to a posted virtual and the second virtual channels
US7685583B2 (en) * 2002-07-16 2010-03-23 Sun Microsystems, Inc. Obstruction-free mechanism for atomic update of multiple non-contiguous locations in shared memory
US7814488B1 (en) * 2002-09-24 2010-10-12 Oracle America, Inc. Quickly reacquirable locks
US20040068607A1 (en) * 2002-10-07 2004-04-08 Narad Charles E. Locking memory locations
US7117481B1 (en) * 2002-11-06 2006-10-03 Vmware, Inc. Composite lock for computer systems with multiple domains
US7162589B2 (en) * 2002-12-16 2007-01-09 Newisys, Inc. Methods and apparatus for canceling a memory data fetch
US7290105B1 (en) * 2002-12-16 2007-10-30 Cisco Technology, Inc. Zero overhead resource locks with attributes
US7080209B2 (en) * 2002-12-24 2006-07-18 Intel Corporation Method and apparatus for processing a load-lock instruction using a relaxed lock protocol
US7269717B2 (en) * 2003-02-13 2007-09-11 Sun Microsystems, Inc. Method for reducing lock manipulation overhead during access to critical code sections
US20040268046A1 (en) * 2003-06-27 2004-12-30 Spencer Andrew M Nonvolatile buffered memory interface
US20050120185A1 (en) * 2003-12-01 2005-06-02 Sony Computer Entertainment Inc. Methods and apparatus for efficient multi-tasking
US8332483B2 (en) * 2003-12-15 2012-12-11 International Business Machines Corporation Apparatus, system, and method for autonomic control of grid system resources
US7210019B2 (en) * 2004-03-05 2007-04-24 Intel Corporation Exclusive access for logical blocks
US20050283783A1 (en) * 2004-06-22 2005-12-22 Desota Donald R Method for optimizing pipeline use in a multiprocessing system
JP4287799B2 (ja) * 2004-07-29 2009-07-01 富士通株式会社 プロセッサシステムおよびスレッド切り替え制御方法
US7406625B2 (en) * 2004-08-17 2008-07-29 International Business Machines Corporation Protecting a code range in a program from breakpoints
US20060095685A1 (en) * 2004-11-03 2006-05-04 Bonola Thomas J System and method to coordinate access to a sharable data structure using deferred cycles
US7454570B2 (en) * 2004-12-07 2008-11-18 International Business Machines Corporation Efficient memory update process for on-the-fly instruction translation for well behaved applications executing on a weakly-ordered processor
US7797704B2 (en) * 2005-03-30 2010-09-14 Hewlett-Packard Development Company, L.P. System and method for performing work by one of plural threads using a lockable resource
US7627722B2 (en) * 2005-08-23 2009-12-01 Advanced Micro Devices, Inc. Method for denying probes during proactive synchronization within a computer system

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5142676A (en) * 1988-12-28 1992-08-25 Gte Laboratories Incorporated Separate content addressable memories for storing locked segment addresses and locking processor identifications for controlling access to shared memory
JPH0950380A (ja) * 1995-08-04 1997-02-18 Toshiba Corp 通信システム

Also Published As

Publication number Publication date
JP2009506436A (ja) 2009-02-12
US20070050562A1 (en) 2007-03-01
US20070050560A1 (en) 2007-03-01
US7552290B2 (en) 2009-06-23
GB2445294A (en) 2008-07-02
DE112006002237T5 (de) 2008-06-19
KR20080038435A (ko) 2008-05-06
US20070050559A1 (en) 2007-03-01
GB0802809D0 (en) 2008-03-26
US7627722B2 (en) 2009-12-01
CN101297270A (zh) 2008-10-29
JP5103396B2 (ja) 2012-12-19
US7636819B2 (en) 2009-12-22
DE112006002237B4 (de) 2023-04-06
US20070067529A1 (en) 2007-03-22
US7606985B2 (en) 2009-10-20
WO2007025112A1 (en) 2007-03-01
GB2445294B (en) 2009-01-21
US20070050561A1 (en) 2007-03-01
US20070050563A1 (en) 2007-03-01

Similar Documents

Publication Publication Date Title
KR101369441B1 (ko) 컴퓨터 시스템 내부의 프로액티브 동기 방법
US8190859B2 (en) Critical section detection and prediction mechanism for hardware lock elision
US9262207B2 (en) Using the transaction-begin instruction to manage transactional aborts in transactional memory computing environments
JP5404574B2 (ja) マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
TWI476595B (zh) 用於交易式記憶體事件處置之硬體中使用者處置器的登錄
US20170161070A1 (en) Prefetching of discontiguous storage locations in anticipation of transactional execution
US7162613B2 (en) Mechanism for processing speculative LL and SC instructions in a pipelined processor
US20110208921A1 (en) Inverted default semantics for in-speculative-region memory accesses
US9798577B2 (en) Transactional storage accesses supporting differing priority levels
US9280349B2 (en) Decode time instruction optimization for load reserve and store conditional sequences
US9720725B2 (en) Prefetching of discontiguous storage locations as part of transactional execution
US20160246642A1 (en) Hint instruction for managing transactional aborts in transactional memory computing environments
JP6734760B2 (ja) プリフェッチ・インセンシティブのトランザクション・メモリ

Legal Events

Date Code Title Description
A201 Request for examination
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: 20170201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 7