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

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

Info

Publication number
KR100814993B1
KR100814993B1 KR1020047010389A KR20047010389A KR100814993B1 KR 100814993 B1 KR100814993 B1 KR 100814993B1 KR 1020047010389 A KR1020047010389 A KR 1020047010389A KR 20047010389 A KR20047010389 A KR 20047010389A KR 100814993 B1 KR100814993 B1 KR 100814993B1
Authority
KR
South Korea
Prior art keywords
monitor
thread
address
processor
instruction
Prior art date
Application number
KR1020047010389A
Other languages
English (en)
Other versions
KR20040068993A (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

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/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)는 추가적인 프로세싱을 위해서 스레드 분할 가능 자원(thread partitionable resources; 140)으로 명령어들을 공급한다. 프로세서(100) 내에서 다수의 스레드들이 활성인 경우, 스레드 분할 가능 자원(140)은 특정 스레드들에 제공된 논리적으로 구분된 파티션을 포함한다. 일 실시예에서, 각각의 개별 파티션은, 해당 부분이 제공된 스레드로부터의 명령어들을 포함할 뿐이다. 스레드 분할 가능 자원(140)은, 예컨대, 명령어 큐(queue)를 포함할 수 있다. 단일 스레드 모드에 있는 경우, 스레드 분할 가능 자원(140)의 파티션들은 하나의 스레드에 제공되는 단일 대형 파티션을 형성하도록 결합될 수 있다.
프로세서(100)는 또한 복제된 상태(180)를 포함한다. 복제된 상태(180)는 논리적 프로세서를 위한 콘텍스트(context)를 유지하기에 충분한 상태 변수들을 포함한다. 복제된 상태(180)로, 상태 변수 저장을 위한 경합 없이 다수의 스레드들이 실행될 수 있다. 또한, 레지스터 할당 로직이 각 스레드에 대해 복제될 수 있다. 복제된 상태 관련 로직(replicated state-related logic)은 실행을 위한 입력 명령어들을 준비하기 위하여 적절한 자원 파티션을 가지고 동작한다.
스레드 분할 가능 자원들(140)은 명령어들을 공유 자원들(150)에 전달한다. 공유 자원들(150)은 그들의 기원(origin)에 무관하게 명령어들 상에서 동작한다. 예를 들어, 스케줄러 및 실행 유닛들은 스레드-비인식 공유 자원(thread-unaware shared resources)일 수 있다. 분할 가능 자원들(140)은 각각의 활성 스레드 상에 계속된 진행(progress)을 제공하는 공평한 방식으로 스레드들 사이를 교대함으로써 다중 스레드들로부터의 명령어들을 공유 자원들(150)로 공급할 수 있다. 따라서, 공유 자원들은 공급된 명령어들을 스레드 믹스에 대한 걱정 없이 적절한 상태에서 실행할 수 있다.
공유 자원들(150)에 이어 스레드 분할 가능 자원들(160)의 또 다른 세트가 뒤따를 수 있다. 스레드 분할 가능 자원들(160)은 재정렬(reorder) 버퍼 등과 같은 폐기 자원들(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)에 나타난 바와 같이, 모니터는 특정된 사이클이 검출되는지 여부를 테스트한다. 검출되지 않는다면, 모니터는 메모리 액세스를 계속하여 모니터링한다. 트리거링 사이클이 검출된다면, 블록(220)에 나타낸 바와 같이 모니터 이벤트 보류 지시자(monitor event pending indicator)가 설정된다.
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) 주소일 수 있다. 대안으로, 모니터 주소는 가상 주소 형식으로 주어지거나, 상대 주소로서 표시되거나, 다른 알려진 또는 편리한 주소 지정 방식으로 주어질 수 있다. 가상 주소 피연산자들이 사용된다면, 일반적 보호 장애(general protection fault)들이 파괴 이벤트들(break events)들로 인식되도록 하는 것이 바람직할 수 있다.
모니터 주소는 모니터링을 위한 메모리의 임의의 편리한 유닛을 나타낼 수 있다. 예를 들어, 일 실시예에서, 모니터 주소는 캐시 라인을 나타낼 수 있다. 그러나, 대체 실시예에서, 모니터 주소는 캐시 라인의 일부, 다른 프로세서들의 캐시 라인 크기들과 다른 관계를 가질 수 있는 메모리의 특수한/선택된 크기의 일부 또는 유닛, 또는 단일 주소를 나타낼 수 있다. 따라서 모니터 주소는 피연산자에 의해 특정된 데이터(및 보다 많은 데이터)를 포함하는 유닛을 나타내거나 희망하는 데이터 유닛을 위한 주소를 특정하여 나타낼 수 있다.
도 3의 실시예에서, 모니터 주소는 주소 변환 로직(375)에 제공되고 모니터(310)에 전달되어, 모니터 주소 레지스터(335) 내에 저장된다. MONITOR 연산 코드에 응답하여, 실행 자원들(370)은 블록(510) 내에 표시되고 도 6에 보다 상술된 바와 같이 모니터(310)를 인에이블 및 활성화시킨다. 도 6과 관련하여 이하에서 추가로 논의되는 바와 같이, MONITOR 연산 코드 이후에 발생하는 임의의 저장 동작들을 차단하여(fence) 저장이 처리되고 그 결과 임의의 스레드 중단이 발생하기 전에 저장이 검출되는 것을 보장하는 것이 유리할 수 있다. 따라서, 본 실시예에서 일부 동작들은 후속 명령어들이 시작되기 전에 모니터(310)를 활성화한 결과로서 발생할 필요가 있을 것이다. 그러나, 본 실시예에서 일단 모니터(310)가 MONITOR 연산 코드에 의해 활성화되면 모니터(310)는 파괴 이벤트가 발생할 때까지 다른 동작들과 병렬로 계속하여 동작하므로, 블록(510)은 블록(505)와 병렬로 발생하는 것으로 도시된다.
블록(505)에서, 스레드 1에서 메모리 대기(MWAIT) 연산 코드가 수신되어, 실행을 위해 전달된다. 도 5의 실시예에서 MWAIT 연산 코드의 실행은 모니터 이벤트들을 언마스킹한다. 블록(515)에 나타낸 바와 같이, MWAIT 연산 코드에 응답하여, 모니터 이벤트가 보류중인지 여부를 결정하기 위한 테스트가 수행된다. 블록(520)에서는, 보류중인 모니터 이벤트가 없다면, 모니터가 활성화되었다는 것을 보증하기 위한 테스트가 수행된다. 예를 들어, 이전에 MONITOR를 실행하지 않고 MWAIT가 실행된다면, 모니터(310)는 활성이 아닐 것이다. 모니터가 비활성이거나 모니터 이벤트가 보류중이라면, 스레드 1 실행은 블록(580)에서 계속된다.
모니터(310)가 활성이고 보류중인 모니터 이벤트가 없다면, 블록(525)에 나타난 바와 같이 스레드 1 실행이 중단된다. 스레드 중단/재개 로직(377)은, 블록(530)에 나타낸 바와 같이 모든 명령어를 클리어하기 위해서 프로세서 파이프라인을 비우는(drain) 파이프라인 플러시(flush) 로직(382)을 포함한다. 일단 파이프라인이 비워지면, 분할/어닐(anneal) 로직(385)에 의해 스레드 1과 독점적으로 연관된 임의의 분할된 자원들이, 블록(535)에 나타낸 바와 같이, 다른 스레드들에 의한 사용을 위해 포기된다. 이러한 포기된 자원들은 나머지 활성화된 스레드들의 사용을 위해 보다 큰 자원들의 세트를 형성하도록 어닐된다. 예를 들어, 도 4의 두 개의 스레드 예를 참조하면, 스레드 1과 관련된 모든 명령어들이 모든 큐로부터 비워진다. 그 후, 큐의 각 쌍은 제2 스레드에 보다 큰 큐를 제공하기 위해서 결합된다. 유사하게, 레지스터 풀로부터의 보다 많은 레지스터들이 제2 스레드에서 이용 가능하게 되고, 저장 버퍼로부터의 보다 많은 엔트리들이 제2 스레드를 위해 해제되며, 재정렬 버퍼 내의 보다 많은 엔트리들이 제2 스레드에서 이용 가능하게 된다. 본질적으로, 이러한 구조들은 두 배 크기의 단일 전용(dedicated) 구조로 환원된다. 물론, 다른 수의 스레드를 사용하는 구현으로 인해, 다른 부분들이 발생할 수 있다.
블록들(540, 545 및 550)에서는, 스레드 1이 재개되어야 하는지 여부를 결정하기 위해서 다양한 이벤트가 테스트된다. 특히, 이러한 테스트들은 스레드 1의 일부로서 실행되는 명령어들에 의해서 수행되지 않는다. 오히려, 이러한 작업들은 다른 스레드들의 프로세싱과 병행하여 프로세서에 의해 수행된다. 도 6에서 보다 상세히 논의되는 바와 같이, 모니터 자체는 모니터 기록 이벤트가 발생하였는지 여부를 체크하여, 이벤트 보류 지시자(indicator)를 설정함으로써 나타낸다. 이벤트 보류 지시자는 WRITE DETECTED 신호를 통해 중단/재개 로직(377)(예를 들면, 마이크로코드)에 제공된다. 일 실시예에서, 마이크로코드는, 적절한 명령어 경계(instruction boundary)에서 모니터 이벤트를 인식할 수 있는데(블록(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)를 하드웨어 모델(1110)에 적용한다. 일부 실시예에서, 시뮬레이션 소프트웨어는 매체에 기록되거나, 획득되거나, 포함되지 않는다.
부가적으로, 디자인 프로세스의 일부 단계들에서 로직 및/또는 트랜지스터 게이트들을 갖는 회로 수준 모델(circuit level model)이 생성될 수 있다. 이러한 모델은 종종, 프로그램 가능한 로직을 사용하는 모델을 형성하는 전용 하드웨어 시 뮬레이터들(dedicated hardware simulators)에 의해 유사하게 시뮬레이션될 수 있다. 좀더 생각하면, 이러한 유형의 시뮬레이션은 에뮬레이션 기술이 될 수 있다. 임의의 경우에, 재구성 가능한 하드웨어(re-configurable hardware)는, 개시된 기술을 사용하는 모델을 저장하는 장치 판독 가능 매체를 포함할 수 있는 다른 실시예가 될 수 있다.
더욱이, 일부 단계에서, 대부분의 디자인들은 하드웨어 모델에서 다양한 장치들의 물리적인 배치를 나타내는 데이터의 수준에 도달한다. 전통적인 반도체 공정 기술이 사용되는 경우에, 하드웨어 모델을 나타내는 데이터는, 집적 회로를 생산하기 위하여 사용되는 마스크들을 위한 다른 마스크 계층들 상에 다양한 특징들의 존부를 지정하는 데이터가 될 수 있다. 마찬가지로, 데이터 내의 회로 또는 로직이 이러한 기술들을 수행하도록 시뮬레이션되고, 가공될 수 있다는 점에서, 집적 회로를 나타내는 이러한 데이터는 개시된 기술을 구체화한다.
디자인을 어떻게 표현하더라도, 데이터는 임의의 형태의 컴퓨터 판독 가능 매체에 저장될 수 있다. 이러한 정보를 전송하기 위해 변조되거나 생성된 광 또는 전자기 파(1160), 메모리(1150) 또는, 디스크와 같은 자기 또는 광 저장(1140)이 매체가 될 수 있다. 디자인 또는 디자인의 특정 부분을 기술하는 비트의 세트는 끼워서 혹은 자체만으로 판매되어, 추가적인 디자인이나 가공을 위해 다른 사람들에 의해 사용될 수 있다.
그러므로, 특정 메모리 액세스가 발생할 때까지 스레드의 실행을 중단하기 위한 기술이 개시된다. 일부 예시적인 실시예들이 첨부된 도면에 기술되고 도시되 었지만, 당업자는 본 개시를 연구함으로써 다양한 다른 변경들을 만들어낼 수 있으므로, 이러한 실시예들은 광범위한 발명을 단지 예시할 뿐이고 제한하지 않는다는 점과, 본 발명은 도시되고 기술된 특정 구성 및 배치에 제한되지 않음을 이해해야 한다.

Claims (69)

  1. 제1 스레드(thread)를 포함하는 복수의 스레드(thread)의 실행을 위한 복수의 실행 수단(execution means) - 상기 제1 스레드는 모니터 주소(monitor address)를 나타내는 관련 주소 피연산자를 갖는 제1 명령어를 가짐 - ;
    상기 제1 스레드의 실행을 중단시키기 위한 중단 수단(suspend means); 및
    상기 모니터 주소로의 메모리 액세스에 응답하여, 상기 제1 스레드의 재개를 야기하기 위한 모니터 수단
    을 포함하는 프로세서.
  2. 제1항에 있어서, 상기 메모리 액세스가 상기 모니터 주소로의 실질적 또는 잠재적 기록(write)을 나타내는 경우에만, 상기 메모리 액세스에 응답하여 상기 모니터 수단이 재개를 야기하는 프로세서.
  3. 제1항에 있어서, 만약 상기 제1 스레드가 중단되고 모니터 이벤트들이 언마스킹되면(unmasked), 상기 모니터 수단은 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드의 재개를 야기하는 프로세서.
  4. 제1항 또는 제2항에 있어서, 상기 메모리 액세스 이외의 이벤트에 응답하여 상기 제1 스레드의 재개를 야기하는 이벤트 검출 로직(event detection logic)을 더 포함하는 프로세서.
  5. 제4항에 있어서, 상기 이벤트는 인터럽트(interrupt) 또는 장애(fault)인 프로세서.
  6. 제3항에 있어서, 상기 관련 주소 피연산자는 암시적 피연산자(implicit operand)인 프로세서.
  7. 제6항에 있어서, 상기 관련 주소 피연산자는 소정의 레지스터에 저장되는 프로세서.
  8. 제3항에 있어서,
    상기 중단 수단은 제2 명령어에 응답하여 상기 제1 스레드의 실행을 중단시키고,
    상기 제1 명령어는 상기 모니터 수단을 인에이블(enable)시키고, 상기 제2 명령어는 상기 모니터 수단에 의해 전달된 이벤트 신호를 언마스킹하는 프로세서.
  9. 제8항에 있어서, 만약 상기 제1 명령어가 실행되었다면, 상기 제2 명령어는 상기 모니터를 단지 인에이블시키는 프로세서.
  10. 제1항에 있어서, 상기 중단 로직은 상기 제1 명령어에 응답하여 상기 제1 스 레드의 실행을 중단시키는 프로세서.
  11. 제3항에 있어서,
    상기 모니터 주소에 대한 저장소(stores)의 가시성을 향상시키기 위한 일관성 수단(coherency means)
    을 더 포함하는 프로세서.
  12. 제3항에 있어서,
    일관성 수단은, 일관성 도메인 내의 어떠한 캐시도 변경된 상태(modified state) 또는 배타적 상태(exclusive state)에서 상기 모니터링 주소에 정보를 저장하지 않음을 보장하는 프로세서.
  13. 제11항에 있어서,
    상기 일관성 수단은, 임의의 내부 캐시들로부터의 상기 모니터링되는 주소와 연관된 캐시 라인을 플러싱(flushing)하고, 상기 모니터 주소에 연관된 상기 캐시 라인의 버스 판독 라인 트랜잭션(bus read line transaction)을 상기 프로세서에 결합된 다른 프로세서들로 생성시키는 프로세서.
  14. 제11항에 있어서, 상기 일관성 수단은, 임의의 다른 버스 에이전트들이 기록 트랜잭션을 브로드캐스팅(broadcasting)하지 않고 상기 모니터 주소로의 상기 기록 트랜잭션을 수행하지 못하도록, 상기 프로세서가 버스 사이클을 생성하도록 하는 프로세서.
  15. 제3항에 있어서, 다른 버스 에이전트의 상기 모니터 주소에 있는 정보를 판독한 것에 응답하여 히트 신호(hit signal)를 확인하기 위한 수단을 더 포함하는 프로세서.
  16. 제15항에 있어서, 히트 신호를 확인하기 위한 상기 수단은 상기 모니터 주소를 포함하는 버스 트랜잭션의 스누프 단계(snoop phase) 동안 상기 히트 신호를 확인하는 프로세서.
  17. 제3항에 있어서, 상기 관련 주소 피연산자를 물리적 주소인 상기 모니터 주소로 변환하기 위한 주소 변환 로직(address translation logic)을 더 포함하는 프로세서.
  18. 제3항에 있어서, 상기 모니터 주소는, 물리적 주소, 가상 주소(virtual address), 상대 주소(relative address), 및 선형 주소(linear address)로 이루어진 집합에서 선택되는 프로세서.
  19. 제3항에 있어서,
    다수의 스레드들이 활성인 경우에, 상기 복수의 스레드 중의 각각의 활성 스레드에 각각의 분할 가능한 자원의 일부를 제공하기 위해 분할되는 복수의 분할 가능한 자원을 더 포함하고,
    상기 중단 수단은, 상기 제1 스레드의 실행 중단에 응답하여 상기 제1 스레드에 제공된 상기 복수의 분할들 중의 임의의 분할을 포기하는 프로세서.
  20. 제19항에 있어서, 상기 모니터 수단은, 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드의 실행을 수용하기 위하여 상기 복수의 분할 가능한 자원이 재분할되도록 하는 프로세서.
  21. 제20항에 있어서, 상기 복수의 분할 가능한 자원은
    명령어 큐;
    재정렬 버퍼(re-order buffer);
    레지스터 풀(pool); 및
    복수의 저장 버퍼
    를 포함하는 프로세서.
  22. 제21항에 있어서,
    상기 복수의 스레드의 각각에 대해 복제되는 복수의 복제 자원을 더 포함하고,
    상기 복수의 복제 자원은
    복수의 프로세서 상태 변수;
    명령어 포인터; 및
    레지스터 리네이밍 로직(register renaming logic)
    을 포함하는 프로세서.
  23. 제22항에 있어서,
    상기 복수의 스레드 중의 임의의 스레드에 의한 사용을 위해 이용 가능한 복수의 공유 자원을 더 포함하고,
    상기 복수의 공유 자원은
    상기 복수의 실행 수단;
    캐시; 및
    스케쥴러
    를 포함하는 프로세서.
  24. 제3항의 상기 프로세서; 및
    상기 복수의 스레드들을 위한 명령어들을 저장하기 위한 메모리
    를 포함하는 시스템.
  25. 제24항에 있어서,
    멀티 스레딩 운영 시스템; 및
    멀티미디어 인터페이스
    를 더 포함하는 시스템.
  26. 제1 명령어 - 상기 제1 명령어는 모니터 주소를 나타내는 피연산자를 가짐 - 및 제2 명령어를 수신하기 위한 프론트 엔드(front end);
    상기 제1 명령어 및 상기 제2 명령어를 실행하고, 상기 제1 명령어가 실행되면, 상기 제2 명령어에 응답하여 구현 의존 상태(implementation dependent state)에 진입하기 위한 복수의 실행 자원들; 및
    상기 모니터 주소로의 메모리 액세스에 응답하여 상기 구현 의존 상태의 탈출을 야기하는 모니터
    를 포함하는 프로세서.
  27. 제26항에 있어서, 상기 복수의 실행 자원들은, 상기 제1 명령어가 실행되고, 상기 제1 명령어의 실행 후, 제2 명령어의 실행 이전에 어떠한 중단 이벤트도 발생하지 않은 경우에, 상기 제2 명령어에 응답하여 상기 구현 의존 상태에 진입하는 프로세서.
  28. 제26항 또는 제27항에 있어서, 상기 피연산자는 선형 주소를 나타내는 소정의 레지스터로부터의 암시적인 피연산자이고, 상기 프로세서는 물리적인 주소인 상기 모니터 주소를 획득하기 위하여 상기 선형 주소를 변환하기 위한 주소 변환 로직을 더 포함하는 프로세서.
  29. 제26항 또는 제27항에 있어서,
    상기 프로세서에 결합된 다른 프로세서에서의 어떠한 캐시도 변경된 상태나 배타적 상태에서 상기 모니터 주소에 있는 정보를 저장하지 않음을 보장하기 위한 일관성 로직을 더 포함하는 프로세서.
  30. 제26항 또는 제27항에 있어서, 다른 프로세서가 상기 모니터 주소를 스누핑(snooping)하는 것에 응답하여 히트 신호를 확인하기 위한 수단을 더 포함하는 프로세서.
  31. 제26항 또는 제27항에 있어서, 상기 제1 명령어 및 상기 제2 명령어는 복수의 스레드들 중의 제1 스레드의 명령들이고, 상기 구현 의존 상태는 상기 제1 스레드를 위한 분할된 자원이 포기되는 역분할 상태(de-partitioned state)를 포함하는 프로세서.
  32. 명령어들을 수신하기 위한 복수의 스레드 분할 가능 자원;
    상기 복수의 스레드 분할 가능 자원과 협력하여 명령어들을 실행하기 위한 복수의 공유 자원;
    상기 제1 스레드에서의 명령어에 응답하여 제1 스레드를 중단시키며, 상기 제1 스레드를 중단시키는 것 이외에 상기 제1 스레드에 연관된 상기 복수의 스레드 분할 가능 자원의 분할 영역들을 포기하기 위한 스레드 중단 로직; 및
    상기 프로세서로 하여금 상기 제1 스레드에 의해 표시되는 메모리 주소로의 액세스에 응답하여 상기 복수의 스레드 분할 가능 자원을 재분할하고, 상기 제1 스레드의 실행을 재개하도록 하기 위한 모니터
    를 포함하는 프로세서.
  33. 제32에 있어서,
    상기 메모리 주소로의 상기 액세스는 상기 제1 스레드에서 실행되는 제1 명령어에 의해 명시되며,
    상기 명령어에 의해, 스레드를 재개시키도록 하는 모니터 이벤트들 신호를 생성하기 위해 상기 모니터가 언마스킹되며, 상기 명령어에 응답하여 상기 스레드 중단 로직이 상기 제1 스레드를 중단시키는 프로세서.
  34. 제32항 또는 제33항에 있어서, 상기 복수의 분할 가능한 자원들은
    명령어 큐;
    재정렬 버퍼;
    레지스터 풀; 및
    복수의 저장 버퍼들
    을 포함하고, 상기 프로세서는 상기 복수의 스레드의 각각에 대해 복제되는 복수의 복제 자원을 더 포함하며,
    상기 복수의 복제 자원은
    복수의 프로세서 상태 변수;
    명령어 포인터; 및
    레지스터 리네이밍 로직
    을 포함하는 프로세서.
  35. 실행 중인 제1 스레드에서의 제1 연산 코드(opcode)를 수신하는 단계 - 상기 제1 연산 코드는 모니터 주소를 나타내는 관련 주소 피연산자를 가짐 - ;
    상기 제1 스레드를 중단시키는 단계;
    상기 모니터 주소로의 메모리 액세스를 검출하는 단계; 및
    상기 모니터 주소로의 상기 메모리 액세스를 검출한 것에 응답하여 상기 제1 스레드를 재개시키는 단계
    를 포함하는 방법.
  36. 제35항에 있어서, 상기 제1 스레드를 중단시키는 단계는
    상기 제1 스레드에서 제2 명령어를 수신하는 단계; 및
    상기 제2 명령어에 응답하여 상기 제1 스레드를 중단시키는 단계
    를 포함하는 방법.
  37. 제35항 또는 제36항에 있어서, 상기 메모리 액세스는 기록 액세스인 방법.
  38. 제35항 또는 제36항에 있어서,
    상기 관련 주소 피연산자를 모니터링되는 물리적 주소로 변환하는 단계를 더 포함하고,
    상기 모니터 주소로의 상기 메모리 액세스를 검출하는 단계는, 상기 모니터링되는 물리적 주소로의 기록 액세스를 검출하는 단계를 포함하는 방법.
  39. 제35항 또는 제36항에 있어서, 다른 에이전트들이 상기 모니터 주소에 저장된 정보의 소유권(ownership)을 획득하는 것을 방지하는 단계를 더 포함하는 방법.
  40. 제35항 또는 제36항에 있어서, 상기 검출 단계는
    외부 버스 트랜잭션들로부터 사이클 정보를 수신하는 단계; 및
    상기 모니터 주소로의 기록을 검출하는 단계
    를 포함하는 방법.
  41. 제35항 또는 제36항에 있어서,
    상기 메모리 주소로의 상기 메모리 액세스 이외의 이벤트에 응답하여 상기 제1 스레드를 재개시키는 단계를 더 포함하는 방법.
  42. 제41항에 있어서, 상기 이벤트는 인터럽트인 방법.
  43. 제42항에 있어서, 상기 인터럽트는, 제2 피연산자에 의해 파괴 이벤트(break event)로 간주되도록 지시되는 마스킹된 인터럽트(masked interrupt)인 방법.
  44. 제35항 또는 제36항에 있어서,
    상지 제1 연산코드와 연관된 선형 주소를 물리적인 주소로 변환하는 단계
    를 더 포함하는 방법.
  45. 제44항에 있어서,
    다른 버스 에이전트가 상기 물리적인 주소를 판독하면 히트 신호를 발생시키는 단계
    를 더 포함하는 방법.
  46. 제2항에 있어서, 만약 상기 제1 스레드가 중단되고 모니터 이벤트들이 언마스킹되면(unmasked), 상기 모니터 수단은 상기 모니터 주소로의 상기 메모리 액세스에 응답하여 상기 제1 스레드의 재개를 야기하는 프로세서.
  47. 삭제
  48. 삭제
  49. 삭제
  50. 삭제
  51. 삭제
  52. 삭제
  53. 삭제
  54. 삭제
  55. 삭제
  56. 삭제
  57. 삭제
  58. 삭제
  59. 삭제
  60. 삭제
  61. 삭제
  62. 삭제
  63. 삭제
  64. 삭제
  65. 삭제
  66. 삭제
  67. 삭제
  68. 삭제
  69. 삭제
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 KR20040068993A (ko) 2004-08-02
KR100814993B1 true 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)

