KR20220057610A - 실행 파이프 균형을 제공하는 분산 스케줄러 - Google Patents

실행 파이프 균형을 제공하는 분산 스케줄러 Download PDF

Info

Publication number
KR20220057610A
KR20220057610A KR1020227011454A KR20227011454A KR20220057610A KR 20220057610 A KR20220057610 A KR 20220057610A KR 1020227011454 A KR1020227011454 A KR 1020227011454A KR 20227011454 A KR20227011454 A KR 20227011454A KR 20220057610 A KR20220057610 A KR 20220057610A
Authority
KR
South Korea
Prior art keywords
queue
pipe
execution
indicator
instruction operation
Prior art date
Application number
KR1020227011454A
Other languages
English (en)
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 KR20220057610A publication Critical patent/KR20220057610A/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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5083Techniques for rebalancing the load in a distributed system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms
    • G06F9/528Mutual exclusion algorithms by using speculative mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

프로세서는 복수의 실행 파이프들 및 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함한다. 분산 스케줄러는 프로세서의 명령 파이프라인의 프론트 엔드로부터 명령 연산을 버퍼링하는 제1 큐 및 복수의 제2 큐들을 포함하며, 여기서 각각의 제2 큐는 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 제1 큐로부터 할당된 명령 연산을 버퍼링하기 위한 것이다. 분산 스케줄러는, 분산 스케줄러에서 불균형의 적어도 하나의 지표가 검출되는지 여부에 기초하여 복수의 할당 모드들로부터 할당 모드를 선택하고, 추가로 선택된 할당 모드에 따라 복수의 제2 큐들 사이에 제1 큐로부터의 명령 연산을 할당하도록 분산 스케줄러를 제어하기 위해 큐 컨트롤러를 더 포함한다.

Description

