KR100829638B1 - 슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작 - Google Patents

슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작 Download PDF

Info

Publication number
KR100829638B1
KR100829638B1 KR1020050056393A KR20050056393A KR100829638B1 KR 100829638 B1 KR100829638 B1 KR 100829638B1 KR 1020050056393 A KR1020050056393 A KR 1020050056393A KR 20050056393 A KR20050056393 A KR 20050056393A KR 100829638 B1 KR100829638 B1 KR 100829638B1
Authority
KR
South Korea
Prior art keywords
processor
lock
instruction
instructions
sleep
Prior art date
Application number
KR1020050056393A
Other languages
English (en)
Other versions
KR20060048630A (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 KR20060048630A publication Critical patent/KR20060048630A/ko
Application granted granted Critical
Publication of KR100829638B1 publication Critical patent/KR100829638B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or 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/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
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/52Indexing scheme relating to G06F9/52
    • G06F2209/521Atomic

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Power Sources (AREA)
  • Memory System (AREA)
  • Hardware Redundancy (AREA)
  • Exchange Systems With Centralized Control (AREA)
  • Advance Control (AREA)

Abstract

슬리프-웨이크 업 메커니즘을 이용하여 비교 및 교환 동작을 실행하기 위한 방법, 장치 및 시스템이 제공되었다. 일 실시예에 따라서, 프로세서에 있는 명령은 프로세서를 대신하여 로크를 획득하는 것을 돕기 위해 실행된다. 만일 프로세서에 의해 획득될 로크를 이용할 수 없다면, 명령은 이벤트가 발생할 때까지 슬리프 상태에 놓인다.
멀티스레드, 프로세서, 슬리프, 웨이크 업, 비교 및 교환,

Description

슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작{COMPARE AND EXCHANGE OPERATION USING SLEEP-WAKEUP MECHANISM}
도1은 공유 메모리 공간에 액세스하는 프로세서를 갖는 예시적 컴퓨터 시스템을 도시한 블록도.
도2는 명령의 인코딩 방식의 실시예를 도시한 블록도.
도3은 슬리프-웨이크 업 메커니즘의 비교 및 교환 동작을 갖는 프로세싱 아키텍쳐의 실시예를 도시한 도면.
도4는 본 발명의 하나 이상의 실시예를 구현하는 데에 사용되는 예시적 컴퓨터 시스템을 도시한 블록도.
도5는 본 발명의 하나 이상의 실시예를 구현하는 데에 사용되는 멀티스레드 프로세서의 실시예를 도시한 블록도.
도6은 슬리프-웨이크 업 메커니즘의 비교 및 교환 동작을 사용하는 멀티 프로세서를 갖는 시스템의 실시예를 도시한 블록도.
도7은 슬리프-웨이크 업 메커니즘을 사용한 비교 및 교환 동작을 실행하는 처리의 실시예를 도시한 흐름도.
도8은 슬리프-웨이크 업 메커니즘의 비교 및 교환 동작 용의 상태 머신의 실시예를 도시한 블록도.
<도면의 주요 부분에 대한 부호의 설명>
114: 공유 메모리 공간
102-106: 프로세서들
100: 컴퓨터 시스템
110: 세마포어(로크)
112: 액세스
108: 메모리
본 발명의 실시예들은 프로세서에 관한 것이다. 더 특정하게는, 일 실시예는 슬리프-웨이크 업 메커니즘(sleep-wake up mechanism)을 이용한 비교 및 교환 동작을 실행하는 것에 관한 것이다.
전형적으로는, 멀티 프로세서 시스템 상의 멀티스레드 프로세서(multithreaded processor)는 동시에 다중 명령 시퀀스들을 처리할 수 있다. 단일 프로세서 내에서 다중 명령 스트림들의 실행을 구동하게 하는 주요 동기는 프로세서 활용도 면에서 획득되는 향상 때문이다. 멀티스레드 프로세서는 이런 리소스들을 더 잘 활용하고자 하는 시도에 따라 다중 명령 스트림들이 다른 실행 리소스들에서 동시에 실행하는 것을 허용해 준다. 더욱이, 멀티스레드 프로세서들 은 높은 레이턴시 지연과 직면하는 프로그램들 또는 이벤트들이 일어나기를 자주 대기하는 프로그램에 대해 사용될 수 있다.
전형적으로는, 컴퓨터 시스템들은 모든 스레드 또는 프로세서에 의해 공유되는 단일 리소스 셋 업을 갖는다. 적절한 리소스를 갖지 못하면, 프로세서들(또는 스레드들) 간의 상당한 경쟁을 유발할 수 있는데, 그 이유는 예를 들어 프로세서들이 버스 및 메모리 대역폭을 공유하기 때문이다. 이 경쟁은 하나 또는 그 이상의 프로세서가 세마포어(semaphore) 또는 로크(이들은 단일 프로세서에게 그 외의 데이터 구조들에 대한 독점적 액세스를 허용해 주는 데에 자주 사용되는 데이터 구조를 지칭함)를 이용할 수 있을 때까지 대기할 때 특히 명백하게 나타난다. 이는 리소스의 병목 현상과, 메모리 대역폭, 컴퓨팅 대역폭, 마이크로아키텍쳐 리소스 및 전력의 소모를 야기한다. 프로세서의 과중 대기(busy waiting) 상태는 또한 시스템 내의 그 외의 프로세서의 성능에 역효과를 끼칠 수 있다.
도1은 공유 메모리 공간(114)에 액세스하는 프로세서들(102-106)을 갖는 예시적 컴퓨터 시스템(100)을 예시한 블록도이다. 세마포어(로크)(110)는 공유 공간(114)에 대한 액세스(112)를 획득하는 것과 관련된 값을 포함하는 데에 배정된 메모리(108) 내의 특정 로케이션이다. 프로세서(102-106) 중의 하나가 공유 공간(114)에 액세스하기 위해서는 이는 먼저 로크(110)에 액세스하고 로크 로케이션(110)에 저장된 데이터의 상태(값)를 시험하는데, 가장 단순한 포맷에서는 두 개의 값 중의 어느 하나가 로크(110)에 배정된다. 제1 값은 공유 공간이 액세스하는데에 쓰일 수 있다는 것을 표시하고 제2값은 공유 공간(114)이 현재 활용되고 있으 므로 액세스하는 데에 쓰일 수 없다는 것을 나타낸다. 또한, 비트 상태 1 및 0 이 로크(110)의 로크 상태 및 언로크(unlock) 상태에 대해 사용될 수 있다.
데이터 전달을 위해 프로세서(102-106)가 메모리(108)에 액세스하는 것은 전형적으로는 로드 및 저장 동작의 사용을 수반한다. 로드 동작은 메모리(108)에서 액세스된 로케이션으로부터 메모리 콘텐츠를 전달하는 데, 저장 동작은 데이터를 메모리(108)에서 액세스된 메모리 로케이션에 전달한다. 따라서, 로드/저장 동작은 프로세서(102-106)와 메모리(108) 간에 데이터 전달을 위해 메모리(108)와 로크(110)에 액세스하는 데에 사용된다. 로드 및 저장 엑세스들은 각각 판독 및 기입 액세스로 지칭되기도 한다. 판독을 수행할 때, 캐시 라인은, 변경된, 독점적인, 공유된, 비유효의 (MESI) 프로토콜 등의 프로토콜에 따라서 '공유되고 비변경된(shared unmodified)' 또는 '배타적인(exclusive)' 또는 '변경된(modified)' 중의 어느 하나의 상태에서, 프로세서의 캐시에 존재한다. 만일 캐시 라인이 이런 상태중의 하나(예로 비유효)에 존재하지 않는다면, 프로세서(102-106)는 메모리(108)로부터 라인을 검색하고 이를 '공유되고 비변경된' 또는'배타적인' 상태에 배치한다. 기입을 실행하기 위해서, 프로세서(102-106)는 그 캐시 내의 라인을 '배타적인' 또는 '변경된' 상태에 갖거나, 또는 이를 검색하고 이것을 '배타적인' 상태의 그 캐시 내로 배치한다. '공유된 상태' 는 동시적인 판독에 대해 쓸 수 있으나, 단지 하나의 프로세서(102-106)가 판독 및 기입을 위해 그 라인을 '배타적인' 상태에 가질 수 있다.
세마포어 비지(busy)의 가용성을 조사하거나 이를 이루는 기술의 예로서 원 자 판독-변경-기입 시퀀스(예로, '테스트& 세트'(TS))를 사용하는 것이 있다. 동기화를 구현하기 위한 일 메커니즘은 '명령 비교 및 교환' 이 있는데, 이는 비교적 효율적이지만, 이는 메모리 로케이션의 캐시 라인의 배타적인 소유권을 요구하기 때문에 충분히 효율적이지는 않다. 이는 그외의 처리들이 동시에 메모리 로케이션을 판독하는 것을 막는다.
또 다른 예로서는 '테스트& 테스트'(TTS) 메커니즘이 있다. TTS메커니즘은 비교적 더 효율적인데, 그 이유는 프로세서가 세마포어가 자유롭지 않은 동안에 처음 테스트를 위해 변수의 공유 상태에서 로컬 캐시 카피에 액세스하기 때문이다. 그러나, 일 프로세서가 로크를 획득하였고 그외의 프로세서가 이 로크를 얻기 위해 경쟁할 때(예로, 세마포어가 자유로운지를 체크하기 위한 동시적인 시도된 판독) TTS 메커니즘은 그외의 프로세서의 차단 또는 병목 현상을 방지하는 것에 실패한다. 로크 획득 프로세서는 '배타적 상태'의 로크의 캐시 라인을 획득하여 이것이 모든 다른 캐시들로부터 나오도록 한다. 로크에 기입하는 것이 이뤄졌다면 그외의 프로세서들은 판독을 시도하는데, 이것은 획득하는 프로세서가 그 변경된 로크 값을 메모리에 라이트 백하고 이제 공유된 데이터를 버스 트랜잭션의 시퀀스에서 그외의 프로세서들에게 포워드하도록 야기한다.
첨부된 청구범위들은 특정하게 본 발명의 특징들을 제시한다. 본 발명의 실시예들은 첨부된 도면들과 연계하여 취해진 이하의 상세한 설명으로부터 그 이점도 함께 더 잘 이해될 것이다.
슬리프-웨이크 업 메커니즘을 사용한 비교 및 교환 동작들을 실행하기 위한 시스템 및 방법이 이하에 설명된다. 이하의 설명에서, 로직 구현예, 조작 코드(opcode), 리소스 분할, 리소스 공유, 및 리소스 복사 구현, 시스템 소자의 유형 및 이들 간의 상호 관계, 및 로직 분할/집적 선택 등과 같은 다수의 특정 사항들이 본 발명의 여러 실시예들에 대한 철저한 이해를 제공하기 위해 제시될 것이다. 그러나, 당업자에게는 본 발명의 실시예들이 제공된 개시에 기초할 때 그런 특정 상세사항 없이도 실시될 수 있다는 점을 알 것이다. 그 밖의 경우에, 제어 구조, 게이트 레벨 회로 및 완전한 소프트웨어 명령 시퀀스들은 본 발명의 요점을 흐리지 않기 위해서 상세하게 보여지지는 않았다. 본 분야의 당업자는 여기 포함된 설명에 따라 과도한 시행착오 없이 적합한 기능성을 구현할 수 있을 것이다.
본 발명의 여러 실시예들이 이하에 설명된다. 여러 실시예들은 하드웨어 소자들에 의해 실행될 수 있거나 머신 실행 가능 명령들로 구체화될 수 있는데, 이 명령들은 이 명령들에 따라 프로그래밍된 범용 또는 특수 목적의 프로세서 또는 머신 또는 로직 회로가 여러 실시예들을 실행하도록 야기시키는 데에 사용될 수 있다. 대안으로는, 여러 실시예들은 하드웨어와 소프트웨어의 결합에 의해 실행될 수 있다.
본 발명의 여러 실시예들은 컴퓨터 프로그램 제품으로서 제공될 수 있는데, 이 제품은 컴퓨터(또는 그외의 전자 장치들)를 프로그래밍하여 본 발명의 여러 실시예들에 따라서 프로세스를 실행하는 데에 사용될 수 있는 명령들을 저장한 기게 판독 가능 매체를 포함할 수 있다. 기게 판독 가능 매체는 플로피 디스켓, 광 디 스크, CD-ROM, 자기 광 디스크, 판독 전용 메모리(ROM), 랜덤 액세스 메모리(RAM), 소거 가능 프로그램 가능 판독 전용 메모리(EPROM), EEPROM, 자기 또는 광 카드, 플래시 메모리, 또는 전자적 명령들을 저장하는 데에 적합한 또 다른 유형의 매체/기계 판독 가능 매체를 포함할 수 있는데, 이것에만 국한되는 것은 아니다. 더욱이, 본 발명의 여러 실시예들은 컴퓨터 프로그램 제품으로서 다운로드될 수도 있는데, 여기서 프로그램은 반송파에 구체화된 데이터 신호 또는 통신 링크(예로 모뎀 또는 네트워크 접속)를 통한 그외의 전파 매체에 의해서 원격 컴퓨터로부터 요구하는 컴퓨터로 전송될 수 있다.
도2는 명령(200)에 대한 인코딩 방식의 실시예를 도시한 블록도이다. 판독-변경-기입 동작을 실행하기 위한 명령(예로 비교 및 교환(CMPXCHG))(200)이 예시되었다. 명령(200)은 제1 소스 데이터를 판독하고 이를 또 따른 소스 데이터와 비교하고, 만일 이 비교가 소정 기준 또는 조건(예로 비교가 사실일 때)을 만족시킨다면, 일부 변경된 값은 로케이션에 기입된다. 이 로케이션은 제1 소스 데이터의 원래의 데이터를 포함할 수 있다. 만일 소정 조건이 만족되지 않는다면 로케이션의 원래 데이터는 보정되지 않는다. 또 다른 로케이션이 이 상태에 의해 갱신될 수 있어서, 이하와 같이 원래 데이터 이외의 로케이션의 데이터를 포함할 수 있다.
Figure 112005034650681-pat00001
명령(200)은 CMPXCHG 명령으로서 명령(200)을 식별하는 데에 사용되는 조작 부호 오퍼랜드(202)를 포함하는 단일 원자 명령과, 소스 및 수신지에 대응하는 SRC1, SRC2, SRC3 및 DEST (204-210)과 관련된 오퍼랜드를 포함한다.
도3은 명령(200)을 구현하기 위한 프로세싱 아키텍쳐(300)의 실시예를 도시한 블록도이다. 프로세서(302)는 실행부(304)를 갖는 중앙 처리 장치(CPU), (레지스터 308 을 포함하는) 레지스터 파일(306), 및 버스(316)에 의해 함께 결합된 디코더(314)를 갖는 것으로 도시되었다. 레지스터 파일(306)은 명령들(200)을 실행하기 위한 실행부(304)에 의해 액세스되는 레지스터 세트(308)을 포함한다. 명령(200)은 도2의 CMPXCHG 명령을 포함하거나 또는 슬리프-웨이크 업 메커니즘을 갖는 비교 및 교환 명령(CMPXCHG_SW)의 실시예를 포함할 수 있다.
명령(200)은 실행부(304) 내에 소재하는 것으로 도시되었고 점선은 명령(200)의 오퍼랜드(202-210)로부터 레지스터 파일(306) 내의 대응하는 레지스터(308)로 그어졌다. 디코더(314)는 실행용의 명령(200)을 디코딩하는 데에 사용된다. 메모리(320)는 버스(318)를 통해서 버스 인터페이스부(BIU)(312)와 통신한다. BIU(312)는 메모리(320)와 프로세서(302) 간에 데이터를 전달하는 데에 사용된다. 명령(200) 용의 프로그램 루틴(동작 시퀀스)이 메모리(320) 내에 소재하는 것으로 상정한다. 명령(200)의 실행 전에, SRC1, SRC2, SRC3는 레지스터(308)에 로드될 것이다. 일 실시예에서, 프로세스-비교-오퍼랜드(PCO) 레지스터(도시 안됨)가 명령(200)의 실행 동안에 다른 주기에서 SRC2 및/또는 DEST 용의 레지스터로서 기능하는 데에 사용될 수 있다. 다른 식으로 말하면, 실행 전에, SRC2 정보가 PCO 레지스터 내에 로드되는 동안에 SRC1 및 SRC3 는 레지스터(308)에 로드되어, SRC2 정보용의 전용 레지스터로서 기능한다.
일 실시예에서, 명령(200)은 CMPXCHG_SW 명령을 포함하는데, 여기서는 슬리프-웨이크 업 메커니즘(CMPXCHG_SW 메커니즘)을 갖는 비교 및 교환 동작이 프로세싱 아키텍쳐(300)에 의해 구현되고 실행된다. 이런 메커니즘은 하드웨어(예로, 프로세서(302)로서 구현됨) 및/또는 소프트웨어(예로 메커니즘의 여러 기능을 구현하고 실행하기 위한 동기화 코드)를 사용하여 구현될 수 있다. 일 실시예에서, CMPXCHG_SW 메커니즘은 만일 (공유 메모리 공간(326)으로의 액세스를 얻기 위한) 소망 로크(322)를, 또 다른 프로세서에 의해 획득되고 있는 경우와 같이, 이용할 수 없다면, CMPXCHG_SW 명령이 슬리프 상태에 있도록 하는데에 사용된다. 차순으로, 획득하는 프로세서가 공유 메모리 공간(326)에 대한 자신의 액세스를 종료하였을 때, 이후 로크(322)를 개방(또는 언로크된) 조건에 리셋하여(또는 변경하여) 또 다른 프로세서가 공유 메모리 공간(326)에 액세스하기 위한 제어를 얻도록 할 필요가 있다. 시스템이 어떻게 공유된 메모리 공간(326)에 대한 제어를 해제할지는 ( 예로 시스템 아키텍쳐에 의해 교시되는 것과 같이) 디자인 선택 사항이 될 수 있다. 예를 들어, 언로크된 상태값은 로크(322)에 직접 기입되거나 또는 레지스터(308)에 기입되고/저장될 수 있다. CMPXCHG_SW 메커니즘은 도7 내지 도9를 참조하여 더 개시된다.
도4는 본 발명의 하나 또는 그 이상의 실시예를 구현하는 데에 쓰이는 예시적 컴퓨터 시스템(400)을 도시한 블록도이다. 컴퓨터 시스템(시스템)은 하나 또는 그 이상의 프로세서(402-406)를 포함한다. 프로세서(402-406)는 하나 또는 그 이상의 단일 스레드 또는 멀티 스레드 프로세서를 포함할 수 있다. 전형적인 멀티 스레드 프로세서는 멀티 스레드 또는 논리 프로세서를 포함할 수 있고, 자신의 멀티 스레드를 사용하여 동시적으로 다중 명령 시퀀스를 처리할 수 있다. 프로세서(402-406)는 또한 하나 또는 그 이상의 캐시(도시 안됨)의 내부 레벨과 프로세서 버스(412)와의 인터액션을 지도하는 버스 제어기 또는 버스 인터페이스를 포함할 수 있다.
호스트 버스 또는 전면 버스라고도 알려진 프로세서 버스(412)는 프로세서(402-406)를 시스템 인터페이스(414)에 결합시키는 데에 사용될 수 있다. 프로세서 버스(412)는 제어 버스(432), 어드레스 버스(434), 및 데이터 버스(436)를 포함할 수 있다. 제어 버스(432), 어드레스 버스(434), 및 데이터 버스(436)는, 두 개의 버스 에이전트 간에서만 접속될 수 있는 포인트 투 포인트 버스와는 반대로, 예를 들어 세 개 또는 그 이상의 버스 에이전트에 접속된 멀티 드롭 양방향 버스들일 수 있다.
시스템 인터페이스(414)(또는 칩셋)는 프로세서 버스(412)에 접속되어 시스템(400)의 그 외의 소자들을 프로세서 버스(412)와 인터페이싱할 수 있다. 예를 들어, 시스템 인터페이스(414)는 주 메모리(416)를 프로세서 버스(412)와 인터페이싱하기 위한 메모리 제어기(418)를 포함할 수 있다. 주 메모리(416)는 전형적으로는 하나 또는 그 이상의 메모리 카드 및 제어회로(도시 안됨)를 포함한다. 시스템 인터페이스(414)는 하나 또는 그 이상의 I/O 브리지 또는 I/O 장치를 프로세서 버스(412)와 인터페이싱하는 입/출력(I/O) 인터페이스(420)를 포함할 수도 있다. 예를 들어, 도시된 대로, I/O 인터페이스(420)는 I/O 브리지(424)를 프로세서 버스(412)와 인터페이싱할 수 있다. I/O 브리지(424)는 버스 브리지로 동작하여 시스템 인터페이스(414)와 I/O 버스(426) 간에 인터페이싱할 수 있다. 하나 또는 그 이상의 I/O 제어기 및/또는 I/O 장치들은, 도시된 대로, I/O 제어기(428) 및 I/O 장치(430)와 같은 I/O 버스(426)에 접속될 수 있다. I/O 버스(426)는 PCI 버스 또는 다른 유형의 I/O 버스를 포함할 수 있다.
시스템(400)은, 프로세서 버스(412)에 결합되고, 프로세서(402-406)에 의해 실행될 정보 및 명령을 저장하기 위한, 주 메모리(416)라고 불리는 다이내믹 저장 장치, 또는 랜덤 액세스 메모리(RAM) 또는 그외의 장치들을 포함할 수 있다. 주 메모리(416)는 프로세서(402-406)에 의한 명령의 실행 동안에 임시 변수 또는 그 외의 중간 정보를 저장하는 데에 사용될 수도 있다. 시스템(400)은 프로세서 버스(412)에 결합되고 프로세서(402-406)용의 스태틱 정보 및 명령을 저장하기 위한 판독 전용 메모리(ROM) 및/또는 그외의 스태틱 저장 장치(도시 안됨)를 포함할 수 있 다.
주 메모리(416) 또는 다이내믹 저장 장치는 정보 및 명령을 저장하기 위한 자기 디스크 또는 광 디스크를 포함할 수 있다. I/O 장치(430)는, 음극선관(CRT) 또는 액정 디스플레이(LCD)와 같이, 정보를 최종 사용자에게 디스플레이하기 위한 디스플레이 장치(도시 안됨)를 포함할 수 있다. 예를 들어, 설치 상태, 시험 기간 에서의 잔여 시간 및 그외의 정보에 관한 그래픽 및/또는 텍스트 표시가 디스플레이 장치 상에서 기대되는 구입자에게 제시될 수 있다. I/O 장치(430)는 또한 알파뉴메릭 입력 장치와 같이, 프로세서(402-406)에게 정보 및/또는 커맨드 선택을 통신하기 위한 알파뉴메릭과 그외의 키들을 포함하는 입력 장치(도시 안됨)를 포함할 수 있다. 또 다른 유형의 사용자 입력 장치는 프로세서(402-406)에게 직접적인 정보 및 커맨드 선택을 통신하고 디스플레이 상에서 커서 움직임을 제어하기 위한 마우스, 트랙볼, 또는 커서 방향키와 같은 커서 제어를 포함한다.
시스템(400)은, 예를 들어 로컬 또는 광역 네트워크를 지원하기 위한 통신 링크를 제공하기 위한 목적으로 에더넷, 토큰 링, 도는 그 외의 유형의 물리적 부착물에 결합하기 위해 사용되는 것과 같은, 모뎀, 네트워크 인터페이스 카드, 또는 그 외의 공지된 인터페이스 장치들과 같은 통신 장치(도시 안됨)를 포함할 수도 있다. 다른 식으로 말하면, 시스템(400)은 예를 들어 한 회사의 인트라넷 및/또는 인터넷과 같은, 종래의 네트워크 인프라스트럭쳐를 통해서 다수의 클라이언트 및/또는 서버에 결합될 수 있다.
이상 설명한 예보다도 덜 장비되거나 더 장비된 시스템이 특정 실시예에 대 해서 양호할 수 있다는 점을 알아야 한다. 따라서, 시스템(400)의 구성은, 가격 조건, 성능 요구, 기술적 진보 및/또는 그외의 상황과 같은 수많은 요인에 좌우되어 구현 예마다 가변할 수 있다.
여기 설명된 실시예들은 프로세서(402-406)와 같은 프로그램된 프로세서의 제어 하에서 실행되고 있지만, 대안 실시예에서는 필드 프로그램 가능 게이트 어레이(FPGA), 트랜지스터 트랜지스터 로직(TTL), 또는 주문형 집적 회로(ASIC)와 같은 임의의 프로그램 가능 또는 하드코어된 로직에 의해 그 전부가 또는 부분적으로 구현될 수 있다는 것을 주의해야 한다. 추가적으로, 본 발명의 실시예들은 프로그램된 범용의 컴퓨터 소자 및/또는 주문형 하드웨어 소자의 임의의 조합에 의해 실행될 수 있다. 따라서, 여기 개시된 어떤 것들도 본 발명의 여러 실시예를 특정 실시예 -기재된 실시예들은 하드웨어 소자의 특정 조합에 의해 실행될 수 있음- 에만 제한시키는 것으로 해석해서는 안 된다.
도5는 본 발명의 하나 또는 그 이상의 실시예를 구현하는 데에 쓰이는 멀티스레드 프로세서(500)의 실시예를 도시한 블록도이다. 일 실시예에 따라서, 프로세서(500)는 단일 직접 회로로서 형성될 수 있다. 또 다른 실시예에 따라서, 멀티 직접 회로는 함께 프로세서(500)를 구성할 수 있고, 다시 또 다른 실시예에 따라서 하드웨어 및 소프트웨어 루틴들(예로 이진 트랜슬레이션 루틴들)은 함께 프로세서(500)를 구성할 수 있다. 프로세서(500)는 도4의 프로세서(402-406) 중의 하나 또는 그 이상의 것을 포함할 수 있다. 예시된 대로, 버스/메모리 제어기(520)는 실행을 위한 명령을 전단(530)에 제공할 수 있다. 전단(530)은 명령 포인터들(570) 에 따라 여러 스레드들로부터의 명령의 검색을 지도할 수 있다. 명령 포인터 로직은 복사되어 멀티 스레드를 지원할 수 있다.
일 실시예에 따라서, 전단(530)은 추가 처리를 위해 명령들을 스레드/프로세서 구획가능(partitionable) 리소스들(540) 내로 공급한다. 스레드/프로세서 구획가능 리소스들(540)은 멀티 스레드가 프로세서(500) 내에서 활성화되었을 때 특정 스레드들에 전용되는 논리적으로 별개의 구획들을 포함한다. 스레드/프로세서 구획가능 리소스들(540)은 예를 들어 명령 큐들을 포함할 수 있다. 단일 스레드 모드에 있을 때, 스레드/프로세서 구획가능 리소스들의 구획들은 결합되어 하나의 스레드에 전용되는 단일 광(large) 구획을 형성할 수 있다.
일 실시예에 따라서, 프로세서(500)는 복사된 상태(580)를 포함할 수 있다. 복사된 상태(580)는 로직 프로세서용의 콘텍스트를 유지하는 데에 충분한 상태 변수들을 포함할 수 있다. 복사된 상태(580)에 의해서, 멀티 스레드는 상태 변수 저장을 위한 경쟁 없이 실행할 수 있다. 추가로, 레지스터 로케이션 로직은 각각의 스레드에 대해 복사될 수 있다. 복사된 상태 관련 로직은 적합한 리소스 구획들을 이용해 동작하여 실행을 위해 들어오는 명령들을 준비할 수 있다.
일 실시예에 따라서, 스레드/프로세서 구획가능 리소스들(540)은 명령들이 공유 리소스들(550)까지 나아가게 한다. 공유 리소스들(550)은 이들의 근원에 상관하지 않고 명령들에 대해 동작할 수 있다. 예를 들어, 스케쥴러 및 실행부들은 스레드를 알지 못하는 공유 리소스들이 될 수 있다. 구획가능 리소스들(540)은 각각의 활성 스레드에 대해 계속되는 진전을 제공하는 공정한 방식으로 스레드들 간 에서 교호함으로써 멀티 스레드들로부터의 명령들을 공유 리소스들(550)에게 공급한다.
일 실시예에 따라서 공유 리소스들(550)에는 또 다른 세트의 스레드/프로세서 구획가능 리소스들(560)이 뒤따라 올 수 있다. 스레드/프로세서 구획가능 리소스들(560)은 리 오더(re-order) 버퍼와 같은 퇴장 리소스들을 포함할 수 있다. 그에 따라, 스레드/프로세서 구획가능 리소스들(560)은 각각의 스레드로부터의 명령들의 실행이 적합하게 완결되고 이 스레드에 대한 적절한 상태가 적절하게 갱신되는 것을 보장해 줄 수 있다.
일 실시예에 따라서, 프로그래머는 메모리 로케이션에 대한 지속적인 폴링(polling)이나 또는 심지어 명령들의 실행을 요구하지 않고서 슬리프-웨이크 업 비교 및 교환을 통해서 효율적인 동기화 기능을 구현하는 메커니즘을 제공받을 수 있다. 예를 들어, 메모리 액세스 모니터(510)는 메모리 액세스 모니터(510)가 관찰하도록 인에이블될 수 있는 메모리 액세스 로케이션에 관한 정보로 프로그램될 수 있다. 그에 따라, 메모리 액세스 모니터(510)는 비교 로직(514)을 사용하여 버스/메모리 제어기(520)로부터 수신된 메모리 로케이션 정보에 대하여 비교되는 모니터 로케이션 정보 레지스터(512)를 포함할 수 있다.
모니터 로케이션 정보 레지스터(512)는 명령의 재개 또는 어웨이크닝(awakening)을 트리거링할 수 있는 사이클 및/또는 어드레스의 유형을 특정하는 상세 사항을 포함할 수 있다. 모니터(510)는 재개 신호를 시작하기 위한 타임아웃 카운터를 포함할 수 있다. 또한, 모니터(500)는 버스 상에서 오는 정보와 매칭되 는 어드레스를 포함하는 레지스터(512)를 포함할 수 있다. 버스 및 레지스터(512)(예로 타임아웃 카운터를 가짐) 간의 비교가 수행된다. 임의의 사이클이 명시적 기입 사이클 형태일 수 있고 및/또는 (예로 캐시 라인의 독점적 소유권을 낳는 액션인) 소유를 위한 판독일 수 있거나 또는 캐시 가능한 라인의 독점적 소유를 시도하는 또 다른 에이전트에 의한 무효 사이클일 수 있다.
도6은 CMPXCHG_SW를 사용하는 멀티 프로세서(602-606)를 갖는 시스템(600)의 실시예를 도시한 블록도이다. 도시된 대로, 시스템(600)은 로크(634)를 놓고 경쟁하는 멀티 프로세서(602-606)를 포함하는데, 이 로크는 메모리(632)의 공유 공간/변수(636)에 대한 (화살표 638로 표시된 바와 같은) 액세스를 제어하도록 배정된다. 도시된 실시예에서, 프로세서(602-606)의 각각은 CMPXCHG_SW 메커니즘(614-616)을 사용하는데, 이는 각각의 프로세서(602-606) 상에서 구현되는 하드웨어일 수 있고 소프트웨어 기반 동기화 코드를 이용하여 실행된다. 예시적 명령 시퀀스(620-624)가 실시예의 명료성과 보다 나은 이해를 도모하기 위해 각각의 프로세서(602-606)에 대해 도시되었다.
도시된 대로, CMPXCHG_SW 명령(608)은 프로세서(602) 상에서 실행되는데, 이는 공유 메모리 공간(636)에 대한 액세스 용의 로크(634)를 획득하는 데에 성공적이다. 메모리(632)의 공유 공간(636)은 프로세서(602)가 세마포어를 소유하는 동안에는 지속되는 시간에 사용될 수 있으나, 프로세서(602)는 획득 처리 동안에 로크(634)를 배타적 상태에서 얻고 로크(634) 상에서의 그외의 액션을 금지한다. 이후에, 공유 상태는 로크(634)의 복사본을 공유하는 데에 사용될 수 있다. 일 실시 예에서, 또 다른 프로세서(604-606)가 자유롭지 않은 로크(634)를 얻고자 시도할 때, 프로세서(604-606)에서의 CMPXCHG_SW 명령(610-612)은 슬리프 상태에 놓인다. 다른 식으로 말하면, 예를 들어, 프로세서(604)가 획득된 로크(634)를 얻고자 시도할 때, 로크(634)가 프로세서(602)에 의해 사용되고 있음을 표시하는 값이 메모리(632)로부터 리턴되고, 일 실시예에서는 프로세서(604)를 로크(634)를 이용할 수 있게 되기까지 연속적인 'while' 루프에 프로세서(604)를 놓는 대신에 프로세서(604)에서의 CMPXCHG_SW 명령(610)이 슬리프 상태에 놓인다. 비슷하게, 프로세서(606)에서의 CMPXCHG_SW 명령은 프로세서(606)가 구하고 있는 경쟁 로크(634)가 비지 상태일 때 슬리프 상태에 또한 놓여진다.
일 실시예에서, CMPXCHG_SW 명령(610-612)을 슬리프 상태에 놓는 것은 CMPXCHG_SW 명령(610-612)이 아이들 상태에 있고 이를 깨우거나 트리거링하는 이벤트를 기다리고 있음을 표시한다. CMPXCHG_SW 명령(610-612)이 아이들(idle) 또는 슬리프 상태에 있을 때, 프로세서(606-608)는, 명령들(628-630)이 퇴장하지 않았을 지라도, 더 오래된 CMPXCHG_SW 명령(610-612)이 어웨이큰(awaken)되고, 실행하고, 퇴장할 때까지는, 그외의 명령들(\628-630)과 같은 그밖의 작업들을 실행하기를 계속할 것이다. 다른 식으로 말하면, 임의의 차순의 로드들(예로, 명령 628 또는 630)은 그 값을 획득하고, 특정 태스크 및 계산을 실행할 수 있으나, 슬리프 상태에 있는 CMPXCHG_SW 명령(610-612)이 어웨이큰될 때까지는, 시험 또는 탐색 상태에서 대기한다. 리 오더 버퍼(ROB)로부터의 임의의 명령은 순서를 벗어나서 실행될 수 있다. 그러나, 아직도 탐색 단계에 있는 신규의 또는 젊은 명령들(628-630)은 가장 오랜 CMPXCHG_SW 명령(610-612)이 어웨이큰될 때까지는, 퇴장하지 않을 것이다.
CMPXCHG_SW 명령(610-612)이 슬리프하는 동안에 로컬 공유된 복사본 상에서 계속적으로 스핀-웨이팅(로딩 및 비교)하는 대신에 프로세서(604-606)로 하여금 여러 태스크들을 실행하도록 하면, 프로세서(604-606)가 차단되거나 병목 현상을 겪는 것을 회피할 수 있도록 도와준다. 이 기술은 전력 및 시간을 절감하게 하고, 성능을 향상시킨다. 이 기술은 추가로 동기화 처리들 중에서의 다이내믹한 데이터 공유가 없을 때에 동시적인 진행에 의해 도움을 준다. 예를 들어, 해시 테이블이 로크(634)에 의해 보호된다고 가정하고, 만일 두 개의 처리들이 해시 테이블의 다른 부분들의 갱신을 필요로 한다면(예로, 엘리먼트들을 다른 빈(bin)에 추가하는 것), 이 기술은 두 개의 처리들이 동시에 진행하는 것을 허용해 줄 수 있다. 이는, 하나의 프로세서가 이것이 임의의 그 밖의 프로세서와 다이내믹하게 간섭하지 않음에도 불구하고 임의의 그 밖의 프로세서 상에서의 모든 유용한 작업을 완전히 차단해버리는 손해를 감수하고 갱신을 하는 것과는 구별되는 것이다. 예를 들어, 프로세서(602)는 로크를 소유하고 적합한 해시 테이블을 로케이트하고 이를 그 값으로 갱신할 수 있다. 한편, 로크를 소유하지 않은 프로세서(604)는 적합한 빈을 로케이트하고 기입될 값과 로케이션을 준비할 수 있으나, 프로세서(604)가 로크를 획득할 수 있고 CMPXCHG_SW 명령(608)을 퇴장시키기까지는 해시 테이블을 갱신하는 명령들을 퇴장시키지는 않을 것이다.
일 실시예에서, CMPXCHG_SW 명령(610-612)의 웨이크 업은, 로크(634)가 해제 되고(및 이용할 수 있게 되고) 또는 로크(634)를 갖는 (예시적 명령 시퀀스 620 에서의) 프로세서(602)가 로크 값을 재기입하는 것과 같은 이벤트의 발생(이는 로크(634)의 잠재적 가용성을 표시함)에 의해 트리거링될 수 있다. 예를 들어, 명령(610)이 슬리프 상태에 있는 동안에, 프로세서(604)는 신규 로크값(예로 로크가 해제됨)을 구함으로써 또는 로크값을 변경시키려는 프로세서의 시도를 관측함으로써(예로 로크가 잠재적으로 해제되는 것, 공유 공간(636)을 포함하는 캐시 라인의 무효, 로크(634)를 포함하는 캐시 라인의 무효), 프로세서(604)는 로크(634)의 가용성을 모니터링할 수 있다. 일단 로크값을 변경시키려는 프로세서의 시도가 이뤄졌다면(예로 프로세서 602 가 로크 변수에 기입하기 위한 배타적인 소유권을 획득하기 위해서 프로세서(604-606)의 캐시들(도시 안됨) 내의 변수를 무효화함), CMPXCHG_SW 명령(610)의 웨이크 업이 트리거링된다. 프로세서(604)는 이후 신규값을 판독하고, 다시 한번, 공유 공간(636)의 로크(634)를 요구하고, 이 요구에 응답하여 로크 변수(634)를 수신하고, CMPXCHG 명령(610)은 실행되고 퇴장하며 (CMPXCHG_SW 명령(610)이 슬리프하는 동안에 실행되는) 임의의 그밖의 명령들(628)은 또한 차순에서 퇴장된다. 명령(610)을 슬리프 상태에 놓음으로써 프로세서(604)는 전형적인 로드, 비교, 및 브랜치 시퀀스를 통해 계속적으로 스트리밍하는 것을 회피하게 되는데, 이는 효율성을 증가시키고 전력 절감을 추가로 이뤄낸다.
일 실시예에서, CMPXCHG_SW 메커니즘(614-618)은, 대기('while' 루프) 가 하드웨어로 구현되므로, 소프트웨어 기반 스핀-루프를 갖는 것을 회피하는 데에 도움을 준다. 일 실시예에서, CMPXCHG_SW 메커니즘(614-618)은 하드웨어 및/또는 소프 트웨어 기반을 갖는데, 이는 'while' 루프를 CMPXCHG_SW 명령(610-612)의 슬리프 내에 통합시키고, 'while' 루프의 계속적인 가동을 회피하는 것을 도와준다. 메커니즘(614-616)을 구현하고 동기화하는 예시적인 동기화 코드는 다음을 포함한다.
Figure 112005034650681-pat00002
여기서, eax 및 ecx (및 ebx, edx 등)는 또한 일반적으로 R1 또는 Reg1, R2 또는 Reg2, R3 또는 Reg3 등으로 알려진 여러 레지스터를 지칭하고, zf는 프로세서의 제로 플래그 스테이터스 레지스터를 지칭하고, jne(동등하지 않다면 jump)는 이 시도가 성공적인지의 여부를 판정하는 것을 지칭하고 만일 이것이 성공적이지 않다면, 이는 라벨(예로, jne 라벨)로 브랜치 백하여 명령을 실행한다.
도7은 CMPXCHG_SW 메커니즘을 실행하기 위한 처리의 실시예를 도시한 흐름도이다. 먼저, 처리 블록(702)에서, 멀티프로세서 시스템의 프로세서는 로크를 획득하기 위해 구한다. 이 구함은 로크의 배타적인 소유를 요구하지는 않으나 대신에 이 로크는 공유 상태에서 획득될 수 있다는 것을 상정한다. 결정 블록(704)에서, 로크를 이용할 수 있는지에 대한 판정이 내려진다. 만일 로크를 이용할 수 없다 면, 프로세서는 종래의 비교 및 교환 동작을 활용하여 처리 블록(706)에서 이를 획득한다.
일 실시예에서, 만일 블록을 쓸 수 없다면, 프로세서에서의 CMPXCHG_SW 명령은, 예를 들어 이것이 처리 블록(708)에서 로크값의 변경(또는 시도된 변화)에 의해 어웨이큰될 때까지는 슬리프 상태에 놓인다. 환언하면, 일단 메모리로부터의 값이 프로세서로 리턴되어 로크의 비가용성을 표시하면, 로크를 구하고 있는, 프로세서에서의 CMPXCHG_SW 명령은 'while'루프에서 계속적으로 스핀하고 매 루프마다 로크를 다시 요구하는 CMPXCHG_SW 명령을 갖는 것이 아니라 슬리프 상태에 놓인다. 처리 블록(710)에서, 프로세서의 메모리 시스템은 로크의 가용성 또는 잠재적 사용성을 표시할 수 있는 로크값의 어떤 변화도 모니터링한다. 예를 들어, 로크에 대한 액세스를 갖는 프로세서는 그외의 프로세서들이 로크를 구하고 획득하도록 로크를 해제하기 위해 로크값을 변경시키는 시도를 할 수 있다. 임의의 그런 활동은 메모리 시스템에 의해 관찰될 것이면, 가능한 로크 가용성을 알아보도록 슬리프하고 있는 CMPXCHG_SW 명령을 어웨이큰할 수 있다.
일 실시예에서, CMPXCHG_SW 명령이 슬리프하고 있는 동안에, 프로세서의 메모리 시스템은 그 로크값의 변경을 모니터링한다. 더욱이, ROB의 그외의 CMPXCHG_SW 와 로드 명령을 포함하는 그외의 명령들은 로드되고 실행되어 이 프로세서가 처리 블록(712)에서 그외의 태스크들을 실행하기를 계속하도록 할 수 있다. 환언하면, 프로세서에서의 CMPXCHG_SW 명령의 슬리프는 프로세서를 계속적인 스핀 또는 'while' 루프에 있게 하지 않을 뿐만이 아니라, 프로세서가 차단되거나 쓰일 수 없게 되도록 하지 못하게 한다. 대신에, 순서에는 벗어나지만, 임의의 수의 차순의 명령들이 그리티컬 섹션에서 로드되고 탐색적으로 실행될 수 있으나, 슬리프하고 있는 CMPXCHG_SW 명령보다 더 젊은 명령들은, 가장 오래된 명령(예로 슬리프하고 있는 CMPXCHG_SW 명령)이 퇴장하기까지는, 퇴장하지 않을 것이다. 프로세서 중의 어느 것도 차단되지 않고 이들은 유용한 태스크를 계속 실행하여 전력 및 시간을 절감하고, 성능을 향상시킨다.
판정 블록(714)에서, 로크값이 변경되었는지 또는 값을 재기입하기 위한 시도가 이뤄졌는지에 대한 판정이 이뤄진다. 만약 그렇다면, 그외의 명령들을 실행하는 처리는 처리 블록(712)에서 계속한다. 그러나, 만일 로크값을 변경시키고자 하는 시도가 이뤄졌다면 또는 이 값이 변경되었다면, 슬리프하고 있는 CMPXCHG_SW 명령의 웨이크 업이 처리 블록(716)에서 트리거링된다. 일단 CMPXCHG_SW 명령이 어웨이큰되고 로크를 이용할 수 있게 되었다면, 로크는 처리 블록(706)에서 프로세서에 의해 획득된다. CMPXCHG_SW 명령을 어웨이크닝하기 위한 일환으로서, CMPXCHG_SW 명령은 이후 퇴장될 수 있다. 또한, 탐색적으로 실행되었던 크리티컬 섹션에 있는 임의의 차순의 명령들은 또한 퇴장될 것이다.
도8은 CMPXCHG_SW 메커니즘을 구현하기 위한 상태 머신(800) 실시예를 도시한 블록도이다. 만일 캐시 라인이 프로세서에서 쓸 수 있고 로크를 이용할 수 있다면 초기 소프트웨어 'while' 루프는 통과되고 명령(예로 CMPXCHG_SW 명령)은 실행된다. 도시된 대로, 로드는 (802)에서 발행된다. 만일 캐시 라인에 대한 히트가 있다면 (804), 그리고 값을 판독한 후에 로크를 이용할 수 있다고 판정하였다면 (로크가 언로크됨) 캐시 라인의 소유(RFO)(806)를 위해 판독 요구가 발행된다. 그러면, 로크를 원자적으로 획득하기 위한 메커니즘이 개시되어 로드와 같은 여러 마이크로 명령(upos)을 개시하는 데로 인도된다.
일 실시예에서, 로드가 발행되나(802), 캐시 라인이 미스되거나 또는 또 다른 프로세서가 이를 잡고 있거나(예로 로크됨)(810), 또는 단순히 판독하는 데에 또는 이것이 로크되었는지의 여부를 알기 위한 캐시 내의 데이터가 충분하지 않은 경우이거나 이다. 이는 버스 상에서 극복하는 데에 일부 시간이 걸리므로, 실행하는 데에 몇 개의 클록이 소모되게 할 수 있다. 이는 메모리 오더 버퍼(MOB)(812)에서 로드의 슬리프로 인도한다. MOB(812)는 로드 및 저장 버퍼들을 포함하고 메모리 동작의 적절한 순서화가 유지되도록 보장하는 데에 사용된다. MOB는 또한 캐시 미스, 메모리 순서화 의존성, 슬리핑 조건 등과 같은 몇몇 이유 때문에 종료되지 않았던 로드들을 재발행하는 데에 사용된다. 또한, MOB는 로드들이 로드되지 않았던 이유들을 추적하고 종료를 막았던 조건이 처리된 후에 이들을 웨이크 업한다. 일 실시예에서, 데이터는 캐시 내에 있고, 이 값을 판독한 후에, 이것이 로크된 것(예로 또 다른 프로세서가 이를 가진 것)을 판정한다(810). 이는 또한 로드를 MOB(812)에서 슬리프로 가도록 인도한다. 일 실시예에서, (1) 캐시 라인을 쓸 수 있는 것(예로 이제 이것이 프로세서의 캐시에 있는 것), 또는 (2) 이 값을 변수 내에 재기입하기 위해 시도하는 또 다른 프로세서가 잠재적으로 캐시 라인이 쓰일 수 있도록 만드는 것 중의 하나가 로드의 웨이크 업(814)을 트리거링할 수 있다. 이 로드는 재발행되게 되고 (816), 만일 캐시 라인이 쓰일 수 있다면(예로 히트가 있다면), 그리고 이 값을 판독한 후에 로크가 쓰일 수 있다고(언로크되었다고) 판정되었다면(818), 소유 요구는 발행되게 된다 (806). 그러나, 만일 또 다른 미스가 있다면 (820), 로드는 슬리프로 되돌아간다 (812).
일 실시예에서, 타임아웃 카운터가 도입되어 슬리프 타임에 대한 한계를 제공할 수 있다. 예를 들어, 타임아웃 카운터(822)의 개시에 의해, 프로세서가 슬리프를 시작한 이후 소정량의 시간이 경과한 후에 슬리프 타임은 종료된다. 다른 식으로 말하면, 프로세서는 또 다른 프로세서에 의해 또는 이벤트에 의해 어웨이큰되는 것을 포기하고, 대신에 그외의 태스크(예로 처리 단계 (806)으로 진행하는 것)를 실행한다. 예를 들어, 타임아웃 카운터는 로크가 비활성 프로세서에 의해 소유되었을 때 필요할 수 있는데, 이는 그 외의 프로세서들이 거의 대기 시간을 주지 않거나 또는 로크를 획득할 어떤 기회도 남겨두지 않을 수 있다. 일 실시예에서, 타임아웃 카운터에 의해 어웨이큰되고 있을 때, 명령은 로크를 획득하고자 시도할 수 있고, 성공적이지 않은 조건에 의해 퇴장할 수 있다. 또 다른 실시예에서, 어웨이큰 되고 있을 때, 명령은 로크를 획득코자 하는 시도를 중단시키고 단순하게 비성공적인 조건으로 퇴장할 수 있다. 또한, 로크를 기다리는 프로세서(예로, 슬리프 모드의 CMPXCHG_SW 명령을 갖는 프로세서)는 (824)에서 시간이 종료되고, 이 특정 로크를 획득하기를 포기하고, 효율성을 지속하기 위해서 다른 태스크들을 실행한다. 또한 타임아웃(824)은, 슬리프 상태(812)로부터 빠져나오는 것을 야기할 수 있는데, 이는 프로세서가 잠시동안 로크를 획득하고자 시도하였으나 또 다른 프로세서가 라인에 기입하고 있는 것을 표시하는 캐시 라인의 무효를 볼 수 없었다는 점을 나타낸다.
CMPXCHG 메커니즘은 인텔의 Pentium 프로세서와 같은 임의 수의 마이크로프로세서 아키텍쳐에서 구현되고 이것과 호환될 수 있다. 이런 아키텍쳐의 변화는, 슬리프 모드를 구현하기 위한 상태 머신(800)이 데이터 캐시부(DCU)에 배치될 수 있는 경우에, 프로세서의 MOB 및 DCU 에 미미한 영향을 끼칠 수 있다. 예를 들어, 메모리 시스템의 3 비트의 데이터가 로크된 또는 언로크된 것을 표시하는 데에 사용될 수 있고, 따라서 이 비교는 최하위 3 비트의 레지스터(예로 eax)에 대해서 이뤄질 수 있다. 그러나, 임의 수의 비트(예로, 32)가 메모리 시스템에서 사용되어 로크/언로크 상태를 표시하는 데에 사용될 수 있고, 이 수는 필요한 또는 소망되는 어떤 방식으로든(예로 언로크에 대한 비트와 언로크는 동등하지 않을 수 있다) 분할될 수 있다. 더욱이, CMPXCHG_SW 메커니즘은 각각 언로크된 및 로크된 값에 대해 값 0 및 1을 사용할 수 있고, 따라서 3의 최하위 비트로 충분할 수 있다. 일 실시예에서, 스레드는 상태를 표시하기 위해서, 1 및 0 대신에 식별(ID) 값을 삽입할 수 있다. 또한, 0 이 자유 상태를 표시할 수 있는 한편, 임의의 제로가 아닌 값이 로크 상태를 표시할 수 있다. 일 실시예에서, 만일 3 비트의 예측된 자유값과 메모리로부터 로드된 비트의 값이 다르다면, 로크는 자유롭지 않은 것으로 취급될 수 있다. 그러나, 만일 값들이 매칭된다면, 로크는 자유한 것으로 여겨지거나 여겨지지 않을 수 있다. 예를 들어, 이 비교는 현행 값과 언로크된 값 간의 부분적 매칭을 표시할 수 있다. 부분적 매칭들은 로크를 획득코자 하는 시도(예로 처리 블록 806 및 808)로 동작을 개시할 수 있다. 그러나, 모든 비트들이 CMPXCHG_SW 메커니즘을 사용하여 비교될 때, 이 동작은 로크가 또 다른 프로세서에 의해 획득되었다는 것을 발견할 수 있고 코드 내의 브랜치를 취할 수 있고 재시도할 수 있다.
일 실시예에서, 예를 들어, 이 비교는 eax[2:0]의 값(예로 하위 3 비트의 eax)을 유지하고, 데이터가 load_with_store_intent uop를 위해 캐시(예로 L1 캐시)로부터 리턴되었을 때, 이는 eax 비교기에 대하여 비교된다. load_with_store_intent uop 는 cmpxchg 명령의 구성 uop이고 로크 변수로서 사용되고 있는 메모리 로케이션의 값을 로드한다. 만일 이 두 개가 동등하다면, 이 값은 라이트 백 버스 상에서 라이트 백 된다. 만일 두 개가 동등하지 않다면, DCU는 라이트 백을 중단하고 로드를 MOB내에서 슬리프하도록 놓고 타임아웃 카운터를 개시한다. 만일 MOB가 로크 캐시 라인에 대한 무효 스누핑을 검출하였다면, 이는 load_with_store_intent uop 를 웨이크 업하고 다시 디스패치(re-dispatch)한다. 타임아웃 카운터는 이후 매 클록마다 감분될 수 있다. 이것이 0에 동등할 때, DCU는 타임아웃 신호를 MOB에 보낼 수 있다. MOB는 타임아웃 신호를 수신하였을 때 load_with_store_intent uop를 디스패치한다. 이 디스패치 동안에 load_with_store_intent uop는 실행하여 종료되고 비교의 결과에 관계없이 퇴장한다.
본 발명의 슬리프-웨이크 업 메커니즘 구성에 의해, 예를 들어, 프로세서에서의 CMPXCHG_SW 명령의 슬리프는 프로세서를 계속적인 스핀 또는 'while' 루프에 있지 못하게 하고 또한 프로세서가 차단되거나 쓰일 수 없게 되는 것을 방지함으로써, 프로세서 중의 어느 것도 차단되지 않고 이들이 유용한 태스크를 계속 실행하게 하여, 전력 및 시간을 절감하고 성능을 향상시키는 효과를 획득할 수 있다.
본 발명의 예시적 실시예들에 대한 이상의 설명에서, 본 발명의 여러 특징들이, 본 개시를 합리적으로 제시하여 여러 발명 사항들을 잘 이해시키기 위한 목적으로, 단일 실시예, 도면, 또는 이것의 설명 부분에 때로는 함께 그룹화되어 있다는 것을 알아야 한다. 특정 예시적 실시예들이 첨부 도면들에서 설명되고 도시되었지만, 이런 실시예들은 예시적인 것일 뿐이고 제한적인 의미로 주어진 것은 아니며 여러 변경들이 본 개시를 읽어 본 당업자에 의해 이뤄질 수 있으므로 본 발명의 실시예들은 도시되고 설명된 특정 구성 및 배치에만 국한되는 것이 아님을 알아야 한다.

Claims (24)

  1. 프로세서를 대신하여 로크(lock)를 획득하기 위해 프로세서에서 명령을 실행하는 단계;
    만일 상기 로크가 이용가능하지 않다면(unavailable), 상기 프로세서에서의 상기 명령을 슬리프(sleep) 상태에 놓는 단계;
    상기 프로세서에서의 상기 명령이 이벤트(event)에 응답하여 슬리프 상태를 벗어나도록 하는 단계 - 상기 슬리프 상태를 벗어나는 것은 상기 슬리프 상태 동안 상기 프로세서에 의해 양도되었던(relinquished) 프로세싱 리소스들(processing resource)에 대한 제어를 재개하는 단계를 포함함 -; 및
    상기 프로세서에서의 상기 명령이 상기 슬리프 상태를 벗어난 후, 경합된 로크와 연관된 노드의 모니터링을 디스에이블(disable)시키는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 로크에 대응하는 메모리 어드레스를 모니터링하는 단계를 더 포함하고, 상기 로크는 메모리의 공유 메모리 공간에 대한 프로세서의 액세스를 제어하는 것을 특징으로 하는 방법.
  3. 제1항에 있어서, 상기 명령은 상기 프로세서가 상기 로크를 획득하도록 하기위해 비교 및 교환 동작(compare and exchange operation)을 실행하는 비교 및 교환 명령을 포함하고, 상기 비교 및 교환 동작은 원자(atomic) 비교 및 교환 동작을 포함하는 방법.
  4. 제1항에 있어서,
    상기 이벤트가 발생했는지의 여부를 판정하기 위해 로크값을 갖는 수신지(destination)를 모니터링하는 단계 -상기 수신지의 모니터링하는 단계는 상기 로크값의 변화 및 상기 로크값을 변화시키려는 시도 중 하나 이상을 관찰하는 단계를 포함하고, 상기 수신지는 레지스터 또는 메모리 로케이션을 포함함-;
    상기 이벤트의 발생을 검출하는 단계;
    상기 이벤트가 발생한 경우, 상기 명령을 웨이크 업(wake up)하는 단계 -상기 이벤트는 만일 상기 로크값이 변화하였다면 상기 로크를 이용할 수 있게 되는 것과 만일 상기 로크값을 변화시키려는 상기 시도가 발생하였다면 상기 로크를 잠재적으로 이용할 수 있게 되는 것 중 하나 이상을 포함함-; 및
    상기 프로세서가 상기 이용할 수 있는 로크를 획득하는 단계
    를 더 포함하는 방법.
  5. 제1항에 있어서, 상기 명령을 슬리프 상태에 놓는 단계는, 복수의 명령의 로드(load) 및 상기 복수의 명령의 실행 중 하나 이상을 포함하는 다른 태스크들을 실행하는데 사용하기 위해 상기 프로세서에 대한 리소스들을 양도하는 단계를 포함하는 방법.
  6. 제5항에 있어서, 상기 리소스들을 양도하는 단계는,
    레지스터 풀에 있는 복수의 레지스터를 양도하는 단계;
    명령 큐에 있는 복수의 명령 큐 엔트리를 양도하는 단계;
    저장 버퍼에 있는 복수의 저장 버퍼 엔트리를 양도하는 단계; 및
    리 오더(re-order) 버퍼에 있는 복수의 리 오더 버퍼 엔트리를 양도하는 단계
    를 포함하는 방법.
  7. 프로세서를 대신하여 로크를 획득하기 위해 명령을 실행할 수 있는 실행부; 및
    만일 상기 프로세서가 상기 로크를 획득하는 데에 실패했다면 상기 명령을 슬리프 상태에 놓고, 상기 프로세서에서의 상기 명령이 이벤트에 응답하여 슬리프 상태를 벗어나도록 하고, 상기 프로세서에서의 상기 명령이 상기 슬리프 상태를 벗어난 후, 경합된 로크와 연관된 노드의 모니터링을 디스에이블시키기 위한 슬리프 웨이크 업 메커니즘(sleep-wakeup mechanism)
    을 포함하고,
    상기 슬리프 상태를 벗어나는 것은, 상기 슬리프 상태 동안 상기 프로세서에 의해 양도되었던 프로세싱 리소스들에 대한 제어를 재개하는 것을 포함하는, 프로세서.
  8. 제7항에 있어서, 상기 명령은 상기 프로세서가 상기 로크를 획득하도록 하기 위해 비교 및 교환 동작을 실행하는 비교 및 교환 명령을 포함하고, 상기 비교 및 교환 동작은 원자 비교 및 교환 동작을 포함하는 프로세서.
  9. 제7항에 있어서,
    상기 이벤트가 발생했는지의 여부를 판정하기 위해 로크값을 갖는 수신지를모니터링하기 위한 모니터링 로직 -상기 수신지의 모니터링은 상기 로크값의 변화 및 상기 로크값을 변화시키려는 시도 중 하나 이상을 관찰하는 것을 포함하고, 상기 수신지는 전용 레지스터 또는 메모리 로케이션을 포함함-; 및
    상기 이벤트의 발생을 검출하는 검출 로직
    을 더 포함하고,
    상기 슬리프-웨이크 업 메커니즘은, 상기 이벤트가 발생하였을 때 상기 명령을 웨이크 업하고, 상기 이벤트는 만일 상기 로크값이 변화하였다면 상기 로크를 이용할 수 있게 되는 것과, 만일 상기 로크값을 변화시키려는 상기 시도가 발생하였다면 상기 로크를 잠재적으로 이용할 수 있게 되는 것 중 하나 이상을 포함하는, 프로세서.
  10. 제7항에 있어서, 상기 명령을 슬리프 상태에 놓는 것은 복수의 명령의 로드 및 상기 복수의 명령의 실행 중 하나 이상을 포함하는 다른 태스크들을 실행하는데 사용하기 위해 상기 프로세서에 대한 리소스들을 양도하는 것을 포함하는, 프로세서.
  11. 제10항에 있어서, 상기 리소스들을 양도하는 것은,
    레지스터 풀에 있는 복수의 레지스터를 양도하고,
    명령 큐에 있는 복수의 명령 큐 엔트리를 양도하고,
    저장 버퍼에 있는 복수의 저장 버퍼 엔트리를 양도하고,
    리 오더 버퍼에 있는 복수의 리 오더 버퍼 엔트리를 양도하는 것
    을 포함하는 프로세서.
  12. 제7항에 있어서, 상기 프로세서를 메모리에 결합시키는 버스 인터페이스부를 더 포함하고, 상기 버스 인터페이스부는 전용 레지스터를 더 포함하는 프로세서.
  13. 제7항에 있어서, 상기 비교 및 교환 명령을 포함하는 복수의 명령을 갖는 명령 세트를 더 포함하는 프로세서.
  14. 제1 프로세서를 포함하는 복수의 프로세서;
    상기 복수의 프로세서에 결합되고, 상기 복수의 프로세서에 의해 공유되는 메모리 공간을 갖는 메모리; 및
    상기 메모리 및 상기 복수의 프로세서에 결합되고, 상기 메모리 공간에 대한 액세스를 제어하기 위한 로크를 갖는 로크 저장 로케이션
    을 포함하고,
    상기 제1 프로세서는,
    상기 제1 프로세서를 대신하여 로크를 획득하기 위해 명령을 실행할 수 있는 실행부; 및
    만일 상기 제1 프로세서가 상기 로크를 획득하는 데에 실패했다면 상기 명령을 슬리프 상태에 놓고, 상기 제1 프로세서에서의 상기 명령이 이벤트에 응답하여 슬리프 상태를 벗어나도록 하고, 상기 제1 프로세서에서의 상기 명령이 상기 슬리프 상태를 벗어난 후, 경합된 로크와 연관된 노드의 모니터링을 디스에이블시키기 위한 슬리프 웨이크 업 메커니즘
    을 포함하고,
    상기 슬리프 상태를 벗어나는 것은, 상기 슬리프 상태 동안 상기 제1 프로세서에 의해 양도되었던 프로세싱 리소스들에 대한 제어를 재개하는 것을 포함하는, 시스템.
  15. 제14항에 있어서, 상기 명령은 논리 프로세서 또는 스레드를 갖는 상기 제1 프로세서가 상기 로크를 획득하도록 하기 위해 비교 및 교환 동작을 실행하기 위한 비교 및 교환 명령을 포함하는 시스템.
  16. 제14항에 있어서,
    상기 이벤트가 발생했는지의 여부를 판정하기 위해 로크값을 갖는 수신지를모니터링하는 모니터링 로직 -상기 수신지의 모니터링은 상기 로크값의 변화 및 상기 로크값을 변화시키려는 시도 중 하나 이상을 관찰하는 것을 포함하고, 상기 수신지는 전용 레지스터 또는 메모리 로케이션을 포함함-; 및
    상기 이벤트의 발생을 검출하는 검출 로직
    을 포함하고,
    상기 슬리프-웨이크 업 메커니즘은, 상기 이벤트가 발생하였을 때 상기 명령을 웨이크 업하고, 상기 이벤트는 만일 상기 로크값이 변화하였다면 상기 로크를 이용할 수 있게 되는 것과, 만일 상기 로크값을 변화시키려는 상기 시도가 발생하였다면 상기 로크를 잠재적으로 이용할 수 있게 되는 것 중 하나 이상을 포함하는, 시스템.
  17. 제14항에 있어서, 상기 명령을 슬리프 상태에 놓는 것은 복수의 명령의 로드 및 상기 복수의 명령의 실행 중의 하나 이상을 포함하는 다른 태스크들을 실행하는데 사용하기 위해 상기 프로세서에 대한 리소스들을 양도하는 것을 포함하는 시스템.
  18. 제17항에 있어서, 상기 리소스들을 양도하는 것은,
    레지스터 풀에 있는 복수의 레지스터를 양도하고,
    명령 큐에 있는 복수의 명령 큐 엔트리를 양도하고,
    저장 버퍼에 있는 복수의 저장 버퍼 엔트리를 양도하고,
    리 오더 버퍼에 있는 복수의 리 오더 버퍼 엔트리를 양도하는 것
    을 포함하는 시스템.
  19. 명령들을 저장한 머신 판독 가능 매체로서,
    상기 명령들은 실행되는 경우, 상기 머신으로 하여금,
    프로세서를 대신하여 로크를 획득하는 것을 돕기 위해 프로세서에서 명령을 실행하는 단계;
    만일 상기 로크가 이용가능하지 않다면 상기 프로세서에서의 상기 명령을 슬리프 상태에 놓는 단계;
    상기 프로세서에서의 상기 명령이 이벤트에 응답하여 슬리프 상태를 벗어나도록 하는 단계 - 상기 슬리프 상태를 벗어나는 것은 상기 슬리프 상태 동안 상기 프로세서에 의해 양도되었던 프로세싱 리소스들에 대한 제어를 재개하는 단계를 포함함 -; 및
    상기 프로세서에서의 상기 명령이 상기 슬리프 상태를 벗어난 후, 경합된 로크와 연관된 노드의 모니터링을 디스에이블시키는 단계
    를 수행하도록 하는, 머신 판독 가능 매체.
  20. 제19항에 있어서, 상기 명령들은, 실행되는 경우 상기 머신으로 하여금 상기 로크에 대응하는 메모리 어드레스를 모니터링하는 단계를 더 수행하도록 하고, 상기 로크는 메모리의 공유 메모리 공간에 대한 프로세서의 액세스를 제어하는, 머신 판독 가능 매체.
  21. 제19항에 있어서, 상기 명령은 상기 프로세서가 상기 로크를 획득하도록 하기 위해 비교 및 교환 동작을 실행하는 비교 및 교환 명령을 포함하고, 상기 비교 및 교환 동작은 원자 비교 및 교환을 포함하는 머신 판독 가능 매체.
  22. 제19항에 있어서, 상기 명령들은, 실행되는 경우 상기 머신으로 하여금,
    상기 이벤트가 발생했는지의 여부를 판정하기 위해 로크값을 갖는 수신지를모니터링하는 단계 -상기 수신지의 모니터링은 상기 로크값의 변화 및 상기 로크값을 변화시키려는 시도 중 하나 이상을 관찰하는 것을 포함하고, 상기 수신지는 레지스터 또는 메모리 로케이션을 포함함-;
    상기 이벤트의 발생을 검출하는 단계;
    상기 이벤트가 발생하였을 때 상기 명령을 웨이크 업하는 단계 -상기 이벤트는 만일 상기 로크값이 변화하였다면 상키 로크를 이용할 수 있게 되는 것과 만일 상기 로크값을 변화시키려는 상기 시도가 발생하였다면 상기 로크를 잠재적으로 이용할 수 있게 되는 것 중 하나 이상을 포함함-; 및
    상기 프로세서를 대신하여 상기 이용할 수 있는 로크를 획득하는 단계
    를 수행하도록 하는, 머신 판독 가능 매체.
  23. 제19항에 있어서, 상기 명령을 슬리프 상태에 놓는 단계는, 복수의 명령의 로드 및 상기 복수의 명령의 실행 중 하나 이상을 포함하는 다른 태스크들을 실행하는데 사용하기 위해 상기 프로세서에 대한 리소스들을 양도하는 단계를 포함하는, 머신 판독 가능 매체.
  24. 제23항에 있어서, 상기 리소스들을 양도하는 단계는,
    레지스터 풀에 있는 복수의 레지스터를 양도하는 단계,
    명령 큐에 있는 복수의 명령 큐 엔트리를 양도하는 단계,
    저장 버퍼에 있는 복수의 저장 버퍼 엔트리를 양도하는 단계, 및
    리 오더 버퍼에 있는 복수의 리 오더 버퍼 엔트리를 양도하는 단계
    를 포함하는, 머신 판독 가능 매체.
KR1020050056393A 2004-06-30 2005-06-28 슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작 KR100829638B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/880,638 US8607241B2 (en) 2004-06-30 2004-06-30 Compare and exchange operation using sleep-wakeup mechanism
US10/880,638 2004-06-30

Publications (2)

Publication Number Publication Date
KR20060048630A KR20060048630A (ko) 2006-05-18
KR100829638B1 true KR100829638B1 (ko) 2008-05-16

Family

ID=34941754

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050056393A KR100829638B1 (ko) 2004-06-30 2005-06-28 슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작

Country Status (6)

Country Link
US (2) US8607241B2 (ko)
EP (1) EP1612661A3 (ko)
JP (2) JP2006031691A (ko)
KR (1) KR100829638B1 (ko)
CN (1) CN100407136C (ko)
TW (1) TWI285332B (ko)

Families Citing this family (70)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8099538B2 (en) * 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US20070271450A1 (en) * 2006-05-17 2007-11-22 Doshi Kshitij A Method and system for enhanced thread synchronization and coordination
US8468526B2 (en) * 2006-06-30 2013-06-18 Intel Corporation Concurrent thread execution using user-level asynchronous signaling
KR101205323B1 (ko) * 2006-09-28 2012-11-27 삼성전자주식회사 리텐션 입/출력 장치를 이용하여 슬립모드를 구현하는시스템 온 칩
WO2009050644A1 (en) * 2007-10-18 2009-04-23 Nxp B.V. Data processing system with a plurality of processors, cache circuits and a shared memory
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8612977B2 (en) * 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8640141B2 (en) * 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8316218B2 (en) * 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8171476B2 (en) 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8788795B2 (en) * 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8452947B2 (en) * 2008-02-01 2013-05-28 International Business Machines Corporation Hardware wake-and-go mechanism and content addressable memory with instruction pre-fetch look-ahead to detect programming idioms
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8386822B2 (en) * 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8516484B2 (en) 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8015379B2 (en) * 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8880853B2 (en) * 2008-02-01 2014-11-04 International Business Machines Corporation CAM-based wake-and-go snooping engine for waking a thread put to sleep for spinning on a target address lock
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8225120B2 (en) 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8145849B2 (en) * 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8250396B2 (en) * 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8145931B2 (en) * 2008-05-27 2012-03-27 Sharp Laboratories Of America, Inc. Imaging device with adaptive power saving behavior and method for use thereon
US8555292B2 (en) * 2008-06-27 2013-10-08 Microsoft Corporation Synchronizing communication over shared memory
EP2144163A1 (en) * 2008-07-09 2010-01-13 Software AG Method and system for synchronizing the execution of a critical code section
US7792916B2 (en) * 2008-10-20 2010-09-07 International Business Machines Corporation Management of cluster-wide resources with shared variables
US20100146169A1 (en) * 2008-12-05 2010-06-10 Nuvoton Technology Corporation Bus-handling
US8082315B2 (en) * 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8145723B2 (en) * 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8230201B2 (en) * 2009-04-16 2012-07-24 International Business Machines Corporation Migrating sleeping and waking threads between wake-and-go mechanisms in a multiple processor data processing system
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US8156275B2 (en) 2009-05-13 2012-04-10 Apple Inc. Power managed lock optimization
US8266383B1 (en) * 2009-09-28 2012-09-11 Nvidia Corporation Cache miss processing using a defer/replay mechanism
US8601242B2 (en) * 2009-12-18 2013-12-03 Intel Corporation Adaptive optimized compare-exchange operation
US8464035B2 (en) 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
US8996845B2 (en) * 2009-12-22 2015-03-31 Intel Corporation Vector compare-and-exchange operation
US8516577B2 (en) * 2010-09-22 2013-08-20 Intel Corporation Regulating atomic memory operations to prevent denial of service attack
US8732496B2 (en) * 2011-03-24 2014-05-20 Nvidia Corporation Method and apparatus to support a self-refreshing display device coupled to a graphics controller
JP5819184B2 (ja) 2011-12-28 2015-11-18 富士通株式会社 情報処理装置及び情報処理装置の制御方法
CN104583956B (zh) 2012-06-15 2019-01-04 英特尔公司 用于实现加载存储重新排序和优化的指令定义
CN104583975B (zh) 2012-06-15 2017-07-14 英特尔公司 无消歧乱序加载存储队列
CN104583943B (zh) 2012-06-15 2018-06-08 英特尔公司 拥有具有分布式结构的动态分派窗口的虚拟加载存储队列
KR101996592B1 (ko) 2012-06-15 2019-07-04 인텔 코포레이션 명확화 없는 비순차 load store 큐를 갖는 재정렬된 투기적 명령어 시퀀스들
EP2862084A4 (en) 2012-06-15 2016-11-30 Soft Machines Inc METHOD AND SYSTEM FOR IMPLEMENTING RECOVERY FROM A SPECULATIVE TRANSMISSION OF FAULT FORECASTS / ERRORS DUE TO THE CHANGE AND OPTIMIZATION OF MEMORY LOADS
CN104583936B (zh) 2012-06-15 2019-01-04 英特尔公司 具有组成按序从存储器进行读取的加载的存储器一致性模型中的乱序加载的信号量方法和系统
KR101996351B1 (ko) 2012-06-15 2019-07-05 인텔 코포레이션 통합된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
US8719504B2 (en) * 2012-09-14 2014-05-06 International Business Machines Corporation Efficient processing of cache segment waiters
JP6129976B2 (ja) * 2012-10-04 2017-05-17 クゥアルコム・インコーポレイテッドQualcomm Incorporated 高効率アトミック演算を使用した方法および装置
CN103885824B (zh) * 2012-12-21 2017-06-20 华为技术有限公司 接口控制电路、设备和标识切换方法
TWI573015B (zh) 2013-06-19 2017-03-01 祥碩科技股份有限公司 防超時方法及資料處理系統
US9465432B2 (en) * 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US11257271B2 (en) 2013-09-26 2022-02-22 Imagination Technologies Limited Atomic memory update unit and methods
US9466091B2 (en) 2013-09-26 2016-10-11 Imagination Technologies Limited Atomic memory update unit and methods
GB2520603B (en) * 2013-09-26 2016-04-06 Imagination Tech Ltd Atomic memory update unit and methods
US9817703B1 (en) * 2013-12-04 2017-11-14 Amazon Technologies, Inc. Distributed lock management using conditional updates to a distributed key value data store
US9372500B2 (en) 2014-02-27 2016-06-21 Applied Micro Circuits Corporation Generating a timeout signal based on a clock counter associated with a data request
US9558032B2 (en) 2014-03-14 2017-01-31 International Business Machines Corporation Conditional instruction end operation
US9454370B2 (en) 2014-03-14 2016-09-27 International Business Machines Corporation Conditional transaction end instruction
US10120681B2 (en) 2014-03-14 2018-11-06 International Business Machines Corporation Compare and delay instructions
US10198274B2 (en) * 2015-03-27 2019-02-05 Intel Corporation Technologies for improved hybrid sleep power management
US10191747B2 (en) * 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
CN105068904A (zh) * 2015-08-17 2015-11-18 浪潮电子信息产业股份有限公司 一种linux系统下自动计算内存理论带宽的方法
US11216378B2 (en) * 2016-09-19 2022-01-04 Advanced Micro Devices, Inc. Techniques for handling cache coherency traffic for contended semaphores
CN110825530B (zh) * 2018-08-10 2022-12-23 昆仑芯(北京)科技有限公司 用于人工智能芯片的指令执行方法和装置
US10901807B2 (en) 2019-01-02 2021-01-26 International Business Machines Corporation Computer system with concurrency for multithreaded applications
US11105645B2 (en) * 2019-05-28 2021-08-31 Glazberg, Applebaum & co. Navigation in vehicles and in autonomous cars
CN112130904B (zh) * 2020-09-22 2024-04-30 黑芝麻智能科技(上海)有限公司 处理系统、处理器间通信方法、以及共享资源管理方法
JP2022093892A (ja) * 2020-12-14 2022-06-24 トヨタ自動車株式会社 車載システム、車載システム制御方法、及び車載システム制御プログラム

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5274809A (en) * 1988-05-26 1993-12-28 Hitachi, Ltd. Task execution control method for a multiprocessor system with enhanced post/wait procedure
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
JPH05225149A (ja) 1992-02-13 1993-09-03 Toshiba Corp ロック方式
JPH07319716A (ja) 1994-05-23 1995-12-08 Hitachi Ltd 計算機システムの資源の排他制御方式
JP3745800B2 (ja) 1995-09-29 2006-02-15 富士通株式会社 共有資源の排他制御方式
US5787026A (en) 1995-12-20 1998-07-28 Intel Corporation Method and apparatus for providing memory access in a processor pipeline
US6237024B1 (en) 1998-03-20 2001-05-22 Sun Microsystem, Inc. Method and apparatus for the suspension and continuation of remote processes
US6938263B2 (en) * 1996-04-23 2005-08-30 Sun Microsystems, Inc. System and method for facilitating dynamic loading of “stub” information to enable a program operating in one address space to invoke processing of a remote method or procedure in another address space
US5860126A (en) 1996-12-17 1999-01-12 Intel Corporation Controlling shared memory access ordering in a multi-processing system using an acquire/release consistency model
US5889983A (en) 1997-01-21 1999-03-30 Intel Corporation Compare and exchange operation in a processing system
US5790851A (en) 1997-04-15 1998-08-04 Oracle Corporation Method of sequencing lock call requests to an O/S to avoid spinlock contention within a multi-processor environment
US6112222A (en) 1998-08-25 2000-08-29 International Business Machines Corporation Method for resource lock/unlock capability in multithreaded computer environment
US6223335B1 (en) 1998-12-09 2001-04-24 Sun Microsystems, Inc. Platform independent double compare and swap operation
JP2001084235A (ja) * 1999-09-10 2001-03-30 Nec Corp ロック粒度統計情報を利用した排他制御方法及びプログラムを記録した機械読み取り可能な記録媒体
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
US6473819B1 (en) * 1999-12-17 2002-10-29 International Business Machines Corporation Scalable interruptible queue locks for shared-memory multiprocessor
US6886105B2 (en) 2000-02-14 2005-04-26 Intel Corporation Method and apparatus for resuming memory operations from a low latency wake-up low power state
US6615340B1 (en) * 2000-03-22 2003-09-02 Wilmot, Ii Richard Byron Extended operand management indicator structure and method
US6502170B2 (en) 2000-12-15 2002-12-31 Intel Corporation Memory-to-memory compare/exchange instructions to support non-blocking synchronization schemes
JP3796124B2 (ja) * 2001-03-07 2006-07-12 株式会社ルネサステクノロジ スレッド間優先度可変プロセッサ
WO2003040948A1 (fr) 2001-11-08 2003-05-15 Fujitsu Limited Ordinateur et procede de commande
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
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
JP2004135875A (ja) 2002-10-17 2004-05-13 Konsho Ryu 巻取り装置付き靴
US7559060B2 (en) * 2003-06-10 2009-07-07 National Instruments Corporation Time-bounded program execution
US7213093B2 (en) 2003-06-27 2007-05-01 Intel Corporation Queued locks using monitor-memory wait
EP1503309A1 (en) 2003-07-31 2005-02-02 Deutsche Börse Ag Data validity control in straight-through processing systems
JP2005225149A (ja) 2004-02-16 2005-08-25 Mitsubishi Paper Mills Ltd インクジェット記録材料
JP4376692B2 (ja) 2004-04-30 2009-12-02 富士通株式会社 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ
US7529914B2 (en) 2004-06-30 2009-05-05 Intel Corporation Method and apparatus for speculative execution of uncontended lock instructions
US7437581B2 (en) 2004-09-28 2008-10-14 Intel Corporation Method and apparatus for varying energy per instruction according to the amount of available parallelism
US7555630B2 (en) 2004-12-21 2009-06-30 Intel Corporation Method and apparatus to provide efficient communication between multi-threaded processing elements in a processor unit
US8010969B2 (en) 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US8099538B2 (en) 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
JP4129532B2 (ja) 2007-09-11 2008-08-06 株式会社高尾 弾球遊技機
US7904696B2 (en) 2007-09-14 2011-03-08 Intel Corporation Communication paths for enabling inter-sequencer communication following lock competition and accelerator registration
US8555016B2 (en) 2008-12-17 2013-10-08 Intel Corporation Unified optimistic and pessimistic concurrency control for a software transactional memory (STM) system
US8316194B2 (en) 2009-12-15 2012-11-20 Intel Corporation Mechanisms to accelerate transactions using buffered stores
US8479053B2 (en) 2010-07-28 2013-07-02 Intel Corporation Processor with last branch record register storing transaction indicator
US8446903B1 (en) 2012-05-22 2013-05-21 Intel Corporation Providing a load/store communication protocol with a low power physical unit

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
1990.01. IEEE Transactions on parallel and distributed systems, vol.1, no.1, Thomas E. Anderson, ''The performance of spin lock alternatives for shared-memory multiporcessors'' 1990.01 *
2003.07.21, IEEE 802.16 Broadband Wireless Access Working Group, Changhoi Koo외 3인저, ''Some message change in IEEE 802.16e Sleep Mode''(http://ieee802.0rg/16) *
IEEE 802.16 Broadband Wireless Access Working Group, Changhoi Koo외 3인저, Some message change in IEEE 802.16e Sleep Mode *
IEEE Transactions on parallel and distributed systems, vol.1, no.1, Thomas E. Anderson, ''The performance of spin lock alternatives for shared-memory multiporcessors'' *

Also Published As

Publication number Publication date
JP2006031691A (ja) 2006-02-02
KR20060048630A (ko) 2006-05-18
US9733937B2 (en) 2017-08-15
EP1612661A3 (en) 2007-09-19
US20130232499A1 (en) 2013-09-05
EP1612661A2 (en) 2006-01-04
TWI285332B (en) 2007-08-11
TW200614075A (en) 2006-05-01
JP2009151793A (ja) 2009-07-09
CN100407136C (zh) 2008-07-30
CN1716186A (zh) 2006-01-04
US20060005197A1 (en) 2006-01-05
JP5054665B2 (ja) 2012-10-24
US8607241B2 (en) 2013-12-10

Similar Documents

Publication Publication Date Title
KR100829638B1 (ko) 슬리프-웨이크 업 메커니즘을 이용한 비교 및 교환 동작
JP4764430B2 (ja) マルチプロセッサ環境におけるトランザクションベースの共有データオペレーション
AU2011305091B2 (en) Apparatus, method, and system for dynamically optimizing code utilizing adjustable transaction sizes based on hardware limitations
US7882339B2 (en) Primitives to enhance thread-level speculation
US8539485B2 (en) Polling using reservation mechanism
US8065499B2 (en) Methods and apparatus to implement parallel transactions
US8276149B2 (en) Thread livelock reduction unit
US7266648B2 (en) Cache lock mechanism with speculative allocation
JP4376692B2 (ja) 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ
SG188993A1 (en) Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
KR20060029151A (ko) 모니터-메모리 대기를 사용하여 큐잉된 로크들
JP2005339500A (ja) データ処理装置及び共用資源へのアクセス制御方法
CN107003896B (zh) 具有共享事务处理资源的装置和数据处理方法
US7080209B2 (en) Method and apparatus for processing a load-lock instruction using a relaxed lock protocol

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: 20130503

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140502

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150430

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160427

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170504

Year of fee payment: 10

LAPS Lapse due to unpaid annual fee