KR101100470B1 - 멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법 - Google Patents

멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법 Download PDF

Info

Publication number
KR101100470B1
KR101100470B1 KR1020077026399A KR20077026399A KR101100470B1 KR 101100470 B1 KR101100470 B1 KR 101100470B1 KR 1020077026399 A KR1020077026399 A KR 1020077026399A KR 20077026399 A KR20077026399 A KR 20077026399A KR 101100470 B1 KR101100470 B1 KR 101100470B1
Authority
KR
South Korea
Prior art keywords
tc
instruction
thread
scheduler
instructions
Prior art date
Application number
KR1020077026399A
Other languages
English (en)
Other versions
KR20070121840A (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
Priority to US11/107,492 priority Critical
Priority to US11/107,492 priority patent/US7627770B2/en
Application filed by 밉스 테크놀로지스 인크. filed Critical 밉스 테크놀로지스 인크.
Priority to PCT/US2006/011327 priority patent/WO2006113068A2/en
Publication of KR20070121840A publication Critical patent/KR20070121840A/ko
Application granted granted Critical
Publication of KR101100470B1 publication Critical patent/KR101100470B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 – G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of power-saving mode
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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; 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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling, out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling, out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3863Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING; 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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4893Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues taking into account power or heat criteria
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing
    • Y02D10/20Reducing energy consumption by means of multiprocessor or multiprocessing based techniques, other than acting upon the power supply
    • Y02D10/24Scheduling

Abstract

프로세서는 다중 쓰레드들을 실행하는 프로세서 코어를 포함한다. 분기형 쓰레드 스케줄러는 내부 프로세서 코어 컴포넌트 및 외부 프로세서 코어 컴포넌트를 포함한다. 분기형 쓰레드 스케줄러는, 다중 쓰레드들 모두가 차단되고 그 후 자동으로 디폴트 저전력 슬립 모드로 진입하는 때를 식별한다.
멀티쓰레드 프로세서 코어, 쓰레드 컨텍스트, 분기형 쓰레드 스케줄러, 라운드-로빈, 디폴트 저전력 슬립 모드

Description

멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한 장치 및 방법 {APPARATUS AND METHOD FOR AUTOMATIC LOW POWER MODE INVOCATION IN A MULTI-THREADED PROCESSOR}

본 발명은 일반적으로 멀티쓰레드 프로세서에서의 전력 관리에 관한 것이다. 좀더 구체적으로, 본 발명은 저전력 모드 프로세서 상태를 자동으로 호출하기 위한 기술에 관한 것이다.

마이크로프로세서 설계자는 마이크로프로세서 성능을 증가시키기 위해 많은 기술들을 이용한다. 대부분의 마이크로프로세서는 고정 주파수에서 실행중인 클록 신호를 사용해 동작한다. 각각의 클록 사이클에서, 마이크로프로세서의 회로들은 그들 개개의 기능(function)을 수행한다. 마이크로프로세서 성능의 일 측정은 프로그램 또는 프로그램의 집합을 실행하는데 요구되는 시간이다. 이러한 관점으로부터, 마이크로프로세서의 성능은 그것의 클록 주파수, 명령어를 실행하는데 요구되는 클록 사이클의 평균 수(또는 달리 표현하면, 매 클록 사이클마다 실행되는 명령어의 평균 수), 및 프로그램 또는 프로그램의 집합에서 실행되는 명령어 수의 함수이다.

반도체 과학자들 및 기술자들은, 주로 트랜지스터 사이즈를 감소시키는 것에 의해, 좀더 빠른 전환 시간(switching time)을 초래하면서, 계속해서 마이크로프로세서가 좀더 빠른 클록 주파수에서 실행될 수 있게 한다. 실행되는 명령어 수는, 그것이 마이크로프로세서의 명령어 세트 아키텍처에 의해서 영향받기도 하지만, 프로그램에 의해 수행될 태스크에 의해 대체로 정해진다. 병렬 처리(parallelism)와 같은, 아키텍처 개념 및 편성 개념이 큰 성능 증가를 실현해왔다.

마이크로프로세서의, 클록 주파수 뿐만 아니라, 매 클록 사이클당 명령어를 향상시킨 병렬 처리의 일 개념은, 다수 명령어의 실행을 마이크로프로세서의 파이프라인 스테이지들 내에서 중첩하는 파이프라이닝(pipelining)이다. 이상적인 상황으로, 각각의 클록 사이클마다, 하나의 명령어가 파이프라인을 따라 아래쪽으로 이동하여, 그 명령어에 대해 상이한 기능을 수행하는 새로운 스테이지로 이동한다. 이와 같이, 각각의 개개 명령어가 완료하는 데는 다수의 클록 사이클이 필요하지만, 개개 명령어의 다수 사이클이 중첩하기 때문에, 명령어당 클록 사이클의 평균 수는 감소된다. 파이프라이닝의 성능 향상은, 프로그램의 명령어가 그것을 허용하는 정도까지, 다시 말해, 명령어가 실행을 위해 그것의 선행자(predecessors)에 의존하지 않으며 따라서 그것의 선행자와 병렬로 실행될 수 있는 정도까지 실현될 수 있는데, 이것을 흔히 명령어-레벨 병렬 처리(instruction-level parallelism)라고 한다. 명령어-레벨 병렬 처리가 동시대 마이크로프로세서에 의해 이용되는 다른 방법은 매 클록 사이클당 실행을 위해 다수 명령어를 발행하는 것이다. 이러한 마이크로프로세서를 흔히 수퍼스칼라(superscalar) 마이크로프로세서라고 한다.

상기 논의는 개개 명령어 레벨에서의 병렬 처리와 관련이 있다. 그러나, 명 령어-레벨 병렬 처리의 이용을 통해 달성될 수 있는 성능 향상은 제한적이다. 제한적 명령어-레벨 병렬 처리에 의해 제기되는 다양한 제약 및 다른 성능-제약 쟁점으로 인해, 흔히 쓰레드-레벨 병렬 처리라고 하는, 병렬 처리를 명령어의 블록, 시퀀스, 또는 스트림의 레벨에서 이용하는 것에 대한 관심이 최근 재개되었다. 쓰레드는 단순히 프로그램 명령어의 시퀀스 또는 스트림이다. 멀티쓰레드 마이크로프로세서는, 인터리브형, 블록형, 또는 동시 멀티쓰레딩과 같은, 다양한 쓰레드의 명령어의 인출(fetching) 및 발행(issuing)을 지시하는 일부 스케줄링 정책에 따라, 동시에 다중 쓰레드들을 실행한다. 멀티쓰레드 마이크로프로세서는 통상적으로, 다중 쓰레드들이 마이크로프로세서의 기능 유닛(예를 들어, 명령어 인출 및 디코드 유닛, 캐시, 분기 예측 유닛, 및 로드/저장(load/store), 정수, 부동 소수점, SIMD 등의 실행 유닛)을 동시발생 방식으로 공유할 수 있게 한다. 그러나, 멀티쓰레드 마이크로프로세서는, 명령어를 인출 및 발행하기 위한 쓰레드 사이에서 신속하게 전환할 수 있는 능력을 용이하게 하기 위해, 다수 프로그램 카운터 및 범용 레지스터 세트와 같은, 각 쓰레드의 고유 상태를 저장하기 위한 리소스 또는 컨텍스트의 다수 세트를 포함한다.

마이크로프로세서를 멀티쓰레딩하는 것에 의해 제기되는 성능-제약 쟁점의 일례는, 캐시 미스(cache miss)가 통상적으로 비교적 긴 지연을 갖는다는 것이다. 동시대 마이크로프로세서-기반 컴퓨터 시스템의 메모리 액세스 시간은 캐시 히트 액세스 시간(cache hit access time)보다 크기가 일차수(one order) 내지 이차수 정도 큰 것이 일반적이다. 캐시에서 손실되는 데이터에 의존하는 명령어는 메모리 로부터 데이터가 올 것을 대기하며 파이프라인에서 지연된다. 따라서, 단일-쓰레드 마이크로프로세서의 파이프라인 스테이지 중 일부 또는 전부는 다수 클록 사이클 동안 유용한 작업을 수행하지 않는 휴지(idle) 상태일 수 있다. 멀티쓰레드 마이크로프로세서는, 메모리 인출 대기 동안 다른 쓰레드로부터의 명령어를 발행하여 파이프라인 스테이지가, 페이지 장애에 대해 오퍼레이팅 시스템이 수행하는 태스크 전환(task switch)과 어느 정도 유사하지만 그것보다 좀더 미세한 입상(granularity) 레벨에서, 유용한 작업을 수행하며 진행할 수 있게 하는 것에 의해, 이 문제를 해결할 수 있다. 마이크로프로세서를 멀티쓰레딩하는 것에 의해 제기되는 성능-제약 쟁점의 다른 예들은 파이프라인 지연 및, 데이터 의존성으로 인해; 또는 분할 명령어, 부동 소수점 명령어 등과 같은 긴 지연 명령어로 인해; 또는 제한된 하드웨어 리소스 충돌로 인해, 파이프라인 지연에 수반되는 휴지 사이클이다. 이번에도, 다른 쓰레드로부터의 명령어를, 그렇지 않으면, 휴지 상태일 파이프라인 스테이지로 발행할 수 있는 멀티쓰레드 마이크로프로세서의 능력은, 쓰레드를 포함하는 프로그램 또는 프로그램의 집합을 실행하는데 요구되는 시간을 크게 감소시킬 수 있다.

멀티쓰레딩 및 다른 기술을 통해 달성되는 증가된 마이크로프로세서 성능은 증가된 마이크로프로세서 전력 소비를 발생시킨다. 전력 소비는 다수 애플리케이션에서의 결정적인 팩터이다. 따라서, 전력 관리 기술에 대한 강조가 증가하고 있다. 대다수 전력 관리 기술은 프로세서 상태의 프로액티브 이해(proactive understanding)에 의해 예측된다. 다시 말해, 전력 관리 동작은 프로세서 동작의 전체적인 이해에 따라 그리고 다양한 프로세싱 처리율 및 전력 관리 트레이드오프(tradeoffs)의 가중(weighing)을 통해 호출된다. 그러한 기술은 복잡한 제어 스킴에 의존한다. 프로세서 상태에 관한 비교적 적은 정보에 의존하는 간단한 제어 스킴을 통해 전력 보존을 달성하는 것이 매우 바람직하다. 이상적으로, 그러한 기술은 최소한의 프로세서 성능 패널티로 자동으로 호출될 것이다.

본 발명은 다중 쓰레드들을 실행하는 프로세서 코어를 갖춘 프로세서를 포함한다. 분기형 쓰레드 스케줄러(bifurcated thread scheduler)는 내부 프로세서 코어 컴포넌트 및 외부 프로세서 코어 컴포넌트를 포함한다. 분기형 쓰레드 스케줄러는, 다중 쓰레드들 모두가 차단되고 그 후 자동으로 디폴트(default) 저전력 슬립 모드로 진입하는 때를 식별한다. 일 실시예에서, 분기형 쓰레드 스케줄러는, 차단된 쓰레드가 대기(wait) 명령어, 일드(yield) 명령어, 쓰레드간 통신(ITC; inter-thread communication) 액세스 차단, 및 외부 프로세스 코어 컴포넌트로부터의 중단된 우선순위 요청을 받을 때를 식별하도록 구성된다. 바람직하게도, 분기형 쓰레드 스케줄러는, wait 명령어를 발행하지 않고 디폴트 저전력 슬립 모드로 진입하도록 구성된다. 분기형 쓰레드 스케줄러는 디폴트 저전력 슬립 모드로 진입하기 전에 하우스키핑 기능들(housekeeping functions)을 수행할 수도 있다.

본 발명은 또한 컴퓨팅 시스템에서의 전력 관리 방법도 포함한다. 다중 쓰레드들이 실행된다. 다중 쓰레드들 모두가 차단되는 것으로 식별될 때, 자동으로 디폴트 저전력 슬립 모드로 진입된다. 쓰레드가 더 이상 차단되지 않을 때, 자동으로 저전력 슬립 모드가 종료된다.

본 발명은, 첨부 도면들과 함께 고려되는 다음의 상세한 설명과 관련하여 더욱 완전히 이해된다.

도 1은 본 발명의 일 실시예에 따라 사용될 수 있는 멀티쓰레딩 마이크로프로세서를 예시하는 도면.

도 2는 본 발명의 일 실시예에 따라 이용되는, 디스패치(dispatch) 스케줄러 및 정책 관리자(policy manager)를 포함하는, 분기형 스케줄러를 예시하는 도면.

도 3은 도 2의 분기형 스케줄러와 함께 사용될 수 있는 디스패치 스케줄러를 예시하는 도면.

도 4는 도 3의 디스패치 스케줄러와 연관된 프로세싱 동작을 예시하는 도면.

도 5는 도 2의 분기형 스케줄러와 함께 사용될 수 있는 정책 관리자를 예시하는 도면.

도 6은 도 5의 정책 관리자와 연관된 프로세싱 동작을 예시하는 도면.

유사한 참조 번호들은 몇몇 도면 전체에 걸쳐 대응되는 부분들에 적용된다.

도 1은 본 발명의 일 실시예에 따른 파이프라인형 멀티쓰레딩 마이크로프로세서(100)를 예시한다. 이러한 예시적 멀티쓰레딩 마이크로프로세서(100)는 본 발명의 개념을 개시하는데 이용된다. 본 발명의 개념은 다른 멀티쓰레딩 마이크로프로세서 설계에도 적용될 수 있다는 것이 이해되어야 한다.

마이크로프로세서(100)는 복수의 쓰레드를 동시에 실행하도록 구성된다. 여기에서 실행 쓰레드 또는 명령어 스트림이라고도 지칭하는 쓰레드는 프로그램 명령어의 시퀀스 또는 스트림을 포함한다. 쓰레드는 마이크로프로세서(100)에서 실행중인 상이한 프로그램으로부터 유래할 수 있거나, 마이크로프로세서(100)에서 실행중인 동일한 프로그램의 상이한 부분으로부터의 명령어 스트림일 수 있거나, 또는 그 조합일 수 있다.

각각의 쓰레드는 연관된 쓰레드 컨텍스트(TC; thread context)를 가진다. 쓰레드 컨텍스트는, 레지스터(registers) 또는 래치(latches)와 같은, 저장 요소의 집합, 및/또는 마이크로프로세서(100)의 저장 요소에 쓰레드의 실행 상태를 설명하는 비트를 포함한다. 다시 말해, 쓰레드 컨텍스트는, 마이크로프로세서(100)에서 동시에 실행중인 다른 실행 쓰레드와 공유되는 상태가 아니라, 그 쓰레드에 고유한 개개 쓰레드의 상태를 설명한다. 쓰레드 각각의 상태를 쓰레드 컨텍스트에 저장하는 것에 의해, 마이크로프로세서(100)는 명령어를 인출 및 발행하기 위한 쓰레드들 사이에서 신속하게 전환하도록 구성된다. 일 실시예에서, 각각의 쓰레드 컨텍스트는 프로그램 카운터(PC), 범용 레지스터 세트, 및 쓰레드 제어 레지스터를 포함하고, 이들은 마이크로프로세서(100)의 레지스터 파일(112)에 포함된다.

마이크로프로세서(100)는 다양한 쓰레드의 명령어의 인출 및 발행을 지시하는 스케줄링 정책에 따라 쓰레드를 동시에 실행한다. 다중 쓰레드들로부터의 명령어의 디스패치를 스케줄링하기 위한 다양한 실시예가 본 명세세에서 설명된다. 명령어의 "발행" 및 "디스패치"라는 용어는 본 명세서에서 교환 가능하게 사용된다. 멀티쓰레드 마이크로프로세서(100)는, 다중 쓰레드들이 마이크로프로세서(100)의 기능 유닛(예를 들어, 명령어 인출 및 디코드 유닛, 캐시, 분기 예측 유닛 및, 로드/저장, 정수, 부동 소수점, SIMD, 및 다른 실행 유닛 등의 실행 유닛들)을 동시발생 방식으로 공유할 수 있게 한다.

마이크로프로세서(100)는 마이크로프로세서(100)를 포함하는 시스템의 시스템 메모리로부터 인출된 프로그램 명령어, 특히, 다양한 쓰레드의 명령어를 캐싱하기 위한 명령어 캐시(102)를 포함한다. 또한, 마이크로프로세서(100)는 다중 쓰레드들의 명령어를 명령어 캐시(102) 및/또는 시스템 메모리로부터 명령어 인출기(104)에 결합된 명령어/스키드 버퍼(106)로 동시에 인출하도록 결합된 명령어 인출기(104) 또는 명령어 인출 파이프라인(104)을 포함한다. 일 실시예에서, 명령어 인출 파이프라인(104)은 4-스테이지 파이프라인(four-stage pipeline)을 포함한다. 명령어/스키드 버퍼(106)는 명령어 스케줄러(108) 또는 쓰레드 스케줄러(108)에 명령어를 제공한다. 일 실시예에서, 각 쓰레드는 자신만의 명령어/스키드 버퍼(106)를 가진다. 각 클록 사이클에서, 스케줄러(108)는 쓰레드 중 하나로부터 명령어를 선택하고 마이크로프로세서(100) 파이프라인의 실행 스테이지 내에서의 실행을 위한 명령어를 발행한다. 레지스터 파일(112)은 스케줄러(108)에 결합되어, 명령어를 실행하는 실행 유닛(114)에 명령어 피연산자(operand)를 제공한다. 또한, 마이크로프로세서(100)는 실행 유닛(114)에 결합된 데이터 캐시(118)를 포함한다. 실행 유닛(114)은, 정수 실행 유닛, 부동 소수점 실행 유닛, SIMD 실행 유닛, 로드/저장 유닛, 및 분기 실행 유닛을 포함할 수 있지만, 그에 한정되는 것은 아니다.

일 실시예에서, 정수 실행 유닛 파이프라인은 4 스테이지: 레지스터 파일(112)이 액세스되는 레지스터 파일(RF) 액세스 스테이지, 주소 발생(AG; address generation) 스테이지, 실행(EX) 스테이지, 및 메모리 세컨드(MS; memory second) 스테이지를 포함한다. EX 스테이지에서는, (덧셈, 뺄셈, 시프트 등과 같은) 간단한 ALU 연산이 수행된다. 추가적으로, 데이터 캐시(118)는, 제1 클록 사이클 동안 EX 스테이지에서 액세스되고 제2 클록 사이클 동안 MS 스테이지에서 액세스되는 2-사이클 캐시이다. 각 쓰레드 컨택스트는 그 자신의 레지스터 파일(112)을 포함하고, 각 레지스터 파일은 그 자신의 프로그램 카운터(PC), 범용 레지스터 세트, 및 쓰레드 제어 레지스터를 포함한다. 명령어 인출기(104)는 각 쓰레드 컨택스트의 프로그램 카운터 값에 기초해 쓰레드의 명령어를 인출한다. 실행 유닛(114) 중 일부는, 다소 광범위하게, 파이프라인될 수 있다는 것에 주의해야 한다. 또한, 마이크로프로세서(100) 파이프라인은, 명령어 결과를 레지스터 파일(112)에 후기입하는 후기입 스테이지(116;write-back stage)도 또한 포함한다. 일 실시예에서, 마이크로프로세서(100) 파이프라인은 실행 유닛(114)과 후기입 스테이지(116) 사이에 결합된 예외사항 해결(exception resolution) 스테이지도 포함한다.

일 실시예에서, 실행 유닛(114)은 특정 쓰레드의 명령어가 실행을 위해 커밋(commit)되었음을 지시하기 위해 각각의 쓰레드 컨텍스트와 연관된 TC_instr_committed 신호(124)를 발생시킨다. 명령어가 마이크로프로세서(100) 파이프라인에 의해 플러시(flush)되지 않을 것이 보장되는 대신 궁극적으로 실행을 완료하기 위해 커밋된다면, 명령어는 실행을 위해 커밋된 것으로, 이는, 결과를 발 생시키고 마이크로프로세서(100)의 아키텍처 상태를 업데이트한다. 일 실시예에서, 다수의 명령어가 매 클록 사이클마다 커밋될 수도 있고, TC_instr_committed 신호(124)는 그 클록 사이클 동안 쓰레드 컨텍스트에 대해 커밋된 명령어 수를 지시한다. TC_instr_committed 신호(124)가 스케줄러(108)에 제공된다. TC_instr_committed 신호(124)에 응답하여, 스케줄러(108)는, 후술되는 바와 같이, 요구되는 QoS(quality-of-service)를 실현하기 위해 스케줄러(108)의 쓰레드 스케줄링 정책에 의해 사용되는, 쓰레드에 대한 가상 수위 지시자(virtual water level indicator)를 업데이트한다.

TC_instr_committed 신호(124)는 개개의 명령어/스키드 버퍼(106)에도 제공된다. TC_instr_committed 신호(124)에 응답하여, 명령어/스키드 버퍼(106)는 포인터를 업데이트하여 버퍼(106)로부터 명령어를 효과적으로 제거한다. 종래의 마이크로프로세서에서, 명령어들은 종래의 명령어 버퍼로부터 제거되고 실행을 위해 발행된다. 그러나, 명령어/스키드 버퍼(106)는, 명령어가 실행을 위해 발행된 후에도, 계속해서 명령어를 저장한다. 명령어는, 실행 유닛(114)이, 개개의 TC_instr_committed 신호(124)를 통해, 명령어가 실행을 위해 커밋되었음을 지시할 때까지 명령어/스키드 버퍼(106)로부터 제거되지 않는다.

스케줄러(108)는 실행 유닛(114)에 실행가능한 TCs 신호(132)를 제공한다. 실행가능한 TCs 신호(132)는 쓰레드 컨텍스트 중 어떤 것이 실행가능한지를, 즉, 스케줄러(108)가 현재 어느 쓰레드 컨텍스트로부터 명령어를 발행할 수 있는지를 특정한다. 일 실시예에서는, 쓰레드 컨텍스트가 활성(active)이며 (Halted, Waiting, Suspended, 또는 Yielded 등의) 다른 조건에 의해 차단되지 않으면, 쓰레드 컨텍스트는 실행가능하다. 특히, 실행 유닛(114)은, 지연된 쓰레드 컨텍스트의 명령어를 플러시할 것인지의 여부를 판정하기 위해, 실행가능한 TCs 신호(132)를 이용해, 지연된 쓰레드 컨텍스트가 유일하게 실행가능한 쓰레드 컨텍스트인지의 여부를 판정한다.

실행 유닛(114)은 스케줄러(108)에 지연 이벤트 신호(126)를 제공한다. 지연 이벤트 신호(126)는 특별한 지연 이벤트 신호(126)에 의해 특정된 이유로 인해 실행 유닛(114)에서 명령어가 지연되었거나 지연될 것임을 지시한다. 또한, 지연 이벤트 신호(126)는 지연된 명령어의 쓰레드 컨텍스트를 식별하는 식별자를 포함한다. 실행 유닛(114)은 스케줄러(108)에 비지연 이벤트 신호(128)도 제공한다. 지연 이벤트 신호(126)에 응답하여, 스케줄러(108)는, 관련된 비지연 이벤트(128)가 시그널링될 때까지, 지연된 쓰레드 컨텍스트에 대해 명령어를 발행하는 것을 중단한다.

명령어에 응답하여 실행 유닛(114)을 지연시킬 이벤트의 예로는 다음을 들 수 있지만, 그에 한정되는 것은 아니다. 첫번째, 명령어는 데이터 캐시(118)에서 손실된 로드 명령어로부터의 데이터와 같은, 이용불가능한 데이터에 의존할 수도 있다. 예를 들어, 덧셈 명령어는, 데이터 캐시(118)에서 손실된 선행 로드 명령어 및 피연산자가 아직까지 시스템 메모리로부터 인출되지 않았기 때문에 이용불가능한 피연산자를 특정할 수도 있다. 두번째, 명령어는, 예를 들어, divide 또는 다른 긴 산술 명령어(other long arithmetic instruction) 등의 장기 실행 명령 어(long-running instruction) 또는 코프로세서(coprocessor) 레지스터로부터 값을 이동시키는 명령어로부터의 데이터에 의존할 수도 있다.

세번째, 명령어는 제한된 하드웨어 리소스에 대한 충돌을 도입할 수도 있다. 예를 들어, 일 실시예에서, 마이크로프로세서(100)는 단일 분할기 회로(single divider circuit)를 포함한다. 분할기가 이미 divide 명령어를 실행중이라면, 제2 divide 명령어는 제1 divide 명령어가 종료하기를 대기하면서 지연해야 한다. 다른 예로서, 일 실시예에서, 마이크로프로세서(100) 명령어 세트는 명령어 캐시(102)의 저급 관리 동작(low-level management operations)을 수행하기 위한 명령어의 그룹을 포함한다. 명령어 캐시 관리 명령어(instruction cache management instruction)가 이미 실행중이라면, 제2 명령어 캐시 관리 명령어는 제1 명령어 캐시 관리 명령어가 종료하기를 대기하면서 지연해야 한다. 또 다른 예로서, 일 실시예에서, 마이크로프로세서(100)는 진행중인 데이터 캐시(118) 리필을 저장하기 위한 비교적 적은 수의 슬롯을 포함하는 로드 큐(load queue)를 포함한다. 로드 명령어가 데이터 캐시(118)에서 손실될 때, 손실 데이터를 시스템 메모리로부터 획득하기 위해, 로드 큐 엔트리가 할당되고 프로세서 버스 트랜잭션이 개시된다. 데이터가 버스 상에서 리턴될 때, 그것은 로드 큐에 저장된 다음 데이터 캐시(118)에 기입된다. 버스 트랜잭션이 완료되어 모든 데이터가 데이터 캐시(118)에 기입될 때, 로드 큐 엔트리는 해방된다. 그러나, 로드 큐가 풀(full)일 때, 로드 손실은 파이프라인 지연을 발생시킨다.

네번째, 명령어는 EHB(Execution Hazard Barrier) 명령어를 뒤따를 수 있다. 일 실시예에서, 마이크로프로세서(100) 명령어 세트는, 모든 실행 위험이 소거될 때까지, 명령어 실행을 중단시키기 위해 소프트웨어에 의해 이용되는 EHB(실행 위험 배리어) 명령어를 포함한다. 통상적으로, EHB 명령어를 뒤따르는 명령어는, EHB 명령어가 철수될 때까지 파이프라인에서 지연할 것이다.

다섯째, 명령어는 그것의 동일한 쓰레드 컨택스트에서 쓰레드간 통신(ITC) 공간으로 어드레싱된 로드 또는 저장 명령어를 뒤따를 수 있다. 일 실시예에서, 마이크로프로세서(100)는, ITC 로드 또는 저장에 뒤따르는 동일한 쓰레드 컨텍스트에서 명령어가 지연하게 하면서 임의적인 긴 시간 동안 차단할 수 있는 동기화된 저장 공간을 포함하는 ITC 공간으로의 로드 또는 저장을 지원한다.

반대로, 비지연 이벤트(128)의 예로는 다음의 것: 데이터 캐시(118)에서 손실된 로드 데이터가 리턴되는 것; 분할기 회로, 명령어 캐시(102), 또는 로드 큐 슬롯과 같은, 제한된 하드웨어 리소스가 해방되는 것; 쓰레드간 통신(ITC) 공간으로의 EHB 명령어, 장기 실행 명령어, 또는 로드/저장 명령어가 완료되는 것을 포함하지만, 그에 한정되는 것은 아니다.

실행 유닛(114)은, 파이프라인의 실행 부분(즉, 스케줄러(108) 아래쪽의 파이프라인 부분)에서 특정 쓰레드의 명령어들이 플러시되었거나 무효화되었다는 것을 지시하기 위해, 각각의 쓰레드 컨텍스트와 연관된 TC_flush 신호(122)도 발생시킨다. 일 실시예에서, 명령어를 플러시하거나 무효화하는 단계는 파이프라인의 명령어와 연관된 유효 비트를 소거하는 단계를 포함하고, 이는, 파이프라인이 명령어의 결과에 응답하여 마이크로프로세서(100)의 아키텍처 상태를 업데이트하는 것을 방지한다. 실행 유닛(114)이 TC_flush 신호(122)를 발생시킬 수 있는 한가지 이유는, 전술한 바와 같이, 쓰레드의 명령어가 실행 유닛(114)에서 지연할 때이다. 명령어에 대해 발생된 결과는 무시될 것이므로 정정될 필요가 없기 때문에, 명령어를 무효화하거나 플러시하는 단계는 명령어가 지연될 이유를 제거한다. 바람직하게도, 지연중인 명령어를 플러시하는 것에 의해, 계속해서 다른 쓰레드의 명령어가 실행되어 실행 파이프라인의 실행 대역폭을 이용할 수 있고, 그것에 의해, 다음에서 부연되는 바와 같이, 마이크로프로세서(100)의 전반적인 성능을 잠재적으로 증가시킬 수 있다. 일 실시예에서, 지연중인 쓰레드의 명령어만이 플러시되고, 이는, 실행 유닛(114) 파이프라인에 존재하는 다양한 쓰레드로부터의 명령어 구성에 의존하여, 플러시에 의해 도입되는 파이프라인 버블 수를 바람직하게 감소시킬 수 있고, 일부 경우들에서는, 지연중인 명령어와 연관된 하나의 버블만을 발생시킬 수도 있다. 일 실시예에서, TC_flush 신호(122)는, 쓰레드 컨텍스트의 커밋되지 않은 모든 명령어가 플러시되었음을 지시한다. 다른 실시예에서, 실행 유닛(114)은 실행 유닛(114)에 존재하는 커밋되지 않은 명령어 수, 즉, 지연중인 쓰레드 컨텍스트의 지연중인 명령어 및 임의의 새로운 명령어의 수보다 적게 플러시할 수 있지만, 지연중인 명령어보다 오래된, 쓰레드 컨텍스트의 커밋되지 않은 명령어는 플러시하지 않는다. 이 실시예에서, TC_flush 신호(122)는 실행 유닛(114)에 의해 플러시된 명령어 수도 지시한다.

TC_flush 신호(122)는 실행 유닛(114)에 의해 그들 개개의 명령어/스키드 버퍼(106)에 제공된다. 명령어/스키드 버퍼(106)는 TC_flush 신호(122)를 사용해 버 퍼(106)에서의 명령어 상태를 복구(roll back)한다. 명령어/스키드 버퍼(106)는, 플러시되지 않기 위해, 명령어가 커밋될 때까지 계속해서 명령어를 저장하기 때문에, 플러시되는 임의 명령어가, 명령어 캐시(102)로부터 재인출될 필요없이, 명령어/스키드 버퍼(106)로부터 후속적으로 재발행될 수 있다. 이는, 다른 쓰레드로부터의 명령어가 실행될 수 있도록 하기 위해, 실행 파이프라인으로부터 지연된 명령어를 플러시하는 것과 연관된 패널티를 감소시킬 수 있다는 이점을 가진다. 명령어 인출 시간이 증가하는 것으로 나타나기 때문에, 명령어를 재인출해야 할 가능성을 감소시키는 것이 점차 중요해지고 있다. 이는, 다른 것 중에서도, 대체로 프로세서 클록 주기에서의 감소로 인해, 종래의 마이크로프로세서 설계에서보다 명령어 캐시가 액세스에 좀더 많은 클록 사이클을 필요로 하는 것이 점차 보편화되고 있기 때문이다. 따라서, 명령어 재인출과 연관된 패널티는 좀더 초창기 설계에서는 하나, 둘, 또는 그 이상의 클록 사이클일 수 있다.

이제 도 2를 참조하면, 스케줄러(108)가 분기되는, 본 발명의 일 실시예에 따른 도 1의 마이크로프로세서(100) 내의 스케줄러(108)를 예시하는 블록도가 도시된다. 분기형 스케줄러(108)는 디스패치 스케줄러(DS; 602) 부분 및 정책 관리자(PM; 604) 부분을 포함한다. 디스패치 스케줄러(602) 부분은 마이크로프로세서(100)의 프로세서 코어(606) 내에 포함되는 반면, 정책 관리자(604) 부분은 프로세서 코어(606) 외부에 포함된다. 프로세서 코어(606)는, 고객에 의해 개별화되지 않는 마이크로프로세서(100) 부분인 반면, 정책 관리자(604)는 고객에 의해 개별화 가능하다. 일 실시예에서, 프로세서 코어(606)는, 소프트 코어(soft core)라고도 부르는, 합성가능 코어(synthesizable core)이다. 합성가능 코어의 설계는, 흔히 합성 도구라고 부르는, 자동화된 도구를 사용해 제조가능한 표현(manufacturable representation)으로 빠르고 쉽게 감소될 수 있다.

프로세서 코어(606)는 정책 관리자(604)에게 복수의 신호를 포함하는 인터페이스(628)를 제공한다. 일 실시예에서, 디스패치 스케줄러(602)로의 입력 및 디스패치 스케줄러(602)로부터의 출력은, 바람직하게 비-코어(non-core) 정책 관리자(604) 로직이, 그렇지 않다면, 분기형 스케줄러에 의해 도입될 수도 있는 소정 타이밍 문제를 경감하는 방식으로, 프로세서 코어(606)와 인터페이싱하는 것을 가능하게 하기 위해, 등록된다. 더 나아가, 인터페이스(628)는 고객의 이해를 쉽게 하는데, 이는, 정책 관리자(604) 스케줄링 정책의 설계를 용이하게 한다.

이하의 표 1에서는, 일 실시예에 따른 정책 관리자 인터페이스(628)를 포함하는 다양한 신호가 도시된다. 표 1은 신호 이름, 정책 관리자(604)에 관련한 신호 방향, 및 각 신호의 간단한 설명을 특정한다. 표 1은, 마이크로프로세서(100)가 최대 9개 실행 쓰레드와 연관된 상태를 저장하기 위해 9개 쓰레드 컨텍스트를 포함하는 실시예를 설명한다. 더 나아가, 실시예는, 마이크로프로세서(100)가 2개에 달하는 VPE(virtual processing elements)로서 구성될 수 있게 한다. 일 실시예에서, 마이크로프로세서(100)는 사실상 MIPS32 또는 MIPS64 ISA(Instruction Set Architecture)를 준수하고, 사실상 MIPS PRA(Privileged Resource Architecture) 및 MIPS MT ASE(Multithreading Application Specific Extension)에서 특정된 코프로세서 0에 부응하는 쓰레드 제어 레지스터를 포함하는, 표 1에서 CP0라고 하는, 제어 코프로세서 0를 포함한다. 표 1에서 설명된 신호 중 수개는 CP0 레지스터에 액세스하는데 사용된다.

Figure 112007081402073-pct00001

Figure 112007081402073-pct00002

Figure 112007081402073-pct00003

이하에서는, 표 1에서 특정된 정책 관리자 인터페이스(628)의 특정 신호 중 일부가 부연될 것이다. 정책 관리자(604)는 PM_TC_priority(652) 출력을 통해 디스패치 스케줄러(602)에 대한 개개 쓰레드 컨텍스트의 우선 순위를 특정한다. 일 실시예에서, PM_TC_priority(652)는 2개 비트를 포함하고, 디스패치 스케줄러(602)는, 정책 관리자(604)가 쓰레드 컨텍스트에 대해 4개의 상이한 우선 순위를 특정할 수 있게 한다. 정책 관리자(604)는, 각각의 PM_TC_block(654) 출력에 대해 참값을 발생시키는 것에 의해, 쓰레드 컨텍스트에 대해 명령어를 발행하는 것을 중단할 것을 디스패치 스케줄러(602)에 지시한다. 이와 같이, 정책 관리자(604)는, PM_TC_priority(652) 및 PM_TC_block(654) 출력을 통해, 디스패치 스케줄러(602)가 다양한 쓰레드 컨텍스트에 대해 명령어를 발행하는 방법에 영향을 미칠 수 있다.

프로세서 코어(606)는 PM_gclk(658)를 정책 관리자(604)에게 제공하고, 이로 인해, 정책 관리자(604)는 PM_gclk(658)에 기초해 PM_TC_priority(652)를 주기적으로 조정할 수 있다. 디스패치 스케줄러(602)는 개개 PM_TC_state(642) 입력을 통해 각각의 쓰레드 컨텍스트에 대한 상태를 전달한다. 표 1에 도시된 바와 같이, 쓰레드 컨텍스트는 다음과 같은 8개 상태 중 하나일 수 있다. InActive: 쓰레드 컨텍스트가 실행 쓰레드와 현재 연관되어 있지 않기 때문에, 디스패치 스케줄러(602)가 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. Active: 쓰레드 컨텍스트가 실행 쓰레드와 현재 연관되어 있으므로, 다른 차단 조건이 존재하지 않는다면, 디스패치 스케줄러(602)가 쓰레드 컨텍스트의 명령어를 발행할 수도 있다. Yielded: 쓰레드가, 쓰레드 컨텍스트가 특정 이벤트에 대해 차단되게 하는 yield 명령어를 실행하였으므로, 디스패치 스케줄러(602)가 실행을 위해 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. Halted: 쓰레드 컨텍스트가 쓰레드 컨텍스트 자체에 의해 또는 다른 쓰레드에 의해 중단되었으므로, 디스패치 스케줄러가 실행을 위해 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. Suspended: 쓰레드가 DMT 또는 DVPE 명령어를 실행하였거나 마이크로프로세서(100) 또는 VPE가 현재 예외를 서비스중이므로, 디스패치 스케줄러(602)가 실행을 위해 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. DMT 명령어는 VPE에 대한 멀티쓰레딩 동작을 보류한다. DVPE 명령어는 전체 마이크로프로세서(100)에 대한 멀티쓰레딩 동작을 보류한다. Waiting on ITC: 쓰레드에 의해 실행된 로드/저장 명령어에 의해 특정되는 쓰레드간 통신(ITC) 공간의 위치로부터/위치에 데이터를 로드/저장하기 위해 대기하면서 쓰레드 컨텍스트가 차단되므로, 디스패치 스케줄러(602)가 실행을 위해 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. Waiting due to WAIT: 쓰레드가, 인터럽트가 발생될 때까지 쓰레드 컨텍스트가 차단되게 하는 WAIT 명령어를 실행하였으므로, 디스패치 스케줄러(602)가 실행을 위해 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다. Used as SRS: 쓰레드 컨텍스트 레지스터 세트가 쉐도우 레지스터 세트 동작을 위해 사용되므로 쓰레드 컨텍스트가 실행 쓰레드와 연관되어 있지 않으며 연관될 수 없기 때문에, 디스패치 스케줄러(602)가 쓰레드 컨텍스트의 명령어를 발행하지 않을 수도 있다.

디스패치 스케줄러(602)는, 개개 PM_TC_inst_issued(646) 입력을 통해, 그것이 쓰레드 컨텍스트에 대한 명령어를 발행하였음을 정책 관리자(604)에게 전달한다. 실행 유닛(114)은, 개개 PM_TC_instr_committed(644) 입력을 통해, 그것이 쓰레드 컨텍스트의 명령어를 커밋하였음을 정책 관리자(604)에게 전달한다. 일 실시예에서, PM_TC_instr_committed(644) 신호는 명령어의 실행이 완료되었음을 지시한다. 다른 실시예에서, PM_TC_instr_committed(644) 신호는, 명령어가 플러시되지 않을 것이, 즉, 궁극적으로 실행을 완료할 것이 보장되지만, 아직까지는 완료되지 않았을 수도 있다는 것을 지시한다. 현저한 특징은(salient point)은, PM_TC_instr_committed(644) 입력이, 일부 명령어는 이론적으로 디스패치되고 결코 완료되지 않을 수도 있으므로, (PM_TC_inst_issued 입력(646)에 의해 전달되는) 단지 디스패치된 명령어가 아닌, 실행된 명령어에 관한 정보를 정책 관리자(604)에게 제공한다는 것이다. 애플리케이션의 일부 쓰레드는 특정 QoS를 요구할 수도 있으므로, 이것은 정책 관리자(604)에게 중요한 차이점일 수 있다. 일 실시예에서, PM_TC_instr_committed 신호(644)는 TC_instr_committed 신호(124)의 등록 버전(registered version)이다. 이와 같이, 프로세서 코어(606)는, PM_TC_inst_issued(646), PM_TC_instr_committed(644), 및 PM_TC_state(642) 입력을 통해, 다양한 쓰레드 컨텍스트에 대한 명령어의 발행 및 실행에 관한 피드백 및 쓰레드 컨텍스트의 상태를 제공한다.

일 실시예에서는, 디스패치 스케줄러(602)도 정책 관리자(604)에게 완화 기능(relax function)을 제공하는데, 완화 기능의 목적은, 애플리케이션 쓰레드 컨텍스트가 완전한 프로세서 대역폭을 요구하지 않을 때, 마이크로프로세서(100)가, 실제로 슬립(sleep)으로 진행하지 않으면서, 전력을 보존할 수 있게 하는 것이다. 완화 기능은, 마치 스케줄링된 추가 쓰레드 컨텍스트가 존재하는 것처럼 동작한다. 그러나, 완화 쓰레드 컨텍스트(relax thread context)가 발행을 위해 선택될 때, 디스패치 스케줄러(602)는 명령어를 발행하지 않는다. 정책 관리자(604)는, 증분을 위해 RELAX_RATE를 사용하고 완화된 명령어 슬롯이 완료할 때 감분된다는 것을 제외하면, 후술되는 TC_LEVEL(918) 카운터와 유사하게 동작하는 (매 VPE에 대하여) RELAX_LEVEL 카운터를 유지한다. 일 실시예에서, 마이크로프로세서(100)는, 소프트웨어가 RELAX_RATE를 특정할 수 있게 하는 TCSchedule 레지스터(902)와 유사한 VPESchedule 레지스터를 매 VPE마다 포함한다. 완화 기능은 표 1에서 특정된 PM_vpe_relax_enable 신호를 통해 인에이블 또는 디스에이블되고, 완화 쓰레드 컨텍스트 우선 순위는 PM_vpe_relax_priority 신호를 통해 특정된다.

일 실시예에서는, 디스패치 스케줄러(602)도 정책 관리자(604)에게 예외 기능을 제공하는데, 예외 기능의 목적은 예외 쓰레드 컨텍스트가 정규 쓰레드 컨텍스트(normal thread contexts)로부터 자신만의 독립적인 우선 순위를 가질 수 있게 하는 것이다. 정책 관리자는, 증분을 위해 EXC_RATE를 사용하고 예외 명령어 슬롯이 완료할 때 감분된다는 것을 제외하면, 후술되는 TC_LEVEL(918) 카운터와 유사하게 동작하는 EXC_LEVEL 카운터를 (매 VPE에 대하여) 유지한다. VPE에 대해 예외 모드가 인에이블되고 예외가 취해질 때, 그 다음으로, VPE의 쓰레드 컨텍스트는 모두 예외 우선 순위(exception priority)로 설정될 것이다. 일 실시예에서, 소프트웨어는 VPESchedule 레지스터를 통해 EXC_RATE를 특정한다. 예외 기능은 표 1에서 특정된 PM_vpe_exc_enable 신호를 통해 인에이블 또는 디스에이블되고, 예외 쓰레드 컨텍스트 우선 순위는 PM_vpe_exc_priority 신호를 통해 특정된다.

이제 도 3을 참조하면, 도 2의 디스패치 스케줄러(602) 및 명령어/스키드 버퍼(106)와 연관된 명령어 선택 로직(202)을 좀더 상세하게 예시하는 블록도가 도시된다. 명령어 선택 로직(202)은 비교기(714)에 의해 제어되는 먹스(724;muxes)의 트리를 포함한다. 각각의 먹스(724)는 2개의 상이한 쓰레드 컨텍스트로부터 명령어(206)를 수신한다. 각각의 먹스(724)는 DS_TC_priority(208)와 연관된 명령어(206)도 수신한다. 각각의 먹스(724)와 연관된 비교기(714) 또한 2개의 쓰레드 컨텍스트에 대한 한 쌍의 DS_TC_priority 신호를 수신하고 그것의 연관된 먹스(724)를 제어하여 최고 DS_TC_priority(208)의 명령어(206) 및 DS_TC_priority(208)를 선택한다. 선택된 명령어(206) 및 DS_TC_priority(208)는, 최종적인 먹스(724)가 실행 파이프라인으로의 제공을 위해 최고 DS_TC_priority(208)의 selected instruction(204)을 선택할 때까지, 트리 아래쪽으로 전파한다.

도 3은 디스패치 스케줄러(602)의 로직, 즉, stalled 지시자(704), 발행가능한 명령어 로직(708), 및 라운드-로빈 로직(712;round-robin logic)을 나타낸다. 일 실시예에서, stalled 지시자(704) 및 발행가능한 명령어 로직(708)은 각각의 쓰레드 컨텍스트가 각각의 쓰레드 컨텍스트에 대한 DS_TC_priority(208)를 발생시키도록, 디스패치 스케줄러(602) 내에서 반복된다. 대조적으로, 라운드-로빈 로직(712)은 각각의 가능한 PM_TC_priority(652)에 대해 한번씩 인스턴스화되어 각각의 PM_TC_priority(652)에 대한 라운드-로빈 지시자를 발생시킨다. 예를 들어, 도 3은, 정책 관리자(604)가 4개의 가능한 PM_TC_priority(652) 중 하나를 특정할 수 있는 실시예를 예시하고, 따라서, 라운드-로빈 로직(712)은 디스패치 스케줄러(602)에서 4번 인스턴스화되어 4개의 개개 라운드-로빈 지시자를 발생시킨다.

일 실시예에서, 라운드-로빈 지시자는 마이크로프로세서(100)의 매 쓰레드 컨텍스트에 대하여 1개 비트를 포함한다. 그것의 개개 쓰레드 컨텍스트와 연관된 라운드-로빈 지시자의 비트는 라운드-로빈 비트(748)로서 제공된다. 라운드-로빈 비트(748)가 참이면, 현재 동일한 PM_TC_priority(652)의 나머지 쓰레드 컨텍스트 중에서, 그것이 라운드-로빈 방식으로 발행될 차례의 쓰레드 컨텍스트이다.

발행가능한 명령어 로직(708)은 도 1의 실행 유닛(114)으로부터 비지연 이벤트 신호(128) 및 지연 이벤트 신호(126)를, 도 2의 정책 관리자(604)로부터 PM_TC_block(654) 신호를, 명령어/스키드 버퍼(106)로부터 empty 신호(318)를, 그리고 TC 상태(742) 신호를 수신한다. 일 실시예에서, TC 상태(742) 신호는 도 2의 PM_TC_state(642) 신호와 유사한 정보를 전달한다. 발행가능한 명령어 로직(708)은, 쓰레드 컨텍스트를 식별하는 지연 이벤트 신호(126)에 응답하여, stalled 지시자(704)를 지연된 쓰레드 컨텍스트를 마킹하도록 설정한다. 발행가능한 명령어 로직(708)은, 지연 이벤트(126)에 응답하여, 상태 또한 저장하여 지연의 이유를 기억한다. 반대로, 발행가능한 명령어 로직(708)은, 비지연 이벤트(128)가 지연의 이유과 관련되어 있으면, stalled 지시자(704)를 비지연 이벤트 신호(128)에 응답하여 소거한다. 발행가능한 명령어 로직(708)은 그것의 입력에 응답하여 발행가능한(746) 신호를 발생시킨다. 쓰레드 컨텍스트에 대한 명령어/스키드 버퍼(106)의 판독 포인터에 의해 포인팅되는 명령어(206)가 발행가능하면, 발행가능한(746) 신호는 참이다. 일 실시예에서는, TC 상태 신호(742)가, 쓰레드 컨텍스트가 Active 상태이며 (Halted, Waiting, Suspended, 또는 Yielded인 것과 같은) 다른 조건에 의해 차단되지 않으면, 명령어는 발행가능하고, stalled 지시자(704)는 거짓이며, PM_TC_block(654) 및 empty(318) 신호는 거짓이다.

발행가능한(746) 비트, PM_TC_priority(652) 비트, 및 라운드-로빈 비트(748)는 조합되어 DS_TC_priority(208)를 생성한다. 도 3의 실시예에서, 발행가능한 비트(746)는 MSB(most significant bit)이고, 라운드-로빈 비트(748)는 LSB(least significant bit)이며, PM_TC_priority(652)는 2개의 MSB(middle significant bits)이다. 관찰될 수 있는 바와 같이, 발행가능한 비트(746)가 DS_TC_priority(652)의 MSB이기 때문에, 발행 불가능 명령어(non-issuable instruction)는 모든 발행가능한 명령어보다 낮은 우선 순위일 것이다. 반대로, 하나 이상의 쓰레드 컨텍스트가 발행가능한 명령어를 가지며 동일한 최고 PM_TC_priority(652)를 가지면, 라운드-로빈 비트(748)는 쓰레드를 선택하는데만 사용된다.

이제 도 4를 참조하면, 본 발명에 따른 도 3의 디스패치 스케줄러(602)의 동작을 예시하는 흐름도가 도시된다. 흐름은 블록 802에서 시작된다.

블록 802에서, 디스패치 스케줄러(602)는 각각의 PM_TC_priority(652)에 대해 각각의 라운드-로빈 지시자를 초기화한다. 흐름은 블록 804로 진행한다.

블록 804에서, 디스패치 스케줄러(602)는, 각각의 쓰레드 컨텍스트에 대해, 쓰레드 컨텍스트가 발행가능한 명령어(206)를 갖는지의 여부를 판정한다. 다시 말해, 각각의 쓰레드 컨텍스트에 대한 발행가능한 명령어 로직(708)은 발행가능한(746) 신호에 대한 값을 발생시킨다. 일 실시예에서, 발행가능한 명령어 로직(708)은, TC 상태 신호(742)가, 쓰레드 컨텍스트가 Active 상태에 있으며 (Halted, Waiting, Suspended, 또는 Yielded인 것과 같은) 다른 조건에 의해 차단되지 않는다고 지시하는 경우에만, 발행가능한(746) 신호에 대해 참 신호를 발생시키고, stalled 지시자(704)는 거짓이며, PM_TC_block(654) 및 empty(318) 신호는 거짓이다. 흐름은 판정 블록(806)으로 진행한다.

판정 블록 806에서, 디스패치 스케줄러(602)는, 쓰레드 컨텍스트 각각을 위한 발행가능한(746) 신호를 검사하는 것에 의해, 발행가능한 명령어(126)를 가진 임의의 쓰레드 컨텍스트의 존재 여부를 판정한다. 존재하지 않으면, 디폴트 저전력 슬립 모드(807)로 진입된다. 일부 실시예에서는, 저전력 슬립 모드로 진입하기 전에, 소정의 하우스키핑 태스크가 수행된다. 예를 들어, 하우스키핑 태스크는 보류중인 트랜잭션을 버퍼로부터 플러시하는 단계 또는 장기 실행 동작(예를 들어, divides)을 완료하는 단계를 포함할 수도 있다. 저전력 슬립 모드는 감소된 임의의 전력 상태로서 구현될 수도 있다. 일 실시예에서, 저전력 슬립 모드는, 어떤 파이프라인 동작도 수행하지 않는 것에 의해 감소된 전력을 실현한다.

그 다음, 흐름은, 하나 이상의 쓰레드 컨텍스트가 발행가능한 명령어를 가질 때까지, 블록 804로 복귀한다. 발행가능한 명령어의 존재시에, 필요하다면, 디폴트 저전력 슬립 모드는 탈출된다(808).

블록 810에서, 디스패치 스케줄러(602)는, 쓰레드 컨텍스트의 발행가능한(746) 비트, 쓰레드 컨텍스트의 PM_TC_priority(652), 및 쓰레드 컨텍스트의 PM_TC_priority(652)의 라운드-로빈 비트(748)에 기초해, 쓰레드 컨텍스트 각각의 명령어(206)에 대한 DS_TC_priority(208)를 발생시킨다. 흐름은 블록 812로 진행한다.

블록 812에서, 디스패치 스케줄러(602)는 최고 DS_TC_priority(208)의 명령어(206)를 발행한다. 다시 말해, 디스패치 스케줄러(602)는 발행가능한 명령어를 가진 그리고 최고 PM_TC_priority(652)를 가진 쓰레드 컨텍스트로부터 명령어를 발행한다. 다수 쓰레드 컨텍스트가 그 기준을 충족시키면, 디스패치 스케줄러(602)는, 쓰레드 컨텍스트의 PM_TC_priority(652)에 대한 라운드-로빈 비트(748)에 의해 지시되는 바와 같이, 발행할 차례인 쓰레드 컨텍스트로부터 명령어를 발행한다. 흐름은 블록 814로 진행한다.

블록 814에서, 라운드-로빈 로직(712)은, 명령어가 발행되도록 선택된 쓰레드 컨텍스트의 그것에 기초해, PM_TC_priority(652)에 대한 라운드-로빈 지시자를 업데이트한다. 흐름은 블록 804로 복귀한다.

이와 같이, 도 4는, 본 발명이 자동으로 디폴트 저전력 슬립 모드로 진입하기 위한 기술을 포함한다는 것을 예시한다. 간단한 기준(즉, 쓰레드의 차단 상태)에 기초해 이 모드로 진입된다는 것에 주목한다. 따라서, 복잡한 제어 기술은 불필요하다. 더 나아가, 디폴트 저전력 슬립 모드는 전력 보존을 초래하지만, 모든 쓰레드가 이미 차단된 상태에 있으므로, 프로세서 성능을 열화시키지 않는다는 것에도 주목한다.

본 발명의 다양한 구현이 가능하다. 예를 들어, 일 구현에서는, 모든 유닛이 휴지 상태이고 실행가능한 쓰레드 컨텍스트가 존재하지 않을 때, 최상위 클록 게터(top level clock gater)만이 클록을 셧다운(shut down)한다. 일 실시예에서는, MIPS32 34K Processor Core Family Instruction Set로부터의 명령어를 사용해, 다음의 조건 중: WAIT 명령어가 실행되고, yield 명령어가 실행되며, Halt 비트가 설정되고, free 비트는 설정되지 않으며, 쓰레드 컨텍스트는 ITC 액세스를 대기중이라는 조건 중 어떤 것도 충족되지 않을 때, 쓰레드 컨텍스트는 실행가능한하다는 것이 개시된다. 이 실시예는, yield 및 ITC 인터페이스의 로직 중 적어도 일부가 자유-실행(free-running) 프로세서 클록(예를 들어, gfclk) 상태에 해당됨으로써, 그 블록에서의 외부 활동이 코어를 깨울 수 있을 것을 요구한다.

이제 도 5를 참조하면, 본 발명에 따른 도 2의 정책 관리자(604) 및 TCSchedule 레지스터(902)를 예시하는 블록도가 도시된다.

마이크로프로세서(100)는 각각의 쓰레드 컨텍스트에 대한 TCSchedule 레지스터(902)를 포함한다. TCSchedule 레지스터(902)는 소프트웨어 프로그램 가능하고, 소프트웨어가 정책 관리자(604)에게 쓰레드 스케줄링 힌트를 제공하기 위한 수단을 제공한다. 일 실시예에서, TCSchedule 레지스터(902)는 도 2 및 표 1과 관련하여 앞서 논의된 코프로세서 0 레지스터 내에, 특히, 정책 관리자(604) 내에 포함된다. TCSchedule 레지스터(902)는 6개 필드: TC_LEVEL_PARAM1(908), TC_LEVEL_PARAM2(906), TC_LEVEL_PARAM3(904), TC_RATE(912), OV(914), 및 PRIO(916)를 포함한다. 도 5의 실시예에서, TC_LEVEL_PARAM1(908), TC_LEVEL_PARAM2(906), TC_LEVEL_PARAM3(904), 및 TC_RATE(912) 필드는 4개 비트를 포함하고, PRIO(916) 필드는 2개 비트를 포함하며, OV(914) 필드는 단일 비트이다.

도 5에 도시된 정책 관리자(604) 로직은 제어 로직(924); 그것의 출력을 제어 로직(924)에 제공하도록 결합되는 비교기(922); 그것의 출력을 비교기(922)로의 입력으로서 제공하도록 결합되는 TC_LEVEL(918) 레지스터; 및 그것의 출력을 TC_LEVEL(918) 레지스터로의 입력으로서 제공하도록 결합되는 3개의 입력 먹스(926)를 포함한다. 먹스(926)는, 그것의 제1 입력에서, 정확한 값을 보존하기 위한 TC_LEVEL(918) 레지스터의 출력을 수신한다. 먹스(926)는 그것의 제2 입력에서, 그것의 입력이 TC_LEVEL(918) 레지스터의 출력인 감분기(932)의 출력을 수신한다. 먹스(926)는 그것의 제3 입력에서, 그것의 입력이, TC_LEVEL(918) 레지스터의 출력 및 TC_RATE(912)를 2만큼 곱셈한 곱셈기(938)의 출력을 덧셈하는 덧셈기(936)의 출력인 증분기(934)의 출력을 수신한다. TC_RATE(912)는 쓰레드 컨텍스트의 소정 실행 속도, 즉, 매 단위 시간당 완료될 명령어 수의 지시이다. 도 5의 실시예에서, TC_RATE(912)는, 매 16 클록 사이클마다 완료되어야 할, 쓰레드의 명령어 수를 지시한다. 방금 열거된 로직은 도 5에서 한번씩만 도시되지만, 이 로직은 각각의 쓰레드 컨텍스트에 대한 정책 관리자(604) 내에서 반복되어, 각각의 쓰레드 컨텍스트에 대해, PM_TC_block(654) 및 PM_TC_priority(652) 신호를 발생시키고, PM_TC_state(642), PM_TC_inst_committed(644), PM_TC_inst_issued(646), 및 PM_gclk(658) 신호를 수신한다.

정책 관리자(604)는 변경된 리키-버킷 알고리즘(leaky-bucket algorithm)을 이용해 스케줄러(108)의 고급 쓰레드 스케줄링 정책을 실현한다. TC_LEVEL(918) 레지스터는 버킷 내의 수위와 유사하다. TC_LEVEL(918)은 본질적으로, 쓰레드 컨텍스트에 의해 수행되어야 하는 작업량(amount of work)의 측정이다. 일 실시예에서, TC_LEVEL(918) 레지스터는 0으로 초기화된 12-비트 레지스터를 포함한다. 제어 로직(924)은 먹스(926)가 어떤 입력을 선택하는지를 제어하기 위한 제어 신호(928)을 발생시킨다. 매 32 클록 사이클마다, 먹스(926)는 TC_LEVEL(918) 레지스터에 저장하기 위한 증분기(936)의 출력을 선택하는데, 이는, TC_LEVEL(918)을 (TC_RATE * 2 + 1)의 양만큼 증가시킨다. 일 실시예에서는, TC_RATE(912)에 기초해, TC_LEVEL(918) 업데이트 사이의 클록 사이클 수도 프로그램 가능하다. 다른 클록 사이클에서, PM_TC_instr_committed 신호(644)가 쓰레드 컨텍스트에 대한 명령어가 실행을 위해 커밋되었음을 지시하면, 먹스(926)는 TC_LEVEL(918)을 감분하기 위한 감분기(932)의 출력을 선택한다. 이와 같이, 소프트웨어는, 쓰레드의 TCSchedule 레지스터(902)의 값을 조정하는 것에 의해, 쓰레드 컨텍스트의 버킷에서의 가상 수위에 영향을 미칠 수 있다. 도 5의 실시예에서, TC_RATE(912)의 값은, 마이크로프로세서(100)가 쓰레드 컨텍스트에 대해 실행하고자 하는, 매 16 클록 사이클마다의 명령어 수를 지시한다.

리키 버킷에서의 수위가 증가함에 따라, 물을 좀더 높은 속도에서 새게 하는 수압도 증가한다. 마찬가지로, TC_LEVEL_PARAM 필드(904/906/908)는 가상 수압 범위를 정의하는 단조 증가 값(monotonically increasing values)으로써 프로그램된다. 비교기(922)는 TC_LEVEL(918)을 TC_LEVEL_PARAM(904/906/908)과 비교하고 그것의 결과를 제어 로직(924)에 제공하는데, 제어 로직(924)은, TC_LEVEL(918)이 해당되는 가상 수압 범위에 기초해, PM_TC_priority(652)를 발생시킨다. 도 5의 리키-버킷에 의해 예시되는 바와 같이, TC_LEVEL(918)의 최대 유효 니블(most significant nibble)이 TC_LEVEL_PARAM3(904) 값을 초과하면, 제어 로직(924)은 3(최고 우선 순위)의 PM_TC_priority(652) 값을 발생시키고; TC_LEVEL(918)의 최대 유효 니블이 TC_LEVEL_PARAM3(904) 값과 TC_LEVEL_PARAM2(906) 값 사이이면, 제어 로직(924)은 2의 PM_TC_priority(652) 값을 발생시키며; TC_LEVEL(918)의 최대 유효 니블이 TC_LEVEL_PARAM2(906) 값과 TC_LEVEL_PARAM1(908) 값 사이이면, 제어 로직(924)은 1의 PM_TC_priority(652) 값을 발생시키고; TC_LEVEL(918)의 최대 유효 니블이 TC_LEVEL_PARAM1(908) 값 미만이면, 제어 로직(924)은 0(최저 우선 순위)의 PM_TC_priority(652) 값을 발생시킨다. 유사하게, PM_TC_priority(652) 레벨을 증가시키는 것은 쓰레드 컨텍스트에 대해 명령어를 발행하기 위한 디스패치 스케줄러(602)에 대한 압력을 증가시키는 한편, PM_TC_priority(652) 레벨을 감소시키는 것은 쓰레드 컨텍스트에 대해 명령어를 발행하기 위한 디스패치 스케줄러(602)에 대한 압력을 감소시킨다.

앞서 논의된 바와 같이, 마이크로프로세서(100)를 사용하는 일부 실시예들에서, 상이한 쓰레드는, TC_RATE(912) 필드를 사용해 프로그램 가능한 상이한 명령어 실행 속도를 요구할 수도 있다. 더 나아가, 상이한 쓰레드는 상이한 해상도(resolutions), 즉, 명령어 실행 속도가 측정되는 시간 간격을 요구할 수도 있다. 다시 말해, 일부 쓰레드는, 어쩌면 높은 실행 속도를 요구하지 않겠지만, 최소 시간 간격이 지나도록 명령어 실행을 원하지 않을 수도 있다. 다시 말해, 쓰레드는 특정 QoS를 요구한다. 도 5 및 그에 관한 설명으로부터 관찰될 수 있는 바와 같이, TC_LEVEL_PARAM(904/906/908)은 각각의 쓰레드에 대해 요구되는 해상도를 실현하는데 이용될 수도 있다. 비교적 서로 근접한 TC_LEVEL_PARAM(904/906/908)을 할당하는 것에 의해, 좀더 높은 해상도가 실현될 수 있는 반면, 비교적 멀리 떨어진 TC_LEVEL_PARAM(904/906/908)을 할당하는 것은 좀더 낮은 해상도를 생성한다. 이와 같이, 소프트웨어는, 각각의 쓰레드 컨텍스트가 명령어 실행 속도에 대해 필요한 해상도를 실현하도록 TC_LEVEL_PARAM(904/906/908)을 조정하는 것에 의해 정책 관리자(604)를 통해 소정 QoS를 실현할 수도 있다.

OV 비트(914)가 설정되면, 제어 로직(924)은 TC_LEVEL_PARAM(904/906/908), TC_RATE(912), 및 TC_LEVEL(918)의 값을 무시하는 대신, PRIO 필드(916)에서 특정된 값과 동일한 PM_TC_priority(652) 신호에 대한 값을 발생시킨다. 이로 인해, 소프트웨어는 리키-버킷 정책을 우회하여, 필요하다면, 쓰레드 컨텍스트 중 하나 이상의 우선 순위를 직접 제어할 수 있다.

일 실시예에서, TC_LEVEL(918)이 소정 클록 사이클 수 동안 그것의 최대값으로 포화하면, 마이크로프로세서(100)는, 특히, TCSchedule 레지스터(902) 중 하나 이상에서의 값을 변경하는 것에 의해, 소프트웨어가 좀더 높은 레벨에서 쓰레드 스케줄링을 조정하는 것을 가능하게 하기 위한 인터럽트를 시그널링한다. 일 실시예에서, 인터럽트는 소프트웨어에 의해 마스크될 수도 있다.

일 실시예에서, 마이크로프로세서(100) 명령어 세트는, 쓰레드 컨텍스트가, 특정 이벤트가 발생할 때까지 쓰레드 컨텍스트에 대해 명령어를 발행하는 것을 중단할 것을 스케줄러(108)에 지시하기 위해 실행할 수도 있는 yield 명령어를 포함한다. 일 실시예에서, 쓰레드가 YIELD될 때, 정책 관리자(604)는 쓰레드의 TC_LEVEL(918) 업데이트를 일시적으로 디스에이블함으로써, 쓰레드가 YIELD 해제(unYIELD)될 때까지, 쓰레드의 PM_TC_priority는 보존된다. 다른 실시예에서, 정책 관리자(604)는, 쓰레드의 PM_TC_priority가 증가하게 하는 것과 유사하게, 쓰레드의 TC_LEVEL(918)을 계속해서 업데이트하고, 그에 따라, 쓰레드가 YIELD 해제될 때, 쓰레드는 일시적으로 높은 우선 순위를 가져 반드시 쓰레드가 쓰레드의 펌프를 시동하는 것을 지원할 것이다. 일 실시예에서, YIELD된 쓰레드에 대한 정책 관리자(604)의 거동은 소프트웨어에 의해 프로그램 가능하다.

특정 수의 비트가 PM_TC_priority(652), TC_LEVEL_PARAM(904/906/908), TC_RATE(912), TC_LEVEL(918) 등을 특정하는데 사용되는 실시예가 설명되지만, 스케줄러(108)는 어떤 식으로든 실시예에서 사용되는 값으로 제한되지 않으며, 오히려, 스케줄러(108)는, 마이크로프로세서(100)가 사용될 특정 애플리케이션에 의해 요구되는 바에 따라, 상이한 여러 개의 비트, 우선 순위, 레벨, 속도 등을 사용하도록 구성될 수도 있다는 것을 이해할 수 있어야 한다. 더 나아가, 변경된 리키-버킷 쓰레드 스케줄링 정책을 이용하는 정책 관리자(604)가 설명되었지만, 정책 관리자(604)는, 여전히 분기형 스케줄러(108)의 이점을 향유하면서, 다양한 쓰레드 스케줄링 정책 중 어떤 것이든 이용하도록 구성될 수도 있다는 것을 이해할 수 있어야 한다. 예를 들어, 일 실시예에서, 정책 관리자(604)는, 모든 쓰레드 컨텍스트에 대한 PM_TC_priority(652) 출력이 동일한 값으로 고정되는 간단한 라운드-로빈 쓰레드 스케줄링 정책을 이용한다. 다른 실시예에서, 정책 관리자(604)는, 각각의 쓰레드 컨텍스트에 대해 시분할 방식으로, PM_TC_priority(652) 출력이 쓰레드 컨텍스트의 TCSchedule 레지스터(902)에서 특정된 다수의 연속적인 클록 사이클 동안 하나의 쓰레드 컨텍스트에 대한 최고 우선 순위로 상승된 다음, PM_TC_priority(652) 출력이 쓰레드 컨텍스트의 TCSchedule 레지스터(902)에서 특정된, 어쩌면 상이한, 다수의 연속적인 클록 사이클 동안 다른 쓰레드 컨텍스트에 대한 최고 우선 순위로 상승되는 식의 시분할 쓰레드 스케줄링 정책을 이용한다.

일 실시예에서, 마이크로프로세서(100) 명령어 세트는 이용가능한 쓰레드 컨텍스트를 할당하고 새롭게 할당된 쓰레드 컨텍스트 내에서 새로운 쓰레드의 실행을 스케줄링하기 위한 FORK 명령어를 포함한다. 일 실시예에서, 쓰레드 컨텍스트가 새로운 쓰레드 컨텍스트를 FORK할 때, 부모 쓰레드 컨텍스트(parent TC)에 대한 TC_RATE(912)는 부모 쓰레드 컨텍스트 자체와 자식 쓰레드 컨텍스트(child TC) 사이에서 균일하게 분할되는데, 다시 말해, 새로운 TC_RATE(912)는 2만큼 나누어진 예전의 TC_RATE(912)이다. 이것은, 쓰레드 컨텍스트가 원래 할당된 것보다 많은 프로세싱 대역폭을 요청하는 것을 방지하는 이점을 가진다.

상기한 바로부터 관찰될 수 있는 바와 같이, 스케줄러(108)를 분기하는 것은 프로세서 코어(606)에 포함되는 디스패치 스케줄러(602)가 비교적 간단해질 수 있게 하며, 이로 인해, 디스패치 스케줄러(602)는 면적 및 전력의 관점에서 비교적 작아질 수 있고 쓰레드 스케줄링 정책의 애플리케이션 특정 복잡도를 프로세서 코어(606) 외부의 정책 관리자(604)에게 맡긴다. 일부 애플리케이션은 복잡한 정책 관리자(604)를 요구하지 않을 수도 있으므로, 여기에서 설명된 바와 같이, 스케줄러(108)가 분기되지 않았다면, 모든 애플리케이션에 대해 부과되었을 추가 면적 및 전력 요구 사항의 부담을 지지 않을 수 있으므로, 이는 유용하다.

이제 도 6을 참조하면, 본 발명에 따른 도 5의 정책 관리자(604)의 동작을 예시하는 블록도가 도시된다. 동작이 도 6에서는 단일 쓰레드 컨텍스트에 대해서만 도시되지만, 도 6에서 특정된 동작은 각각의 쓰레드 컨텍스트에 대한 정책 관리자(604) 내에서 발생한다. 흐름은 블록 1002에서 시작한다.

블록 1002에서, 정책 관리자(604)는 TC_LEVEL(918)을 0으로 초기화한다. 흐름은 블록 1004로 진행한다.

블록 1004에서, 정책 관리자(604)는 PM_gclk(658)의 1개 사이클을 대기한다. 흐름은 판정 블록 1006으로 진행한다.

판정 블록 1006에서, 정책 관리자(604)는, 흐름이 판정 블록 1006에 도달한 마지막 시점 이후로 32개 PM_gclk(658)가 똑딱거리며 지나갔는지의 여부를 판정한다. 지나가지 않았다면, 흐름은 판정 블록 1012로 진행하고; 지나갔다면, 흐름은 블록 1008로 진행한다.

블록 1008에서, TC_LEVEL(918)은 TC_RATE(912) 값의 2배 + 1만큼 증가된다. 흐름은 판정 블록 1012로 진행한다.

판정 블록 1012에서, 정책 관리자(604)는, PM_TC_instr_committed(644)가 참인지의 여부를 판정한다. 참이 아니라면, 흐름은 판정 블록 1016으로 진행하고; 참이라면, 흐름은 블록 1014로 진행한다.

블록 1014에서, TC_LEVEL(918)은 감분된다. 흐름은 판정 블록 1016으로 진행한다.

판정 블록 1016에서, 정책 관리자(604)는, OV 비트(914)의 설정 여부를 판정한다. 설정되지 않았다면, 흐름은 판정 블록 1022로 진행하고; 설정되었다면, 흐름은 블록 1018로 진행한다.

블록 1018에서, 정책 관리자(604)는 PRIO(916) 필드의 값과 동일한 PM_TC_priority(652)에 대한 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.

판정 블록 1022에서, 정책 관리자(604)는, TC_LEVEL(918)이 TC_LEVEL_PARAM3(904) 값보다 큰지를 판정한다. 크지 않다면, 흐름은 판정 블록 1026으로 진행하고; 크다면, 흐름은 블록 1024로 진행한다.

블록 1024에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 3(최고 우선 순위)의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.

판정 블록 1026에서, 정책 관리자(604)는, TC_LEVEL(918)이 TC_LEVEL_PARAM2(906) 값보다 큰지를 판정한다. 크지 않다면, 흐름은 판정 블록 1032로 진행하고; 크다면, 흐름은 블록 1028로 진행한다.

블록 1028에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 2의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.

판정 블록 1032에서, 정책 관리자(604)는, TC_LEVEL(918)이 TC_LEVELJP ARAM1(908) 값보다 큰지를 판정한다. 크지 않다면, 흐름은 블록 1036으로 진행하고; 크다면, 흐름은 블록 1034로 진행한다.

블록 1034에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 1의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.

블록 1036에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 0(최저 우선 순위)의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.

본 발명의 다양한 실시예가 상술되었지만, 이것은, 제한이 아닌, 일례로써 제시되었다는 것을 이해할 수 있어야 한다. 관련된 컴퓨터 업계의 당업자라면, 본 발명의 사상 및 범주를 벗어나지 않으면서, 형태 및 세부 사항에서의 다양한 변경들이 이루어질 수 있다는 것을 알 수 있을 것이다.

예를 들어, (예를 들어, "CPU(Central Processing Unit)", 마이크로프로세서, 마이크로컨트롤러, DSP(digital signal processor), 프로세서 코어, "SOC( System on Chip)", 또는 임의의 다른 프로그램 가능 디바이스 내에 또는 거기에 결합된) 하드웨어로 구현된 저전력 가상 쓰레드 이외에, 구현은, 예를 들어, 소프트웨어를 저장하도록 구성된 컴퓨터 사용 가능(예를 들어, 판독가능한) 매체에 배치된 소프트웨어(예를 들어, 소스, 오브젝트, 또는 기계어와 같은, 임의 형태로 배치된 컴퓨터 판독가능한 코드, 프로그램 코드, 명령어 및/또는 데이터)로 구체화될 수도 있다. 그러한 소프트웨어는, 예를 들어, 여기에서 설명된 장치 및 방법의 기능, 가공, 모델링, 시뮬레이션, 설명 및/또는 테스팅을 가능하게 할 수 있다. 예를 들어, 이것은 범용 프로그래밍 언어(예를 들어, C, C++), GDSII 데이터베이스, Verilog HDL, VHDL 등을 포함하는 HDL(hardware description languages), 또는 다른 이용가능한 프로그램, 데이터베이스, 및/또는 회로(즉, 스케매틱(schematic)) 캡처 도구의 사용을 통해 실현될 수 있다. 그러한 소프트웨어는 반도체, 자기 디스크, 광학 디스크(예를 들어, CD-ROM, DVD-ROM 등)를 포함하는 임의의 공지 컴퓨터 사용 가능 매체에 그리고 컴퓨터 사용 가능(예를 들어, 판독가능한) 전송 매체(예를 들어, 반송파 또는 디지털, 광학, 또는 아날로그-기반 매체를 포함하는 임의의 다른 매체)에서의 구체화된 컴퓨터 데이터 신호로서 배치될 수 있다. 그에 따라, 소프트웨어는 인터넷 및 인트라넷을 포함하는 통신 네트워크를 통해 전송될 수 있다.

여기에서 설명된 장치 및 방법은, (예를 들어, HDL로 구체화된) 마이크로프로세서 코어와 같은, SIP(semiconductor intellectual property) 코어에 포함될 수 있고 집적 회로의 생산시에 하드웨어로 변환될 수도 있다는 것을 이해할 수 있어야 한다. 추가적으로, 여기에서 설명되는 장치 및 방법은 하드웨어와 소프트웨어의 조합으로서 구체화될 수도 있다. 따라서, 본 발명이 상술된 예시적 실시예 중 어떤 것으로 제한되어서는 안되며, 다음의 청구항 및 그것의 등가물에 따라서만 정의되어야 한다.

Claims (17)

  1. 삭제
  2. 삭제
  3. 삭제
  4. 삭제
  5. 삭제
  6. 삭제
  7. 삭제
  8. 다중 쓰레드들을 실행하는 프로세서 코어; 및
    상기 프로세서 코어 내의 스케줄러 컴포넌트 및 상기 프로세서 코어 외부의 정책 관리자 컴포넌트를 포함하는 분기형 쓰레드 스케줄러 - 상기 분기형 쓰레드 스케줄러는 상기 다중 쓰레드들 모두가 차단되고 그 후 디폴트 저전력 슬립 모드로 자동으로 진입하는 때를 결정하기 위해 두 개 이상의 기준에 대하여 상기 다중 쓰레드들의 실행 상태를 평가함 -
    를 포함하는 프로세서.
  9. 제8항에 있어서,
    상기 분기형 쓰레드 스케줄러는 차단된 쓰레드가 대기 명령어를 받는 때를 나타내는 기준을 평가하도록 구성되는 프로세서.
  10. 제8항에 있어서,
    상기 분기형 쓰레드 스케줄러는 차단된 쓰레드가 일드(yield) 명령어를 받는 때를 나타내는 기준을 평가하도록 구성되는 프로세서.
  11. 제8항에 있어서,
    상기 분기형 쓰레드 스케줄러는 차단된 쓰레드가 차단중인 쓰레드간 통신(ITC) 액세스를 받는 때를 나타내는 기준을 평가하도록 구성되는 프로세서.
  12. 제8항에 있어서,
    상기 분기형 쓰레드 스케줄러는 차단된 쓰레드가 외부 프로세서 코어 컴포넌트로부터의 중단된 우선 순위 요청을 받는 때를 나타내는 기준을 평가하도록 구성되는 프로세서.
  13. 제8항에 있어서,
    상기 분기형 쓰레드 스케줄러는, 대기 명령어를 발행하지 않으면서, 상기 디폴트 저전력 슬립 모드로 진입하도록 구성되는 프로세서.
  14. 제8항에 있어서,
    상기 프로세서는 상기 디폴트 저전력 슬립 모드로 진입하기 전에 하우스키핑 기능들을 수행하도록 구성되는 프로세서.
  15. 컴퓨터 판독가능한 저장 매체로서,
    다중 쓰레드들을 실행하기 위해 프로세서 코어를 정의하는 실행가능한 명령어; 및
    상기 프로세서 코어 내의 스케줄러 컴포넌트 및 상기 프로세서 코어 외부의 정책 관리자 컴포넌트를 포함하는 분기형 쓰레드 스케줄러를 특정하기 위한 실행가능한 명령어 - 상기 분기형 쓰레드 스케줄러는 상기 다중 쓰레드들 모두가 차단되고 그 후 디폴트 저전력 슬립 모드로 자동으로 진입하는 때를 결정하기 위해 두 개 이상의 기준에 대하여 상기 다중 쓰레드들의 실행 상태를 평가하며, 상기 프로세서 코어 및 상기 분기형 쓰레드 스케줄러는 프로세서 내에 있음 -
    를 포함하는 컴퓨터 판독가능한 저장 매체.
  16. 삭제
  17. 삭제
KR1020077026399A 2005-04-14 2006-03-28 멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법 KR101100470B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
US11/107,492 2005-04-14
US11/107,492 US7627770B2 (en) 2005-04-14 2005-04-14 Apparatus and method for automatic low power mode invocation in a multi-threaded processor
PCT/US2006/011327 WO2006113068A2 (en) 2005-04-14 2006-03-28 Apparatus and method for automatic low power mode invocation in a multi-threaded processor

Publications (2)

Publication Number Publication Date
KR20070121840A KR20070121840A (ko) 2007-12-27
KR101100470B1 true KR101100470B1 (ko) 2011-12-29

Family

ID=37109964

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077026399A KR101100470B1 (ko) 2005-04-14 2006-03-28 멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법

Country Status (6)

Country Link
US (1) US7627770B2 (ko)
EP (1) EP1869536B1 (ko)
JP (1) JP5081143B2 (ko)
KR (1) KR101100470B1 (ko)
CN (1) CN101542412B (ko)
WO (1) WO2006113068A2 (ko)

Families Citing this family (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8190163B2 (en) 2002-08-08 2012-05-29 Qualcomm Incorporated Methods and apparatus of enhanced coding in multi-user communication systems
US8593932B2 (en) 2003-05-16 2013-11-26 Qualcomm Incorporated Efficient signal transmission methods and apparatus using a shared transmission resource
JP4694469B2 (ja) 2003-02-19 2011-06-08 クゥアルコム・インコーポレイテッドQualcomm Incorporated マルチユーザ通信システムにおける拡張された符号化の方法および装置
US6961595B2 (en) 2002-08-08 2005-11-01 Flarion Technologies, Inc. Methods and apparatus for operating mobile nodes in multiple states
US7363039B2 (en) 2002-08-08 2008-04-22 Qualcomm Incorporated Method of creating and utilizing diversity in multiple carrier communication system
US7925291B2 (en) 2003-08-13 2011-04-12 Qualcomm Incorporated User specific downlink power control channel Q-bit
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US7836450B2 (en) 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7321965B2 (en) * 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7490230B2 (en) 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US20070174411A1 (en) 2006-01-26 2007-07-26 Brokenshire Daniel A Apparatus and method for efficient communication of producer/consumer buffer status
US20070204268A1 (en) * 2006-02-27 2007-08-30 Red. Hat, Inc. Methods and systems for scheduling processes in a multi-core processor environment
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor
EP3410785A3 (en) 2007-01-11 2019-02-20 Qualcomm Incorporated Using dtx and drx in a wireless communication system
US8898438B2 (en) * 2007-03-14 2014-11-25 XMOS Ltd. Processor architecture for use in scheduling threads in response to communication activity
WO2008129786A1 (ja) * 2007-04-09 2008-10-30 Panasonic Corporation マルチプロセッサ制御装置、その制御方法および集積回路
JP2008276331A (ja) * 2007-04-25 2008-11-13 Toshiba Corp マルチプロセッサの制御装置及び方法
WO2008155806A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited バリア同期方法、装置、及びマルチコアプロセッサ
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
US8612977B2 (en) 2008-02-01 2013-12-17 International Business Machines Corporation Wake-and-go mechanism with software save of thread state
US8386822B2 (en) 2008-02-01 2013-02-26 International Business Machines Corporation Wake-and-go mechanism with data monitoring
US8312458B2 (en) 2008-02-01 2012-11-13 International Business Machines Corporation Central repository for wake-and-go mechanism
US8127080B2 (en) * 2008-02-01 2012-02-28 International Business Machines Corporation Wake-and-go mechanism with system address bus transaction master
US8145849B2 (en) 2008-02-01 2012-03-27 International Business Machines Corporation Wake-and-go mechanism with system bus response
US8725992B2 (en) 2008-02-01 2014-05-13 International Business Machines Corporation Programming language exposing idiom calls to a programming idiom accelerator
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
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
US8015379B2 (en) 2008-02-01 2011-09-06 International Business Machines Corporation Wake-and-go mechanism with exclusive system bus response
US8225120B2 (en) * 2008-02-01 2012-07-17 International Business Machines Corporation Wake-and-go mechanism with data exclusivity
US8732683B2 (en) 2008-02-01 2014-05-20 International Business Machines Corporation Compiler providing idiom to idiom accelerator
US8341635B2 (en) 2008-02-01 2012-12-25 International Business Machines Corporation Hardware wake-and-go mechanism with look-ahead polling
US8788795B2 (en) 2008-02-01 2014-07-22 International Business Machines Corporation Programming idiom accelerator to examine pre-fetched instruction streams for multiple processors
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
US8261276B2 (en) * 2008-03-31 2012-09-04 International Business Machines Corporation Power-efficient thread priority enablement
US8458722B2 (en) * 2008-06-09 2013-06-04 International Business Machines Corporation Thread selection according to predefined power characteristics during context switching on compute nodes
CN101656660A (zh) 2008-08-19 2010-02-24 华为技术有限公司 Pon中承载mpls报文的方法、装置、系统
US8156287B2 (en) * 2009-01-15 2012-04-10 International Business Machines Corporation Adaptive data prefetch
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
US8886919B2 (en) 2009-04-16 2014-11-11 International Business Machines Corporation Remote update programming idiom accelerator with allocated processor resources
US8082315B2 (en) 2009-04-16 2011-12-20 International Business Machines Corporation Programming idiom accelerator for remote update
US8656408B2 (en) 2010-09-30 2014-02-18 International Business Machines Corporations Scheduling threads in a processor based on instruction type power consumption
US8677361B2 (en) * 2010-09-30 2014-03-18 International Business Machines Corporation Scheduling threads based on an actual power consumption and a predicted new power consumption
US8490118B2 (en) 2010-12-02 2013-07-16 Microsoft Corporation Wait on address synchronization interface
CN102541511B (zh) * 2010-12-30 2015-07-08 世意法(北京)半导体研发有限责任公司 用于可乱序执行指令的处理器的流水线排空
WO2013016313A1 (en) 2011-07-25 2013-01-31 Servergy, Inc. Method and system for building a low power computer system
CN102955555A (zh) * 2011-08-19 2013-03-06 苏州简约纳电子有限公司 一种多线程处理方法和装置
CN102955716B (zh) * 2011-08-19 2016-05-18 苏州简约纳电子有限公司 一种多线程处理器和处理方法
KR101867960B1 (ko) * 2012-01-05 2018-06-18 삼성전자주식회사 매니 코어 시스템을 위한 운영체제 동적 재구성 장치 및 방법
US9317297B2 (en) * 2012-09-27 2016-04-19 Intel Corporation Replay execution of instructions in thread chunks in the chunk order recorded during previous execution
CN103336571B (zh) * 2013-06-13 2016-02-03 中国科学院计算技术研究所 一种降低多线程程序功耗的方法及系统
CN105378650B (zh) 2013-07-09 2019-02-19 恩智浦美国有限公司 用于控制处理模块的操作模式的方法和装置
US10043230B2 (en) * 2013-09-20 2018-08-07 Nvidia Corporation Approach to reducing voltage noise in a stalled data pipeline
US9965320B2 (en) 2013-12-27 2018-05-08 Intel Corporation Processor with transactional capability and logging circuitry to report transactional operations
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
US9396089B2 (en) 2014-05-30 2016-07-19 Apple Inc. Activity tracing diagnostic systems and methods
US9348645B2 (en) * 2014-05-30 2016-05-24 Apple Inc. Method and apparatus for inter process priority donation
KR20160012666A (ko) 2014-07-25 2016-02-03 삼성전자주식회사 전력 관리 시스템, 이를 포함하는 시스템 온 칩 및 모바일 기기
US9898409B2 (en) * 2014-10-09 2018-02-20 The Regents Of The University Of Michigan Issue control for multithreaded processing
US10379904B2 (en) 2016-08-31 2019-08-13 Intel Corporation Controlling a performance state of a processor using a combination of package and thread hint information
US20180285083A1 (en) * 2017-03-31 2018-10-04 Mcafee, Llc Asynchronous data objects for an event driven programming language

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020007387A1 (en) 2000-06-02 2002-01-17 Michael Ginsberg Dynamically variable idle time thread scheduling
US20040216106A1 (en) 2003-04-25 2004-10-28 Kalla Ronald Nick Apparatus and method for adjusting instruction thread priority in a multi-thread processor

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6343363B1 (en) 1994-09-22 2002-01-29 National Semiconductor Corporation Method of invoking a low power mode in a computer system using a halt instruction
US5805923A (en) 1995-05-26 1998-09-08 Sony Corporation Configurable power management system having a clock stabilization filter that can be enabled or bypassed depending upon whether a crystal or can oscillator is used
US5983356A (en) 1996-06-18 1999-11-09 National Semiconductor Corporation Power conservation method and apparatus activated by detecting shadowed interrupt signals indicative of system inactivity and excluding prefetched signals
US6662234B2 (en) 1998-03-26 2003-12-09 National Semiconductor Corporation Transmitting data from a host computer in a reduced power state by an isolation block that disconnects the media access control layer from the physical layer
US6308279B1 (en) * 1998-05-22 2001-10-23 Intel Corporation Method and apparatus for power mode transition in a multi-thread processor
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
US6594755B1 (en) 2000-01-04 2003-07-15 National Semiconductor Corporation System and method for interleaved execution of multiple independent threads
US7043538B2 (en) 2000-07-06 2006-05-09 Nms Communication Corporation Thin instant messaging proxy interface with persistent sessions
KR100613201B1 (ko) * 2000-08-28 2006-08-18 마이크로코넥트 엘엘씨 씨피유 사용량 측정 방법
US6687838B2 (en) * 2000-12-07 2004-02-03 Intel Corporation Low-power processor hint, such as from a PAUSE instruction
US6986066B2 (en) * 2001-01-05 2006-01-10 International Business Machines Corporation Computer system having low energy consumption
GB2372847B (en) * 2001-02-19 2004-12-29 Imagination Tech Ltd Control of priority and instruction rates on a multithreaded processor
US7318164B2 (en) * 2001-12-13 2008-01-08 International Business Machines Corporation Conserving energy in a data processing system by selectively powering down processors
US6586911B1 (en) 2002-02-06 2003-07-01 National Semiconductor Corporation Sleep mode power management
US6710578B1 (en) 2002-08-27 2004-03-23 Motorola, Inc. Power resource management in a portable communication device
US7024568B2 (en) 2002-09-06 2006-04-04 National Semiconductor Corporation Method and system for providing self-calibration for adaptively adjusting a power supply voltage in a digital processing system
US7194385B2 (en) 2002-11-12 2007-03-20 Arm Limited Performance level setting of a data processing system
US7131015B2 (en) 2002-11-12 2006-10-31 Arm Limited Performance level selection in a data processing system using a plurality of performance request calculating algorithms
WO2004049152A1 (en) * 2002-11-26 2004-06-10 Mplicity Ltd. A processor capable of multi-threaded execution of a plurality of instruction-sets
WO2004063915A2 (en) 2003-01-13 2004-07-29 Arm Limited Data processing performance control
US7152170B2 (en) * 2003-02-20 2006-12-19 Samsung Electronics Co., Ltd. Simultaneous multi-threading processor circuits and computer program products configured to operate at different performance levels based on a number of operating threads and methods of operating
US7788669B2 (en) * 2003-05-02 2010-08-31 Microsoft Corporation System for isolating first computing environment from second execution environment while sharing resources by copying data from first portion to second portion of memory
US7448037B2 (en) * 2004-01-13 2008-11-04 International Business Machines Corporation Method and data processing system having dynamic profile-directed feedback at runtime
US7330988B2 (en) * 2004-06-30 2008-02-12 Sun Microsystems, Inc. Method and apparatus for power throttling in a multi-thread processor
US20060168254A1 (en) * 2004-11-01 2006-07-27 Norton Scott J Automatic policy selection
US7526661B2 (en) * 2004-12-02 2009-04-28 Intel Corporation Performance state-based thread management
US8756605B2 (en) * 2004-12-17 2014-06-17 Oracle America, Inc. Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US7657883B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7664936B2 (en) 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7613904B2 (en) 2005-02-04 2009-11-03 Mips Technologies, Inc. Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US7631130B2 (en) 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7490230B2 (en) 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7506140B2 (en) 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7752627B2 (en) 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7434072B2 (en) * 2005-04-25 2008-10-07 Arm Limited Integrated circuit power management control

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020007387A1 (en) 2000-06-02 2002-01-17 Michael Ginsberg Dynamically variable idle time thread scheduling
US20040216106A1 (en) 2003-04-25 2004-10-28 Kalla Ronald Nick Apparatus and method for adjusting instruction thread priority in a multi-thread processor

Also Published As

Publication number Publication date
JP2008538436A (ja) 2008-10-23
WO2006113068A2 (en) 2006-10-26
CN101542412B (zh) 2016-01-20
EP1869536B1 (en) 2012-03-21
CN101542412A (zh) 2009-09-23
JP5081143B2 (ja) 2012-11-21
US20060236136A1 (en) 2006-10-19
US7627770B2 (en) 2009-12-01
EP1869536A2 (en) 2007-12-26
EP1869536A4 (en) 2010-03-03
KR20070121840A (ko) 2007-12-27
WO2006113068A3 (en) 2009-04-09

Similar Documents

Publication Publication Date Title
US8533716B2 (en) Resource management in a multicore architecture
US8887174B2 (en) Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
CN1112636C (zh) 在多线程处理器中选择线程切换事件的方法和装置
JP4610593B2 (ja) デュアルスレッドプロセッサ
JP4818919B2 (ja) プロセッサ内での実行の計算スレッドを一時停止して割り当て解除するための統合されたメカニズム
CN1117319C (zh) 在多线程处理器中改变线程优先级的方法和装置
US7490228B2 (en) Processor with register dirty bit tracking for efficient context switch
Michaud et al. Data-flow prescheduling for large instruction windows in out-of-order processors
CN1127017C (zh) 线程切换控制方法及用于该方法的线程状态寄存器
EP1570352B1 (en) Method and apparatus for switching between processes
JP4693326B2 (ja) 組込み型プロセッサにおいてゼロタイムコンテクストスイッチを用いて命令レベルをマルチスレッド化するシステムおよび方法
US6076157A (en) Method and apparatus to force a thread switch in a multithreaded processor
US6105051A (en) Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
EP1555610B1 (en) Out of order instruction dispatch in a multithreaded microprocessor
US7469407B2 (en) Method for resource balancing using dispatch flush in a simultaneous multithread processor
US8756605B2 (en) Method and apparatus for scheduling multiple threads for execution in a shared microprocessor pipeline
US20040216120A1 (en) Method and logical apparatus for rename register reallocation in a simultaneous multi-threaded (SMT) processor
JP5678135B2 (ja) オペレーティング・システム介入なしにos隔離シーケンサー上でスレッドをスケジューリングする機構
US20110055838A1 (en) Optimized thread scheduling via hardware performance monitoring
US7711935B2 (en) Universal branch identifier for invalidation of speculative instructions
US8584138B2 (en) Direct switching of software threads by selectively bypassing run queue based on selection criteria
JP5688462B2 (ja) 処理ノードの動的パフォーマンス制御
Kalla et al. IBM Power5 chip: A dual-core multithreaded processor
Gulati et al. Performance Study of a Multithreaded Superscalar Microprocessor.
US7418585B2 (en) Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20141209

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20151207

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 8