실행 파이프 균형을 제공하는 분산 스케줄러
분산 스케줄러(distributed scheduler)는 적어도 2개 레벨의 스케줄러 큐를 사용하며, 여기서 제1 레벨은 선택불가 스케줄러 큐(non-pickable scheduler queue)를 갖고 제2 레벨은 2개 이상의 선택가능 스케줄러 큐(pickable scheduler queue)들을 가지며, 이 선택가능 스케줄러 큐들 각각은 복수의 실행 파이프의 대응 서브세트에 대한 명령 연산을 저장하도록 동작한다. 선택불가 스케줄러 큐는, 명령 연산이 선택가능 스케줄러 큐에 할당되기 전에 명령 파이프라인 프론트 엔드로부터 명령 연산을 일시적으로 버퍼링하는 역할을 한다.
각 선택가능 스케줄러 큐가 실행 파이프의 고유한 서브세트를 독점적으로 제공하기 때문에, 서로 다른 선택가능 스케줄러 큐들 간에, 서로 다른 실행 파이프들 간에 또는 이들의 조합 간에 성능을 저해하는 불균형이 발생할 가능성이 종종 존재한다. 예시를 위해, 프로그램이 구성 또는 컴파일되는 특정 방식의 결과로서 또는 큐 할당의 일치에도 불구하고, 하나의 선택가능 스케줄러 큐는 로드 동작에 종속된 동작과 같이 각각 상당한 수의 사이클이 요구되는 다수의 명령 연산으로 부담이 되는 반면, 다른 선택가능 스케줄러 큐는 이러한 지연을 유발하는 연산의 비율이 더 적을 수 있다. 다른 예로서, 일 선택가능 스케줄러 큐는, 유사한 실행 파이프를 갖는 다른 선택가능 스케줄러 큐보다 해당 큐와 연관된 특정 실행 파이프에 의해서만 실행될 수 있는 더 많은 수의 연산을 할당받을 수 있다. 그 결과, 일 선택가능 스케줄러 큐와 연결된 실행 파이프는 과도한 점유를 경험하는 반면, 다른 유사한 실행 파이프는 불필요하게 유휴 상태가 된다. 이러한 편향된(skewed) 큐/파이프 점유는 통상적으로 사이클당 선택되는 연산 수를 낮추도록 유도할 뿐만 아니라 실행 파이프를 충분히 활용하지 못하도록 유도하며, 이 중 하나는 분산 스케줄러로 명령 파이프라인을 구현하는 프로세서 코어의 실행 성능에 부정적인 영향을 미친다.
일 양태에 따르면, 방법은 프로세서의 분산 스케줄러의 제1 큐에서 명령 연산을 버퍼링하는 단계; 분산 스케줄러에서 불균형의 적어도 하나의 지표가 검출되는지 여부에 기초하여 분산 스케줄러의 복수의 할당 모드들 중 할당 모드를 선택하는 단계; 선택된 할당 모드에 따라 제1 큐로부터의 명령 연산을 복수의 제2 큐 사이에 할당하는 단계; 및 각각의 제2 큐에서, 제2 큐와 연관된 실행 파이프에 의한 실행을 위해 제2 큐에 버퍼링된 명령 연산을 선택하는 단계를 포함한다. 복수의 할당 모드들은, 명령 연산이 복수의 제2 큐들 간에 실질적으로 동일하게 할당되는 큐 우선 할당 모드; 및 제2 큐와 연관된 실행 파이프의 파이프 점유에 기초하여 복수의 제2 큐들 사이에 명령 연산이 할당되는 파이프 우선 할당 모드를 포함할 수 있다. 일부 실시형태에서, 불균형의 적어도 하나의 지표는: 제2 큐 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표; 및 임의의 2개의 제2 큐의 현재 점유 간의 차이가 제2 임계값을 초과함을 나타내는 제2 지표를 포함한다. 이에 따라, 복수의 할당 모드들 중 할당 모드를 선택하는 단계는, 제1 지표 및 제 2 지표 둘 다 검출되지 않는 것에 응답하여 큐 우선 할당 모드를 선택하는 단계; 및 제1 지표 및 제2 지표 중 적어도 하나가 검출된다는 것에 응답하여 파이프-우선 할당 모드를 선택하는 단계를 포함할 수 있다. 대안적으로, 복수의 할당 모드들 중 할당 모드를 선택하는 단계는, 제1 지표 및 제 2 지표 둘 중 하나만 검출되는 것에 응답하여 큐 우선 할당 모드를 선택하는 단계; 및 제1 지표 및 제2 지표 둘 다 검출된다는 것에 응답하여 파이프-우선 할당 모드를 선택하는 단계를 포함할 수 있다.
일부 실시형태에서, 복수의 할당 모드는, 명령 연산 세트의 각 명령 연산의 복사본이 복수의 제2 큐들의 각각의 제2 큐에 할당되고 그 세트의 각 명령 연산의 복사본이 명령 연산을 실행할 수 있는 실행 파이프의 파이프 점유 분석에 기초하여 하나의 제2 큐를 제외한 모든 큐에서 무효화되는 추론적 할당 모드(speculative allocation mode)를 더 포함한다. 따라서, 복수의 할당 모드들 중 할당 모드를 선택하는 단계는, 대응하는 실행 파이프에 의한 실행을 위해 명령 연산이 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어지는 것에 응답하여 추론적 할당 모드를 선택하는 단계를 포함한다. 불균형의 적어도 하나의 지표는: 제 2 큐들 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표; 및 임의의 2개의 제2 큐들의 현재 점유 간의 차이가 제2 임계값을 초과함을 나타내는 제2 지표; 및 대응하는 실행 파이프에 할당하기 위해 명령 연산이 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어짐을 나타내는 제3 지표 중 적어도 하나를 포함할 수 있고; 복수의 할당 모드들 중 할당 모드를 선택하는 단계는: 제1 지표 또는 제2 지표 중 하나만이 존재함에 응답하여 큐-우선 할당 모드를 선택하는 단계; 제1 지표 및 제 2 지표가 모두 존재함에 응답하여 파이프-우선 할당 모드를 선택하는 단계; 및 제3 지표가 존재함에 응답하여 추론적 할당 모드를 선택하는 단계를 포함한다. 추론적 할당 모드 동안, 세트의 각 명령 연산은 사전-배정된 실행 파이프를 가질 수 있으며, 사전-배정된 실행 파이프와 연관된 제2 큐는 사전-배정된 실행 파이프의 파이프 점유와 다른 제2 큐와 연관된 동일한 타입의 다른 실행 파이프의 파이프 점유 사이의 차이가 임계값을 초과하지 않는 한 명령 연산의 유효 복사본을 유지한다.
일부 실시형태에서, 복수의 할당 모드들은: 복수 세트의 명령 연산의 각각의 세트에 대해, 세트의 명령 연산이 인터리빙 패턴(interleaving pattern)을 사용하여 복수의 제2 큐들 사이에 할당되는 큐-우선 할당 모드를 포함하며; 여기서 주어진 세트에 대한 인터리빙 패턴의 초기 명령 연산을 수신하기 위한 제2 큐는: 고정 선택 시퀀스로 또는 의사 랜덤으로 중 하나에 따라 선택된다.
다른 양태에 따르면, 프로세서는 위에서 설명된 방법의 실시형태들을 수행하도록 구성된다. 일부 실시형태에서, 프로세서는, 복수의 실행 파이프들; 및 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는: 프로세서의 명령 파이프라인의 프론트 엔드로부터의 명령 연산을 버퍼링하도록 구성된 제1 큐; 복수의 제2 큐들 - 각각의 제2 큐는 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및 분산 스케줄러에서 불균형의 적어도 하나의 지표가 검출되는지 여부에 기초하여 복수의 할당 모드들로부터 할당 모드를 선택하고; 선택된 할당 모드에 따라 복수의 제2 큐들 사이에 제1 큐로부터의 명령 연산을 할당하도록 분산 스케줄러를 제어하도록 구성된 큐 컨트롤러를 포함한다.
다른 양태에 따르면, 프로세서는, 복수의 실행 파이프들; 및 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는: 프로세서의 명령 파이프라인의 프론트 엔드로부터 명령 연산을 버퍼링하도록 구성된 제1 큐; 복수의 제2 큐 - 각 제2 큐는 복수의 실행 파이프들의 실행 파이프 중 대응하는 개별 서브세트에 대해 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및 제1 큐의 명령 연산들의 서브세트의 각 명령 연산에 대해, 각 제2 큐에 제1 큐로부터의 명령 연산의 복사본을 추론적으로 할당하고; 그리고 그 명령 연산을 실행할 수 있는 실행 파이프들의 현재 파이프 점유에 기초하여 하나의 제2 큐를 제외한 모든 큐에서 명령 연산의 복사본을 무효화하도록 구성된 큐 컨트롤러를 포함한다. 일부 실시형태에서, 명령 연산은 복수의 실행 파이프들 중 특정된 실행 파이프에 사전-배정되고; 큐 컨트롤러는 또한, 특정 실행 파이프의 현재 파이프 점유가 명령 연산을 실행할 수 있는 다른 실행 파이프의 현재 파이프 점유의 임계값 내에 있음에 응답하여 특정 실행 파이프와 연관된 제2 큐의 명령 연산의 복사본을 명령 연산의 유효 복사본으로서 유지하고; 그리고 특정 실행 파이프의 현재 파이프 점유가 다른 제2 큐와 연관된 실행 파이프의 현재 파이프 점유를 적어도 임계값 만큼 초과함에 응답하여 특정 실행 파이프와 연관된 제2 큐의 명령 연산의 복사본을 무효화하고 다른 제2 큐의 명령 연산의 복사본을 유지하도록 추가로 구성된다.
또 다른 양태에 따르면, 프로세서는, 복수의 실행 파이프들; 및 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는: 프로세서의 명령 파이프라인의 프론트 엔드로부터의 명령 연산을 버퍼링하도록 구성된 제1 큐; 복수의 제2 큐들 - 각각의 제2 큐는 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및 큐 컨트롤러를 포함하며, 여기서 상기 큐 컨트롤러는 인터리빙 패턴의 복수의 제2 큐들 사이에 제1 큐로부터의 명령 연산의 세트를 할당하고; 그리고 각각의 세트에 대해, 사전정의된 시퀀스로 또는 의사 랜덤으로 둘 중 하나에 기초하여 인터리빙된 패턴으로 세트의 초기 명령 연산이 할당될 제2 큐를 선택하도록 구성된다. 일부 실시형태에서, 큐 컨트롤러는 사전정의된 시퀀스에 기초하여 인터리빙 패턴으로 세트의 초기 명령 연산이 할당될 제2 큐를 선택하도록 추가로 구성되며, 사전 정의된 시퀀스는 교번 시퀀스(alternating sequence)이다. 프로세서는 의사 난수 생성기(pseudo-random number generator)를 더 포함할 수 있으며; 큐 컨트롤러는 의사 난수 생성기의 출력에 기초하여 의사 랜덤으로 인터리빙 패턴으로 세트의 초기 명령 연산이 할당될 제2 큐를 선택하도록 더 구성된다.
본 개시내용은 첨부된 도면을 참조함으로써 당업자에게 더 잘 이해되고 그의 수많은 특징 및 이점이 명백해진다. 상이한 도면에서 동일한 참조 부호의 사용은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시형태에 따른 다중 모드 분산 스케줄러를 구현하는 프로세서를 예시하는 블록도이다.
도 2는 일부 실시형태에 따라 도 1의 다중 모드 분산 스케줄러(multimodal distributed scheduler)를 더 상세하게 예시하는 블록도이다.
도 3은 일부 실시형태에 따른 다중 모드 분산 스케줄러의 큐 우선 할당 모드를 예시하는 흐름도이다.
도 4는 일부 실시형태에 따른 도 3의 방법의 예시적인 구현을 예시하는 도면이다.
도 5는 일부 실시형태에 따른 다중 모드 분산 스케줄러의 파이프 우선 할당 모드를 예시하는 흐름도이다.
도 6은 일부 실시형태에 따른 다중 모드 분산 스케줄러의 추론적 할당 모드를 예시하는 흐름도이다.
도 7은 일부 실시형태에 따른 도 6의 방법의 예시적인 구현을 예시하는 도면이다.
도 8은 일부 실시형태에 따라 다양한 불균형 지표들에 기초하여 다중 모드 분산 스케줄러의 상이한 할당 모드들의 선택적인 활성화를 위한 방법을 예시하는 흐름도이다.
도 1 내지 도 8은 명령 연산 실행 스케줄링을 위해 다중 모드 분산 스케줄러를 사용하는 프로세싱 시스템에서 큐 불균형 및 파이프 불균형을 완화하기 위한 예시적인 기술을 예시한다. 적어도 하나의 실시형태에서, 분산형 스케줄러는 프로세서의 명령 프론트 엔드로부터 명령 연산을 일시적으로 버퍼링하기 위한 선택불가 스케줄러 큐 및 선택불가 스케줄러 큐로부터 명령 연산을 수신하기 위한 2개 이상의 선택가능 스케줄러 큐들을 포함하며, 여기서 선택가능 스케줄러 큐들 각각은 분산 스케줄러에 의해 서비스되는 실행 파이프 세트의 연관된 개별 서브세트에 대한 명령 연산을 버퍼링하도록 동작한다. 분산 스케줄러는, 분산 스케줄러에 의해 지원되는 복수의 할당 모드들 중 선택 할당 모드에 따라 선택가능 스케줄러 큐들 사이에 선택불가 스케줄러 큐로부터의 명령 연산을 할당하도록 분산 스케줄러를 구성하는 큐 컨트롤러를 더 포함한다. 적어도 하나의 실시형태에서, 큐 컨트롤러는 선택가능 스케줄러 큐들 사이의 또는 동일하거나 유사한 성능의 실행 파이프들 사이의 불균형의 하나 이상의 지표들의 존재 또는 부재에 응답하여 구현될 할당 모드를 선택한다. 이러한 지표들은, 예를 들어, 임계값을 초과하는 큐 점유, 임계값을 초과하는 파이프 점유, 임계값을 초과하는 2개 이상의 큐들의 큐 점유들 사이의 차이, 임계값을 초과하는 동일하거나 유사한 2개 이상의 실행 파이프들의 파이프 점유들 사이의 차이, 임계값 아래로 떨어지는 실행을 위한 명령 연산이 선택되는 레이트 등을 포함한다.
일부 실시형태에서, 다중 모드 분산 스케줄러에 의해 지원되는 복수의 할당 모드는, 주어진 할당 사이클에서 선택가능 스케줄러 큐에 할당될 명령 연산의 서브세트가 선택가능 스케줄러 큐들 사이에, 예컨대, 인터리빙 패턴을 통해, 실질적으로 동일하게 할당되는 큐 우선 할당 모드를 포함합니다. 명령 연산의 공평한 분배를 추가로 보장하기 위해, 일부 실시형태에서, 인터리빙 패턴은 각 할당 사이클에 대해 상이한 선택가능 스케줄러 큐로 시작하고, 여기서 주어진 할당 사이클에 대해 인터리빙 패턴으로 초기 명령 연산을 수신하기 위한 선택가능 스케줄러 큐는, 선형 피드백 시프트 레지스터(LFSR; linear-feedback shift register)의 출력 값 또는 의사 난수 생성기를 사용함에 의해서와 같이, 예를 들어, 특정된 고정 선택 시퀀스(예를 들어, 교번 또는 "핑퐁(ping-pong)" 시퀀스)에 따라 또는 의사 랜덤으로 선택된다. 또한, 일부 실시형태에서, 복수의 할당 모드들은 또한, 할당될 명령 연산을 실행하기에 적합한 실행 파이프 각각의 파이프 점유가 고려되는 파이프 우선 할당 모드를 포함하고, 명령 연산을 실행하기 위해 선택된 실행 파이프 및 대응하는 연관된 선택가능 큐는 이러한 파이프 점유의 비교 및 평가에 기초한다.
일부 실시형태에서, 다중 모드 분산 스케줄러에 의해 지원되는 복수의 할당 모드들은, 주어진 할당 사이클에 대해, 동일한 명령 연산의 복사본들은 선택불가 스케줄러 큐로부터 복수의 선택가능 스케줄러 큐들 각각에 추론적으로 할당된다. 그 후, 큐 컨트롤러는 명령 연산을 실행하기 위한 적절한 실행 파이프를 선택하고, 이에 따라 선택된 실행 파이프와 연관된 선택가능 스케줄러 큐에서 명령 연산의 복사본을 유효한 것으로 유지하면서 다른 선택가능 스케줄러 큐의 명령 연산의 복사본을 무효화한다.
도 1은 일부 실시형태에 따라 큐 및 실행 파이프 밸런싱을 위해 다중 모드 분산 스케줄러(102)를 구현하는 프로세서(100)를 예시한다. 프로세서(100)는 명령 프론트 엔드(104), 정수 유닛(106)과 같은 하나 이상의 명령 실행 유닛들 및 부동 소수점/단일 명령 다중 데이터(SIMD) 유닛(108), 및 캐시/메모리 인터페이스 서브시스템(110)을 포함한다. 명령 프론트 엔드(104)는, 명령 스트림의 일부로서 명령을 페치하고, 명령을 하나 이상의 명령 연산(예를 들어, 마이크로 연산 또는 uop)으로 디코딩한 다음, 각 명령 연산을 실행을 위한 실행 유닛(106, 108) 중 하나로 디스패치하도록 동작한다. 명령 연산을 실행할 때, 실행 유닛은 캐시/메모리 인터페이스 서브시스템(110)에서 구현된 하나 이상의 캐시들을 자주 사용하거나, 외부 메모리(예를 들어, 랜덤 액세스 메모리, 또는 RAM) 또는 로드/저장 유닛(LSU), 메모리 컨트롤러, 또는 캐시/메모리 인터페이스 서브시스템(110)의 I/O 컨트롤러(미도시)를 통한 외부 입/출력(I/O) 디바이스로부터의 데이터에 액세스하거나 또는 이들로의 저장을 위해 데이터를 제공한다.
프로세서(100)는 프로세서(100)의 하나 이상의 실행 유닛들 각각에서 다중 모드 분산 스케줄러(102)를 구현한다. 예시를 위해, 다중 모드 분산 스케줄러(102)가 부동 소수점/SIMD 유닛(108)에서 구현되는 구현이 여기에 설명된다. 그러나, 다른 실시형태에서, 정수 유닛(106) 또는 프로세서(100)의 다른 실행 유닛은 여기에 제공된 가이드라인을 사용하여 부동 소수점/SIMD 유닛(108)에 의해 구현된 것에 더하여 또는 그 대신에 다중 모드 분산 스케줄러를 구현한다.
부동 소수점/SIMD 유닛(108)은 재명명 모듈(112), 물리적 레지스터 파일(114), 및 다중 모드 분산 스케줄러(102) 뿐만 아니라, 도시된 실시형태의 6개의 실행 파이프(116-1 내지 116-6)와 같은 복수의 실행 파이프들(116)을 포함한다. 재명명 모듈(112)은, 물리적 레지스터 파일(114)의 물리적 레지스터로의 구조화된 레지스터의 재명명을 포함하여 명령 프론트 엔드(104)로부터 수신된 명령 연산에 대한 재명명 연산을 수행하고, 실행 파이프(116) 사이에서 버퍼링 및 할당을 위해 다중 모드 분산 스케줄러(102)에 재명명된 명령 연산을 출력한다 적어도 하나의 실시형태에서, 다중 모드 분산 스케줄러(102)는 제1 스케줄러 큐(118), 멀티플렉서(mux) 네트워크(120), 복수의 제2 스케줄러 큐(122) 및 각각의 제2 스케줄러 큐(122)에 대한 선택기(124), 예컨대, 예시된 2개의 제2 스케줄러 큐(122-1 및 122-2) 및 대응하는 선택기(124-1 및 124-2), 및 큐 컨트롤러(126)를 포함한다. 각각의 제2 스케줄러 큐(122)는 복수의 실행 파이프(116)의 대응하는 개별 서브세트에 대한 명령 연산을 버퍼링하는 역할을 한다. 예를 들어, 예시된 실시형태에서, 제2 스케줄러 큐(122-1)는 실행 파이프(116-1, 116-2, 116-3)로 구성된 서브세트에 대한 명령 연산을 버퍼링하는 반면, 제2 스케줄러 큐(122-2)는 실행 파이프(116-4, 116-5 및 116-6)으로 구성된 별도의 서브세트에 대한 명령 연산을 버퍼링한다.
다중 모드 분산 스케줄러(102)는 2-레벨 큐잉 프로세스를 구현하고, 이에 의해 제1 스케줄러 큐(118)는 명령 연산을 일시적으로 버퍼링하고, 그 후 먹스 네트워크(mux network)(120)를 통해 복수의 제2 스케줄러 큐들(122) 사이에 할당된다. 다음으로, 각각의 제2 스케줄러 큐(122)에 대한 선택기(124)는 대응하는 제2 스케줄러 큐(122)와 연관된 서브세트의 실행 파이프로의 배정 또는 다른 할당을 위해 대응하는 제2 스케줄러 큐(122)에서 버퍼링된 명령 연산을 선택한다. 명령 연산이 제1 스케줄러 큐(118)로부터 실행을 위해 직접 선택가능하지 않기 때문에, 제1 스케줄러 큐(118)는 여기에서 "선택불가 스케줄러 큐(118)" 또는 "NSQ(118)"로 지칭된다. 역으로, 명령 연산이 실행을 위해 제2 스케줄러 큐(122)로부터 선택가능하기 때문에, 제2 스케줄러 큐(122)는 여기에서 각각 "선택가능 스케줄러 큐(122)" 또는 "SQ(122)"로 지칭된다.
적어도 하나의 실시형태에서, 다중 모드 분산 스케줄러(102)는 복수의 할당 모드들을 지원하며, 각각의 할당 모드는 주어진 할당 사이클 동안 NSQ(118)로부터 SQ(122)로 명령 연산을 할당하기 위한 특정 프로세스를 나타낸다. 각각의 할당 모드는 통상적으로 현재 또는 예측된 실행 비효율성을 해결하고, 이에 따라 일 실시형태에서 큐 제어(126)는 선택된 할당 모드에 의해 잠재적으로 해결되는 불균형 또는 실행 비효율성의 하나 이상의 지표들의 존재 또는 부재에 기초하여 하여 다음의 하나 이상의 할당 사이클들 동안 구현하기 위한 특정 할당 모드를 선택하며, 그 다음 선택된 할당 모드를 구현하기 위한 먹스 네트워크(120) 및 선택기(124)를 구성한다. 다중 모드 분산 스케줄러(102)에 의해 지원되는 할당 모드의 예 및 구현을 위한 특정 할당 모드를 선택하기 위한 예시적인 프로세스가 아래에서 상세하게 설명된다.
도 2는 일부 실시형태에 따라 다중 모드 분산 스케줄러(102)의 구현을 더 상세하게 예시한다. 이 예에서, NSQ(118)는 복수의 큐 엔트리(202)를 포함하고, 여기서 각각의 큐 엔트리(202)는 명령 프론트 엔드(104)로부터 수신된 명령 연산(204)을 저장할 수 있다. NSQ(118)는 FIFO(선입선출) 큐로서 동작하고, 복수의 출력 포트들(206)을 포함하며, 각 출력 포트는 할당 사이클 동안 NSQ(118)로부터 대응하는 버퍼링된 명령 연산(204)을 출력할 수 있다. 따라서, NSQ(118)는 할당 사이클당 N 명령 연산을 출력할 수 있는 능력을 가지며, 여기서 N은 출력 포트(206)의 수를 나타낸다. SQ(122-1, 122-2) 각각은 복수의 큐 엔트리들(208)들을 포함하고, 각 큐 엔트리(208)는 NSQ(118)로부터 대응하는 SQ(122)에 할당된 명령 연산(204)을 버퍼링할 수 있다. 이를 위해, 각각의 SQ(122)는 복수의 입력 포트들(210)을 포함하고, 이들 각각은 수신 SQ(122)의 대응하는 큐 엔트리(208)에 수신된 명령 연산을 기록할 수 있다. 적어도 하나의 실시형태에서, 모든 SQ(122)에 대한 입력 포트(210)의 총 수는 NSQ(118)의 출력 포트(206)의 수 N과 동일하다. 따라서, 각각의 SQ(122)가 K개의 입력 포트(210)를 포함한다면, N = K*J이고, 여기서 J는 SQ(122)의 수이다. 설명을 위해, 도시된 구현에서, NSQ(118)는 6개의 출력 포트(206)(N=6)를 포함하고, SQ(122-1) 및 SQ(122-2)(J=2) 각각은 3개의 입력 포트(K=3)를 포함한다. 따라서, 이 구현에서, 주어진 할당 사이클 동안, 최대 6개의 명령 연산이 NSQ(118)에서 SQ(122-1 및 122-2)로 할당될 수 있으며, 여기서 SQ(122-1 및 122-2) 각각은 할당 사이클 동안 최대 3개의 명령 연산을 수신할 수 있다.
먹스 네트워크(120)는 특정된 할당 모드에 기초하여 SQ(122-1, 122-2) 중에서 NSQ(118)로부터의 명령 연산(204)을 할당하도록 동작한다. 이를 위해, 먹스 네트워크(120)는 NSQ(118)의 출력 포트를 SQ(122-1, 122-2)의 입력 포트(210)에 연결하는 하나 이상의 레벨들의 멀티플렉서들을 포함하여, 각각의 출력 포트(206)는 입력 포트(210) 중 하나와 연결가능하다. 큐 컨트롤러(126)는, 각각의 명령 연산(204)이 NSQ(118)로부터 연관 출력 포트(206) 사이에서, 명령 연산(204)이 할당되는 SQ(122)의 대응하는 입력 포트(210)로 지시하기 위해 제어 시그널링(212)을 통해 먹스 네트워크(120)를 제어하도록 동작한다.
SQ(122-1, 122-2)의 각 큐 엔트리(208)는, 명령 연산(204)이 연관 선택기(124)에 의한 실행을 위해 선택되기 전에 NSQ(118)로부터 할당된 명령 연산(204)을 버퍼링할 수 있다. 예시된 실시형태에서, 큐 엔트리(208)는 실행될 명령 연산의 유형의 연산코드 또는 다른 식별자를 저장하기 위한 연산 필드(214) 및 명령 연산(204)의 실행 동안 사용되는 임의의 소스 또는 목적지 레지스터에 대한 레지스터 식별자 또는 이 실행 동안 사용되는 의의의 즉시 또는 변위 값을 저장하기 위한 하나 이상의 피연산자 필드(216)를 포함하는, 버퍼링된 명령 연산(204)에 속하는 다수의 필드들을 포함한다. 또한, 아래에서 설명되는 바와 같이, 일부 실시형태에서 명령 연산은 특정 실행 파이프에 사전-배정되고, 이에 따라 큐 엔트리(208)는 대응하는 명령 연산에 사전-배정된 임의의 실행 파이프의 식별자를 저장하기 위한 배정 필드(218)를 더 포함한다. 더욱이, 명령 연산의 무효화 및 플러싱을 용이하게 하기 위해, 적어도 하나의 실시형태에서, 큐 엔트리(208)는 대응하는 명령 연산이 해당 SQ(122)에 대해 유효한지 또는 유효하지 않은지를 나타내는 유효(v) 비트를 저장하기 위한 유효 필드(220)를 포함한다. 일부 실시형태에서, 큐 엔트리(208)는 예를 들어, 명령 연산이 실행을 위해 선택될 준비가 되었는지를 나타내는 상태 필드, 명령 연산과 다른 명령 연산 사이의 종속성을 식별하는 종속성 필드 등과 같은 추가 필드(미도시)를 포함한다.
선택기(124-1, 124-2)는 SQ(122)와 연관된 선택된 실행 파이프(116)에 의한 실행을 위해 각각의 SQ(122)로부터 명령 연산을 선택(select)하거나 "선택(pick)"하도록 동작한다. 이 선택 프로세스는 통상적으로 그 포인트에서 실행될 주어진 명령 연산의 가용성뿐만 아니라 명령 연산을 실행할 수 있는 SQ(122)와 연관된 하나 이상의 실행 파이프들(116)의 현재 용량에 기초한다. 따라서, 선택기(124)는 실행 파이프(116)의 대응하는 서브세트에 배정되거나 달리 할당된 명령 연산을 추적하고 선택 프로세스의 일부로서 실행 파이프(116)의 서브세트의 상태를 추적한다.
실행 파이프(116-1 내지 116-6) 각각은 하나 이상의 명령 연산 유형을 실행하기 위한 로직 및 기타 회로를 포함한다. 일부 실시형태에서, 각각의 실행 파이프는 부동 소수점 곱셈(FMUL; floating-point multiply) 연산을 수행하기 위한 실행 파이프, 부동 소수점 가산(FADD; floating-point add) 연산을 수행하기 위한 실행 파이프, 융합 곱셈-가산(FMU; fused multiply-add) 연산 등을 수행하기 위한 실행 파이프와 같은 특수화된 기능을 갖는다. 또한, 일부 실시형태에서, SQ(122) 및 실행 파이프의 이들의 연관 서브세트는 각각의 SQ(122)가 이와 연관된 동일한 구성의 실행 파이프를 갖는다는 점에서 "대칭"이다. 즉, SQ(122-1)에 대한 실행 파이프 구성은 SQ(122-2)에 대한 실행 파이프 구성과 동일하므로, 실행 파이프(116-1)(EX0)과 실행 파이프(116-4)(EX1)는 동일한 유형의 실행 파이프이고, 실행 파이프(116-2)(EX2)와 실행 파이프(116-5)(EX3)는 동일한 유형의 실행 파이프이며, 실행 파이프(116-3)(EX4)과 실행 파이프(116-6)(EX5)는 동일한 유형의 실행 파이프이다. 이와 같이, 실행 파이프(EX0)에서의 실행에 적합한 명령 연산(204)은 또한 실행 파이프(EX1)에서의 실행에도 적합할 것이며, 그 반대의 경우도 마찬가지이며 실행 파이프 쌍(EX2/EX3) 및 (EX4/EX5)에 대한 동일한 능력 관계를 갖는다.
큐 컨트롤러(126)는 배정 컴포넌트(222), 모드 제어 컴포넌트(224), 큐 업데이트 컴포넌트(226), 큐 상태 컴포넌트(228), 파이프 상태 컴포넌트(230), 선택 레이트 컴포넌트(232), 및 인터리브 선택 컴포넌트(236)를 포함하는 다양한 컴포넌트들을 포함한다. 이들 컴포넌트들 각각은 하드웨어 로직 및 관련 회로로서, 프로그램 가능 로직 및 관련 회로로서, 대응하는 기능을 나타내는 소프트웨어 명령을 실행하는 프로세서 코어로서, 또는 이들의 조합으로 구현된다. 파이프 상태 컴포넌트(230)는 각각의 실행 파이프(116)에 대한 현재 파이프 점유를 결정하기 위해 실행 파이프(116)를 모니터링하도록 동작한다. 유사하게, 큐 상태 컴포넌트(228)는 NSQ(118) 및 SQ(122)를 모니터링하여 그들의 현재 큐 점유, 점유 변화율 등을 결정하도록 동작한다. 선택 레이트 컴포넌트(232)는 선택기(124-1, 124-2)에 의해 행해진 명령 연산 픽을 모니터링하고 선택기(124-1, 124-2)에 대한 현재 선택 레이트 통계를 결정하도록 동작한다. 큐 업데이트 컴포넌트(226)는, 아래에서 상세하게 설명되는 바와 같이, 분산 스케줄러(102)의 동작에 기초하여 SQ(122-1, 122-2)의 큐 엔트리(208) 및 NSQ(118)의 큐 엔트리(202)의 다양한 필드를 업데이트하도록 동작한다. 후술하는 바와 같이, 인터리브 선택 컴포넌트(236)는 인터리브 할당 패턴으로 명령 연산을 수신하기 위해 초기 SQ(122)를 선택하도록 동작한다.
본원에 설명된 바와 같이, 적어도 하나의 실시형태에서, 다중 모드 분산 스케줄러(102)는 SQ(122-1, 122-2) 사이 또는 동일한 유형의 실행 파이프(116) 사이의 불균형으로 인한 성능 저하를 완화하기 위해 NSQ(118)와 SQ(122-1, 122-2) 사이의 명령 연산 할당 프로세스의 동적 적응을 용이하게 하기 위해 복수의 할당 모드를 지원한다. 후술하는 바와 같이, 이러한 복수의 할당 모드는, 일 실시형태에서, 명령 연산이 먼저 NSQ(118)에서 SQ(122)로 할당된 다음 명령 연산이 일단 각각의 SQ(122)에서 완료되면 명령 연산에 대한 파이프 할당이 뒤따르는 큐 우선 할당 모드(240)를 포함한다. 다른 할당 모드는, 명령 연산이 NSQ(118)에 버퍼링되는 동안 대응하는 실행 파이프(116)에 먼저 할당되고, 그후 명령 연산이 NSQ-SQ 할당 사이클 동안 배정된 실행 파이프와 연관된 SQ(122)에 할당되는 파이프 우선 할당 모드(242)를 포함한다. 또 다른 예로서, 다중 모드 분산 스케줄러(102)에 의해 지원되는 복수의 할당 모드는, 명령 연산의 서브세트의 각 명령 연산의 복사본이 동일한 할당 사이클에서 NSQ(118)로부터 SQ(122-1, 122-2)의 각각으로 추론적으로 배정되고, 그후 파이프 배정이 그 후에 완료되며, 배정된 실행 파이프와 연관된 SQ(122)의 명령 사이클의 복사본만 유지되는 반면 다른 SQ(122)의 다른 복사본은 무효화되고 그 후 플러시되는 추론 할당 모드(244)를 포함한다. 이러한 다양한 할당 모드는 도 3 내지 도 7을 참조하여 이하에서 더 상세하게 설명된다.
모드 제어 컴포넌트(224)는, 선택 레이트 컴포넌트(232)로부터의 선택 레이트 통계, 파이프 상태 컴포넌트(230)로부터의 현재 파이프 점유, 큐 상태 컴포넌트(228)로부터의 현재 큐 점유 등과 같은 큐 컨트롤러(126)의 다른 컴포넌트에 의해 제공되는 정보로부터 결정되는 것과 같은, SQ(122)들 사이 또는 실행 파이프들 사이에서 불균형의 하나 이상의 지표들의 존재 또는 부재를 검출하는 것에 응답하여 하나 이상의 할당 사이클들 동안 구현하기 위한 특정 할당 모드를 선택하도록 동작한다. 할당 모드를 선택하는 예시적인 프로세스는 도 8을 참조하여 이하에 설명된다. 배정 컴포넌트(222)는 선택된 할당 모드에 기초하여 그리고 다양한 큐 및 실행 파이프 상태 정보에 기초하여 (예를 들어, 제어 시그널링(212)의 구성을 통해) NSQ(118)에서 SQ(122)로의 명령 연산의 할당 및 실행 파이프(116)로의 명령 연산의 할당을 제어하도록 동작한다.
도 3은 일부 실시형태에 따라 다중 모드 분산 스케줄러(102)의 큐 우선 할당 모드(240)에 대한 명령 연산 할당의 예시적인 방법을 예시한다. 언급된 바와 같이, 큐 우선 할당 모드(240)는, 명령 연산이 SQ(122-1, 122-2)에 할당된 후에 발생하는 명령 연산의 파이프 배정과 함께, 큐 용량 밸런싱을 위해 NSQ(118)에서 SQ(122-1, 122-2)로 명령 연산(204)의 할당을 제공한다. 각각의 SQ(122)가 K개의 입력 포트(210)(도 2의 예에서 K=3)를 갖기 때문에, 각각의 SQ(122)는 임의의 주어진 할당 사이클에서 최대 K개까지의 명령 연산을 수신한다. 따라서, 한 가지 가능한 접근방식은 할당 사이클 동안 NSQ(118)의 처음 K개의 명령 연산을 SQ(122-1)에 할당하고 NSQ(118)의 다음 K개의 명령 연산을 SQ(122-2)에 할당하는 것이다. 그러나, 이 블록 스타일 할당 접근방식은, 예를 들어, K 명령 연산의 한 블록이 로드 연산, 저장 연산 또는 완료하는 데 상당한 클록 사이클이 필요한 기타 연산에 종속된 명령 연산을 포함하는 반면 K 명령 연산의 다른 블록은 그러한 명령 연산이 거의 또는 전혀 없는 경우의 불균형을 초래할 수 있다. 이것을 완화하기 위한 일 접근방식은 할당 사이클 동안 SQ들(122) 사이에서 명령의 할당을 위해 인터리빙 패턴을 사용하여, 하나의 SQ(122)가 하나의 명령 연산을 얻고, 다른 SQ(122)가 다음 명령 연산을 얻는 식으로 하는 것이다. 이러한 방식으로, 각 SQ(122)는 순서대로 하나의 명령 연산을 얻은 다음 현재 할당 사이클에 대한 모든 명령 연산이 할당될 때까지 모든 SQ(122)를 통해 시퀀스가 다시 반복된다. 그러나, 동일한 SQ(122)가 각 할당 사이클에 대한 인터리빙 패턴의 명령 연산을 수신하는 제1 SQ로 작용하는 경우, 상황은 SQ(122) 사이의 불균형 점유를 야기할 수 있다. 예시를 위해, 실행 중인 프로그램에 [ADD, MUL, ADD, MUL, ADD, MUL, ADD, MUL, ADD, MUL, ADD, MUL]과 같이 덧셈과 곱셈 사이를 번갈아 가며 실행되는 연산이 있는 경우, 동일한 SQ(122)에 각 할당 사이클의 제1 또는 초기 명령 연산을 제공하는 2개의 SQ들(122) 사이에서 할당의 인터리빙 패턴은 6개의 ADD 연산이 해당 SQ(122)에 할당되는 결과를 초래할 것이며, 6개의 MUL 연산(이는 실행할 ADD 연산보다 훨씬 더 김)은 다른 SQ(122)에서 종료한다. 따라서, 이러한 잠재적인 큐 불균형을 피하기 위해, 적어도 하나의 실시형태에서, 큐-우선 할당 모드(240)에서 인터리빙 패턴을 사용하는 경우 큐 컨트롤러(126)는 주어진 사이클에 할당될 명령 연산의 서브세트의 제1 또는 초기 명령 연산을 수신하기 위해 SQ(122)를 선택하기 위한 선택 프로세스를 구현하며, 여기서 이러한 선택 프로세스는 예를 들어 교번 또는 핑퐁 선택에 기초하거나 또는 의사 랜덤 선택에 기초한다. 할당 사이클 사이에 초기 수신 SQ(122)를 순차적으로 또는 의사-랜덤으로 변경함으로써, 주어진 명령 연산 스트림이 SQ(122)와 대응하는 실행 파이프(116) 사이의 불균형 연산 할당을 초래할 확률은, 통상적으로 동일한 SQ(122)가 각 할당 사이클에 대한 초기 수신 SQ로서 선택되는 구현과 비교하여 감소된다.
따라서, 할당 사이클의 개시에 응답하여, 블록(302)에서 인터리브 선택 컴포넌트(236)는 할당 사이클에 대해 NSQ(118)로부터 할당된 초기 명령 연산을 수신하기 위해 SQ(122-1, 122-2) 중 하나를 선택한다. 즉, 인터리브 선택 컴포넌트(236)는 SQ(122-1, 122-2) 중 하나를 인터리빙 패턴의 "제1" SQ(122)로 선택한다. 일 실시형태에서, 인터리브 선택 컴포넌트(236)는, 2개의 SQ(122)에 대해 1-2-1-2-1-2-1... 시퀀스(즉, 핑퐁 시퀀스) 또는 1-2-2-1-1-2-2 시퀀스, 또는 3개의 SQ(122)를 사용하는 구현에서 1-2-3-1-2-3-1-2-3-1.... 시퀀스 또는 1- 2-3-2-3-1 ... 의 시퀀스 등과 같은 사전정의된, 고정 선택 시퀀스를 활용한다. 다른 실시형태에서, 인터리브 선택 컴포넌트(236)는 선형 피드백 시프트 레지스터(LFSR)와 같은 의사 난수 생성기를 구현하여 각각의 할당 사이클에 대한 의사 난수를 생성하고, 그후 의사 난수 생성기에 의해 출력되는 하나 이상의 비트를 사용하여 현재 할당 사이클에 사용될 인터리빙 패턴에 대해 초기 수신 SQ(122)를 선택한다. 초기 수신 SQ(122)가 선택되면, 블록(304)에서, 배정 컴포넌트(222)는 선택된 초기 수신 SQ(122)로 시작하여 인터리빙 패턴에 따라 출력 포트(206) 및 입력 포트(210)를 통해 NSQ(118)로부터 SQ(122-1, 122-2)로 명령 연산의 서브세트를 분배하도록 먹스 네트워크(120)를 제어한다.
도 4는, 6개의 명령 연산이 핑퐁 초기 수신 SQ 선택 시퀀스를 사용하여 인터리빙 패턴으로 NSQ(118)로부터 2개의 SQ(122-1, 122-2) 사이에 할당되는 구현에서 이 프로세스의 예를 예시한다. 초기에, NSQ(118)은 OP 1에서 OP 12까지 12개의 명령 연산을 버퍼링하며, 여기서 OP 1은 가장 오래된 명령 연산(따라서 가장 먼저 할당됨)이다. 할당 사이클(401) 동안, 6개의 명령 연산(OP 1 내지 OP 6)의 서브세트가 할당된다. 이 할당 사이클의 경우, SQ(122-1)는 초기 수신 SQ로서 선택되며, 이에 따라 인터리빙 할당 패턴은 연산 OP 1, OP 3 및 OP 5가 SQ(122-1)에 할당되고 연산 OP 2, OP 4 및 OP 6가 SQ(122-2)에 할당되는 결과를 초래한다. 다음 할당 사이클(402)의 경우, 6개의 명령 연산 OP 7 내지 OP 12의 서브세트가 할당되고 이 할당 사이클에 대해 SQ(122-2)가 핑퐁 선택 패턴을 사용하여 초기 수신 SQ로서 선택된다. 따라서, 할당 사이클(402) 동안, 인터리빙 할당 패턴은 명령 연산 OP 7, OP, 9 및 OP 11이 SQ(121-2)에 할당되고 명령 연산 OP 8, OP 10 및 OP 12가 SQ(121-1)에 할당되는 결과를 초래한다.
도 5는 일부 실시형태에 따라 다중 모드 분산 스케줄러(102)의 파이프 우선 할당 모드(242)에 대한 명령 연산 할당의 예시적인 방법을 예시한다. 위에서 설명된 큐 우선 할당 모드(240)는 모든 출력 포트(206)가 할당 사이클에서 활용될 수 있도록 하여 할당 사이클에서 NSQ(118)에서 SQ(122)로 할당되는 명령 연산의 수를 최대화하는 이점을 갖는 반면, 단점은 명령 연산 스트림의 상황이 파이프 활용의 불균형을 초래할 수 있다는 것이다. 예를 들어, 큐 우선 할당은 다른 SQ(122)와 비교하여 하나의 SQ(122)에서 불균형적인 수의 ADD 연산을 초래할 수 있는 반면, 다른 SQ(122)는 불균형적인 수의 MUL 연산으로 종료된다. 이러한 시나리오에서, ADD 연산에 사용되는 제1 SQ(122)의 실행 파이프(116)가 백업될 수 있으면서 MUL 연산에 사용되는 제1 SQ(122)의 실행 파이프(116)는 유휴 상태이고, 제2 SQ(122)의 경우에서 ADD 유형 실행 파이프(116)가 유휴 상태이면서 MUL 유형 실행 파이프(116)는 과부하 상태가 되는 것으로 상황은 반전된다. 파이프 우선 할당 모드(242)는, 분산 스케줄러(102)에서 모든 실행 파이프(116)의 파이프 점유를 평가한 후 현재 할당 사이클에 할당될 명령 연산의 서브세트의 각 명령 연산을, 파이프 점유가 가장 낮고 명령 연산에 의해 표현되는 연산 유형을 실행할 수 있는 실행 파이프에 할당하는 것을 통해 이러한 불균형을 완화하려고 한다.
따라서, 주어진 할당 사이클에 대해, 블록(502)에서 모드 제어 컴포넌트(224)는, 예를 들어, 메모리, 레지스터 파일, 또는 파이프 상태 컴포넌트(230)에 의해 유지되는 다른 저장 컴포넌트로부터 파이프 점유 데이터에 액세스함으로써 분산 스케줄러(102)의 실행 파이프(116) 세트의 현재 파이프 점유를 평가한다. 일반적으로, 파이프 점유 데이터는 현재 각 실행 파이프(116)에 배정된 명령 연산의 수를 나타내며, 따라서 각 실행 파이프(116)에 이미 커밋된(committed) 연산 "작업"의 총량을 나타낸다. 이 정보를 사용하여, 블록(504)에서 배정 컴포넌트(222)는 NSQ(118)에서 현재 할당 사이클에 할당될 다음 명령 연산을 선택하고, 선택된 명령 연산을 실행할 수 있는 실행 파이프(116)를 식별하고, 그후 선택된 명령 연산을 서브세트의 가장 낮은 파이프 점유를 갖는 식별된 서브세트 내의 실행 파이프(116)에 배정한다. 이 배정은, 예를 들어, 선택된 명령 연산을 저장하는 NSQ(118)의 큐 엔트리(202)의 배정 필드에 선택된 실행 파이프를 식별하는 값을 기록함으로써 행해진다. 명령 연산이 SQ(122)에 대한 할당에 이용 가능할 때(예를 들어, 명령 연산이 현재 할당 사이클에 할당될 명령 연산의 서브세트에 포함될 때), 블록(506)에서 배정 컴포넌트(222)는 사전-배정된 실행 파이프(116)를 결정하기 위해 명령 연산을 저장하는 큐 엔트리(202)의 배정 필드에 액세스하고, NSQ(118)로부터 할당된 실행 파이프(116)와 연관된 SQ(122)의 엔트리(208)로 명령 연산을 라우팅하도록 먹스 네트워크(120)를 제어한다. 블록(502, 504, 506)의 프로세스는 주어진 할당 사이클에서 할당될 명령 연산의 서브세트에서 각각의 명령 연산에 대해 수행된다.
파이프 우선 할당 모드(242)의 파이프 점유 포커스는 통상적으로 분산 스케줄러(102) 내에서 파이프 점유 균형을 유지하는 데 효과적이다. 그러나, NSQ-to-SQ 할당 처리량이 최대화되는 큐 우선 할당 모드(240)와 달리, 상황은 NSQ(118)의 일련의 명령 연산이 하나의 특정 SQ(122)에 할당되는 결과를 초래할 수 있으며, 그 결과 NSQ(118)의 출력 포트(206)의 총 수와 비교하여 주어진 SQ(122) 상의 입력 포트(210)의 더 적은 수로 인해 대응하는 할당 사이클에서 할당된 명령 연산의 수를 제한하게 된다. 예를 들어, 도 2의 NSQ(118)에서 다음 6개의 명령 연산이 SQ(122-2)와 연련된 실행 파이프(116)에 사전-배정된다면, 다음 할당 사이클 동안 총 6개의 가능한 명령 연산 중 3개의 명령 연산만이 할당될 수 있는데, 이는 도 2의 SQ(122-2)가 오직 3개의 입력 포트(210)만을 갖기 때문이다. 대조적으로, 큐 우선 할당 모드(240)는 6개의 출력 포트(206) 모두가 동일한 상황(SQ(122)에서의 충분한 용량을 가정함)에서 6개의 명령 연산을 할당하는 데 활용될 수 있도록 한다. 도 8을 참조하여 이하에서 더욱 상세하게 설명되는 바와 같이, 다중 모드 분산 스케줄러(102)는 SQ(122) 간의 불균형 또는 실행 파이프(116) 간의 불균형의 다양한 지표를 검출하는 것에 응답하여 이들 할당 모드 사이를 전환함으로써 큐 우선 할당 모드(240) 및 파이프 우선 할당 모드(242) 각각의 이점을 활용한다.
도 6은 일부 실시형태에 따라 다중 모드 분산 스케줄러(102)에 의해 제공되는 추론적 할당 모드(244)에 대한 명령 할당 연산에 대한 예시적인 방법을 예시한다. 통상적으로, 분산 스케줄러(102)는, 명령 연산이 SQ(122) 중 하나에 할당되면 이는 다른 SQ(122)로 이동할 수 없도록 설계 및 제작된다. 이와 같이, 분산 스케줄러(102)는 큐 우선 할당 모드(240) 또는 파이프 우선 할당 모드(242)를 사용하여 SQ(122)에 이미 커밋된 명령 연산에 의해 야기된 불균형을 수정하는 데 거의 의존하지 않는다. 그러나, 실행 파이프(116)의 현재 선택 레이트가 충분히 낮아 SQ(122)의 언더플로가 심각한 위험이 아닌 경우, 분산 스케줄러(102)는, 분산 스케줄러(102)가 SQ(122)에 일단 명령 연산들 간의 균형을 제공하는 방식으로 SQ(122)에 명령 연산을 할당하기 위해 추론적 할당 모드(244)를 사용한다.
추론적 할당 모드(244)에서의 추론적 할당의 프로세스의 경우, 블록(602)에서 모드 제어 컴포넌트(224)는, 예를 들어, 앞서 설명된 바와 같이 파이프 점유 데이터에 액세스함으로써 분산 스케줄러(102)의 실행 파이프(116) 세트의 현재 파이프 점유를 평가한다. 블록(604)에서, 배정 컴포넌트(222)는 NSQ(118)에서 배정되지 않은 명령 연산을 식별하고, 식별된 명령 연산을 그 유형의 명령 연산을 실행할 수 있는 실행 파이프(116)의 현재 파이프 점유에 기초하여 특정 실행 파이프(116)에 사전-배정한다. 이러한 사전-배정은, 예를 들어, NSQ(118)에 명령 연산을 저장하는 큐 엔트리(202)의 배정 필드에 사전-배정된 실행 파이프의 식별자를 저장함으로써 반영된다. 이러한 사전-배정 프로세스는 NSQ(118)에서 임의의 수의 할당되지 않은 명령 연산에 대해 반복된다.
단일 SQ(122)에 명령 연산을 할당하기 보다는 사전-배정된 명령 연산이 SQ(122)에 할당할 수 있을 때(예를 들어, 명령 연산이 현재 할당 사이클에 할당될 명령 연산의 서브세트에 포함될 때), 대신에 블록(606)에서 배정 컴포넌트(222)는 어떤 SQ(122)가 명령 연산에 사전-배정된 실행 파이프(116)와 연관되는지에 관계없이 명령 연산의 복사본을 SQ(122) 각각으로(예를 들어, 명령어 연산의 하나의 복사본은 SQ(122-1)로, 그리고 다른 복사본은 SQ(122-2)로) 라우팅한다. 이 프로세스는 현재 할당 사이클 동안 할당될 서브세트의 사전-배정된 각 명령 연산에 대해 반복된다.
그 후, 블록(608)에서 배정 컴포넌트(222)는 SQ(122)에서 다음 추측 할당 명령 연산을 순서대로 선택하고 사전-배정된 실행 파이프(116)와 다른 SQ(122)와 관련된 동일한 또는 유사한 유형의 실행 파이프(116)의 현재 파이프 점유에 불균형이 존재하는지 여부를 결정한다. 설명을 위해, 명령 연산이 SQ(122-1)과 연관된 실행 파이프(116-2)(EX2)에 사전-배정되면, 실행 파이프(116-2)(EX2)의 파이프 점유는 SQ(122-2)와 관련된 실행 파이프(116-5)(EX3)의 현재 파이프 점유와 비교될 수 있다. 이 프로세스의 경우, 사전-배정된 실행 파이프(116)의 파이프 점유와 다른 SQ(122)의 다른 유사한 실행 파이프 사이의 파이프 점유 사이의 불균형은, 예를 들어, 사전-배정된 실행 파이프(116)의 파이프 점유가 다른 SQ(122)의 동일한 유형의 실행 파이프(116)의 파이프 점유를 적어도 임계량만큼 초과하는 것으로 나타날 수 있다. 예를 들어, 임계값이 3개의 연산으로 설정되어 있다고 가정하면, 사전-배정된 실행 파이프(116)가 운행 중인 8개의 명령 연산을 가지고 있고 다른 동일한 유형의 실행 파이프(116)가 6개의 명령 연산을 가지고 있는 경우 또는 다른 동일한 유형의 실행 파이프(116)가 사전-배정된 실행 파이프(116)보다 운행 중인 명령 연산을 더 많이 가지고 있는 경우에는 불균형이 가정되지 않는 반면, 사전-배정된 실행 파이프(116)가 운행 중인 12개의 명령 연산을 갖고 다른 동일한 유형의 실행 파이프(116)가 운행 중인 5개의 명령 연산을 갖는 경우에는 불균형이 검출된다.
파이프 점유의 불균형이 블록(608)에서 충분하게 검출되지 않으면, 블록(610)에서 배정 컴포넌트(222)는 큐 업데이트 컴포넌트(226)에게 사전-배정된 실행 파이프(116)와 연관된 SQ(122)에서 명령 연산의 복사본의 유효한 상태를 유지하고 그리고 다른 SQ(122)에서 명령 연산의 복사본을 무효화하도록 지시한다. 즉, 불균형이 충분히 검출되지 않을 때, 큐 컨트롤러(126)는 사전-배정된 실행 파이프(116)와 연관된 SQ(122)에서 명령 연산의 복사본을 유지하면서 다른 SQ(122)에서의 명령 연산의 다른 복사본 모두를 무효화함으로써 명령 연산의 사전-배정을 유지한다. 적어도 하나의 실시형태에서, 이러한 무효화는 무효화될 명령 연산의 복사본을 저장하는 큐 엔트리(208)의 유효 필드(220)에서 유효 비트를 클리어함으로써 달성된다. 그렇게 함으로써, 엔트리(208)는 다른 명령 연산을 저장하기 위해 엔트리(208)를 이용가능하게 하기 위해 명령 연산의 무효 복사본의 플러싱을 위해 이용가능하게 된다.
그렇지 않고, 파이프 점유의 충분한 불균형이 블록(608)에서 검출되면, 블록(612)에서 배정 컴포넌트(222)는 연산 명령이 최종적으로 배정되는 적절한 실행 파이프(116)를 동적으로 선택하기 위해 현재 파이프 점유, 명령 연산을 실행할 수 있는 유형의 각각의 실행 파이프(116)에 사전-배정된 후속 명령 연산의 수 등과 같은 다양한 파라미터를 평가한다. 일부 상황에서, 선택된 실행 파이프(116)는 명령 연산이 사전-배정되었던 동일한 실행 파이프이다. 다른 상황에서, 동일하거나 유사한 성능의 다른 실행 파이프(116)는 명령 연산의 적시 실행을 제공하도록 더 잘 위치되고, 따라서 명령 연산의 배정은 이 다른 실행 파이프로 전환된다. 어느 경우든, 배정 컴포넌트(222)는 큐 업데이트 컴포넌트(226)에게 선택된 실행 파이프(116)와 연관된 SQ(122)에서 명령 연산의 복사본의 유효한 상태를 유지하고 그리고 다른 SQ(122)에서 명령 연산의 복사본을 무효화하도록 지시한다. 블록(610 및 612)의 경우, 2개 초과의 SQ(122)가 구현될 때, 명령 연산의 단일 복사본(즉, 명령 연산에 최종적으로 배정되는 실행 파이프와 연관된 SQ의 복사본)만이 유효한 것으로 유지되고 다른 SQ(122)의 다른 모든 복사본은 무효화되는 것으로 이해될 것이다.
추론적 할당 모드(244)는 큐 컨트롤러(126)가 파이프 점유를 더 미세하게 조정할 수 있게 하고, 따라서 선택불가 스케줄러 큐 레벨에서의 실행 파이프 배정을 요구하는 것 보다는, 명령 연산이 선택가능 스케줄러 큐 레벨에 할당될 때까지 각 명령 연산의 최종 배정을 지연시킴으로써 개선된 파이프 균형 및 파이프 처리량을 달성할 수 있게 한다. 이 지연은, 명령 연산이 실행을 위해 선택되는 지점에 더 가까운 호환가능한 실행 파이프(116)의 파이프 점유를 큐 컨트롤러(126)가 평가하기 위한 추가 시간을 허용하고, 이에 따라 큐 컨트롤러(126)는 보다 정확한 배정 결정을 행할 수 있다. 그러나, 추론적 할당 모드(244)는 NSQ(118)에서 SQ(122)로 할당된 각 명령 연산에 대해 2개의 출력 포트(206)의 사용(할당된 명령 연산의 각 복사본에 대해 하나의 출력 포트(206))을 필요로 하고, 이에 따라 할당 사이클당 명령 연산의 효율적인 할당 레이트는 최대 NSQ-to-SQ 할당 레이트의 오직 절반에 불과하다. 따라서, 도 8을 참조하여 이하에서 더욱 상세하게 설명된 같이, 추론적 할당 모드(244)는, 추론적 할당 모드(244)에 의해 제공되는 상대적으로 더 느린 입력 레이트로 인해 큐 언더플로의 가능성을 감소시키거나 제거하기 위해 실행 파이프(116)의 현재 선택 레이트가 충분히 낮을 때 더 효과적으로 구현된다.
도 7은, 3개의 명령 연산, OP 1, OP 2 및 OP 3의 복사본이 NSQ(118)로부터 2개의 SQ(122-1, 122-2) 각각으로 추론적으로 할당되는 구현에서의 추론적 할당 프로세스의 예를 예시한다. 사전-배정 프로세스(블록 604) 동안, OP 1은 실행 파이프(116-1)(EX0)에 사전-배정되고, OP 2는 실행 파이프(116-5)(EX3)에 사전-배정되며, OP 3은 실행 파이프(116-3)(EX4)에 사전-배정된다. 단계(701)에 의해 예시된 바와 같이, 추론적 할당 프로세스(블록 606) 동안, 명령 연산 OP 1, OP 2, 및 OP 3 각각의 복사본이 SQ(122-1) 및 SQ(122-2) 모두에 할당된다. 이 시점에서, 이러한 동작의 유효성 상태는, 명령 연산의 이러한 복사본의 유효성이 이 시점에서는 적절하지 않음을 의미하기 위해 해당 큐 엔트리(208)의 유효 필드(220)(도 2)에서 "X"로 마킹된다. 이와 같이, 일부 구현에서는 복사본이 초기에 유효한 상태로 설정되지만 다른 구현에서 이 복사본은 초기에 무효한 상태로 설정된다.
단계(702)에 의해 표현되는 바와 같이, 초기 할당 후에 배정 컴포넌트(222)는 명령 연산 OP 1을 실행할 수 있는 실행 파이프(116)의 현재 파이프 점유를 결정하며, 이는 이 예에서 실행 파이프(116-1)(EX0)는 10개의 보류중인 명령 연산을 가지며 실행 파이프(116-4)(EX1)는 오직 하나의 보류중인 명령 연산을 갖는다는 것을 나타낸다. 따라서, 파이프 점유의 차이는 9개 연산이다. 이 특정 예에서, 파이프 불균형을 나타내는 임계값은 여섯(6)개 연산이다. 이와 같이, 파이프 점유의 차이는 이 임계값을 초과하여 파이프 불균형을 나타낸다. 따라서, OP 1이 식별된 파이프 불균형으로 인해 SQ(122-1)과 연관된 실행 파이프(116-1)(EX0)에 사전-배정되었지만, 배정 컴포넌트(222)는 SQ(122) 및 명령 연산 OP 1을 실행하기에 가장 잘 배치된 대응하는 실행 파이프를 동적으로 선택하기 위해 SQ(122-1 및 122-2) 사이의 큐 점유의 임의의 차이와 같은 다른 조건의 관점에서 이 파이프 점유 불균형을 평가한다. 이 예에서, 배정 컴포넌트(222)는, 실행 파이프(116-4)(EX1)가 명령 연산 OP 1을 배정받아야만 하는 것으로 결정하고, 이에 따라 명령 연산 OP 1을 SQ(122-2)와 연관된 실행 파이프(116-4)에 재배정한다. 따라서, 단계(703)에 나타낸 바와 같이, 큐 업데이트 컴포넌트(226)는 SQ(122-1)에 대한 명령 연산 OP 1의 대응하는 복사본을 저장하는 SQ(122-1)의 엔트리(208)의 유효 필드를 클리어(예를 들어, "0"으로 설정)함으로써 그리고 SQ(122-2)에 대한 명령 연산 OP 1의 대응하는 복사본을 저장하는 SQ(122-2)의 엔트리(208)의 유효 필드를 어써팅(예를 들어, "1"로 설정)함으로써 이 최종 배정을 시그널링한다.
다음으로, 단계(704)에 의해 표현되는 바와 같이, 배정 컴포넌트(222)는 명령 연산 OP 2를 실행할 수 있는 실행 파이프(116)의 현재 파이프 점유를 결정하며, 이는 이 예에서 실행 파이프(116-2)(EX2)는 8개의 보류중인 명령 연산을 가지며 실행 파이프(116-5)(EX3)는 3개의 보류중인 명령 연산을 갖는다는 것을 나타낸다. 사전-배정된 실행 파이프(EX3)의 현재 파이프 점유가 다른 SQ(122)에 있는 대체 실행 파이프(EX2)의 현재 파이프 점유보다 낮기 때문에, 어떠한 파이프 불균형도 시그널링되지 않는다. 따라서, OP 2가 SQ(122-2)와 관련된 실행 파이프(116-5)(EX3)에 사전-배정되었기 때문에, 배정 컴포넌트(222)는 이 배정을 최종 배정으로 유지한다. 따라서, 단계(705)에 의해 표현된 바와 같이, 큐 업데이트 컴포넌트(226)는 SQ(122-1)에 대한 명령 연산 OP 2의 대응하는 복사본을 저장하는 SQ(122-1)의 엔트리(208)의 유효 필드를 클리어함으로써 그리고 SQ(122-2)에 대한 명령 연산 OP 2의 대응하는 복사본을 저장하는 SQ(122-2)의 엔트리(208)의 유효 필드를 어써팅함으로써 이 최종 배정을 시그널링한다.
그 후, 단계(706)에 의해 표현되는 바와 같이, 배정 컴포넌트(222)는 명령 연산 OP 3를 실행할 수 있는 실행 파이프(116)의 현재 파이프 점유를 결정하며, 이는 이 예에서 실행 파이프(116-3)(EX4)는 9개의 보류중인 명령 연산을 가지며 실행 파이프(116-5)(EX3)는 6개의 보류중인 명령 연산을 갖는다는 것을 나타낸다. 사전-배정된 실행 파이프(EX4)의 현재 파이프 점유가 다른 SQ(122)에 있는 대체 실행 파이프(EX5)의 현재 파이프 점유를 최소 6개 연산의 임계량만큼 초과하지 않기 때문에, 어떠한 파이프 불균형도 시그널링되지 않는다. 따라서, OP 3이 SQ(122-1)와 관련된 실행 파이프(116-3)(EX4)에 사전-배정되었기 때문에, 배정 컴포넌트(222)는 이 배정을 최종 배정으로 유지한다. 따라서, 단계(707)에 의해 표현된 바와 같이, 큐 업데이트 컴포넌트(226)는 SQ(122-2)에 대한 명령 연산 OP 3의 대응하는 복사본을 저장하는 SQ(122-2)의 엔트리(208)의 유효 필드를 클리어함으로써 그리고 SQ(122-1)에 대한 명령 연산 OP 3의 대응하는 복사본을 저장하는 SQ(122-1)의 엔트리(208)의 유효 필드를 어써팅함으로써 이 최종 배정을 시그널링한다.
도 8은 일부 실시형태에 따라 분산 스케줄러(102)에 대한 할당 모드 선택을 위한 예시적인 방법(800)을 예시한다. 앞서 설명된 바와 같이, 큐 우선 할당 모드(240), 파이프 우선 할당 모드(242), 및 추론적 할당 모드(244) 각각은 일부 상황에서는 불균형을 효과적으로 완화하지만 다른 상황에서는 불균형에 기여(또는 적어도 실질적으로 정정하지 않음)할 수 있다. 따라서, 방법(800)에 의해 예시된 바와 같이, 적어도 하나의 실시형태에서, 분산 스케줄러(102)는 실제 또는 예상되는 불균형의 특정 지표에 응답하여 2개 이상의 할당 모드 사이를 전환하도록 동작한다. 이러한 방식으로, 분산 스케줄러(102)는 검출된 불균형을 처리하거나 예상되는 불균형을 생성하는 것을 회피하기에 특히 적합한 할당 모드를 선택한다.
일 실시형태에서, 방법(800)의 반복은 블록(802)에서, 파이프 불균형, 큐 불균형 또는 둘 다의 불균형이 존재하는지 여부를 결정하기 위해 큐 상태 컴포넌트(228) 및 파이프 상태 컴포넌트(230) 각각에 의해 획득된 큐 상태 정보 및 파이프 상태 정보를 모드 제어 컴포넌트(224)가 평가하는 것으로 시작한다. 예시를 위해, 일부 실시형태에서, 동일하거나 유사한 유형의 2개의 실행 파이프들 사이의 파이프 점유의 차이가 특정된 임계값을 초과한다는 지표가 있는 경우, 액셔너블 불균형(actionable imbalance)이 시그널링된다. 다른 실시형태에서, SQ(122) 사이의 큐 점유의 차이가 특정된 임계값을 초과한다는 지표가 있는 경우, 액셔너블 불균형이 시그널링된다. 또 다른 실시형태에서, 파이프 불균형 지표와 큐 불균형 지표가 모두 있는 경우에만, 액셔널 불균형이 시그널링된다. 예시를 위해, 일부 실시형태에서, SQ(122) 중 하나의 큐 점유가 다른 SQ(122)의 큐 점유를 적어도 제1 임계량만큼 초과하고 그리고 하나의 실행 파이프(116)의 파이프 점유가 동일한 유형의 다른 실행 파이프(116)의 파이프 점유를 적어도 제2 임계량만큼 초과하는 경우에만, 분산 스케줄러(102)에서의 불균형이 시그널링된다. 그렇지 않으면, 2개의 임계값 중 하나가 초과되더라도, 이 실시형태에서 어떠한 불균형도 시그널링되지 않는다.
큐/파이프 불균형의 존재가 블록(802)에서 검출되면, 블록(804)에서 모드 제어 컴포넌트(224)는 할당 모드가 변경될 때까지 후속 할당 사이클에 대해 파이프 우선 할당 모드(242)를 구현하도록 큐 컨트롤러(126)를 구성한다. 그렇지 않고, 큐/파이프 불균형의 존재가 블록(802)에서 없는 것으로 간주되면, 블록(806)에서 모드 제어 컴포넌트(224)는 실행 파이프(116)의 현재 선택 레이트를 결정하기 위해 선택 레이트 컴포넌트(232)에 질의하고 이 평균 선택 레이트를 정의된 최소 선택 레이트 임계값과 비교한다. 일 실시예에서, 현재 선택 레이트는 슬라이딩 시간 윈도우에 대한 평균 선택 레이트를 나타내며, 여기서 평균은 예를 들어 슬라이딩 윈도우 내의 모든 실행 파이프(116)의 선택 레이트의 평균, 슬라이딩 윈도우 내의 특정 유형의 실행 파이프(116)의 선택 레이트의 평균, 개별 실행 파이프(116)의 선택 레이트의 평균 등이다. 평균 선택 레이트가 충분하지 않는다면(즉, 이 최소 선택 레이트 임계값을 초과하지 않는다면), 블록(808)에서 모드 제어 컴포넌트(224)는 평균 선택 레이트가 특정된 임계값 이상으로 상승할 때까지 후속 할당 사이클에 대해 분산 스케줄러(102)에서의 구현을 위해 추론적 할당 모드(244)를 선택하며, 여기서 특정 임계값은 분산 스케줄러(102)를 추론적 할당 모드(244)에 배치하는 데 사용되는 동일한 임계값 또는 상이한 임계값이다. 일 예로서, 사이클당 2.5 연산의 임계값 선택 레이트는 추론적 할당 모드로의 진입을 트리거하는 데 사용되는 반면, 사이클당 2.65 연산의 임계값 선택 레이트는 추론적 할당 모드(244)로부터의 종료를 트리거하는 데 사용된다. 따라서, 평균 선택 레이트가 충분하다면(즉, 최소 선택 레이트 임계값을 초과하면), 블록(810)에서 모드 제어 컴포넌트(224)는 후속 할당 사이클에 대한 분산 스케줄러(102)에 의한 구현을 위해 큐 우선 할당 모드(240)를 선택한다. 그 다음, 방법(800)은 블록(802)으로 돌아가서 모드 제어 컴포넌트(224)가 그동안 발생한 임의의 파이프/큐 불균형 또는 선택 레이트 감소를 검출하기 위해 대응하는 모니터/폴링 사이클에서 큐 상태 컴포넌트(228) 및 파이프 상태 컴포넌트(230)를 모니터링하거나 폴링한다.
방법(800)은 주어진 분석 사이클에 대해 파이프/큐 불균형이 먼저 체크된 다음 선택 레이트가 분석되는 흐름을 나타내지만, 다른 실시형태에서는 선택 레이트가 먼저 분석되고, 만약 충분한 것으로 발견되면 파이프/큐 불균형이 평가된다. 또한, 적어도 일부 실시형태에서, 방법(800)에 의해 표현되는 할당 모드 선택 프로세스는 파이프/큐 불균형의 존재가 큐 우선 할당 모드(240)에서 파이프 우선 할당 모드(242)로의 모드 변경을 트리거하는, 그리고 불충분한 선택 레이트의 검출이 현재 구현되고 있는 할당 모드로부터 추론적 할당 모드(244)로의 변경을 트리거하는 하드웨어 상태 머신으로서 구현된다.
일부 실시형태에서, 앞서 설명된 장치 및 기술은 도 1 내지 도 8을 참조하여 앞서 설명된 다중 모드 분산 스케줄러(102)를 구현하는 프로세서(100)와 같은 하나 이상의 집적 회로(IC) 디바이스(또한, 집적 회로 패키지 또는 마이크로칩이라고도 지칭됨)를 포함하는 시스템에서 구현된다. 전자 설계 자동화(EDA; electronic design automation) 및 컴퓨터 지원 설계(CAD) 소프트웨어 도구는 종종 이러한 IC 디바이스의 설계 및 제조에 사용된다. 이러한 설계 도구는 통상적으로 하나 이상의 소프트웨어 프로그램으로 표현된다. 하나 이상의 소프트웨어 프로그램은 회로를 제조하도록 제조 시스템을 설계하거나 적응시키기 위한 프로세스의 적어도 일부를 수행하도록 하나 이상의 IC 디바이스의 회로를 나타내는 코드를 조작하도록 컴퓨터 시스템을 조작하기 위해 컴퓨터 시스템에 의해 실행 가능한 코드를 포함한다. 이 코드는 명령, 데이터 또는 명령과 데이터의 조합을 포함한다. 설계 도구 또는 제작 도구를 표현하는 소프트웨어 명령어는 통상적으로, 컴퓨팅 시스템에 액세스 가능한 컴퓨터 판독 가능한 저장 매체에 저장된다. 마찬가지로, IC 디바이스의 설계 또는 제조의 하나 이상의 단계를 나타내는 코드는 동일한 컴퓨터 판독 가능 저장 매체 또는 다른 컴퓨터 판독 가능 저장 매체에 저장되고 액세스된다.
컴퓨터 판독 가능 저장 매체는 컴퓨터 시스템에 명령 및/또는 데이터를 제공하기 위해 사용 중에 컴퓨터 시스템에 의해 액세스 가능한 임의의 비 일시적 스토리지 매체, 또는 비 일시적 스토리지 매체의 조합을 포함한다. 이러한 저장 매체에는 광학 매체(예를 들어, 컴팩트 디스크(CD), 디지털 다목적 디스크(DVD), 블루레이 디스크), 자기 매체(예를 들어, 플로피 디스크, 자기 테이프 또는 자기 하드 드라이브), 휘발성 메모리(예를 들어, 랜덤 액세스 메모리(RAM) 또는 캐시), 비휘발성 메모리(예를 들어, 판독 전용 메모리(ROM) 또는 플래시 메모리), 또는 MEMS(Microelectromechanical Systems) 기반 저장 매체를 포함하지만, 이에 제한되지는 않는다. 컴퓨터 판독가능 저장 매체는, 컴퓨팅 시스템 내에서 구현될 수 있거나(예를 들어, 시스템 RAM 또는 ROM), 컴퓨팅 시스템에 고정적으로 부착될 수 있거나(예를 들어, 자기 하드 드라이브),컴퓨팅 시스템에 착탈가능하게 부착될 수 있거나(예를 들어,광 디스크 또는 범용 직렬 버스(USB)-기반 플래시 메모리), 또는 유선 또는 무선 네트워크를 통해 컴퓨터 시스템에 결합될 수 있다(예를 들어, 네트워크 액세스가능 스토리지(NAS; network accessible storage)).
일부 실시예에서, 전술한 기술의 특정 양태는 소프트웨어를 실행하는 프로세싱 시스템의 하나 이상의 프로세서에 의해 구현된다.소프트웨어는 비 일시적인 컴퓨터 판독 가능 저장 매체 상에 저장되거나 그렇지 않으면 유형의 구현된 하나 이상의 세트의 실행 가능 명령을 포함한다.소프트웨어는 하나 이상의 프로세서들에의해 실행 시 상술한 기술들 중 하나 이상의 측면들을 수행하도록 하나 이상의 프로세서를 조작하는 명령들 및 특정 데이터를 포함할 수 있다. 비-일시적 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광 디스크 저장 디바이스, 플래시 메모리와 같은 고체 상태 저장 디바이스, 캐시, 랜덤 액세스 메모리(RAM) 또는 기타 비-휘발성 메모리 디바이스 또는 디바이스들 등을 포함할 수 있다. 비-일시적 컴퓨터 판독가능 저장 매체 상에 저장되는 실행가능 명령어는, 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는, 하나 이상의 프로세서에 의해 해석 또는 실행될 수 있는 기타 명령어 포맷일 수 있다.
일반적인 설명에서 위에 설명된 모든 활동 또는 요소가 필요한 것은 아니며, 특정 활동 또는 디바이스의 일부가 필요하지 않을 수 있고, 설명된 것들에 추가하여, 하나 이상의 추가 활동이 수행될 수 있고 요소들이 포함될 수 있다는 것에 유의한다. 더 나아가, 활동이 나열되는 순서는 반드시 이들이 수행되는 순서는 아니다. 또한, 특정 실시형태를 참조하여 개념이 설명되었다. 그러나, 당 업자는 아래 청구범위에서 제시되는 본 발명의 범위로부터 벗어나지 않으면서 다양한 변형 및 변화가 이루어질 수 있음을 이해할 수 있을 것이다. 따라서, 상세한 설명 및 도면은 제한적인 의미라기보다는 예시적인 것으로 간주되어야하며, 그러한 모든 수정은 본 발명의 범위 내에 포함되는 것으로 의도된다.
이점, 기타 장점, 문제점에 대한 해결책이, 특정 실시예와 관련하여 앞서 설명되었다. 그러나 임의의 장점, 이점 또는 해결책을 더 명확하게 하거나 만들 수 있는 문제점 및 임의의 특징(들)에 대한 장점, 이점, 해결책은 임의의 또는 모든 청구항들의 중요하고 필수적이며 본질적인 특징으로 해석되어서는 안된다. 더욱이, 앞서 개시된 특정 실시예들은 예시적인 것에 불과하며, 개시되는 주제는 여기서의 설명의 이점을 가진, 당 업자에게 명백한, 다르지만 동등한 방식으로 변형 및 실시될 수 있다. 아래 청구범위에서 설명되는 것과는 다른, 여기서 도시되는 구조 또는 설계의 세부사항에 어떤 제한사항도 의도하지 않는다. 따라서, 앞서 개시된 특정 실시예는 변경 또는 변형될 수 있고, 이러한 모든 변형들이 개시되는 주제의 범위 내에 있다고 간주된다. 따라서, 본 출원에서 추구하는 보호는 아래의 청구범위에 기재된 바와 같다.

