KR101273036B1 - 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러 - Google Patents

멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러 Download PDF

Info

Publication number
KR101273036B1
KR101273036B1 KR1020077018690A KR20077018690A KR101273036B1 KR 101273036 B1 KR101273036 B1 KR 101273036B1 KR 1020077018690 A KR1020077018690 A KR 1020077018690A KR 20077018690 A KR20077018690 A KR 20077018690A KR 101273036 B1 KR101273036 B1 KR 101273036B1
Authority
KR
South Korea
Prior art keywords
threads
instruction
logic
scheduler
instructions
Prior art date
Application number
KR1020077018690A
Other languages
English (en)
Other versions
KR20070100797A (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 KR20070100797A publication Critical patent/KR20070100797A/ko
Application granted granted Critical
Publication of KR101273036B1 publication Critical patent/KR101273036B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/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 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
    • 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

Abstract

멀티쓰레딩 프로세서에서 병행하여 실행중인 다수 쓰레드들의 명령어들을 디스패치하기 위한 분기 명령어 스케줄러가 제공된다. 스케줄러는 고객에 의해 개별화 불가능한 재사용 가능 코어내의 제1 부분, 개별화 가능한 코어 외부의 제2 부분, 및 제2 부분을 코어에 커플링하는 인터페이스를 포함한다. 제2 부분은, 고객의 특정 애플리케이션을 위해 개별화될 수도 있는 쓰레드 스케줄링 정책을 구현한다. 제1 부분은 스케줄링 정책-불가지론적(scheduling policy-agnostic)일 수도 있고, 제2 부분에 의해 전달된 스케줄링 정책에 기초해, 각각의 클록 사이클에서 쓰레드들의 명령어들을 실행 유닛들로 발행한다. 제2 부분은 우선 순위를 통해 쓰레드들 각각을 위한 스케줄링 정책을 전달한다. 코어가 실행을 위한 명령어를 커밋할 때, 코어는 커밋된 명령어가 어떤 쓰레드에 속하는지를 제2 부분에 전달하여, 제2 부분이 그것에 응답하여 우선 순위들을 업데이트하는 것을 가능하게 한다.
멀티쓰레딩 마이크로프로세서, 분기 쓰레드 스케줄러, 쓰레드 스케줄링 정책, 실행 유닛, 클록 사이클, 디스패치, 업데이트, 우선 순위, 커밋, 발행

Description

멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러 {BIFURCATED THREAD SCHEDULER IN A MULTITHREADING MICROPROCESSOR}
관련 출원(들)에 대한 상호 참조
이 출원은, 각각이 모든 목적들을 위해, 그 전체가 참고용으로 인용되어 있는 다음의 미국 정식특허출원들과 관련이 있으며, 다음의 미국 정식특허출원들과 동일자로 출원되었다:
일련 번호
(Docket No.)
출원일 명칭
________
(MIPS.0200-00-US)
LEAKY-BUCKET THREAD SCHEDULER IN A MULTITHREADING MICROPROCESSOR
________
(MIPS.0201-00-US)
MULTITHREADING MICROPROCESSOR WITH OPTIMIZED THREAD SCHEDULER FOR INCREASING PIPELINE UTILIZATION EFFICIENCY
________
(MIPS.0201-01-US)
MULTITHREADING MICROPROCESSOR INCLUDING THREAD SCHEDULER BASED ON INSTRUCTION STALL LIKELIHOOD PREDICTION
________
(MIPS.0202-00-US)
INSTRUCTION/SKID BUFFERS IN A MULTITHREADING MICROPROCESSOR
본 발명은 일반적으로, 멀티쓰레디드 프로세서들(multithreaded processors)에 관한 것으로서, 좀더 구체적으로는, 실행의 다수 쓰레드들 사이에서의 명령어 발행 스케줄링에 관한 것이다.
마이크로프로세서 설계자들은 많은 기술들을 이용해 마이크로프로세서 성능을 증가시킨다. 대개의 마이크로프로세서들은, 고정 주파수에서 실행중인 클록 신 호를 사용해 동작한다. 각각의 클록 사이클에서, 마이크로프로세서의 회로들은 그것들의 개개 기능들을 수행한다. Hermessy 및 Patterson(컴퓨터 아키텍처: A Quantitative Approach, 3rd Edition 참고)에 따르면, 마이크로프로세서의 성능에 대한 진정한 척도는 프로그램 또는 프로그램들의 집합을 실행하는데 요구되는 시간이다. 이러한 관점에서, 마이크로프로세서의 성능은 그것의 클록 주파수, 명령어를 실행하는데 요구되는 클록 사이클들의 평균 수(또는 다시 말해, 매 클록 사이클마다 실행되는 명령어들의 평균 수), 및 프로그램 또는 프로그램들의 집합에서 실행되는 명령어들 수의 함수이다. 반도체 과학자들 및 기술자들은 계속해서, 좀더 빠른 스위칭 시간들을 초래하면서, 트랜지스터 사이즈를 감소시키는 것에 의해 값싸게, 좀더 빠른 클록 주파수들에서 마이크로프로세서들이 실행되는 것을 가능하게 하고 있다. 실행되는 명령어들의 수는, 그것이 마이크로프로세서의 명령어 설정 아키텍처에 의해 영향을 받기도 하지만, 프로그램에 의해 수행되는 태스크에 의해 주로 정해진다. 큰 성능 증가들은 매 클록 사이클당 명령어들(instructions per clock cycle)을 향상시키는 아키텍처 및 조직 개념들, 특히, 병렬 처리(parallelism) 개념에 의해 실현되어 왔다.
마이크로프로세서들의, 매 클록 사이클당 명령어들 뿐만 아니라 클록 주파수를 향상시켜 온, 병렬 처리의 한 개념은, 마이크로프로세서의 파이프라인 스테이지들내에서 다수 명령어들의 실행을 중첩하는 파이프라이닝(pipelining)이다. 이상적인 상황에서는, 각각의 클록 사이클에서, 하나의 명령어가 파이프라인을 따라, 명령어들에 대해 상이한 함수(function)를 수행하는 새로운 스테이지로 이동한다. 그에 따라, 각각의 개개 명령어가 완결되는데는 다수 클록 사이클들이 필요하지만, 개개 명령어들의 다수 사이클들이 중첩하기 때문에, 명령어당 평균 클록들은 감소된다. 파이프라이닝의 성능 향상들은, 프로그램에서의 명령어들이 그것을 허용하는 정도까지, 즉, 명령어가 실행을 위해 그것의 선행자들에 의존하지 않으므로 그것의 선행자들과 병렬로 실행될 수 있는 정도까지 실현될 수도 있는데, 이를 대개는 명령어-레벨 병렬 처리라고 한다. 명령어-레벨 병렬 처리가 현대의 마이크로프로세서들에 의해 이용되는 다른 방법은, 매 클록 사이클마다의 실행을 위해 다수 명령어들을 발행하는 것이다. 이러한 마이크로프로세서들을 흔히 수퍼스칼라(superscalar) 마이크로프로세서들이라고 한다.
앞서 논의된 것은 개개 명령어-레벨에서의 병렬 처리에 관한 것이다. 그러나, 명령어-레벨 병렬 처리의 이용을 통해 실현될 수 있는 성능 향상은 제한적이다. 제한된 명령어-레벨 병렬 처리에 의해 부여되는 여러 가지 제약 사항들 및 다른 성능-제약 쟁점들이 최근에는, 흔히 쓰레드-레벨 병렬 처리라고 하는, 명령어들의 블록들, 시퀀스들, 또는 스트림들의 레벨에서 병렬 처리를 이용하는 것에 대한 관심을 새롭게 하여 왔다. 쓰레드는 단순히 프로그램 명령어들의 시퀀스 또는 스트림이다. 멀티쓰레디드 마이크로프로세서는, 인터리브형(interleaved), 차단형(blocked), 또는 동시적 멀티쓰레딩과 같은, 여러 가지 쓰레드들의 명령어들에 대한 인출 및 발행을 지시하는 소정 스케줄링 정책에 따라 다수 쓰레드들을 병행하여 실행한다. 멀티쓰레디드 마이크로프로세서는 통상적으로, 다수 쓰레드들이 마이크로프로세서의 기능 유닛들(예를 들어, 명령어 인출 및 디코딩 유닛들, 캐시들, 분기 예측 유닛들, 및 로드/저장, 정수, 부동 소수점, SIMD 등의 실행 유닛들)을 병행 방식으로 공유할 수 있게 한다. 그러나, 멀티쓰레디드 마이크로프로세서들은 명령어들을 인출하고 발행하기 위해 쓰레드들 사이에서 빠르게 스위칭할 수 있는 능력을 용이하게 하기 위해, 다수 프로그램 카운터들 및 범용 레지스터 세트들과 같은, 쓰레드 각각의 고유한 상태를 저장하기 위한 리소스들 또는 문맥들의 다수 세트들을 포함한다.
멀티쓰레딩 마이크로프로세서들에 의해 다루어지는 성능-제약 쟁점의 일례는, 반드시 수행되어야 하는 마이크로프로세서 외부 메모리로의 액세스들은 캐시 미스(cache miss)로 인해 통상적으로 비교적 긴 지연을 갖는다는 사실이다. 현대의 마이크로프로세서-기반 컴퓨터 시스템의 메모리 액세스 시간은, 캐시 히트 액세스 시간의 크기보다 1차수 내지 2차수 큰 것이 일반적이다. 캐시에서 미싱중인 데이터에 의존하는 명령어들은, 메모리로부터 그 데이터가 도착하기를 대기하면서 파이프라인에서 실속(stall)된다. 따라서, 단일-쓰레디드 마이크로프로세서의 파이프라인 스테이지들의 일부 또는 전부는, 많은 클록 사이클들 동안, 유용한 작업을 수행하지 않는 휴지 상태일 수도 있다. 멀티쓰레디드 마이크로프로세서들은, 페이지 오류시에 태스크 스위치를 수행하는 운영 체제와 어느 정도 유사하지만, 그것보다는 세분성의 좀더 미세한 레벨(finer level of granularity)에서, 메모리 인출 지연 동안 다른 쓰레드들로부터의 명령어들을 발행함으로써 파이프라인 스테이지들이 유용한 작업을 수행하면서 진행할 수 있게 하는 것에 의해 이 문제를 해결할 수도 있다. 마이크로프로세서들을 멀티쓰레딩하는 것에 의해 다루어지는 성능 제약 쟁점들의 다른 일례들은, 분기 예측 실패 및 부수적인 파이프라인 플러시(flush)로 인한, 또는 데이터 의존으로 인한, 또는 분할 명령어, 부동 소수점 명령어 등과 같은 긴 지연 명령어로 인한 파이프라인 실속들 및 파이프라인 실속들에 수반되는 휴지 사이클들이다. 이번에도, 다른 쓰레드들로부터의 명령어들을, 그렇지 않다면 휴지 상태일 파이프라인 스테이지들로 발행할 수 있는 멀티쓰레디드 마이크로프로세서의 능력이, 쓰레드들을 구비하는 프로그램 또는 프로그램들의 집합을 실행하는데 요구되는 시간을 상당히 감소시킬 수 있다.
상기 내용으로부터 관찰될 수 있는 바와 같이, 다수 쓰레드들을 병행하여 실행중인 프로세서는, 다수 쓰레드들을 구비하는 프로그램 또는 프로그램들의 집합을 실행하는데 요구되는 시간을 감소시킬 수 있다. 그러나, 단일-쓰레디드 프로세서에 비해 멀티쓰레딩 프로세서가 성능 증가를 실현할 수 있는 정도는 프로세서의 쓰레드 스케줄링 정책, 즉, 프로세서가, 실행을 위해, 여러 가지 쓰레드들의 명령어들을 발행하기 위해 여러 가지 쓰레드들을 스케줄링하는 방법에 크게 의존할 수도 있다. 더 나아가, 적합한 쓰레드 스케줄링 정책은, 프로세서가 사용되는 특정 애플리케이션에 크게 의존할 수도 있다. 예를 들어, 멀티쓰레딩 프로세서들은, 네트워크 스위치들 및 라우터들, RAID 제어기들, 프린터들, 스캐너들, 핸드-헬드 디바이스들, 디지털 카메라들, 자동차들, 셋톱 박스들, 어플라이언스들 등과 같은 실시간 매입형 시스템들; 과학 컴퓨팅; 트랜잭션 컴퓨팅; 서버 컴퓨팅; 및 범용 컴퓨팅을 포함하는 여러 가지 애플리케이션들에서 이용될 수도 있다. 이 애플리케이션들 각각은 멀티쓰레딩 프로세서의 성능을 최적화하기 위해 상이한 스케줄링 정책을 요 구할 수도 있다. 따라서, 여러 가지 애플리케이션들을 이용하는 고객들이 그들의 특정 요구 사항들을 충족시키기 위해 쓰레드 스케줄링 정책을 개별화할 수 있게 하는 것이 상당히 바람직스러울 수 있다. 여러 가지 고객 애플리케이션들의 필요를 충족시키도록 개별화 가능한(customizable) 마이크로프로세서 및/또는 시스템의 일부일 수도 있는 멀티쓰레딩 마이크로프로세서 코어를 설계하고자 할 경우에는, 개별화 가능한 쓰레드 스케줄러가 특히 바람직스러울 수 있다. 이것은 멀티쓰레딩 코어가 여러 가지 설계들을 위해 재사용될 수 있게 하는데, 각각의 애플리케이션을 위해 전체 프로세서를 재설계할 필요가 없으므로, 상당히 바람직스러울 수 있다.
그러나, 쓰레드 스케줄링 회로는 통상적으로 마이크로프로세서의 내부 파이프라인 동작에 밀접하게 관련되므로, 마이크로프로세서의 전체적인 쓰레드 스케줄링 회로를 개별화 가능하게 하는 것은 바람직스럽지 못한 역효과들을 가질 수도 있어 문제가 된다. 예를 들어, 고객이 파이프라인의 내부 작업들을 이해하기 어려울 수도 있고, 그에 따라, 고객이 스케줄러를 개별화하기는 어려울 수도 있다. 더 나아가, 내부 파이프라인의 타이밍 임계 신호 경로들(timing critical signal paths)은 고객에게 반드시 노출될 것인데, 고객의 맞춤형 로직이 지나치게 느리다면, 이는 마이크로프로세서의 전반적인 클록 속도보다 낮을 수도 있다. 마지막으로, 고객은, 마이크로프로세서 코어의 전반적인 동작 및 기능성에 심각한 영향을 미칠 수도 있으면서, 스케줄러에 버그들을 도입할 수도 있다. 따라서, 필요한 것은, 앞서 언급된 것들과 같은, 바람직스럽지 못한 부작용들 없이 그것의 쓰레드 스케줄링 정책이 개별화될 수 있게 하는 아키텍처를 이용하는 멀티쓰레딩 프로세서이다.
본 발명은 분기 스케줄러 아키텍처를 제공한다. 스케줄러의 제1 부분은 고객의 애플리케이션에 의해 필요한 쓰레드 스케줄링 정책을 강제하며 프로세서 코어 외부에 포함되고; 따라서, 프로세서 코어의 적당한 동작 및 재사용성을 위협하지 않으면서 고객에 의해 안전하게 변경될 수 있다. 스케줄러의 제2 부분은 비-코어 부분(non-core portion)에 의해 강제되는 쓰레드 스케줄링 정책에 기초해 명령어들의 사이클 단위(cycle-by-cycle) 디스패치를 수행하며 프로세서 코어에 포함되고; 따라서, 고객에 의해 변경될 수 없다. 제1 부분과 코어 사이의 인터페이스로 인해, 제1 부분은 쓰레드 각각을 위한 스케줄링 우선 순위를 제2 부분으로 전달할 수 있고, 코어는 명령어 실행 정보를 제1 부분으로 전달할 수 있으며, 그에 따라, 제1 부분은 우선 순위들을 업데이트하여 그것의 쓰레드 스케줄링 정책을 실현할 수 있다.
일 태양에서, 본 발명은 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서에서 명령어들을 디스패치하기 위한 분기 스케줄러(bifurcated scheduler)를 제공한다. 스케줄러는, 복수개 쓰레드들의 명령어들을 프로세서의 하나 이상의 실행 유닛으로 발행하는 제1 스케줄러 로직을 포함한다. 또한, 스케줄러는, 복수개 쓰레드들의 스케줄링 정책을 강제하는 제2 스케줄러 로직도 포함한다. 스케줄러는 제2 스케줄러 로직을 제1 스케줄러 로직 및 하나 이상의 실행 유닛에 커플링하는 인터페이스도 포함한다. 인터페이스는, 제1 스케줄러 로직이 제2 스케줄러 로직으로부터 복수개 쓰레드들 각각을 위한 우선 순위를 수신하기 위한 제1 신호들을 포함한다. 제1 스케줄러 로직은 우선 순위들에 기초해 하나 이상의 실행 유닛으로 명령어들을 발행한다. 또한, 인터페이스는, 제2 스케줄러 로직이 복수개 쓰레드들 각각을 위한 명령어 실행 정보를 수신하기 위한 제2 신호들도 포함한다. 제2 스케줄러 로직은 명령어 실행 정보에 기초해 우선 순위들을 업데이트한다.
다른 태양에서, 본 발명은 멀티쓰레딩 프로세서를 제공한다. 프로세서는, 그 프로세서에 의해 병행하여 실행되는 복수개 쓰레드들의 명령어 디스패치를 스케줄링하기 위한 정책을 강제하는 쓰레드 스케줄링 정책 로직을 포함한다. 또한, 프로세서는 쓰레드 스케줄링 정책 로직에 커플링된 프로세서 코어도 포함한다. 프로세서 코어는 명령어들을 실행하는 하나 이상의 실행 파이프라인을 포함한다. 또한, 프로세서 코어는 쓰레드 스케줄링 정책 로직으로부터 수신된 정책에 기초해 복수개 쓰레드들의 명령어들을 실행 파이프라인으로 디스패치하도록 커플링된 명령어 디스패처(instruction dispatcher)도 포함한다. 또한, 프로세서는 쓰레드 스케줄링 정책 로직과 프로세서 코어를 커플링하기 위한 인터페이스도 포함한다. 인터페이스는, 복수개 쓰레드들 각각이 정책을 강제하기 위한 디스패치 우선 순위를, 쓰레드 스케줄링 정책 로직이 명령어 디스패처로 전달하기 위한 우선 순위 지시자들을 포함한다. 또한, 인터페이스는, 하나 이상의 실행 파이프라인이 쓰레드를 위한 명령어를 실행하도록 커밋(commit)되었는지의 여부에 대한 지시를, 하나 이상의 실행 파이프라인이 복수개 쓰레드들 각각을 위해 쓰레드 스케줄링 정책 로직으로 전달하기 위한 실행 지시자들도 포함한다.
또 다른 태양에서, 본 발명은 복수개 쓰레드들을 병행하여 실행하는 멀티쓰레딩 프로세서의 쓰레드 스케줄링 정책을 강제하기 위한 쓰레드 스케줄링 정책 관리자를 제공한다. 정책 관리자는, 각각의 프로세서 클록 사이클에서, 명령어가 복수개 쓰레드들 각각을 위해 커밋되었는지의 여부에 대한 지시를 수신하기 위한 입력들을 포함한다. 또한, 정책 관리자는, 각각의 프로세서 클록 사이클에서, 복수개 쓰레드들 각각을 위한 명령어 디스패치 우선 순위를 전송하기 위한 출력들도 포함한다. 또한, 정책 관리자는, 입력들에 커플링된, 쓰레드 스케줄링 정책을 강제하기 위한 입력들에 기초해 출력들을 발생시키는 로직도 포함한다.
또 다른 태양에서, 본 발명은 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서 코어를 제공한다. 복수개 쓰레드들 각각은 명령어들의 스트림을 구비한다. 프로세서 코어는 프로세서 코어를 프로세서 코어 외부의 쓰레드 스케줄링 정책 로직에 커플링하기 위한 인터페이스를 포함한다. 인터페이스는, 쓰레드 스케줄링 정책 로직이 복수개 쓰레드들 각각의 우선 순위를 프로세서 코어로 전달하기 위한 제1 신호들을 포함한다. 또한, 인터페이스는, 쓰레드 스케줄링 정책 로직에 의해 우선 순위들을 업데이트하는데 사용하기 위해, 쓰레드 스케줄링 정책 로직이 복수개 쓰레드들 각각을 위해 쓰레드들의 명령어들의 실행에 관한 정보를 프로세서 코어로부터 수신하기 위한 제2 신호들도 포함한다. 또한, 프로세서 코어는 제1 신호들을 수신하고, 제1 신호들을 통해 수신된 우선 순위들에 기초해, 실행을 위한 발행을 위해 복수개 쓰레드들 중 하나 이상으로부터 하나 이상의 명령어를 선택하도록 커플링된 스케줄러도 포함한다.
또 다른 태양에서, 본 발명은 멀티쓰레딩 프로세서에서 병행하여 실행중인 복수개 쓰레드들을 스케줄링하기 위한 방법을 제공한다. 방법은, 쓰레드 스케줄링 정책 로직이, 제1 클록 사이클 동안, 복수개 쓰레드들 각각을 위한 쓰레드 스케줄링 우선 순위를 명령어 디스패치 로직으로 시그널링하는 단계를 포함한다. 또한, 방법은, 쓰레드 스케줄링 정책 로직이 명령어 디스패치 로직으로 우선 순위들을 시그널링하는 단계에 응답하여, 제2 클록 사이클 동안, 명령어 디스패치 로직이, 실행을 위해 하나 이상의 명령어를 복수개 쓰레드들로부터 디스패치하는 단계도 포함한다.
또 다른 태양에서, 본 발명은 컴퓨팅 디바이스와의 사용을 위한 컴퓨터 프로그램 제품을 제공한다. 컴퓨터 프로그램 제품은, 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서에서 명령어들을 디스패치하기 위한 분기 스케줄러를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있는 컴퓨터 사용 가능 매체를 포함한다. 컴퓨터 판독 가능 프로그램 코드는 복수개 쓰레드들의 명령어들을 프로세서의 하나 이상의 실행 유닛으로 발행하는 제1 스케줄러 로직을 제공하기 위한 제1 프로그램 코드를 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는 복수개 쓰레드들의 스케줄링 정책을 강제하는 제2 스케줄러 로직을 제공하기 위한 제2 프로그램 코드도 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는 제2 스케줄러 로직을 제1 스케줄러 로직 및 하나 이상의 실행 유닛에 커플링하는 인터페이스를 제공하기 위한 제3 프로그램 코드도 포함한다. 인터페이스는, 제1 스케줄러 로직이 제2 스케줄러 로직으로부터 복수개 쓰레드들 각각을 위한 우선 순위를 수신하기 위한 제1 신호들을 포함한다. 제1 스케줄러 로직은 우선 순위들에 기초해 명령어들을 하나 이상의 실행 유닛으로 발행한다. 또한, 인터페이스는, 제2 스케줄러 로직이 복수개 쓰레드들 각각을 위한 명령어 실행 정보를 수신하기 위한 제2 신호들도 포함한다. 제2 스케줄러 로직은 명령어 실행 정보에 기초해 우선 순위들을 업데이트한다.
또 다른 태양에서, 본 발명은 컴퓨팅 디바이스와의 사용을 위한 컴퓨터 프로그램 제품을 제공한다. 컴퓨터 프로그램 제품은 멀티쓰레딩 프로세서를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있는 컴퓨터 사용 가능 매체를 포함한다. 컴퓨터 판독 가능 프로그램 코드는, 프로세서에 의해 병행하여 실행되는 복수개 쓰레드들의 명령어 디스패치를 스케줄링하기 위한 정책을 강제하는 쓰레드 스케줄링 정책 로직을 제공하기 위한 제1 프로그램 코드를 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는 쓰레드 스케줄링 정책 로직에 커플링된 프로세서 코어를 제공하기 위한 제2 프로그램 코드도 포함한다. 프로세서 코어는 명령어들을 실행하는 하나 이상의 실행 파이프라인을 포함한다. 또한, 프로세서 코어는 쓰레드 스케줄링 정책 로직으로부터 수신된 정책에 기초해 복수개 쓰레드들의 명령어들을 실행 파이프라인으로 디스패치하도록 커플링된 명령어 디스패처도 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는, 쓰레드 스케줄링 정책 로직 및 프로세서 코어를 커플링하기 위한 인터페이스를 제공하기 위한 제3 프로그램 코드도 포함한다. 인터페이스는, 복수개 쓰레드들 각각이 정책을 강제하기 위한 디스패치 우선 순위를, 쓰레드 스케줄링 정책 로직이 명령어 디스패처로 전달하기 위한 우선 순위 지시자들을 포함한다. 또한, 인터페이스는, 하나 이상의 실행 파이프라인이 쓰레드를 위한 명령어를 실행하도록 커밋되었는지의 여부에 대한 지시를, 하나 이상의 실행 파이프라인이 복수개 쓰레드들 각각을 위해 쓰레드 스케줄링 정책 로직으로 전달하기 위한 실행 지시자들도 포함한다.
또 다른 태양에서, 본 발명은 컴퓨팅 디바이스와의 사용을 위한 컴퓨터 프로그램 제품을 제공한다. 컴퓨터 프로그램 제품은, 복수개 쓰레드들을 병행하여 실행하는 멀티쓰레딩 프로세서의 쓰레드 스케줄링 정책을 쓰레드 스케줄링 정책 관리자가 강제하게 하기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있는 컴퓨터 사용 가능 매체를 포함한다. 컴퓨터 판독 가능 프로그램 코드는, 각각의 프로세서 클록 사이클에서, 복수개 쓰레드들 각각을 위해 명령어가 실행되었는지의 여부에 대한 지시를 수신하기 위한 입력들을 제공하기 위한 제1 프로그램 코드를 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는, 각각의 프로세서 클록 사이클에서, 복수개 쓰레드들 각각을 위한 명령어 디스패치 우선 순위를 전송하기 위한 출력들을 제공하기 위한 제2 프로그램 코드도 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는, 입력들에 커플링된, 입력들에 기초해 쓰레드 스케줄링 정책을 강제하기 위한 출력들을 발생시키는 로직을 제공하기 위한 제3 프로그램 코드도 포함한다.
또 다른 태양에서, 본 발명은 컴퓨팅 디바이스와의 사용을 위한 컴퓨터 프로그램 제품을 제공한다. 컴퓨터 프로그램 제품은, 복수개 쓰레드들 각각이 명령어들의 스트림을 구비하는 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서 코어를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있는 컴퓨터 사용 가능 매체를 포함한다. 컴퓨터 판독 가능 프로그램 코드는 프로세서 코어를 프로세서 코어 외부의 쓰레드 스케줄링 정책 로직에 커플링하기 위한 인터페이스를 제공하기 위한 제1 프로그램 코드를 포함한다. 인터페이스는, 쓰레드 스케줄링 정책 로직이, 복수개 쓰레드들 각각의 우선 순위를 프로세서 코어로 전달하기 위한 제1 신호들을 포함한다. 또한, 인터페이스는, 쓰레드 스케줄링 정책 로직에 의해 우선 순위들을 업데이트하는데 사용하기 위해, 쓰레드 스케줄링 정책 로직이 프로세서 코어로부터 복수개 쓰레드들 각각을 위해 쓰레드들의 명령어들의 실행에 관한 정보를 수신하기 위한 제2 신호들도 포함한다. 또한, 컴퓨터 판독 가능 프로그램 코드는, 제1 신호들을 수신하고, 제1 신호들을 통해 수신된 우선 순위들에 기초해, 실행을 위한 발행을 위해 복수개 쓰레드들 중 하나 이상으로부터 하나 이상의 명령어를 선택하도록 커플링된 스케줄러를 제공하기 위한 제2 프로그램 코드도 포함한다.
또 다른 태양에서, 본 발명은 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서에서 명령어들을 디스패치하기 위한 분기 스케줄러를 제공하기 위한 컴퓨터-판독 가능 프로그램 코드를 포함하는 전송 매체에 구현된 컴퓨터 데이터 신호를 제공한다. 프로그램 코드는 복수개 쓰레드들의 명령어들을 프로세서의 하나 이상의 실행 유닛으로 발행하도록 구성된 제1 스케줄러 로직을 제공하기 위한 제1 프로그램 코드를 포함한다. 또한, 프로그램 코드는 복수개 쓰레드들의 스케줄링 정책을 강제하기 위한 제2 스케줄러 로직을 제공하기 위한 제2 프로그램 코드도 포함한다. 또한, 프로그램 코드는 제2 스케줄러 로직을 제1 스케줄러 로직 및 하나 이상의 실행 유닛에 커플링하는 인터페이스를 제공하기 위한 제3 프로그램 코드도 포함한다. 인터페이스는, 제1 스케줄러 로직이 제2 스케줄러 로직으로부터 복수개 쓰레드들 각각을 위한 우선 순위를 수신하기 위한 제1 신호들을 포함한다. 제1 스케줄러 로직은 우선 순위들에 기초해 명령어들을 하나 이상의 실행 유닛으로 발행한다. 또한, 인터페이스는, 제2 스케줄러 로직이 복수개 쓰레드들 각각을 위한 명령어 실행 정보를 수신하기 위한 제2 신호들도 포함한다. 제2 스케줄러 로직은 명령어 실행 정보에 기초해 우선 순위들을 업데이트한다.
여기에서 설명되는 분기 스케줄러의 이점은, 그것으로 인해, 다수 고객들에 의해 재사용 가능한 프로세서 코어가 설계될 수 있고, 고객들이 여전히 그들의 특정 애플리케이션에 의해 필요한 그들만의 쓰레드 스케줄링 정책을 강제할 수 있게 하면서, 프로세서 코어가, 정확하게 그리고 설계된 동작 클록 주파수들에서 동작할 수 있다는 것이다. 여기에서 설명되는 분기 스케줄러의 다른 이점은, 그것으로 인해, 고객들은 하드웨어 대 소프트웨어에 의해 수행되는 쓰레드 스케줄링 정책의 양을 판정할 수 있다. 다시 말해, 일부 고객들은 쓰레드 스케줄링 정책의 많은 부분 또는 거의 전부를 하드웨어로 구현하기를 원할 수도 있는 한편, 다른 고객들은 쓰레드 스케줄링 정책의 최소량을 하드웨어로 구현하고 쓰레드 스케줄링 정책의 대부분을 소프트웨어로 수행하기를 원할 수도 있다.
도 1은 본 발명에 따른 파이프라인형 멀티쓰레딩 마이크로프로세서를 예시하는 블록도이다.
도 2는, 본 발명의 일 실시예에 따른, 도 1의 마이크로프로세서의 부분들 및, 특히, 명령어/스키드 버퍼들을 예시하는 블록도이다.
도 3은, 본 발명에 따른, 도 2의 명령어/스키드 버퍼들 중 하나의 실례가 되는 명령어/스키드 버퍼 및 연관된 제어 로직을 예시하는 블록도이다.
도 4는, 본 발명에 따른, 도 3의 명령어/스키드 버퍼의 동작을 예시하는 4개의 흐름도들이다.
도 5는, 본 발명에 따른, 실속된 쓰레드 문맥(stalled thread context)을 플러시(flush)하여 실행 대역폭 이용을 향상시키기 위한 도 1의 마이크로프로세서의 동작을 예시하는 흐름도이다.
도 6은, 스케줄러가 분기되는 본 발명의 일 실시예에 따른, 도 1의 마이크로프로세서 내부의 스케줄러를 예시하는 블록도이다.
도 7은, 본 발명에 따른, 도 6의 디스패치 스케줄러 및 도 2의 명령어 선택 로직을 좀더 상세하게 예시하는 블록도이다.
도 8은, 본 발명에 따른, 도 7의 디스패치 스케줄러의 동작을 예시하는 흐름도이다.
도 9는, 본 발명에 따른, 도 6의 정책 관리자 및 TCSchedule 레지스터를 예시하는 블록도이다.
도 10은, 본 발명에 따른, 도 9의 정책 관리자의 동작을 예시하는 흐름도이다.
도 11은, 본 발명의 다른 실시예에 따른, 도 6의 디스패치 스케줄러 및 도 2 의 명령어 선택 로직을 좀더 상세하게 예시하는 블록도이다.
도 12는, 본 발명에 따른, 도 11의 디스패치 스케줄러의 동작을 예시하는 흐름도이다.
도 13은, 본 발명의 다른 실시예에 따른, 도 1의 마이크로프로세서의 동적으로 할당 가능한 공유되는 스키드 버퍼들(shared dynamically-allocatable skid buffers)을 예시하는 블록도이다.
도 14는, 본 발명에 따른, 도 13의 스키드 버퍼들의 동작을 예시하는 3개의 흐름도들이다.
도 15는, 본 발명의 다른 실시예에 따른, 도 1의 마이크로프로세서의 공유되는 단일 명령어/스키드 버퍼를 예시하는 블록도이다.
이제 도 1을 참조하면, 본 발명에 따른 파이프라인형 멀티쓰레딩 마이크로프로세서(100)를 예시하는 블록도가 도시된다. 마이크로프로세서(100)는 복수개 쓰레드들을 병행하여 실행하도록 구성된다. 여기에서 실행 쓰레드 또는 명령어 스트림이라고도 하는, 쓰레드는 프로그램 명령어들의 시퀀스 또는 스트림을 구비한다. 쓰레드들은 마이크로프로세서(100)에서 실행중인 상이한 프로그램들로부터 유래할 수 있거나, 마이크로프로세서(100)에서 실행중인 동일한 프로그램의 상이한 부분들로부터의 명령어 스트림들일 수 있거나, 그것에 관한 조합일 수도 있다.
각각의 쓰레드는 연관된 쓰레드 문맥(TC;thread context)을 가진다. 쓰레드 문맥은, 레지스터들 또는 래치들과 같은, 저장 소자들의 집합 및/또는 쓰레드의 실 행 상태를 설명하는 마이크로프로세서(100)의 저장 소자들에서의 비트들을 구비한다. 다시 말해, 쓰레드 문맥은, 마이크로프로세서(100)에서 병행하여 실행중인 다른 실행 쓰레드들과 공유되는 상태가 아니라, 쓰레드에 고유한 그것의 개개 쓰레드의 상태를 설명한다. 쓰레드 각각의 상태를 쓰레드 문맥들에 저장하는 것에 의해, 마이크로프로세서(100)는 명령어들을 인출하고 발행하기 위한 쓰레드들 사이에서 빠르게 스위치하도록 구성된다. 일 실시예에서, 각각의 쓰레드 문맥은 프로그램 카운터(PC), 범용 레지스터 세트, 및 쓰레드 제어 레지스터들을 포함하는데, 이들은 마이크로프로세서(100)의 레지스터 파일들(112)에 포함된다.
마이크로프로세서(100)는, 여러 가지 쓰레드들의 명령어들에 대한 인출 및 발행을 기술하는 스케줄링 정책에 따라 쓰레드들을 병행하여 실행한다. 여기에서는 다수 쓰레드들로부터의 명령어들의 디스패치를 스케줄링하기 위한 여러 가지 실시예들이 설명된다. 명령어 "발행" 및 "디스패치"라는 용어들은 여기에서 상호 교환 가능하게 사용된다. 멀티쓰레디드 마이크로프로세서(100)는, 다수 쓰레드들이 마이크로프로세서(100)의 기능 유닛들(예를 들어, 명령어 인출 및 디코딩 유닛들, 캐시들, 분기 예측 유닛들, 및, 로드/저장, 정수, 부동 소수점, SIMD, 및 다른 실행 유닛들과 같은, 실행 유닛들)을 병행 방식(concurrent fashion)으로 공유할 수 있게 한다.
마이크로프로세서(100)는, 마이크로프로세서(100)를 포함하는 시스템의 시스템 메모리로부터 인출된 프로그램 명령어들 - 특히, 여러 가지 쓰레드들의 명령어들을 캐싱하기 위한 명령어 캐시(102)를 포함한다. 또한, 마이크로프로세서(100) 는 명령어 캐시(102) 및/또는 시스템 메모리로부터, 명령어 인출기(104)에 커플링된, 명령어/스키드 버퍼들(106)로 다수 쓰레드들의 명령어들을 병행하여 인출하도록 커플링된 명령어 인출기(104) 또는 명령어 인출 파이프라인(104)도 포함한다. 일 실시예에서, 명령어 인출 파이프라인(104)은 4 스테이지 파이프라인을 포함한다. 명령어/스키드 버퍼들(106)은 명령어들을 명령어 스케줄러(108) 또는 쓰레드 스케줄러(108)에 제공한다. 일 실시예에서, 각각의 쓰레드는 자신만의 명령어/스키드 버퍼(106)를 가진다. 각각의 클록 사이클에서, 스케줄러(108)는 쓰레드들 중 하나로부터 명령어를 선택하고, 마이크로프로세서(100) 파이프라인의 실행 스테이지들에 의한 실행을 위해 명령어를 발행한다. 레지스터 파일들(112)이 스케줄러(108)에 커플링되어, 명령어들을 실행하는 실행 유닛들(114)에 명령어 연산자들을 제공한다. 또한, 마이크로프로세서(100)는 실행 유닛들(114)에 커플링된 데이터 캐시(118)도 포함한다. 실행 유닛들(114)은 정수 실행 유닛들, 부동 소수점 실행 유닛들, SIMD 실행 유닛들, 로드/저장 유닛들, 및 분기 실행 유닛들을 포함할 수도 있지만, 그것들로 제한되는 것은 아니다. 일 실시예에서, 정수 실행 유닛 파이프라인은 4개 스테이지들: 레지스터 파일(112)이 액세스되는 레지스터 파일(RF) 액세스 스테이지, 어드레스 발생(AG) 스테이지, 실행(EX) 스테이지, 및 MS(memory second) 스테이지를 포함한다. EX 스테이지에서는, (덧셈들, 뺄셈들, 시프트들 등과 같은) 간단한 ALU 연산들이 수행된다. 추가적으로, 데이터 캐시(118)는, 제1 클록 사이클 동안 EX 스테이지에서 액세스되고, 제2 클록 사이클 동안 MS 스테이지에서 액세스되는 2-사이클 캐시이다. 각각의 쓰레드 문맥은 자신만의 레지스터 파 일(112)을 포함하고, 각각의 레지스터 파일은 자신만의 프로그램 카운터, 범용 레지스터 세트, 및 쓰레드 제어 레지스터들을 포함한다. 명령어 인출기(104)는 쓰레드 문맥 각각의 프로그램 카운터 값에 기초해 쓰레드들의 명령어들을 인출한다. 실행 유닛들(114) 중 일부는 좀더 포괄적인 파이프라인형일 수도 있다는 것에 주의한다. 또한, 마이크로프로세서(100) 파이프라인은, 명령어 결과들을 레지스터 파일들(112)에 역 기입하는 후기입 스테이지(116;write-back stage)도 포함한다. 일 실시예에서, 마이크로프로세서(100) 파이프라인은 또한 실행 유닛들(114)과 후기입 스테이지(116) 사이에 커플링된 예외 해결(exception resolution) 스테이지도 포함한다.
실행 유닛들(114)은, 특정된 쓰레드의 명령어가 실행을 위해 커밋되었다는 것을 지시하기 위해 각각의 쓰레드 문맥과 연관된 TC_instr_committed 신호(124)를 발생시킨다. 명령어가, 실행을 궁극적으로 완결하는 대신에, 마이크로프로세서(100) 파이프라인에 의해 플러시되지 않을 것이 보장되면, 명령어는 실행을 위해 커밋된 것으로, 이는, 결과를 발생시키고 마이크로프로세서(100)의 아키텍처 상태를 업데이트한다. 일 실시예에서는, 다수 명령어들이 매 클록 사이클마다 커밋될 수도 있고, TC_instr_committed 신호들(124)은 그 클록 사이클 동안 쓰레드 문맥을 위해 커밋된 명령어들의 수를 지시한다. TC_instr_committed 신호들(124)은 스케줄러(108)로 제공된다. TC_instr_committed 신호(124)에 응답하여, 스케줄러(108)는, 도 9 및 도 10과 관련하여 후술되는 바와 같이, 요구되는 QoS(quality-of-service)를 실현하기 위해 스케줄러(108)의 쓰레드 스케줄링 정책에 의해 사용되는 쓰레드를 위한 가상 수위 지시자(virtual water level indicator)를 업데이트한다.
TC_instr_committed 신호들(124)은 또한 개개 명령어/스키드 버퍼들(106)에도 제공된다. TC_instr_committed 신호(124)에 응답하여, 명령어/스키드 버퍼(106)는 포인터를 업데이트하여 버퍼(106)로부터 명령어를 효과적으로 제거한다. 전통적인 마이크로프로세서에서, 명령어들은 전통적인 명령어 버퍼로부터 제거되어 실행을 위해 발행된다. 그러나, 바람직스럽게도, 여기에서 설명되는 명령어/스키드 버퍼들(106)은, 명령어들이 실행을 위해 발행된 후에도, 계속해서 명령어들을 저장한다. 명령어들은, 도 3 및 도 4와 관련하여 상세하게 후술되는 바와 같이, 실행 유닛들(114)이, 개개 TC_instr_committed 신호(124)를 통해, 명령어가 실행을 위해 커밋되었다고 지시할 때까지, 명령어/스키드 버퍼들(106)로부터 제거되지 않는다.
스케줄러(108)는 실행 유닛들(114)에 실행 가능 TCs 신호(132)를 제공한다. 실행 가능 TCs 신호(132)는, 쓰레드 문맥들 중 어떤 것이 실행 가능한지를, 즉, 어떤 쓰레드 문맥들로부터 스케줄러(108)가 현재적으로 명령어들을 발행할 수 있는지를 특정한다. 일 실시예에서는, 도 7과 관련하여 후술되는 바와 같이, 쓰레드 문맥이 활성(active)이고 (Halted, Waiting, Suspended, 또는 Yielded인 것과 같은) 다른 조건들에 의해 차단되지 않으면, 쓰레드 문맥은 실행 가능하다. 특히, 실행 유닛들(114)은, 도 5와 관련하여 상세하게 후술되는 바와 같이, 실속된 쓰레드 문맥의 명령어들을 플러시할 것인지의 여부를 판정하기 위해, 실행 가능 TCs 신호(132)를 사용해, 실속된 쓰레드 문맥이 유일한 실행 가능 쓰레드 문맥인지의 여 부를 판정한다.
실행 유닛들(114)은 스케줄러(108)에 실속 이벤트 신호(126)를 제공한다. 실속 이벤트 신호(126)는, 특정한 실속 이벤트 신호(126)에 의해 특정된 원인으로 인해 명령어가 실행 유닛(114)에서 실속되었는지 또는 실속될 것인지를 지시한다. 또한, 실속 이벤트 신호(126)는 실속된 명령어의 쓰레드 문맥을 식별하는 식별자를 포함한다. 또한, 실행 유닛들(114)은 스케줄러(108)에 실속안한 이벤트 신호(128)도 제공한다. 실속 이벤트 신호(126)에 응답하여, 스케줄러(108)는, 도 5와 관련하여 상세하게 후술되는 바와 같이, 관련된 실속 안한 이벤트(128)가 시그널링될 때까지, 실속된 쓰레드 문맥을 위해 명령어들을 발행하는 것을 중단한다.
명령어에 응답하여 실행 유닛(114)이 실속하게 할 이벤트들의 일례들로는 다음과 같은 것들을 들 수 있지만, 그것들로 제한되는 것은 아니다. 첫번째, 명령어는, 데이터 캐시(118)에서 미싱중인 로드 명령어(load instruction)로부터의 데이터와 같은, 이용 불가능한 데이터에 의존할 수도 있다. 예를 들어, 추가 명령어는, 데이터 캐시(118)에서 미싱된 선행하는 로드 명령어 및 연산자가 아직까지 시스템 메모리로부터 인출되지 않았기 때문에 이용 불가능한 연산자(operand)를 특정할 수도 있다. 두번째, 명령어는, 분할이나 다른 긴 산술 명령어 또는, 예를 들어, 코프로세서 레지스터로부터 값을 이동시키는 명령어와 같은, 롱-러닝(long-running) 명령어로부터의 데이터에 의존할 수도 있다. 세번째, 명령어는 제한된 하드웨어 리소스를 위한 충돌을 도입할 수도 있다. 예를 들어, 일 실시예에서, 마이크로프로세서(100)는 단일 분할기 회로(single divider circuit)를 포함한다. 분할 명령어가 분할기에 의해 이미 실행중이라면, 제2 분할 명령어는 제1 분할 명령어가 종료하기를 대기하면서 실속해야 한다. 다른 일례로서, 일 실시예에서, 마이크로프로세서(100) 명령어 세트는 명령어 캐시(102)의 저급 관리 동작들(low-level management operations)을 수행하기 위한 명령어들의 그룹을 포함한다. 명령어 캐시 관리 명령어가 이미 실행중이라면, 제2 명령어 캐시 관리 명령어는 제1 명령어 캐시 관리 명령어가 종료하기를 대기하면서 실속해야 한다. 또 다른 일례로서, 일 실시예에서, 마이크로프로세서(100)는, 진행중인 데이터 캐시(118) 리필들(refills)을 저장하기 위한 비교적 소수의 슬롯들을 포함하는 로드 큐(load queue)를 포함한다. 로드 명령어가 데이터 캐시(118)에서 미싱중일 때, 로드 큐 엔트리가 할당되고, 미싱중인 데이터를 시스템 메모리로부터 획득하기 위해, 프로세서 버스 트랜잭션이 개시된다. 데이터가 버스를 통해 복귀될 때, 그것은 로드 큐에 저장된 다음 데이터 캐시(118)에 기입된다. 버스 트랜잭션이 완료되고 모든 데이터가 데이터 캐시(118)에 기입되었을 때, 로드 큐 엔트리는 해방된다. 그러나, 로드 큐가 풀(full)일 때, 로드 미스는 파이프라인 실속을 발생시킨다. 네번째, 명령어는 EHB(Execution Hazard Barrier) 명령어의 뒤를 이을 수도 있다. 일 실시예에서, 마이크로프로세서(100) 명령어 세트는, 모든 실행 해저드들이 소거될 때까지 소프트웨어에 의한 명령어 실행을 중단하는데 사용되는 EHB 명령어를 포함한다. 통상적으로, EHB 명령어의 뒤를 잇는 명령어들은, EHB 명령어가 폐기될 때까지 파이프라인에서 실속될 것이다. 다섯째, 명령어는 그것의 동일한 쓰레드 문맥에서 ITC(inter-thread communication) 공간으로 어드레싱되는 로드 또는 저장 명령어의 뒤를 이을 수도 있다. 일 실시예에서, 마이크로프로세서(100)는, ITC 로드 또는 저장의 뒤를 잇는 동일한 쓰레드 문맥에서의 명령어들을 실속하게 하면서 임의적인 긴 시간 동안 차단할 수 있는, 동기화된 저장 공간을 구비하는 ITC 공간으로의 로드들 및 저장들을 지원한다.
반대로, 실속 안한 이벤트(128)의 일례들로는 다음과 같은 것들: 데이터 캐시(118)에서 미싱된 로드 데이터가 복귀되는 것; 분할기 회로, 명령어 캐시(102), 또는 로드 큐 슬롯과 같은, 제한된 하드웨어 리소스가 해방되는 것; EHB 명령어, 롱-러닝 명령어, 또는 ITC 공간으로의 로드/저장 명령어가 완결되는 것을 들 수 있지만, 그것으로 제한되는 것은 아니다.
또한, 실행 유닛들(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)는, 도 3 및 도 4와 관련하여 후술되는 바와 같이, TC_flush 신호(122)를 사용해 버퍼(106)에서의 명령어들의 상태를 원래 상태로 되돌린다. 명령어/스키드 버퍼들(106)은, 그것들이 커밋되어 플러시되지 않을 때까지 계속해서 명령어들을 저장하기 때문에, 플러시되는 모든 명령어들은, 명령어 캐시(102)로부터 재인출될 필요없이, 명령어/스키드 버퍼 들(106)로부터 후속적으로 재발행될 수도 있다. 이것은, 다른 쓰레드들로부터의 명령어들이 실행될 수 있도록 하기 위해, 실속된 명령어들을 실행 파이프라인으로부터 플러시하는 것과 연관된 패널티를 감소시킬 수 있다는 이점을 가진다. 명령어들을 재인출해야 하는 가능성을 감소시키는 것은, 명령어 인출 시간들이 증가하고 있는 것 같으므로, 점차 중요해지고 있다. 이것은, 다른 것들 중에서도, 주로 프로세서 클록 주기들에서의 감소로 인해, 명령어 캐시들이, 예전의 마이크로프로세서 설계들에서보다, 액세스를 위해 더 많은 클록 사이클들을 요구하는 것이 점차 보편화되고 있다. 그에 따라, 명령어 재인출과 연관된 패널티는 예전의 설계들에서보다 1개, 2개, 또는 그 이상의 많은 클록 사이클들일 수도 있다.
이제 도 2를 참조하면, 발명의 일 실시예에 따른, 도 1의 마이크로프로세서(100)의 부분들 및, 특히, 명령어/스키드 버퍼들(106)을 예시하는 블록도가 도시된다. 도 2는, 도 1의 명령어 인출기(104)가 그것들로 명령어들을 인출하는, 복수개의 개개 쓰레드 문맥들을 위한 복수개 명령어/스키드 버퍼들(106)을 예시한다. 일 실시예에 따른 명령어/스키드 버퍼들(106)의 구조 및 동작은 도 3 및 도 4와 관련하여 다음에서 좀더 상세하게 도시된다. 각각의 명령어/스키드 버퍼(106)는 명령어 선택 로직(202)에 명령어(206)를 제공한다. 각각의 클록 사이클에서, 명령어 선택 로직(202)은 명령어들(206) 중 하나를, 실행될 실행 유닛들(114)로의 제공을 위한 선택된 명령어(204)로서 선택한다. 명령어 선택 로직(202)은 도 1의 스케줄러(108)에 의해 각각의 쓰레드 문맥을 위해 제공되는 DS_TC_priority 신호(208)에 응답하여 선택된 명령어(204)를 선택한다. DS_TC_priority 신호(208)의 동작은 도 7 및 도 8과 관련하여 다음에서 부연된다.
마이크로프로세서(100)가 스칼라 프로세서인, 즉, 실행을 위해 매 클록 사이클마다 하나의 명령어만을 발행하는 실시예가 설명되지만, 명령어 선택 로직(202)은 매 클록 사이클마다 다수 명령어들을 발행하는 수퍼스칼라 프로세서내에서 동작하도록 구성될 수도 있다는 것을 이해할 수 있어야 한다. 더 나아가, 명령어 선택 로직(202)은, 흔히 동시적 멀티쓰레딩이라고 하는, 매 클록 사이클마다 다수의 상이한 쓰레드 문맥들로부터 발행을 위한 명령어들을 선택하도록 구성될 수도 있다.
이제 도 3을 참조하면, 본 발명에 따른, 도 2의 명령어/스키드 버퍼들(106) 중 하나의 실례가 되는 명령어/스키드 버퍼(106) 및 연관된 제어 로직(302)을 예시하는 블록도가 도시된다. 도 2의 명령어/스키드 버퍼들(106) 각각은 도 3에 도시된 명령어/스키드 버퍼(106)와 유사하다. 다시 말해, 도 3에서는 하나의 명령어/스키드 버퍼(106) 및 연관된 제어 로직(302)만이 도시되지만, 일 실시예에서는, 하나의 명령어/스키드 버퍼(106) 및 연관된 제어 로직(302)이 각각의 쓰레드 문맥을 위해 존재한다. 명령어/스키드 버퍼(106)는 복수개 엔트리들(332)을 포함하는데, 엔트리 각각은 명령어를 그리고 연관된 명령어가 유효한지의 여부를 지시하기 위한 연관된 유효 비트(334)를 저장하기 위한 것이다. 도 3은 0 내지 5로써 지시되는 6개 엔트리들의 명령어/스키드 버퍼(106)를 예시한다. 도 3의 실시예에서, 명령어/스키드 버퍼(106)는 엔트리들의 원형 큐(circular queue)로서 구성된다.
도 1의 명령어 인출기(104)는, 그것이 명령어/스키드 버퍼(106)에 명령어를 기입할 때마다, 명령어/스키드 버퍼(106)로 기입 신호(write signal)(314)를 발생 시킨다. 또한, 기입 신호(314)는 제어 로직(302)으로도 제공된다. 제어 로직(302)은, 명령어/스키드 버퍼(106)가 풀(full)이라는 것을 지시하기 위한 풀 신호(312)를 명령어 인출기(104)로 발생시키고, 그에 따라, 명령어 인출기(104)는, 명령어/스키드 버퍼(106)가 풀일 때까지만 명령어/스키드 버퍼(106)에 명령어들을 기입할 것이다.
도 1의 스케줄러(108)는, 그것이 명령어/스키드 버퍼(106)로부터 명령어를 판독할 때마다, 판독 신호(read signal)(316)를 발생시킨다. 판독 신호(316)는 또한 제어 로직(302)에 제공된다. 제어 로직(302)은, 명령어/스키드 버퍼(106)가 공백이라는 것을 지시하기 위해 스케줄러(108)로 공백 신호(empty signal)(318)를 발생시키고, 그에 따라, 스케줄러(108)는 명령어/스키드 버퍼(106)가 더 이상 공백이 아닐 때까지만 명령어/스키드 버퍼(106)로부터 다른 명령어 판독을 시도할 것이다.
제어 로직(302)은, 명령어/스키드 버퍼(106)의 유효 비트들(334)을 업데이트하는 유효 발생 로직(342)을 포함한다. 유효 발생 로직(342)은 개개 쓰레드 문맥을 위해 도 1의 TC_instr_committed 신호(124)를 수신한다. 실행 유닛들(114)이 TC_instr_committed 신호(124)를 발생시킬 때마다, 유효 발생 로직(342)은 명령어/스키드 버퍼(106)에서 가장 오래된 유효한 명령어를 무효화한다. 또한, 유효 발생 로직(342)은 명령어 인출기(104)로부터 기입 신호(314)도 수신한다. 명령어 인출기(104)가 기입 신호(314)를 발생시킬 때마다. 유효 발생 로직(342)은 명령어가 기입된 명령어/스키드 버퍼(106)에서의 유효한 엔트리를 마킹한다.
또한, 제어 로직(302)은 명령어/스키드 버퍼(106)에 존재하는 유효한 명령어 들의 수를 저장하는 full_count 카운터(306)도 포함한다. full_count 카운터(306)는 명령어 인출기(104)로부터의 기입 신호(314)에 의해 증분되고 TC_instr_committed 신호(124)에 의해 감소된다. 또한, 제어 로직(302)은, full_count(306)가 명령어/스키드 버퍼(106) 명령어들의 최대 갯수와 동일할 때 풀 신호(312)에 대해 참값(true value)을 발생시키기 위해, full_count(306)를 명령어/스키드 버퍼(106)에 저장될 수 있는 명령어들의 최대 갯수(즉, 명령어/스키드 버퍼(106)에서의 엔트리들(332)의 총 수)와 비교하는 비교기(304)도 포함한다.
또한, 제어 로직(302)은, 현재적으로 발행을 위해 적격인, 명령어/스키드 버퍼(106)에 존재하는 유효한 명령어들의 수를 저장하는 empty_count 카운터(346)도 포함한다. empty_count(346)가 소정 시점들에서는 full_count(306) 미만일 수도 있는데, 이미 실행 파이프라인으로 발행되었지만 (아직 커밋되지는 않았으므로) 현재적으로 발행을 위해 적당하지는 않은 일부 유효한 명령어들이 명령어/스키드 버퍼(106)에 존재할 수도 있기 때문이다. empty_count 카운터(346)는 명령어 인출기(104)로부터의 기입 신호(314)에 의해 증분되고 스케줄러(108)로부터의 판독 신호(316)에 의해 감소된다. 또한, 제어 로직(302)은, empty_count(346)가 0일 경우에 공백 신호(318)에 대해 참값을 발생시키기 위해, empty_count(346)를 0과 비교하는 비교기(344)도 포함한다. 추가적으로, empty_count 카운터(346)에는, 도 1의 TC_flush 신호(122)에 대한 참값에 응답하여, full_count 카운터(306)의 값이 기입된다.
또한, 제어 로직(302)은 기입 포인터(322), 커밋 포인터(324), 및 판독 포인 터(326)도 포함하는데, 각각은 명령어/스키드 버퍼(106)의 엔트리 0로 초기화되는 카운터이다. 카운터들 각각은, 명령어/스키드 버퍼(106)에서의 엔트리들의 수보다 작은 값인 그것의 최대값을 초과하여 증분될 때 0으로 돌아온다. 기입 포인터(322)는, 명령어 인출기(104)가 명령어를 기입하는 명령어/스키드 버퍼(106)에서의 후속 엔트리를 특정하고, 명령어가 기입된 후, 기입 신호(314)에 의해 증분된다. 커밋 포인터(324)는, 커밋될 명령어/스키드 버퍼(106)에서의 후속 명령어를 특정하고 TC_instr_committed 신호(124)에 의해 증분된다. 판독 포인터(326)는, 스케줄러(108)가 그로부터 명령어를 판독하는 명령어/스키드 버퍼(106)에서의 후속 엔트리를 특정하고, 명령어가 판독된 후, 판독 신호(316)에 의해 증분된다. 추가적으로, 판독 포인터(326)에는, TC_flush 신호(122)에 대한 참값에 응답하여, 커밋 포인터(324)의 값이 기입된다. 도 3에 도시된 바와 같이, 스키드 창(skid window)은 커밋 포인터(324)에서 시작하여, 그것을 포함하지는 않지만, 판독 포인터(326)에 의해 포인팅되는 엔트리에 이르는 명령어/스키드 버퍼(106)의 엔트리들을 포함한다. 스키드 창은, 실행을 위해 이미 발행되었지만 아직까지 커밋되지는 않은 유효한 명령어들을 포함한다.
이제 도 4를 참조하면, 본 발명에 따른, 도 3의 명령어/스키드 버퍼(106)의 동작을 예시하는 4개의 흐름도들이 도시된다. 흐름도들 각각은 상이한 이벤트에 응답하여 명령어/스키드 버퍼(106)에 의해 수행되는 액션들을 예시한다. 제1 흐름도의 흐름은 블록 402에서 시작한다.
블록 402에서, 도 1의 명령어 인출기(104)는 개개 명령어/스키드 버퍼(106) 를 위해 도 3의 기입 신호(314)를 어서트(assert)하고 명령어/스키드 버퍼(106)에 명령어를 기입한다. 흐름은 블록 404로 진행한다.
블록 404에서, 유효 발생 로직(342)은 기입 신호(314)에 응답하여 기입 포인터(322)에 의해 특정된 엔트리를 유효한 것으로 마킹한다. 흐름은 블록 406으로 진행한다.
블록 406에서는, 도 3의 기입 포인터(322)가 write 신호(314)에 응답하여 증분된다. 흐름은 블록 408로 진행한다.
블록 408에서는, 도 3의 full_count 카운터(306)가 기입 신호(314)에 응답하여 증분된다. 흐름은 블록 412로 진행한다.
블록 412에서는, 도 3의 empty_count 카운터(346)가 기입 신호(314)에 응답하여 증분된다. 제1 흐름도의 흐름은 블록 412에서 종료한다.
제2 흐름도의 흐름은 블록 422에서 시작한다.
블록 422에서, 도 1의 실행 유닛(114)은 명령어/스키드 버퍼(106)와 연관된 쓰레드 문맥을 위해 도 1의 TC_instr_committed 신호(124)를 어서트한다. 흐름은 블록 424로 진행한다.
블록 424에서, 유효 발생 로직(342)은, TC_instr_committed 신호(124)에 응답하여, 도 3의 커밋 포인터(324)에 의해 특정된 엔트리를 무효한 것으로 마킹함으로써, 명령어를 버퍼로부터 효과적으로 제거한다. 흐름은 블록 426으로 진행한다.
블록 426에서는, 커밋 포인터(324)가 TC_instr_committed 신호(124)에 응답하여 증분된다. 흐름은 블록 428로 진행한다.
블록 428에서는, full_count 카운터(306)가 TC_instr_committed 신호(124)에 응답하여 감소된다. 제2 흐름도의 흐름은 블록 428에서 종료한다.
일 실시예에서는, TC_instr_committed 신호(124)를 수신하는 것이 아니라, 제어 로직(302)이 실행 유닛(114)으로부터, 단순히 명령어/스키드 버퍼(106)로부터 명령어가 제거되어야 한다는 것을 지시하는 다른 신호를 수신하지만, 명령어가 재-디스패치(re-dispatch)를 요구하지 않을 것이 아직은 보장되지 않을 수도 있다. 일 실시예에서, 신호는, 명령어가 소정의 재-디스패치 파이프라인 스테이지에 도달했음을 지시한다. 명령어가 소정 스테이지에 도달했음을 제어 로직(302)이 검출하면, 제어 로직(302)은 명령어/스키드 버퍼(106)로부터 명령어를 제거한다. 다른 실시예에서, 신호는, 각각의 클록 사이클에서, 명령어가 실행중이었던, 즉, 실속되지 않았었던 대신에 후속 파이프라인 스테이지로 진행하였는지의 여부를 지시한다. 명령어가 소정 갯수의 클록 사이클들 동안 실행중이었음을 제어 로직(302)이 검출하면, 제어 로직(302)은 명령어/스키드 버퍼(106)로부터 명령어를 제거한다. 이 실시예들에서, 명령어가 실행 파이프라인(114)에서의 특정 스테이지에 일단 도달하고 난 다음 명령어가 재-디스패치를 요구할 가능성은, 명령어가 재-디스패치를 요구하지 않을 것이 아직까지 보장되지는 않더라도, 다른 명령어가 명령어/스키드 버퍼(106)에 기입될 공간을 만들기 위해 명령어를 명령어/스키드 버퍼(106)로부터 제거하는 것을 정당화하기에는 충분할 정도로 낮다. 이 실시예에서, 다음으로, 실행 유닛(114)이, 명령어가 실행을 완결하기 전에 플러시되었음을 지시하면, 쓰레드 문맥을 위한 전체 명령어/스키드 버퍼(106)는, 쓰레드 명령어들이 적당한 순서로 발 행된다는 것을 보장하기 위해, 전체의 명령어 인출 파이프라인(104)과 함께, 플러시되어야 한다.
제3 흐름도의 흐름은 블록 442에서 시작한다.
블록 442에서, 도 1의 스케줄러(108)는 개개 명령어/스키드 버퍼(106)를 위해 도 3의 판독 신호(316)를 어서트하고 명령어/스키드 버퍼(106)로부터 실행 파이프라인으로 발행하기 위한 명령어를 판독한다. 흐름은 블록 444로 진행한다.
블록 444에서는, 도 3의 판독 포인터(326)가 판독 신호(316)에 응답하여 증분된다. 흐름은 블록 446으로 진행한다.
블록 446에서는, empty_count 카운터(346)가 판독 신호(316)에 응답하여 감소된다. 제3 흐름도의 흐름은 블록 446에서 종료한다.
제4 흐름도의 흐름은 블록 462에서 시작한다.
블록 462에서는, 명령어/스키드 버퍼(106)와 연관된 쓰레드 문맥을 위해 TC_flush 신호(122)를 어서트한다. 흐름은 블록 464로 진행한다.
블록 464에서는, TC_flush 신호(122)에 응답하여, 판독 포인터(326)에 커밋 포인터(324)가 로드된다. 흐름은 블록 466으로 진행한다.
블록 466에서는, TC_flush 신호(122)에 응답하여, empty_count 카운터(346)에 full_count(306)가 로드된다. 제4 흐름도의 흐름은 블록 466에서 종료한다.
앞서 논의된 바와 같이, 일 실시예에서, TC_flush 신호(122)는, 실행 유닛(114)이 쓰레드 문맥의 실행되지 않은 모든 명령어들을 플러시했다는 것을 지시한다. 도 4의 제4 흐름도는 이 실시예를 위한 명령어/스키드 버퍼(106)의 동작을 설명한다. 그러나, 다른 실시예에서, 실행 유닛(114)은 실행 유닛(114)에 존재하는 실행되지 않은 명령어들의 수보다 적게 플러시할 수도 있는데, 다시 말해, 실속 명령어 및 실속중인 쓰레드 문맥의 좀더 새로운 모든 명령어들은 플러시하지만, 실속 명령어보다 좀더 오래된 쓰레드 문맥의 실행되지 않은 명령어들은 플러시하지 않을 수도 있다. 이 실시예에서, TC_flush 신호(122)는, 실행 유닛(114)에 의해 플러시되는 다수 명령어들도 지시한다. 이 실시예에서는, 블록 464에서, 판독 포인터(326)를 커밋 포인터(324)로써 업데이트하는 것이 아니라, 플러시된 명령어들의 수가 판독 포인터(326)로부터 뺄셈된다. 추가적으로, 블록 466에서는, empty_count(346)를 full_count 카운터(306)로써 업데이트하는 것이 아니라, 플러시된 명령어들의 수가 empty_count(346)에 덧셈된다.
이제 도 5를 참조하면, 본 발명에 따른, 실속된 쓰레드 문맥을 플러시하여 실행 대역폭 이용을 향상시키기 위한 도 1의 마이크로프로세서(100)의 동작을 예시하는 흐름도가 도시된다. 흐름은 블록 502에서 시작한다.
블록 502에서, 도 1의 실행 유닛(114)은, 명령어, 즉, 실속 명령어에 응답하여, 도 1의 stalling events 신호(126)와 관련하여 상술된 것들 중 하나와 같은, 실속 이벤트를 검출한다. 또한, 실행 유닛(114)은, 실속 명령어가 어떤 쓰레드 문맥과 연관되어 있는지를, 즉, 실속 쓰레드 문맥을 판정한다. 일 실시예에서, 각각의 명령어에는, 그것이 파이프라인 아래쪽으로 진행함에 따라, 실행 유닛(114)이 실속 쓰레드 문맥을 식별하는데 사용하는 고유한 쓰레드 문맥 식별자가 수반된다. 일 실시예에서, 실행 유닛(114)은 실속 이벤트(126)에 응답하여 실속하지 않는 대 신, 실속 이벤트(126)가 검출된 동일한 클록 사이클에서 블록 512에 따라 명령어를 플러시함으로써, 실행 유닛(114)을 실속해야 할 필요성을 경감한다. 다른 실시예에서는, 타이밍 고려 사항들에 의해 요구된다면, 실속된 명령어가 다음의 블록 512에 따라 플러시될 수 있을 때까지, 실행 유닛(114)이, 실속 이벤트(126)에 응답하여, 하나의 클록 사이클 동안 실제로 실속할 수도 있다. 흐름은 블록 504로 진행한다.
판정 블록 504에서, 실행 유닛(114)은, 도 1의 실행 가능 TCs 신호(132)를 조사하는 것에 의해, 실속 쓰레드 문맥이 유일한 실행 가능 쓰레드 문맥인지의 여부를 판정한다. 그렇다면, 흐름은 블록 524로 진행하고; 그렇지 않다면, 흐름은 블록 506으로 진행한다.
블록 506에서, 실행 유닛(114)은 실속 이벤트 신호(126)를 통해 실속 이벤트들을 시그널링하고 실속 쓰레드 문맥의 식별자도 제공한다. 흐름은 블록 508로 진행한다.
블록 508에서, 스케줄러(108)는 실속된 실속 쓰레드 문맥을 마킹하고, 쓰레드 문맥을 위해 명령어들을 발행하는 것을 중단하며, 실속 이벤트의 원인에 관한 상태를 저장한다. 도 7의 실시예에서, 발행 가능 명령어 로직(708)은 실속 지시자(704)를 참값으로 설정하여 실속된 쓰레드 문맥을 마킹하는데, 이로 인해, 발행 가능 명령어 로직(708)은 발행 가능(746) 신호에 대해 거짓값을 발생시킨다. 흐름은 블록 512로 진행한다.
블록 512에서, 실행 유닛(114)은 실행 유닛(114)에서의 실속 쓰레드 문맥의 모든 명령어들을 파기, 즉, 플러시하고 실속 쓰레드 문맥, 즉, 플러시된 쓰레드 문맥과 연관된 도 1의 TC_flush 신호(122)에 대해 참값을 발생시킨다. 실행 유닛(114)은 실속 명령어 및 후속 명령어들만을 플러시하고 실속 명령어들을 선행하는 명령어들은 플러시하지 않으며; 그렇지 않다면, 실속 조건은 결코 종료하지 않을 수도 있다는 것을 이해할 수 있을 것이다. 일 실시예에서, 실행 유닛(114)은, 실속 쓰레드 문맥만이 아니라, 모든 쓰레드 문맥들의 명령어들을 플러시한다. 그러나, 실속 쓰레드 문맥만을 플러시하는 실시예는, 다른 쓰레드 문맥들의 명령어들이 실행을 위해 여전히 실행 유닛(114)에 남아 있을 수도 있으므로 좀더 적은 파이프라인 버블들을 도입할 수 있는, 그것에 의해, 모든 쓰레드 문맥들을 플러시하는 실시예보다 마이크로프로세서(100)가 좀더 효율적이게 할 수 있는 이점을 가진다. 흐름은 블록 514로 진행한다.
블록 514에서, 도 1의 명령어/스키드 버퍼(106)는, 도 3 및 도 4, 또는 도 13 및 도 14, 또는 도 15의 실시예들과 관련하여 설명되는 것과 같이, 플러시된 명령어들을 TC_flush 신호(122)에 응답하여 복구한다. 흐름은 블록 516으로 진행한다.
블록 516에서, 스케줄러(108)는, 그것의 쓰레드 스케줄링 정책에 따라, 실속된 것으로 마킹되지 않은 쓰레드 문맥들을 위해 계속해서 명령어들을 발행한다. 도 7의 실시예에서, 실속 지시자(704)는, 명령어의 실속 여부를 지시한다. 추가적으로, 실행 유닛(114)은 계속해서, 블록 512에서의 플러시 이후에 실행 유닛(114)에 존재하는 다른 쓰레드 문맥들의 명령어들 및 후속적으로 디스패치된 명령어들을 실행한다. 흐름은 판정 블록 518로 진행한다.
판정 블록 518에서, 스케줄러(108)는, 실속 이벤트의 종결 여부를 판정한다. 스케줄러(108)는, 도 1의 실속 안한 이벤트 신호(128)를 통해 비실속 이벤트를 시그널링하는 실행 유닛(114)에 응답해 그리고 부가적으로 블록 508에서 저장된 실속 이벤트의 원인에 관한 상태에 기초해, 실속 쓰레드 문맥을 위한 실속 이벤트의 종결 여부를 판정한다. 실속 쓰레드 문맥을 위한 실속 이벤트가 종결되면, 흐름은 블록 522로 진행하고; 그렇지 않으면, 흐름은 블록 516으로 복귀한다.
블록 522에서, 스케줄러(108)는 실속 쓰레드 문맥을 실속되지 않은 것으로 마킹하고, 다른 비실속(unstalled) 쓰레드 문맥들과 함께, (더 이상 실속이 아닌) 실속 쓰레드 문맥을 위해 다시 한번 명령어들을 발행하기 시작한다. 도 7의 실시예에서, 발행 가능 명령어 로직(708)은 실속 지시자(704;stalled indicator)를 거짓값으로 설정하여 쓰레드 문맥을 실속되지 않은 것으로 마킹한다. 흐름은 블록 522에서 종료한다.
블록 524에서는, 실속 쓰레드 문맥이 유일한 실행 가능 쓰레드 문맥이기 때문에, 실행 유닛(114)은, 정확한 프로그램 실행을 보장하기 위해, 실속 명령어에서 실속한다. 흐름은 판정 블록 526으로 진행한다.
판정 블록 526에서, 스케줄러(108)는, 실속 이벤트의 종결 여부를 판정한다. 그렇다면, 흐름은 블록 532로 진행하고; 그렇지 않다면, 흐름은 판정 블록 528로 진행한다.
판정 블록 528에서, 실행 유닛(114)은, 도 1의 실행 가능 TCs 신호(132)를 조사하는 것에 의해, 실속된 쓰레드 문맥이 유일한 실행 가능 쓰레드 문맥인지의 여부를 판정한다. 그렇다면, 흐름은 블록 526으로 진행하고; 그렇지 않다면, 흐름은 판정 블록 506으로 진행한다.
판정 블록 528에서, 실행 유닛(114)은, 실속 쓰레드 문맥이 여전히 유일한 실행 가능 쓰레드 문맥인지의 여부를 판정한다. 그렇다면, 흐름은 판정 블록 526으로 복귀하고; 그렇지 않다면, 흐름은 블록 506으로 진행한다.
블록 532에서, 실행 유닛(114)은 실속을 해제하고 (더 이상 실속중이지 않은) 실속 명령어 및 다른 명령어들을 계속해서 실행한다. 바람직스럽게도, 실속 이벤트가 종료할 때, 실속된 명령어 및 후속 명령어들은 재발행될 필요없이 즉시 실행을 시작할 수도 있는데, 그것들이 블록 512에 따라 플러시되었다면 재발행이 요구될 것이다. 이와 같이, 바람직스럽게도, 실속 쓰레드 문맥이 유일한 실행 가능 쓰레드 문맥이라면, 그것을 플러시하지 않는 것에 의해, 마이크로프로세서(100)는 성능을 향상시킬 수 있다. 흐름은 블록 532에서 종료한다.
도 5로부터 알 수 있는 바와 같이, 실행 유닛(114)에서의 실속 이벤트(126)를 검출하고 명령어를 실행 유닛(114)으로부터 플러시하여, 다른 쓰레드들의 명령어들이 디스패치되어 실행 유닛(114)에서 실행될 수 있게 하는 것은 바람직스럽게도, 실행 파이프라인 버블들로 인해 클록 사이클들이 낭비되는 것을 방지하여 실행 유닛(114)의 사용을 좀더 효율적이게 할 수도 있다. 명령어가 실속할 실제 조건에 응답하여 명령어를 플러시하는 것에 의해, 마이크로프로세서(100)는 좀더 높은 성능을 실현할 수 있다.
이제 도 6을 참조하면, 스케줄러(108)가 분기되는 본 발명의 일 실시예에 따른 도 1의 마이크로프로세서(100)내의 스케줄러(108)를 예시하는 블록도가 도시된다. 분기 스케줄러(108)는 디스패치 스케줄러(DS;602) 부분 및 정책 관리자(PM;604) 부분을 구비한다. 디스패치 스케줄러(602) 부분은 마이크로프로세서(100)의 프로세서 코어(606)내에 구비되는 한편, 정책 관리자(604) 부분은 프로세서 코어(606) 외부에 구비된다. 프로세서 코어(606)는, 고객에 의해 개별화가 불가능한 마이크로프로세서(100)의 부분인 한편, 정책 관리자(604)는 고객에 의해 개별화 가능하다. 일 실시예에서, 프로세서 코어(606)는, 소프트 코어(soft core)라고도 하는 합성 가능 코어(synthesizable core)이다. 합성 가능 코어의 설계는, 흔히 합성 도구들이라고 하는 자동화된 도구들을 사용해 빠르고 쉽게 제조 가능한 표현으로 감소될 수 있다.
프로세서 코어(606)는, 복수개 신호들을 구비하는, 정책 관리자(604)로의 인터페이스(628)를 제공한다. 일 실시예에서, 디스패치 스케줄러(602)로의 입력들 및 디스패치 스케줄러(602)로부터의 출력 신호들은 등록되어, 바람직스럽게도, 그렇지 않다면 분기 스케줄러에 의해 도입될 수도 있는 소정의 타이밍 문제들을 경감시키는 방식으로 비코어 정책 관리자(604) 로직이 프로세서 코어(606)와 인터페이스할 수 있게 한다. 더 나아가, 인터페이스(628)는 고객이 이해하기에 용이하여, 정책 관리자(604) 스케줄링 정책의 설계를 용이하게 한다.
다음의 표 1a 및 표 1b에서는, 일 실시예에 따른 정책 관리자 인터페이스(628)를 구비하는 여러 가지 신호들이 도시된다. 표 1a 및 표 1b는 신호 이름, 정책 관리자(604)에 대해 상대적인 신호의 방향, 및 각 신호의 간단한 설명을 특정한다. 표 1a 및 표 1b는, 마이크로프로세서(100)가 실행의 최대 9개 쓰레드들과 연관된 상태를 저장하기 위해 9개 쓰레드 문맥들을 포함하는 실시예를 설명한다. 더 나아가, 실시예는, 마이크로프로세서(100)가 최대 2개의 VPE들(virtual processing elements)로서 구성될 수 있게 한다. 일 실시예에서, 마이크로프로세서(100)는 사실상 MIPS32 또는 MIPS64 ISA(Instruction Set Architecture)에 따르고 표 1a 및 표 1b에서 CP0라고 하는 제어 Coprocessor 0를 포함하는데, 제어 Coprocessor 0는 사실상 MIPS PRA(Privileged Resource Architecture) 및 MIPS MT ASE(Multithreading Application Specific Extension)에서 특정된 Coprocessor 0에 따른 쓰레드 제어 레지스터들을 포함한다. 표 1a 및 표 1b에서 설명된 신호들 중 몇가지는 CPO 레지스터들에 액세스하는데 사용된다.
Figure 112007058965868-pct00001
Figure 112007058965868-pct00002
이하에서는 표 1a 및 표 1b에서 특정된 정책 관리자 인터페이스(628)의 특정 신호들 중 일부가 좀더 상세하게 설명될 것이다. 정책 관리자(604)는 PM_TC_priority(652) 출력을 통해 개개 쓰레드 문맥의 우선 순위를 디스패치 스케줄러(602)에 대해 특정한다. 일 실시예에서, PM_TC_priority(652)는 2개 비트들을 구비하고, 디스패치 스케줄러(602)는, 정책 관리자(604)가 쓰레드 문맥을 위해 4개의 상이한 우선 순위들 중 하나를 특정할 수 있게 한다. 정책 관리자(604)는 개개 PM_TC_block(654) 출력에 대해 참값을 발생시키는 것에 의해 쓰레드 문맥을 위해 명령어들을 발행하는 것을 중단할 것을 디스패치 스케줄러(602)에 지시한다. 이와 같이, 정책 관리자(604)는, 다음에서, 특히, 다음의 도 7 내지 도 11과 관련하여 부연되는 바와 같이, PM_TC_priority(652) 및 PM_TC_block(654) 출력들을 통해 디스패치 스케줄러(602)가 여러 가지 쓰레드 문맥들을 위해 명령어들을 발행하는 방법에 영향을 미칠 수도 있다.
프로세서 코어(606)는 PM_gclk(658)를 정책 관리자(604)에게 제공하는데, 이로 인해, 정책 관리자(604)는, 도 9와 관련하여 후술되는 바와 같이, PM_gclk(658)에 기초해 주기적으로 PM_TC_priority(652)를 조정할 수 있다. 디스패치 스케줄러(602)는 개개의 PM_TC_state(642) 입력을 통해 각각의 쓰레드 문맥을 위한 상태를 전달한다. 표 1a 및 표 1b에 도시된 바와 같이, 쓰레드 문맥은 다음과 같은 8개 상태들 중 하나일 수 있다. InActive: 디스패치 스케줄러(602)는, 쓰레드 문맥이 현재적으로 실행의 쓰레드와 연관되어 있지 않기 때문에, 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. Active: 쓰레드 문맥은 현재적으로 실행의 쓰레드와 연관되어 있고; 따라서, 디스패치 스케줄러(602)는, 다른 차단 조건들이 존재하지 않는다면, 실행을 위해 쓰레드 문맥의 명령어들을 발행할 수도 있다. Yielded: 디스패치 스케줄러(602)는, 쓰레드 문맥이 특정 이벤트에 대해 차단되게 하는 YIELD 명령어를 쓰레드가 실행하였기 때문에, 실행을 위해 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. Halted: 디스패치 스케줄러는, 쓰레드 문맥이 자체적으로 또는 다른 쓰레드에 의해 중단되었기 때문에, 실행을 위해 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. Suspended: 디스패치 스케줄러(602)는, 쓰레드가 DMT 또는 DVPE 명령어를 실행하였기 때문에 또는 마이크로프로세서(100)나 VPE가 현재적으로 예외를 서비스중이기 때문에, 실행을 위해 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. DMT 명령어는 VPE를 위한 멀티쓰레딩 동작을 일시 중지한다. DVPE 명령어는 전체 마이크로프로세서(100)를 위한 멀티쓰레딩 동작을 일시 중지한다. Waiting on ITC: 디스패치 스케줄러(602)는, 쓰레드에 의해 실행되는 로드/저장 명령어에 의해 특정된 ITC(inter-thread communication) 공간으로부터/공간으로 데이터를 로드/저장하기 위해 대기하면서 쓰레드 문맥이 차단되기 때문에, 실행을 위해 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. WAITing due to WAIT: 디스패치 스케줄러(602)는, 인터럽트가 발생될 때까지 쓰레드 문맥을 차단시키는 WAIT 명령어를 쓰레드가 실행하였기 때문에, 실행을 위해 쓰레드 문맥의 명령어들을 발행하지 않을 수도 있다. 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) 신호는, 명령어가 아직은 완결되지 않았을 수도 있지만, 플러시되지 않을 것이, 즉, 궁극적으로 실행을 완결할 것이 보장된다는 것을 지시한다. 두드러진 요점은, PM_TC_instr_committed(644) 입력이, 일부 명령어들은 투기적으로 디스패치되어 결코 완결될 수 없을 수도 있으므로 상이할 수도 있는 (PM_TC_inst_issued 입력(646)에 의해 전달되는) 단순히 디스패치된 명령어들과 달리, 실행된 명령어들에 관한 정보를 정책 관리자(604)에게 제공한다는 점이다. 도 9와 관련하여 후술되는 바와 같이, 애플리케이션에서의 일부 쓰레드들은 특정 QoS를 요구할 수도 있으므로, 이것이 정책 관리자(604)에게는 중요한 차이점일 수도 있다. 일 실시예에서, PM_TC_instr_committed 신호(644)는 TC_instr_committed 신호(124)의 등록된 버전이다. 이와 같이, 프로세서 코어(606)는, 다음에서, 특히, 다음의 도 7 내지 도 11과 관련하여 부연되는 바와 같이, PM_TC_inst_issued(646), PM_TC_instr_committed(644), 및 PM_TC_state(642) 입력들을 통해, 여러 가지 쓰레드 문맥들 및 쓰레드 문맥들의 상태를 위해 명령어들의 발행 및 실행에 관한 피드백을 제공한다.
일 실시예에서, 디스패치 스케줄러(602)는 정책 관리자(604)에게, 애플리케이션 쓰레드 문맥들이 풀 프로세서 대역폭을 요구하지 않을 때, 마이크로프로세서(100)가 실질적으로 슬립 상태로 진행하지 않으면서 전력을 절감할 수 있게 하는 것이 목적인 릴랙스 함수(relax function)도 제공한다. 릴랙스 함수는, 스케줄링될 추가적인 쓰레드 문맥이 존재하는 것처럼 동작한다. 그러나, 릴랙스 쓰레드 문맥이 발행을 위해 선택될 때, 디스패치 스케줄러(602)는 명령어를 발행하지 않는다. 정책 관리자(604)는, 증분을 위해 RELAX_RATE를 사용하고 릴랙싱된 명령어 슬롯이 완결될 때 감소된다는 것을 제외하면, (도 9와 관련하여 후술되는) TC_LEVEL(918) 카운터들과 유사하게 동작하는 RELAX_LEVEL 카운터를 (매 VPE마다) 보유한다. 일 실시예에서, 마이크로프로세서(100)는, 소프트웨어가 RELAX_RATE를 특정할 수 있게 하는 TCSchedule 레지스터(902)와 유사한 VPESchedule 레지스터를 매 VPE마다 포함한다. 릴랙스 함수는 표 1a 및 표 1b에서 특정된 PM_vpe_relax_enable 신호들을 통해 인에이블 또는 디스에이블되고, 릴랙스 쓰레드 문맥 우선 순위는 PM_vpe_relax_priority 신호들을 통해 특정된다.
일 실시예에서, 디스패치 스케줄러(602)는 정책 관리자(604)에게, 예외 쓰레드 문맥이 정규 쓰레드 문맥들로부터 독립적인 자신만의 우선 순위를 가질 수 있게 하는 것이 목적인 예외 함수도 제공한다. 정책 관리자는, 증분을 위해 EXC_RATE를 사용하고 예외 명령어 슬롯이 완결될 때 감소된다는 것을 제외하면, (도 9와 관련하여 후술되는) TC_LEVEL(918) 카운터들과 유사하게 동작하는 EXC_LEVEL 카운터를 (매 VPE마다) 보유한다. 예외 모드가 인에이블되고 VPE를 위해 예외가 취해지면, VPE의 쓰레드 문맥들은 모두가 예외 우선 순위로 설정될 것이다. 일 실시예에서, 소프트웨어는 VPESchedule 레지스터들을 통해 EXC_RATE를 특정한다. 예외 함수는 표 1a 및 표 1b에서 특정된 PM_vpe_exc_enable 신호들을 통해 인에이블 또는 디스에이블되고, 예외 쓰레드 문맥 우선 순위는 PM_vpe_exc_priority 신호들을 통해 특정된다.
이제 도 7을 참조하면, 본 발명에 따른, 도 6의 디스패치 스케줄러(602) 및 도 2의 명령어 선택 로직(202)을 좀더 상세하게 예시하는 블록도가 도시된다. 명령어 선택 로직(202)은 비교기들(714)에 의해 제어되는 먹스들(724;muxes)의 트리를 포함한다. 각각의 먹스(724)는 2개의 상이한 쓰레드 문맥들로부터 도 2의 명령어(206)를 수신한다. 각각의 먹스(724)는 명령어(206)와 연관된 도 2의 DS_TC_priority(208)도 수신한다. 각각의 먹스(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)를 가진 도 2의 선택된 명령어(204)를 선택할 때까지, 트리를 따라 아래쪽으로 전파한다.
도 7은 디스패치 스케줄러(602)의 로직, 즉, 실속 지시자(704), 발행 가능 명령어 로직(708), 및 라운드-로빈(round-robin) 로직(712)을 나타낸다. 일 실시예에서, 실속 지시자(704) 및 발행 가능 명령어 로직(708)은 각각의 쓰레드 문맥을 위한 디스패치 스케줄러(602)내에서 복제되어 각각의 쓰레드 문맥을 위한 DS_TC_priority(208)를 발생시킨다. 그에 비해, 라운드-로빈 로직(712)은 각각의 가능한 PM_TC_priority(652)를 위해 1회씩 인스턴스화되어 각각의 PM_TC_priority(652)를 위한 라운드-로빈 지시자를 발생시킨다. 예를 들어, 도 7은, 정책 관리자(604)가 4개의 가능한 PM_TC_priority들(652) 중 하나를 특정할 수 있으므로, 라운드-로빈 로직(712)이 디스패치 스케줄러(602)에서 4번 인스턴스화되어 4개의 개개 라운드-로빈 지시자들을 발생시키는 실시예를 예시한다.
일 실시예에서, 라운드-로빈 지시자는 마이크로프로세서(100)의 매 쓰레드 문맥당 1개 비트를 포함한다. 그것의 개개 쓰레드 문맥과 연관된 라운드-로빈 지시자의 비트는 도 7에 도시된 바와 같이 라운드-로빈 비트(748)로서 제공된다. 라운드-로빈 비트(748)가 참이면, 쓰레드 문맥이, 현재적으로 PM_TC_priority(652)가 동일한 나머지 쓰레드 문맥들 사이에서 라운드-로빈 방식으로 발행될 차례이다.
발행 가능 명령어 로직(708)은 도 1의 실행 유닛들(114)로부터 실속 안한 이벤트 신호(128) 및 실속 이벤트 신호(126)를, 도 6의 정책 관리자(604)로부터 PM_TC_block(654) 신호를, 명령어/스키드 버퍼(106)로부터 도 3의 공백 신호(318)를, 그리고 TC 상태(742) 신호들을 수신한다. 일 실시예에서, TC 상태(742) 신호들은 도 6의 PM_TC_state(642) 신호들과 유사한 정보를 전달한다. 발행 가능 명령어 로직(708)은, 쓰레드 문맥을 식별하는 실속 이벤트 신호(126)에 응답하여, 실속된 쓰레드 문맥을 마킹하도록 실속 지시자(704)를 설정한다. 또한, 발행 가능 명령어 로직(708)은 실속의 원인을 기억하기 위해 실속 이벤트(126)에 응답하여 상태도 저장한다. 반대로, 실속 안한 이벤트(128)가 실속의 원인과 관련이 있으면, 발행 가능 명령어 로직(708)은, 실속 안한 이벤트 신호(128)에 응답하여, 실속 지시자(704)를 소거한다. 발행 가능 명령어 로직(708)은, 그것의 입력들에 응답하여, 발행 가능(746) 신호를 발생시킨다. 쓰레드 문맥을 위한 명령어/스키드 버퍼(106)의 판독 포인터(326)에 의해 포인팅되는 명령어(206)가 발행 가능이면, 발행 가능(746) 신호는 참이다. 일 실시예에서는, TC 상태(742) 신호들이, 쓰레드 문맥이 활성(Active) 상태이고 (Halted, Waiting, Suspended, 또는 Yielded인 것과 같은) 다른 조건들에 의해 차단되지 않으며, 실속 지시자(704)가 거짓이고, PM_TC_block(654) 및 공백(318) 신호들이 거짓이라고 지시하면, 명령어는 발행 가능하다.
발행 가능(746) 비트, PM_TC_priority(652) 비트들, 및 라운드-로빈 비트(748)는 조합되어 DS_TC_priority(208)를 생성한다. 도 7의 실시예에서, 발행 가능(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이기 때문에, 발행 불가능 명령어는 모든 발행 가능 명령어들보다 낮은 우선 순위일 것이다. 반대로, 하나 이상의 쓰레드 문맥이 발행 가능 명령어를 가지며 동일한 최고 PM_TC_priority(652)를 가질 경우, 라운드-로빈 비트(748)는 쓰레드를 선택하는데만 사용된다.
이제 도 8을 참조하면, 본 발명에 따른 도 7의 디스패치 스케줄러(602)의 동작을 예시하는 흐름도가 도시된다. 흐름은 블록 802에서 시작한다.
블록 802에서, 디스패치 스케줄러(602)는 각각의 PM_TC_priority(652)를 위해 각각의 라운드-로빈 지시자를 초기화한다. 흐름은 블록 804로 진행한다.
블록 804에서, 디스패치 스케줄러(602)는, 각각의 쓰레드 문맥을 위해, 쓰레드 문맥이 발행 가능 명령어(206)를 갖는지의 여부를 판정한다. 다시 말해, 각각의 쓰레드 문맥을 위한 발행 가능 명령어 로직(708)은 발행 가능(746) 신호에 대한 값을 발생시킨다. 일 실시예에서, 발행 가능 명령어 로직(708)은, TC 상태 신호들(742)이, 쓰레드 문맥이 활성(Active) 상태이고 (Halted, Waiting, Suspended, 또는 Yielded인 것과 같은) 다른 조건들에 의해 차단되지 않으며, 실속 지시자(704)가 거짓이고, PM_TC_block(654) 및 공백(318) 신호들이 거짓이라고 지시하는 경우에만, 발행 가능(746) 신호에 대해 참값을 발생시킨다. 흐름은 판정 블록 806으로 진행한다.
판정 블록 806에서, 디스패치 스케줄러(602)는, 쓰레드 문맥들 각각을 위한 발행 가능(746) 신호를 조사하는 것에 의해, 발행 가능 명령어(206)를 가진 임의의 쓰레드 문맥들이 존재하는지의 여부를 판정한다. 그렇지 않다면, 흐름은, 하나 이상의 쓰레드 문맥이 발행 가능 명령어(206)를 가질 때까지 블록 804로 복귀하고; 그렇다면, 흐름은 블록 808로 진행한다.
블록 808에서, 디스패치 스케줄러(602)는 쓰레드 문맥의 발행 가능(746) 비트, 쓰레드 문맥의 PM_TC_priority(652), 및 쓰레드 문맥의 PM_TC_priority(652)에 대한 라운드-로빈 비트(748)에 기초해 쓰레드 문맥 각각의 명령어(206)를 위한 DS_TC_priority(208)를 발생시킨다.
블록 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로 복귀한다.
이제 도 9를 참조하면, 본 발명에 따른, 도 6의 정책 관리자(604) 및 TCSchedule 레지스터(902)를 예시하는 흐름도가 도시된다.
마이크로프로세서(100)는 각각의 쓰레드 문맥을 위한 TCSchedule 레지스터(902)를 포함한다. TCSchedule 레지스터(902)는 소프트웨어-프로그램 가능하고, 소프트웨어가 정책 관리자(614)에게 쓰레드 스케줄링 힌트를 제공하기 위한 수단을 제공한다. 일 실시예에서, TCSchedule 레지스터(902)는 도 6 및 표 1a 및 표 1b와 관련하여 앞서 논의된 Coprocessor 0 레지스터내에, 특히, 정책 관리자(604)내에 구비된다. TCSchedule 레지스터(902)는 6개 필드들: TC_LEVEL_PARAM1(908), TC_LEVEL_PARAM2(906), TC_LEVEL_PARAM3(904), TC_RATE(912), OV(914), 및 PRIO(916)를 포함한다. 도 9의 실시예에서, TC_LEVEL_PARAM1(908), TC_LEVEL_PARAM2(906), TC_LEVEL_PARAM3(904), 및 TC_RATE(912) 필드들은 4개 비트들을 구비하고, PRIO(916) 필드는 2개 비트들을 구비하며, OV(914) 필드는 단일 비트이다.
도 9에 도시된 정책 관리자(604) 로직은 제어 로직(924); 그것들의 출력을 제어 로직(924)에 제공하도록 커플링된 비교기들(922); 그것의 출력을 비교기들(924)로의 입력으로서 제공하도록 커플링된 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)는 쓰레드 문맥의 소정 실행 속도, 즉, 매 유닛 시간당 완결될 명령어들의 수에 대한 지시이다. 도 9의 실시예에서, TC_RATE(912)는, 매 16 클록 사이클들마다 완결되어야 하는 쓰레드의 명령어들의 수를 지시한다. 방금 열거된 로직이 도 9에는 단 한번만 도시되지만, 로직은 각각의 쓰레드 문맥을 위해 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)내에서 복제된다.
정책 관리자(604)는 변경된 리키-버킷(leaky-bucket) 알고리즘을 이용해 스케줄러(108)의 하이-레벨 쓰레드 스케줄링 정책을 실현한다. TC_LEVEL(918) 레지스터는 버킷의 수위와 유사하다. TC_LEVEL(918)은 본질적으로, 쓰레드 문맥에 의해 수행되어야 하는 작업량의 측정치이다. 일 실시예에서, TC_LEVEL(918) 레지스터는 0으로 초기화된 12-비트 레지스터를 구비한다. 제어 로직(924)은, 먹스(926)가 어떤 입력을 선택하는지를 제어하기 위한 제어 신호(928)를 발생시킨다. 매 32 클록 사이클들마다, 먹스(926)는 TC_LEVEL(918) 레지스터에 저장하기 위한 증분기(936)의 출력을 선택하는데, TC_LEVEL(918) 레지스터는 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)의 TC_RATE(912) 값을 조정하는 것에 의해 쓰레드 문맥의 버킷에서의 가상 수위에 영향을 미칠 수 있다. 도 9의 실시예에서, TC_RATE(912)의 값은, 마이크로프로세서(100)가 쓰레드 문맥을 위해 실행하고자 하는 매 16 클록 사이클들마다의 명령어들의 수(the number of instructions per 16 clock cycles)를 지시한다.
리키-버킷에서의 수위가 증가함에 따라, 물이 좀더 높은 속도에서 누설되게 하는 수압도 증가한다. 유사하게, TC_LEVEL_PARAM 필드들(904/906/908)은, 가상 수압 범위들을 정의하는 일정하게 증가하는 값들을 갖도록 프로그램된다. 비교기들(922)은 TC_LEVEL(918)을 TC_LEVEL_PARAM들(904/906/908)과 비교하여 그것들의 결과를 제어 로직(924)에 제공하는데, 제어 로직(924)은, TC_LEVEL(918)이 해당되는 가상 수압 범위들의 그것에 기초해 PM_TC_priority(652)를 발생시킨다. 도 9의 리키-버킷에 의해 예시되는 바와 같이, 제어 로직(924)은, TC_LEVEL(918)의 최대 유효 니블(most significant nibble)이 TC_LEVEL_PARAM3(904) 값을 초과하면, 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를 요구한다. 도 9 및 그것에 관한 설명으로부터 관찰될 수 있는 바와 같이, 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)의 업데이트들을 일시적으로 디스에이블하고, 그에 따라, 쓰레드의 PM_TC_priority는 쓰레드가 YIELD 해제될 때까지 보존된다. 다른 실시예에서, 정책 관리자(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할 때, 부모 쓰레드 문맥을 위한 TC_RATE(912)는 그것과 자식 쓰레드 문맥 사이에서 균등하게 분할되는데, 다시 말해, 새로운 TC_RATE(912)는 2로 나눗셈된 예전의 TC_RATE(912)이다. 이것은, 쓰레드 문맥이 원래 할당된 것보다 좀더 많은 프로세싱 대역폭을 요청하는 것을 방지하는 이점을 가진다.
상기한 내용으로부터 관찰될 수 있는 바와 같이, 스케줄러(108)를 분기한는 것을 통해, 프로세서 코어(606)에 포함되어 있는 디스패치 스케줄러(602)는 비교적 간단해질 수 있고, 이로 인해, 디스패치 스케줄러(602)는 면적 및 전력의 관점에서 비교적 작아질 수 있어, 쓰레드 스케줄링 정책의 애플리케이션-특정 복잡도를 프로세서 코어(606) 외부의 정책 관리자(604)에 맡길 수 있다. 이것은, 일부 애플리케이션들이 복잡한 정책 관리자(604)를 요구하지 않을 수도 있고 그에 따라, 여기에서 설명되는 바와 같이, 스케줄러(108)가 분기되지 않았다면, 모든 애플리케이션들에 대해 부과될 추가적인 면적 및 전력 요구 사항들이 부담되지 않을 수 있으므로, 바람직스럽다.
이제 도 10을 참조하면, 본 발명에 따른, 도 9의 정책 관리자(604)의 동작을 예시하는 흐름도가 도시된다. 동작이 도 10에서는 단일 쓰레드 문맥만을 위해 도시되지만, 도 10에서 특정된 동작은 각각의 쓰레드 문맥을 위한 정책 관리자(604)내에서 발생한다. 흐름은 블록 1002에서 시작한다.
블록 1002에서, 정책 관리자(604)는 TC_LEVEL(918)을 0으로 초기화한다. 흐름은 블록 1004로 진행한다.
블록 1004에서, 정책 관리자(604)는 PM_gclk(658)의 일 틱(tick)을 대기한다. 흐름은 판정 블록 1006으로 진행한다.
판정 블록 1006에서, 정책 관리자(604)는, 흐름이 판정 블록 1006에 도달했던 마지막 시점 이후로 PM_gclk들(658)이 티킹(ticking)되어 왔는지의 여부를 판정한다. 그렇지 않다면, 흐름은 판정 블록 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_LEVEL_PARAM1(908) 값보다 큰지의 여부를 판정한다. 그렇지 않다면, 흐름은 블록 1036으로 진행하고; 그렇다면, 흐름은 블록 1034로 진행한다.
블록 1034에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 1의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.
블록 1036에서, 정책 관리자(604)는 PM_TC_priority(652)에 대해 0(최저 우선 순위)의 값을 발생시킨다. 흐름은 블록 1004로 복귀한다.
이제 도 11을 참조하면, 본 발명의 다른 실시예에 따른, 도 6의 디스패치 스케줄러(602) 및 도 2의 명령어 선택 로직(202)을 좀더 상세하게 예시하는 블록도가 도시된다. 도 11의 실시예는 도 7의 실시예와 유사하지만; 도 11의 실시예의 디스패치 스케줄러(602)는 명령어 프리-디코더(1108;instruction pre-decoder) 및 실속 가능성 우선 순위 발생기(1104)도 포함한다. 프리-디코더(1108)는 명령어(1114)를 프리-디코딩하여 명령어(1114)에 관한 레지스터 사용 정보(1106)를 발생시킨다. 일 실시예에서, 레지스터 사용 정보(1106)는, 레지스터 파일(112)의 어떤 레지스터들이 명령어의 소스 레지스터들로서 사용되는지 그리고 소스 레지스터가 실행 파이프라인(114)의 어떤 스테이지에서 필요한지를 특정한다. 추가적으로, 레지스터 사용 정보(1106)는, 레지스터 파일(112)의 어떤 레지스터가 명령어의 수신지 레지스터인지를 그리고 명령어의 결과가 실행 파이프라인(114)의 어떤 스테이지에서 수신지 레지스터에 저장될 준비를 갖추는지를 특정한다.
실속 가능성 우선 순위 발생기(1104)는 레지스터 사용 정보에 기초해 그리고 마이크로프로세서(100) 파이프라인으로부터 수신되는 프로세스 상태 정보(1112)에 기초해 명령어(1114)를 위한 실속 가능성 우선 순위(1102)를 발생시킨다. 프로세스 상태 정보(1112)는, 데이터 캐시(118)에서 로드가 누락되었는지의 여부; 누락중인 로드가 이미 인출되었는지의 여부; 실행 파이프라인에서 현재적으로 실행되고 있는 다른 명령어들의 (명령어 프리-디코더(1108)에 의해 발생된 레지스터 사용 정보(1106)를 포함할 수도 있는) 레지스터, 특히, 수신지 레지스터의 사용; 실행 파이프라인에서의 EHB 명령어의 존재; ALU가 현재적으로 다른 ALU 명령어를 바쁘게 실행중인지의 여부; 프리-디코딩되고 있는 명령어와 실행 파이프라인에서의 나머지 명령어들 사이의 현재적인 파이프라인 스테이지들의 수 등을 포함할 수도 있지만, 그것으로 제한되는 것은 아니다. 도 11의 실시예에서, 실속 가능성 우선 순위(1102)는 발행 가능 비트(746)와 PM_TC_priority 비트들(652) 사이에 포함되는 2개 비트들을 구비하여, 명령어 선택 로직(202)에 의해 도 2의 선택된 명령어(204)를 선택하는데 사용하기 위한 도 2의 6-비트 DS_TC_priority(208)를 형성한다. 다른 실시예에서, 실속 가능성 우선 순위(1102)의 2개 비트들은 PM_TC_priority(652)의 2개 비트들과 인터리빙된다. 일 실시예에서, 비트들은 최대 유효로부터 최소 유효에 이르는 다음 순서: 실속 가능성 우선 순위(1102)의 MSB, PM_TC_priority(652)의 MSB, 실속 가능성 우선 순위(1102)의 LSB, PM_TC_priority(652)의 LSB로 인터리빙된다. 이 실시예는, 실행 파이프라인(114)에 의한 전반적으로 높은 처리율을 유지하는데 도움이 되는 인터리브형 실시예이다.
실속 가능성 우선 순위(1102)는, 명령어가 그것의 레지스터 사용에 기초해 실속하지 않으면서 실행될 가능성을 지시한다. 일 실시예에서, 실속 가능성 우선 순위(1102)는 4개 우선 순위 레벨들을 생성하는 2개 비트들을 구비하고, 다음과 같이 실속 가능성 우선 순위 발생기(1104)에 의해 발생된다. 명령어가 실속하지 않을 것이 보장되면, 명령어에는 최고의 실속 가능성 우선 순위(1102)가 할당된다. 예를 들어, 명령어는 레지스터 의존성들을 갖지 않거나; 명령어는 그것 자체와 그것이 의존성을 갖는 명령어 사이에 파이프라인 스테이지들의 충분한 간격을 갖거나; 누락중인 로드 데이터가 복귀되었거나 선행 명령어의 결과가 이제는 이용 가능하다는 것과 같은 이유 때문에, 명령어에 의해 필요한 데이터가 이용 가능하므로, 더 이상 의존성은 존재하지 않는다. 명령어가 실속할 것이 보장된다면, 명령어에는 최저의 실속 가능성 우선 순위(1102)가 할당된다. 예를 들어, 명령어는 현재적으로 실행중인 EHB 명령어를 뒤따르거나; 명령어는 캐싱 불가능한 메모리 영역으로부터의 로드이거나; 명령어는 ITC 공간에서의 위치로부터의/위치로의 로드/저장이거나; 명령어는, 레지스터 의존성과 같은, 의존성으로 인해 그것 이전의 다른 명령어와 연속적으로 실행될 수 없다. 캐싱 가능한 로드 명령어에는 다음으로 낮은 우선 순위(next to lowest priority)가 할당된다. 예를 들어, 일 실시예에서, 곱셈, 나눗셈, 또는 부동 소수점 명령어의 결과에 의존하는 명령어와 같이, 명령어가 실속하지 않을 것이 보장되지는 않지만 실속하지 않을 가능성이 높을 경우, 명령어에는 다음으로 높은 최고 우선 순위가 할당된다.
일 실시예에서, 명령어(1114)는 쓰레드 문맥을 위한 명령어/스키드 버퍼(106)의 판독 포인터(326)에서의 도 2의 명령어(206), 즉, 발행에 적당한 후속 명령어인 쓰레드 문맥의 명령어(206)이다. 다른 실시예에서는, 타이밍 고려 사항들을 향상시키기 위해, 명령어 프리-디코더(1108)는, 명령어들이 도 1의 명령어/스키드 버퍼(106)에 저장될 때, 명령어들(1114)을 위해 레지스터 사용 정보(1106)를 발생시키고, 명령어(1114)와 함께, 레지스터 사용 정보(1106)를 명령어/스키드 버퍼(106)에 저장한다. 명령어(1114/206)가 명령어/스키드 버퍼(106)로부터 판독됨에 따라, 그 시점에서, 프리-디코딩된 레지스터 사용 정보(1106)가 실속 가능성 우선 순위 발생기(1104)에 제공된다. 다시 말해, 이 실시예에서는, 명령어/스키드 버퍼들(106)이 명령어 프리-디코더(1108)와 실속 가능성 우선 순위 발생기(1104) 사이에 커플링된다.
이제 도 12를 참조하면, 본 발명에 따른, 도 11의 디스패치 스케줄러(602)의 동작을 예시하는 흐름도가 도시된다. 도 12의 흐름도는 도 8의 흐름도와 유사하고, 유사한 번호의 블록들은 서로 비슷하다. 그러나, 도 12의 흐름도에서, 블록 808은 블록 1208로 대체된다. 추가적으로, 도 12의 흐름도는 추가적인 블록 1205를 포함한다. 흐름은 블록 804로부터 블록 1205로 진행한다.
블록 1205에서는, 각각의 쓰레드 문맥을 위해, 실속 가능성 우선 순위 발생기(1104)가, 도 11의 명령어(1114)에 대한 프로세스 상태(1112) 및 레지스터 사용 정보(1106)에 기초해, 명령어(1114)를 위한 실속 가능성 우선 순위(1102)를 발생시킨다. 흐름은 블록 1205로부터 판정 블록 806으로 진행한다.
판정 블록 806에서, 디스패치 스케줄러(602)는, 쓰레드 문맥들 각각을 위한 발행 가능(746) 신호를 조사하는 것에 의해, 발행 가능 명령어(206)를 가진 임의의 쓰레드 문맥들이 존재하는지의 여부를 판정한다. 그렇지 않다면, 흐름은, 하나 이상의 쓰레드 문맥이 발행 가능 명령어(206)를 가질 때까지 블록 804로 복귀하고; 그렇다면, 흐름은 블록 1208로 진행한다.
블록 1208에서, 디스패치 스케줄러(602)는, 쓰레드 문맥의 발행 가능(746) 비트, 쓰레드 문맥을 위해 디스패치하기 위한 후속 명령어(206)의 실속 가능성 우선 순위(1102), 쓰레드 문맥의 PM_TC_priority(652), 및 쓰레드 문맥의 PM_TC_priority(652)에 대한 라운드-로빈 비트(748)에 기초해, 쓰레드 문맥 각각의 명령어(206)를 위한 DS_TC_priority(208)를 발생시킨다. 흐름은 블록 1208로부터 블록 812로 진행한다.
이제 도 13을 참조하면, 본 발명의 다른 실시예에 따른, 도 1의 마이크로프로세서(100)의 동적으로 할당 가능한 공유되는 스키드 버퍼들을 예시하는 블록도가 도시된다. 마이크로프로세서(100)는 도 1의 명령어 인출기(104) 및 스케줄러(108)를 포함한다. 또한, 마이크로프로세서(100)는, 도 2의 DS_TC_priority 신호들(208)에 응답하여 선택된 명령어(204)를 출력하는 명령어 선택 로직(202)도 포함한다. 또한, 마이크로프로세서(100)는, 도 1의 명령어 인출기(104)가 그것들로 명령어들을 인출하는 복수개 개개 쓰레드 문맥들을 위한 복수개 명령어 버퍼들(1306)도 포함한다. 또한, 마이크로프로세서(100)는 복수개 스키드 버퍼들(1312)도 포함한다. 일 실시예에서, 명령어 버퍼들(1306) 및 스키드 버퍼들(1312) 각각은 도 3의 명령어/스키드 버퍼들(106)의 구조와 유사한 원형 FIFO를 구비한다. 바람직스럽게도, 스키드 버퍼들(1312)은 쓰레드 문맥들에 의해 공유되고 동적으로 할당되기 때문에, 스키드 버퍼들(1312)의 수는 쓰레드 문맥들의 수보다 작을 수도 있다. 도 13은, 스키드 버퍼 A, 스키드 버퍼 B, 및 스키드 버퍼 C로써 지시되는 3개의 스키드 버퍼들(1312)을 가진 실시예를 예시한다. 추가적으로, 각각의 스키드 버퍼(1312)는 연관된 할당 레지스터(1314;allocated register) 및 잠긴 레지스터(1316;locked register)를 가진다. 할당 레지스터(1314)는, 연관된 스키드 버퍼(1312)가 쓰레드 문맥에 의한 사용을 위해 할당되는지의 여부를 지시하고 그렇다면, 스키드 버퍼(1312)가 쓰레드 문맥들 중 어떤 것에 할당되는지를 지시한다. 마찬가지로, 잠긴 레지스터(1316)는, 연관된 스키드 버퍼(1312)가 쓰레드 문맥에 의한 사용을 위해 잠겼는지의 여부를 지시고 그렇다면, 스키드 버퍼(1312)가 쓰레드 문맥들 중 어떤 것을 위해 잠겼는지를 지시한다. 쓰레드 문맥들을 위해 스키드 버퍼들(1312)을 할당하고 잠기는 것은 도 14와 관련하여 다음에서 좀더 상세하게 논의된다.
또한, 마이크로프로세서(100)는 스키드 버퍼들(1312) 각각과 연관된 복수개 먹스들(1322)도 포함한다. 각각의 먹스(1322)는 그것과 연관된 스키드 버퍼(1312)의 입력에 커플링된 출력을 가진다. 각각의 먹스(1322)는 명령어 버퍼들(1306) 각각의 출력을 그것의 입력들로서 수신한다. 또한, 마이크로프로세서(100)는 명령어 버퍼들(1306) 각각과 연관된 복수개 먹스들(1324)도 포함한다. 각각의 먹스(1324)는 그것의 개개 쓰레드 문맥에 대한 도 2의 명령어(206)를 명령어 선택 로직(202)으로 출력한다. 각각의 먹스(1324)는 입력을 통해 그것의 개개 명령어 버퍼(1306)의 출력을 수신한다. 각각의 먹스(1324)는 스키드 버퍼들(1312) 각각의 출력을 그것의 나머지 입력들을 통해 수신한다.
도 2의 명령어/스키드 버퍼들(106)과 달리, 도 13의 스키드 버퍼들(1312)은 명령어 버퍼들(1306)과 구별되며, 필요에 따라, 쓰레드 문맥들에 의해 공유되고 동적으로 할당된다. 이것은 좀더 효율적인 명령어 버퍼링 솔루션(instruction buffering solution)을 제공할 수도 있는데, 특히, 공간 및 전력의 동일한 양이 주어진 상태에서의 좀더 높은 성능 솔루션 또는 성능의 유사한 레벨이 주어진 상태에서의 공간 및 전력 감소를 제공할 수도 있다. 또한, 마이크로프로세서(100)는 명령어 버퍼들(1306), 스키드 버퍼들(1312), 먹스들(1322 및 1324), 할당 레지스터들(1314), 및 잠긴 레지스터들(1316)의 동작을 제어하기 위한 버퍼 제어 로직(1332)도 포함한다. 이하에서는, 도 13의 명령어 버퍼들(1306) 및 스키드 버퍼들(1312)의 동작이 도 14와 관련하여 설명될 것이다.
이제 도 14를 참조하면, 본 발명에 따른, 도 13의 스키드 버퍼들의 동작을 예시하는 3개의 흐름도들이 도시된다. 흐름도들 각각은 상이한 이벤트 또는 이벤트들의 세트에 응답하여 도 13의 명령어 버퍼들(1306) 및 스키드 버퍼들(1312)에 의해 수행되는 액션들을 예시한다. 제1 흐름도의 흐름은 블록 1404에서 시작한다.
블록 1404에서, 도 6의 디스패치 스케줄러(602)는 명령어 버퍼(1306)로부터 명령어를 발행한다. 명령어 인출기(104)는 계속해서 쓰레드 문맥과 연관된 명령어 버퍼(1306)에 명령어들을 기입중이라는 것과, 특히, 블록 1404에서 발행된 명령어를 명령어 버퍼(1306)에 기입하였다는 것에 주의해야 한다. 흐름은 판정 블록 1406으로 진행한다.
판정 블록 1406에서, 버퍼 제어 로직(1332)은, 도 13의 할당 레지스터들(1314)을 판독하는 것에 의해 스키드 버퍼(1312)가 쓰레드 문맥을 위해 이미 할당되었는지의 여부를 판정한다. 그렇다면, 흐름은 블록 1412로 진행하고; 그렇지 않다면, 흐름은, 스키드 버퍼(1312)가 쓰레드 문맥을 위해 할당될 수 있는지의 여부를 판정하기 위한 판정 블록 1408로 진행한다.
판정 블록 1408에서, 버퍼 제어 로직(1332)은, 도 13의 잠긴 레지스터들(1316)을 판독하는 것에 의해 모든 스키드 버퍼들이 잠겼는지의 여부를 판정한다. 그렇지 않다면, 흐름은 블록 1414로 진행하고; 그렇다면, 스키드 버퍼(1312)가 쓰레드 문맥을 위해 할당될 수 없으므로, 흐름은 종료하는데, 이는, 쓰레드 문맥이 실행 파이프라인에 의해 후속적으로 플러시된다면, 플러시된 명령어들은 재인출되어야 한다는 것을 의미한다.
블록 1412에서는, 블록 1404에서 디스패치된 명령어가, 쓰레드 문맥을 위해 앞서 할당된 스키드 버퍼(1312)에 기입되고, 명령어는 명령어 버퍼(1306)로부터 제거된다. 흐름은 블록 1412에서 종료한다.
블록 1414에서, 버퍼 제어 로직(1332)은 쓰레드 문맥을 위해 스키드 버퍼(1312)를 할당한다. 일 실시예에서, 버퍼 제어 로직(1332)은, 할당된 스키드 버퍼(1312)와 연관된 할당 레지스터(1314)에 쓰레드 문맥 식별자를 기입하는 것에 의해, 쓰레드 문맥을 위한 스키드 버퍼(1312)를 할당한다. 일 실시예에서, 버퍼 제어 로직(1332)은 최대 공백 스키드 버퍼(1312)를 할당한다. 다른 실시예에서, 버퍼 제어 로직(1332)은 최근에 가장 적게 사용된 것에 기초해 스키드 버퍼들(1312)을 할당한다. 다른 실시예에서, 버퍼 제어 로직(1332)은 최근에 가장 적게 잠김 해제된 것에 기초해 스키드 버퍼들(1312)을 할당한다. 다른 실시예에서, 버퍼 제어 로직(1332)은, 현재 최저 우선 순위를 가진 쓰레드 문맥의 스키드 버퍼(1312)를 할당한다. 흐름은 블록 1414로부터 명령어를 할당된 스키드 버퍼(1312)에 기입하기 위한 블록 1412로 진행한다.
제2 흐름도의 흐름은 블록 1442에서 시작한다.
블록 1442에서, 도 1의 실행 유닛(114)은 쓰레드 문맥을 위한 실속 이벤트(126)를 시그널링한다. 흐름은 블록 1444로 진행한다.
블록 1444에서, 실행 유닛(114)은 쓰레드 문맥을 위한 TC_flush(122)를 시그널링한다. 흐름은 판정 블록 1446으로 진행한다.
판정 블록 1446에서, 버퍼 제어 로직(1332)은, 도 13의 할당 레지스터들(1314)을 판독하는 것에 의해, 스키드 버퍼(1312)가 쓰레드 문맥을 위해 할당되었는지의 여부를 판정한다. 그렇지 않다면, 흐름은 블록 1452로 진행하고; 그렇다면, 흐름은 블록 1448로 진행한다.
블록 1448에서, 버퍼 제어 로직(1332)은 쓰레드 문맥을 위해 할당된 스키드 버퍼(1312)를 잠근다. 일 실시예에서, 버퍼 제어 로직(1332)은, 스키드 버퍼(1312)와 연관된 잠긴 레지스터(1316)에 쓰레드 문맥 식별자를 기입하는 것에 의해 쓰레드 문맥을 위한 스키드 버퍼(1312)를 잠근다. 흐름은 블록 1448에서 종료한다.
블록 1452에서, 버퍼 제어 로직(1332)은 실행 유닛(114)에 의해 플러시된 쓰레드 문맥의 명령어 버퍼(1306)를 플러시한다. 흐름은 블록 1452에서 종료한다.
제3 흐름도의 흐름은 블록 1482에서 시작한다.
블록 1482에서, 실행 유닛(114)은 쓰레드 문맥을 위해 관련된 실속 안한 이벤트(128)를 시그널링한다. 흐름은 판정 블록 1484로 진행한다.
판정 블록 1484에서, 버퍼 제어 로직(1332)은, 잠긴 레지스터들(1316)을 판독하는 것에 의해, 스키드 버퍼(1312)가 쓰레드 문맥을 위해 잠겼는지의 여부를 판정한다. 그렇다면, 흐름은 블록 1488로 진행하고; 그렇지 않다면, 흐름은 블록 1486으로 진행한다.
블록 1486에서, 스케줄러(108)는 쓰레드 문맥과 연관된 명령어 버퍼(1306)로부터 쓰레드 문맥을 위한 명령어들을 발행한다. 스키드 버퍼(1312)가 쓰레드 문맥을 위해 잠기지 않았으므로, 이 명령어들은 명령어 버퍼(1306)로 재인출되어야 한다는 것에 주의해야 한다. 흐름은 블록 1486에서 종료한다.
블록 1488에서, 스케줄러(108)는, 예를 들어, 예외, 인터럽트, 또는 분기 예측 실패 정정(branch misprediction correction)에 응답하여, 스키드 버퍼(1312)가 공백일 때까지 또는 스키드 버퍼(1312)가 플러시될 때까지, 제2 흐름도의 블록 1448에서 쓰레드 문맥을 위해 잠긴 스키드 버퍼(1312)로부터 쓰레드 문맥을 위한 명령어들을 발행한다. 이 명령어들은 바람직스럽게도 재인출될 필요가 없었다는 것에 주의해야 한다. 흐름은 블록 1492로 진행한다.
블록 1492에서, 버퍼 제어 로직(1332)은 제2 흐름도의 블록 1448에서 쓰레드 문맥을 위해 잠겼던 스키드 버퍼(1312)를 잠김 해제 한다. 흐름은 블록 1492에서 종료한다.
이제 도 15를 참조하면, 본 발명의 다른 실시예에 따른, 모든 쓰레드 문맥들에 의해 공유되는 도 1의 마이크로프로세서(100)의 단일 명령어/스키드 버퍼를 예시하는 블록도가 도시된다. 도 15의 마이크로프로세서(100)는 도 1의 명령어 인출기(104) 및 스케줄러(108)를 포함한다. 또한, 마이크로프로세서(100)는, 명령어 인출기(104)가 그것으로 모든 쓰레드 문맥들을 위한 명령어들을 인출하는 단일 명령어/스키드 버퍼(1506)도 포함한다. 또한, 마이크로프로세서(100)는, 스케줄러(108)로부터 도 2의 DS_TC_priority 신호들(208)을 수신하는 버퍼 제어 로직(1502)도 포함한다. 버퍼 제어 로직(1502)은, 실행 유닛들(114)로의 제공을 위해 도 2의 선택된 명령어(204)를 출력하도록 명령어/스키드 버퍼(1506)를 제어한다.
도 15의 단일 명령어/스키드 버퍼(1506)는 모든 쓰레드 문맥들로부터의 명령어들을 저장하기 위한 RAM(random access memory)이다. 따라서, 버퍼 제어 로직(1502)은 모든 쓰레드 문맥들에 걸쳐, 도 3과 관련하여 상술된 것들과 유사하게 기능하는 단일 기입 포인터(WP) 및 full_count를 보유한다. 특히, 기입 포인터는, 명령어의 쓰레드 문맥과 무관하게, 기입될 RAM(1506)에서의 후속 위치의 어드레스를 특정한다. 마찬가지로, full_count는, 명령어의 쓰레드 문맥과 무관하게, 명령어가 RAM(1506)에 기입될 때마다 증가되고, 명령어가 실행을 위해 커밋될 때마다 감소된다.
그에 비해, 버퍼 제어 로직(1502)은, 도 3과 관련하여 상술된 것들과 유사하게, 각각의 쓰레드 문맥을 위해 별도의 판독 포인터(RP), 커밋 포인터(CP), 및 empty_count를 보유한다. 특히, 판독 포인터는 개개 쓰레드 문맥을 위해 판독될 RAM(1506)에서의 후속 위치의 어드레스를 특정하고; 커밋 포인터는 개개 쓰레드 문맥을 위해 커밋될 후속 명령어의 RAM(1506)에서의 위치의 어드레스를 지시하며; empty_count는 개개의 쓰레드 문맥을 위해 RAM(1506)으로 명령어가 기입될 때마다 증가되고 스케줄러(108)가 개개의 쓰레드 문맥을 위해 RAM(1506)으로부터 명령어를 판독할 때마다 감소된다.
일 실시예에서, 버퍼 제어 로직(1502)은, 명령어들이 RAM(1506)으로 인출되었던 순서로 쓰레드 문맥을 위한 유효한 명령어들의 RAM(1506)내에서의 위치들을 특정하는, 각각의 쓰레드 문맥을 위한 링킹된 리스트(linked-list)를 보유한다. 링킹된 리스트는 명령어가 RAM(1506)에 기입될 때마다 업데이트되고, 각각의 쓰레드 문맥을 위한 판독 포인터 및 커밋 포인터를 업데이트하는데 사용된다.
버퍼 제어 로직(1502)은, 스케줄러(108)가 명령어를 요청할 때, 스케줄러(108)로부터 DS_TC_priority 신호들(208)을 수신하고, 버퍼 제어 로직(1502)은 응답하여 쓰레드 문맥들 중 하나를 명령어 디스패치를 위해 선택하며, RAM(1506)을 위한 적합한 어드레스를 발생시켜 RAM(1506)이 DS_TC_priority 신호들(208)에 의해 지시되는 최고 우선 순위를 가진 쓰레드 문맥의 명령어(204)를 출력하게 한다.
본 발명과 그것의 목적들, 사양들, 및 이점들이 상세하게 설명되었지만, 다른 실시예들도 본 발명에 의해 망라된다. 예를 들어, 스케줄러(108)가 분기되며 파라미터화된 리키-버킷 스케줄링 정책이 프로세서 코어(606) 외부, 즉, 프로세서(100)의 고객-변경 가능 부분 외부의 스케줄러(108) 부분에 포함되는 실시예들이 설명되었지만, 파라미터화된 리키-버킷 스케줄러를 이용하는 것이 분기 스케줄러로 제한되는 것은 아니며, 비-분기 스케줄러 뿐만 아니라 여러 가지 방식들 중 어느 하나의 방식으로 분할된 스케줄러에도 적용될 수 있다는 것을 이해할 수 있어야 한다. 또한, 정책 관리자(604)가 리키-버킷 스케줄링 정책을 강제하는 분기 스케줄러가 설명되었지만, 분기 스케줄러(108)가 리키-버킷 쓰레드 스케줄링 정책으로 제한되는 것은 아니며; 오히려, 분기 스케줄러의 정책 관리자에 의해 강제되는 쓰레드 스케줄링 정책이 임의의 쓰레드 스케줄링 알고리즘을 따를 수도 있다. 더 나아가, 실행을 위해 명령어가 커밋되었다는 지시에 기초해, 정책 관리자(604)가 쓰레드 문맥 우선 순위들을 업데이트하는 실시예가 설명되었지만, 다른 실시예들에서, 정책 관리자(604)는, (PM_TC_inst_issued 신호들(646)에 의해 지시되는 바와 같이) 명령어가 발행되었다는 지시, 명령어가 완결되었거나 마이크로프로세서(100)로부터 폐기되었다는 지시, 또는 소정의 다른 명령어 실행 관련 지시와 같은, 프로세서 코어(606)로부터의 다른 정보에 기초해 쓰레드 문맥 우선 순위들을 업데이트할 수도 있다. 추가적으로, TC_RATE(912)를 사용해 TC_LEVEL(918)을 업데이트하기 위한 특정 계산이 설명되었지만, TC_LEVEL(918)은 TC_RATE(912)를 사용하는 다른 방식들에 따라 업데이트될 수도 있다.
본 발명의 여러 가지 실시예들이 상술되었지만, 그것들은, 한정이 아닌, 일례로써 제시되었다는 것을 이해할 수 있어야 한다. 관련된 컴퓨터 업계들의 당업자들이라면, 발명의 정신 및 범위를 벗어나지 않으면서, 형태 및 세부 사항에서의 여러 가지 변화들이 이루어질 수 있다는 것을 분명히 알 수 있을 것이다.
예를 들어, (예를 들어, 중앙 처리 장치(CPU), 마이크로프로세서, 마이크로컨트롤러, 디지털 신호 처리기(DSP), 프로세서 코어, SOC(System on Chip), 또는 임의의 다른 프로그램 가능 디바이스내의 또는 거기에 커플링된) 하드웨어를 사용하는 이외에, 구현들은, 예를 들어, 소프트웨어를 저장하도록 구성된 컴퓨터 사용 가능(예를 들어, 판독 가능) 매체에 배치된 소프트웨어(예를 들어, 컴퓨터 판독 가능 코드, 프로그램 코드, 명령어들 및/또는, 소스, 오브젝트, 또는 기계어와 같은, 임의 형태로 배치된 데이터)로 구체화될 수도 있다. 그러한 소프트웨어는, 예를 들어, 여기에서 설명된 장치 및 방법들의 함수, 가공, 모델링, 시뮬레이션, 기술(description), 및/또는 테스팅을 가능하게 할 수 있다. 예를 들어, 이것은 범용 프로그래밍 언어들(예를 들어, C, C++), GDSII 데이터베이스들, Verilog HDL(hardware description languages), VHDL 등을 포함하는 HDL, 또는 이용 가능한 다른 프로그램들, 데이터베이스들, 및/또는 회로(즉, 스케메틱(schematic)) 캡처 도구들을 사용해 실현될 수 있다. 그러한 소프트웨어는 반도체, 자기 디스크, 및 광학 디스크(예를 들어, CD-ROM, DVD-ROM 등)를 포함하는 임의의 공지된 컴퓨터 사용 가능 매체에 그리고 컴퓨터 사용 가능(예를 들어, 판독 가능) 전송 매체(예를 들어, 반송파 또는 디지털, 광학, 또는 아날로그-기반 매체를 포함하는 임의의 다른 매체)에 구현된 컴퓨터 데이터 신호로서 배치될 수 있다. 이와 같이, 소프트웨어는 인터넷 및 인트라넷들을 포함하는 통신 네트워크들을 통해 전송될 수 있다.
여기에서 설명된 장치 및 방법은, (예를 들어, HDL로 구현된) 마이크로 프로세서 코어와 같은, 반도체 IP(intellectual property) 코어에 포함될 수도 있고 집적 회로들의 제품에서 하드웨어로 변환될 수도 있다는 것을 이해할 수 있을 것이다. 추가적으로, 여기에서 설명된 장치 및 방법들은 하드웨어와 소프트웨어의 조합으로서 구현될 수도 있다. 이와 같이, 본 발명은 상술된 예시적 실시예들 중 어느 것에 의해 제한되어서는 안되며, 다음의 청구항들 및 그것들의 등가물들에 따라서만 정의되어야 한다.

Claims (101)

  1. 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서(multithreading processor)에서 명령어들을 디스패치하기 위한 분기 스케줄러로서,
    상기 복수개 쓰레드들의 명령어들을 상기 프로세서의 하나 이상의 실행 유닛으로 발행하도록 구성된 제1 스케줄러 로직;
    상기 복수개 쓰레드들의 스케줄링 정책을 강제하기 위한 제2 스케줄러 로직; 및
    상기 제2 스케줄러 로직을 상기 제1 스케줄러 로직에 그리고 상기 하나 이상의 실행 유닛에 커플링하는 인터페이스
    를 포함하고,
    상기 인터페이스는,
    상기 제1 스케줄러 로직이 상기 제2 스케줄러 로직으로부터 상기 복수개 쓰레드들 각각을 위한 우선 순위를 수신하기 위한 제1 신호들로서, 상기 제1 스케줄러 로직은 상기 우선 순위들에 기초해 상기 명령어들을 상기 하나 이상의 실행 유닛으로 발행하는, 제1 신호들; 및
    상기 제2 스케줄러 로직이 상기 복수개 쓰레드들 각각을 위한 명령어 실행 정보를 수신하기 위한 제2 신호들로서, 상기 제2 스케줄러 로직은 상기 명령어 실행 정보에 기초해 상기 우선 순위들을 업데이트하는, 제2 신호들을 포함하는 것인 분기 스케줄러.
  2. 제1 항에 있어서,
    각각의 클록 사이클에서, 상기 제1 스케줄러 로직은, 상기 우선 순위들에 기초해, 상기 복수개 쓰레드들 중 어떤 것이 상기 명령어들을 상기 하나 이상의 실행 유닛으로 발행하는지를 선택하는 것인 분기 스케줄러.
  3. 제2 항에 있어서,
    각각의 클록 사이클에서, 상기 제1 스케줄러 로직은, 상기 우선 순위들에 기초해, 상기 명령어들을 상기 하나 이상의 실행 유닛으로 발행하기 위해, 상기 복수개 쓰레드들 중 하나를 선택하는 것인 분기 스케줄러.
  4. 제2 항에 있어서,
    각각의 클록 사이클에서, 상기 제1 스케줄러 로직은, 상기 우선 순위들에 기초해, 상기 명령어들을 상기 하나 이상의 실행 유닛으로 발행하기 위해, 상기 복수개 쓰레드들 중 하나 이상을 선택하는 것인 분기 스케줄러.
  5. 제1 항에 있어서,
    상기 인터페이스는,
    상기 제2 스케줄러 로직이 상기 제1 스케줄러 로직으로부터 상기 복수개 쓰 레드들 각각을 위한 상태 정보를 수신하기 위한 제3 신호들을 더 포함하고, 상기 제2 스케줄러 로직은 상기 상태 정보에 기초해 상기 우선 순위들을 업데이트하는 것인 분기 스케줄러.
  6. 제5 항에 있어서,
    상기 상태 정보는, 상기 제1 스케줄러 로직이 상기 복수개 쓰레드들 각각을 위해 명령어들을 발행하는 것이 차단되는지의 여부에 대한 지시를 포함하는 것인 분기 스케줄러.
  7. 제1 항에 있어서,
    상기 복수개 쓰레드들 각각의 상기 우선 순위는 복수개의 소정 우선 순위 레벨들 중 하나를 포함하는 것인 분기 스케줄러.
  8. 제1 항에 있어서,
    상기 명령어 실행 정보는, 상기 복수개 쓰레드들 중 어떤 것의 명령어가 실행을 위해 커밋되었는지에 대한 지시로서, 상기 하나 이상의 실행 유닛에 의해 제공되는, 지시를 포함하는 것인 분기 스케줄러.
  9. 제1 항에 있어서,
    상기 명령어 실행 정보는, 상기 복수개 쓰레드들 중 어떤 것의 명령어가 완 결되었는지에 대한 지시로서, 상기 하나 이상의 실행 유닛에 의해 제공되는, 지시를 포함하는 것인 분기 스케줄러.
  10. 제1 항에 있어서,
    상기 명령어 실행 정보는, 상기 복수개 쓰레드들 중 어떤 것의 명령어가 발행되었는지에 대한 지시로서, 상기 제1 스케줄러 로직에 의해 제공되는, 지시를 포함하는 것인 분기 스케줄러.
  11. 제1 항에 있어서,
    상기 제1 스케줄러 로직은 고객에 의해 변경 불가능한 것인 분기 스케줄러.
  12. 제1 항에 있어서,
    상기 제2 스케줄러 로직은 고객에 의해 변경 가능한 것인 분기 스케줄러.
  13. 제1 항에 있어서,
    상기 복수개 쓰레드들 각각은 명령어 스트림을 포함하는 것인 분기 스케줄러.
  14. 제13 항에 있어서,
    상기 프로세서는,
    상기 명령어 스트림의 실행 상태를 설명하기 위해 상기 복수개 쓰레드들 각각과 연관된, 한 세트의 저장 소자들을 더 포함하는 것인 분기 스케줄러.
  15. 제14 항에 있어서,
    상기 한 세트의 저장 소자들 각각은,
    프로그램 카운터를 더 포함하는 것인 분기 스케줄러.
  16. 제15 항에 있어서,
    상기 한 세트의 저장 소자들 각각은,
    범용 레지스터 세트를 더 포함하는 것인 분기 스케줄러.
  17. 제1 항에 있어서,
    상기 프로세서는 프로세서 코어를 포함하고, 상기 프로세서 코어는 상기 제1 스케줄러 로직은 포함하고, 상기 제2 스케줄러 로직을 배제하는 것인 분기 스케줄러.
  18. 제17 항에 있어서,
    상기 프로세서 코어는 합성 가능한 것인 분기 스케줄러.
  19. 제17 항에 있어서,
    상기 프로세서 코어는 복수의 고객들을 위해 재사용 가능한 것인 분기 스케줄러.
  20. 제1 항에 있어서,
    상기 제1 스케줄러 로직은, 상기 복수개 쓰레드들로부터 명령어를 발행하기 위해, 상기 프로세서에 의해 발행 가능 명령어가 인출되고 상기 우선 순위들에 의해 특정된 최고 우선 순위를 가진, 상기 복수개 쓰레드들 중 하나 이상을 선택하도록 구성되는 것인 분기 스케줄러.
  21. 제20 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어 및 상기 최고 우선 순위를 가지면, 상기 제1 스케줄러 로직은 상기 복수개 쓰레드들 중 상기 하나 이상을 라운드-로빈 방식(round-robin manner)으로 선택하도록 구성되는 것인 분기 스케줄러.
  22. 제20 항에 있어서,
    상기 복수개 쓰레드들의 상기 인출된 발행 가능 명령어들의 레지스터 의존성들을 점검하기 위한 로직을 더 포함하고, 상기 복수개 쓰레드들 중 하나 이상이 상기 최고 우선 순위를 가지면, 상기 제1 스케줄러 로직은 상기 레지스터 의존성들에 기초해 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 선택하도록 구성되는 것인 분기 스케줄러.
  23. 제22 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어, 상기 최고 우선 순위, 및 동일한 상기 레지스터 의존성들을 가지면, 상기 제1 스케줄러 로직은 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 라운드-로빈 방식으로 선택하도록 구성되는 것인 분기 스케줄러.
  24. 제1 항에 있어서,
    상기 인터페이스는,
    상기 제2 스케줄러 로직이 상기 쓰레드를 위한 명령어들의 발행을 차단할 것인지의 여부를 상기 복수개 쓰레드들 각각을 위해 상기 제1 스케줄러 로직으로 전달하기 위한 제3 신호들을 더 포함하는 것인 분기 스케줄러.
  25. 제1 항에 있어서,
    상기 인터페이스는,
    상기 제1 스케줄러 로직으로부터 상기 제2 스케줄러 로직으로의 클록 신호를 더 포함하는 것인 분기 스케줄러.
  26. 제1 항에 있어서,
    컴퓨터 판독 가능 프로그램 코드를 가진 컴퓨터 사용 가능 매체를 포함하는 컴퓨터 프로그램 제품이, 상기 스케줄러로 하여금, 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서에서 명령어들을 디스패치하도록 하고, 상기 컴퓨터 프로그램 제품은 컴퓨팅 디바이스와의 사용을 위한 것인 분기 스케줄러.
  27. 제1 항에 있어서,
    컴퓨터 판독 가능 프로그램 코드를 포함하는 전송 매체에 구현된 컴퓨터 데이터 신호가 상기 스케줄러를 제공하는 것인 분기 스케줄러.
  28. 멀티쓰레딩 프로세서로서,
    상기 프로세서에 의해 병행하여 실행되는 복수개 쓰레드들의 명령어 디스패치를 스케줄링하기 위한 정책을 강제하도록 구성된 쓰레드 스케줄링 정책 로직;
    상기 쓰레드 스케줄링 정책 로직에 커플링된 프로세서 코어로서,
    명령어들을 실행하기 위한 하나 이상의 실행 파이프라인; 및
    상기 쓰레드 스케줄링 정책 로직으로부터 수신되는 상기 정책에 기초해 상기 복수개 쓰레드들의 명령어들을 상기 실행 파이프라인으로 디스패치하도록 커플링된 명령어 디스패처를 포함하는, 프로세서 코어; 및
    상기 쓰레드 스케줄링 정책 로직과 상기 프로세서 코어를 커플링하기 위한 인터페이스로서,
    상기 쓰레드 스케줄링 정책 로직이, 상기 정책을 강제하기 위해, 상기 복수개 쓰레드들 각각을 위한 디스패치 우선 순위를 상기 명령어 디스패처로 전달 하기 위한 우선 순위 지시자들; 및
    상기 하나 이상의 실행 파이프라인이 상기 복수개 쓰레드들 각각을 위해, 상기 하나 이상의 실행 파이프라인이 상기 쓰레드를 위한 명령어를 실행하도록 커밋되었는지의 여부에 대한 지시를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 실행 지시자들을 구비하는, 인터페이스를 구비하는 멀티쓰레딩 프로세서.
  29. 제28 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직은 물리적으로 상기 프로세서 코어의 외부에 위치하는 것인 멀티쓰레딩 프로세서.
  30. 제28 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직은 고객에 의해 변경 가능하고 상기 프로세서 코어는 고객에 의해 변경 불가능한 것인 멀티쓰레딩 프로세서.
  31. 제28 항에 있어서,
    상기 명령어 디스패처는, 명령어를 발행하기 위해, 발행 가능 명령어가 상기 프로세서에 의해 인출되고 상기 우선 순위들에 의해 특정된 최고 우선 순위를 가진, 상기 복수개 쓰레드들 중 하나 이상을 선택하도록 구성되는 것인 멀티쓰레딩 프로세서.
  32. 제31 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어 및 상기 최고 우선 순위를 가지면, 상기 명령어 디스패처는 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 라운드-로빈 방식으로 선택하도록 구성되는 것인 멀티쓰레딩 프로세서.
  33. 제31 항에 있어서,
    상기 복수개 쓰레드들의 상기 인출된 발행 가능 명령어들의 레지스터 의존성들을 점검하기 위한 로직을 더 포함하고, 상기 복수개 쓰레드들 중 하나 이상이 상기 최고 우선 순위를 가지면, 상기 명령어 디스패처는 상기 레지스터 의존성들에 기초해 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 선택하도록 구성되는 것인 멀티쓰레딩 프로세서.
  34. 제33 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어, 상기 최고 우선 순위, 및 동일한 상기 레지스터 의존성들을 가지면, 상기 명령어 디스패처는 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 라운드-로빈 방식으로 선택하도록 구성되는 것인 멀티쓰레딩 프로세서.
  35. 제28 항에 있어서,
    컴퓨터 판독 가능 프로그램 코드를 가진 컴퓨터 사용 가능 매체를 포함하는 컴퓨터 프로그램 제품이, 상기 프로세서로 하여금, 복수개 쓰레드들을 병행하여 실행하도록 하고, 상기 컴퓨터 프로그램 제품은 컴퓨팅 디바이스와의 사용을 위한 것인 멀티쓰레딩 프로세서.
  36. 제28 항에 있어서,
    컴퓨터-판독 가능 프로그램 코드를 포함하는 전송 매체에서 구현된 컴퓨터 데이터 신호가 상기 프로세서를 제공하는 것인 멀티쓰레딩 프로세서.
  37. 복수개 쓰레드들을 병행하여 실행하는 멀티쓰레딩 프로세서의 쓰레드 스케줄링 정책을 강제하기 위한 쓰레드 스케줄링 정책 관리자로서,
    각각의 프로세서 클록 사이클에서, 명령어가 상기 복수개 쓰레드들 각각을 위해 실행되었는지의 여부에 대한 지시를 수신하기 위한 제1 입력들;
    각각의 프로세서 클록 사이클에서, 상기 복수개 쓰레드들 각각을 위해 명령어 디스패치 우선 순위를 전송하기 위한 제1 출력들; 및
    상기 쓰레드 스케줄링 정책을 강제하기 위해 상기 제1 입력들에 기초해 상기 제1 출력들을 발생시키기 위한, 상기 제1 입력들에 커플링된, 로직을 포함하는 쓰레드 스케줄링 정책 관리자.
  38. 제37 항에 있어서,
    명령어가 실행되었는지의 여부에 대한 상기 지시는 상기 명령어가 실행을 위 해 디스패치되었는지의 여부를 지시하는 것인 쓰레드 스케줄링 정책 관리자.
  39. 제37 항에 있어서,
    명령어가 실행되었는지의 여부에 대한 상기 지시는 상기 명령어가 실행을 위해 커밋되었는지의 여부를 지시하는 것인 쓰레드 스케줄링 정책 관리자.
  40. 제37 항에 있어서,
    명령어가 실행되었는지의 여부에 대한 상기 지시는 상기 명령어의 실행이 완결되었는지의 여부를 지시하는 것인 쓰레드 스케줄링 정책 관리자.
  41. 제37 항에 있어서,
    상기 복수개 쓰레드들 각각의 상기 우선 순위는 복수개의 소정 우선 순위 레벨들 중 하나를 포함하는 것인 쓰레드 스케줄링 정책 관리자.
  42. 제37 항에 있어서,
    각각의 프로세서 클록 사이클에서, 상기 복수개 쓰레드들 각각을 위한 명령어들의 발행을 차단할 것인지의 여부에 대한 지시를 전송하기 위한 제2 출력들을 더 포함하는 것인 쓰레드 스케줄링 정책 관리자.
  43. 제37 항에 있어서,
    각각의 프로세서 클록 사이클에서, 상기 복수개 쓰레드들 각각을 위한 상태로서, 상기 쓰레드가 현재적으로 그로부터 명령어들이 발행되게 하는 것이 차단되는지의 여부를 지시하는, 상태를 수신하기 위한 제2 입력들을 더 포함하고,
    상기 로직은 부가적으로, 상기 제1 입력들 및 제2 입력들에 기초해, 상기 쓰레드 스케줄링 정책을 강제하기 위한 상기 제1 출력들을 발생시키도록 구성되는 것인 쓰레드 스케줄링 정책 관리자.
  44. 제37 항에 있어서,
    상기 복수개 쓰레드들 각각의 상기 우선 순위는 복수개의 소정 우선 순위 레벨들 중 하나를 포함하는 것인 쓰레드 스케줄링 정책 관리자.
  45. 제37 항에 있어서,
    컴퓨터 판독 가능 프로그램 코드를 가진 컴퓨터 사용 가능 매체를 포함하는 컴퓨터 프로그램 제품이, 상기 정책 관리자로 하여금, 복수개 쓰레드들을 병행하여 실행하는 멀티쓰레딩 프로세서의 쓰레드 스케줄링 정책을 강제하도록 하고, 상기 컴퓨터 프로그램 제품은 컴퓨팅 디바이스와의 사용을 위한 것인 쓰레드 스케줄링 정책 관리자.
  46. 제37 항에 있어서,
    컴퓨터-판독 가능 프로그램 코드를 포함하는 전송 매체에서 구현된 컴퓨터 데이터 신호가 상기 정책 관리자를 제공하는 것인 쓰레드 스케줄링 정책 관리자.
  47. 각각이 명령어들의 스트림을 포함하는 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서 코어로서,
    상기 프로세서 코어를 상기 프로세서 코어 외부의 쓰레드 스케줄링 정책 로직에 커플링하기 위한 인터페이스로서,
    상기 쓰레드 스케줄링 정책 로직이 상기 복수개 쓰레드들 각각의 우선 순위를 상기 프로세서 코어로 전달하기 위한 제1 신호들; 및
    상기 쓰레드 스케줄링 정책 로직이 상기 프로세서 코어로부터, 상기 쓰레드 스케줄링 정책 로직에 의해 상기 우선 순위들을 업데이트하는데 사용하기 위해, 상기 쓰레드들의 상기 명령어들의 실행에 관해 상기 복수개 쓰레드들 각각을 위한 정보를 수신하기 위한 제2 신호들을 포함하는, 인터페이스; 및
    상기 제1 신호들을 수신하고, 상기 제1 신호들을 통해 수신된 상기 우선 순위들에 기초해, 실행을 위해, 상기 복수개 쓰레드들 중 하나 이상으로부터 하나 이상의 명령어를 선택하도록 커플링된 스케줄러를 포함하는 멀티쓰레딩 프로세서 코어.
  48. 제47 항에 있어서,
    상기 스케줄러는 상기 프로세서 코어의 클록 사이클 각각에서 상기 하나 이상의 명령어를 선택하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  49. 제47 항에 있어서,
    상기 정보는, 상기 프로세서 코어가, 실행을 위해, 상기 복수개 쓰레드들 중 특정된 하나의 명령어를 커밋하였다는 지시를 포함하는 것인 멀티쓰레딩 프로세서 코어.
  50. 제49 항에 있어서,
    상기 프로세서 코어는, 상기 명령어가 상기 프로세서로부터 플러시되지 않을 것이 보장되면, 상기 명령어를 실행을 위해 커밋하였던 것인 멀티쓰레딩 프로세서 코어.
  51. 제49 항에 있어서,
    상기 프로세서 코어는, 상기 명령어가 상기 프로세서에 의해 완결될 것이 보장되면, 상기 명령어를 실행을 위해 커밋하였던 것인 멀티쓰레딩 프로세서 코어.
  52. 제47 항에 있어서,
    상기 정보는, 상기 프로세서 코어가 상기 복수개 쓰레드들 중 특정된 하나의 명령어를 완결하였다는 지시를 포함하는 것인 멀티쓰레딩 프로세서 코어.
  53. 제47 항에 있어서,
    상기 정보는, 상기 프로세서 코어가 상기 복수개 쓰레드들 중 특정된 하나의 명령어를 실행을 위해 발행하였다는 지시를 포함하는 것인 멀티쓰레딩 프로세서 코 어.
  54. 제47 항에 있어서,
    상기 인터페이스는,
    상기 쓰레드 스케줄링 정책 로직이 상기 프로세서 코어로부터, 상기 쓰레드 스케줄링 정책 로직에 의해 상기 우선 순위들을 업데이트하는데 사용하기 위해, 상기 복수개 쓰레드들 각각의 상태를 특정하기 위한 상태 정보를 수신하기 위한 제3 신호들을 더 포함하는 것인 멀티쓰레딩 프로세서 코어.
  55. 제54 항에 있어서,
    상기 상태 정보는, 상기 스케줄러가 상기 쓰레드로부터의 명령어들을 실행을 위해 발행하도록 하기 위해 상기 복수개 쓰레드들 각각이 차단되는지의 여부에 대한 지시를 포함하는 것인 멀티쓰레딩 프로세서 코어.
  56. 제47 항에 있어서,
    상기 인터페이스는,
    상기 쓰레드 스케줄링 정책 로직이 상기 복수개 쓰레드들 각각을 위해, 상기 쓰레드를 위한 명령어들의 발행을 차단할 것인지의 여부를 상기 스케줄러로 전달하기 위한 제3 신호들을 더 포함하는 것인 멀티쓰레딩 프로세서 코어.
  57. 제47 항에 있어서,
    상기 스케줄러는, 실행 파이프라인을 효율화하기 위해, 상기 복수개 쓰레드들 중 상기 하나 이상으로부터 상기 하나 이상의 명령어를 선택하여 명령어들로 가득 찬 상기 프로세서 코어의 상기 실행 파이프라인을 추적하는 것을 시도하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  58. 제47 항에 있어서,
    상기 스케줄러는, 발행 가능 명령어가 상기 프로세서에 의해 인출되고 상기 우선 순위들에 의해 특정된 최고 우선 순위를 가진, 상기 복수개 쓰레드들 중 상기 하나 이상을 선택하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  59. 제58 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어 및 상기 최고 우선 순위를 가지면, 상기 스케줄러는 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 라운드-로빈 방식으로 선택하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  60. 제58 항에 있어서,
    상기 복수개 쓰레드들의 상기 인출된 발행 가능 명령어들의 레지스터 의존성들을 점검하기 위한 로직을 더 포함하고, 상기 복수개 쓰레드들 중 하나 이상이 상 기 최고 우선 순위를 가지면, 상기 스케줄러는 상기 레지스터 의존성들에 기초해 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 선택하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  61. 제60 항에 있어서,
    상기 복수개 쓰레드들 중 하나 이상이 상기 인출된 발행 가능 명령어, 상기 최고 우선 순위, 및 동일한 상기 레지스터 의존성들을 가지면, 상기 스케줄러는 상기 복수개 쓰레드들 중 상기 하나 이상에서 하나를 라운드-로빈 방식으로 선택하도록 구성되는 것인 멀티쓰레딩 프로세서 코어.
  62. 제47 항에 있어서,
    상기 복수개 쓰레드들 각각의 상기 우선 순위는 복수개의 소정 우선 순위 레벨들 중 하나를 포함하는 것인 멀티쓰레딩 프로세서 코어.
  63. 제47 항에 있어서,
    상기 프로세서 코어는, 고객에 의해 변경 불가능하며 재사용 가능한 코어를 포함하는 것인 멀티쓰레딩 프로세서 코어.
  64. 제47 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직은 고객에 의해 변경 가능한 로직을 포함하 는 것인 멀티쓰레딩 프로세서 코어.
  65. 제47 항에 있어서,
    상기 프로세서 코어는 합성 가능한 것인 멀티쓰레딩 프로세서 코어.
  66. 제47 항에 있어서,
    상기 인터페이스는,
    상기 스케줄러로부터 상기 쓰레드 스케줄링 정책 로직으로의 클록 신호를 더 포함하는 것인 멀티쓰레딩 프로세서 코어.
  67. 제47 항에 있어서,
    컴퓨터 판독 가능 프로그램 코드를 가진 컴퓨터 사용 가능 매체를 포함하는 컴퓨터 프로그램 제품이, 상기 프로세서 코어로 하여금, 복수개 쓰레드들 - 상기 복수개 쓰레드들 각각은 명령어들의 스트림을 구비함 - 을 병행하여 실행하도록 하고, 상기 컴퓨터 프로그램 제품은 컴퓨팅 디바이스와의 사용을 위한 것인 멀티쓰레딩 프로세서 코어.
  68. 제47 항에 있어서,
    컴퓨터-판독 가능 프로그램 코드를 포함하는 전송 매체에서 구현된 컴퓨터 데이터 신호가 상기 프로세서 코어를 제공하는 것인 멀티쓰레딩 프로세서 코어.
  69. 멀티쓰레딩 프로세서에서 병행하여 실행중인 복수개 쓰레드들을 스케줄링하 기 위한 방법으로서,
    제1 클록 사이클 동안, 쓰레드 스케줄링 정책 로직에 의해 상기 복수개 쓰레드들 각각을 위한 쓰레드 스케줄링 우선 순위를 명령어 디스패치 로직으로 시그널링하는 단계; 및
    상기 우선 순위들을 시그널링하는 단계에 응답하여, 제2 클록 사이클 동안, 실행을 위해, 상기 명령어 디스패치 로직에 의해 상기 복수개 쓰레드들로부터 하나 이상의 명령어를 디스패치하는 단계
    를 포함하는 스케줄링 방법.
  70. 제69 항에 있어서,
    상기 제1 클록 사이클에 후속하는 제3 클록 사이클 동안, 실행 로직에 의해, 상기 실행 로직이 상기 복수개 쓰레드들 각각을 위해 명령어를 실행하였는지의 여부에 대한 지시를 상기 쓰레드 스케줄링 정책 로직으로 시그널링하는 단계를 더 포함하는 것인 스케줄링 방법.
  71. 제70 항에 있어서,
    상기 지시는, 상기 실행 로직이 상기 명령어를 실행을 위해 커밋하였는지의 여부를 지시하는 것인 스케줄링 방법.
  72. 제70 항에 있어서,
    상기 지시는, 상기 명령어가 실행을 위해 상기 실행 로직으로 디스패치되었는지의 여부를 지시하는 것인 스케줄링 방법.
  73. 제70 항에 있어서,
    상기 지시는, 상기 명령어의 실행이 완결되었는지의 여부를 지시하는 것인 스케줄링 방법.
  74. 제70 항에 있어서,
    상기 실행 로직에 의해 상기 쓰레드 스케줄링 정책 로직으로 상기 지시를 시그널링하는 단계에 응답하여, 제4 클록 사이클 동안, 상기 쓰레드 스케줄링 정책 로직에 의해 상기 복수개 쓰레드들 각각을 위한 제2 쓰레드 스케줄링 우선 순위를 상기 명령어 디스패치 로직으로 시그널링하는 단계를 더 포함하는 스케줄링 방법.
  75. 제69 항에 있어서,
    상기 제1 클록 사이클 이전에, 상기 명령어 디스패치 로직에 의해 상기 복수개 쓰레드들 각각의 상태를 상기 쓰레드 스케줄링 정책 로직으로 시그널링하는 단계를 더 포함하고,
    상기 제1 클록 사이클 동안, 상기 쓰레드 스케줄링 정책 로직에 의해 상기 복수개 쓰레드들 각각을 위한 상기 쓰레드 스케줄링 우선 순위를 상기 명령어 디스패치 로직으로 시그널링하는 단계는, 상기 명령어 디스패치 로직에 의해 상기 복수 개 쓰레드들 각각의 상태를 상기 쓰레드 스케줄링 정책 로직으로 시그널링하는 단계에 응답하여 수행되는 것인 스케줄링 방법.
  76. 제69 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직에 의해, 상기 복수개 쓰레드들 각각을 위해, 상기 쓰레드를 위한 명령어들을 디스패치하는 것을 차단할 것인지의 여부에 대한 지시를 상기 명령어 디스패치 로직으로 시그널링하는 단계; 및
    명령어들을 디스패치하는 것을 차단하기 위해, 상기 쓰레드 스케줄링 정책 로직에 의해 시그널링되는 상기 복수개 쓰레드들 각각으로부터의 명령어들을 상기 명령어 디스패치 로직에 의해 상기 디스패치하는 단계를 중단하는 단계
    를 더 포함하는 스케줄링 방법.
  77. 제69 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직은 고객에 의해 개별화되고, 상기 명령어 디스패치 로직은 복수의 고객들을 위해 재사용 가능한 것인 스케줄링 방법.
  78. 제69 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직은 상기 프로세서의 코어 외부에 위치하고, 상기 명령어 디스패치 로직은 상기 코어 내부에 위치하는 것인 스케줄링 방법.
  79. 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서에서 분기 스케줄러가 명령어들을 디스패치하도록 하기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있고 컴퓨팅 디바이스에의 사용을 위한 컴퓨터 판독가능 기록 매체에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 복수개 쓰레드들의 명령어들을 상기 프로세서의 하나 이상의 실행 유닛으로 발행하도록 구성된 제1 스케줄러 로직을 제공하기 위한 제1 프로그램 코드;
    상기 복수개 쓰레드들의 스케줄링 정책을 강제하기 위한 제2 스케줄러 로직을 제공하기 위한 제2 프로그램 코드; 및
    상기 제2 스케줄러 로직을 상기 제1 스케줄러 로직 및 상기 하나 이상의 실행 유닛에 커플링하는 인터페이스를 제공하기 위한 제3 프로그램 코드를 포함하며,
    상기 인터페이스는,
    상기 제1 스케줄러 로직이 상기 제2 스케줄러 로직으로부터 상기 복수개 쓰레드들 각각을 위한 우선 순위를 수신하기 위한 제1 신호들로서, 상기 제1 스케줄러 로직은 상기 우선 순위들에 기초해 상기 명령어들을 상기 하나 이상의 실행 유닛으로 발행하는, 제1 신호들; 및
    상기 제2 스케줄러 로직이 상기 복수개 쓰레드들 각각을 위한 명령어 실행 정보를 수신하기 위한 제2 신호들로서, 상기 제2 스케줄러 로직은 상기 명령어 실행 정보에 기초해 상기 우선 순위들을 업데이트하는, 제2 신호들을 구비하는 것인 컴퓨터 판독가능 기록 매체.
  80. 제79 항에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 제2 스케줄러 로직이 상기 제1 스케줄러 로직으로부터 상기 복수개 쓰레드들 각각을 위한 상태 정보를 수신하기 위한 제3 신호들을 제공하기 위한 제4 프로그램 코드를 더 포함하고, 상기 제2 스케줄러 로직은 상기 상태 정보에 기초해 상기 우선 순위들을 업데이트하는 것인 컴퓨터 판독가능 기록 매체.
  81. 멀티쓰레딩 프로세서를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있고 컴퓨팅 디바이스에의 사용을 위한 컴퓨터 판독가능 기록 매체에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 프로세서에 의해 병행하여 실행되는 복수개 쓰레드들의 명령어 디스패치를 스케줄링하기 위한 정책을 강제하도록 구성된 쓰레드 스케줄링 정책 로직을 제공하기 위한 제1 프로그램 코드;
    상기 쓰레드 스케줄링 정책 로직에 커플링된 프로세서 코어를 제공하기 위한 제2 프로그램 코드로서,
    명령어들을 실행하기 위한 하나 이상의 실행 파이프라인; 및
    상기 쓰레드 스케줄링 정책 로직으로부터 수신되는 상기 정책에 기초해 상기 복수개 쓰레드들의 명령어들을 상기 실행 파이프라인으로 디스패치하도록 커플링된 명령어 디스패처를 포함하는, 제2 프로그램 코드; 및
    상기 쓰레드 스케줄링 정책 로직과 상기 프로세서 코어를 커플링하기 위한 인터페이스로서,
    상기 쓰레드 스케줄링 정책 로직이, 상기 정책을 강제하기 위해, 상기 복수개 쓰레드들 각각을 위한 디스패치 우선 순위를 상기 명령어 디스패처로 전달하기 위한 우선 순위 지시자들; 및
    상기 하나 이상의 실행 파이프라인이 상기 복수개 쓰레드들 각각을 위해, 상기 하나 이상의 실행 파이프라인이 상기 쓰레드를 위한 명령어를 실행하도록 커밋되었는지의 여부에 대한 지시를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 실행 지시자들을 포함하는, 인터페이스
    를 포함하는 컴퓨터 판독가능 기록 매체.
  82. 제81 항에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 명령어 디스패처를 제공하기 위한 제4 프로그램 코드를 더 포함하고, 상기 명령어 디스패처는 명령어를 발행하기 위해, 상기 프로세서에 의해 발행 가능 명령어가 인출되고 상기 우선 순위들에 의해 특정된 최고 우선 순위를 가진, 상기 복수개 쓰레드들 중 하나 이상을 선택하도록 구성되는 것인 컴퓨터 판독가능 기록 매체.
  83. 복수개 쓰레드들을 병행하여 실행하는 멀티쓰레딩 프로세서의 쓰레드 스케줄링 정책을 강제하기 위한 쓰레드 스케줄링 정책 관리자를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있고 컴퓨팅 디바이스에의 사용을 위한 컴퓨터 판독가능 기록 매체에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    각각의 프로세서 클록 사이클에서, 명령어가 상기 복수개 쓰레드들 각각을 위해 실행되었는지의 여부에 대한 지시를 수신하기 위한 입력들을 제공하기 위한 제1 프로그램 코드;
    각각의 프로세서 클록 사이클에서, 상기 복수개 쓰레드들 각각을 위해 명령어 디스패치 우선 순위를 전송하기 위한 출력들을 제공하기 위한 제2 프로그램 코드; 및
    상기 쓰레드 스케줄링 정책을 강제하기 위해 상기 입력들에 기초해 상기 출력들을 발생시키기 위한, 상기 입력들에 커플링된, 로직을 제공하기 위한 제3 프로그램 코드를 포함하는 것인 컴퓨터 판독가능 기록 매체.
  84. 제83 항에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 로직을 제공하기 위한 제4 프로그램 코드를 더 포함하고, 상기 복수개 쓰레드들 각각의 상기 우선 순위는 복수개의 소정 우선 순위 레벨들 중 하나를 포함하는 것인 컴퓨터 판독가능 기록 매체.
  85. 각각이 명령어들의 스트림을 포함하는 복수개 쓰레드들을 병행하여 실행하도록 구성된 멀티쓰레딩 프로세서 코어를 발생시키기 위한 컴퓨터 판독 가능 프로그램 코드가 구현되어 있고 컴퓨팅 디바이스에의 사용을 위한 컴퓨터 판독가능 기록 매체에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 프로세서 코어를 상기 프로세서 코어 외부의 쓰레드 스케줄링 정책 로직에 커플링하기 위한 인터페이스를 제공하기 위한 제1 프로그램 코드로서, 상기 인터페이스는,
    상기 쓰레드 스케줄링 정책 로직이 상기 복수개 쓰레드들 각각의 우선 순위를 상기 프로세서 코어로 전달하기 위한 제1 신호들; 및
    상기 쓰레드 스케줄링 정책 로직이 상기 프로세서 코어로부터, 상기 쓰레드 스케줄링 정책 로직에 의해 상기 우선 순위들을 업데이트하는데 사용하기 위해, 상기 복수개 쓰레드들 각각을 위한, 상기 쓰레드들의 상기 명령어들의 실행에 관한 정보를 수신하기 위한 제2 신호들을 구비하는, 제1 프로그램 코드; 및
    상기 제1 신호들을 수신하고, 상기 제1 신호들을 통해 수신되는 상기 우선 순위들에 기초해, 상기 복수개 쓰레드들 중 하나 이상으로부터 실행을 위해 발행할 하나 이상의 명령어를 선택하도록 커플링된 스케줄러를 제공하기 위한 제2 프로그램 코드를 포함하는 것인 컴퓨터 판독가능 기록 매체.
  86. 제85 항에 있어서,
    상기 컴퓨터 판독 가능 프로그램 코드는,
    상기 인터페이스를 제공하기 위한 제3 프로그램 코드를 더 포함하고, 상기 정보는, 상기 프로세서 코어가 상기 복수개 쓰레드들 중 특정된 하나의 명령어를 실행하기 위해 커밋되었다는 지시를 포함하는 것인 컴퓨터 판독가능 기록 매체.
  87. 삭제
  88. 삭제
  89. 프로세서 코어에 의한 복수개 쓰레드들의 병행 디스패치를 스케줄링하기 위한 정책을 쓰레드 스케줄링 정책 로직이 강제할 수 있도록 하기 위한, 상기 프로세서 코어와 상기 정책 로직 사이의 인터페이스로서,
    상기 쓰레드 스케줄링 정책 로직이 상기 복수개 쓰레드들 각각을 위한 디스패치 우선 순위를 상기 프로세서 코어의 명령어 디스패처로 전달하기 위한 우선 순위 지시자들; 및
    상기 프로세서 코어의 실행 파이프라인이 상기 복수개 쓰레드들 각각을 위해, 상기 실행 파이프라인이 상기 쓰레드를 위한 명령어를 실행하였는지의 여부에 대한 지시를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 피드백 지시자
    를 포함하는 인터페이스.
  90. 제89 항에 있어서,
    상기 피드백 지시자들은, 상기 실행 파이프라인이 상기 쓰레드를 위한 명령어를 실행하였는지의 여부가 아니라, 상기 디스패처가 상기 쓰레드를 위한 명령어를 디스패치하였는지의 여부에 대한 지시를 전달하는 것인 인터페이스.
  91. 제89 항에 있어서,
    상기 프로세서 코어가 클록 신호를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 클록 지시자를 더 포함하는 것인 인터페이스.
  92. 제89 항에 있어서,
    상기 프로세서 코어가 상기 복수개 쓰레드들 각각을 위한 상태를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 상태 지시자를 더 포함하는 것인 인터페 이스.
  93. 제92 항에 있어서,
    상기 상태 지시자들은, 상기 쓰레드가 명령어 디스패치를 위해 현재적으로 차단되는지의 여부를 지시하는 것인 인터페이스.
  94. 제89 항에 있어서,
    상기 쓰레드 스케줄링 정책 로직이 상기 복수개 쓰레드들 각각을 위한 명령어들을 디스패치하는 것을 중단하기 위한 명령을 상기 프로세서 코어로 전달하기 위한 차단 지시자들을 더 포함하는 것인 인터페이스.
  95. 제89 항에 있어서,
    상기 프로세서 코어는 복수개 가상 프로세싱 소자들을 포함하고,
    상기 인터페이스는,
    상기 프로세서 코어가 상기 가상 프로세싱 소자들 각각을 위한 상태를 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 상태 지시자들을 더 포함하는 것인 인터페이스.
  96. 제89 항에 있어서,
    상기 프로세서 코어가 새로운 쓰레드를 생성하였다는 것을 상기 프로세서 코 어가 상기 쓰레드 스케줄링 정책 로직으로 전달하기 위한 포크(fork) 지시자들을 더 포함하는 것인 인터페이스.
  97. 제96 항에 있어서,
    상기 피드백 지시자들은 상기 복수개 쓰레드들 중 어떤 것이 상기 새로운 쓰레드를 생성하였는지를 지시하는 것인 인터페이스.
  98. 제89 항에 있어서,
    상기 프로세서 코어가 상기 쓰레드 스케줄링 정책 로직의 제어/상태 레지스터들을 판독 및 기입하기 위한 제어 신호들을 더 포함하는 인터페이스.
  99. 제98 항에 있어서,
    상기 제어/상태 레지스터들은 MIPS PRA(Privileged Resource Architecture) 및 MIPS MT ASE(Multithreading Application Specific Extension)에 의해 정의된 Coprocessor 0 레지스터들을 포함하는 것인 인터페이스.
  100. 제89 항에 있어서,
    상기 우선 순위 지시자들은 예외 핸들링 쓰레드를 위한 디스패치 우선 순위를 전달하는 것인 인터페이스.
  101. 제89 항에 있어서,
    상기 우선 순위 지시자들은 릴랙스(relax) 쓰레드를 위한 디스패치 우선 순위를 전달하고, 상기 릴랙스 쓰레드는, 상기 실행 파이프라인의 완전한 실행 대역폭을 이용하지 않는 것에 의해 전력 소비를 절감하기 위해, 상기 쓰레드 스케줄링 정책 로직이 상기 프로세서 코어로 전달하는 것을 가능하게 하기 위한 비존재 가상 쓰레드(non-existent virtual thread)인 것인 인터페이스.
KR1020077018690A 2005-02-04 2006-01-18 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러 KR101273036B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/051,997 US7613904B2 (en) 2005-02-04 2005-02-04 Interfacing external thread prioritizing policy enforcing logic with customer modifiable register to processor internal scheduler
US11/051,997 2005-02-04
PCT/US2006/001557 WO2006083541A2 (en) 2005-02-04 2006-01-18 Bifurcated thread scheduler in a multithreading microprocessor

Publications (2)

Publication Number Publication Date
KR20070100797A KR20070100797A (ko) 2007-10-11
KR101273036B1 true KR101273036B1 (ko) 2013-06-10

Family

ID=36570301

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077018690A KR101273036B1 (ko) 2005-02-04 2006-01-18 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러

Country Status (7)

Country Link
US (1) US7613904B2 (ko)
EP (1) EP1856603B1 (ko)
JP (1) JP2008530655A (ko)
KR (1) KR101273036B1 (ko)
CN (1) CN101133391B (ko)
TW (1) TWI316203B (ko)
WO (1) WO2006083541A2 (ko)

Families Citing this family (53)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
US7752627B2 (en) * 2005-02-04 2010-07-06 Mips Technologies, Inc. Leaky-bucket thread scheduler in a multithreading microprocessor
US7506140B2 (en) * 2005-02-04 2009-03-17 Mips Technologies, Inc. Return data selector employing barrel-incrementer-based round-robin apparatus
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
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
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
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
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
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7600135B2 (en) * 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
US7627770B2 (en) * 2005-04-14 2009-12-01 Mips Technologies, Inc. Apparatus and method for automatic low power mode invocation in a multi-threaded processor
JP4667206B2 (ja) * 2005-10-31 2011-04-06 富士通セミコンダクター株式会社 マルチコアモデルシミュレーションプログラム、該プログラムを記録した記録媒体、マルチコアモデルシミュレータ、およびマルチコアモデルシミュレーション方法
US7721127B2 (en) * 2006-03-28 2010-05-18 Mips Technologies, Inc. Multithreaded dynamic voltage-frequency scaling microprocessor
US8149709B2 (en) * 2006-06-30 2012-04-03 Oracle America, Inc. Serialization queue framework for transmitting packets
US7594077B2 (en) * 2006-09-08 2009-09-22 Intel Corporation System, method and apparatus to accelerate raid operations
US7760748B2 (en) 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch
US7773621B2 (en) * 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US7961745B2 (en) * 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7990989B2 (en) 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
GB2443507A (en) * 2006-10-24 2008-05-07 Advanced Risc Mach Ltd Debugging parallel programs
US7975272B2 (en) 2006-12-30 2011-07-05 Intel Corporation Thread queuing method and apparatus
GB2449106B (en) 2007-05-10 2011-07-27 Advanced Risc Mach Ltd Issue policy control within a multi-threaded in-order superscalar processor
WO2008155840A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 命令制御装置及び命令制御方法
US8650570B2 (en) * 2008-06-02 2014-02-11 Microsoft Corporation Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources
US8933953B2 (en) * 2008-06-30 2015-01-13 Intel Corporation Managing active thread dependencies in graphics processing
US8434087B2 (en) * 2008-08-29 2013-04-30 International Business Machines Corporation Distributed acceleration devices management for streams processing
JP5173713B2 (ja) 2008-09-30 2013-04-03 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ及びそのハードウェアスレッドのスケジュール方法
WO2010134329A1 (ja) * 2009-05-18 2010-11-25 パナソニック株式会社 プロセッサ
CN101763251B (zh) * 2010-01-05 2014-04-16 浙江大学 含有译码缓冲装置的多线程的微处理器
KR101644800B1 (ko) * 2010-01-07 2016-08-02 삼성전자주식회사 컴퓨팅 시스템 및 방법
US8893092B1 (en) * 2010-03-12 2014-11-18 F5 Networks, Inc. Using hints to direct the exploration of interleavings in a multithreaded program
CN102073461B (zh) * 2010-12-07 2012-07-04 成都市华为赛门铁克科技有限公司 输入输出请求调度方法、相关装置和存储阵列
US9875105B2 (en) * 2012-05-03 2018-01-23 Nvidia Corporation Checkpointed buffer for re-entry from runahead
US10001996B2 (en) 2012-10-26 2018-06-19 Nvidia Corporation Selective poisoning of data during runahead
US9740553B2 (en) 2012-11-14 2017-08-22 Nvidia Corporation Managing potentially invalid results during runahead
US9632976B2 (en) 2012-12-07 2017-04-25 Nvidia Corporation Lazy runahead operation for a microprocessor
US9207944B1 (en) 2013-03-15 2015-12-08 Google Inc. Doubling thread resources in a processor
KR102102166B1 (ko) 2013-04-22 2020-04-21 삼성전자 주식회사 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
CN103605572A (zh) * 2013-12-05 2014-02-26 用友软件股份有限公司 一种多线程计算装置
KR101847899B1 (ko) * 2014-02-12 2018-04-12 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
WO2015122550A1 (ko) 2014-02-12 2015-08-20 주식회사 칩스앤미디어 동영상 처리 방법 및 장치
JP5770334B2 (ja) * 2014-04-24 2015-08-26 ルネサスエレクトロニクス株式会社 マルチスレッドプロセッサ
US20170315812A1 (en) 2016-04-28 2017-11-02 Microsoft Technology Licensing, Llc Parallel instruction scheduler for block isa processor
US10459760B2 (en) * 2016-07-08 2019-10-29 Sap Se Optimizing job execution in parallel processing with improved job scheduling using job currency hints
US10558464B2 (en) 2017-02-09 2020-02-11 International Business Machines Corporation Infinite processor thread balancing
GB2563587B (en) * 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
CN108228242B (zh) * 2018-02-06 2020-02-07 江苏华存电子科技有限公司 一种可配置且具弹性的指令调度器
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
CN111399912B (zh) * 2020-03-26 2022-11-22 超睿科技(长沙)有限公司 一种面向多周期指令的指令调度方法、系统及介质
CN111478838B (zh) * 2020-04-08 2021-12-21 浙江中控研究院有限公司 一种高效高带宽的通信方法及系统
US20230066662A1 (en) * 2021-08-31 2023-03-02 Ceremorphic, Inc. Instruction Cache for Hardware Multi-Thread Microprocessor
US11614915B1 (en) 2021-12-17 2023-03-28 DSP Concepts, Inc. Audio multithreading interface

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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 (99)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4126895A (en) * 1975-12-29 1978-11-21 International Standard Electric Corporation Data processing system with monitoring and regulation of processor free time
US4924380A (en) * 1988-06-20 1990-05-08 Modular Computer Systems, Inc. (Florida Corporation) Dual rotating priority arbitration method for a multiprocessor memory bus
US5095460A (en) * 1989-04-25 1992-03-10 Digital Equipment Corporation Rotating priority encoder operating by selectively masking input signals to a fixed priority encoder
US5276887A (en) * 1991-06-06 1994-01-04 Commodore Electronics Limited Bus arbitration system for granting bus access to devices following two-wire bus arbitration protocol and devices following three-wire bus arbitration protocol
US5440752A (en) * 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
US5734877A (en) * 1992-09-09 1998-03-31 Silicon Graphics, Inc. Processor chip having on-chip circuitry for generating a programmable external clock signal and for controlling data patterns
US5309382A (en) * 1992-10-01 1994-05-03 Silicon Graphics, Inc. Binary shifter
US5357512A (en) * 1992-12-30 1994-10-18 Intel Corporation Conditional carry scheduler for round robin scheduling
US5528513A (en) * 1993-11-04 1996-06-18 Digital Equipment Corp. Scheduling and admission control policy for a continuous media server
US5745778A (en) * 1994-01-26 1998-04-28 Data General Corporation Apparatus and method for improved CPU affinity in a multiprocessor system
US5546554A (en) * 1994-02-02 1996-08-13 Sun Microsystems, Inc. Apparatus for dynamic register management in a floating point unit
US5793993A (en) * 1995-01-26 1998-08-11 General Magic, Inc. Method for transmitting bus commands and data over two wires of a serial bus
US6105053A (en) * 1995-06-23 2000-08-15 Emc Corporation Operating system for a non-uniform memory access multiprocessor system
US5938742A (en) * 1995-08-18 1999-08-17 General Magic, Inc. Method for configuring an intelligent low power serial bus
US5860000A (en) * 1996-01-31 1999-01-12 Hitachi Micro Systems, Inc. Floating point unit pipeline synchronized with processor pipeline
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
CN1147785C (zh) * 1996-08-27 2004-04-28 松下电器产业株式会社 执行多个指令流的多程序流程同时处理器
JP3435293B2 (ja) * 1996-09-10 2003-08-11 株式会社東芝 パケットスケジューリング装置及びパケット転送方法
US6385715B1 (en) * 1996-11-13 2002-05-07 Intel Corporation Multi-threading for a processor utilizing a replay queue
US5898694A (en) * 1996-12-30 1999-04-27 Cabletron Systems, Inc. Method of round robin bus arbitration
US6073159A (en) * 1996-12-31 2000-06-06 Compaq Computer Corporation Thread properties attribute vector based thread selection in multithreading processor
US5832278A (en) * 1997-02-26 1998-11-03 Advanced Micro Devices, Inc. Cascaded round robin request selection method and apparatus
US6094435A (en) * 1997-06-30 2000-07-25 Sun Microsystems, Inc. System and method for a quality of service in a multi-layer network element
US6658447B2 (en) * 1997-07-08 2003-12-02 Intel Corporation Priority based simultaneous multi-threading
US5913049A (en) * 1997-07-31 1999-06-15 Texas Instruments Incorporated Multi-stream complex instruction set microprocessor
US6170051B1 (en) * 1997-08-01 2001-01-02 Micron Technology, Inc. Apparatus and method for program level parallelism in a VLIW processor
US6212544B1 (en) * 1997-10-23 2001-04-03 International Business Machines Corporation Altering thread priorities in a multithreaded processor
US6567839B1 (en) * 1997-10-23 2003-05-20 International Business Machines Corporation Thread switch control in a multithreaded processor system
US6105051A (en) * 1997-10-23 2000-08-15 International Business Machines Corporation Apparatus and method to guarantee forward progress in execution of threads in a multithreaded processor
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6549930B1 (en) * 1997-11-26 2003-04-15 Compaq Computer Corporation Method for scheduling threads in a multithreaded processor
US6163827A (en) * 1997-12-16 2000-12-19 Network Equipment Technologies, Inc. Method and apparatus for round-robin flash channel arbitration
US6272520B1 (en) * 1997-12-31 2001-08-07 Intel Corporation Method for detecting thread switch events
US6032218A (en) * 1998-05-28 2000-02-29 3Com Corporation Configurable weighted round robin arbiter
US6237081B1 (en) * 1998-12-16 2001-05-22 International Business Machines Corporation Queuing method and apparatus for facilitating the rejection of sequential instructions in a processor
US6389449B1 (en) * 1998-12-16 2002-05-14 Clearwater Networks, Inc. Interstream control and communications for multi-streaming digital processors
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US7035997B1 (en) 1998-12-16 2006-04-25 Mips Technologies, Inc. Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors
US6516369B1 (en) * 1998-12-29 2003-02-04 International Business Machines Corporation Fair and high speed arbitration system based on rotative and weighted priority monitoring
US6470016B1 (en) * 1999-02-09 2002-10-22 Nortel Networks Limited Servicing output queues dynamically according to bandwidth allocation in a frame environment
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
US6563818B1 (en) * 1999-05-20 2003-05-13 Advanced Micro Devices, Inc. Weighted round robin cell architecture
US6556571B1 (en) * 1999-05-25 2003-04-29 Nec Usa, Inc. Fast round robin priority port scheduler for high capacity ATM switches
US6754736B1 (en) * 1999-06-23 2004-06-22 Fujitsu Limited Information processing apparatus, data inputting/outputting method, and program storage medium therefor
US6542921B1 (en) * 1999-07-08 2003-04-01 Intel Corporation Method and apparatus for controlling the processing priority between multiple threads in a multithreaded processor
US6434155B1 (en) * 1999-12-22 2002-08-13 Alcatel Usa Sourcing, L.P. Weighted round robin engine used in scheduling the distribution of ATM cells
US6609190B1 (en) * 2000-01-06 2003-08-19 International Business Machines Corporation Microprocessor with primary and secondary issue queue
US7649901B2 (en) * 2000-02-08 2010-01-19 Mips Technologies, Inc. Method and apparatus for optimizing selection of available contexts for packet processing in multi-stream packet processing
US7051189B2 (en) * 2000-03-15 2006-05-23 Arc International Method and apparatus for processor code optimization using code compression
US7007153B1 (en) * 2000-03-30 2006-02-28 Agere Systems Inc. Method and apparatus for allocating functional units in a multithreaded VLIW processor
US6931641B1 (en) 2000-04-04 2005-08-16 International Business Machines Corporation Controller for multiple instruction thread processors
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
EP1164493B1 (en) * 2000-06-16 2005-11-30 STMicroelectronics S.r.l. Variable priority arbitration method, for instance for interconnect buses, and respective system
US6665760B1 (en) * 2000-09-29 2003-12-16 Rockwell Automation Technologies, Inc. Group shifting and level shifting rotational arbiter system
US6647449B1 (en) * 2000-10-05 2003-11-11 Hewlett-Packard Development Company, L.P. System, method and circuit for performing round robin arbitration
US6721874B1 (en) * 2000-10-12 2004-04-13 International Business Machines Corporation Method and system for dynamically shared completion table supporting multiple threads in a processing system
US6981129B1 (en) 2000-11-02 2005-12-27 Intel Corporation Breaking replay dependency loops in a processor using a rescheduled replay queue
US7139898B1 (en) 2000-11-03 2006-11-21 Mips Technologies, Inc. Fetch and dispatch disassociation apparatus for multistreaming processors
US7401211B2 (en) * 2000-12-29 2008-07-15 Intel Corporation Method for converting pipeline stalls caused by instructions with long latency memory accesses to pipeline flushes in a multithreaded processor
AU2002242067A1 (en) * 2001-01-30 2002-08-12 Nomadix, Inc. Methods and systems providing fair queuing and priority scheduling to enhance quality of service in a network
US6918116B2 (en) * 2001-05-15 2005-07-12 Hewlett-Packard Development Company, L.P. Method and apparatus for reconfiguring thread scheduling using a thread scheduler function unit
US6622253B2 (en) 2001-08-02 2003-09-16 Scientific-Atlanta, Inc. Controlling processor clock rate based on thread priority
US6868529B1 (en) * 2001-08-31 2005-03-15 Turin Networks Method and apparatus for efficient implementation of round robin control unit
JP3577052B2 (ja) * 2002-03-19 2004-10-13 株式会社東芝 命令発行装置及び命令発行方法
EP1351117A1 (en) 2002-04-03 2003-10-08 Hewlett-Packard Company Data processing system and method
US8024735B2 (en) * 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7096470B2 (en) * 2002-09-19 2006-08-22 International Business Machines Corporation Method and apparatus for implementing thread replacement for optimal performance in a two-tiered multithreading structure
US7334086B2 (en) * 2002-10-08 2008-02-19 Rmi Corporation Advanced processor with system on a chip interconnect technology
US20040128448A1 (en) * 2002-12-31 2004-07-01 Intel Corporation Apparatus for memory communication during runahead execution
US20040139441A1 (en) * 2003-01-09 2004-07-15 Kabushiki Kaisha Toshiba Processor, arithmetic operation processing method, and priority determination method
KR100498482B1 (ko) 2003-01-27 2005-07-01 삼성전자주식회사 명령어수에 수행 주기 회수를 가중치로 사용하여 쓰레드를페치하는 동시 다중 쓰레딩 프로세서 및 그 방법
EP1462934A1 (en) * 2003-03-29 2004-09-29 Deutsche Thomson-Brandt Gmbh Method and apparatus for forwarding of results
US7213135B2 (en) * 2003-04-24 2007-05-01 International Business Machines Corporation Method using a dispatch flush in a simultaneous multithread processor to resolve exception conditions
US7363625B2 (en) * 2003-04-24 2008-04-22 International Business Machines Corporation Method for changing a thread priority in a simultaneous multithread processor
US7469407B2 (en) * 2003-04-24 2008-12-23 International Business Machines Corporation Method for resource balancing using dispatch flush in a simultaneous multithread processor
US7401208B2 (en) * 2003-04-25 2008-07-15 International Business Machines Corporation Method and apparatus for randomizing instruction thread interleaving in a multi-thread processor
US7120714B2 (en) * 2003-05-27 2006-10-10 Intel Corporation High-speed starvation-free arbiter system, rotating-priority arbiter, and two stage arbitration method
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7441101B1 (en) * 2003-12-10 2008-10-21 Cisco Technology, Inc. Thread-aware instruction fetching in a multithreaded embedded processor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
US6987517B1 (en) * 2004-01-06 2006-01-17 Nvidia Corporation Programmable graphics processor for generalized texturing
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US7185178B1 (en) * 2004-06-30 2007-02-27 Sun Microsystems, Inc. Fetch speculation in a multithreaded processor
US20060095732A1 (en) * 2004-08-30 2006-05-04 Tran Thang M Processes, circuits, devices, and systems for scoreboard and other processor improvements
US7890735B2 (en) 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US20060168254A1 (en) * 2004-11-01 2006-07-27 Norton Scott J Automatic policy selection
JP4606142B2 (ja) * 2004-12-01 2011-01-05 株式会社ソニー・コンピュータエンタテインメント スケジューリング方法、スケジューリング装置およびマルチプロセッサシステム
US20060168393A1 (en) * 2005-01-27 2006-07-27 Christensen Bjorn P Apparatus and method for dependency tracking and register file bypass controls using a scannable register file
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
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
US7681014B2 (en) * 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US20060212853A1 (en) * 2005-03-18 2006-09-21 Marvell World Trade Ltd. Real-time control apparatus having a multi-thread processor
US7990989B2 (en) 2006-09-16 2011-08-02 Mips Technologies, Inc. Transaction selector employing transaction queue group priorities in multi-port switch
US7961745B2 (en) 2006-09-16 2011-06-14 Mips Technologies, Inc. Bifurcated transaction selector supporting dynamic priorities in multi-port switch
US7773621B2 (en) 2006-09-16 2010-08-10 Mips Technologies, Inc. Transaction selector employing round-robin apparatus supporting dynamic priorities in multi-port switch
US7760748B2 (en) 2006-09-16 2010-07-20 Mips Technologies, Inc. Transaction selector employing barrel-incrementer-based round-robin apparatus supporting dynamic priorities in multi-port switch

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
WO2006083541A2 (en) 2006-08-10
CN101133391A (zh) 2008-02-27
WO2006083541A3 (en) 2007-04-19
EP1856603A2 (en) 2007-11-21
TW200636574A (en) 2006-10-16
TWI316203B (en) 2009-10-21
KR20070100797A (ko) 2007-10-11
CN101133391B (zh) 2013-09-18
US20060179279A1 (en) 2006-08-10
JP2008530655A (ja) 2008-08-07
EP1856603B1 (en) 2018-01-10
US7613904B2 (en) 2009-11-03

Similar Documents

Publication Publication Date Title
KR101273036B1 (ko) 멀티쓰레딩 마이크로프로세서에서의 분기 쓰레드 스케줄러
KR101100470B1 (ko) 멀티쓰레드 프로세서에서의 자동 저전력 모드 호출을 위한장치 및 방법
US7752627B2 (en) Leaky-bucket thread scheduler in a multithreading microprocessor
US7853777B2 (en) Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7657891B2 (en) Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7664936B2 (en) Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US8078840B2 (en) Thread instruction fetch based on prioritized selection from plural round-robin outputs for different thread states
US7509447B2 (en) Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7657883B2 (en) Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US7600135B2 (en) Apparatus and method for software specified power management performance using low power virtual threads
US7660969B2 (en) Multithreading instruction scheduler employing thread group priorities
US7506140B2 (en) Return data selector employing barrel-incrementer-based round-robin apparatus

Legal Events

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

Payment date: 20160526

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170525

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180529

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190523

Year of fee payment: 7