KR20040068993A - 특정 메모리 액세스가 발생할 때까지 스레드의 실행을중단하기 위한 방법 및 장치 - Google Patents

특정 메모리 액세스가 발생할 때까지 스레드의 실행을중단하기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20040068993A
KR20040068993A KR10-2004-7010389A KR20047010389A KR20040068993A KR 20040068993 A KR20040068993 A KR 20040068993A KR 20047010389 A KR20047010389 A KR 20047010389A KR 20040068993 A KR20040068993 A KR 20040068993A
Authority
KR
South Korea
Prior art keywords
thread
monitor
address
processor
response
Prior art date
Application number
KR10-2004-7010389A
Other languages
English (en)
Other versions
KR100814993B1 (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 KR20040068993A publication Critical patent/KR20040068993A/ko
Application granted granted Critical
Publication of KR100814993B1 publication Critical patent/KR100814993B1/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • 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/30079Pipeline control instructions, e.g. multicycle NOP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Acyclic And Carbocyclic Compounds In Medicinal Compositions (AREA)
  • Debugging And Monitoring (AREA)

Abstract

특정 메모리 액세스가 발생할 때까지 스레드의 실행을 중단하기 위한 기술에 관한 것이다. 일 실시예에서, 프로세서는 다중 스레드를 실행할 수 있는 다중 실행 유닛을 포함한다. 제1 스레드는 모니터 주소를 지정하는 명령을 포함한다. 중단 로직은 제1 스레드의 실행을 중단시키고, 모니터는 특정 메모리 주소로의 액세스에 응답하여 제1 스레드를 재개시킨다.

Description

특정 메모리 액세스가 발생할 때까지 스레드의 실행을 중단하기 위한 방법 및 장치{A METHOD AND APPARATUS FOR SUSPENDING EXECUTION OF A THREAD UNTIL A SPECIFIED MEMORY ACCESS OCCURS}
관련 출원들
이 출원은 2001년 12월 31일 미국에 출원된 발명의 명칭이 "멀티-스레딩 프로세서에서 스레드의 실행 중단(Suspending Execution of a Thread in a Multi-threaded Processor)"인 미국 출원 번호 10/039,777; 발명의 명칭이 "특정 메모리 액세스가 발생할 때까지 스레드의 실행 중단을 위한 일관성 기술(Coherency Techniques for Suspending Execution of a Thread Until a Specified Memory Access Occurs)"인 미국 출원 번호 10/039,656; 발명의 명칭이 "특정 메모리 액세스가 발생할 때까지 스레드의 실행 중단을 위한 명령어 시퀀스(Instruction Sequences for Suspending Execution of a Thread Until a Specified Memory Access Occurs)"인 미국 출원 번호 10/039,650과 관련된다.
멀티-스레딩 프로세서는 다수의 다른 명령어 시퀀스들을 동시에 처리할 수 있다. 단일 프로세서 내에서 다수의 명령어 스트림들의 실행을 추구하는 주요 동기 부여 인자는 프로세서 이용에서의 결과 향상이다. 고도 병렬 아키텍처(highly parallel architecture)가 수년간 발전해 왔지만, 다중 실행 유닛을 이용하기 위해서 명령어들의 단일 스트림으로부터 충분한 병렬 연산(parallelism)을 끌어내는 것은 꽤 어려운 일이다. 동시 멀티-스레딩 프로세서들로 인해 다른 실행 자원들에서 이러한 자원들을 보다 잘 이용하기 위한 시도로 다중 명령어 스트림들이 동시에 실행될 수 있게 되었다. 멀티-스레딩은 높은 대기 시간 지연(latency delay)를 만나거나, 발생할 이벤트를 자주 기다리는 프로그램들에 대해서 특히 유리할 수 있다. 완료해야할 높은 대기 시간 작업 또는 특정 이벤트를 하나의 스레드가 기다리고 있는 경우에, 다른 스레드가 처리될 수 있다.
프로세서가 스레드들 사이를 전환하는 시점을 제어하기 위해서 많은 다른 기술들이 제안되어 왔다. 예를 들어, 일부 프로세서들은 L2 캐시 부적중들(misses)과 같은 특히 긴 대기 시간 이벤트들을 검출하고 이들 검출된 긴 대기 시간 이벤트에 응답하여 스레드들을 전환한다. 이러한 긴 대기 시간 이벤트들의 검출이 일부 상황에서는 효과적일 수 있지만, 이러한 이벤트 검출이 스레드들의 전환하기에 효과적일 수 있는 모든 포인트들을 검출하지는 못할 것이다. 특히, 이벤트 기반 스레드 전환은 지연이 프로그래머에 의해 의도되는 프로그램에서의 포인트 검출에 실패할 수 있다.
사실, 프로그래머는 종종 소모적인 스핀 대기 루프들(spin-wait loops) 또는다른 자원 소비 지연 기술들을 피하기 위해서 스레드들을 전환하는 효과적인 시기를 결정하는 최고의 위치에 있게 된다. 따라서, 스레드 변경이 프로그램에 의해 제어되면 프로그램이 보다 효율적으로 동작될 수 있다. 스레드 선택에 영향을 미치는 명시적인 프로그램 명령어들은 이 목적에 유리할 수 있다. 예를 들어, "포즈(pause)" 명령어는, 2000년 1월 21일 출원된 미국 특허 출원 제09/489,130호에 기술되어 있다. 포즈 명령어는 카운트가 도달하거나 명령어가 프로세서 파이프라인을 통과할 때까지 실행의 스레드를 일시적으로 중단시킨다. 프로그래머들이 멀티-스레딩 경로세서의 자원들을 보다 효과적으로 이용하게 함에 있어, 다른 기술들이 유용할 수 있다.
본 명세서는 프로세서의 분야에 관련된다. 특히, 본 명세서는 멀티-스레딩 프로세서들 및 멀티-스레딩 프로세서에서 하나의 스레드의 처리를 일시적으로 중단하는 기술들에 관련된다.
도 1은 메모리 액세스들을 모니터링하기 위한 모니터를 갖는 멀티-스레딩 프로세서의 일 실시예를 예시한 도면.
도 2는 일 실시예에 따른 도 1의 멀티-스레딩 프로세서의 동작을 예시한 순서도.
도 3은 멀티-스레딩 프로세서의 일 실시예의 보다 상세한 설명을 예시한 도면.
도 4는 일 실시예에 따른 자원 분할, 공유, 및 복제를 예시한 도면.
도 5는 일 실시예에 따른 스레드의 실행 중단 및 재시작을 예시한 순서도.
도 6a는 일 실시예에 따른 모니터링 로직의 활성화 및 동작을 예시하는 순서도.
도 6b는 일 실시예에 따른 기록의 가시성(observability)의 향상을 예시한 순서도.
도 7은 일 실시예에 따른 모니터링 동작을 예시한 순서도.
도 8은 일 실시예에 따른 시스템을 예시한 도면.
도 9a 내지 9c는 개시된 프로세서 명령어들 및 기술들을 이용하는 소프트웨어 시퀀스들의 다양한 실시예들을 예시하는 도면.
도 10은 모니터링된 주소를 캐싱된 상태로 남아있도록 하는 대체 실시예를 예시한 도면.
도 11은 개시된 기술들을 사용한 시뮬레이션, 에뮬레이션, 및 가공의 형태 또는 다양한 디자인 표현을 예시한 도면.
본 발명은 예로써 예시되고 첨부한 도면들에 의해 한정되지 않는다.
다음의 상세한 설명은 특정 메모리 액세스가 발생할 때까지 스레드의 실행을 중단하기 위한 기술들을 설명한다. 다음의 상세한 설명에서, 로직 구현, 연산 코드들, 피연산자들을 특정하기 위한 수단, 자원 분할/공유/복제 구현들, 시스템 컴포넌트들의 타입 및 상호 관계, 및 로직 분할/통합 선택과 같은 수많은 특정한 상세 설명들이 본 발명의 보다 완벽한 이해를 제공하기 위제서 제시된다. 그러나, 당업자라면 본 발명이 이와 같은 특정 상세 설명없이 실시될 수 있다는 것을 알 수 있을 것이다. 다른 실례들에서, 제어 구조, 게이트 수준 회로들(gate level circuits) 및 완전 소프트웨어 명령어 시퀀스들은 본 발명을 불명료하게 하지 않기위해서 상세히 도시되지 않는다. 포함된 상세한 설명으로 당업자는 과도한 실험 없이 적절한 기능을 구현할 수 있을 것이다.
개시된 기술들은 다른 스레드들이 프로세싱 자원을 이용하게 하는 동안 프로그래머가 하나의 스레드에서 대기 메커니즘을 구현하게 할 수 있다. 특정된 메모리 위치로의 기록과 같은 특정 메모리 액세스가 발생할 때까지 스레드가 중단될 수 있도록 모니터가 설정될 수 있다. 따라서, 스레드는 스핀-대기 루프(spin-wait loop)같은 프로세서-자원-낭비 루틴을 실행하지 않고 특정된 이벤트 상에서 재개될 수 있다. 일부 실시예에서, 중단된 스레드에 미리 제공된 분할들은 스레드가 중단된 동안 포기(relinquished)될 수 있다. 이들 및/또는 다른 개시된 기술들은 전체 프로세서 처리율(throughput)을 유익하게 향상시킬 수 있다.
도 1은 메모리 액세스를 모니터링하기 위해 메모리 액세스 모니터(110)를 갖는 멀티 스레딩 프로세서(100)의 일 실시예를 예시한다. "프로세서"는, 일부 실시예들에서, 단일 집적 회로로서 형성될 수 있다. 다른 실시예에서, 다중 집적 회로들이 모여서 프로세서를 형성할 수 있지만, 또 다른 실시예에서는, 하드웨어 및 소프트웨어 루틴들(예를 들어, 이진 변환 루틴들)이 모여서 프로세서를 형성할 수 있다. 도 1의 일 실시예에서, 버스/메모리 제어기(120)는 프론트 엔드(130)에 실행을 위한 명령어들을 제공한다. 프론트 엔드(130)는 명령어 포인터들(170)에 따라 다양한 스레드들로부터 명령어들의 검색을 지시한다. 다중 스레드들을 지원하기 위해서 명령어 포인터 로직은 복제된다.
프론트 엔드(130)는 추가적인 처리를 위해서 스레드 분할 가능 자원(threadpartitionable resources; 140)으로 명령어들을 공급한다. 다중 스레드들이 프로세서(100) 내에서 활성인 경우, 스레드 분할 가능 자원(140)은 특정 스레드들에 제공된 논리적으로 구분된 파티션을 포함한다. 일 실시예에서, 각각의 구분된 파티션은, 그 일부분에 제공된 스레드로부터의 명령어들을 포함할 뿐이다. 스레드 분할 가능 자원(140)은, 예를 들어, 명령어 큐(queue)를 포함할 수 있다. 단일 스레드 모드에 있는 경우, 스레드 분할 가능 자원(140)의 파티션들은 하나의 스레드에 제공되는 단일의 대규모 파티션을 형성하기 위해서 결합될 수 있다.
프로세서(100)는 또한 복제된 상태(180)를 포함한다. 복제된 상태(180)는 논리적 프로세서를 위한 환경(context)을 유지하기에 충분한 상태 변수들을 포함한다. 복제된 상태(180)로, 다중 스레드들은 상태 변수 저장을 위한 수고없이 실행할 수 있다. 추가적으로, 레지스터 할당 로직은 각 스레드에 대해 복제될 수 있다. 복제된 상태 관련 로직은 실행을 위한 입력 명령어들을 준비하기 위하여 적절한 자원 파티션을 가지고 동작한다.
스레드 분할 가능 자원들(140)은 명령어들을 공유 자원들(150)에 전달한다. 공유된 자원들(150)은 그들의 기원(origin)에 무관하게 명령어들 상에서 동작한다. 예를 들어, 스케줄러 및 실행 유닛들은 스레드-비인식 공유 자원(thread-unaware shared resources)일 수 있다. 분할 가능 자원들(140)은 각각의 활성 스레드 상에 계속된 진행(progress)을 제공하는 공평한 방식으로 스레드들 사이를 교대함으로써 다중 스레드들로부터의 명령어들을 공유 자원들(150)로 공급할 수 있다. 따라서, 공유 자원들은 공급된 명령어들을 스레드 믹스에 대한 걱정 없이 적절한 상태에서실행할 수 있다.
공유 자원들(150)에 이어 스레드 분할 가능 자원들(160)의 또다른 세트가 뒤따를 수 있다. 스레드 분할 가능 자원들(160)은 재정렬(redorder) 버퍼 등과 같은 폐기 자원들(retirement resources)을 포함할 수 있다. 따라서, 스레드 분할 가능 자원들(160)은 각 스레드로부터의 명령어의 실행이 적당히 끝난다는 것과 그 스레드에 대한 적절한 상태가 적절히 갱신된다는 것을 보장할 수 있다.
전술한 바와 같이, 메모리 위치의 지속적인 폴링(polling) 또는 명령어들의 실행조차 요구하지 않고 스핀-대기 루프의 기능을 구현하기 위한 기술을 프로그래머들에게 제공하는 것이 바람직할 수 있다. 따라서, 도 1의 프로세서(100)는 메모리 액세스 모니터(110)를 포함한다. 메모리 액세스 모니터(110)가 감시할 수 있는 동안 메모리 액세스 사이클에 대한 정보를 이용하여 모니터(110)를 프로그램 할 수 있다. 따라서, 모니터(110)는 모니터 사이클 정보 레지스터(112)를 포함하고, 이 모니터 사이클 정보 레지스터는 비교 로직(114)에 의해 버스/메모리 제어기(120)로부터 수신된 버스 사이클 정보와 비교된다. 일치한다면, 중단된 스레드를 다시 시작하기 위해서 재개(resume) 스레드 신호가 생성된다. 메모리 액세스 정보는 프로세서의 내부 및/또는 외부 버스들로부터 얻어질 수 있다.
모니터 사이클 정보 레지스터(112)는 스레드의 재개(resumption)를 트리거해야 하는 사이클의 종류 및/또는 주소를 특정하는 상세 설명들을 내포할 수 있다. 일 실시예에서, 모니터 사이클 정보 레지스터(112)는 물리적 주소를 저장하고, 모니터는 그 물리적 주소로의 실질적 또는 잠재적 기록을 나타내는 임의의 버스 사이클을 감시한다. 이러한 사이클은 명시적인 기록 사이클의 형태일 수 있고/있거나 소유권에 대한 판독 또는 무효화 사이클일 수 있는데, 이는 외부 버스 트랜잭션없이 캐시어블(cacheable) 라인에 기록할 수 있도록 이 라인의 독점적 소유권을 얻으려고 시도하는 다른 에이전트에 의한 것이다. 임의의 경우에, 다른 실시예들에서 모니터는 다양한 트랜잭션들 상에서 트리거하도록 프로그램될 수 있다.
도 1의 실시예의 동작들은 도 2의 순서도를 참조하여 추가로 설명될 수 있다. 일 실시예에서, 프로세서(100)의 명령어 세트는 모니터 트랜잭션 정보를 설정하는 MONITOR 연산 코드 (명령어)를 포함한다. 블록(200)에서, MONITOR 연산 코드는 제1 스레드(T1) 명령어 시퀀스의 일부로서 수신된다. 블록(210)에 나타난 바와 같이, MONITOR 연산 코드에 응답하여, 프로세서(100)로 인해 모니터(110)가 특정 메모리 액세스를 위하여 메모리 액세스를 모니터링할 수 있게 한다. 메모리 액세스 트리거링은 암시적 또는 명시적 피연산자에 의해 특정될 수 있다. 그러므로, 모니터 주소가 미리 레지스터에 저장될 수 있거나 암시적 피연산자로서 다른 위치에 저장될 수 있으므로 MONITOR 연산 코드를 실행하는 것은 모니터 주소를 특정할 수 있다. 블록(215)에 나타난 바와 같이, 모니터는 특정된 사이클이 검출되는지 여부를 테스트 한다. 검출되지 않는다면, 모니터는 메모리 액세스를 계속 모니터링한다. 트리거링 사이클이 검출된다면, 모니터 이벤트 보류 지시자(monitor event pending indicator)는 블록(220)에 나타낸 바와 같이 설정된다.
MONITOR 연산 코드의 실행은 모니터(110)의 활성화를 트리거한다. 모니터(110)는 시작되어 프로세서 내의 다른 동작들과 병렬로 동작할 수 있다. 일실시예에서, MONITOR 명령어 자체는 적당한 메모리 사이클 정보로 모니터(110)를 설정하고, 모니터 이벤트들을 언마스킹(unmasking) 하지 않고 모니터(110)를 활성화한다. 환언하면, 본 실시예에서, MONITOR 연산 코드의 실행 후에 모니터 이벤트들이 발생할 수 있지만, 이들이 명백하게 언마스킹되지 않으면 인식되지 않을 수 있다.
그러므로, 블록(225)에서, 메모리 대기의 트리거링은 개별 이벤트로 표시된다. 몇몇 실시예들에서, 메모리 대기(MWAIT) 연산 코드는 모니터 이벤트들의 인식 및 T1의 중단을 트리거하기 위해 사용될 수 있다. 스레드 중단을 설정하고 트리거하기 위해서 두 개의 개별 명령어들을 사용하는 것은 프로그래머들에게 부가의 유연성을 제공하고 보다 효율적인 프로그래밍을 허용한다. 그러나, 대체 실시예는 또한 모니터(110)를 설정하는 제1 연산 코드로부터의 메모리 대기를 트리거한다. 어느 경우에도, 하나 이상의 명령어들은 모니터를 갖추고(arm), 모니터 이벤트들의 인식을 가능하게 한다.
모니터(110)를 갖추고 모니터 이벤트들의 인식을 트리거하기 위해 개별 연산 코드들이 사용되는 실시예에서, 블록(230)에 도시된 바와 같이, 스레드를 중단하기 전에 모니터가 활성화되었음을 보장하는 테스트를 수행하는 것이 유리할 수 있다. 부가적으로, 모니터 이벤트가 이미 보류 중인지를 테스트함으로써(도시되지 않음), T1의 중단을 피할 수 있고, 블록(250)에서 동작이 계속될 수 있다. 모니터(110)가 인에이블되고 어떤 모니터 이벤트들도 이미 보류중이지 않다고 가정하면, T1은 블록(235)에 도시된 바와 같이 중단될 수 있다.
T1이 중단된 채로, 프로세서는 다른 스레드들이 프로세서 자원들을 보다 완전히 이용하도록 하는 구현 의존 상태(implementation dependent state)에 진입한다. 일부 실시예들에서, 프로세서는 T1에 제공되었던 분할 가능 자원들(140 및 160)의 파티션의 일부 또는 모두를 포기할 수 있다. 다른 실시예들에서, MONITOR 연산 코드의 다른 순열(permutation)들 또는 그와 관련된 설정들은, 존재한다면 어떤 자원을 포기할 것인지를 나타낼 수 있다. 예를 들어, 프로그래머가 보다 짧은 대기를 예상하는 경우, 스레드는 중단될 수 있지만, 그 자원 파티션들을 유지한다. 스레드 중단 기간 동안 공유 자원들이 다른 스레드들에 의해 독점적으로 사용될 수 있기 때문에, 처리율은 여전히 향상된다. 보다 긴 대기가 예상되는 경우, 중단된 스레드와 연관된 모든 파티션들을 포기함으로써 다른 스레드들이 추가 자원들을 가지게 되고, 잠재적으로 다른 스레드들의 처리율이 증가된다. 그러나, 추가 처리율은 스레드들이 각각 중단되고 재개될 때 파티션을 제거 및 추가하는 것과 관련된 오버헤드의 부담을 갖는다.
T1은 모니터 이벤트가 보류 중일 때까지 중단된 상태로 남는다. 전술한 바와 같이, 모니터(110)는 모니터 이벤트들을 검출하고 모니터 이벤트 신호를 보내기 위하여 독립적으로 동작한다(블록(215 내지 220)). 블록(240)에서 모니터 이벤트가 보류 중이라는 것을 프로세서가 검출하면, 블록(250)에 나타낸 바와 같이, T1이 재개된다. 모니터 이벤트가 T1을 재활동시키기 위해 명령어들의 어떠한 활성 프로세싱도 T1에서 발생할 필요는 없다. 오히려 T1은 중단된 채로 남아 있고, 인에이블된 모니터(110)는 프로세서에 이벤트 신호를 보낸다. 프로세서는, 이벤트를 처리하고, 이벤트에 의해 T1이 재개되어야 한다는 것이 지시되고 있다는 것을 인식하며, T1을 재개하기 위해 적절한 동작을 수행한다.
그러므로, 도 1 및 도 2의 실시예들은 프로그램에 의해 중단된 스레드가 특정 메모리 액세스의 발생에 의해 개시되도록 하는 기술들을 제공한다. 일 실시예에서, 다른 이벤트들 또한 T1이 재개되도록 한다. 예를 들어, 인터럽트(interrupt)는 T1이 재개되도록 할 수 있다. 이러한 구현은 특정 메모리 액세스들 또는 스레드를 재개시켜야 하는 다른 조건들을 빠뜨릴 수(검출하지 못할 수) 있다는 점에서 모니터가 다소 완전하지 못한 것을 허용하는 효과가 있다. 결과적으로, T1은 때때로 불필요하게 재활동할 수 있다. 그러나, 이러한 구현은 하드웨어 설계 및 검증을 단순화하면서, 빠뜨린 이벤트로 인해 T1이 영구히 중단(frozen)될 가능성을 감소시킬 수 있다. 기다렸던 조건이 실제로 일어났는지, 그리고 다시 한번 중단하지 않았는지를 T1이 이중 체크하도록 루프가 구성될 수 있으므로 T1의 불필요한 재활동(awakening)은 단지 사소한 불편일 수 있다.
일부 실시예들에서, 스레드 분할 가능 자원들, 복제된 자원들, 및 공유된 자원들은 서로 다르게 배열될 수 있다. 몇몇 실시예들에서는, 공유된 자원들의 양 끝에 분할 가능 자원들이 없을 수 있다. 몇몇 실시예들에서는, 분할 가능 자원들이 엄격히 분할되지 않을 수도 있지만, 오히려 어떤 명령어들은 파티션들을 걸치도록 할 수 있거나 또는 파티션들이 그 파티션에서 실행되고 있는 스레드에 따라 또는 실행될 스레드의 총 수에 따라 크기를 변화하게 할 수 있다. 추가적으로, 자원들의 다른 혼합들(mixes)은 공유된, 복제된, 및 분할된 자원들로 설계될 수 있다.
도 3은 다중-스레딩 프로세서의 일 실시예의 보다 상세한 설명을 예시한다. 도 3의 실시예는, 특히, 일관성(coherency) 관련 로직(350), 모니터(310)의 일 구현, 및 스레드 중단 및 재개 로직(377)의 하나의 특정한 구현을 포함한다. 도 3의 실시예에서, 버스 인터페이스(300)는 버스 제어기(340), 이벤트 검출 로직(345), 모니터(310) 및 일관성 관련 로직(350)을 포함한다.
버스 인터페이스(300)는 프로트 엔드(365)에 명령어들을 제공하고, 프론트 엔드는 매크로 명령어들로부터 uOP들을 생성하는, 마이크로-피연산자(uOP) 생성을 수행한다. 실행 자원(370)은 프론트 엔드(365)로부터 uOP들을 수신하고, 백 엔드 로직(back end logic; 380)은 다양한 uOP들이 실행된 후 이들을 폐기(retire)한다. 일 실시예에서, 비순차적 명령어 처리(out-of-order execution)는 프론트 엔드, 백 엔드 및 실행 자원들에 의해 지원된다.
동작들의 다양한 세부 사항은 도 5 내지 9에 관련하여 더 논의된다. 그러나, 간략하게, MONITOR 연산 코드는 버스 인터페이스(300)를 통해 프로세서에 진입할 수 있고 프론트 엔드(365)에 의한 실행을 위해 준비될 수 있다. 일 실시예에서, 특정 MONITOR uOP는 실행 자원들(370)에 의한 실행을 위해 생성된다. MONITOR uOP는 실행 유닛들에 의한 저장 동작과 유사하게 취급될 수 있고, 모니터 주소는 주소 변환 로직(375)에 의해 물리적 주소로 변환되어, 모니터(310)에 제공된다. 모니터(310)는 스레드 중단 및 재개 로직(377)과 통신하여 스레드를 재개시킨다. 스레드 중단 및 재개 로직은 활성 스레드의 수가 변화함에 따라 분할을 수행하고 자원들을 어닐(anneal)할 수 있다.
예를 들어, 도 4는 일 실시예에 따른 자원들의 분할, 복제, 및 공유를 예시한다. 분할된 자원들은 장치 내에서 스레드가 활성화를 반복함에 따라 분할되고 어닐링된다(다른 스레드들에 의한 재 사용을 위해 함께 합쳐짐). 도 4의 실시예에서, 복제된 자원들은 파이프라인의 명령어 페치부(instruction fetch portion) 내에 명령어 포인터 로직, 파이프라인의 리네임(rename)부 내에 레지스터 리네이밍 로직, 상태 변수들(도시되지 않지만, 파이프라인 내의 다양한 단계들에서 참조됨), 및 인터럽트 제어기(도시되지 않고, 일반적으로 파이프라인에 비동기적임)를 포함한다. 도 4의 실시예 내의 공유 자원들은 파이프라인의 스케줄 단계의 스케줄러, 파이프라인의 레지스터 판독 및 기록부들의 레지스터의 풀(pool), 파이프라인의 실행부의 실행 자원들을 포함한다. 추가적으로, 트레이스(trace) 캐시 및 L1 데이터 캐시는 스레드 환경에 무관하게 메모리 액세스에 따라 점유된(populated) 공유 자원들일 수 있다. 다른 실시예들에서, 캐싱 결정에 스레드 환경을 고려할 수 있다. 도 4의 실시예 내의 분할된 자원들은 파이프라인의 대기 단계들 내에 두 개의 큐(queue), 파이프라인의 폐기 단계에서의 재정렬(re-order) 버퍼, 및 저장 버퍼를 포함한다. 스레드 선택 멀티플렉싱 로직은 양 스레드들에 합리적인 액세스를 제공하기 위하여 다양한 복제 및 분할된 자원들 사이에서 교대된다.
예시적인 목적으로, 도 4에 도시된 분할, 공유, 및 복제는 도 3의 프로세서의 실시예의 동작을 추가로 기술하는 데 있어서, 도 3의 실시예와 관련되어 사용될 수 있다고 가정한다. 특히, 도 3의 실시예의 동작의 추가적인 세부 사항은 도 5의 흐름도에 관하여 논의될 것이다. 프로세서는, 적어도 두 개의 스레드들이 활성인채로 멀티-스레딩 모드에서 실행되고 있다고 가정한다.
블록(500)에서, 프론트 엔드(365)는 제1 스레드(T1)의 실행 동안 MONITOR 연산 코드를 수신한다. 일 실시예에서 특수 모니터 uOP는 프론트 엔드(365)에 의해 생성된다. MONITOR uOP는 실행 자원들(370)에게 전달된다. MONITOR uOP는 모니터링될 주소(모니터 주소)를 나타내는 연관 주소(associated address)를 갖는다. 연관 주소는 명시적 피연산자 또는 암시적 피연산자의 형태일 수 있다(즉, 연관 주소는 소정의 레지스터 또는 다른 저장 위치로부터 획득됨). 연관 주소는, (다른 레지스터들 또는 정보와 관련하여) 모니터 주소를 결정하기 위한 충분한 정보를 전달한다는 점에서 모니터 주소를 "나타낸다". 예를 들어, 연관 주소는 적절한 모니터 주소이고 대응하는 물리적 주소를 갖는 선형(linear) 주소일 수 있다. 대안으로, 모니터 주소는 가상 주소 형식으로 주어지거나, 상대 주소로서 표시되거나, 다른 알려진 또는 편리한 주소 특정 방식으로 특정될 수 있다. 가상 주소 피연산자들이 사용된다면, 일반적 보호 장애들이 파괴 이벤트들(break events)들로 인식되도록 하는 것이 바람직할 수 있다.
모니터 주소는 모니터링을 위한 메모리의 임의의 편리한 유닛을 나타낼 수 있다. 예를 들어, 일 실시예에서, 모니터 어드레스는 캐시 라인을 나타낼 수 있다. 그러나, 대체 실시예에서, 모니터 주소는 캐시 라인의 일부, 다른 프로세서들의 캐시 라인 크기들과 다른 관계를 가질 수 있는 메모리의 특수한/선택된 크기의 일부 또는 유닛, 또는 단일 주소를 나타낼 수 있다. 따라서 모니터 주소는 피연산자에 의해 특정된 데이터(및 보다 많은 데이터)를 포함하는 유닛을 나타내거나 희망하는 데이터 유닛을 위한 주소를 특별히 나타낼 수 있다.
도 3의 실시예에서, 모니터 주소는 주소 변환 로직(375)에 제공되고 모니터(310)에 전달되어, 모니터 주소 레지스터(335) 내에 저장된다. MONITOR 연산 코드에 응답하여, 실행 자원들(370)은 블록(510) 내에 표시되고 도 6에 보다 상술된 바와 같이 모니터(310)를 인에이블시키고 활성화시킨다. 도 6에 관하여 이하에서 추가로 논의되는 바와 같이, MONITOR 연산 코드 이후에 발생하는 임의의 저장 동작들을 차단하여(fence) 저장이 처리되고 그 결과 임의의 스레드 중단이 발생하기 전에 저장이 검출되는 것을 보장하는 것이 유리할 수 있다. 따라서, 일부 동작들은, 후속 명령어들이 본 실시예에서 시작될 수 있기 전에 모니터(310)를 활성화한 결과로서 발생할 필요가 있을 것이다. 그러나, 일단 모니터(310)가 본 실시예 내의 MONITOR 연산 코드에 의해 활성화되면 파괴 이벤트가 발생할 때까지 다른 동작들과 병렬로 모니터(310)가 계속 동작하기 때문에, 블록(510)은 블록(505)와 병렬로 발생하는 것으로 도시된다.
블록(505)에서, 메모리 대기(MWAIT) 연산 코드는 스레드 1에서 수신되고, 전달되어 실행된다. MWAIT 연산 코드의 실행은 도 5의 실시예에서 모니터 이벤트들을 언마스킹한다. MWAIT 연산 코드에 응답하여, 블록(515)에 나타낸 바와 같이, 모니터 이벤트가 보류중인지 여부를 결정하기 위해 테스트가 수행된다. 보류중인 모니터 이벤트가 없다면, 모니터가 활성화 되었다는 것을 보증하기 위해서 블록(520)에서 테스트가 수행된다. 예를 들어, MWAIT가 이전에 MONITOR를 실행하지 않고 실행된다면, 모니터(310)는 활성이 아닐 것이다. 모니터가 비활성이거나모니터 이벤트가 보류중이라면, 스레드 1 실행은 블록(580)에서 계속된다.
모니터(310)가 활성이고 보류중인 모니터 이벤트가 없다면, 스레드 1 실행은 블록(525)에 나타낸 바와 같이 중단된다. 스레드 중단/재개 로직(377)은, 블록(530)에 나타낸 바와 같이 모든 명령어를 클리어하기 위해서 프로세서 파이프라인을 드레인하는(drain) 파이프라인 플러시(flush) 로직(382)을 포함한다. 일단 파이프라인이 드레인되면, 분할/어닐(anneal) 로직(385)에 의해 스레드 1과 독점적으로 연관된 임의의 분할된 자원들이, 블록(535)에 나타낸 바와 같이, 다른 스레드들에 의한 사용을 위해 포기된다. 이러한 포기된 자원들은 나머지 활성화된 스레드들의 사용을 위해 보다 큰 자원들의 세트를 형성하도록 어닐된다. 예를 들어, 도 4의 두 개의 스레드 예를 참조하면, 스레드 1과 관련된 모든 명령어들은 양 대기열에서부터 드레인된다. 그 후, 큐의 각 쌍은 제2 스레드에 보다 큰 큐를 제공하기 위해서 결합된다. 유사하게, 레지스터 풀로부터의 보다 많은 레지스터들이 제2 스레드에 이용 가능하게 되고, 저장 버퍼로부터의 보다 많은 엔트리들이 제2 스레드를 위해 해제되며, 재정렬 버퍼 내의 보다 많은 엔트리들이 제2 스레드에 이용가능하게 된다. 본질적으로, 이들 구조들은 두배 크기의 단일 전용(dedicated) 구조로 복귀된다. 물론, 서로 다른 수의 스레드를 사용하기 때문에, 서로 다른 부분들이 생길 수 있다.
블록들(540, 545 및 550)에서, 스레드 1이 재개되어야 하는지 여부를 결정하기 위해서 다양한 이벤트가 테스트된다. 특히, 이러한 테스트들은 스레드 1의 일부로서 실행되는 명령어들에 의해서 수행되지 않는다. 오히려, 이러한 작업들은다른 스레드들의 프로세싱에 병행하여 프로세서에 의해 수행된다. 도 6에서 보다 상세히 논의될 바와 같이, 모니터 자체는 모니터 기록 이벤트가 발생하였는지 여부를 체크하여 이벤트 보류 지시자(indicator)를 설정함으로써 나타낸다. 이벤트 보류 지시자는 EVENT 신호를 통해 중단/재개 로직(377)(예를 들면, 마이크로코드)에 제공된다. 마이크로코드는, 일 실시예(블록(540))에서, 적절한 명령어 경계에서 모니터 이벤트를 인식할 수 있는데, 이 이벤트가 블록(505)에서 MWAIT 연산 코드에 의해 언마스킹 되었기 때문이다. 이벤트 검출 로직(345)은 파괴 이벤트(블록(545))로서 지정된 인터럽트와 같은 다른 이벤트들을 검출할 수 있다. 추가적으로, 선택적인 타이머가 메모리 대기 상태를 주기적으로 탈출하는데 사용되어서 이벤트의 일부 특정 시퀀스 때문에 프로세서가 계속 중단되지 않음을 보장할 수 있다(블록(550)). 이들 이벤트들 중 어떤 것도 메모리 대기 상태에서 탈출할 것을 신호하지 않는다면, 스레드 1은 여전히 중단된 채로 존재한다.
스레드 1이 재개되면, 스레드 중단/재개 로직(377)은 적절한 이벤트의 검출에 의해 다시 활성화된다. 다시, 파이프라인으로부터 명령어를 드레인하기 위하여 파이프라인이 플러시되어, 블록(560)에 나타낸 바와 같이, 곧 재활동할 스레드 1을 수용하기 위해서 자원이 다시 한번 분할될 수 있다. 블록(570)에서, 적절한 자원들이 재 분할되고, 스레드 1은 블록(580)에서 재개된다.
도 6a는 모니터(310)의 활성화 및 작업에 대한 세부 사항을 예시한다. 블록(600)에서, 스레드 1을 위한 프로트 엔드 페칭은 추가적인 스레드 1이 장치에서 동작하는 것을 방지하기 위해서 중단된다. 블록(605)에서, 연관 주소 피연산자는 주소 변환 로직(375)에 의해서 선형 주소로부터 물리적 주소로 변환된다. 블록(610)에서, 모니터링된 주소를 기록하는 가시성이 증가된다. 일반적으로, 이 동작의 목적은 캐싱 에이전트들에게 가시적인 모니터 주소에 저장된 정보에 영향을 미치는 기록 동작들을 모니터(310) 자체에 만들도록 하는 것이다. 하나의 특정한 구현의 추가적인 세부 사항은 도 6b에 대해서 논의된다. 블록(615)에서, 특히 물리적 주소가 이 시퀀스에서 더 일찍 또는 더 늦게 저장될 수 있더라도, 모니터링을 위한 물리적 주소가 저장된다.
다음으로, 블록(620)에 나타낸 바와 같이, 모니터가 인에이블된다. 모니터는 모니터 주소 레지스터(335) 내에 저장된 모니터 주소인 물리적 주소에 대한 기록을 위해 버스 사이클을 모니터링한다. 보다 상세한 모니터링 동작이 도 7에 대해서 이하 논의된다. 모니터가 인에이블된 후, 저장 차단(fence) 동작이 블록(625)에 나타낸 바와 같이 실행된다. 저장 차단은 MONITOR 연산 코드가 실행을 완료할 때 기계 내의 모든 저장이 처리됨을 보장하도록 돕는다. MONITOR가 기계에서 드레인되기 전에 모든 저장을 가짐으로써, 메모리 대기 상태로 잘못 진입될 가능성이 감소된다. 그러나, 저장 차단 동작(store fence operation)은 예방 조치(precaution)이고, 시간 소모 동작(time consuming operation)일 수 있다.
본 실시예의 MONITOR/MWAIT 메커니즘은 다수의 탈출 메커니즘(exit mechanism)으로서 디자인 되었으므로, 이러한 저장 차단은 선택적이다. 환언하면, 특정 인터럽트들, 시스템 또는 내장형 타이머(on board timer) 등과 같은 다양한 이벤트들이 또한 메모리 대기 상태로부터의 탈출시킬 수 있다. 그러므로, 본 실시예에서는, 스레드가 재활동하는 유일한 이유가 모니터링 되는 데이터 값이 변경되었기 때문이라는 것이 보장되지 않는다. 따라서(또한, 이하의 도 9a 내지 9c를 보면), 본 구현예에서, 소프트웨어는 메모리에 저장된 특정 값이 변경되었는지 이중으로 검사해야 한다. 일 실시예에서, INTR, NMI 및 SMI 인터럽트들의 단정(assertion)을 포함하는 몇몇 이벤트들, 장치 검사 인터럽트들 및 장애들(faults)은 파괴 이벤트(break event)이고, 전력 강하 이벤트(powerdown event)를 포함하는 다른 것들은 파괴 이벤트가 아니다. 일 실시예에서, A20M 핀의 단정은 또한 파괴 이벤트이다.
블록(630)에 나타난 바와 같이, 모니터는, 발생하는 버스 사이클들이 모니터 주소로의 기록을 나타내도록 표시되거나 그렇게 보이는지를 계속하여 시험한다. 이러한 버스 사이클이 검출되면, 블록(635)에 나타난 바와 같이, 모니터 이벤트 보류 지시자(monitor event pending indicator)가 설정된다. MWAIT 연산 코드를 실행(도 5의 블록(505))한 후에, 이러한 이벤트 보류 지시자는 이벤트로 기능하고, 도 5의 블록들(560 내지 580)에서 스레드를 재기시킨다. 부가적으로, 주소 변환(address translation)을 변경하는 이벤트들은 스레드 1을 재개시킨다. 예를 들어, 선형으로부터의 모니터 주소를 물리적인 주소로 생성하기 위해 실행된 변환은 더 이상 유효하지 않으므로, 변환 참조 버퍼(translation look-aside buffer)가 플러시 되도록 하는 이벤트들이 스레드 1의 재개를 트리거할 수 있다. 예컨대, x86 Intel 아키텍쳐 호환 프로세서에서, 일정한 장치 측정 레지스터들뿐만 아니라, 레지스터 CR0, CR3 및 CR4를 제어하기 위한 기록은 메모리 대기 상태를 탈출시킬수 있다.
이상에서 지적한 바와 같이, 도 6b는 모니터 주소를 기록하는 가시성(observability)의 향상(도 6a의 블록(610))에 대한 추가적인 세부 사항을 예시한다. 일 실시예에서, 블록(650)에 나타난 바와 같이, 프로세서는, 프로세서의 모든 내부 캐시들(internal caches)로부터의 모니터 주소와 연관된 캐시 라인을 플러시한다. 이러한 플러싱의 결과로, 모니터 주소로의 임의의 후속 기록은 버스 인터페이스(300)에 도달하고, 이로 인해 버스 인터페이스(300)에 포함된 모니터(310)에 의한 검출이 가능해진다. 일 실시예에서, MONITOR uOP는 x86 명령어 세트의 현존 명령어인 캐시 라인 플러시(cache line flush) CLFLUSH 명령어를 모델로 해서, 동일한 장애 모델(fault model)을 갖는다. 모니터 uOP는 선형을 통해 주소의 물리적인 변환으로 진행하고, CLFLUSH와 같은 내부 캐시의 플러싱도 동일하다. 하지만, 버스 인터페이스는 MONITOR 및 CLFLUSH 사이의 차이를 인식하여 MONITOR uOP를 적절히 처리한다.
다음으로, 블록(655)에 나타난 바와 같이, 버스 인터페이스(300) 내의 일관성 관련 로직(350)은 프로세서 버스 상에서 판독 라인 트랜잭션(read line transaction)을 생성하기 위하여 판독 라인 생성 로직(read line generation logic; 355)을 활성화시킨다. 모니터 주소로의 판독 라인 트랜잭션은, 버스 상의 프로세서들 내의 어떠한 캐시들도 공유 또는 독점적인 상태 중의 하나에서 (잘 알려진 MESI 프로토콜에 따라) 모니터 주소에 데이터를 저장하지 않도록 보장한다. 다른 프로토콜들에서는, 다른 상태들이 사용될 수 있지만, 모니터(310)에 의해 관찰 가능한 트랜잭션 없이 다른 에이전트가 모니터 주소로 기록할 수 있는 가능성을 감소시키도록 트랜잭션이 디자인된다. 환언하면, 기록 또는 기록 지시 트랜잭션들(write-indicating transactions)은 연속적으로 브로드캐스팅되어 모니터에 의해 검출될 수 있다. 판독 라인 동작이 행해지면, 모니터(310)는 버스 상에서 트랜잭션을 모니터링하기 시작한다.
버스 상에서 부가적인 트랜잭션들이 발생함에 따라, 일관성 관련 로직은 모니터링되는 주소와 연관된 캐시 라인의 소유권(ownership)을 버스 에이전트들이 얻는 것을 방지함으로써 모니터 주소의 가시성을 계속해서 유지한다. 하나의 버스 프로토콜에 따르면, 블록(660)에 나타난 바와 같이, 이는 모니터 주소의 임의의 판독의 스누프 단계(snoop phase) 동안의 HIT# 신호를 확인시켜 주는 히트 생성 로직(hit generation logic; 360)에 의해 달성될 수 있다. HIT#의 확인은 다른 캐시들이 MESI 프로토콜 내의 공유 상태(Shared state)를 넘어 독점(Exclusive)으로, 그리고 잠재적으로 변경 상태(Modified state)로 이동하는 것을 방지한다. 결과적으로, 블록(665)에 나타난 바와 같이, 선택된 일관성 영역(일관적으로 유지되는 메모리 부분) 내의 어떠한 에이전트도 변경 또는 독점 상태(또는 그와 동일한 상태)에서 데이터를 가질 수 없다. 본 실시예에서 프로세서가 내부 캐시들로부터 플러시되었더라도, 프로세서는 캐싱된 모니터 주소의 캐시 라인을 갖는 것으로 효과적으로 나타난다.
도 7을 참조하면, 도 6a의 블록(620)과 연관된 동작들의 추가적인 세부 사항들이 자세히 기술된다. 특히, 도 7은 모니터(310)의 동작을 보다 자세히 설명한다. 블록(700)에서, 모니터(310)는, 버스 트랜잭션을 위하여 버스 제어기(340)로부터의 요청 및 주소 정보를 수신한다. 블록(710)에 나타난 바와 같이, 모니터(310)는 버스 사이클 타입 및 영향을 받은 주소(들)를 검사한다. 특히, 사이클 비교 로직(320)은 버스 사이클이 특정 사이클인지 판단한다. 일 실시예에서, 주소 비교 회로(330)는 모니터 주소 레지스터(335)에 저장된 모니터 주소와 버스 트랜잭션 주소를 비교하고, 기록 검출 로직(325)은 기록이 발생하였는지를 검출하기 위하여 버스 제어기(340)로부터의 사이클 타입 정보를 디코딩한다. 모니터 주소로의 기록이 발생하면, 블록(720)에 나타난 바와 같이 모니터 이벤트 보류 지시자가 설정된다. 이벤트 신호를 보내기 위하여 스레드 중단/재개 로직(377)으로 신호(WRITE DETECTED)가 제공된다( 그리고, MWAIT를 실행함으로써 인에이블 되었다고 가정하여 서비스됨). 최종적으로, 블록(730)에 나타난 바와 같이 모니터(310)가 멈추어진다. 모니터를 멈춤으로써 전력이 절약되지만, 거짓 모니터 이벤트들(false monitor events)이 마스크되거나 생성되지 않는 한, 중요하지 않다. 모니터 이벤트 지시자는 또한 이 시점에서 리셋될 수 있다. 통상적으로, 모니터 이벤트에 서비스를 제공함으로써 MWAIT가 다시 실행될 때까지 추가적인 모니터 이벤트들의 인식을 또한 마스크한다.
모니터 주소를 판독하는 경우에, 일관성 관련 로직(350)이 활성화된다. 블록(740)에 나타난 바와 같이, 다른 에이전트가 일관성 브로드캐스들 없이 미래의 기록들을 허용하는 소유권(ownership)을 획득하는 것을 방지하도록 (HIT# 와 같은) 신호가 확인된다. 모니터(310)는 활성인 채로 남아 있고, 블록(700)으로 반환되며, 모니터 주소의 판독에 의해 영향을 받지 않는다. 부가적으로, 트랜잭션이 모니터 주소로의 기록도 판독도 아니면, 모니터는 활성인 채로 남아서 블록(700)으로 반환된다.
일부 실시예들에서, 오직 일부 유형의 액세스들만이 모니터링되도록 MONITOR 명령어가 제한된다. 이러한 액세스들은 효율적인 프로그래밍 기술을 나타내기 위해 선택될 수 있고, 다른 이유로도 선택될 수 있다. 예를 들어, 일 실시예에서, 메모리 액세스는 자연적으로 정렬된 후기입 메모리(write-back memory) 내의 캐시 가능한 저장이어야 한다. 자연적으로 정렬된 요소(naturally aligned element)는 N으로 나눌 수 있는 주소로 시작하는 N bit 요소이다. 자연적으로 정렬된 요소를 사용한 결과, 모니터링된 주소로의 기록을 위해 (두 개의 캐시 라인에 걸쳐 데이터가 나누어진 경우에 필요한 두 개의 캐시 라인보다) 단일 캐시 라인이 액세스될 필요가 있다. 결과적으로, 자연적으로 정렬된 메모리 주소는 버스 감시(bus watching)를 단순화시킬 수 있다.
도 8은 개시된 멀티 스레딩 메모리 대기 기술들을 이용하는 시스템의 일 실시예를 도시한다. 도 8의 실시예에서, 한 세트의 N 멀티 스레딩 프로세서들인, 프로세서(805-1 내지 805-N)는 버스(802)로 연결된다. 다른 실시예에서, 단일 프로세서 또는 멀티 스레딩 프로세서들 및 단일 스레딩 프로세서의 혼합(mix)이 사용될 수 있다. 부가하여, 다른 주지의 또는 다른 이용 가능한 시스템 구성이 사용될 수 있다. 예를 들어, 프로세서는 점 대 점(point to point) 방식으로 접속될 수 있고, 메모리 인터페이스와 같은 부분들이 각각의 프로세서로 통합될 수 있다.
도 8의 실시예에서, 버스에 연결된 메모리 인터페이스(815)는 메모리(830) 및 미디어 인터페이스(820)에 연결된다. 메모리(830)는 멀티 프로세싱 준비 운영 시스템(multi processing ready operating system; 835) 및 제1 스레드(840)를 위한 명령어들 및 제2 스레드(845)를 위한 명령어들을 포함한다. 명령어들(830)은 도 9a 내지 9c에서 도시된 다양한 버전의, 개시된 기술에 따른 유휴 루프(idle loop)를 포함한다.
이런 다양한 기능들을 수행하기 위한 적절한 소프트웨어가 임의의 다양한 장치 판독 가능 매체로 제공될 수 있다. 미디어 인터페이스(820)는 이러한 소프트웨어로의 인터페이스를 제공한다. 미디어 인터페이스(820)는 (예컨대, 디스크 드라이브, 광 드라이브, 테이프 드라이브, 휘발성 메모리, 비휘발성 메모리 등의) 저장 매체 또는 (예컨대, 네트워크 인터페이스 또는 다른 디지털이나 아날로그 통신 인터페이스 등의) 전송 매체로의 인터페이스가 될 수 있다. 미디어 인터페이스(820)는 매체(예컨대, 저장 매체(792) 또는 전송 매체(795))로부터 소프트웨어 루틴(software routine)을 판독할 수 있다. 장치 판독 가능 매체는 장치 인터페이스에 의한 판독을 위한 정보를 적어도 일시적으로 저장할 수 있는 임의의 매체가 된다. 이는 (매체로서 유선, 광, 또는 공기를 통한) 신호 전송 및/또는 다양한 타입의 디스크 및 메모리 저장 장치들과 같은 물리적인 저장 매체(792)를 포함할 수 있다.
도 9a는 일 실시예에 따른 유휴 루프를 도시한다. 블록(905)에서, MONITOR 명령어가 자신의 피연산자인 모니터 주소로서 주소 1에서 실행된다. 블록(910)에서, MWAIT 명령어는 동일한 스레드 내에서 실행된다. 전술한 바와 같이, 다른 조건들이 적절히 충족된다고 가정하면, MWAIT 명령어는 스레드가 중단되도록 한다. 블록(915)에서 파괴 이벤트가 발생한 경우, 루틴은 블록(920)으로 이동하여 모니터 주소에 저장된 값이 변경되었는지 판단한다. 모니터 주소에서의 값이 변경되었다면, 블록(922)에 나타난 바와 같이, 스레드의 실행이 계속된다. 값이 변경되지 않았다면, 거짓 재활동 이벤트(wake event)가 발생된다. 모니터 주소로의 메모리 기록이 발생하지 않고 MWAIT이 나타났다는 의미에서 재활동 이벤트는 거짓이다. 값이 변경되지 않았다면, 루프는 모니터가 다시 한번 셋업되는 블록(905)으로 반환된다. 이러한 루프 소프트웨어 구현으로 인해 모니터가 거짓 재활동 이벤트들을 허용하도록 디자인될 수 있다.
도 9b는 대안적인 유휴 루프를 도시한다. 도 9b의 실시예는 모니터링되는 메모리 주소로의 기록을 MWAIT 명령어가 포착하지 못하는 경우를 더욱 감소시키기 위하여 하나의 부가적인 검사를 추가한다. 반복하여, 블록(925)에 나타난 바와 같이, 흐름은 도 9b에서 MONITOR 명령어가 자신의 피연산자로서 주소 1에서 실행되는 것으로 시작한다. 부가적으로, 블록(930)에서, 소프트웨어 루틴은 모니터 주소에서 메모리 값을 판독한다. 블록(935)에서, 소프트웨어는, 메모리 값이 스레드가 유휴이어야 함을 나타내는 값으로부터 변경되지 않았음을 이중으로 테스트하여 확인한다. 값이 변경되었다면, 블록(952)에 나타난 바와 같이, 스레드 실행은 계속된다. 값이 변경되지 않았다면, 블록(940)에 나타난 바와 같이, MWAIT 명령어가 실행된다. 전술한 바와 같이, 블록(945)에서 파괴 이벤트가 발생할 때까지 스레드가 중단된다. 그러나, 거짓 파괴 이벤트가 허용되므로, 값이 변경되었는지 블록(950)에서 다시 검사된다. 값이 변경되지 않았다면, 블록(925)으로 반환됨으로써 루프가 반환되어 모니터가 주소 1을 다시 추적하도록 한다. 값이 변경되었다면, 스레드의 실행이 블록(952)에서 계속된다. 일부 실시예에서, 스레드를 다시 중단시키기 위하여 MWAIT 명령어가 실행되기 전에, MONITOR 명령어는 거짓 파괴 이벤트 이후에 실행될 필요가 없다.
도 9c는 MONITOR 및 MWAIT 명령어들을 이용하는 소프트웨어 시퀀스의 다른 예를 도시한다. 도 9c의 예에서, 스레드 내의 두 개별 작업들이 해야 할 작업을 갖고 있지 않은 것이 아니라면, 루프는 유휴가 되지 않는다. 제1 루틴에 의해 수행되어야 할 작업이 존재하는 경우, 상수 값 CV1이 작업 위치(work location) WL1에 저장된다. 마찬가지로, 제2 루틴에 의해 수행되어야 할 작업이 존재하는 경우, 상수 값 CV2가 WL2에 저장된다. 단일 모니터 주소를 사용하기 위하여, WL1 및 WL2는 동일한 캐시 라인 내의 메모리 위치가 되도록 선택된다. 대안적으로, 다수의 작업들을 위한 상태 지시자들을 저장하기 위하여 단일 작업 위치가 사용될 수 있다. 예컨대, 1 byte 내의 1 이상의 bit 또는 다른 유닛들의 각각이 상이한 작업을 나타낼 수 있다.
블록(955)에 나타난 바와 같이, 모니터는 WL1을 모니터링하도록 설정된다. 블록(960)에서, 수행될 작업이 존재함을 나타내는 상수 값을 WL1이 저장하고 있는지 테스트한다. 그렇다면, 블록(965)에 나타난 바와 같이, WL1과 관련된 작업이 수행된다. 그렇지 않다면, 블록(970)에서, WL2와 관련되어 수행될 작업이 존재함을 나타내는 CV2를 WL2가 저장하고 있는지 테스트한다. 그렇다면, 블록(975)에 나타난 바와 같이, WL2와 관련된 작업이 수행된다. 그렇지 않다면, 루프가 진행되어 블록(980)에서 전력 관리 핸들러(power management handler)를 호출하는 것이 적절한 것인지를 판단된다. 예컨대, 선택된 양의 시간이 경과하면, 논리 프로세서가 감소된 전력 소비 상태{예컨대, ACPI(Advanced Configuration and Power Interface) 명세 - 본 출원서의 출원시에 www.acpi.info에서 이용 가능하고, 1999. 2. 8에 공개된 버전 1.0b(또는 그 이후) -에 정의된 한 세트의 "C" 상태 중의 하나}에 위치할 수 있다. 그렇다면, 전력 관리 핸들러가 블록(985)에서 호출된다. 수행될 작업이 존재하는 경우들(965, 975 및 985) 중의 임의의 경우에서, 스레드는 해당 작업을 수행하고, 블록(955)에서 모니터를 설정한 후에 다시 동일한 판단을 하기 위하여 루프 반환(loop back)된다. 대안적인 실시예에서, 블록들(965, 975 및 985)로부터의 루프 반환은 모니터가 활성인 한도에서 블록(960)으로 향할 수 있다.
블록들(965, 975 및 985)을 통해 수행될 작업이 없으면, 블록(990)에 나타난 바와 같이, MWAIT 명령어가 실행된다. 블록(995)에 나타난 바와 같이 파괴 이벤트가 발생한 경우에 MWAIT에 의해 발생된 스레드 중단 상태를 최종적으로 벗어난다. 이 시점에서, 루프는 블록(955)으로 반환되어 모니터를 설정하고, 그 이후에 WL1 또는 WL2 중의 하나가 수행될 작업이 존재함을 나타내는지를 판단한다. 수행될 작업이 존재하지 않는다면(예컨대, 거짓 재활동 이벤트의 경우), 블록(990)에서 루프는 MWAIT로 반환되고, 파괴 이벤트가 발생할 때까지 스레드를 다시 중단한다.
도 10은 모니터 값이 L1 캐시에 캐싱된 채로 남아있는 것을 허용하는 프로세서의 대안적인 일 실시예를 도시한다. 도 10의 프로세서는 실행 유닛들(1005), L1 캐시(1010) 및, L1 캐시와 포괄적 L2 캐시(inclusive L2 cache; 1030) 사이의 기록 조합 버퍼들(write combining buffers)을 포함한다. 기록 조합 버퍼들(1020)은 버스 인터페이스(1040)에 의해 버스(1045)로부터 수신된 동작을 통해, 내부 캐시들의 다른 메모리와의 일관성을 보장하는 스누프 포트(1044)를 포함한다. 일관성 영향 트랜잭션들은 스누프 포트(1044)를 통해 기록 조합 버퍼들(1020)에 도달하므로, 모니터는 L1 캐시 수준에 위치하게 되고, 메모리 기록 이벤트가 버스(1045) 상에서 언제 발생하는지 결정하기 위한 충분한 정보를 수신한다. 그러므로, 모니터 주소에 대응되는 메모리 라인은 L1 캐시에 유지될 수 있다. 모니터는 실행 유닛들로부터 L1 캐시로의 기록들 및 스누프 포트(1044)를 통한 버스(1045)로부터의 기록 모두를 검출할 수 있다.
다른 대안적인 실시예는 두 개의 피연산자 모니터 명령어(operand monitor instruction)를 지원할 수 있다. 전술한 바와 같이, 하나의 피연산자는 메모리 주소를 나타낸다. 두 번째 피연산자는, 메모리 대기 상태로부터 탈출하지 않을 다양한 이벤트들 중의 어떠한 것이 이러한 특정 메모리 대기를 파괴시킬지 나타내는 마스크이다. 예컨대, 하나의 마스크 비트는 인터럽트들이 마스크되었다는 사실에도 불구하고, 메모리 대기를 파괴하기 위하여 마스킹된 인터럽트들이 허용되어야 함(예컨대, EFLAGS 비트 IF가 마스크 인터럽트들로 설정된 경우에도 재활동 이벤트를 허용)을 나타낼 수 있다. 메모리 대기 상태 후에 실행되는 명령어들 중의 하나는기능을 제공하도록 인터럽트하는 파괴된 언마스크(broken unmask)일 것이다. 메모리 대기 상태를 파괴시킬 다른 이벤트들은 메모리 대기를 파괴시키기 위하여 이네이블 될 수 있고, 또는 반대로 메모리 대기 상태를 정상적으로 파괴하는 이벤트들은 디스에이블 될 수 있다. 제1 피연산자에서 논의된 바와 같이, 제2 피연산자는 명시적 또는 묵시적일 수 있다.
도 11은 개시된 기술들을 사용한, 디자인의 시뮬레이션, 에뮬레이션(emulation) 및 가공(fabrication)을 위한 다양한 형식 또는 표현을 도시한다. 디자인을 나타내는 데이터는 수 많은 방식으로 디자인을 나타낼 수 있다. 시뮬레이션에 유용한 제1 방법으로, 디자인된 하드웨어가 수행될 것으로 예상되는 방법의 컴퓨터화된 모델(computerized model)을 본질적으로 제공하는 하드웨어 기술 언어(hardware description language) 또는 다른 기능적인 기술 언어(functional description language)를 사용하여 하드웨어를 나타낼 수 있다. 하드웨어 모델(1110)은 컴퓨터 메모리와 같은 저장 매체(1100)에 저장되어, 시뮬레이션 소프트웨어(1120)를 사용하여 모델을 시뮬레이션할 수 있다. 시뮬레이션 소프트웨어는 하드웨어가 실제로 의도한 바에 따라 기능하는지를 판단하기 위해 특정 테스트 슈트(test suite; 1130)를 하드웨어 모델(1110)에 적용한다. 일부 실시예에서, 시뮬레이션 소프트웨어는 매체에 기록되거나, 획득되거나, 포함되지 않는다.
부가적으로, 디자인 프로세스의 일부 단계들에서 로직 및/또는 트랜지스터 게이트들을 갖는 회로 수준 모델(circuit level model)이 생성될 수 있다. 이러한 모델은 종종, 프로그램 가능한 로직을 사용하는 모델을 형성하는 전용 하드웨어 시뮬레이터들(dedicated hardware simulators)에 의해 유사하게 시뮬레이션될 수 있다. 좀더 생각하면, 이러한 유형의 시뮬레이션은 에뮬레이션 기술이 될 수 있다. 임의의 경우에, 재구성 가능한 하드웨어(re-configurable hardware)는, 개시된 기술을 사용하는 모델을 저장하는 장치 판독 가능 매체를 포함할 수 있는 다른 실시예가 될 수 있다.
더욱이, 일부 단계에서, 대부분의 디자인들은 하드웨어 모델에서 다양한 장치들의 물리적인 배치를 나타내는 데이터의 수준에 도달한다. 전통적인 반도체 공정 기술이 사용되는 경우에, 하드웨어 모델을 나타내는 데이터는, 집적 회로를 생산하기 위하여 사용되는 마스크들을 위한 다른 마스크 계층들 상에 다양한 특징들의 존부를 지정하는 데이터가 될 수 있다. 마찬가지로, 데이터 내의 회로 또는 로직이 이러한 기술들을 수행하도록 시뮬레이션되고, 가공될 수 있다는 점에서, 집적 회로를 나타내는 이러한 데이터는 개시된 기술을 구체화한다.
디자인을 어떻게 표현하더라도, 데이터는 임의의 형태의 컴퓨터 판독 가능 매체에 저장될 수 있다. 이러한 정보를 전송하기 위해 변조되거나 생성된 광 또는 전자기 파(1160), 메모리(1150) 또는, 디스크와 같은 자기 또는 광 저장(1140)이 매체가 될 수 있다. 디자인 또는 디자인의 특정 부분을 기술하는 비트의 세트는 끼워서 혹은 자체만으로 판매되어, 추가적인 디자인이나 가공을 위해 다른 사람들에 의해 사용될 수 있다.
그러므로, 특정 메모리 액세스가 발생할 때까지 스레드의 실행을 중단하기 위한 기술이 개시된다. 일부 예시적인 실시예들이 첨부된 도면에 기술되고 도시되었지만, 당업자는 본 개시를 연구함으로써 다양한 다른 변경들을 만들어낼 수 있으므로, 이러한 실시예들은 광범위한 발명을 단지 예시할 뿐이고 제한하지 않는다는 점과, 본 발명은 도시되고 기술된 특정 구성 및 배치에 제한되지 않음을 이해해야 한다.

Claims (69)

  1. 제1 스레드(thread)를 포함하는 복수의 스레드(thread)의 실행을 가능하게 하는 복수의 실행 유닛(execution unit) - 상기 제1 스레드는 모니터 주소(monitor address)를 나타내는 관련 주소 피연산자를 갖는 제1 명령어를 가짐 - ;
    상기 제1 스레드의 실행을 중단시키기 위한 중단 로직(suspend logic); 및
    상기 모니터 주소로의 메모리 액세스에 응답하여, 상기 제1 스레드를 재개시키기 위한 모니터
    를 포함하는 프로세서.
  2. 제1항에 있어서, 상기 메모리 액세스가 상기 모니터 주소로의 실제적 또는 잠재적 기록(write)을 나타내는 경우에만, 상기 모니터가 상기 메모리 액세스에 응답하여 재개시키도록 하는 프로세서.
  3. 제1항에 있어서, 만약 상기 제1 스레드가 중단되고 모니터 이벤트들이 언마스킹된다면(unmasked), 상기 모니터는 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드를 재개시키도록 하는 프로세서.
  4. 제3항에 있어서, 상기 메모리 액세스 이외의 이벤트에 응답하여 상기 제1 스레드를 재개시키는 이벤트 검출 로직(event detection logic)을 더 포함하는 프로세서.
  5. 제4항에 있어서, 상기 이벤트는 인터럽트(interrupt)인 프로세서.
  6. 제1항에 있어서, 상기 관련 주소 피연산자는 암시적 피연산자(implicit operand)인 프로세서.
  7. 제6항에 있어서, 상기 관련 주소 피연산자는 소정의 레지스터에 저장되는 프로세서.
  8. 제1항에 있어서,
    상기 중단 로직은 제2 명령어에 응답하여 상기 제1 스레드의 실행을 중단시키며,
    상기 제1 명령어는 상기 모니터를 인에이블(enable)시키고, 상기 제2 명령어는 상기 모니터에 의해 전달된 이벤트 신호를 언마스킹하는 프로세서.
  9. 제8항에 있어서, 만약 상기 제1 명령어가 실행되었다면, 상기 제2 명령어는 상기 모니터를 단지 인에이블시키는 프로세서.
  10. 제1항에 있어서, 상기 중단 로직은 상기 제1 명령어에 응답하여 상기 제1 스레드의 실행을 중단시키는 프로세서.
  11. 제8항에 있어서,
    상기 모니터 주소에 대한 저장소(stores)의 가시성을 향상시키기 위한 일관성 로직(coherency logic)을 더 포함하는 프로세서.
  12. 제11항에 있어서, 상기 일관성 로직은, 일관성 도메인 내의 어떠한 캐시도 변경된 상태(modified state)나 배타적 상태(exclusive state)에서 상기 모니터링되는 주소에 있는 정보를 저장하지 않음을 보장하는 프로세서.
  13. 제12항에 있어서,
    상기 일관성 로직은, 임의의 내부 캐시들로부터의 상기 모니터링되는 주소에 연관된 캐시 라인을 플러싱(flushing)하고, 상기 모니터 주소에 연관된 상기 캐시 라인의 버스 판독 라인 트랜잭션(bus read line transaction)을 상기 프로세서에 결합된 다른 프로세서들로 생성시키며,
    상기 버스 판독 라인 트랜잭션은 파이프라인 버스 프로토콜(pipelined bus protocol)에 따라 제공되는 다중 위상 트랜잭션(multi-phase transaction)인 프로세서.
  14. 제11항에 있어서, 상기 일관성 로직은, 임의의 다른 버스 에이전트들이 기록트랜잭션을 브로드캐스팅(broadcasting)하지 않고 상기 모니터 주소로의 상기 기록 트랜잭션을 수행하지 못하도록, 상기 프로세서로 하여금 버스 사이클을 생성하도록 하는 프로세서.
  15. 제14항에 있어서, 다른 버스 에이전트의 상기 모니터 주소에 있는 정보의 판독에 응답하여 히트 신호(hit signal)를 확인하기 위한 버스 제어 로직을 더 포함하는 프로세서.
  16. 제1항에 있어서, 상기 관련 주소 피연산자에 의해 지시된 상기 모니터 주소는, 상기 관련 주소 피연산자에 의해 지시되는 주소에 있는 데이터에 대한 캐시 라인 중의 하나, 캐시 라인의 일부, 또는 대안적인 크기의 유닛(alternatively sized unit)을 나타내는 프로세서.
  17. 제1항에 있어서, 상기 관련 주소 피연산자를 물리적 주소인 상기 모니터 주소로 변환하기 위한 주소 변환 로직(address translation logic)을 더 포함하는 프로세서.
  18. 제1항에 있어서, 상기 모니터 주소는, 물리적 주소, 가상 주소(virtual address), 상대 주소(relative address), 및 선형 주소(linear address)로 이루어진 집합에서 선택되는 프로세서.
  19. 제1항에 있어서,
    다중 스레드들이 활성인 경우에, 상기 복수의 스레드 중의 각각의 활성 스레드에 각각의 분할 가능한 자원의 일부를 제공하기 위해 분할되는 복수의 분할 가능한 자원을 더 포함하고,
    상기 중단 로직은, 상기 제1 스레드의 실행 중단에 응답하여 상기 제1 스레드에 제공된 상기 복수의 분할들 중의 임의의 분할을 포기하는 프로세서.
  20. 제19항에 있어서, 상기 모니터는, 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드의 실행을 수용하기 위하여 상기 복수의 분할 가능한 자원이 재분할되도록 하는 프로세서.
  21. 제20항에 있어서, 상기 복수의 분할 가능한 자원은
    명령어 큐;
    재정렬 버퍼(re-order buffer);
    레지스터 풀(pool); 및
    복수의 저장 버퍼
    를 포함하는 프로세서.
  22. 제21항에 있어서,
    상기 복수의 스레드의 각각에 대해 복제되는 복수의 복제 자원을 더 포함하고,
    상기 복수의 복제 자원은
    복수의 프로세서 상태 변수;
    명령어 포인터; 및
    레지스터 리네이밍 로직(register renaming logic)
    을 포함하는 프로세서.
  23. 제22항에 있어서,
    상기 복수의 스레드 중의 임의의 스레드에 이용될 수 있는 복수의 공유 자원을 더 포함하고,
    상기 복수의 공유 자원은
    상기 복수의 실행 유닛;
    캐시; 및
    스케쥴러
    를 포함하는 프로세서.
  24. 제1 스레드로부터 모니터 주소를 나타내는 제1 명령어를 수신하고, 상기 제1 스레드로부터 제2 명령어를 수신하기 위한 프론트 엔드(front end);
    상기 제1 명령어 및 상기 제2 명령어를 실행하고, 상기 제2 명령어에 응답하여 상기 제1 스레드의 실행을 중단시키기 위한 실행 자원들; 및
    상기 모니터 주소로의 메모리 액세스에 응답하여 상기 제1 스레드를 재개시키는 모니터
    를 포함하는 프로세서.
  25. 제24항에 있어서,
    상기 제1 명령어는 선형 주소를 나타내는 피연산자를 가지고,
    상기 프로세서는, 물리적 주소인 상기 모니터 주소를 얻기 위하여 상기 선형 주소를 변환하는 주소 변환 로직을 더 포함하는 프로세서.
  26. 제25항에 있어서,
    상기 프로세서에 결합된 다른 프로세서에서의 어떠한 캐시도 변경된 상태나 배타적 상태에서 상기 모니터 주소에 있는 정보를 저장하지 않음을 보장하기 위한 일관성 로직을 더 포함하는 프로세서.
  27. 제26항에 있어서, 상기 일관성 로직은 다른 프로세서가 상기 모니터 주소를 스누핑(snooping)하는 것에 응답하여 히트 신호를 선언하는 프로세서.
  28. 제1 스레드로부터 관련 모니터 주소를 갖는 제1 명령어를 수신하기 위한 프론트 엔드 로직; 및
    상기 모니터 주소를 수신하고, 상기 제1 명령어에 응답하여 상기 모니터 주소로의 메모리 액세스를 모니터링하며, 상기 모니터 주소로의 액세스가 발생하는 경우에 이벤트 신호를 생성하기 위해 결합된 모니터
    를 포함하는 프로세서.
  29. 제28항에 있어서, 상기 모니터는 상기 모니터 주소에 기록하는 기록 메모리 액세스에 응답하여 상기 이벤트 신호를 생성하는 프로세서.
  30. 제28항에 있어서, 상기 모니터는 라인 무효화 트랜잭션(line invalidating transaction)에 응답하여 상기 이벤트 신호를 생성하는 프로세서.
  31. 제28항에 있어서, 상기 프로세서에 결합된 다른 프로세서에서의 어떠한 캐시도 변경된 상태나 배타적 상태에서 상기 모니터 주소에 있는 정보를 저장하지 않음을 보장하기 위한 일관성 로직을 더 포함하는 프로세서.
  32. 제31항에 있어서, 상기 일관성 로직은, 내부 캐시 플러시 사이클(cach flush cycle)을 생성하고, 외부 판독 라인 트랜잭션을 생성하기 위한 로직을 포함하는 프로세서.
  33. 제28항에 있어서, 상기 모니터로부터의 모니터 이벤트들을 언마스킹하고,제2 명령어에 응답하여 상기 제1 스레드를 중단시키기 위한 로직을 더 포함하는 프로세서.
  34. 복수의 스레드를 실행하기 위한 복수의 실행 유닛;
    상기 복수의 스레드 중의 제1 스레드로부터 명령어를 수신하기 위한 프론트 엔드 로직; 및
    만약 어떠한 모니터 이벤트도 보류 중이지 않다면, 상기 명령어에 응답하여 상기 제1 스레드를 중단시키고, 상기 복수의 스레드 중의 다른 스레드들이 실행될 수 있도록 하기 위한 중단 로직
    을 포함하는 프로세서.
  35. 제34항에 있어서, 상기 중단 로직은 이미 보류 중인 모니터 이벤트들을 포함한 모니터 이벤트들을 인식할 수 있도록 하는 프로세서.
  36. 제35항에 있어서,
    상기 프로세서는 복수의 분할 가능한 자원을 포함하고,
    상기 중단 로직은, 상기 명령어에 응답하여 상기 제1 스레드를 중단시키는 것 이외에 상기 제1 스레드에 연관된 상기 복수의 분할 가능한 자원의 각각의 분할 영역들을 포기하는 프로세서.
  37. 명령어들을 수신하기 위한 복수의 스레드 분할 가능 자원;
    상기 복수의 스레드 분할 가능 자원과 협력하여 명령어들을 실행하기 위한 복수의 공유 자원;
    상기 제1 스레드에서의 명령어에 응답하여 제1 스레드를 중단시키며, 상기 제1 스레드를 중단시키는 것 이외에 상기 제1 스레드에 연관된 상기 복수의 스레드 분할 가능 자원의 분할 영역들을 포기하기 위한 스레드 중단 로직; 및
    상기 프로세서로 하여금 상기 제1 스레드에 의해 표시되는 메모리 주소로의 액세스에 응답하여 상기 복수의 스레드 분할 가능 자원을 재분할하고, 상기 제1 스레드의 실행을 재개시키도록 하기 위한 모니터
    를 포함하는 프로세서.
  38. 제37항에 있어서,
    상기 메모리 주소로의 상기 액세스는 상기 제1 스레드에서 실행되는 제1 명령어에 의해 명시되며,
    상기 명령어에 의해, 스레드를 재개시키도록 하는 모니터 이벤트들 신호를 생성하기 위해 상기 모니터가 언마스킹되며, 상기 명령어에 응답하여 상기 스레드 중단 로직이 상기 제1 스레드를 중단시키는 프로세서.
  39. 실행 중인 복수의 스레드 중의 제1 스레드를 중단시키기 위한 수단;
    메모리 위치로의 액세스를 검출하기 위한 수단; 및
    상기 검출 수단이 상기 메모리 위치로의 상기 액세스를 검출한 것에 응답하여 상기 제1 스레드를 재개시키기 위한 수단
    을 포함하는 장치.
  40. 제39항에 있어서,
    상기 메모리 지점으로의 상기 액세스를 검출하기 위한 상기 수단은, 상기 제1 스레드에서 실행되는 제1 명령어에 응답하여 인에이블되며,
    상기 제1 스레드를 중단시키기 위한 상기 수단은, 상기 제1 스레드에서 실행되는 제2 명령어에 응답하여 상기 제1 스레드를 중단시키는 장치.
  41. 제40항에 있어서, 상기 메모리 위치로의 상기 액세스의 검출을 단순화하기 위한 일관성 수단을 더 포함하는 장치.
  42. 제41항에 있어서, 상기 메모리 위치로의 상기 액세스는 기록(write) 또는 무효화(invalidating) 액세스인 장치.
  43. 제41항에 있어서,
    중단시키기 위한 상기 수단이 상기 제1 스레드의 실행을 중단시키는 것에 응답하여 자원들을 어닐링(annealing)하기 위한 수단 - 어닐링하기 위한 상기 수단은 상기 복수의 스레드 중의 다른 스레드들에 의한 사용을 위해 상기 제1 스레드에 연관된 분할 자원들을 해제함 - ;
    자원들을 재분할하여 상기 제1 스레드의 재개를 수용하기 위하여 자원들을 분할하기 위한 수단
    을 더 포함하는 장치.
  44. 실행 중인 제1 스레드에서의 제1 연산 코드(opcode)를 수신하는 단계 - 상기 제1 연산 코드는 모니터 주소를 나타내는 관련 주소 피연산자를 가짐 - ;
    상기 제1 스레드를 중단시키는 단계;
    상기 모니터 주소로의 메모리 액세스를 검출하는 단계; 및
    상기 모니터 주소로의 상기 메모리 액세스를 검출한 것에 응답하여 상기 제1 스레드를 재개시키는 단계
    를 포함하는 방법.
  45. 제44항에 있어서, 상기 제1 스레드를 중단시키는 단계는
    상기 제1 스레드에서 제2 명령어를 수신하는 단계; 및
    상기 제2 명령어에 응답하여 상기 제1 스레드를 중단시키는 단계
    를 포함하는 방법.
  46. 제45항에 있어서, 상기 메모리 액세스는 기록 액세스인 방법.
  47. 제45항에 있어서,
    상기 관련 주소 피연산자를 모니터링되는 물리적 주소로 변환하는 단계를 더 포함하고,
    상기 모니터 주소로의 상기 메모리 액세스를 검출하는 단계는, 상기 모니터링되는 물리적 주소로의 기록 액세스를 검출하는 단계를 포함하는 방법.
  48. 제44항에 있어서, 다른 에이전트들이 상기 모니터 주소에 저장된 정보의 소유권(ownership)을 획득하는 것을 방지하는 단계를 더 포함하는 방법.
  49. 제44항에 있어서, 상기 검출 단계는
    외부 버스 트랜잭션들로부터 사이클 정보를 수신하는 단계; 및
    상기 모니터 주소로의 기록을 검출하는 단계
    를 포함하는 방법.
  50. 제44항에 있어서,
    상기 메모리 주소로의 상기 메모리 액세스 이외의 이벤트에 응답하여 상기 제1 스레드를 재개시키는 단계를 더 포함하는 방법.
  51. 제50항에 있어서, 상기 이벤트는 인터럽트인 방법.
  52. 제51항에 있어서, 상기 인터럽트는, 제2 피연산자에 의해 파괴 이벤트(break event)로 간주되도록 지시되는 마스킹된 인터럽트(masked interrupt)인 방법.
  53. 실행 중인 제1 스레드에서 실행되는 제1 연산 코드를 수신하는 단계;
    상기 제1 연산 코드에 연관된 선형 주소를 물리적 주소로 변환하는 단계;
    다른 버스 에이전트로 하여금 모니터링 버스 에이전트(monitoring bus agent)에 알리지 않고 상기 데이터를 변경할 수 있도록 하기 위해, 어떠한 다른 버스 에이전트도 상기 물리적 주소에 연관된 데이터에 대한 충분한 소유권을 갖지 않는다는 것을 보장하도록 상기 모니터링 버스 에이전트에 의한 버스 트랜잭션을 수행하는 단계;
    상기 물리적 주소로의 기록 액세스를 위해 모니터링하는 단계;
    만약 다른 버스 에이전트가 상기 물리적 주소를 판독한다면, 히트 신호를 생성하는 단계;
    실행 중인 상기 제1 스레드에서의 제2 연산 코드를 수신하는 단계;
    상기 제2 연산 코드에 응답하여 실행 중인 상기 제1 스레드를 중단시키고, 모니터 이벤트의 인식을 인에이블하는 단계;
    만약 상기 기록 액세스가 발생한다면, 상기 제1 스레드를 재개시키는 단계;
    이벤트들의 제1 세트 중의 임의의 이벤트에 응답하여 상기 제1 스레드의 실행을 재개시키는 단계; 및
    이벤트들의 제2 세트를 무시하는 단계
    를 포함하는 방법.
  54. 제53항에 있어서, 상기 제2 연산 코드에 응답하여 실행 중인 상기 제1 스레드를 중단시키는 상기 중단 단계는,
    상기 모니터 이벤트가 보류 중인지 여부를 테스트하는 단계;
    모니터가 활성인지 여부를 테스트하는 단계; 및
    만약 상기 모니터가 활성이고 어떠한 모니터 이벤트도 보류 중이지 않다면, 제1 스레드 중단 상태(thread suspended state)에 진입하는 단계
    를 포함하는 방법.
  55. 제54항에 있어서, 상기 제1 스레드 중단 상태에 진입하는 상기 진입 단계는,
    레지스터 풀에서의 복수의 레지스터를 포기하는 단계;
    명령어 큐에서의 복수의 명령어 큐 엔트리를 포기하는 단계;
    저장 버퍼에서의 복수의 저장 버퍼 엔트리를 포기하는 단계; 및
    재정렬 버퍼에서의 복수의 재정렬 버퍼 엔트리를 포기하는 단계
    를 포함하는 방법.
  56. 제1 스레드로부터의 제1 명령어를 저장하기 위한 메모리 - 상기 제1 명령어는 모니터 주소를 나타내는 관련 주소 피연산자를 가짐 -; 및
    모니터로 하여금 상기 제1 명령어에 응답하여 상기 모니터 주소로의 메모리액세스를 검출하기 위해 메모리 트랜잭션들을 모니터링할 수 있도록 하고, 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드를 재개하도록 하며, 상기 메모리에 결합되는 제1 프로세서
    를 포함하는 시스템.
  57. 제56항에 있어서,
    상기 메모리는 상기 제1 스레드로부터의 제2 명령어를 저장하며,
    상기 제1 프로세서는 상기 제2 명령어에 응답하여 상기 제1 스레드를 중단시키는 시스템.
  58. 제57항에 있어서,
    상기 모니터는 상기 메모리 액세스 발생에 응답하여 모니터 이벤트 보류 지시자(monitor event pending indicator)를 설정하며,
    상기 모니터 이벤트 보류 지시자는 상기 제1 프로세서로 하여금 상기 제2 명령어에 의해 일단 언마스킹된 스레드를 재개시키는 시스템.
  59. 제56항에 있어서,
    상기 제1 프로세서는 제1 캐시를 포함하고,
    상기 시스템은 제2 캐시를 포함하는 제2 프로세서를 포함하고,
    상기 제1 프로세서는, 상기 제2 프로세서로 하여금 상기 제2 캐시에서 상기모니터 주소에 저장된 데이터를 변경할 수 있는 임의의 트랜잭션들을 상기 제1 프로세서에게 브로드캐스팅하도록 하기 위해, 버스 트랜잭션을 상기 제2 프로세서에서 수행하도록 하는 시스템.
  60. 제59항에 있어서,
    상기 제1 프로세서는, 상기 제2 프로세서가 변경이 발생하고 있다는 점을 브로드캐스팅하지 않고 상기 제2 캐시에서 상기 모니터 주소에 저장된 데이터를 변경할 수 있도록 하는 상태에서, 상기 제2 프로세서로 하여금 상기 모니터 주소에 있는 데이터를 캐싱하지 못하도록 하는 신호를 확인하는 시스템.
  61. 제60항에 있어서, 상기 신호는 캐시 히트를 나타내며, 상기 제2 캐시로 하여금 배타적 상태에서 상기 모니터 주소에 있는 데이터를 저장하지 못하도록 하는 시스템.
  62. 제58항에 있어서, 상기 제1 프로세서는 또한, 만약 대체 이벤트가 발생한다면 상기 제1 스레드를 재개시키는 시스템.
  63. 제62항에 있어서, 상기 대체 이벤트는 인터럽트인 시스템.
  64. 제62항에 있어서,
    상기 메모리에 저장된 상기 제1 스레드는 루프를 포함하고,
    상기 루프는 상기 제1 명령어 및 상기 제2 명령어뿐만 아니라, 상기 모니터 주소에 있는 데이터가 변경되었는지 여부를 결정하고 만약 상기 모니터 주소에 있는 데이터가 변경되지 않았다면 상기 루프를 재시작하기 위한 테스트를 포함하는 시스템.
  65. 컴퓨터 판독 가능 매체를 포함하는 제품인 프로세서에 있어서,
    제1 스레드를 포함하는 복수의 스레드의 실행을 가능하게 하는 복수의 실행 유닛 - 상기 제1 스레드는 모니터 주소를 나타내는 관련 주소 피연산자를 갖는 제1 명령어를 가짐 - ;
    상기 제1 스레드의 실행을 중단시키기 위한 중단 로직; 및
    상기 모니터 주소로의 메모리 액세스에 응답하여, 상기 제1 스레드를 재개시키도록 하기 위한 모니터
    를 포함하는 프로세서.
  66. 제65항에 있어서, 상기 모니터는 상기 메모리 액세스가 상기 모니터 주소로의 실제적 또는 잠재적 기록을 나타내는 경우에만, 상기 메모리 액세스에 응답하여 재개시키도록 하는 프로세서.
  67. 제65항에 있어서, 상기 모니터는 만약 상기 제1 스레드가 중단되고 모니터이벤트가 언마스킹된다면, 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드를 재개시키도록 하는 프로세서.
  68. 제65항에 있어서, 상기 프로세서는 상기 메모리 액세스 이외의 이벤트에 응답하여 상기 제1 스레드를 재개시키도록 하는 이벤트 검출 로직을 더 포함하는 프로세서.
  69. 제68항에 있어서,
    상기 프로세스는 다중 스레드들이 동작 중인 경우에, 상기 복수의 스레드 중의 각각의 활성 스레드에 각각의 분할 가능한 자원의 일부를 제공하기 위해 분할되는 복수의 분할 가능한 자원을 더 포함하고,
    상기 중단 로직은, 상기 제1 스레드의 실행 중단에 응답하여 상기 제1 스레드에 제공된 상기 복수의 분할 영역 중의 임의의 분할 영역을 포기하는 프로세서.
KR1020047010389A 2001-12-31 2002-12-11 특정 메모리 액세스가 발생할 때까지 스레드의 실행을중단하기 위한 방법 및 장치 KR100814993B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US10/039,579 US7363474B2 (en) 2001-12-31 2001-12-31 Method and apparatus for suspending execution of a thread until a specified memory access occurs
US10/039,579 2001-12-31
PCT/US2002/039786 WO2003058447A2 (en) 2001-12-31 2002-12-11 A method and apparatus for suspending execution of a thread until a specified memory access occurs

Publications (2)

Publication Number Publication Date
KR20040068993A true KR20040068993A (ko) 2004-08-02
KR100814993B1 KR100814993B1 (ko) 2008-03-18

Family

ID=21906217

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047010389A KR100814993B1 (ko) 2001-12-31 2002-12-11 특정 메모리 액세스가 발생할 때까지 스레드의 실행을중단하기 위한 방법 및 장치

Country Status (11)

Country Link
US (2) US7363474B2 (ko)
JP (2) JP4601958B2 (ko)
KR (1) KR100814993B1 (ko)
CN (1) CN100383740C (ko)
AU (1) AU2002364557A1 (ko)
DE (2) DE10297596B4 (ko)
GB (1) GB2400947B (ko)
HK (1) HK1066883A1 (ko)
RU (1) RU2308754C2 (ko)
TW (2) TWI322959B (ko)
WO (1) WO2003058447A2 (ko)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20100102283A (ko) * 2009-03-11 2010-09-24 삼성전자주식회사 플래시 메모리 장치 및 그 제어 방법
US8286166B2 (en) 2006-02-24 2012-10-09 Samsung Electronics Co., Ltd. Interruptible thread synchronization method and apparatus
KR101370314B1 (ko) * 2009-06-26 2014-03-05 인텔 코포레이션 언바운디드 트랜잭션 메모리 (utm) 시스템의 최적화
KR20160118937A (ko) * 2015-04-02 2016-10-12 에이알엠 리미티드 멀티스레드 데이터 처리장치의 이벤트 감시
KR20170051465A (ko) * 2014-09-08 2017-05-11 에이알엠 리미티드 복수의 쓰레드를 실행하기 위한 데이터 처리장치에서의 공유 자원
KR20190088188A (ko) * 2018-01-18 2019-07-26 주식회사 알티스트 파티셔닝을 적용하여 프로세스를 모니터링하는 컴퓨팅 시스템

Families Citing this family (131)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7127561B2 (en) * 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
US7653912B2 (en) * 2003-05-30 2010-01-26 Steven Frank Virtual processor methods and apparatus with unified event notification and consumer-producer memory operations
US7213093B2 (en) * 2003-06-27 2007-05-01 Intel Corporation Queued locks using monitor-memory wait
US8984199B2 (en) * 2003-07-31 2015-03-17 Intel Corporation Inter-processor interrupts
US20050108711A1 (en) * 2003-11-13 2005-05-19 Infineon Technologies North America Corporation Machine instruction for enhanced control of multiple virtual processor systems
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US7490218B2 (en) * 2004-01-22 2009-02-10 University Of Washington Building a wavecache
US7657882B2 (en) 2004-01-22 2010-02-02 University Of Washington Wavescalar architecture having a wave order memory
US7770179B1 (en) * 2004-01-30 2010-08-03 Xilinx, Inc. Method and apparatus for multithreading on a programmable logic device
US7823162B1 (en) 2004-01-30 2010-10-26 Xilinx, Inc. Thread circuits and a broadcast channel in programmable logic
US7552042B1 (en) 2004-01-30 2009-06-23 Xilinx, Inc. Method for message processing on a programmable logic device
US8984517B2 (en) * 2004-02-04 2015-03-17 Intel Corporation Sharing idled processor execution resources
US7581214B2 (en) * 2004-04-15 2009-08-25 Intel Corporation Live set transmission in pipelining applications
JP4376692B2 (ja) * 2004-04-30 2009-12-02 富士通株式会社 情報処理装置、プロセッサ、プロセッサの制御方法、情報処理装置の制御方法、キャッシュメモリ
US8607241B2 (en) * 2004-06-30 2013-12-10 Intel Corporation Compare and exchange operation using sleep-wakeup mechanism
US8074030B1 (en) 2004-07-20 2011-12-06 Oracle America, Inc. Using transactional memory with early release to implement non-blocking dynamic-sized data structure
US7206903B1 (en) * 2004-07-20 2007-04-17 Sun Microsystems, Inc. Method and apparatus for releasing memory locations during transactional execution
US7703098B1 (en) 2004-07-20 2010-04-20 Sun Microsystems, Inc. Technique to allow a first transaction to wait on condition that affects its working set
KR101051703B1 (ko) 2004-08-09 2011-07-25 삼성전자주식회사 서스펜드/리쥼 기능을 갖는 집적 회로 카드 및 집적 회로카드 시스템
US7434009B2 (en) * 2004-09-30 2008-10-07 Freescale Semiconductor, Inc. Apparatus and method for providing information to a cache module using fetch bursts
US7257679B2 (en) * 2004-10-01 2007-08-14 Advanced Micro Devices, Inc. Sharing monitored cache lines across multiple cores
US7313673B2 (en) * 2005-06-16 2007-12-25 International Business Machines Corporation Fine grained multi-thread dispatch block mechanism
US9003421B2 (en) * 2005-11-28 2015-04-07 Intel Corporation Acceleration threads on idle OS-visible thread execution units
KR100771877B1 (ko) 2006-07-21 2007-11-01 삼성전자주식회사 오동작 방지용 커맨드 세트 프로토콜 처리 방법 및 장치
US20080022079A1 (en) * 2006-07-24 2008-01-24 Archer Charles J Executing an allgather operation with an alltoallv operation in a parallel computer
US8443341B2 (en) * 2006-11-09 2013-05-14 Rogue Wave Software, Inc. System for and method of capturing application characteristics data from a computer system and modeling target system
US8239657B2 (en) 2007-02-07 2012-08-07 Qualcomm Incorporated Address translation method and apparatus
US8898438B2 (en) * 2007-03-14 2014-11-25 XMOS Ltd. Processor architecture for use in scheduling threads in response to communication activity
US7937532B2 (en) * 2007-03-30 2011-05-03 Intel Corporation Method and apparatus for speculative prefetching in a multi-processor/multi-core message-passing machine
JP4420055B2 (ja) 2007-04-18 2010-02-24 日本電気株式会社 マルチスレッドプロセッサ及びそれに用いるスレッド間同期操作方法
US8161480B2 (en) 2007-05-29 2012-04-17 International Business Machines Corporation Performing an allreduce operation using shared memory
KR101109029B1 (ko) * 2007-06-20 2012-01-31 후지쯔 가부시끼가이샤 연산 장치
US20090006663A1 (en) * 2007-06-27 2009-01-01 Archer Charles J Direct Memory Access ('DMA') Engine Assisted Local Reduction
JP2009110209A (ja) * 2007-10-29 2009-05-21 Panasonic Corp 演算処理装置、プロセッサ、プログラム変換装置およびプログラム
US8386822B2 (en) * 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
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
US8732683B2 (en) * 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8127080B2 (en) 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
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
US8612977B2 (en) * 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8788795B2 (en) * 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
US8225120B2 (en) * 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8316218B2 (en) 2008-02-01 2012-11-20 International Business Machines Corporation Look-ahead wake-and-go engine with speculative execution
US8640141B2 (en) * 2008-02-01 2014-01-28 International Business Machines Corporation Wake-and-go mechanism with hardware private array
US8171476B2 (en) * 2008-02-01 2012-05-01 International Business Machines Corporation Wake-and-go mechanism with prioritization of threads
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8312458B2 (en) * 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8516484B2 (en) * 2008-02-01 2013-08-20 International Business Machines Corporation Wake-and-go mechanism for a data processing system
US8250396B2 (en) * 2008-02-01 2012-08-21 International Business Machines Corporation Hardware wake-and-go mechanism for a data processing system
US8145849B2 (en) 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8422402B2 (en) 2008-04-01 2013-04-16 International Business Machines Corporation Broadcasting a message in a parallel computer
US8281053B2 (en) 2008-07-21 2012-10-02 International Business Machines Corporation Performing an all-to-all data exchange on a plurality of data buffers by performing swap operations
CN101788922B (zh) * 2009-01-22 2013-12-25 国际商业机器公司 基于辅助线程实现事务存储系统的方法和装置
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
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
US8145723B2 (en) * 2009-04-16 2012-03-27 International Business Machines Corporation Complex remote update programming idiom accelerator
US8082315B2 (en) * 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8156275B2 (en) 2009-05-13 2012-04-10 Apple Inc. Power managed lock optimization
US8364862B2 (en) * 2009-06-11 2013-01-29 Intel Corporation Delegating a poll operation to another device
EP2284693A1 (en) * 2009-08-03 2011-02-16 C.R.F. Società Consortile per Azioni Wait instruction
US8695002B2 (en) * 2009-10-20 2014-04-08 Lantiq Deutschland Gmbh Multi-threaded processors and multi-processor systems comprising shared resources
US8447960B2 (en) * 2010-01-08 2013-05-21 International Business Machines Corporation Pausing and activating thread state upon pin assertion by external logic monitoring polling loop exit time condition
US20110173420A1 (en) * 2010-01-08 2011-07-14 International Business Machines Corporation Processor resume unit
US8464035B2 (en) 2009-12-18 2013-06-11 Intel Corporation Instruction for enabling a processor wait state
US9424087B2 (en) 2010-04-29 2016-08-23 International Business Machines Corporation Optimizing collective operations
US8949577B2 (en) 2010-05-28 2015-02-03 International Business Machines Corporation Performing a deterministic reduction operation in a parallel computer
CN102483708B (zh) * 2010-07-07 2016-01-20 松下电器产业株式会社 处理器
US8776081B2 (en) 2010-09-14 2014-07-08 International Business Machines Corporation Send-side matching of data communications messages
US8566841B2 (en) 2010-11-10 2013-10-22 International Business Machines Corporation Processing communications events in parallel active messaging interface by awakening thread from wait state
US8713362B2 (en) 2010-12-01 2014-04-29 International Business Machines Corporation Obviation of recovery of data store consistency for application I/O errors
US8694821B2 (en) * 2010-12-03 2014-04-08 International Business Machines Corporation Generation of standby images of applications
CN102736945B (zh) * 2011-03-31 2016-05-18 国际商业机器公司 一种运行应用程序的多个实例的方法和系统
CN102760176B (zh) * 2011-04-29 2015-02-11 无锡江南计算技术研究所 硬件事务级仿真方法、引擎及系统
US8893083B2 (en) 2011-08-09 2014-11-18 International Business Machines Coporation Collective operation protocol selection in a parallel computer
US8910178B2 (en) 2011-08-10 2014-12-09 International Business Machines Corporation Performing a global barrier operation in a parallel computer
US8667501B2 (en) 2011-08-10 2014-03-04 International Business Machines Corporation Performing a local barrier operation
US8868843B2 (en) 2011-11-30 2014-10-21 Advanced Micro Devices, Inc. Hardware filter for tracking block presence in large caches
US9798548B2 (en) * 2011-12-21 2017-10-24 Nvidia Corporation Methods and apparatus for scheduling instructions using pre-decode data
WO2013095570A1 (en) 2011-12-22 2013-06-27 Intel Corporation Instruction that specifies an application thread performance state
JP5819184B2 (ja) 2011-12-28 2015-11-18 富士通株式会社 情報処理装置及び情報処理装置の制御方法
WO2013101188A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Memory event notification
US8706847B2 (en) 2012-02-09 2014-04-22 International Business Machines Corporation Initiating a collective operation in a parallel computer
US9495135B2 (en) 2012-02-09 2016-11-15 International Business Machines Corporation Developing collective operations for a parallel computer
CN104205042B (zh) 2012-03-30 2019-01-08 英特尔公司 用于具有通用cpu核心和紧密耦合的加速器的处理核心的上下文切换机制
US9218288B2 (en) 2012-06-15 2015-12-22 International Business Machines Corporation Monitoring a value in storage without repeated storage access
US9256455B2 (en) * 2012-11-20 2016-02-09 Red Hat Isreal, Ltd. Delivery of events from a virtual machine to host CPU using memory monitoring instructions
US9563425B2 (en) * 2012-11-28 2017-02-07 Intel Corporation Instruction and logic to provide pushing buffer copy and store functionality
US9141454B2 (en) * 2012-12-27 2015-09-22 Intel Corporation Signaling software recoverable errors
US10705961B2 (en) 2013-09-27 2020-07-07 Intel Corporation Scalably mechanism to implement an instruction that monitors for writes to an address
US9250935B2 (en) * 2013-11-25 2016-02-02 Marvell World Trade Ltd. Systems and methods for loop suspension in java programming
US9218185B2 (en) 2014-03-27 2015-12-22 International Business Machines Corporation Multithreading capability information retrieval
US9417876B2 (en) 2014-03-27 2016-08-16 International Business Machines Corporation Thread context restoration in a multithreading computer system
US9804846B2 (en) 2014-03-27 2017-10-31 International Business Machines Corporation Thread context preservation in a multithreading computer system
US10102004B2 (en) 2014-03-27 2018-10-16 International Business Machines Corporation Hardware counters to track utilization in a multithreading computer system
US9921848B2 (en) 2014-03-27 2018-03-20 International Business Machines Corporation Address expansion and contraction in a multithreading computer system
US9594660B2 (en) 2014-03-27 2017-03-14 International Business Machines Corporation Multithreading computer system and program product for executing a query instruction for idle time accumulation among cores
US9354883B2 (en) 2014-03-27 2016-05-31 International Business Machines Corporation Dynamic enablement of multithreading
US9552033B2 (en) * 2014-04-22 2017-01-24 Qualcomm Incorporated Latency-based power mode units for controlling power modes of processor cores, and related methods and systems
US9778949B2 (en) * 2014-05-05 2017-10-03 Google Inc. Thread waiting in a multithreaded processor architecture
US9256477B2 (en) * 2014-05-29 2016-02-09 Netapp, Inc. Lockless waterfall thread communication
US9477521B2 (en) 2014-05-29 2016-10-25 Netapp, Inc. Method and system for scheduling repetitive tasks in O(1)
US9304702B2 (en) 2014-05-29 2016-04-05 Netapp, Inc. System and method for parallelized performance data collection in a computing system
JP6227151B2 (ja) * 2014-10-03 2017-11-08 インテル・コーポレーション アドレスへの書き込みに対する監視命令を実行するスケーラブル機構
US9575802B2 (en) 2014-10-28 2017-02-21 International Business Machines Corporation Controlling execution of threads in a multi-threaded processor
US11080064B2 (en) 2014-10-28 2021-08-03 International Business Machines Corporation Instructions controlling access to shared registers of a multi-threaded processor
CN107111523B (zh) * 2014-11-11 2020-10-20 瑞萨电子株式会社 命令执行控制系统和命令执行控制方法
WO2016088220A1 (ja) * 2014-12-03 2016-06-09 株式会社日立製作所 計算機及び論理プロセッサの制御方法
CN105843592A (zh) * 2015-01-12 2016-08-10 芋头科技(杭州)有限公司 一种在预设嵌入式系统中实现脚本操作的系统
US10908909B2 (en) 2015-06-09 2021-02-02 Optimum Semiconductor Technologies Inc. Processor with mode support
KR102476357B1 (ko) 2015-08-06 2022-12-09 삼성전자주식회사 클럭 관리 유닛과 이를 적용하는 집적 회로 및 시스템 온 칩 및 그 동작 방법
US9916178B2 (en) * 2015-09-25 2018-03-13 Intel Corporation Technologies for integrated thread scheduling
GB2544994A (en) * 2015-12-02 2017-06-07 Swarm64 As Data processing
CN105677487B (zh) * 2016-01-12 2019-02-15 浪潮通用软件有限公司 一种控制资源占用的方法及装置
US11023233B2 (en) 2016-02-09 2021-06-01 Intel Corporation Methods, apparatus, and instructions for user level thread suspension
US11061730B2 (en) * 2016-11-18 2021-07-13 Red Hat Israel, Ltd. Efficient scheduling for hyper-threaded CPUs using memory monitoring
CN108255587B (zh) * 2016-12-29 2021-08-24 展讯通信(上海)有限公司 一种同步多线程处理器
US10353817B2 (en) * 2017-03-07 2019-07-16 International Business Machines Corporation Cache miss thread balancing
US10275254B2 (en) 2017-03-08 2019-04-30 International Business Machines Corporation Spin loop delay instruction
TWI648620B (zh) * 2017-08-07 2019-01-21 慧榮科技股份有限公司 記憶體裝置以及操作指令錯誤處理方法
CN109508229A (zh) * 2018-09-19 2019-03-22 安徽慧视金瞳科技有限公司 一种多点同时绘制的匹配方法
US11068407B2 (en) 2018-10-26 2021-07-20 International Business Machines Corporation Synchronized access to data in shared memory by protecting the load target address of a load-reserve instruction
US10884740B2 (en) 2018-11-08 2021-01-05 International Business Machines Corporation Synchronized access to data in shared memory by resolving conflicting accesses by co-located hardware threads
US11119781B2 (en) 2018-12-11 2021-09-14 International Business Machines Corporation Synchronized access to data in shared memory by protecting the load target address of a fronting load
US11086672B2 (en) 2019-05-07 2021-08-10 International Business Machines Corporation Low latency management of processor core wait state
US11231881B2 (en) 2020-04-02 2022-01-25 Dell Products L.P. Raid data storage device multi-step command coordination system
US11106608B1 (en) 2020-06-22 2021-08-31 International Business Machines Corporation Synchronizing access to shared memory by extending protection for a target address of a store-conditional request
CN111857591A (zh) * 2020-07-20 2020-10-30 北京百度网讯科技有限公司 用于执行指令的方法、装置、设备和计算机可读存储介质
CN114489792B (zh) * 2021-03-25 2022-10-11 沐曦集成电路(上海)有限公司 处理器装置及其指令执行方法
US11693776B2 (en) 2021-06-18 2023-07-04 International Business Machines Corporation Variable protection window extension for a target address of a store-conditional request
CN116185891B (zh) * 2023-04-27 2023-07-21 珠海妙存科技有限公司 描述符管理方法

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4491910A (en) * 1982-02-22 1985-01-01 Texas Instruments Incorporated Microcomputer having data shift within memory
JPS59111526A (ja) 1982-12-16 1984-06-27 Fujitsu Ltd 信号処理方式
JPH06105460B2 (ja) 1988-06-07 1994-12-21 富士通株式会社 マルチプロセッサのプロセッサ切換え装置
GB8817911D0 (en) 1988-07-27 1988-09-01 Int Computers Ltd Data processing apparatus
US4965718A (en) 1988-09-29 1990-10-23 International Business Machines Corporation Data processing system incorporating a memory resident directive for synchronizing multiple tasks among plurality of processing elements by monitoring alternation of semaphore data
US5357617A (en) 1991-11-22 1994-10-18 International Business Machines Corporation Method and apparatus for substantially concurrent multiple instruction thread processing by a single pipeline processor
JP2866241B2 (ja) 1992-01-30 1999-03-08 株式会社東芝 コンピュータシステムおよびスケジューリング方法
US5428757A (en) * 1992-04-29 1995-06-27 International Business Machines Corporation Method for reducing translation look aside buffer purges in a multitasking system
US5546593A (en) 1992-05-18 1996-08-13 Matsushita Electric Industrial Co., Ltd. Multistream instruction processor able to reduce interlocks by having a wait state for an instruction stream
JP3678759B2 (ja) 1992-07-21 2005-08-03 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 割込を発生するための装置および割込を発生するための方法
US5493660A (en) * 1992-10-06 1996-02-20 Hewlett-Packard Company Software assisted hardware TLB miss handler
US5584031A (en) 1993-11-09 1996-12-10 Motorola Inc. System and method for executing a low power delay instruction
US5546037A (en) 1993-11-15 1996-08-13 Cirrus Logic, Inc. NAPNOP circuit for conserving power in computer systems
US5584014A (en) * 1994-12-20 1996-12-10 Sun Microsystems, Inc. Apparatus and method to preserve data in a set associative memory device
JPH08212512A (ja) * 1995-02-03 1996-08-20 Hitachi Ltd 磁気記憶装置及びそれに用いる薄膜磁気ヘッドとその製造方法
JPH08320797A (ja) 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
JPH096633A (ja) 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> データ処理システムに於ける高性能多重論理経路の動作用の方法とシステム
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
EP1291765B1 (en) 1996-08-27 2009-12-30 Panasonic Corporation Multithreaded processor for processing multiple instruction streams independently of each other by flexibly controlling throughput in each instruction stream
US5961639A (en) 1996-12-16 1999-10-05 International Business Machines Corporation Processor and method for dynamically inserting auxiliary instructions within an instruction stream during execution
US5835705A (en) * 1997-03-11 1998-11-10 International Business Machines Corporation Method and system for performance per-thread monitoring in a multithreaded processor
AU6586898A (en) 1997-03-21 1998-10-20 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
UA55489C2 (uk) * 1997-10-07 2003-04-15 Каналь+ Сосьєте Анонім Пристрій для багатопотокової обробки даних (варіанти)
US6076157A (en) 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6016542A (en) * 1997-12-31 2000-01-18 Intel Corporation Detecting long latency pipeline stalls for thread switching
JP2000010910A (ja) * 1998-06-22 2000-01-14 Nec Corp データ転送制御装置およびデータ転送制御方法ならびに記録媒体
US6920634B1 (en) * 1998-08-03 2005-07-19 International Business Machines Corporation Detecting and causing unsafe latent accesses to a resource in multi-threaded programs
US6505229B1 (en) * 1998-09-25 2003-01-07 Intelect Communications, Inc. Method for allowing multiple processing threads and tasks to execute on one or more processor units for embedded real-time processor systems
US6401155B1 (en) * 1998-12-22 2002-06-04 Philips Electronics North America Corporation Interrupt/software-controlled thread processing
SG65097A1 (en) 1998-12-28 2001-08-21 Compaq Computer Corp Break event generation during transitions between modes of operation in a computer system
US6535905B1 (en) 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6351808B1 (en) * 1999-05-11 2002-02-26 Sun Microsystems, Inc. Vertically and horizontally threaded processor with multidimensional storage for storing thread data
US6341347B1 (en) * 1999-05-11 2002-01-22 Sun Microsystems, Inc. Thread switch logic in a multiple-thread processor
US6493741B1 (en) 1999-10-01 2002-12-10 Compaq Information Technologies Group, L.P. Method and apparatus to quiesce a portion of a simultaneous multithreaded central processing unit
US6357016B1 (en) 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6496925B1 (en) 1999-12-09 2002-12-17 Intel Corporation Method and apparatus for processing an event occurrence within a multithreaded processor
US6671795B1 (en) 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US7856633B1 (en) 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6931639B1 (en) * 2000-08-24 2005-08-16 International Business Machines Corporation Method for implementing a variable-partitioned queue for simultaneous multithreaded processors
TW461627U (en) * 2000-12-21 2001-10-21 Hon Hai Prec Ind Co Ltd Electrical connector
US6625698B2 (en) * 2000-12-28 2003-09-23 Unisys Corporation Method and apparatus for controlling memory storage locks based on cache line ownership
US6463511B2 (en) * 2000-12-29 2002-10-08 Intel Corporation System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model
US7120762B2 (en) * 2001-10-19 2006-10-10 Wisconsin Alumni Research Foundation Concurrent execution of critical sections by eliding ownership of locks
US7127561B2 (en) 2001-12-31 2006-10-24 Intel Corporation Coherency techniques for suspending execution of a thread until a specified memory access occurs
US20030126379A1 (en) 2001-12-31 2003-07-03 Shiv Kaushik Instruction sequences for suspending execution of a thread until a specified memory access occurs
US20030126416A1 (en) 2001-12-31 2003-07-03 Marr Deborah T. Suspending execution of a thread in a multi-threaded processor

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8286166B2 (en) 2006-02-24 2012-10-09 Samsung Electronics Co., Ltd. Interruptible thread synchronization method and apparatus
KR20100102283A (ko) * 2009-03-11 2010-09-24 삼성전자주식회사 플래시 메모리 장치 및 그 제어 방법
KR101370314B1 (ko) * 2009-06-26 2014-03-05 인텔 코포레이션 언바운디드 트랜잭션 메모리 (utm) 시스템의 최적화
KR20170051465A (ko) * 2014-09-08 2017-05-11 에이알엠 리미티드 복수의 쓰레드를 실행하기 위한 데이터 처리장치에서의 공유 자원
KR20160118937A (ko) * 2015-04-02 2016-10-12 에이알엠 리미티드 멀티스레드 데이터 처리장치의 이벤트 감시
KR20190088188A (ko) * 2018-01-18 2019-07-26 주식회사 알티스트 파티셔닝을 적용하여 프로세스를 모니터링하는 컴퓨팅 시스템

Also Published As

Publication number Publication date
JP4990829B2 (ja) 2012-08-01
JP2006500639A (ja) 2006-01-05
US20030126186A1 (en) 2003-07-03
RU2004123622A (ru) 2005-03-27
DE10297856B4 (de) 2014-07-17
US20080034190A1 (en) 2008-02-07
GB2400947A (en) 2004-10-27
WO2003058447A2 (en) 2003-07-17
TW200305820A (en) 2003-11-01
DE10297596B4 (de) 2017-09-07
JP4601958B2 (ja) 2010-12-22
US7363474B2 (en) 2008-04-22
RU2308754C2 (ru) 2007-10-20
TWI322959B (en) 2010-04-01
TWI590153B (zh) 2017-07-01
CN1688974A (zh) 2005-10-26
KR100814993B1 (ko) 2008-03-18
CN100383740C (zh) 2008-04-23
DE10297596T5 (de) 2004-12-02
WO2003058447A3 (en) 2004-12-16
AU2002364557A8 (en) 2003-07-24
GB2400947B (en) 2005-08-24
GB0412867D0 (en) 2004-07-14
TW200941340A (en) 2009-10-01
AU2002364557A1 (en) 2003-07-24
HK1066883A1 (en) 2005-04-01
JP2008165834A (ja) 2008-07-17

Similar Documents

Publication Publication Date Title
KR100814993B1 (ko) 특정 메모리 액세스가 발생할 때까지 스레드의 실행을중단하기 위한 방법 및 장치
US7127561B2 (en) Coherency techniques for suspending execution of a thread until a specified memory access occurs
KR100864747B1 (ko) 모니터-메모리 대기를 사용하여 큐잉된 로크들
US20030126379A1 (en) Instruction sequences for suspending execution of a thread until a specified memory access occurs
US6687809B2 (en) Maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
KR100617417B1 (ko) 멀티-스레딩 프로세서에서 스레드의 실행을 정지시키기위한 시스템 및 방법
US8539485B2 (en) Polling using reservation mechanism
US8868887B2 (en) Programmable event driven yield mechanism which may activate other threads
US7529914B2 (en) Method and apparatus for speculative execution of uncontended lock instructions
US8694976B2 (en) Sleep state mechanism for virtual multithreading
US20070174555A1 (en) Future execution prefetching technique and architecture
TW201510860A (zh) 多核心同步機制
US6006325A (en) Method and apparatus for instruction and data serialization in a computer processor
Becker et al. Measuring software performance on linux
GB2441903A (en) Resuming control of resources by a processor on exiting a sleep mode and disabling an associated monitor.

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B601 Maintenance of original decision after re-examination before a trial
E801 Decision on dismissal of amendment
S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20130228

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20140303

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20150227

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20160303

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20170302

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 12

FPAY Annual fee payment

Payment date: 20200227

Year of fee payment: 13