Claims (25)

  1. 방법으로서,
    프로세서의 분산 스케줄러(distributed scheduler)의 제1 큐에서 명령 연산을 버퍼링하는 단계;
    상기 분산 스케줄러에서 불균형의 적어도 하나의 지표가 검출되는지 여부에 기초하여 상기 분산 스케줄러의 복수의 할당 모드들 중 할당 모드를 선택하는 단계;
    상기 선택된 할당 모드에 따라 상기 제1 큐로부터의 명령 연산을 복수의 제2 큐들 사이에 할당하는 단계; 및
    각각의 제2 큐에서, 상기 제2 큐와 연관된 실행 파이프에 의한 실행을 위해 상기 제2 큐에 버퍼링된 명령 연산을 선택하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 복수의 할당 모드들은:
    명령 연산이 상기 복수의 제2 큐들 사이에서 실질적으로 동일하게 할당되는 큐 우선 할당 모드(queue-first allocation mode); 및
    상기 제2 큐와 연관된 상기 실행 파이프의 파이프 점유에 기초하여 명령 연산이 상기 복수의 제2 큐들 사이에서 할당되는 파이프 우선 할당 모드(pipe-first allocation mode)를 포함하는, 방법.
  3. 제2항에 있어서, 상기 불균형의 적어도 하나의 지표는:
    상기 제2 큐들 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표; 및
    임의의 2개의 제2 큐들의 현재 점유들 사이의 차이가 제2 임계값을 초과함을 나타내는 제2 지표 중 적어도 하나를 포함하는, 방법.
  4. 제3항에 있어서, 상기 복수의 할당 모드들 중 할당 모드를 선택하는 단계는:
    상기 제1 지표 및 상기 제2 지표 둘 다 검출되지 않은 것에 응답하여 상기 큐 우선 할당 모드를 선택하는 단계; 및
    상기 제1 지표 및 상기 제2 지표 중 적어도 하나가 검출되는 것에 응답하여 상기 파이프 우선 할당 모드를 선택하는 단계를 포함하는, 방법.
  5. 제3항에 있어서, 상기 복수의 할당 모드들 중 할당 모드를 선택하는 단계는:
    상기 제1 지표 및 상기 제2 지표 중 하나 이하가 검출되는 것에 응답하여 상기 큐 우선 할당 모드를 선택하는 단계; 및
    상기 제1 지표 및 상기 제2 지표 둘 다 검출되는 것에 응답하여 상기 파이프 우선 할당 모드를 선택하는 단계를 포함하는, 방법.
  6. 제2항에 있어서, 상기 복수의 할당 모드들은:
    명령 연산 세트의 각 명령 연산의 복사본이 상기 복수의 제2 큐들의 각각의 제2 큐에 할당되고, 상기 세트의 각 명령 연산의 상기 복사본이 상기 명령 연산을 실행할 수 있는 상기 실행 파이프의 파이프 점유 분석에 기초하여 하나의 제2 큐를 제외한 모든 큐에서 후속으로 무효화되는 추론적 할당 모드(speculative allocation mode)를 더 포함하는, 방법.
  7. 제6항에 있어서, 상기 복수의 할당 모드들 중 할당 모드를 선택하는 단계는:
    대응하는 실행 파이프에 의한 실행을 위해 명령 연산이 상기 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어지는 것에 응답하여 상기 추론적 할당 모드를 선택하는 단계를 포함하는, 방법.
  8. 제6항에 있어서,
    상기 불균형의 적어도 하나의 지표는:
    상기 제2 큐들 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표;
    임의의 2개의 제2 큐들의 현재 점유들 사이의 차이가 제2 임계값을 초과함을 나타내는 제2 지표; 및
    대응하는 실행 파이프로의 할당을 위해 명령 연산이 상기 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어지는 것을 나타내는 제3 지표 중 적어도 하나를 포함하고; 그리고
    상기 복수의 할당 모드들 중 할당 모드를 선택하는 단계는:
    상기 제1 지표 및 상기 제2 지표 중 하나 이하가 존재하는 것에 응답하여 상기 큐 우선 할당 모드를 선택하는 단계;
    상기 제1 지표 및 상기 제2 지표 둘 다 존재하는 것에 응답하여 상기 파이프 우선 할당 모드를 선택하는 단계; 및
    상기 제3 지표가 존재하는 것에 응답하여 상기 추론적 할당 모드를 선택하는 단계를 포함하는, 방법.
  9. 제6항에 있어서,
    상기 추론적 할당 모드 동안, 상기 세트의 각 명령 연산은 사전-배정된 실행 파이프를 갖고, 상기 사전-배정된 실행 파이프와 연관된 상기 제2 큐는 상기 사전-배정된 실행 파이프의 파이프 점유와 다른 제2 큐와 연관된 동일한 타입의 다른 실행 파이프의 파이프 점유 사이의 차이가 임계값을 초과하지 않는 한 상기 명령 연산의 유효 복사본을 유지하는, 방법.
  10. 제1항 내지 제9항 중 어느 한 항에 있어서, 상기 복수의 할당 모드들은:
    복수의 세트들의 명령 연산의 각각의 세트에 대해, 인터리빙 패턴을 사용하여 상기 세트의 명령 연산이 복수의 제2 큐들 사이에 할당되는 큐 우선 할당 모드를 포함하고; 그리고
    주어진 세트에 대해 상기 인터리빙 패턴으로 초기 명령 연산을 수신하기 위한 상기 제2 큐는, 고정 선택 시퀀스로 또는 의사 랜덤으로 중 하나에 따라 선택되는, 방법.
  11. 프로세서로서,
    복수의 실행 파이프들; 및
    상기 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는:
    상기 프로세서의 명령 파이프라인의 프론트 엔드로부터 명령 연산을 버퍼링하도록 구성된 제1 큐;
    복수의 제2 큐들 - 각각의 제2 큐는 상기 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 상기 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및
    큐 컨트롤러를 포함하고, 상기 큐 컨트롤러는:
    상기 분산 스케줄러에서 불균형의 적어도 하나의 지표가 검출되는지 여부에 기초하여 복수의 할당 모드들 중 할당 모드를 선택하고; 그리고
    상기 선택된 할당 모드에 따라 상기 제1 큐로부터의 명령 연산을 상기 복수의 제2 큐들 사이에 할당하기 위해 상기 분산 스케줄러를 제어하도록 구성되는, 프로세서.
  12. 제11항에 있어서, 상기 복수의 할당 모드들은:
    명령 연산이 상기 복수의 제2 큐들 사이에서 실질적으로 동일하게 할당되는 큐 우선 할당 모드; 및
    상기 제2 큐와 연관된 상기 실행 파이프의 파이프 점유에 기초하여 명령 연산이 상기 복수의 제2 큐들 사이에서 할당되는 파이프 우선 할당 모드를 포함하는, 프로세서.
  13. 제12항에 있어서, 상기 불균형의 적어도 하나의 지표는:
    상기 제2 큐들 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표; 및
    임의의 2개의 제2 큐들의 현재 점유들 사이의 차이가 제2 임계값을 초과함을 나타내는 제2 지표 중 적어도 하나를 포함하는, 프로세서.
  14. 제13항에 있어서,상기 큐 컨트롤러는 상기 복수의 할당 모드들 중 할당 모드를:
    상기 제1 지표 및 상기 제2 지표 둘 다 검출되지 않은 것에 응답하여 상기 큐 우선 할당 모드를 선택함으로써; 그리고
    상기 제1 지표 및 상기 제2 지표 중 적어도 하나가 검출되는 것에 응답하여 상기 파이프 우선 할당 모드를 선택함으로써 선택하도록 구성되는, 프로세서.
  15. 제13항에 있어서,상기 큐 컨트롤러는 상기 복수의 할당 모드들 중 할당 모드를:
    상기 제1 지표 및 상기 제2 지표 중 하나 이하가 검출되는 것에 응답하여 상기 큐 우선 할당 모드를 선택함으로써; 그리고
    상기 제1 지표 및 상기 제2 지표 둘 다 검출되는 것에 응답하여 상기 파이프 우선 할당 모드를 선택함으로써 선택하도록 구성되는, 프로세서.
  16. 제12항 내지 제15항 중 어느 한 항에 있어서, 상기 복수의 할당 모드들은:
    명령 연산 세트의 각 명령 연산의 복사본이 상기 복수의 제2 큐들의 각각의 제2 큐에 할당되고, 상기 세트의 각 명령 연산의 상기 복사본이 상기 명령 연산을 실행할 수 있는 상기 실행 파이프의 파이프 점유 분석에 기초하여 하나의 제2 큐를 제외한 모든 큐에서 후속으로 무효화되는 추론적 할당 모드를 더 포함하는, 프로세서.
  17. 제16항에 있어서,상기 큐 컨트롤러는 상기 복수의 할당 모드들 중 할당 모드를:
    대응하는 실행 파이프에 의한 실행을 위해 명령 연산이 상기 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어지는 것에 응답하여 상기 추론적 할당 모드를 선택함으로써 선택하도록 구성되는, 프로세서.
  18. 제16항에 있어서,
    상기 불균형의 적어도 하나의 지표는:
    상기 제2 큐들 중 적어도 하나가 제1 임계값을 초과하는 현재 점유를 갖는다는 것을 나타내는 제1 지표;
    임의의 2개의 제2 큐들의 현재 점유들 사이의 차이가 제2 임계값을 초과함을 나타내는 제2 지표; 및
    대응하는 실행 파이프로의 할당을 위해 명령 연산이 상기 제2 큐로부터 선택되는 현재 선택 레이트가 임계값 아래로 떨어지는 것을 나타내는 제3 지표 중 적어도 하나를 포함하고; 그리고
    상기 큐 컨트롤러는, 상기 복수의 할당 모드들 중 할당 모드를:
    상기 제1 지표 및 상기 제2 지표 중 하나 이하가 존재하는 것에 응답하여 상기 큐 우선 할당 모드를 선택함으로써;
    상기 제1 지표 및 상기 제2 지표 둘 다 존재하는 것에 응답하여 상기 파이프 우선 할당 모드를 선택함으로써; 그리고
    상기 제3 지표가 존재하는 것에 응답하여 상기 추론적 할당 모드를 선택함으로써 선택하도록 구성되는, 프로세서.
  19. 제16항에 있어서,
    상기 추론적 할당 모드 동안, 상기 세트의 각 명령 연산은 사전-배정된 실행 파이프를 갖고, 상기 사전-배정된 실행 파이프와 연관된 상기 제2 큐는 상기 사전-배정된 실행 파이프의 파이프 점유와 다른 제2 큐와 연관된 동일한 타입의 다른 실행 파이프의 파이프 점유 사이의 차이가 임계값을 초과하지 않는 한 상기 명령 연산의 유효 복사본을 유지하는 것인, 프로세서.
  20. 제11항에 있어서, 상기 복수의 할당 모드들은:
    복수의 세트들의 명령 연산의 각각의 세트에 대해, 인터리빙 패턴을 사용하여 상기 세트의 명령 연산이 복수의 제2 큐들 사이에 할당되는 큐 우선 할당 모드; 및
    상기 큐 컨트롤러는, 주어진 세트에 대해 상기 인터리빙 패턴으로 초기 명령 연산을 수신하기 위한 상기 제2 큐를, 고정 선택 시퀀스로 또는 의사 랜덤으로 중 하나에 따라 선택하는 것인, 프로세서.
  21. 프로세서로서,
    복수의 실행 파이프들; 및
    상기 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는:
    상기 프로세서의 명령 파이프라인의 프론트 엔드로부터 명령 연산을 버퍼링하도록 구성된 제1 큐;
    복수의 제2 큐들 - 각각의 제2 큐는 상기 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 상기 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및
    큐 컨트롤러를 포함하고, 상기 큐 컨트롤러는:
    상기 제1 큐에 있는 명령 연산의 서브세트의 각 명령 연산에 대해:
    상기 제1 큐로부터 각각의 제 2 큐로 상기 명령 연산의 복사본을 추론적으로 할당하고; 그리고
    상기 명령 연산을 실행할 수 있는 실행 파이프의 현재 파이프 점유에 기초하여 하나의 제2 큐를 제외한 모든 큐에서 상기 명령 연산의 상기 복사본을 무효화하도록 구성되는, 프로세서.
  22. 제21항에 있어서,
    상기 명령 연산은 상기 복수의 실행 파이프들 중 특정된 실행 파이프에 새전-배정되고; 그리고
    상기 큐 컨트롤러는:
    상기 특정된 실행 파이프의 상기 현재 파이프 점유가 상기 명령 연산을 실행할 수 있는 다른 실행 파이프의 현재 파이프 점유의 임계값 내에 있음에 응답하여 상기 특정된 실행 파이프와 연관된 상기 제2 큐의 상기 명령 연산의 상기 복사본을 상기 명령 연산의 유효 복사본으로서 유지하고; 그리고
    상기 특정된 실행 파이프의 상기 현재 파이프 점유가 다른 제2 큐와 연관된 상기 실행 파이프의 상기 현재 파이프 점유를 적어도 상기 임계값 만큼 초과하는 것에 응답하여, 상기 특정된 실행 파이프와 연관된 상기 제2 큐의 상기 명령 연산의 상기 복사본을 무효화하고 상기 다른 제2 큐의 상기 명령 연산의 상기 복사본을 유지하도록 더 구성되는, 프로세서.
  23. 프로세서로서,
    복수의 실행 파이프들; 및
    상기 복수의 실행 파이프들에 커플링된 분산 스케줄러를 포함하고, 상기 분산 스케줄러는:
    상기 프로세서의 명령 파이프라인의 프론트 엔드로부터 명령 연산을 버퍼링하도록 구성된 제1 큐;
    복수의 제2 큐들 - 각각의 제2 큐는 상기 복수의 실행 파이프들의 실행 파이프의 대응하는 개별 서브세트에 대해 상기 제1 큐로부터 할당된 명령 연산을 버퍼링하도록 구성됨 -; 및
    큐 컨트롤러를 포함하고, 상기 큐 컨트롤러는:
    인터리빙 패턴으로 상기 복수의 제2 큐들 사이에 상기 제1 큐로부터의 명령 연산 세트를 할당하고; 그리고
    각 세트에 대해, 사전정의된 시퀀스로 또는 의사 랜덤으로 둘 중 하나에 기초하여 인터리빙 패턴으로 상기 세트의 초기 명령 연산이 할당될 제2 큐를 선택하도록 구성되는, 프로세서.
  24. 제23항에 있어서, 상기 큐 컨트롤러는, 사전정의된 시퀀스에 기초하여 인터리빙 패턴으로 상기 세트의 상기 초기 명령 연산이 할당될 제2 큐를 선택하도록 추가로 구성되고, 상기 사전정의된 시퀀스는 교번 시퀀스(alternating sequence)인, 프로세서.
  25. 제23항에 있어서,
    의사 난수 생성기(pseudo-random number generator)를 더 포함하고; 그리고
    상기 큐 컨트롤러는, 상기 의사 난수 생성기의 출력에 기초하여 의사 랜덤으로 인터리빙 패턴으로 상기 세트의 상기 초기 명령 연산이 할당될 제2 큐를 선택하도록 더 구성되는, 프로세서.
