KR102335194B1 - 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩 - Google Patents

명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩 Download PDF

Info

Publication number
KR102335194B1
KR102335194B1 KR1020167024487A KR20167024487A KR102335194B1 KR 102335194 B1 KR102335194 B1 KR 102335194B1 KR 1020167024487 A KR1020167024487 A KR 1020167024487A KR 20167024487 A KR20167024487 A KR 20167024487A KR 102335194 B1 KR102335194 B1 KR 102335194B1
Authority
KR
South Korea
Prior art keywords
instruction
instructions
group
issued
processor
Prior art date
Application number
KR1020167024487A
Other languages
English (en)
Other versions
KR20160110528A (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 KR20160110528A publication Critical patent/KR20160110528A/ko
Application granted granted Critical
Publication of KR102335194B1 publication Critical patent/KR102335194B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • 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/3818Decoding for concurrent execution
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/3838Dependency mechanisms, e.g. register scoreboarding
    • 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
    • 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/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Abstract

컴퓨팅 디바이스는, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖지 않는다는 것을 결정한다. 컴퓨팅 디바이스는, 발행 시퀀스에서 하나 또는 그 초과의 대안적 소프트웨어 스레드들이 발행되기를 대기하는 명령어들을 갖는다는 것을 식별한다. 컴퓨팅 디바이스는, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 결정을 고려하여, 컴퓨팅 디바이스에 의해, 클록 사이클 동안, 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 제 2 명령어를 선택한다. 의존성들은, 발행되기를 대기하는 각각의 명령어들로부터 추출된 체이닝 비트의 값들을 고려하여, 컴퓨팅 디바이스에 의해 식별된다. 컴퓨팅 디바이스는 하드웨어 스레드에 제 2 명령어를 발행한다.

Description

명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩 {OPPORTUNITY MULTITHREADING IN A MULTITHREADED PROCESSOR WITH INSTRUCTION CHAINING CAPABILITY}
[0001] 본 출원은, 2014년 2월 6일자로 출원된 미국 가특허출원 제61/936,428호 및 2014년 3월 25일자로 출원된 미국 가특허출원 제61/969,862호를 우선권으로 청구하는 2014년 11월 12일자로 출원된 미국 실용특허출원 제14/539,116호를 우선권으로 청구하며, 이들의 개시내용들은 그 전체가 인용에 의해 본원에 포함된다.
[0002] 본 개시내용의 실시예는 마이크로프로세서 환경에서 명령어들을 프로세싱하기 위한 방법 및 장치에 관한 것이다. 보다 특정하게, 실시예들은 마이크로-프로세서에 대한 멀티-스레딩 프로세싱에 관한 것이며, 이는, 마이크로-프로세서가, 타겟 하드웨어 스레드가 빈 상태(empty)이거나 또는 특정 클록 사이클 동안 발행할 어떠한 유효(valid) 명령어들도 갖지 않는다는 것을 결정할 경우, 특정 클록 사이클 동안 마이크로-프로세서가 다른 하드웨어 스레드들에 할당된 명령어들을 발행할 수 있다.
[0003] 멀트-스레드형 병렬 프로세싱 기술들은 긴 파이프라인들에 의해 유발되는 고속(high-speed) 프로세서 명령어 실행 레이턴시(latency)의 영향력을 감소시키기 위해 고성능 프로세서들에서 이용되어 왔다. 멀티-스레드형 병렬 프로세싱 기술들은 다른 프로세서 설계들에 비해 사이클당 개선된 명령어 성능 및 효율성을 갖는다. 범용성 프로세서들에서의 가장 흔한 타입의 멀티스레딩은 SMT(is simultaneous multi-threading technology)이다. SMT은 Intel의 하이퍼 스레딩("Intel's Hyper-Threading Technology, Technical User's Guide"에 설명됨), IBM의 POWER5(Clabes, Joachim 등의 "Design and Implementation of POWER5 Microprocessor", "2004 IEEE International Solid-State Circuits Conference" 회보에 설명됨), Sun Microsystems의 Ultra SPARC T2("Using the Cryptographic Accelerators in the UltraSPARC T1 and T2 Processors", Sun BluePrints Online, Sun Microsystems(2008년 1월 9일 정정됨)에 설명됨), 및 MIPS MT("MIPS32 Architecture", Imagination Technologies(2014년 1월 4일 정정)에 설명됨)에서 이용되었다.
[0004] 전형적인 SMT-기반 프로세서들은, 각각의 하드웨어 스레드가 SMT-기반 프로세서내에서 파이프라인의 각각의 모든 스테이지에 추가 추적 로직 및 레지스터들의 세트 자체를 갖도록 요구되었다. 이는 하드웨어 자원들, 특히 SMT-기반 프로세서의 설계를 구현하는데 필요한 스레드 추적 로직의 크기를 증가시킨다. SMT-기반 프로세서에 의해 이용되는 스레드 추적 로직은 하드웨어 스레드의 실행을 추적하도록 요구될 뿐만 아니라 하드웨어 스레드가 실행을 완료했는지를 결정하도록 요구된다. SMT-기반 프로세서가 활성적으로 실행되는 다수의 하드웨어 스레드들을 이용할 수 있기 때문에, CPU 캐시들의 크기 및 연관된 TLB(translation look-aside buffers)는 하드웨어 스레드 스래싱(thrashing)을 방지하도록 충분히 클 필요가 있다.
[0005] SMT 기술이 싱글-스레드형 성능을 개선시킬 수 있지만, 앞서 식별된 제어 회로 복잡성은 저전력 소모를 요구하는 임베디드 프로세서들(embedded processors)에 SMT 기술을 적용하는 것을 어렵게 만든다.
[0006] SMT 제어 회로 복잡성을 해결하고 전력 소모를 줄이기 위해 다른 형태들의 멀티-스레딩 기술들이 개발되었다. 블록 멀티-스레딩 및 인터리빙식 멀티스레딩(interleaved multithreading)이 제안되었다. 불행하게도, 블록 멀티-스레딩 기술은 마이크로제어기들 및 다른 저성능 프로세서로 제한되었다. 인터리빙식 멀티-스레딩 기술은 단순화된 제어 회로를 갖지만, 프로세서에서 이용가능한 하드웨어 스레드들보다 소프트웨어 스레드들이 적을 경우 성능은 악화된다(suffer). 이 기술은 특정 고성능 저전력 프로세서들에서 진척되었다. 토큰-트리거식 멀티-스레딩 기술의 대표적 예는 미국 특허 제 6,842,848호에 설명되었다.
[0007] 토큰-트리거식 멀티-스레딩은 시분할(time sharing)을 이용한다. 각각의 실행 소프트웨어 스레드에는, 그 자신에게 할당된 클록 사이클들에 따라 실행되도록 프로세서에 의한 허용이 승인된다. 클록 사이클당 단지 하나의 소프트웨어 스레드만이 커맨드들을 발행하도록 허용된다. 토큰은 소프트웨어 스레드가 다음 클록 사이클에서 명령어를 발행해야하는지에 대해 소프트웨어 스레드에게 통지하는데 이용된다. 이는 하드웨어 스레드 로직을 더욱 단순화시킨다. 모든 소프트웨어 스레드들이 명령어들을 발행할 때까지 소프트웨어 스레드는 아마도 제 2 명령어를 발행하지 않을 것이다. 소프트웨어 스레드가 발행에 이용가능한 어떠한 명령어도 갖지 않는다면, NOP(no operation)가 하드웨어 스레드에 의해 발행된다. 프로세서 하드웨어는, 각각의 소프트웨어 스레드가 동일한 명령어 실행 시간을 갖도록 보장한다. 오퍼레이션의 결과는 특정된 보증 시간 기간(예를 들면, 클록 사이클들)내에 완료될 수 있다. 이에 따라, 어떠한 명령어 실행 관련 검사 및 바이패스 하드웨어도 프로세서 설계에서 요구되지 않는다.
[0008] 토큰-트리거 멀티-스레딩 기술은 멀티-스레드형 프로세서의 하드웨어 발행 로직을 단순화시키며, 이에 따라 거의 적은 전력 소모로 고성능이 달성될 수 있다. 그러나, SMT 기술들과 비교할 때, 토큰-트리거 멀티-스레딩 프로세서의 성능 개선은, 이용가능한 하드웨어 스레드들보다 클록 사이클 동안 실행가능한 명령어들을 갖는 소프트웨어 스레드들이 적을 경우 제한된다. 이런 상황들에서, 그들에 할당되는 소프트웨어 스레드들을 갖지 않는 하드웨어 스레드들은 NOP들을 발행해야 한다.
[0009] 추가로, 소프트웨어 스레드들 간의 간섭을 회피하고 하드웨어 구조를 단순화시키기 위해, 통상의 토큰 트리거식 멀티스레딩은 사이클당 적은 수의 명령어들이 실행되게 할 수 있는 시분할 전략을 이용한다. 이는 싱글-스레드형 오퍼레이션의 프로세싱 속도를 감소시킨다. 예를 들어, 콘텍스트 T1에 대한 소프트웨어 명령어가 캐시내에 있지 않고 외부 메모리로부터의 리로드(reload)를 요구할 경우, 외부 메모리의 느린 속도로 인해, T1은 명령어들을 리로드하기 위해 많은 사이클들 동안을 대기해야 한다. 콘텍스트 TO가 준비(ready) 명령어를 갖는 경우, 이는 클록 사이클 C1에서 명령어 발행을 계속 대기해야한다. 그러나, 시분할된 데이터경로의 구조적 제한들로 인해, 클록 사이클 C1은 콘텍스트 T1에 의해서만 사용될 수 있고, 이 경우 하드웨어 스레드는 NOP를 발행해야 한다.
[0010] 단일 실행 소프트웨어 스레드에 대한 최악의 경우, 대응하는 통상적 토큰-트리거식 프로세서의 성능은 1/T(여기서, T는 하드웨어 스레드들의 수임)이다. 1 GHz에서 실행되는 10-스레드형 토큰-트리거식 프로세서에서, 프로세서의 성능은 100MHz로 효과적으로 감소된다.
[0011] 하드웨어 스레드들 간의 추적 회로를 단순화시키고 스래싱을 방지하기 위해, 샌드블라스터 2.0 프로세서에서의, 각각의 하드웨어 스레드는 자체 개별 명령어 메모리(2008년 10월, 워싱턴 DC, “The Sandblaster 2.0 Architecture and SB3500 Implementation Proceedings of the Software Defined Radio Technical Forum (SDR Forum '08)”에서 설명됨)를 갖는다. 불행하게도, 개별 명령어 메모리들은 하드웨어 스레드들 간에는 공유될 수 없다. 이는, 소프트웨어 스레드들의 수가 하드웨어 스레드들의 수보다 적을 경우 성능을 저하시키는 것 외에도 이용부족(underutilized) 메모리 자원들을 초래할 수 있다.
[0012] 명령어 체이닝 능력(instruction chaining capability)을 갖는 멀티스레드형 프로세서에서의 기회 멀티스레딩에 대한 방법 및 장치를 제공함으로써 본 기술 분야에서 기술적 솔루션이 달성되고 상술된 문제점들이 해결된다. 함께 체이닝되는 프로세서 명령어들의 시퀀스를 위한 명령어 발행에 대한 예가 설명된다. 특정 하드웨어 스레드와 연관된 체이닝된 명령어들은 발행된 명령어들을 식별하는 값과 소프트웨어 스레드의 스레드 식별 번호(ID)를 저장하는 2차원 레지스터 어레이를 갖는다. 이들 ID들은 개별적으로 저장될 수 있다. 따라서, 멀티스레드형 프로세서의 각각의 하드웨어 스레드는, 타겟 하드웨어 스레드가 빈 상태이거나 발행할 수 있는 어떠한 유효 명령어들도 갖지 않는 경우, 임의의 클록 사이클에서, 다른 소프트웨어 스레드들에 할당되는 명령어들을 발행할 수 있다. 이는 데이터 및 아키텍처 상태가 손상되지 않거나 프로세싱 결과들이 혼합되지 않게 보장한다. 명령어 사전-검증(pre-validation) 로직은, 다음 클록 사이클에서 현재 그리고 다음 소프트웨어 스레드 명령 발행 위치를 미리 검출하는데 이용될 수 있다.
[0013] 상술된 문제점들이 해결되고, 기술적 솔루션은 명령어 체이닝 능력을 갖는 기회 멀티스레딩을 나타내는 컴퓨팅 디바이스를 제공함으로써 기술분야에서 달성된다. 컴퓨팅 디바이스는, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖지 않는다는 것을 결정한다. 컴퓨팅 디바이스는, 발행 시퀀스에서 하나 또는 그 초과의 대안적 소프트웨어 스레드들이 발행되기를 대기하는 명령어들을 갖는다는 것을 식별한다. 컴퓨팅 디바이스는, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 결정을 고려하여, 컴퓨팅 디바이스에 의해, 클록 사이클 동안, 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 제 2 명령어를 선택한다. 의존성들은, 발행되기를 대기하는 각각의 명령어들로부터 추출된 체이닝 비트의 값들을 고려하여, 컴퓨팅 디바이스에 의해 식별된다. 컴퓨팅 디바이스는 하드웨어 스레드에 제 2 명령어를 발행한다.
[0014] 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 것을 결정하기 위해, 컴퓨팅 디바이스는 발행되기를 대기하는 명령어들 중 제 1 명령어 및 다른 명령어들을 일 그룹의 명령어들로 그룹화한다. 컴퓨팅 디바이스는, 체이닝 비트들의 시퀀스를 생성하기 위해 그룹의 명령어들의 각각의 명령어로부터 지정된 비트를 추출한다. 컴퓨팅 디바이스는 체이닝 비트들의 시퀀스를 디코딩한다. 컴퓨팅 디바이스는 디코딩된 체이닝 비트들의 시퀀스를 고려하여 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 의존성들을 식별한다. 컴퓨팅 디바이스는 제 2 명령어가 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관됨을 결정한다.
[0015] 예에서, 체이닝 비트들의 시퀀스는 명령어들의 그룹에 있는 명령어들 어느 것도 디코딩하지 않고 디코딩된다.
[0016] 예에서, 명령어들의 그룹내 2 또는 그 초과의 명령어들 간에 식별된 의존성은 제어 의존성 또는 데이터 의존성이다.
[0017] 예에서, 컴퓨팅 디바이스는 체이닝 비트들의 시퀀스를 생성하기 위해 그룹의 명령어들 간의 제로 또는 그 초과의 의존성들로 각각의 명령어의 지정된 비트를 인코딩할 수 있다.
[0018] 예에서, 컴퓨팅 디바이스는 시퀀스에서 제 2 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드에 제 1 인덱스를 할당할 수 있다. 컴퓨팅 디바이스는 클록 사이클에 대응하는 하드웨어 스레드에 제 2 인덱스를 할당할 수 있다. 컴퓨팅 디바이스는 원래 제 2 명령어를 발행한 제 2 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용할 수 있다. 클록 사이클 동안, 현재 소프트웨어 스레드가 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖는다는 결정에 응답하여, 컴퓨팅 디바이스는 하드웨어 스레드에 제 1 명령어를 발행할 수 있다.
[0019] 다른 예에서, 컴퓨팅 디바이스는 발행 시퀀스에서 현재 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드에 제 1 인덱스를 할당할 수 있다. 컴퓨팅 디바이스는 클록 사이클에 대응하는 하드웨어 스레드에 제 2 인덱스를 할당할 수 있다. 컴퓨팅 디바이스는 원래 제 1 명령어를 발행한 현재 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용할 수 있다.
[0020] 예에서, 발행 시퀀스는 초기에 토큰-트리거식 멀티-스레딩 시퀀스일 수 있다.
[0021] 예에서, 복수의 소프트웨어 스레드들의 소프트웨어 스레드들의 수는 이용가능한 하드웨어 스레드 유닛들의 수보다 적을 수 있다.
[0022] 본 발명은 첨부된 도면들과 함께 고려되며 하기 제시되는 예들의 상세한 설명으로부터 보다 쉽게 이해될 수 있으며 이 도면들에서의 동일한 참조 번호들은 유사한 엘리먼트들을 지칭한다.
[0023] 도 1은, 본 개시내용의 예들이 동작할 수 있는, 이용가능한 하드웨어 스레드 유닛들보다 실행가능한 소프트웨어 스레드들이 적은 경우, 미사용 클록 사이클들을 최소화시키는 멀티스레드형 프로세서 내 하드웨어 스레드 유닛의 일 예를 도시한다.
[0024] 도 2는 2개의 독립적 명령어들의 예를 도시하며, 명령어들 각각은 정보를 체이닝하기 위해 예비되는 대응 비트를 갖는다.
[0025] 도 3은 듀얼-발행 파이프라인식 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0026] 도 4는 3-발행 프로세서에서의 명령어 체이닝에 대한 의미론의 일 예를 도시한다.
[0027] 도 5는 4-발행 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다.
[0028] 도 6은, 본 개시내용의 예들이 동작할 수 있는, 명령어 그룹의 명령어들로부터 체이닝 비트들을 추출하고, 추출된 체이닝 비트들을 디코딩하고, 파이프라인 제어 신호들을 발생시키는 명령어 의존성 예측 회로를 도시한다.
[0029] 도 7은, 의존성 정보, 병렬성 정보 및 성능 최적화들이 명령어들의 시퀀스에 인코딩되는 것을 가능하게 하기 위한 방법의 예를 예시하는 흐름도이다.
[0030] 도 8은, 의존성 정보, 병렬성 정보 및 성능 최적화들이 명령어들의 시퀀스에 인코딩된 하위(underlying) 명령어를 검사하지 않고도 디코딩되는 것을 가능하게 하는 방법의 예를 예시하는 흐름도이다.
[0031] 도 9는, 하드웨어 스레드 유닛들보다 소프트웨어 스레드들이 적을 경우 멀티스레드형 프로세서에서의 미사용 클록 사이클들을 최소화시키기 위한 방법의 예를 예시하는 흐름도이다.
[0032] 도 10은, 도 9의 제 2 명령어가 발행되기를 대기하는 명령어들 중 다른 명령어들과 어떠한 의존성들도 갖지 않는지를 결정하기 위한 방법의 예를 예시하는 흐름도이다.
[0033] 도 11은 4-스레드형 기회 멀티스레드형 파이프라인 오퍼레이션 제어 프로세스 타이밍도를 도시하며, 여기서 Ci가 클록 사이클 식별자이고 Tij가 클록 사이클 Ci에 할당되는 대응하는 할당 스레드 식별자이다.
[0034] 첨부된 도면들은 본 발명의 개념들을 예시하는 것을 목적으로 하며 축적대로가 아닐 수도 있다는 것이 이해될 것이다.
[0035] 본 개시내용의 예들은, 하드웨어 스레드 유닛들보다 소프트웨어 스레드들이 적을 경우 멀티스레드형 프로세서에서의 미사용 클록 사이클들을 최소화시키는, 멀티스레드형 컴퓨터 프로세서 및 이 멀티스레드형 컴퓨터 프로세서를 동작시키는 방법을 설명한다. 미사용 클록 사이클들은 할당된 하드웨어 스레드 유닛이 NOP를 발행해야 하는 경우 발생될 수 있다. 본 개시내용의 예들은, 토큰 트리거식 멀티스레딩의 경우처럼, 제 1 발행 NOP들에 대해 이전의 모든 하드웨어 스레드 유닛들을 요구하지 않고도, 다수의 하드웨어 스레드 유닛들에 대기 명령어들을 발행할 수 있는 멀티스레드형 컴퓨터 프로세서 및 방법을 제공한다. "기회 멀티-스레딩(opportunity multi-threading)"이라 불리는 방법은, 2차원 식별 레지스터 어레이를 제공함으로써 소프트웨어 스레드를 다수의 하드웨어 스레드 유닛들과 연관시킴으로써 명령어 발행 시퀀스를 제어한다. 각각의 모든 파이프라인 스테이지에서, 스레드 식별자(ID)는 원래 명령어를 발행한 소프트웨어 스레드를 식별하는데 이용될 수 있다. 이 정보는 파이프라인 레지스터들에 저장될 수 있고 각각의 모든 파이프라인 스테이지에서 멀티-스레드형 명령어의 실행 상태를 식별하고 추적하는데 이용될 수 있다. 이는 동일한 하드웨어 스레드에 의해 상이한 파이프라인들에서 발행된 명령어들과 다수의 소프트웨어 스레드들 사이를 구별한다.
[0036] 도 1은, 본 개시내용의 예들이 동작할 수 있는, 이용가능한 하드웨어 스레드 유닛들보다 실행가능한 소프트웨어 스레드들이 적은 경우, 미사용 클록 사이클들을 최소화시키는 멀티스레드형 프로세서(100)의 하드웨어 스레드 유닛의 일 예를 도시한다. 예에서, 멀티스레드형 프로세서(100)는 복수의 하드웨어 스레드 유닛들(102a-102n)을 포함할 수 있다. 하드웨어 스레드 유닛들(102a-102n) 각각은, 적어도 하나의 명령어 메모리(I-캐시)(104), 프로그램 카운터(PC)(105), 명령어 디코더(I-디코더)(106), 프로그램 분기 제어기(Branch)(108)(이후 "명령어 발행 제어기(108)"), 하나 또는 그 초과의 ALU(arithmetic logic unit)들(110), 데이터 메모리(112), 및 (메인 랜덤-액세스) 메모리(미도시)에 대한 인터페이스 버스(114)를 포함할 수 있다. 멀티스레드형 프로세서(100)에는 일 세트의 2차원 스레드 식별(ID) 레지스터들(116) 또는 2개의 독립적 스레드 식별 레지스터들(116) 및 명령어 예측 유효성 로직(118)이 추가로 제공될 수 있다. 하드웨어 스레드 유닛들(102a-102n) 각각에는 프로그램의 구현을 위해 요구되는 일 세트의 실행 프로그램 레지스터들(미도시)이 제공될 수 있다.
[0037] 일 예에서, 명령어들의 "그룹들"은, 각각, 명령어 메모리(I-캐시)(104)로부터 판독되고 명령어 디코더(I-디코더)(106)에 의해 디코딩될 수 있다. 디코딩된 정보는 파이프라인들 및 데이터 경로의 오퍼레이션들을 제어하는 명령어 발행 제어기(108)를 나가는 제어 신호들을 발생시키기 위해 이용될 수 있다. 다이렉트 레지스터 레퍼런스들은 레지스터 파일(109)(레지스터들(109)로 라벨링됨)로 송신될 수 있고 레지스터 파일(109) 내에 포함된 데이터는 하나 또는 그 초과의 ALU(arithmetic logic unit)들(110)(예에서, 명령어 파이프라인들 및 실행 유닛들(미도시)을 포함할 수 있음)로 송신될 수 있다. 데이터 메모리(112)에 저장되는 오퍼레이션 결과들이 다시 레지스터 파일(109)에 기록될 수 있다. 프로그램 카운터(PC)(105)가 업데이트될 수 있고, 다음 명령어가 명령어 메모리(I-캐시)(104)로부터 페치될 수 있다.
[0038] 일 예에서, 멀티스레드형 프로세서(100)에는 명령어 유효성 예측 로직(118)이 제공될 수 있다. 명령어 유효성 예측 로직(118)은, 클록 사이클 동안 발행 시퀀스에서 발행될 준비 명령어들 사이에서 임의의 의존성들이 존재하는지를 결정하도록 구성될 수 있다. 명령어 유효성 예측 로직(118)에 의해 제공되는 의존성 정보는, 현재 소프트웨어 스레드 및 임의의 추가 소프트웨어 스레드들이 다음 클록 사이클에 발행될 수 있는 유효 명령어들을 갖는지를 사전에 결정하는데 사용되는 "체이닝 비트들"의 형태로 인코딩되고 출력될 수 있다. 예에서, 다음 하드웨어 스레드 유닛(예를 들어, 102a)은 다음 사이클에서는 어떠한 유효 실행가능한 명령어들을 갖지 않지 않지만 현재 하드웨어 스레드 유닛(예를 들어, 102b)은 발행할 수 있는 대기 명령어들을 갖는다면, 명령어 유효성 예측 로직(118)의 로직은 현재 하드웨어 스레드가 다음 클록 사이클에서 명령어를 발행하도록 허용할 수 있다.
[0039] 일 예에서, 멀티스레드형 프로세서(100)의 엘리먼트들(104-118) 중 하나 또는 그 초과의 것이 하드웨어 스레드 유닛들(102a-102n)에 걸쳐 공유될 수 있다는 것이 당업자들에 의해 인식될 것이다. 예를 들어, 엘리먼트(104-118) 중 하나 또는 그 초과의 것(예를 들어, 하나 또는 그 초과의 ALU(arithmetic logic unit)들(110), 명령어 메모리(I-캐시)(104), 데이터 메모리(112) 등)은, 엘리먼트들(104-118) 중 하나 또는 그 초과의 것이 프로세서 상태를 나타내지 않는 경우 하드웨어 스레드 유닛들(102a-102n) 사이에서 공유될 수 있다. 반대로, 예에서, 프로세서 상태를 나타내는 엘리먼트들(104-118) 중 임의의 것이 하드웨어 스레드 유닛들(102a-102n) 각각에 대해 복제될 필요가 있다.
[0040] 명령어 체이닝은, 프로세서 명령어들의 시퀀스의 병렬성 및 명령어간 의존성들 양자 모두를 표시하기 위해, 명령어 당 하나의 비트(이후, "체이닝 비트(chaining bit)"로 지칭됨)를 이용한다. 본원에서 사용되는 것처럼, 명령어는 오퍼레이션 및 피연산자 구절들과 함께 독립적으로 어드레스가능한 유닛을 지칭한다(Gerrit A. Blaaw 및 Frederick P. Brooks, Jr의, "Computer Architecture: Concepts and Evolution," Addison Wesley, first edition, Feb. 1997, page 128) 참조). 다수의 명령어들이 함께 그룹화되어 함께 페치될 수 있는 명령어 그룹을 형성할 수 있다. 런타임시, 프로세서는, 개별 명령어들을 디코딩하지 않고도 효과적으로 명령어 스트림 내 의존성들 및 병렬성을 디코딩하기 위해 명령어 그룹의 명령어들로부터 체이닝 비트들을 리어셈블리한다. 이 정보는 명령어 발행에 대해 필요한 파이프라인 제어 신호들을 발생시키는데 이용될 수 있어, 파이프라인식 프로세서 아키텍처들에서 NOP 명령어들 또는 복잡한 명령어간 의존성 체크 하드웨어에 대한 필요성이 제거된다. 이 프로시저는, 프로그래머들에게 가시적이지 않은 파이프라인 효과들, 예컨대 긴 로드 파이프라인 스톨들, 분기 해상도, 및 다른 긴 레이턴시 오퍼레이션들과 공존할 수 있다. 각각의 명령어는 독립적으로 어드레스가능하기 때문에, 명령어 그룹의 중심부로의 점핑이 허용될 수 있다. 그러나, 명령어 그룹의 중심부로의 점핑시, 전체 그룹에 대한 의존성 비트들은 체이닝 비트 디코딩을 위해 재구성될 필요가 있다. 컴파일러가 명령어 의존성들을 분석하고 체이닝 비트들을 발생시키면, 프로그래머는 사실상 임의의 파이프라인 효과들을 인식(see)하지 못하며 해저드(hazard)들과 관련 없이 머신을 프로그래밍할 수 있다.
[0041] 상이한 프로세서 구현들과 호환가능한 일 세트의 체이닝 비트들을 정의하는 것이 가능할 수 있지만, 대부분의 구현들에 대해, 체이닝 비트들은 구현에 종속될 수 있다: 이들의 의미론은 이들이 프로그램되었던 프로세서상에서만 해석될 수 있다. 일 예에서, 싱글-발행 파이프라인식 프로세서는 하나의 체이닝 비트에 대해 단지 2개의 해석들만을 가질 수 있다. "0" 값은 체이닝 없음(no chaining)을 표시하고 "1" 값은 명령어가 다음 명령어와 체이닝될 수 있음을 표시한다. 따라서, 싱글-발행 파이프라인식 프로세서에서, 체이닝 비트는, 명령어들이 독립적인지 그리고 해저드들을 갖는지 아니면 갖지 않는지 여부만을 표시할 수 있다. 다른 예에서, 체이닝 비트의 로직은 체이닝을 표시하기 위해 "0"으로 해석되고 체이닝 없음을 표시하기 위해 "1"로 해석되도록 반전될 수 있다.
[0042] 싱글-발행 파이프라인식 프로세서에서의 명령어 체이닝
[0043] 체이닝의 가강 간단한 케이스로는 싱글-발행 파이프라인식 프로세서가 있으며, 이는 어떠한 명령어간 의존성들도 없는 경우 클록 사이클 당 하나의 명령어를 발행할 수 있다. 도 2는 2개의 독립적 명령어들의 예(200)를 도시하며, 명령어들(202, 204) 각각은 정보를 체이닝하기 위해 예비되는 대응 비트(206, 208)를 갖는다. 곱셈(multiply) 명령어(202)의 체이닝 비트(206)는 1로 설정되는데, 이는 덧셈(add) 명령어(204)가 독립적이며, 병렬로 실행될 수 있기 때문이다. 특정 프로세서의 용량들에 기초하여 임의의 수의 비트들이 함께 체이닝될 수 있다.
[0044] 예에서, 전형적인 파이프라인식-프로세서에 대해, 명령어간 의존성들이 존재한면, 파이프라인은, 의존성들이 해결될 때까지 스톨링되어야 한다. 체이닝 비트가 "1"로 설정되면, 이는, 다음 명령어가 현재 명령어 체인 내 임의의 명령어들과 어떠한 제어 또는 데이터 의존성들도 갖지 않는다는 표시이다. 따라서, 명령어가 즉시 발행될 수 있다. 체이닝 비트가 "0"으로 설정되면, 이는, 다음 명령어가 현재 명령어 체인 내 적어도 하나의 명령어와 제어 및/또는 데이터 의존성을 갖는다는 표시이다. 따라서, 이 명령어의 실행은, 현재 체인의 모든 명령어들이 실행을 완료하고 파이프라인을 나갈 때까지 시작될 수 없다.
[0045] 듀얼-발행 파이프라인식 프로세서에서의 명령어 체이닝
[0046] 듀얼-발행 파이프라인식 프로세서는, 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 2개의 명령어들(명령어 그룹)을 발행하도록 구성될 수 있다. 명령어 그룹들 간에 의존성이 있다면, 파이프라인은 이 의존성이 해결될 때까지 스톨링된다. 명령어 그룹 내에 의존성이 있다면, 명령어 그룹내 명령어들은 직렬로 발행되는데, 즉 제 1 명령어가 발행되고 제 1 명령어가 실행을 완료하고 파이프라인을 나갈 때까지 제 2 명령어는 스톨링된다.
[0047] 명령어 그룹에서의 각각의 명령어는 체이닝 비트를 갖는다. 이에 따라, 듀얼-발행 프로세서에서, 명령어 그룹당 이용가능한 2개의 체이닝 비트들이 있고 따라서 4개의 시나리오들이 인코딩될 수 있다. 예에서, 하나의 체이닝 비트는 수직 병렬성(그룹간 병렬성)을 표시하는데 사용될 수 있고, 제 2 체이닝 비트는 수평 병렬성(그룹내 병렬성)을 표시하는데 사용될 수 있다.
[0048] 도 3은 듀얼-발행 파이프라인식 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다. 체이닝 비트들 i1i2는, 각각, 명령어 그룹의 제 1 명령어 및 제 2 명령어로부터 취해질 수 있다. 체이닝 비트 i1는 그룹내 병렬성 비트이다. 그룹내 병렬성 비트가 1이면, 그룹의 제 2 명령어는 그룹의 제 1 명령어와 병렬로 발행될 수 있다. 그룹내 병렬성 비트가 0이면, 제 2 명령어는 제 1 명령어가 실행을 완료할 때까지 대기해야 한다. 체이닝 비트 i2는 그룹간 병렬성 비트이다. 그룹간 병렬성 비트가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. 그룹간 병렬성 비트가 0이면, 다음 실행 그룹은, 현재 실행 그룹이 실행을 완료할 때까지 대기해야 한다.
[0049] 3-발행 파이프라인식 프로세서에서의 명령어 체이닝
[0050] 3-발행 파이프라인식 프로세서는, 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 3개의 명령어들(명령어 그룹)을 발행할 수 있다. 명령어 그룹들 간에 의존성이 있다면, 파이프라인은 이 의존성이 해결될 때까지 스톨링된다. 명령어 그룹 내에 의존성이 있다면, 명령어 그룹내 명령어들은 체이닝 비트들에 의해 표시된 것처럼 직렬로 또는 부분적으로는 병렬로 발행된다. 명령어 그룹에서의 각각의 명령어는 단일 체이닝 비트를 갖는다. 따라서, 3-발행 프로세서에는, 8개의 의미론 조합들을 산출하는, 명령어 그룹당 이용가능한 3개의 체이닝 비트들이 존재한다. 하나의 체이닝 비트는 (명령어 그룹들에 걸쳐) 수직 병렬성을 표시하는데 사용될 수 있고 다른 2개의 체이닝 비트들은 (명령어 그룹내에서의) 수평 병렬성을 표시하는데 사용될 수 있다.
[0051] 도 4는 3-발행 프로세서에서의 명령어 체이닝에 대한 의미론의 일 예를 도시한다. 도 4에 표시된 체이닝 비트 조합들에 대한 명령어 체이닝에 대한 의미론의 예는 수평 병렬성에서의 최대 유연성(flexibility)을 제공한다. 도 4에서의 x의 값은 체이닝 비트가 0 또는 1일 수 있다는 것을 표시한다. 체이닝 비트들 i1 , i2 i3은, 각각, 명령어 그룹의 제 1, 제 2 및 제 3 명령어들로부터 취해질 수 있다. 체이닝 비트들 i1i2는 그룹내 병렬성 비트들이다. i1 또는 i2가 1이면, 그룹의 다음 명령어는 그룹의 현재 명령어와 병렬로 발행될 수 있다. i1 또는 i2가 0이면, 다음 명령어는 현재 실행중인 명령어들이 실행을 완료할 때까지 대기해야 한다. 체이닝 비트 i3는 그룹간 병렬성 비트이다. i3가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. i3가 0이면, 다음 실행 그룹은 현재 실행 그룹이 실행을 완료할 때까지 대기할 필요가 있다.
[0052] 수평 병렬성에서의 최고(full) 유연성이 필요하지 않는 경우, 2개의 체이닝 비트들이 수직 및 수평 병렬성을 인코딩하는데 충분할 수 있다(3개의 모든 명령어들이 함께 발행되거나 또는 함께 발행되지 않음). 추가 정보를 인코딩하기 위해 제 3 체이닝 비트가 사용될 수 있다.
[0053] 4-발행 파이프라인식 프로세서에서의 명령어 체이닝
[0054] 4-발행 파이프라인식 프로세서는 어떠한 명령어 의존성들도 없는 경우 각각의 모든 사이클마다 4개의 명령어들을 발행한다. 명령어 그룹들 간에 의존성이 있다면, 파이프라인은 의존성이 해결될 때까지 스톨링될 수 있다. 명령어 그룹내에 의존성이 있다면, 명령어 그룹내 명령어들은 체이닝 비트들에 의해 표시된 것처럼 직렬로 또는 부분적으로 병렬로 발행될 수 있다.
[0055] 명령어 그룹에서의 각각의 명령어는 단일 체이닝 비트를 갖는다. 따라서, 4-발행 프로세서에서는, 16개의 의미론 조합들을 산출하는, 명령어 그룹당 이용가능한 4개의 체이닝 비트들이 존재한다. 하나의 체이닝 비트는 (명령어 그룹들에 걸쳐) 수직 병렬성을 표시하는데 사용될 수 있고 다른 3개의 체이닝 비트들은 (명령어 그룹내 명령어들을 실행하는) 수평 실행을 위한 다른 가능성들을 표시하는데 사용될 수 있다.
[0056] 도 5는 4-발행 프로세서에 대한 일 세트의 명령어 체이닝 의미론의 일 예를 도시한다. 도 5에서의 x의 값은 체이닝 비트가 0 또는 1일 수 있다는 것을 표시한다. 체이닝 비트들 i1 , i2 , i3 , i4은, 각각, 명령어 그룹의 제 1, 제 2, 제 3 및 제 4 명령어들로부터 취해질 수 있다. 체이닝 비트 i4는 그룹간 병렬성 비트이다. i4가 1이면, 다음 실행 그룹은 현재 실행 그룹 뒤 다음 클록 사이클에서 파이프라인에 진입할 수 있다. i4가 0이면, 다음 실행 그룹은 현재 실행 그룹이 실행을 완료할 때까지 대기해야 한다. 체이닝 비트들 i1 , i2i3은 그룹내 병렬성을 표시하는데 사용될 수 있다. 예에서, 체이닝 비트들 i1 , i2i3의 일부 조합들은 그룹(001x, 010x, 011x, 100x)의 명령어들 내에서의 가능한 병렬성을 표시하며, 다른 조합들은 그룹(101x, 110x, 111x)의 명령어들 내에서의 의무적 병렬성을 표시한다. 가능한 병렬성은 이용가능한 병렬성을 드러내지만, 프로세서는 이를 사용할 수도 있고 사용하지 않을 수도 있다. 결과들은, 명령어들이 병렬로 실행되든 또는 순차적으로 실행되든지 간에 동일하게 유지된다. 의무적 병렬성은 원하는 결과들을 획득하기 위해 명령어들이 병렬로 실행되어야 함을 표시한다.
[0057] 체이닝을 이용함으로써, 의존성들이 명령어들의 시퀀스에 걸쳐 인코딩될 수 있다. 도 4의 예에서, 3-발행 머신은 8개의 가능한 의존성 타입들을 인코딩하기 위해 3개의 체이닝 비트들(각각의 명령어로부터 하나)을 이용할 수 있다. 이런 의미에서, 체이닝은 명령어들의 그룹들로 확장될 수 있다. 예를 들어, 3개의 명령어들의 체이닝 비트들로부터 디코딩된 "000"은, 현재 그룹내 명령어들 모두가 체이닝되지 않았고 다음 그룹의 명령어들이 현재 그룹의 명령어들과 체이닝되지 않을 수도 있다는 것으로 해석될 수 있다.
[0058] 일 예에서, 다중 발행 프로세서에서, 체이닝 비트들 중 하나가 그룹간 병렬성을 위해 예비되어, 현재 그룹의 명령어 이후의 다음 그룹의 명령어들이 현재 그룹의 명령어들과 함께 임의의 제어 또는 데이터 의존성들을 포함하는지를 표시할 수 있다. 어떠한 의존성들도 없다면, 다음 그룹의 명령어들은 임의의 파이프라인 스톨들 없이 현재 그룹의 명령어들과 동시에 파이프라인 아래로(down) 발행될 수 있다. 명령어 그룹내 다른 체이닝 비트들은 현재 명령어 그룹에서의 명령어들 간의 의존성들 및 병렬성을 표시하는 그룹내(intra-group) 병렬성 정보를 설명할 수 있다.
[0059] 체이닝 비트들은 또한, 레지스터 파일로부터 이를 다시 판독하기보다는 바이패스 값을 사용하여 프로세서에게 알리는 것과 같은 성능 개선 기술들을 인코딩할 수 있다. 일부 상황들에서, 이는 프로세서에 의해 낭비되는 전력을 감소시킬 수 있다.
[0060] 유리하게, 병렬성 및 의존성들 양자 모두가 일 그룹의 명령어들에 걸쳐 인코딩될 수 있다. 체이닝 비트들은 명령어간 의존성들, 그룹간 의존성들 및 성능 최적화들을 인코딩하기 위해 이용될 수 있으며, 이는 실행 동안, 파이프라인식-프로세서에서 필요한 파이프라인 제어 신호들을 신속하게 발생시키는 것을 도와 복잡한 의존성 체크 하드웨어에 대한 필요성을 없앤다.
[0061] 다시 도 1로 가서, 일 예에서, 명령어 유효성 예측 로직(118)은, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드 유닛에 발행되기를 대기하는 제 1 명령어를 갖지 않는지를 결정하도록 구성될 수 있다. 명령어 유효성 예측 로직(118)은, 발행 시퀀스의 하나 또는 그 초과의 대안적 소프트웨어 스레드들이 발행되기를 대기하는 명령어들을 갖는 것을 식별하도록 구성될 수 있다. 명령어 유효성 예측 로직(118)은, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 결정을 고려하여, 클록 사이클 동안, 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 제 2 명령어를 선택하도록 구성될 수 있다. 의존성들은, 발행되기를 대기하는 각각의 명령어들로부터 추출된 체이닝 비트의 값들을 고려하여 식별될 수 있다. 명령어 발행 제어기(108)는 하드웨어 스레드 유닛에 제 2 명령어를 발행하도록 구성될 수 있다.
[0062] 예에서, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 것을 결정하기 위해, 명령어 유효성 예측 로직(118)은, 발행되기를 대기하는 명령어들 중 제 1 명령어 및 다른 명령어들을 명령어들의 그룹으로 그룹화한다. 명령어 유효성 예측 로직(118)은, 체이닝 비트들의 시퀀스를 생성하기 위해 그룹의 명령어들의 각각의 명령어로부터 지정된 비트를 추출한다. 명령어 유효성 예측 로직(118)은 체이닝 비트들의 시퀀스를 디코딩할 수 있다. 체이닝 비트들의 시퀀스는 명령어들의 그룹에 있는 명령어들 어느 것도 디코딩하지 않고 디코딩된다. 명령어 유효성 예측 로직(118)은, 디코딩된 체이닝 비트들의 시퀀스를 고려하여 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 의존성들을 식별할 수 있다. 예에서, 명령어들의 그룹내 2 또는 그 초과의 명령어들 간의 임의의 식별된 의존성은 제어 의존성 또는 데이터 의존성일 수 있다. 명령어 유효성 예측 로직(118)은 이후, 제 2 명령어가 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관됨을 결정할 수 있다.
[0063] 일 예에서, 멀티스레드형 프로세서(100)에는 세트의 2차원 스레드 식별(ID) 레지스터들(116) 또는 2개의 독립적 스레드 식별 레지스터들(116)(이후, "스레드 ID 레지스터들(116)")이 추가로 제공될 수 있다. 이 정보는 각각의 모든 파이프라인 스테이지에서 이용가능하게 구성될 수 있다. 멀티스레드형 프로세서(100)는, 명령어들이 적절히 리어셈블리되고 명령어가 속하는 오리지널 소프트웨어 스레드에 상태가 할당되는 것을 보장하기 위해, 각각의 모든 파이프라인 스테이지에서 복수의 소프트웨어 스레드들의 명령어 실행을 추적하기 위해 스레드 ID 레지스터들(116)을 이용할 수 있다.
[0064] 일 예에서, 각각의 소프트웨어 스레드에 대한 명령어 발행 사이클은 더 이상 고정될 필요가 없고 하드웨어 스레드 유닛들은 유효 명령어들이 임의의 소프트웨어 스레드로부터 발행되도록 이용가능한 경우 NOP들을 발행할 필요가 없다.
[0065] 특정 하드웨어 스레드 유닛(예를 들어, 102a)에서의 명령어가 캐시 누락(cache miss)을 경험할 경우, 캐시 누락은 캐시 누락을 경험한 하드웨어 스레드 유닛에 할당되는 클록 사이클들에 대한 다른 명령어들의 발행을 차단하지 못한다. 각각의 명령어는, 그가 어느 클록 사이클에서 발행되었는지와 상관없이, 명령어가 발생된 오리저널 소프트웨어 스레드와 명령어가 연관되는 것을 허용하는 고유 스레드 식별자(ID)를 보유한다.
[0066] 다음 클록 사이클에서 발행을 대기하는 유효 명령어들이 있다면, 하드웨어 스레드 유닛(예를 들어, 102a)은, 하드웨어 스레드 유닛(예를 들어, 102a)에 할당되는 소프트웨어 스레드로부터의 명령어들을 발행할 수 있다. 어떠한 대기 명령어들도 없다면, 발행 로직은 현재 소프트웨어 스레드로부터 명령어들을 할당할 수 있다.
[0067] 부정확한 결과들을 방지하기 위해, 각각의 소프트웨어 스레드가 스레드 사이클 동안 명령어들을 다수번 발행할 수 있는 기회가 있기 때문에, 상이한 클록 사이클들에서 발행되는 명령어들 및 소프트웨어 스레드들을 추적하고 식별하기 위해 스레드 ID 레지스터들(116)이 제공된다.
[0068] 일 예에서, 명령어 발행 제어기(108)는 시퀀스의 제 2 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드 유닛에 제 1 인덱스를 할당하도록 구성될 수 있다. 명령어 발행 제어기(108)는 클록 사이클에 대응하는 하드웨어 스레드 유닛에 제 2 인덱스를 할당하도록 구성될 수 있다. 명령어 발행 제어기(108)는 원래 제 2 명령어를 발행한 제 2 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용하도록 구성될 수 있다. 일 예에서, 명령어 발행 제어기(108)가, 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드 유닛에 발행되기를 대기하는 제 1 명령어를 갖는다고 결정하는 것에 응답하여, 명령어 발행 제어기(108)는 하드웨어 스레드 유닛에 제 1 명령어를 발행할 수 있다.
[0069] 다른 예에서, 명령어 발행 제어기(108)는 발행 시퀀스에서 현재 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드 유닛에 제 1 인덱스를 할당하도록 구성될 수 있다. 명령어 발행 제어기(108)는 클록 사이클에 대응하는 하드웨어 스레드 유닛에 제 2 인덱스를 할당하도록 구성될 수 있다. 일 예에서, 명령어 발행 제어기(108)는 원래 제 1 명령어를 발행한 현재 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용할 수 있다.
[0070] 도 6은 명령어 의존성 예측 회로(118)의 일 예를 도시한다. 명령어 의존성 예측 회로(118)는 명령어 준비-발행 로직(instruction ready-to-issue logic)(603), 체이닝 비트 인코더(605), 및 체이닝 비트 디코더(608)를 포함할 수 있다. 준비 명령어-발행 로직(603)은, 발행 시퀀스(예를 들어, 라운드-로빈(round-robin) 토큰-트리거식 스레딩 시퀀스)를 갖는 소프트웨어 스레드들의 시퀀스의 각각의 소프트웨어 스레드가 특정 클록 사이클 동안 발행되기를 대기하는 명령어들을 갖는지를 식별하도록 구성될 수 있다. 준비-발행 로직(603)은 추가로, 발행되기를 대기하는 명령어의 세트를 일 그룹의 명령어들(이후, "명령어 그룹"(606))로 그룹화하도록 구성될 수 있다.
[0071] 체이닝 비트 인코더(605)는 준비 명령어-발행 로직(603)에 의해 식별되는 명령어 스트림(601)으로부터 명령어 그룹(606)을 수신하도록 구성될 수 있다. 체이닝 비트 인코더(605)는 수신된 명령어 그룹(606) 사이에서 제로 또는 그 초과의 명령어 스트림 의존성들을 식별하도록 구성될 수 있다. 체이닝 비트 인코더(605)는, 명령어 그룹(606) 사이에 제로 또는 그 초과의 인코딩된 명령어 스트림 의존성들을 포함하는 체이닝 비트들의 시퀀스를 생성하도록, 수신된 명령어 그룹(606)의 각각의 명령어의 비트를 인코딩하도록 구성될 수 있다.
[0072] 체이닝 비트 디코더(608)는, 명령어 그룹(606)의 명령어들(604a-604n)로부터 체이닝 비트들(602)을 추출하고, 추출된 체이닝 비트들(602)을 디코딩하고 그리고 의존성 정보, 병렬성 정보 및 성능 최적화들이 명령어들의 시퀀스에 인코딩된 하위 명령어들을 검사하지 않고 디코딩되는 것을 가능하게 하는 파이프라인 제어 신호들을 발생시키도록 구성될 수 있다. 도 6에서, 체이닝 비트 디코더(608)는 추출된 체이닝 비트들(602)로부터 수신되는 인코딩된 체이닝 비트 조합들의 의미론을 디코딩하도록 구성될 수 있고, 명령어 발행 제어기(610)에 대한 적합한 제어들을 발생시키도록 구성될 수 있다.
[0073] 일 예에서, 체이닝 비트 디코더(608)는 체이닝 비트들(602)의 시퀀스를 생성하기 위해 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))의 각각의 명령어로부터 지정된 비트를 추출하도록 구성될 수 있다. 체이닝 비트 디코더(608)는 체이닝 비트들(602)의 시퀀스를 디코딩할 수 있다. 체이닝 비트들(602)의 시퀀스는 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))에 있는 명령어들 어느 것도 디코딩하지 않고 디코딩될 수 있다. 체이닝 비트 디코더(608)는, 디코딩된 체이닝 비트들(602)의 시퀀스를 고려하여 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 간의 제로 또는 그 초과의 명령어 의존성들을 식별할 수 있다. 예에서, 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))의 그룹 내 2 또는 그 초과의 명령어들 간의 임의의 식별된 의존성은 제어 의존성 또는 데이터 의존성일 수 있다. 체이닝 비트 디코더(608)는 이후, 명령어 그룹(606)의 하나 또는 그 초과의 명령어들(예를 들어, 제 2 명령어)이 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관됨을 결정할 수 있다.
[0074] 명령어 발행 제어기(610)는 제어 신호들(614)을 사용하여 (직렬로, 병렬로, 또는 부분적으로 병렬로) 명령어 그룹내 명령어들의 발행을 제어하도록 구성될 수 있거나 또는 명령어 발행 제어기(610)는 제어 신호들(616)을 사용하여 다음 명령어 그룹의 발행을 제어할 수 있다. 명령어 발행 제어기(610)는 체이닝 비트 디코더(608)로부터 커맨드들을 수신하도록 구성될 수 있으며, 필요한 경우, (예를 들어, 파이프라인 클록들(624a-624n), 파이프라인 스테이지 로직(626a-626n), 및 대응 레지스터들(628a-628n)을 포함하는) 파이프라인 스테이지(618a-618n)에서 명령어 발행을 스톨링하도록 파이프라인 제어 신호들을 발생시킬 수 있다. 파이프라인 상태 모니터(620)는 파이프라인 스테이지(618)에서 현재 실행되는 명령어들을 모니터링하고 명령어 발행 제어기(610)에 피드백(622)을 제공하여 스톨 이후 명령어 발행을 재시작하도록 구성될 수 있다. VLIW 및 가시적 파이프라인 설계들에서와 달리, 본 개시내용의 예들에서의 중요한 고려사항은, 컴파일러 또는 프로그래머가 임의의 파이프라인 효과들을 확인할 수 없도록 파이프라인 제어들이 발생된다는 것이다.
[0075] 일 예에서, 명령어 발행 제어기(610)는, 준비-발행 로직(603)으로부터 수신된 제어 신호들(616)에 기초하여, 클록 사이클 동안, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 하드웨어 스레드 유닛(예를 들어, 102a)에 발행되기를 대기하는 제 1 명령어를 갖지 않는다는 것을 결정하도록 구성될 수 있다. 명령어 발행 제어기(610)는, 체이닝 비트 디코더(608)로부터 수신된 제어 신호들(616)에 기초하여, 발행되기를 대기하는 명령어들을 갖는 발행 시퀀스에서의 하나 또는 그 초과의 대안적 소프트웨어 스레드들을 식별하도록 구성될 수 있다. 명령어 발행 제어기(610)는, 체이닝 비트 디코더(608)로부터 수신된 제어 신호들(616)을 기초하여, 클록 사이클 동안, 제 2 명령어가 발행되기를 대기하는 명령어들 중 어떠한 다른 명령어들과도 의존성들을 갖지 않는다는 체이닝 비트 디코더(608)의 결정을 고려하여, 하나 또는 그 초과의 다른 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 제 2 명령어를 선택하도록 구성될 수 있다. 의존성들은, 체이닝 비트 디코더(608)에 의해 발행되기를 대기하는 각각의 명령어들로부터 추출된 체이닝 비트의 값들을 고려하여 체이닝 비트 디코더(608)에 의해 식별될 수 있다. 예에서, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛에 제 2 명령어를 발행하도록 구성될 수 있다.
[0076] 도 7은 의존성 정보, 병렬성 정보 및 성능 최적화들이 명령어들의 시퀀스에서 인코딩되는 것을 가능하게 하기 위한 방법(700)의 예를 예시하는 흐름도이다. 방법(700)은, 예를 들어, 도 1 및 도 6의 컴퓨터 프로세서의 체이닝 비트 인코더(605)에 의해 또는 다른 타입들의 컴퓨터 프로세서에 의해 수행될 수 있으며 하드웨어(예를 들어, 회로, 전용 로직, 프로그램가능한 로직, 마이크로코드 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서의 실행 명령어들), 또는 이들의 조합을 포함할 수 있다. 일 예에서, 방법(700)은 도 1 및 도 6의 컴퓨터 프로세서(100)의 체이닝 비트 인코더(605)에 의해 수행될 수 있다.
[0077] 도 7에 도시된 것처럼, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스에 인코딩되는 것이 가능하도록 허용하기 위해, 블록(705)에서, 멀티스레드형 프로세서(100)상에서 실행되는 체이닝 비트 인코더(605)가 명령어 스트림(601)을 수신한다. 블록(710)에서, 체이닝 비트 인코더(605)는 명령어 스트림(601)으로부터 일 그룹의 명령어들(예를 들어, 명령 그룹(606)의 명령어들(604a-604n))을 선택한다.
[0078] 블록(715)에서, 체이닝 비트 인코더(605)는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별한다. 블록(720)에서, 체이닝 비트 인코더(605)는, 그룹 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 간의 제로 또는 그 초과의 인코딩된 명령어 스트림 의존성들을 포함하는 체이닝 비트들(602)의 시퀀스를 생성하기 위해, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))의 각각의 명령어로부터 비트를 인코딩한다.
[0079] 일 예에서, 인코딩된 체이닝 비트들(602)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 중 2 또는 그 초과의 명령어들이 병렬로 실행될 수 있음을 표시할 수 있다. 다른 예에서, 인코딩된 체이닝 비트들(602)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 중 2 또는 그 초과의 명령어들이 직렬로 실행되어야 함을 표시할 수 있다. 다른 예에서, 인코딩된 체이닝 비트들(602)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 중 2 또는 그 초과의 명령어들이 병렬로 실행되어야 함을 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))이 부분적으로는 병렬로 그리고 부분적으로는 직렬로 실행될 수 있음을 표시할 수 있다.
[0080] 예에서, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))에 배치될 체이닝 비트 인코더(605)에 대한 명령어들의 수는, 선택된 그룹의 명령어들이 실행될 프로세서(예를 들어, 프로세서(100))의 발행 폭에 기초할 수 있다.
[0081] 예에서, 체이닝 비트 인코더(605)는, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))내의 2 또는 그 초과의 명령어들 간의 의존성을 제어 의존성 또는 데이터 의존성으로서 식별할 수 있다.
[0082] 예에서, 인코딩된 체이닝 비트들(602)의 시퀀스에서의 하나 또는 그 초과의 비트들은 실행가능한 프로그램의 성능을 최적화시키도록 동작가능할 수 있다. 인코딩된 체이닝 비트들(602)의 시퀀스는 파이프라인 제어 신호들로서 기능하도록 동작가능할 수 있다.
[0083] 일 예에서, 블록(725)에서, 체이닝 비트 인코더(605)는 선택된 그룹의 명령어들을 제 1 그룹의 명령어 및 제 2 그룹의 명령어들로 나눌 수 있다. 블록(730)에서, 체이닝 비트 인코더(605)는 제 1 그룹의 명령어들과 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들을 식별할 수 있다. 블록(735)에서, 체이닝 비트 인코더(605)는 인코딩된 체이닝 비트들의 시퀀스를 제 1 그룹의 명령어들과 제 2 그룹의 명령어들 간의 제로 또는 그 초과의 명령어 스트림 의존성들로 추가 인코딩될 수 있다. 예에서, 인코딩된 체이닝 비트들의 시퀀스에서의 비트는 제 1 그룹의 명령어들이 제 2 그룹의 명령어들과 병렬로 실행될 수 있다는 것을 표시할 수 있다.
[0084] 도 8은, 의존성 정보, 병렬성 정보, 및 성능 최적화들이 명령어들의 시퀀스에 인코딩된 하위(underlying) 명령어들을 검사하지 않고 디코딩되는 것을 가능하게 하는 방법(800)의 예를 예시하는 흐름도이다. 방법(800)은 도 1의 멀티스레드형 프로세서(100)에 의해 수행될 수 있으며, 일 예에서는 도 1 및 도 6의 명령어 의존성 예측 회로(118)(예를 들어, 회로, 전용 로직, 프로그램가능 로직, 마이크로코드 등)의 체이닝 비트 디코더(608)에 의해 주로 수행될 수 있다.
[0085] 도 8에 도시된 것처럼, 블록(805)에서, 멀티스레드형 프로세서(100)의 체이닝 비트 디코더(608)는 명령어 스트림을 수신한다. 블록(810)에서, 체이닝 비트 디코더(608)는 명령어 스트림으로부터 일 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))을 선택한다. 블록(815)에서, 체이닝 비트 디코더(608)는 체이닝 비트들(602)의 시퀀스를 생성하기 위해 명령어 스트림의 각각의 명령어(예를 들어, 604a-604n)로부터 지정된 비트(602)를 추출한다. 블록(820)에서, 체이닝 비트 디코더(608)는 체이닝 비트들(602)의 시퀀스를 디코딩한다. 블록(825)에서, 체이닝 비트 디코더(608)는, 디코딩된 체이닝 비트들(602)의 시퀀스를 고려하여, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 중 2 또는 그 초과의 명령어들 간의 제로 또는 그 초과의 의존성들을 식별한다. 예에서, 선택된 그룹의 명령어들(604a-604n) 중 2 또는 그 초과의 명령어들 간에 식별된 의존성은 제어 의존성 또는 데이터 의존성일 수 있다.
[0086] 블록(830)에서, 체이닝 비트 디코더(608)는, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 중 2 또는 그 초과의 명령어들 간의 식별된 제로 또는 그 초과의 의존성들을 고려하여, 하나 또는 그 초과의 파이프라인 스테이지들(618)로 하여금, 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))을 실행하게 하기 위해 제어 신호들을 (예를 들어, 명령어 발행 제어기(610)에) 출력한다. 체이닝 비트들(602)의 시퀀스는 선택된 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))에 있는 명령어들 어느 것도 디코딩하지 않고 체이닝 비트 디코더(608)에 의해 디코딩될 수 있다.
[0087] 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(604a-604n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(618)에 의해 병렬로 실행될 수 있다는 것을 명령어 발행 제어기(610)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(604a-604n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(618)에 의해 직렬로 실행될 수 있다는 것을 명령어 발행 제어기(610)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들(604a-604n)에서의 2 또는 그 초과의 명령어들이 파이프라인 스테이지들(618)에 의해 병렬로 실행되어야 한다는 것을 명령어 발행 제어기(610)에 표시할 수 있다. 다른 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 나머지 비트들은, 선택된 그룹의 명령어들이 파이프라인 스테이지들(610)에 의해 부분적으로는 병렬로 그리고 부분적으로는 직렬로 실행될 수 있다는 것을 명령어 발행 제어기(618)에 표시할 수 있다.
[0088] 예에서, 선택된 그룹의 명령어들(604a-604n)에 배치될 명령어들의 수는 멀티스레드형 프로세서(100)의 발행 폭에 기초할 수 있다.
[0089] 예들에서, 체이닝 비트 디코더(608)는, 체이닝 비트들(602)을 사용하여, 선택된 그룹의 명령어 내의 그룹내 의존성들을 식별하도록 구성될 수 있다. 이에 따라, 블록(835)에서, 체이닝 비트 디코더(608)는, 선택된 그룹의 명령어들(604a-604n) 및 연관된 체이닝 비트들(608)을 제 1 그룹의 명령어들 및 제 2 그룹의 명령어들로 나눠 (예를 들어, 그룹들 사이의) 그룹내 의존성들을 식별할 수 있다.
[0090] 블록(840)에서, 체이닝 비트 디코더(608)는 디코딩된 체이닝 비트들(602)의 시퀀스에 기초하여 명령어 스트림으로부터 선택된 제 1 그룹의 명령어들 중의 명령어와 제 2 그룹의 명령어들 중의 명령어 간의 제로 또는 그 초과의 의존성들을 식별할 수 있다. 블록(845)에서, 체이닝 비트 디코더(608)는, 제 1 그룹의 명령어들 중의 명령어와 제 2 그룹의 명령어들 중의 명령어 간의 식별된 제로 또는 그 초과의 의존성들에 기초하여, 하나 또는 그 초과의 파이프라인 스테이지들(618)로 하여금 제 2 그룹의 명령어들을 실행하게 하기 위해 제어 신호들을 (예를 들어, 명령어 발행 제어기(610)에) 출력할 수 있다. 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 비트는 제 1 그룹의 명령어들이 제 2 그룹의 명령어들과 병렬로 실행될 수 있다는 것을 표시할 수 있다. 제 1 그룹의 명령어들 중 하나 또는 그 초과의 명령어들과, 제 2 그룹의 명령어들 중 하나 또는 그 초과의 명령어들 간의 식별된 의존성은 제어 의존성들 또는 데이터 의존성들일 수 있다.
[0091] 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스에서의 하나 또는 그 초과의 비트들은 멀티스레드형 프로세서(100)의 성능을 최적화시키도록 동작가능할 수 있다. 예에서, 디코딩된 체이닝 비트들(602)의 시퀀스는 파이프라인 스테이지들(618)에 대한 파이프라인 제어 신호들로서 기능하도록 동작가능할 수 있다.
[0092] 도 9는, 하드웨어 스레드 유닛들(예를 들어, 102a-102n)보다 소프트웨어 스레드들이 적을 경우 멀티스레드형 프로세서에서의 미사용 클록 사이클들을 최소화시키기 위한 방법(900)의 예를 예시하는 흐름도이다. 방법(900)은, 예를 들어, 도 1 및 도 6의 (멀티스레드형) 컴퓨터 프로세서(100)에 의해 수행될 수 있고, 하드웨어(예를 들어, 회로, 전용 로직, 프로그램가능한 로직, 마이크로코드 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서의 실행 명령어들), 또는 이들의 조합을 포함할 수 있다. 일 예에서, 방법(900)은 도 1 및 도 6의 (예를 들어, 멀티스레드형) 컴퓨터 프로세서(100)의 명령어 유효성 예측 로직(118) 및 명령어 발행 제어기(610)에 의해 수행될 수 있다.
[0093] 도 9에 도시된 것처럼, 하드웨어 스레드 유닛들보다 소프트웨어 스레드들이 적은 경우 멀티스레드형 프로세서(100)에서의 미사용 클록 사이클들을 최소화시키기 위해, 블록(905)에서, 멀티스레드형 프로세서(100)(예를 들어, 컴퓨팅 디바이스(100))상에서 실행되는 명령어 유효성 예측 로직(118)은, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드 유닛(예를 들어, 102a)에 발행되기를 대기하는 제 1 명령어를 갖지 않는다는 것을 결정할 수 있다. 블록(910)에서, 멀티스레드형 프로세서(100)의 명령어 발행 제어기(610)는, 발행 시퀀스에서 하나 또는 그 초과의 대안적 소프트웨어 스레드들이 발행되기를 대기하는 명령어들을 갖는다는 것을 식별할 수 있다. 블록(915)에서, 명령어 발행 제어기(610)는, 명령어 유효성 예측 로직(118)이 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다고 결정하는 것을 고려하여, 클록 사이클 동안, 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 제 2 명령어를 선택할 수 있다. 의존성들은, 명령어 발행 제어기(610)에 의해 발행되기를 대기하는 각각의 명령어들로부터 추출된 체이닝 비트의 값들을 고려하여 명령어 유효성 예측 로직(118)에 의해 식별될 수 있다. 블록(920)에서, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(예를 들어, 102a)에 제 2 명령어를 발행할 수 있다.
[0094] 다른 예에서, 명령어 발행 제어기(610)는 시퀀스에서 제 2 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드 유닛(예를 들어, 102a)에 (예를 들어, 스레드 ID 레지스터들(116)에) 제 1 인덱스를 할당할 수 있다. 명령어 발행 제어기(610)는 클록 사이클에 대응하는 하드웨어 스레드 유닛(예를 들어, 102a)에 (예를 들어, 스레드 ID 레지스터들(116)에) 제 2 인덱스를 할당할 수 있다. 예에서, 명령어 발행 제어기(610)는 원래 제 2 명령어를 발행한 제 2 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용할 수 있다. 예에서, 명령어 유효성 예측 로직(118)이 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드 유닛(예를 들어, 102a)에 발행되기를 대기하는 제 1 명령어를 갖는다고 결정하는 것에 응답하여, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(예를 들어, 102a)에 제 1 명령어를 발행할 수 있다.
[0095] 다른 예에서, 명령어 발행 제어기(610)는 발행 시퀀스에서 현재 소프트웨어 스레드의 포지션에 대응하는 하드웨어 스레드 유닛(예를 들어, 102a)에 (예를 들어, 스레드 ID 레지스터들(116)에) 제 1 인덱스를 할당할 수 있다. 명령어 발행 제어기(610)는 클록 사이클에 대응하는 하드웨어 스레드 유닛(예를 들어, 102a)에 (예를 들어, 스레드 ID 레지스터들(116)에) 제 2 인덱스를 할당할 수 있다.
[0096] 예에서, 멀티스레드형 프로세서(100)는, 원래 제 1 명령어를 발행한 현재 소프트웨어 스레드를 식별하기 위해 제 1 인덱스 및 제 2 인덱스를 이용할 수 있다.
[0097] 예에서, 발행 시퀀스는 초기에 토큰-트리거식 멀티스레딩 시퀀스일 수 있다. 예에서, 복수의 소프트웨어 스레드들의 소프트웨어 스레드들의 수는 이용가능한 하드웨어 스레드 유닛들의 수보다 적을 수 있다.
[0098] 도 10은, 도 9의 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는지를 결정하기 위한 방법(1000)의 예를 예시하는 흐름도이다. 방법(1000)은, 예를 들어, 도 1 및 도 6의 (예를 들어, 멀티스레드형) 컴퓨터 프로세서(100)에 의해 수행될 수 있으며, 하드웨어(예를 들어, 회로, 전용 로직, 프로그램가능한 로직, 마이크로코드 등), 소프트웨어(예를 들어, 프로세싱 디바이스 상에서의 실행 명령어들), 또는 이들의 조합을 포함할 수 있다. 일 예에서, 방법(1000)은 도 1 및 도 6의 (예를 들어, 멀티스레드형) 컴퓨터 프로세서(100)의 명령어 유효성 예측 로직(118)에 의해 수행될 수 있다.
[0099] 도 10에 도시된 것처럼, 도 9의 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과의 의존성들을 갖지 않는지를 결정하기 위해, 블록(1005)에서, 멀티스레드형 프로세서(100)(예를 들어, 컴퓨팅 디바이스(100)) 상에서 실행되는 명령어 유효성 예측 로직(118)은, 발행되기를 대기하는 명령어들 중 제 1 명령어 및 다른 명령어들을 일 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))로 그룹화될 수 있다. 블록(1010)에서, 명령어 유효성 예측 로직(118)은, 체이닝 비트들(602)의 시퀀스를 생성하기 위해 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n))의 각각의 명령어로부터 지정된 비트를 추출할 수 있다. 블록(1015)에서, 명령어 유효성 예측 로직(118)은 체이닝 비트들(602)의 시퀀스를 디코딩할 수 있다. 체이닝 비트들(602)의 시퀀스는 명령어들의 그룹에 있는 명령어들 어느 것도 디코딩하지 않고 디코딩된다. 블록(1020)에서, 명령어 유효성 예측 로직(118)은 디코딩된 체이닝 비트들(602)의 시퀀스를 고려하여 그룹의 명령어들(예를 들어, 명령어 그룹(606)의 명령어들(604a-604n)) 간의 제로 또는 그 초과의 명령어 의존성들을 식별할 수 있다. 예에서, 명령어들의 그룹내 2 또는 그 초과의 명령어들 간의 임의의 식별된 의존성은 제어 의존성 또는 데이터 의존성일 수 있다. 블록(1025)에서, 명령어 유효성 예측 로직(118)은, 제 2 명령어가 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관됨을 결정할 수 있다.
[00100] 예에서, 도 1의 멀티스레드형 프로세서(100)이, 초기에, 4개의 하드웨어 스레드 유닛들(T0-T3)을 가질 경우, 명령어 실행은, 제로번째 소프트웨어 스레드가 하드웨어 스레드 유닛(T0)에 의해 발행되고, 이후 제 1 소프트웨어 스레드가 하드웨어 스레드 유닛(T1)에 의해 발행되고, 이후 제 2 소프트웨어 스레드가 스레드가 하드웨어 스레드 유닛(T2)에 의해 발행되고, 그리고 마지막으로 제 3 소프트웨어 스레드가 하드웨어 스레드 유닛(T3)에 의해 발행되게 스케줄링될 수 있다. 클록 틱(Clock tick)들은 각각 대응하는 하드웨어 스레드 유닛 서브스크립들/인덱스들을 따를 수 있다; 예를 들어, 초기 클록 사이클 제로(CO) 다음 제 1 클록 사이클(C1) 다음 제 2 클록 사이클(C2) 및 마지막으로 제 3 클록 사이클(C3).
[00101] 일 예에서, 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d)은, 하기의 방식으로 명령어들을 발행할 수 있다: 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d) 모두가 그들에 할당되는 소프트웨어 스레드들을 가지면, 각각의 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d)은 준비 명령어를 가질 것이며 발행되기를 대기할 것이다. 따라서, 멀티스레드형 프로세서(100)의 명령어 발행 제어기(610)는 하기와 같은 실행으로 진행될 수 있다: 클록 사이클들(C0, C1, C2, 및 C3)은, 각각, 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d)에 대응하는 소프트웨어 스레드들에 할당될 것이다. 토큰 트리거식 멀티스레드형 프로세서에서는, 스레드 ID 레지스터(들)(116)는 필요 없을 것이다. 이 예에서, 명령어 발행 제어기(610)는 식별 레지스터를 할당하며, 각각 T00, T10, T20 및 T30로서 발행되는 각각의 명령어를 레코딩한다.
[00102] 다른 예에서, 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d)은, 하기의 방식으로 명령어들을 발행할 수 있다: 하드웨어 스레드 유닛들(예를 들어, 102a-102d)보다 소프트웨어 스레드들이 적다면, 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d) 중 일부는 발행할 명령어들을 갖지 않을 것이다. 토큰 트리거식 프로세서에서, 하드웨어 스레드 유닛들(T0, T1, T2 및 T3)(예를 들어, 102a-102d)은 NOP들 발행을 요구할 것이다.
[00103] 발행할 준비 명령어를 갖지 않는 하드웨어 스레드 유닛(예를 들어, 102a)이 있고 다른 하드웨어 스레드 유닛들(예를 들어, 102b, 102c)이 대기중인 유효 명령어를 가지면, 다른 하드웨어 스레드 유닛들(예를 들어, 102b, 102c) 중 하나(예를 들어, 이전(former) 하드웨어 스레드 유닛)가 지정된 클록 사이클을 차지하고 명령어들을 발행할 수 있다. 이 예에서, 명령어 발행 제어기(610)는, 임의의 명령어간 의존성들이 특정 소프트웨어 스레드로부터의 추가 명령어들 발행을 방지하는지를 결정하기 위해 체이닝 비트들(602)을 참고한다(consult). 체이닝 비트들(602)이 다른 소프트웨어 스레드가 추가 명령어들 발행을 허용하고 하드웨어 스레드 유닛들(예를 들어, 102a-102d)보다 소프트웨어 스레드들이 적다면, 멀티스레드형 프로세서(100)의 명령어 발행 제어기(610)는 추가 명령어들을 발행할 수 있다.
[00104] 따라서, 멀티스레드형 프로세서(100)의 명령어 발행 제어기(610)는 하기와 같은 실행으로 진행할 수 있다: 클록 사이클(C1)에서 스레드 유닛(T1)이 유효 명령어를 갖지 않지만 하드웨어 스레드 유닛(T0)이 명령어 유효성 예측 회로(118)에 의해 결정된 유효 명령어들을 갖는다고 가정하면, 하드웨어 스레드 유닛(T0)이 추가 명령어들을 발행할 수 있는지를 결정하기 위해 디코딩된 체이닝 비트들을 이용할 수 있다. 하드웨어 스레드 유닛(T0)가 발행을 허용하면, 하드웨어 스레드 유닛(TO)은 클록 사이클(C1)에서 추가 명령어를 발행한다. 추가 명령어는 TO1로서 식별될 것이며 연관된 식별 레지스터들(116)에 레코딩될 것이다.
[00105] 도 11은 4-스레드형 기회 멀티스레드형 파이프라인 오퍼레이션 제어 프로세스 타이밍도를 도시하며, 여기서 Ci는 클록 사이클 식별자이고 Tij는 클록 사이클(Ci)에 할당되는 대응하는 할당 스레드 식별자이다. 기회 멀티스레딩의 일 예는, 전체가 인용에 의해 본원에 포함되는 중국 특허출원 제201110361140.8호(이후, '40.8 출원)에 설명된다. 명령어 체이닝의 일 예는, 전체가 인용에 의해 본원에 포함되는, "Method And Apparatus For Enabling A Processor To Generate Pipeline Control Signals"이란 명칭의 미국 특허출원 제 14/539,104호에 설명된다. 본 개시내용의 예들은, 발행을 대기하고 있는 명령어들을 갖는 일 그룹의 소프트웨어 스레드들 중 그룹간 명령어 의존성들을 식별하기 위해 명령어 체이닝을 이용함으로써, '40.8 출원에서 설명된 유효성 예측 회로의 장치 및 방법을 확장시킨다.
[00106] 도 11에 도시된 예에서, 제어 로직은 하드웨어 스레드 유닛(TO)으로 시작된다. 하드웨어 스레드 유닛(T0)은 클록 사이클(C0)에서 명령어를 발행한다. 명령어에는 마크 T0 ,0가 할당된다. 클록 사이클(C1)에서, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(T1)이 발행될 준비 명령어를 갖는지 여부를 결정한다. 하드웨어 스레드 유닛(T1)이 발행될 준비 명령어를 가지면, 하드웨어 스레드 유닛(T1)은 명령어 T1 , 0를 발행한다. 하드웨어 스레드 유닛(T1)이 발행될 준비 명령어를 갖지 않는다면, 하드웨어 스레드 유닛(T0)이 발행할 준비 명령어를 가질 경우, 하드웨어 스레드 유닛(T0)은 명령어 T0 , 1를 발행한다. 하드웨어 스레드 유닛(T0) 또는 하드웨어 스레드 유닛(T1) 어느 것도 발행할 준비 명령어를 갖지 않으면, 어떤 명령어도 발행되지 않는다(예를 들어, 멀티스레드형 프로세서는 NOP를 발행한다).
[00107] 클록 사이클(C2)에서, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(T2)이 발행될 준비 명령어를 갖는지 결정한다. 하드웨어 스레드 유닛(T2)이 발행될 준비 명령어를 갖는다면, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(T2)이 명령어 T2 , 0를 발행하도록 허용할 것이다. 아니오라면, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(T1) 및/또는 하드웨어 스레드 유닛(T0)이 발행할 준비 명령어를 갖는지를 결정할 수 있다. 하드웨어 스레드 유닛들(T0, T1) 중 하나가 발행할 준비 명령어를 갖는다면, 명령어 발행 제어기(610)는 준비 명령어와 함께 하드웨어 스레드 유닛으로부터 명령어를 발행할 것이다. 하드웨어 스레드 유닛들(TO, T1) 양자 모두가 준비 명령어를 가지면, 제어기 로직은 선입선출(first-in first-out) 스케줄링, 우선순위 스케줄링, 라운드 로빈 스케줄링 또는 임의의 다른 원하는 스케줄링 전략으로 명령어들을 발행할 수 있다.
[00108] 클록 사이클(C3)에서, 명령 발행 제어기(610)는 하드웨어 스레드 유닛(T3)에 대해 발행을 대기하는 명령어들이 있는지를 결정한다. 하드웨어 스레드 유닛(T3)이 발행될 준비 명령어를 갖는다면, 명령어 발행 제어기(610)는 하드웨어 스레드 유닛(T3)이 명령어 T2 , 0를 발행하도록 허용할 것이다. 아니오라면, 명령 발행 제어기(610)는 다른 하드웨어 스레드들에 발행을 대기하는 명령어들이 있는지를 결정할 수 있다. 준비 명령어를 갖는 단지 하나의 하드웨어 스레드 유닛만이 있다면, 명령어 발행 제어기(610)는 명령어를 발행할 것이다. 준비 명령어를 갖는 하나 보다는 많은 하드웨어 스레드가 있다면, 제어기 로직은 선입선출(first-in first-out) 스케줄링, 우선순위 스케줄링, 라운드 로빈 스케줄링 또는 임의의 다른 원하는 스케줄링 전략으로 명령어들을 발행할 수 있다. 스레드 명령어 발행은, 모든 소프트웨어 스레드들이 적어도 하나의 명령어 발행을 완성할 때까지, 클록 사이클들(C4, C5 및 C6) 동안 유사한 방식으로 진행된다.
[00109] 상기 설명은 예시적인 것이며 제한되지 않는 것으로 의도됨을 이해해야 한다. 많은 다른 예들이 상기 설명을 읽고 이해할 때 당업자에게 명백해질 것이다. 따라서, 본 개시내용의 범주는, 첨부된 청구항들이 수반되는 등가물들의 전체 범주와 함께, 이들 청구항들을 참조로 결정되어야 한다.

Claims (22)

  1. 명령어들을 프로세싱하기 위한 방법으로서,
    프로세서에 의해, 발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖지 않는다고 결정하는 단계;
    상기 프로세서에 의해, 발행되기를 대기하는 명령어들을 갖는 상기 발행 시퀀스에서 하나 또는 그 초과의 대안적 소프트웨어 스레드(alternative software thread)들을 식별하는 단계;
    상기 프로세서에 의해 상기 클록 사이클 동안, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들(dependencies)도 갖지 않는다고 결정하는 것에 응답하여, 상기 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 스레드로부터 상기 제 2 명령어를 선택하는 단계 ―상기 의존성들은 발행되기를 대기하는 각각의 명령어들로부터 추출되는 체이닝 비트(chaining bit)의 값들에 기초하여 식별됨―; 및
    상기 프로세서에 의해, 상기 제 2 명령어를 상기 하드웨어 스레드에 발행하는 단계
    를 포함하는, 방법.
  2. 제 1 항에 있어서,
    상기 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다고 결정하는 것은,
    상기 프로세서에 의해, 발행되기를 대기하는 명령어들 중 제 1 명령어 및 다른 명령어들을 명령어들의 그룹으로 그룹화하는 것;
    상기 프로세서에 의해, 체이닝 비트들의 시퀀스를 생성하기 위해, 상기 명령어들의 그룹의 각각의 명령어로부터 지정된 비트를 추출하는 것;
    상기 프로세서에 의해, 상기 체이닝 비트들의 시퀀스를 디코딩하는 것;
    상기 프로세서에 의해, 디코딩된 체이닝 비트들의 시퀀스에 기초하여 상기 명령어들의 그룹 간의 제로 또는 그 초과의 명령어 의존성들을 식별하는 것; 및
    상기 프로세서에 의해, 상기 제 2 명령어가 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관된다고 결정하는 것
    을 포함하는, 방법.
  3. 제 1 항 또는 제 2 항에 있어서,
    상기 프로세서는 상기 명령어들의 그룹에 있는 명령어들 어느 것도 디코딩하지 않고 체이닝 비트들의 시퀀스를 디코딩하는, 방법.
  4. 제 1 항 또는 제 2 항에 있어서,
    상기 명령어들의 그룹 내 2 또는 그 초과의 명령어들 간의 식별된 의존성은 제어 의존성 또는 데이터 의존성인, 방법.
  5. 제 2 항에 있어서,
    상기 프로세서에 의해, 상기 체이닝 비트들의 시퀀스를 생성하기 위해, 상기 명령어들의 그룹 간의 제로 또는 그 초과의 의존성들로 각각의 명령어의 상기 지정된 비트를 인코딩하는 단계를 더 포함하는, 방법.
  6. 제 1 항 또는 제 2 항에 있어서,
    상기 프로세서에 의해, 상기 시퀀스에서 제 2 소프트웨어 스레드의 포지션에 대응하는 상기 하드웨어 스레드에 제 1 인덱스(index)를 할당하는 단계; 및
    상기 프로세서에 의해, 상기 클록 사이클에 대응하는 상기 하드웨어 스레드에 제 2 인덱스를 할당하는 단계
    를 더 포함하는, 방법.
  7. 제 6 항에 있어서,
    원래(originally) 상기 제 2 명령어를 발행했던 상기 제 2 소프트웨어 스레드를 식별하기 위해 상기 제 1 인덱스 및 상기 제 2 인덱스를 이용하는 단계를 더 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖는다고 결정하는 것에 응답하여, 상기 프로세서에 의해, 상기 하드웨어 스레드에 상기 제 1 명령어를 발행하는 단계를 더 포함하는, 방법.
  9. 제 1 항에 있어서,
    상기 프로세서에 의해, 상기 발행 시퀀스에서 상기 현재 소프트웨어 스레드의 포지션에 대응하는 상기 하드웨어 스레드에 제 1 인덱스를 할당하는 단계; 및
    상기 프로세서에 의해, 상기 클록 사이클에 대응하는 상기 하드웨어 스레드에 제 2 인덱스를 할당하는 단계
    를 더 포함하는, 방법.
  10. 제 9 항에 있어서,
    원래 상기 제 1 명령어를 발행했던 상기 현재 소프트웨어 스레드를 식별하기 위해 상기 제 1 인덱스 및 상기 제 2 인덱스를 이용하는 단계를 더 포함하는, 방법.
  11. 제 1 항 또는 제 10 항에 있어서,
    상기 발행 시퀀스는 초기에 토큰-트리거식 멀티-스레딩 시퀀스(token-triggered multi-threading sequence)인, 방법.
  12. 제 1 항에 있어서,
    상기 복수의 소프트웨어 스레드들의 소프트웨어 스레드들의 수는 이용가능한 하드웨어 스레드 유닛들의 수보다 적은, 방법.
  13. 시스템으로서,
    메모리;
    상기 메모리에 커플링되는, 프로세서와 연관된 복수의 하드웨어 스레드들; 및
    상기 메모리에 동작가능하게 커플링되는, 상기 프로세서의 명령어 발행 제어기
    를 포함하며, 상기 명령어 발행 제어기는,
    발행 시퀀스를 갖는 복수의 소프트웨어 스레드들 중 현재 소프트웨어 스레드가 클록 사이클 동안 하드웨어 스레드에 발행되기를 대기하는 제 1 명령어를 갖지 않는다고 결정하고;
    발행되기를 대기하는 명령어들을 갖는 상기 발행 시퀀스에서 하나 또는 그 초과의 대안적 소프트웨어 스레드들을 식별하고;
    상기 클록 사이클 동안, 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과 어떠한 의존성들도 갖지 않는다는 결정에 기초하여, 상기 하나 또는 그 초과의 대안적 소프트웨어 스레드들 중 제 2 소프트웨어 스레드로부터 상기 제 2 명령어를 선택하고 ―상기 의존성들은 발행되기를 대기하는 각각의 명령어들로부터 추출되는 체이닝 비트의 값들에 기초하여 식별됨―; 그리고
    상기 제 2 명령어를 상기 하드웨어 스레드에 발행하는 시스템.
  14. 제 13 항에 있어서,
    상기 제 2 명령어가 발행되기를 대기하는 명령어들 중 임의의 다른 명령어들과도 어떠한 의존성들도 갖지 않는다고 결정하며,
    상기 명령어 발행 제어기는:
    발행되기를 대기하는 명령어들 중 상기 제 1 명령어 및 다른 명령어들을 명령어들의 그룹으로 그룹화하고;
    체이닝 비트들의 시퀀스를 생성하기 위해, 상기 명령어들의 그룹의 각각의 명령어로부터 지정된 비트를 추출하고;
    상기 체이닝 비트들의 시퀀스를 디코딩하고;
    디코딩된 체이닝 비트들의 시퀀스에 기초하여 상기 명령어들의 그룹 간의 제로 또는 그 초과의 명령어 의존성들을 식별하고; 그리고
    상기 제 2 명령어가 제로 또는 그 초과의 명령어 스트림 의존성들 중 제로 의존성들과 연관된다고 결정하는, 시스템.
  15. 제 13 항 또는 제 14 항에 있어서,
    상기 명령어 발행 제어기는, 상기 명령어들의 그룹에 있는 명령어들 어느 것도 디코딩하지 않고 상기 체이닝 비트들의 시퀀스를 디코딩하는, 시스템.
  16. 제 13 항 또는 제 14 항에 있어서,
    상기 명령어들의 그룹 내 2 또는 그 초과의 명령어들 간의 식별된 의존성은 제어 의존성 또는 데이터 의존성인, 시스템.
  17. 제 14 항에 있어서,
    상기 명령어 발행 제어기는 추가로, 상기 체이닝 비트들의 시퀀스를 생성하기 위해 상기 명령어들의 그룹 간의 제로 또는 그 초과의 의존성들로 각각의 명령어의 상기 지정된 비트를 인코딩하는, 시스템.
  18. 제 13 항 또는 제 14 항에 있어서,
    독립적 그룹 아이덴티티 레지스터들 또는 2-차원 그룹 아이덴티티 레지스터 중 적어도 하나를 더 포함하며, 상기 명령어 발행 제어기는,
    상기 독립적 그룹 아이덴티티 레지스터들 또는 상기 2-차원 그룹 아이덴티티 레지스터 중 적어도 하나에 대해, 상기 시퀀스에서 제 2 소프트웨어 스레드의 포지션에 대응하는 상기 하드웨어 스레드에 제 1 인덱스를 할당하고; 그리고
    상기 독립적 그룹 아이덴티티 레지스터들 또는 상기 2-차원 그룹 아이덴티티 레지스터 중 적어도 하나에 대해, 상기 클록 사이클에 대응하는 상기 하드웨어 스레드에 제 2 인덱스를 할당하는, 시스템.
  19. 제 18 항에 있어서,
    상기 명령어 발행 제어기는 추가로, 원래 상기 제 2 명령어를 발행했던 상기 제 2 소프트웨어 스레드를 식별하기 위해 상기 제 1 인덱스 및 상기 제 2 인덱스를 이용하는, 시스템.
  20. 제 18 항에 있어서,
    상기 독립적 그룹 아이덴티티 레지스터들 또는 상기 2-차원 그룹 아이덴티티 레지스터 중 적어도 하나는, 파이프라인의 각각의 모든 파이프라인 스테이지에서의 하나 또는 그 초과의 대안적 소프트웨어 스레드들 또는 상기 현재 소프트웨어 스레드 중 적어도 하나의 실행 상태를 추적하기 위해 상기 파이프라인의 대응하는 파이프라인 스테이지들과 연관되는, 시스템.
  21. 제 13 항에 있어서,
    상기 현재 소프트웨어 스레드가 발행되기를 대기하는 제 1 명령어와 연관된다고 결정하는 것에 응답하여, 상기 명령어 발행 제어기는 추가로, 상기 제 1 명령어를 상기 하드웨어 스레드에 발행하는, 시스템.
  22. 제 13 항에 있어서,
    상기 복수의 소프트웨어 스레드들의 소프트웨어 스레드들의 수는 상기 복수의 하드웨어 스레드의 하드웨어 스레드들의 수보다 적은, 시스템.


KR1020167024487A 2014-02-06 2015-02-03 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩 KR102335194B1 (ko)

Applications Claiming Priority (7)

Application Number Priority Date Filing Date Title
US201461936428P 2014-02-06 2014-02-06
US61/936,428 2014-02-06
US201461969862P 2014-03-25 2014-03-25
US61/969,862 2014-03-25
US14/539,116 US9766895B2 (en) 2014-02-06 2014-11-12 Opportunity multithreading in a multithreaded processor with instruction chaining capability
US14/539,116 2014-11-12
PCT/US2015/014270 WO2015119953A1 (en) 2014-02-06 2015-02-03 Opportunity multithreading in a multithreaded processor with instruction chaining capability

Publications (2)

Publication Number Publication Date
KR20160110528A KR20160110528A (ko) 2016-09-21
KR102335194B1 true KR102335194B1 (ko) 2021-12-02

Family

ID=53754888

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020167024487A KR102335194B1 (ko) 2014-02-06 2015-02-03 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩

Country Status (5)

Country Link
US (1) US9766895B2 (ko)
EP (1) EP3103011A4 (ko)
KR (1) KR102335194B1 (ko)
CN (1) CN106104464B (ko)
WO (1) WO2015119953A1 (ko)

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US9996354B2 (en) * 2015-01-09 2018-06-12 International Business Machines Corporation Instruction stream tracing of multi-threaded processors
US9727944B2 (en) * 2015-06-22 2017-08-08 Apple Inc. GPU instruction storage
US20170300361A1 (en) * 2016-04-15 2017-10-19 Intel Corporation Employing out of order queues for better gpu utilization
US10504270B2 (en) 2016-12-22 2019-12-10 Apple Inc. Resource synchronization for graphics processing
CN108255587B (zh) * 2016-12-29 2021-08-24 展讯通信(上海)有限公司 一种同步多线程处理器
US10474468B2 (en) * 2017-02-22 2019-11-12 Advanced Micro Devices, Inc. Indicating instruction scheduling mode for processing wavefront portions
US10372456B2 (en) * 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US10620994B2 (en) 2017-05-30 2020-04-14 Advanced Micro Devices, Inc. Continuation analysis tasks for GPU task scheduling
US10664287B2 (en) 2018-03-30 2020-05-26 Intel Corporation Systems and methods for implementing chained tile operations
US11119782B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Thread commencement using a work descriptor packet in a self-scheduling processor
US11126587B2 (en) * 2018-05-07 2021-09-21 Micron Technology, Inc. Event messaging in a system having a self-scheduling processor and a hybrid threading fabric
US11119972B2 (en) * 2018-05-07 2021-09-14 Micron Technology, Inc. Multi-threaded, self-scheduling processor
US11132233B2 (en) * 2018-05-07 2021-09-28 Micron Technology, Inc. Thread priority management in a multi-threaded, self-scheduling processor
EP3977413A4 (en) * 2019-05-29 2023-07-19 Advanced Micro Devices, Inc. SOFTWARE CONTROLLED VARIABLE WAVEFRONT SIZE EXECUTION AT A GPU
US11599358B1 (en) * 2021-08-12 2023-03-07 Tenstorrent Inc. Pre-staged instruction registers for variable length instruction set machine

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020091915A1 (en) 2001-01-11 2002-07-11 Parady Bodo K. Load prediction and thread identification in a multithreaded microprocessor
US20020144083A1 (en) 2001-03-30 2002-10-03 Hong Wang Software-based speculative pre-computation and multithreading
US20060095729A1 (en) 2004-04-07 2006-05-04 Erdem Hokenek Multithreaded processor with multiple concurrent pipelines per thread
US20060179281A1 (en) 2005-02-04 2006-08-10 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5295249A (en) * 1990-05-04 1994-03-15 International Business Machines Corporation Compounding preprocessor for cache for identifying multiple instructions which may be executed in parallel
DE69428004T2 (de) * 1993-11-05 2002-04-25 Intergraph Corp Superskalare Rechnerarchitektur mit Softwarescheduling
US5974534A (en) * 1994-02-14 1999-10-26 Hewlett-Packard Company Predecoding and steering mechanism for instructions in a superscalar processor
US5822558A (en) * 1995-04-12 1998-10-13 Advanced Micro Devices, Inc. Method and apparatus for predecoding variable byte-length instructions within a superscalar microprocessor
US5752069A (en) * 1995-08-31 1998-05-12 Advanced Micro Devices, Inc. Superscalar microprocessor employing away prediction structure
US6253306B1 (en) * 1998-07-29 2001-06-26 Advanced Micro Devices, Inc. Prefetch instruction mechanism for processor
US6842848B2 (en) * 2002-10-11 2005-01-11 Sandbridge Technologies, Inc. Method and apparatus for token triggered multithreading
US7475222B2 (en) 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats
US7543132B1 (en) * 2004-06-30 2009-06-02 Sun Microsystems, Inc. Optimizing hardware TLB reload performance in a highly-threaded processor with multiple page sizes
US7523295B2 (en) 2005-03-21 2009-04-21 Qualcomm Incorporated Processor and method of grouping and executing dependent instructions in a packet
CN102750132B (zh) * 2012-06-13 2015-02-11 深圳中微电科技有限公司 多线程虚拟流水线处理器的线程控制和调用方法及其处理器

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020091915A1 (en) 2001-01-11 2002-07-11 Parady Bodo K. Load prediction and thread identification in a multithreaded microprocessor
US20020144083A1 (en) 2001-03-30 2002-10-03 Hong Wang Software-based speculative pre-computation and multithreading
US20060095729A1 (en) 2004-04-07 2006-05-04 Erdem Hokenek Multithreaded processor with multiple concurrent pipelines per thread
US20060179281A1 (en) 2005-02-04 2006-08-10 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities

Also Published As

Publication number Publication date
EP3103011A4 (en) 2017-10-25
KR20160110528A (ko) 2016-09-21
WO2015119953A1 (en) 2015-08-13
US9766895B2 (en) 2017-09-19
EP3103011A1 (en) 2016-12-14
US20150220346A1 (en) 2015-08-06
CN106104464A (zh) 2016-11-09
CN106104464B (zh) 2019-10-18

Similar Documents

Publication Publication Date Title
KR102335194B1 (ko) 명령어 체이닝 능력을 이용한 멀티스레드형 프로세서에서의 기회 멀티스레딩
KR102341785B1 (ko) 결정론적 및 기회적 멀티스레딩
US20230106990A1 (en) Executing multiple programs simultaneously on a processor core
EP3350686B1 (en) Debug support for block-based processor
US20170371660A1 (en) Load-store queue for multiple processor cores
US9766894B2 (en) Method and apparatus for enabling a processor to generate pipeline control signals
US20170083343A1 (en) Out of order commit
EP3350684A1 (en) Segmented instruction block
US20150074353A1 (en) System and Method for an Asynchronous Processor with Multiple Threading
US11366669B2 (en) Apparatus for preventing rescheduling of a paused thread based on instruction classification
US20180032344A1 (en) Out-of-order block-based processor
US20170371659A1 (en) Load-store queue for block-based processor

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