Families Citing this family (137)

* 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
KR100763200B1 (ko) 2006-02-24 2007-10-04 삼성전자주식회사 인터럽트 가능한 스레드 동기화 방법 및 장치
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 国际商业机器公司 基于辅助线程实现事务存储系统的方法和装置
KR101581311B1 (ko) * 2009-03-11 2015-12-31 삼성전자주식회사 플래시 메모리 장치 및 그 제어 방법
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
WO2010151267A1 (en) * 2009-06-26 2010-12-29 Intel Corporation Optimizations for an unbounded transactional memory (utm) system
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
GB2529899B (en) * 2014-09-08 2021-06-23 Advanced Risc Mach Ltd Shared Resources in a Data Processing Apparatus for Executing a Plurality of Threads
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 芋头科技(杭州)有限公司 一种在预设嵌入式系统中实现脚本操作的系统
GB2537115B (en) * 2015-04-02 2021-08-25 Advanced Risc Mach Ltd Event monitoring in a multi-threaded data processing apparatus
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 慧榮科技股份有限公司 記憶體裝置以及操作指令錯誤處理方法
KR102043538B1 (ko) * 2018-01-18 2019-11-11 주식회사 알티스트 파티셔닝을 적용하여 프로세스를 모니터링하는 컴퓨팅 시스템
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

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
TR1430.pdf

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
KR20040068993A (ko) 2004-08-02
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
KR100617417B1 (ko) 멀티-스레딩 프로세서에서 스레드의 실행을 정지시키기위한 시스템 및 방법
US6687809B2 (en) Maintaining processor ordering by checking load addresses of unretired load instructions against snooping store addresses
US9733937B2 (en) Compare and exchange operation using sleep-wakeup mechanism
US7631307B2 (en) User-programmable low-overhead multithreading
US7529914B2 (en) Method and apparatus for speculative execution of uncontended lock instructions
US20090132796A1 (en) Polling using reservation mechanism
TW201508635A (zh) 多核心微處理器動態重新配置
TW201510860A (zh) 多核心同步機制
US6006325A (en) Method and apparatus for instruction and data serialization in a computer processor
Becker et al. Measuring software performance on linux
KR20210087431A (ko) 트랜잭션 메모리를 위한 장치 및 데이터 처리 방법
GB2441903A (en) Resuming control of resources by a processor on exiting a sleep mode and disabling an associated monitor.
KR100333580B1 (ko) 개별 프로세서의 초기 해제에 의한 시스템 직렬화 및 그 멀티프로세서 시스템

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