KR1020227011454A 2019-09-11 2020-09-09 실행 파이프 균형을 제공하는 분산 스케줄러 KR20220057610A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/568,038 2019-09-11
US16/568,038 US20210073056A1 (en) 2019-09-11 2019-09-11 Distributed scheduler providing execution pipe balance
PCT/US2020/049918 WO2021050530A1 (en) 2019-09-11 2020-09-09 Distributed scheduler providing execution pipe balance

Publications (1)

Publication Number Publication Date
KR20220057610A true KR20220057610A (ko) 2022-05-09

Family

ID=74849542

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227011454A KR20220057610A (ko) 2019-09-11 2020-09-09 실행 파이프 균형을 제공하는 분산 스케줄러

Country Status (6)

Country Link
US (1) US20210073056A1 (ko)
EP (1) EP4028882A4 (ko)
JP (1) JP2022547863A (ko)
KR (1) KR20220057610A (ko)
CN (1) CN114450667A (ko)
WO (1) WO2021050530A1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230058700A1 (en) * 2021-08-17 2023-02-23 Bank Of America Corporation System and method for dynamically mapping and routing workload requirements to appropriate computing components

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6378063B2 (en) * 1998-12-23 2002-04-23 Intel Corporation Method and apparatus for efficiently routing dependent instructions to clustered execution units
US6877086B1 (en) * 2000-11-02 2005-04-05 Intel Corporation Method and apparatus for rescheduling multiple micro-operations in a processor using a replay queue and a counter
US6826704B1 (en) * 2001-03-08 2004-11-30 Advanced Micro Devices, Inc. Microprocessor employing a performance throttling mechanism for power management
JP2006259812A (ja) * 2005-03-15 2006-09-28 Hitachi Ltd 動的キュー負荷分散方法、システム及びプログラム
US8046775B2 (en) * 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
US8347302B1 (en) * 2008-10-09 2013-01-01 Amazon Technologies, Inc. System-aware resource scheduling
US9069610B2 (en) * 2010-10-13 2015-06-30 Microsoft Technology Licensing, Llc Compute cluster with balanced resources
US20120110594A1 (en) * 2010-10-28 2012-05-03 Advanced Micro Devices, Inc. Load balancing when assigning operations in a processor
US20130332778A1 (en) * 2012-06-07 2013-12-12 Vmware, Inc. Performance-imbalance-monitoring processor features
KR20170102576A (ko) * 2012-06-15 2017-09-11 인텔 코포레이션 분산된 구조를 갖는 동적 디스패치 윈도우를 가지는 가상 load store 큐
KR101708591B1 (ko) * 2013-03-15 2017-02-20 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
US10241798B2 (en) * 2013-09-20 2019-03-26 Nvidia Corporation Technique for reducing voltage droop by throttling instruction issue rate
US10049332B2 (en) * 2015-03-11 2018-08-14 Accenture Global Services Limited Queuing tasks in a computer system based on evaluating queue information and capability information of resources against a set of rules
US20170286114A1 (en) * 2016-04-02 2017-10-05 Intel Corporation Processors, methods, and systems to allocate load and store buffers based on instruction type
US11281466B2 (en) * 2019-10-22 2022-03-22 Advanced Micro Devices, Inc. Register renaming after a non-pickable scheduler queue
CN113254192B (zh) * 2020-02-12 2024-04-16 北京沃东天骏信息技术有限公司 资源分配方法、资源分配装置、电子设备及存储介质

Also Published As

Publication number Publication date
EP4028882A4 (en) 2023-09-13
EP4028882A1 (en) 2022-07-20
CN114450667A (zh) 2022-05-06
US20210073056A1 (en) 2021-03-11
JP2022547863A (ja) 2022-11-16
WO2021050530A1 (en) 2021-03-18

Similar Documents

Publication Publication Date Title
KR101020430B1 (ko) 동적 범위 조정 부동 소수점 실행 유닛
JP5853301B2 (ja) プロセッサインストラクションの発行の絞り込み
US10303479B2 (en) Efficient random number generation for update events in multi-bank conditional branch predictor
JP4610593B2 (ja) デュアルスレッドプロセッサ
JP5413001B2 (ja) キャッシュメモリ
US20110055838A1 (en) Optimized thread scheduling via hardware performance monitoring
JP5473530B2 (ja) 実行中の命令に基づいてコア機能を構成するマルチコア・プロセッサおよび使用の方法
US20090138683A1 (en) Dynamic instruction execution using distributed transaction priority registers
JP5413853B2 (ja) マルチスレッド型プロセッサのためのスレッドデエンファシス方法及びデバイス
CN106155636B (zh) 用于寄存器重命名的可用寄存器控制
JP6166616B2 (ja) 情報処理方法、情報処理装置及びプログラム
CN103942033A (zh) 基于推测度量将资源分配给线程
JP2005202964A (ja) 割り込みをタイプ別に計数する方法、システムおよびプログラム
JP2010500653A (ja) 選択的分岐先バッファ(btb)割当
US10963380B2 (en) Cache miss thread balancing
KR20220057610A (ko) 실행 파이프 균형을 제공하는 분산 스케줄러
KR20220062559A (ko) 업스트림 리소스를 관리하는 동안의 스로틀링
KR19980079722A (ko) 데이타 처리 시스템 및 무질서 명령을 완성하기 위한 방법
US20130332703A1 (en) Shared Register Pool For A Multithreaded Microprocessor
KR20220083812A (ko) 선택 불가능한 스케줄러 큐 이후의 레지스터 재명명
US9170819B2 (en) Forwarding condition information from first processing circuitry to second processing circuitry
EP4155915B1 (en) Scalable toggle point control circuitry for a clustered decode pipeline
JP5245617B2 (ja) レジスタ制御回路およびレジスタ制御方法
JP2011233085A (ja) プロセッサ、電子制御ユニット、負荷分散方法
JP2017111662A (ja) 電子制御装置

Legal Events

Date Code Title Description
A201 Request for examination