KR101730282B1 - 지연된 재구성된 프로그램 순서를 이용한 선택 로직 - Google Patents

지연된 재구성된 프로그램 순서를 이용한 선택 로직 Download PDF

Info

Publication number
KR101730282B1
KR101730282B1 KR1020157011867A KR20157011867A KR101730282B1 KR 101730282 B1 KR101730282 B1 KR 101730282B1 KR 1020157011867 A KR1020157011867 A KR 1020157011867A KR 20157011867 A KR20157011867 A KR 20157011867A KR 101730282 B1 KR101730282 B1 KR 101730282B1
Authority
KR
South Korea
Prior art keywords
instructions
rpo
value
values
instruction
Prior art date
Application number
KR1020157011867A
Other languages
English (en)
Other versions
KR20150065865A (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 KR20150065865A publication Critical patent/KR20150065865A/ko
Application granted granted Critical
Publication of KR101730282B1 publication Critical patent/KR101730282B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • G06F9/3855
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags

Landscapes

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

Abstract

처리 장치는 실행을 위한 복수의 명령어들을 스케쥴링하는 선택 로직을 포함한다. 선택 로직은 실행을 위해 스케쥴링될 준비가 되어 있는 복수의 명령어들 각각에 대한 재구성된 프로그램 순서(RPO; reconstructed program order) 값을 계산한다. 선택 로직은, 지연된 RPO 값들 ―지연된 RPO 값들은 이전 실행 사이클로부터의 계산된 RPO 값들을 포함함― 에 기초하여 명령어들의 정렬된 목록을 생성하고, 정렬된 목록에 기초하여 스케쥴링을 위한 명령어들을 디스패치한다.

Description

지연된 재구성된 프로그램 순서를 이용한 선택 로직{SELECT LOGIC USING DELAYED RECONSTRUCTED PROGRAM ORDER}
본 개시는 처리 장치 분야에 관한 것으로, 특히, 재구성된 프로그램 순서를 이용한 멀티-스트랜드 비순차 프로세서(multi-strand out-of-order processor)의 명령어 스케쥴러를 위한 선택 로직(select logic)에 관한 것이다.
순차 인출(in-order fetch)과 비순차 실행(out-of-order execution)을 수반한, 현대의 범용 수퍼스칼라 프로세서(superscalar processor)들의 성능은, 프로그램 알고리즘의 고유한 병렬성을 특성짓는 명령어 레벨 병렬성(ILP; instruction level parallelism)의 이용에 의해 제한된다. ILP의 더 양호한 이용에 대한 장애물들 중 하나는, 대부분의 프로그램 코드의 순차적 성질, 및 대응하는 명령어 인출의 순차적 성질이다. ILP를 이용하기 위해 비순차 디스패치(out-of-order dispatch)와 실행 능력에 의존하는 것 외에도, 어떤 프로세서들은, 파이프라이닝이 프로세서들로 하여금 ILP를 이용하는 것을 허용하기 때문에, 더 깊은 파이프라인들에도 의존한다.
이러한 프로세서들에서, (사이클당 명령어(IPC; instructions per cycle)의 관점에서) 원하는 성능 목표를 달성하기 위하여, 임계 루프(critical loop)들이라고 부를 수 있는 로직의 일부분들은 단일 실행 사이클에서 평가하거나, 그렇지 않다면 이들은 전술된 더 깊은 파이프라이닝에 대한 장애물이 될 수 있다. 하나의 이러한 임계 루프는, 웨이크업 로직(wakeup logic) 및 선택 로직으로 구성될 수 있는, 명령어 스케쥴링 로직을 포함한다.
데이터 의존성을 추적하고 명령어에 의해 요구되는 소스 오퍼랜드가 이용가능한지를 검사하는 것을 포함하는 웨이크업 로직은 언제 명령어들이 실행을 위해 전송할 준비가 되어 있는지를 결정한다. 선택 로직은, 일부 정책에 기초하여, 이들 준비완료된 명령어들 중 어느 것이 실행을 위해 전송되어야 하는지를 결정한다. 선택 로직은 가용 실행 자원의 수보다 많은 준비완료된 명령어들이 있을 때에만 적용가능할 수 있다. 명령어는, 그 명령어가 의존하는 모든 명령어들이 선택되어 실행을 위해 전송될 때까지 웨이크업 로직에 의한 "준비된 것으로서 자격을 갖춘(qualified as ready)" 것이 될 수 없기 때문에, 웨이크업 로직과 선택 로직은 성능에 대한 임계 루프를 형성한다. 또한, 선택 로직은, 임계 경로(critical-path) 상에서 명령어들을 전방으로 이동시킬 수(즉, 의존 명령어들을 웨이크업할 수) 있도록, 실행 유닛에 스케쥴링할 올바른 명령어를 선택할 필요가 있다. 따라서, 비순차 명령어 실행을 수반한 모든 프로세서에 대해, 단일 실행 자원을 점유할 준비가 되어 있는 복수의 명령어들이 존재할 경우 어느 명령어를 먼저 선택할지를 결정하고 단일-사이클 스케쥴링 루프의 타이밍 버짓(timing budget) 내에 들어맞는 선택 로직이 원하는 성능을 달성하기 위해 중요하다.
1-사이클 스케쥴 루프의 임계성(criticality)과 올바른 선택 로직의 중요성(importance)도 역시, 비순차 인출 기술을 구현하는(즉, 컴파일러에 의해 생성된 멀티-스트랜드(multi-strand) 프로그램 표현의 상이한 스트랜드들로부터 명령어를 비순차적으로 인출할 수 있는) 멀티-스트랜드 비순차 프로세서를 위해 적절하다. 따라서, 이미 정렬된 시퀀스의 명령어들을 인출하고 이들을 대기 버퍼에 순차적으로 할당하는 일부 종래의 프로세서들과는 달리, 멀티-스트랜드 비순차 프로세서는, 역시 대기 버퍼 내의 할당된 다른 스트랜드들로부터의 명령어들에 관하여, 한 스트랜드 내의 명령어들의 프로그램 순서를 알지 못한다.
예를 들어, 연령-기반의 정책들(age-based policies), 위치-기반의 정책들(location-based policies), 라운드 로빈 정책들(round robin policies), 컴파일러-보조형 우선순위 정책들(compiler-aided priority policies), 분할된 스케쥴링 윈도우 접근법들(split scheduling window approaches), 및 선택없는 스케쥴링(select free scheduling) 등의, 종래의 비순차 프로세서 내의 선택 로직에 의해 현재 이용되는 많은 스케쥴링 정책이 있다. 그러나, 이들 종래의 정책은 멀티-스트랜드 비순차 프로세서에서 이용될 때 상당한 제한을 가진다. 예를 들어, 명령어들이 할당된 때에 기초하여 실행을 위해 명령어들을 스케쥴링하는 연령-기반의 정책은, 명령어들이 비순차로 할당되기 때문에, 적용가능하지 않다. 대기 버퍼에서의 명령어들의 위치에 기초하여 명령어들을 우선순위화하는 위치-기반의 정책들 및 라운드 로빈 정책들은 더 낮은 하드웨어 비용을 갖지만 성능 감소를 겪는다. 1-사이클 웨이크업 루프와 2-사이클 선택 루프 내로 선택 로직을 파이프라이닝함으로써 임계 경로로부터 선택 로직을 제거하는 선택없는 스케쥴링은 클럭 주파수를 증가시키지만, IPC를 손상시키는 댓가를 치른다.
따라서, 멀티-스트랜드 비순차 프로세서 내의 선택 로직의 복잡성을 증가시키지 않고, 결정적 단일-사이클 스케쥴링 루프의 타이밍 요건을 여전히 만족하면서 IPC의 관점에서 더 높은 성능을 달성하기 위해 ILP를 이용할 수 있는 선택 로직 스케쥴링 정책이 요구된다.
본 개시가, 첨부된 도면들의 도식들에서, 제한이 아닌 예로서 예시된다.
도 1은, 실시예에 따른, 지연된 재구성된 프로그램 순서(delayed reconstructed program order)를 이용하여 멀티-스트랜드 비순차 프로세서 내의 명령어 스케쥴링 흐름을 나타내는 블록도이다.
도 2는, 실시예에 따른, 프로그램 명령어들에 프로그램 순서 정보를 첨부하기 위한 흐름을 나타내는 블록도이다.
도 3은, 실시예에 따른, 지연된 재구성된 프로그램 순서를 이용하여 명령어들을 스케쥴링하기 위한 방법을 나타내는 흐름도이다.
도 4는, 실시예에 따른, 프로그램 순서를 재구성하기 위한 방법을 나타내는 흐름도이다.
도 5는, 실시예에 따른, 프로그램 순서를 재구성하기 위한 하드웨어 구조를 나타내는 블록도이다.
도 6은, 실시예에 따른, 재구성된 프로그램 순서에 기초하여 명령어들을 정렬하기 위한 방법을 나타내는 흐름도이다.
도 7은, 실시예에 따른, 재구성된 프로그램 순서에 기초하여 명령어들을 정렬하기 위한 시스템을 나타내는 블록도이다.
도 8은, 실시예에 따른, 컴퓨터 시스템을 나타내는 블록도이다.
이하의 설명은, 본 발명의 수 개의 실시예의 양호한 이해를 제공하기 위하여, 특정한 시스템, 컴포넌트, 방법 등의 예와 같은 수 많은 특정한 세부사항을 개시한다. 그러나, 본 발명의 적어도 일부의 실시예들은 이들 특정한 세부사항 없이도 실시될 수 있다는 것은 통상의 기술자에게 명백할 것이다. 다른 예에서, 공지된 컴포넌트들 또는 방법들은 상세히 설명되지 않거나 본 발명을 불필요하게 흐리게 하지 않기 위하여 간단한 블록도 형태로 제시된다. 따라서, 특정한 세부사항은 단지 예시일 뿐이다. 특정한 구현은 이들 예시적 세부사항으로부터 달라질 수도 있고 여전히 본 발명의 범위 내에 있는 것으로 고려될 수 있다.
지연된 재구성된 프로그램 순서를 이용하여 멀티-스트랜드 비순차 프로세서에서 명령어들을 스케쥴링하기 위한 방법 및 시스템이 여기서 설명된다. 한 실시예에서, 멀티-스트랜드 비순차 프로세서에서 스트랜드들의 지연된 재구성된 프로그램 순서(RPO; reconstructed program order)를 이용하여, 디스패치 준비완료된 명령어들의 정렬된 목록(ordered list of ready to dispatch instruction)이 실행을 위해 생성된다. 이 목록은 명령어들이 매 사이클에서 실행을 위해 디스패치될 순서를 지배할 수 있다. 한 실시예에서, 주어진 사이클에서의 실행을 위해 디스패치되는 명령어들이 이전의 수개 사이클로부터의 정렬된 목록에 기초하여 선택되도록 소정 개수의 실행 사이클(예를 들어, 2 또는 3 사이클)의 지연이 도입될 수 있다. 이것은, 성능 손실 없이, 임계 경로로부터 선택 로직의 부분(즉, 정렬된 목록의 생성)을 제거한다. 이 접근법은 복잡성에 있어서 일반적인 선택 로직 정책(예를 들어, 연령-기반의 정책)과 유사하지만, 비순차 인출 프로세서에서 더 나은 성능(즉, 더 높은, 사이클당 실행되는 명령어들(IPC))으로 이어진다.
한 실시예에서, 지연된 재구성된 프로그램 순서를 이용한 멀티-스트랜드 비순차 프로세서에서의 명령어들의 스케쥴링은 프로그램 알고리즘의 고유한 병렬성을 특성짓는 명령어 레벨 병렬성(ILP)을 다른 선택 로직 정책들보다 더 양호하게 이용한다. 한 실시예에서, 이 정책은 또한, 지연된 재구성된 프로그램 순서값을 이용함으로써, (루프를 최적화하지만 IP 성능 저하를 수반하는 일부 비순차 머신에서 구현되는 선택없는 스케쥴링에 비해) IPC 성능을 손상시키지 않고 루프의 임계 경로로부터 정렬된 목록을 생성하기 위한 선택 로직 부분을 제거하여 스케쥴링(즉, 웨이크업 및 선택) 루프를 최적화한다. 한 실시예에서, 이 정책은 또한, (우선순위 정보를 제공하기 위해 컴파일러 지원을 이용하는, "브랜치 경로", "체인 길이", 및 "최대 의존성(maximum dependent)"과 같은 정책들에 비해) 스트랜드들에 대한 특별한 추가적 우선순위들을 명시적으로 및 정적으로 명시할 필요성을 컴파일러에게 경감시켜준다. 또한, 지연된 RPO 정책은 동적 상황에 맞게 명령어 스케쥴링을 적합화하고, 우선순위를 설정하기 위해 전적으로 컴파일러에게 의존하는, "체인-길이", "최대 의존성", 및 "브랜치 경로"와 같은 정적 스케쥴 정책보다 훨씬 양호하게, 캐쉬 미스(cache miss) 및 지연 변동 등의 비결정론적 레이턴시의 처리를 허용한다. 또한, 모든 현재 실행된 스트랜드들 중에서 가장 오래되거나 최소의 프로그램 순서 값을 유지하고 퇴거(retirement)된 명령어들을 정렬하는데 이용되는 실행된 명령어 포인터(EIP; executed instruction pointer)를 계산하기 위해, 지연된 RPO 정책의 부분(즉, 정렬된 목록의 생성)이 이 목적을 위해 재사용될 수 있기 때문에, 별도의 하드웨어 로직에 대한 필요성이 없다.
프로그램 코드의 비순차 인출 능력 및 스트랜드-기반의 표현으로 인해, 한 실시예에서, 프로세서는 매우 큰 명령어 윈도우를 달성할 수 있다. ILP를 충분히 이용하고 높은 지속적 실행 폭(high sustained execution width)을 유지할 수 있기 위해, 스케쥴러 내의 이용가능한 디스패치 준비완료된 스트랜드들로부터 디스패치하기 위한 임계 경로 상에 있을 수 있는, 올바른 스트랜드들(및 그에 따라 명령어들)을 선택할 수 있는 것이 필수적이다.
한 실시예에서 제시되는 스트랜드 선택 알고리즘은 매 사이클마다 디스패치할 올바른 스트랜드를 식별할 책임을 지고, 이것은 결국 의존 명령어들의 웨이크업을 가능케하고 그에 따라 머신의 높은 지속적 실행 폭을 달성할 수 있다. 이 알고리즘은 각 스트랜드의 지연된 RPO에 기초하여 디스패치 준비완료된 명령어들의 정렬된 목록을 생성하고, 이 정렬된 목록은 매 사이클마다 실행을 위해 명령어들이 디스패치되는 순서를 지배한다.
멀티-스트랜드 비순차 프로세서는 비순차 명령어 인출 기술을 구현하기 때문에, 프로세서는 보통, 프로그램 알고리즘 내의 다른 명령어들에 관한 한 명령어의 프로그램 순서에 대한 정보를 갖지 않는다. 한 실시예에서, 명시적 프로그램 순서 정보가 컴파일시에 오브젝트 코드(object code) 내의 명령어에 첨부된다. 이것은, 메모리 명령어(예를 들어, 로드 또는 스토어) 또는 인터럽트를 야기할 수 있는 명령어 등의, 시스템의 상태를 변경할 명령어들에 대해서만 해당될 수 있다. 한 실시예에서, 명령어 크기에서 공간을 절감하기 위해, 실제 프로그램 순서에 대한 증분만이 명령어 내에 인코딩된다. 이것은 증분 프로그램 순서(IPO; incremental program order)라 부를 수 있다. 컴파일러는, 프로그램 순서 값들이 강하게 순서대로 스트랜드 내의 명령어들에 할당되고, 그에 따라 스트랜드 내의 프로그램 순서 값들의 진행 시퀀스를 형성하는 것을 보장한다.
그러면 명령어들은 비순차적으로 할당되므로, 한 실시예에서, 프로세서의 선택 로직은 스트랜드의 실제 프로그램 순서를 재구성하되, 명령어 내에 인코딩된 IPO를 동일한 스트랜드 내의 이전에 디스패치된 명령어의 프로그램 순서(또는 RPO)에 가산함으로써 재구성한다. 명령어 스케쥴링 유닛(ISU; instruction scheduling unit) 내의 대기 버퍼의 엔트리들 각각은 스케쥴링을 위해 고려중인 스트랜드의 RPO 뿐만 아니라, 스트랜드 내의 다음 명령어에 대한 RPO의 계산을 위한 IPO들을 유지한다. 한 실시예에서, 대기 버퍼는 스트랜드 스케쥴링 플롭(SSF; strand scheduling flop)으로서 제공될 수 있다. SSF는 2레벨 구조를 포함할 수 있고, 여기서 제1 레벨(SSF1)은 웨이크업 로직에 의한 고려를 위한 (새로이 할당된 것을 포함한) 비-준비완료된 명령어들을 보유하고, 제2 레벨(SSF2)은 준비완료된 명령어들을 보유하며 선택 로직에 의한 고려를 위한 이들 명령어들의 RPO를 유지한다. 또 다른 실시예에서, 스트랜드의 RPO와 명령어 내에 인코딩된 IPO는 별개의 버퍼들 내에 유지될 수 있고 별개로 멀티플렉싱될 수 있다. 지연 버퍼는 이전 사이클들에 대한 업데이트된 RPO 값들을 저장할 수 있어서, 지연된 RPO 값들은 정렬된 우선순위 목록을 생성하는데 이용될 수 있다.
도 1은, 실시예에 따른, 지연된 재구성된 프로그램 순서를 이용하여 멀티-스트랜드 비순차 프로세서 내의 명령어 스케쥴링 유닛을 통한 명령어 흐름을 나타내는 블록도이다. 다양한 모듈과 컴포넌트들이 지연된 재구성된 프로그램 순서를 이용한 실행을 위한 명령어들의 스케쥴링에 있어서 그들의 역할에 관하여 기술될 수 있다.
컴파일시 컴파일러에 의해 보조되는, 멀티-스트랜드 비순차 아키텍쳐에서의 명령어들은, 인출되어 스트랜드들로 그룹화될 수 있다. 스트랜드는 대부분 서로 데이터-의존적이고 순차적으로 실행되는 명령어 시퀀스이다. 그러나, 상이한 스트랜드들의 명령어들은 거의 독립적이어서 멀티-스트랜드 비순차 아키텍쳐는 수많은 스트랜드들로부터의 명령어들을 웨이크업 로직을 통해 이들 간의 임의의 데이터 의존성을 해결한 후에 병렬로 실행할 수 있다. 따라서, 원래의 소스 코드에서 제1 스트랜드 명령어들의 위치가 제2 스트랜드 명령어들의 위치보다 선행하더라도, 데이터 의존성이 없다면, 제2 스트랜드의 명령어들이 제1 스트랜드의 명령어들보다 먼저 진행될 수 있다.
도 1에 도시된 프로세서(100)는, 논리적으로, 프론트 엔드 유닛(110), 명령어 스케쥴링 유닛(120), 실행 유닛(130) 및 메모리 서브시스템(도 1에는 미도시)으로 분할된다. 한 실시예에서, 프론트 엔드 유닛(110)은 다수의 명령어 버퍼를 포함하고, 이들 각각은 특정한 스트랜드(112, 114, 116)에 대응한다. 명령어 버퍼는 인출된 명령어를 수신하는데 이용될 수 있다. 명령어 버퍼는 큐(예를 들어, FIFO 큐) 또는 기타 임의의 컨테이너-타입 데이터 구조를 이용하여 구현될 수 있다. 명령어 버퍼에 저장된 명령어들은 실행 또는 프로그램 순서에 기초하여 정렬될 수 있다. 한 실시예에서, 프로세서(100)는, 컴퓨팅 시스템(800)에서 동작하는, 도 8에 관하여 이하에서 설명되는, 처리 장치(802)의 한 예일 수 있다.
각 버퍼 내의 명령어들이 스트랜드들(112, 114, 116) 중 하나와 연관된다면, 각 버퍼에 저장된 명령어들은 상호독립적일 수 있다. 이러한 실시예에서, 명령어들은 스트랜드의 명령어들 간의 데이터 의존성을 침해하지 않는 실행 순서로 버퍼링될 수 있고, 따라서 강하게 순차적으로 실행될 수 있다. 예를 들어, 스트랜드의 제1 명령어의 실행 결과는 스트랜드의 제2 명령어를 평가하기 위해 요구될 수 있다. 따라서, 제1 명령어는 그 스트랜드에 전용인 명령어 버퍼 내의 제2 명령어보다 선행할 것이다. 이러한 실시예에서, 버퍼의 선두에 저장된 명령어는 디스패치 및 실행을 위한 제1 또는 다음 명령어로서 지정될 수 있다.
한 실시예에서, 명령어 스케쥴링 유닛(120)은 스트랜드들(112, 114, 116) 중 하나의 명령어 버퍼로부터 명령어를 그 입력으로서 수신할 수 있다. 명령어 스케쥴링 유닛(120)은 스트랜드 스케쥴링된 플롭(SSF; strand scheduled flop)으로 조직화될 수 있다. 스트랜드 스케쥴링된 플롭들은, 이들이 명령어 스케쥴링 유닛(120)에 할당될 때 각 스트랜드의 선두의 명령어들을 보유하는 2 레벨 하드웨어 구조를 포함할 수 있다. SSF는, 명령어들을 저장하기 위한, 제1 레벨의 하드웨어 엔트리들(즉, SSF1(140))과 제2 레벨의 하드웨어 엔트리들(즉, SSF2(160))을 포함할 수 있다. 앞서 언급된 하드웨어 엔트리들은, 하드웨어 버퍼, 플롭, 또는 명령어 및/또는 데이터를 저장할 수 있는 기타 임의의 하드웨어 자원을 포함할 수 있지만, 이것으로 제한되지 않는다.
또한, 명령어 스케쥴링 유닛(120)은, SSF1(140)에 저장된 명령어들의 오퍼랜드 준비완료(operand readiness)를 검사하기 위한 웨이크업 로직(150)을 포함한다. 데이터 의존성을 추적하고 명령어에 의해 요구되는 소스 오퍼랜드가 이용가능한지를 검사하는 것을 포함하는 웨이크업 로직은 언제 명령어들이 실행을 위해 전송할 준비가 되어 있는지를 결정한다. 웨이크업 로직(150)은 그 입력으로서 제1 레벨 하드웨어 엔트리(예를 들어, 142, 144 또는 146)에 저장된 명령어를 취하여 특정한 명령어에 대한 오퍼랜드들이 준비되어 있는지를 결정한다. 예를 들어, 특정한 명령어가 결과를 결정하기 위해 2개의 오퍼랜드를 함께 가산하도록 설계된다면, 그 오퍼랜드들은 명령어가 실행될 수 있기 이전에 (아마도 다른 명령어에 의해) 계산되어야 한다. 동작은 그 동작이 의존하는 모든 동작들이 실행되었다면 "준비완료"로 간주된다. 명령어가 준비완료되면, 웨이크업 로직(150)은 명령어를 SSF2(160) 내의 대응하는 엔트리(예를 들어, 162, 164, 166)로 옮겨, 그 명령어가 실행을 위해 고려될 수 있게 한다.
한 실시예에서, 명령어 스케쥴링 유닛(120)은 선택 로직(170)을 더 포함할 수 있다. 선택 로직(170)은 그 입력으로서 SSF2(160) 내에 저장된 하나 이상의 명령어를 취하고 이들 저장된 명령어들에 대한 실행 포트들의 가용성을 결정할 수 있다. 예를 들어, 명령어들의 n개의 스트랜드와 x개의 실행 포트가 있다면, 선택 로직(170)은 n개의 저장된 명령어들 중에서 x개까지를 선택하여 x개의 실행 포트(132, 134, 136)에 지정할 수 있다. 일단 실행 포트가 SSF2(160)에 저장된 오퍼랜드-준비완료된 명령어에 대해 이용가능한 것으로 지정되면, 그 명령어는 실행 포트에 디스패치된다. 한 실시예에서, 선택 로직(170)은, 스트랜드들의 지연된 재구성된 프로그램 순서를 이용하여, 실행을 위한 디스패치 준비완료된 명령어들의 정렬된 목록을 생성한다. 이 목록은 명령어들이 매 사이클에서 실행을 위해 디스패치되는 순서를 지배할 수 있다. 한 실시예에서, 선택 로직(170)은, 주어진 사이클에서의 실행을 위해 디스패치되는 명령어들이 수 사이클 이전부터 재구성된 프로그램 순서 값들을 처리함으로써 생성된 정렬된 목록에 기초하여 선택되도록 소정 개수의 실행 사이클(예를 들어, 2 또는 3 사이클)의 지연을 도입할 수 있다. 이것은, 클록 주파수를 감소시키지 않고, 임계 경로로부터 선택 로직의 부분(즉, 정렬된 목록의 생성)을 제거한다. 선택 로직(170)에 관한 추가의 상세사항이 이하에서 제공된다.
한 실시예에서, 실행 유닛(130)은, 명령어 스케쥴링 유닛(120)에 저장된 오퍼랜드-준비완료된 명령어들이 디스패치되는 다수의 실행 포트(132, 134, 136)를 포함한다. 일단 명령어가 실행 포트에 디스패치되면, 명령어는 실행되고 그 결과를 생성한다.
멀티-스트랜드 비순차 아키텍쳐를 포함하는 다양한 실시예에서, 도 1에 도시된 바와 같은 소정의 피쳐들은 스트랜드별 기반으로(on a per strand basis) 전용된다. 이러한 실시예에서, 프론트-엔드 명령어 버퍼, 제1 레벨 하드웨어 엔트리, 오퍼랜드 검사 모듈, 및 제2 레벨 하드웨어 엔트리는 각 스트랜드에 대해 전용될 수 있다. 예를 들어, 제1 스트랜드(112)는 SSF1 내의 전용 엔트리(142) 및 SSF2 내의 전용 엔트리(162)와 연관될 수 있다. 따라서, 이들 피쳐들은 제1 스트랜드의 명령어들에 관해서만 이용될 수 있다. 마찬가지로, 제2 스트랜드(114)는 SSF1 내의 전용 엔트리(144) 및 SSF2 내의 전용 엔트리(164)와 연관되는 등등의 방식일 수 있다.
도 2는, 실시예에 따른, 프로그램 명령어들에 프로그램 순서 정보를 첨부하기 위한 흐름을 나타내는 블록도이다. 한 실시예에서, 프로그램 소스 코드(200)는 다수의 프로그램 명령어(202, 204, 206, 및 208)를 포함한다. 프로그램 명령어들은, 명령어 0(202)이, 명령어 1(204) 이전에 실행되고, 명령어 1(204)이 명령어 2(206) 이전에 실행되는 등등의 방식으로, 정의된 실행 또는 프로그램 순서로 배열될 수 있다.
한 실시예에서, 컴파일러(210)는 시퀀스 번호 명명된 프로그램 순서(PO)를, 여기서는 메모리 데이터에 액세스하는 임의의 명령어(예를 들어, 로드 또는 스토어 명령어)뿐만 아니라 인터럽트를 야기할 수 있는 임의의 명령어로서 정의되는, 명령어 서브셋 명명된 프로그램-정렬된 명령어들(PO 명령어들) 각각에 할당할 수 있다. 프로그램 순서 값들은 점진적 순서로 할당된 자연수이지만, 값들의 시퀀스는 연속적일 필요는 없다. 예를 들어, 명령어들의 한 시퀀스는, 로드(load), 가산(add), 로드(load), 스토어(store), 감산(subtract), 스토어(store), 및 로드(load)를 포함할 수 있다. 제1 로드는 PO 값 1을 할당받을 수 있고, 제2 로드는 PO 값 2를 할당받을 수 있고, 제1 스토어는 PO 값 4를 할당받을 수 있고, 제2 스토어는 PO 값 5를 할당받을 수 있고, 제3 로드는 PO 값 8을 할당받을 수 있다. 그러면 컴파일러(210)는 명령어들의 이 시퀀스를 복수의 스트랜드(220, 230, 240)에 걸쳐 분할할 수 있다. 명령어들은 명령어들 간의 의존성에 기초하여 스트랜드들간에 분할될 수 있다. 예를 들어, 또 다른 명령어에 의존하는 각 명령어는, 자신이 의존하는 명령어와 동일한 스트랜드에 배치될 수 있다. 또한, 독립된 명령어들은 가용 스트랜드들(220, 230, 240)간에 분산될 수도 있다.
한 실시예에서, 컴파일러는 각 스트랜드 내의 PO 명령어들(예를 들어, 222, 224) 각각에 증분적 프로그램 순서(IPO) 값을 첨부한다. IPO 값(예를 들어, 223, 225)은 명령어의 전체 PO를 인코딩하지 못할 수도 있다. 대신에, IPO는, PO가 계산되고 있는 명령어의 PO 값과, 동일한 스트랜드 내의 다음 PO 명령어의 PO 값간의 차이와 동등한 증분값만을 인코딩할 수 있다. 한 실시예에서, 프로세서 하드웨어는 PO 명령어에 첨부된 IPO 값을 이용하여 PO 명령어에 대한 PO 값을 재구성한다. IPO 정보는, 226 등의 비-PO 명령어에 대해 인코딩될 필요가 없는데, 그 이유는, PO 정보는, 메모리 액세스를 위한 정확한 순서를 유지하기 위하여, 메모리 명령어 및 인터럽트를 야기할 수 있는 명령어에 대해서만 필요하기 때문이다. 따라서, 산술 명령어들은 그들의 명령어 포멧의 일부로서 IPO 값을 갖지 못할 수도 있다. 따라서, 컴파일러(210)는, 각각의 PO 명령어에 IPO 필드를 첨부함으로써 프로그램 순서 정보를 보존하면서, 프로그램을 멀티-스트랜드 아키텍쳐 상에서의 실행을 위해 복수의 스트랜드로 분할할 수 있다.
도 3은, 실시예에 따른, 지연된 재구성된 프로그램 순서를 이용하여 명령어들을 스케쥴링하기 위한 방법을 나타내는 흐름도이다. 방법(300)은, 하드웨어(예를 들어, 회로, 전용 로직, 프로그래머블 로직, 마이크로코드 등), 소프트웨어(예를 들어, 하드웨어 시뮬레이션을 수행하기 위해 처리 장치 상에서 실행되는 명령어), 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 처리 로직은 지연된 재구성된 프로그램 순서 값들로부터 생성된 정렬된 목록에 기초하여 실행을 위한 명령어들을 디스패치할 수 있다. 한 실시예에서, 방법(300)은, 도 1에 도시된 바와 같이, 선택 로직(170)에 의해 수행된다.
도 3을 참조하면, 블록(310)에서, 방법(300)은, 디스패치를 위해 선택된 각각의 준비완료된 명령어에 대한 재구성된 프로그래밍 순서(RPO) 값을 계산한다. 한 실시예에서, 전술된 바와 같이, 웨이크업 로직(150)은 SSF1(140) 내의 명령어들을 웨이크업하고 그 명령어들을 SSF2(160)로 옮긴다. 따라서, SSF2(160)는 스케쥴링을 위해 준비완료된 명령어들을 포함한다. 각 사이클에서, 소정 개수의 명령어들이 선택 로직(170)에 의해 SSF2(160)로부터 디스패치되기 때문에, 대응하는 개수의 새로운 명령어들이 SSF2 내로 이동되어 디스패치된 명령어들을 대체한다. 각각의 디스패치된 명령어에 대해, 선택 로직(170)은 RPO 값을 계산할 수 있다. RPO 값은 명령어들의 실제(또는 "진정한") 프로그램 순서를 나타낼 수 있다. 한 실시예에서, 선택 로직(170)은, 명령어에 첨부된 증분적 프로그램 순서 값을, 그 명령어가 디스패치를 위해 선택될 때, (선택 로직(170) 내의 버퍼에 저장될 수 있는) 동일한 스트랜드로부터의 이전에 선택된 명령어의 RPO 값에 가산한다. 이 동작의 결과는 이 명령어의 재구성된 프로그램 순서(RPO) 값일 수 있다.
블록(320)에서, 방법(300)은 지연된 RPO 값에 기초하여 명령어들의 정렬된 목록을 생성한다(즉, 지연된 RPO 값은 어느 명령어가 스케쥴링을 위해 디스패치되어야 하는지를 결정하는데 이용된다). 한 실시예에서, 선택 로직(170)은 이전에 Z개 사이클(예를 들어, 2 또는 3 사이클)에서 계산된 RPO 값들에 기초하여 명령어들의 정렬된 목록을 생성할 수 있다. 예를 들어, RPO 값들이 사이클 T에서 디스패치된 명령어에 대해 업데이트된다면, 이들 업데이트된 RPO 값들은 이후의 Z개 사이클에서 명령어들을 스케쥴링하는데 이용될 수 있다. 보통, 시스템은, RPO가 사이클 T에서 업데이트된다면, 선택 로직이 이 업데이트된 RPO를 이용하여 (1-사이클 스케쥴을 만족하기 위하여) 사이클 T+1에서의 정렬된 목록을 생성할 것으로 예상할 것이다. 그러나, 지연된 RPO 접근법에서, 업데이트된 RPO는 사이클 (T+1) + Z에서 이용될 것이다. 이것은, 상당한 성능 손실 없이, 임계 경로로부터 선택 로직의 부분(즉, RPO 값들에 기초한 정렬된 목록의 생성)을 제거한다. 한 실시예에서, 가장 오래된 RPO 값을 갖는 명령어는 최고 우선순위를 부여받을 수 있다.
블록(330)에서, 방법(300)은 지연된 RPO 값들의 정렬된 목록에 기초하여 최고 우선순위 명령어를 디스패치한다. 한 실시예에서, 선택 로직(170)은 가장 오래된 RPO 값들을 갖는 명령어들을 실행 유닛(130)에 디스패치한다. 예를 들어, 5개의 실행 포트가 있다면, 정렬된 목록으로부터의 처음 5개의 명령어들이 디스패치될 수 있다.
도 4는, 실시예에 따른, 프로그램 순서를 재구성하기 위한 방법을 나타내는 흐름도이다. 방법(400)은, 하드웨어(예를 들어, 회로, 전용 로직, 프로그래머블 로직, 마이크로코드 등), 소프트웨어(예를 들어, 하드웨어 시뮬레이션을 수행하기 위해 처리 장치 상에서 실행되는 명령어), 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 처리 로직은 비순차 프로세서 내의 준비완료된 명령어들의 프로그램 순서를 재구성할 수 있다. 한 실시예에서, 방법(400)은, 도 5에 관하여 이하에서 설명되는 하드웨어 구조(500)를 이용하여, 도 1에 도시된 바와 같이, 선택 로직(170)에 의해 수행된다.
도 4를 참조하면, 블록(410)에서, 방법(400)은, 실행 유닛에 디스패치되는 명령어에 첨부된 증분적 프로그램 순서(IPO) 값을 판독한다. 한 실시예에서, SSF2(160)는 다수의 엔트리들(162, 164, 166)을 저장할 수 있고, 그 각각은, PO 명령어인 경우, 명령어에 대한 대응하는 IPO 값을 유지한다. 또한, 동일한 스트랜드로부터 디스패치된 이전 명령어에 의해 계산되는 스트랜드의 RPO 값은, 대응하는 SSF2 엔트리에 유지되거나 별개의 RPO 버퍼에 저장된다. IPO 값은, 동일한 스트랜드 내의 이전 명령어의 RPO 값과, IPO가 인코딩되는 계산될 명령어의 RPO 값간의 차이와 동등한 증분값을 인코딩할 수 있다. 따라서, IPO 값은, 도 2에 관하여 전술된 바와 같이, 명령어들의 스트랜드로의 재구성에 기인하는 명령어들 간의 실제 프로그램 순서에서의 차이를 나타낸다.
블록(420)에서, 방법(400)은 대응하는 스트랜드 PO 또는 RPO 값에 IPO 값을 가산한다. 한 실시예에서, 스트랜드에 대한 PO 값(그 스트랜드로부터 가장 최근에 선택된 명령어의 PO 값을 나타냄)과 명령어에 대한 IPO 값은, IPO 값을 (이전에 재구성되었다면, RPO 값이라고도 할 수 있는) PO 값에 가산하여 스트랜드의 업데이트된 RPO 값을 형성하는 산술 로직 유닛(ALU; arithmetic logic unit)에 인가된다. 한 실시예에서, PO와 IPO는 2진 덧셈을 이용하여 결합될 수 있다. 그러나, 컴파일러가 PO들에 관해 IPO들을 어떻게 계산했는지에 따라 기타의 산술 연산들이 대안으로서 이용될 수 있다.
블록(430)에서, 방법(400)은 업데이트된 스트랜드 RPO 값을 대응하는 SSF2 엔트리에 또는 별개의 RPO 버퍼에 저장한다. 블록(420)에서 새로이 계산된 RPO 값은 가장 최근에 디스패치된 명령어를 나타내므로, 업데이트된 RPO 값은 스트랜드 PO 값으로서 이용될 수 있다. 따라서, RPO 값은 RPO 버퍼에 다시 기입되거나 스트랜드 PO 값으로서 SSF2의 대응하는 엔트리에 저장될 수 있다. 업데이트된 RPO 값은, 이하에서 더 설명되는 바와 같이, 스케쥴링을 위해 명령어들을 정렬하기 위해, 및 대기 버퍼 내의 대응하는 엔트리들 내의 후속 명령어들의 PO들을 계산(즉, 재구성)하기 위해 이용될 수 있다. 예시의 목적을 위해, 도 4의 블록들은 단일 명령어에 대한 프로세스를 도시하고 있다. 그러나, 일부 구현에서, 블록(410-430)의 동작들은 SSF2 내의 각각의 디스패치된 명령어에 대해 병렬로 수행될 수 있다는 것을 이해해야 한다.
도 5는, 본 발명의 실시예에 따른, 멀티-스트랜드 비순차 프로세서에서 프로그램 순서를 재구성하기 위한 하드웨어 구조(500)를 나타내는 블록도이다. 구조(500)는, 프로세서(100) 등의 멀티-스트랜드 비순차 프로세서 내의 ISU(120) 등의 명령어 스케쥴링 유닛(ISU)의 부분으로서 구현될 수 있다. 대안으로서, 구조(500)는 프로그램 순서의 재구성을 수행하기 위해 멀티-스트랜드 비순차 프로세서 내의 ISU와 통신하는 단독형 회로일 수 있다.
구조(500)는, 대기 버퍼(510)와 프로그램 순서 재구성을 위한 로직(예를 들어, 프로그램 순서 재구성 유닛(530, 532), 및 기입 디멀티플렉서(540))을 포함할 수 있다. 대기 버퍼(510)는 다수의 엔트리를 저장할 수 있고, 엔트리들 각각은, 실행을 위해 고려중인, 이전 사이클에서 디스패치된 명령어를 통해 계산된 스트랜드의 프로그램 순서(PO) 뿐만 아니라 명령어들에 대한 대응하는 IPO들을 유지한다. 대기 버퍼(510)는, 실행될 필요가 있는 모든 명령어를 할당한다는 점에서, 수퍼스칼라 프로세서 내의 예약 스테이션(reservation station)과 유사할 수 있지만, 비순차 할당이라는 차이가 있다. 또한, 이 대기 버퍼에서, 명령어들은 실행을 위해 디스패치되자마자 할당해제(de-allocate)된다. 한 실시예에서, 대기 버퍼는 2개 레벨로 분할되고 대기 버퍼(510)의 제2 레벨은 준비완료된 명령어만을 보유한다. PO 명령어의 경우, 대기 버퍼(510)의 각 엔트리는 스트랜드 내의 선두 명령어와 연관되는 PO-IPO쌍을 포함할 수 있다. 예를 들어, 멀티-스트랜드 비순차 프로세서가 n개 스트랜드들의 병렬 실행을 지원한다면, 대기 버퍼(510)는 n개까지의 PO-IPO 쌍을 저장할 수 있다. 대기 버퍼(510)는 PO-IPO들을 판독 멀티플렉서(520)에 출력할 수 있다. 대기 버퍼(510) 내의 엔트리들은 또한, 앞서 설명된 바와 같이, IPO 인코딩을 포함하지 않을 수 있는 비-PO 명령어들에 대응할 수 있다. 이러한 경우에, 대기 버퍼(510) 엔트리는, IPO 필드 내의 제로 또는 널 값과 함께, 비-PO 명령어에 대한 PO 값만을 포함할 수 있다. 스트랜드 내의 다음 PO 명령어의 PO 값은 (즉, 스트랜드 PO 값과 함께 디스패치된 이전의 PO 명령어의 IPO를 가산함으로써) 이전의 PO 명령어에 의해 계산되었기 때문에, 스트랜드 내의 다음 PO 명령어의 PO 값은 디스패치될 때 비-PO 명령어의 PO 값과 동등하게 설정될 수 있다. 추가적으로, 스트랜드에 대한 대기 버퍼(510)에 아무런 명령어도 없는 (예를 들어, 이전의 명령어가 실행되었고, 다음 명령어는 아직 인출되지 않아서, 그 스트랜드에 대한 버퍼 엔트리가 비어 있는) 클록 사이클에서, PO 필드는, RPO의 계산에서 계속 사용되는, 이전 PO 명령어의 PO를 계속 포함한다.
판독 멀티플렉서(520)는 선택 로직의 부분이고 대기 버퍼(510) 내의 PO-IPO 쌍을 수신하는 단일의 (n 대 x) 멀티플렉서로서 구현될 수 있다. 각 실행 사이클 동안에, 판독 멀티플렉서(520)는, 이후에 설명되는 정렬된 목록으로부터 선택 로직에 의해 선택된 명령어들에 기초하여, 가능한 n개 엔트리들 중 x개까지의 엔트리들을 x개의 디스패치 포트들에 포워딩할 수 있다. 스케쥴 벡터(522)는 판독 멀티플렉서(120)로의 입력이다. 스케쥴 벡터(522)는 선택 로직으로부터의 출력일 수 있고, 대기 버퍼(150) 내의 가능한 n개의 준비완료된 명령어들 중에서 어떤 x개의 명령어들이 현재의 사이클에서 디스패치를 위해 선택될 것인지를 나타낼 수 있다. 따라서 스케쥴 벡터(522)는 x개의 엔트리가 판독 멀티플렉서(520)로부터 포워딩되도록 제어한다. 임의의 주어진 클록 사이클에서 실행을 위해 스케쥴링된 것으로 선택된 엔트리들의 수는 사이클마다 다를 수 있지만 최대 x개까지일 수 있다. 또 다른 실시예에서, PO 및 IPO 값들은 별개의 버퍼(즉, 대기 버퍼(510)는 2개의 버퍼로 분할된다)에 유지될 수 있으므로, 판독 멀티플렉서(520)는 2개의 버퍼, 즉, PO 값을 디스패치하기 위한 하나와 IPO 값을 디스패치하기 위한 하나를 이용하여 구현될 수 있지만, 전술된 바와 같이, 이들 멀티플렉서들 양쪽 모두는 여전히 스케쥴 벡터(522)에 의해 제어될 것이다. 선택된 PO-IPO 쌍들은 PO 재구성 유닛들(530, 532)에 출력될 수 있다.
재구성 로직은 다수의 PO 재구성 유닛들(530, 532)을 포함할 수 있고, 그 각각은, 판독 멀티플렉서(520)로부터 출력된 대응하는 PO-IPO 쌍을 이용함으로써, 대기 버퍼(510) 내로 들어오는 명령어의 PO를 재구성하도록 구성된다. 판독 멀티플렉서(520)의 출력들 각각에 대해 재구성 유닛(530)이 제공될 수 있다(즉, x개의 전용 재구성 유닛). 한 실시예에서, 각각의 재구성 유닛(530)은, PO와 IPO를 결합하여 재구성된 프로그래밍 순서(RPO; reconstructed programming order)를 형성하는 산술 로직을 포함할 수 있다. 한 실시예에서, PO와 IPO는 2진 덧셈을 이용하여 결합될 수 있다. 그러나, 컴파일러가 PO들에 관해 IPO들을 어떻게 계산했는지에 따라 기타의 산술 연산들이 대안으로서 이용될 수 있다.
기입 디멀티플렉서(540)는, 재구성 유닛(530, 532)으로부터 RPO들을 함께 수신하는 하나 이상의 멀티플렉서(예를 들어, 단일의 x 대 n 멀티플렉서)를 이용하여 구현될 수 있다. 판독 멀티플렉서(520)에서와 같이, 기입 디멀티플렉서(540)는 ISU로부터의 스케쥴 벡터(522)에 의해 제어될 수 있다. 따라서, 기입 디멀티플렉서(540)는, 대기 버퍼(510)에서 총 n개의 스트랜드들 중 x개의 스트랜드가 업데이트될 필요가 있는 RPO를 선택할 수 있다. 이런 방식으로, 대기 버퍼(510) 내의 이전 명령어들의 PO들이 대기 버퍼(510) 내의 대응하는 엔트리들의 후속 명령어들의 PO들을 계산(즉, 재구성)하는데 이용되는 피드백 루프가 형성되고, 여기서, 재구성된 PO들은 주어진 사이클에서 실행을 위해 스케쥴링되기 위해 선택된 PO 명령어들의 실제 프로그램 순서에 대응한다.
한 실시예에서, (이전에 디스패치된 명령어들에 기초하여 계산된 스트랜드의 RPO 값들과 동등한) 대기 버퍼(510)에 다시 기입되는 업데이트된 PO 값들은 궁극적으로 정렬 로직에 제공될 수 있다. 정렬 로직의 한 예가 도 7에 관하여 이하에서 논의된다. 선택 로직의 일부인 정렬 로직은 RPO 값들을 비교하고 명령어들을 증가하는 RPO 값으로 재정렬하여, 정렬된 목록을 생성한다. 한 실시예에서, 정렬 로직은, 현재 사이클 이전의 다수의 사이클에서 업데이트된 RPO 값들을 이용함으로써 명령어들의 정렬을 구현할 수 있다. 예를 들어, 정렬 로직은 이전 2개 사이클로부터의 RPO 값들을 이용하여 정렬된 목록을 형성할 수 있다. 그러면 이 정렬된 목록은 실행 포트로의 디스패치를 위한 명령어들을 우선순위화하는데 이용될 수 있다. 대기 버퍼(510) 또는 RPO 버퍼는 이전 사이클들로부터의 RPO 값들을 저장하고 이들 값들은 정렬 로직에 직접 제공될 수 있다.
도 6은, 실시예에 따른, 재구성된 프로그램 순서에 기초하여 명령어들을 정렬하기 위한 방법을 나타내는 흐름도이다. 방법(600)은, 하드웨어(예를 들어, 회로, 전용 로직, 프로그래머블 로직, 마이크로코드 등), 소프트웨어(예를 들어, 하드웨어 시뮬레이션을 수행하기 위해 처리 장치 상에서 실행되는 명령어), 또는 이들의 조합을 포함할 수 있는 처리 로직에 의해 수행될 수 있다. 처리 로직은 스트랜드들과 연관된 지연된 RPO 값들에 기초하여 명령어들의 정렬된 목록을 생성할 수 있다. 한 실시예에서, 방법(600)은, 도 7에 관하여 이하에서 설명되는 시스템(700)을 이용하여, 도 1에 도시된 바와 같이, 선택 로직(170)에 의해 수행된다.
도 6을 참조하면, 블록(610)에서, 방법(600)은 업데이트된 RPO 값을 다른 모든 업데이트된 스트랜드 RPO 값들과 비교한다. 한 실시예에서, 선택 로직은 하나의 RPO 값을 다른 모든 스트랜드들에 대한 RPO 값들과 병렬로 비교한다. 선택 로직은 병렬 비교의 결과를 저장하는 비교 행렬을 생성하는 행렬 기반 로직을 구현할 수 있다.
블록(620)에서, 방법(600)은, 업데이트된 RPO 값(RPOi)이 자신과 현재 비교되어 있는 대기 버퍼(510) 내의 다른 모든 준비완료된 명령어의 RPO 값(RPOj) 보다 작은지를 결정한다. RPOi가 RPOj보다 작다면(또는 같다면), 블록(630)에서, 방법(600)은 대응하는 행렬 셀(셀ij)을 제1 값(예를 들어, 1)으로 설정한다. RPOi가 RPOj보다 작거나 같지 않다면(즉, RPOi가 RPOj보다 크다면), 블록(640)에서, 방법(600)은 대응하는 행렬 셀(셀ij)을 제2 값(예를 들어, 0)으로 설정한다. 도 6에서, i는 0 내지 n-1이고 j는 0 내지 n-1이며, 이것은, 대기 버퍼 내의 각 엔트리 내의 RPO 값이 대기 버퍼 내의 다른 엔트리들 각각과 병렬로 비교된다는 것을 의미한다.
블록(650)에서, 방법(600)은 업데이트된 RPO 값(RPOi)과 연관된 모든 행렬 셀들을 단일의 대표 값(single representative value)으로 변환한다. 한 실시예에서, 1의 카운팅 로직은 각 행의 1의 개수를 카운팅하여 4-비트 대표 값(즉, 최소의 RPO를 갖는 명령어를 나타내는 1111로부터 최고의 RPO를 갖는 명령어를 나타내는 0000까지)을 생성한다. 한 실시예에서, 1의 카운팅 로직은 병렬로 동작하는 (각 행에 대한) 가산기들의 트리로서 구현될 수 있다.
블록(660)에서, 방법(600)은 명령어들을 정렬하고 각 명령어에 대한 대표 값에 기초하여 명령어 우선순위를 설정한다. 한 실시예에서, 정렬 로직은 4-비트 대표 값들 각각을 취하여 이들의 값에 기초하여 이들을 정렬된 목록으로 정렬한다(예를 들어, 1111은 정렬된 목록에서 최고 위치를 점유할 수 있는 반면, 0000은 최저 위치를 점유한다). 이런 방식으로, 정렬된 목록이 증가하는 RPO 값에 기초하여 생성된다(즉, 가장 오래된 준비완료된 명령어는 첫 번째 위치를 점유하는 반면, SSF2 내의 가장 신생의 준비완료된 명령어(youngest ready instruction)는 마지막 위치를 점유한다). 한 실시예에서, 정렬된 목록은 대표 값(즉, 4-비트 값)만을 보유할 것이다. 그러면 명령어들은 정렬된 목록에 기초하여 실행을 위해 디스패치될 수 있다.
도 7은, 실시예에 따른, 재구성된 프로그램 순서에 기초하여 명령어들을 정렬하기 위한 시스템을 나타내는 블록도이다. 한 실시예에서, 시스템(700)은, 비교 행렬(710), 1의 카운팅 로직(720), 및 정렬 로직(730)을 포함한다. 비교 행렬(710)은, 입력으로서, 전술된 바와 같이 계산된 업데이트된 RPO 값을 수신할 수 있다. 한 실시예에서, 지연된 RPO 값들이 이용된다. 예를 들어, RPO 값들이 사이클 T에서 디스패치된 명령어에 대해 업데이트된다면, 이들 업데이트된 RPO 값들은 예상보다 Z개 사이클 이후에 명령어들을 스케쥴링하는데 이용될 수 있다. 보통 시스템은, RPO가 사이클 T에서 업데이트된다면, 선택 로직이 이 업데이트된 RPO를 이용하여 사이클 T+1에서의 정렬된 목록을 생성할 것으로 예상할 것이다. 그러나, 지연된 RPO 접근법에서, 업데이트된 RPO는 사이클 (T+1) + Z에서 이용될 것이다. 이것은, 상당한 성능 손실 없이, 임계 경로로부터 선택 로직의 부분(즉, RPO 값들에 기초한 정렬된 목록의 생성)을 제거한다. 시스템(700)은, 후술되는 바와 같이, 정렬된 목록을 생성하기 위해 Z개 사이클의 지연을 이용할 수 있다.
한 실시예에서, 각각의 RPO 값은 다른 RPO 값들 각각 마다 동시에 비교된다. 이들 비교의 결과는 비교 행렬(710)에 저장될 수 있다. 한 실시예에서, n개의 스트랜드들이 존재할 수 있고, 여기서 n은 16(따라서, 각 사이클에 대해 대기 버퍼(510) 내의 16개의 준비완료된 명령어들과 16개의 스트랜드 RPO 값들)과 같다. 따라서, 비교 행렬(710)은 16개의 행(i = 0 내지 15)과 16개의 열(j = 0 내지 15)을 가질 수 있다. 모든 비교가 이루어지는데 걸리는 시간을 줄이기 위하여, 모든 비교는 병렬로 수행될 수 있고 행렬 기반의 로직에 의해 구현될 수 있으며, 여기서, 모든 스트랜드 RPO는 다른 모든 스트랜드 RPO와 병렬로 비교된다.
비교 행렬(710)에서, RPOi는 SSF2의 엔트리 i에 저장된 명령어의 RPO를 나타낸다. 행렬(710)의 각 셀은 2개의 RPO들의 비교의 결과를 나타낸다. 예를 들어, 행 0은 다른 모든 스트랜드들(RPO0 내지 RPO15로 표시된 스트랜드 0 내지 15)의 RPO와 비교되고 있는 스트랜드 0의 RPO(RPO0)에 대한 결과를 가진다. 각 비교의 결과는 정의된 조건에 따라 단일 비트일 수 있다. 한 실시예에서, 조건은 RPOi(i = 0 내지 15) ≤ RPOj(j = 0 내지 15)이면, 셀ij = 1인 것으로서 정의될 수 있다. 그 외의 경우, 셀ij = 0이다. 다른 실시예들에서, 조건은 어떤 다른 방식으로 정의될 수도 있다.
따라서, 제1 스트랜드 RPO0을 이용한 예에서, RPO0이 12개의 다른 스트랜드들의 RPO들보다 작다면, 행렬의 행 0은 (스트랜드 0의 명령어가 SSF2 내의 12개의 다른 준비완료된 스트랜드들보다 오래된 것임을 나타내는) 12개의 1을 가질 것이다. 이것은, 행렬에서, 그 웨이(way)에서의 명령어가 SSF2의 16개 엔트리들중에서 가장 오래된 것임을 나타내는 모두 1을 갖는 행도 있을 것이라는 것을 의미한다. 또한, 그것이 16개 엔트리들 중 가장 신생의 명령어라는 것을 나타내는 모두 0을 갖는 행도 있을 것이다. 동일한 RPO 값을 갖는 2개의 스트랜드가 있다면, 선택 로직은 스트랜드의 위치(예를 들어, 감소하는 웨이 번호(decreasing way number)의 우선순위)에 기초하여 선택할 수 있다. 또한, 그 자신과 웨이의 RPO 비교는 도면에서 X로 표시된다(어떠한 비교도 요구되지 않으므로). 한 실시예에서, X는 1로서 취급될 수 있다. 비교 행렬(710)에서의 결과 값들은 1의 카운팅 로직(720)에 제공될 수 있다.
일단 RPO 비교가 완료되고 비교 행렬(710)이 채워지고 나면, 행렬의 각 행은 소정 개수의 1을 가질 것이고, 이것은 SSF2 내의 얼마나 많은 준비완료된 명령어들이 그 행에 대응하는 명령어보다 더 신생인지를 나타낸다. 이 정보는 RPO 값에 기초하여 명령어들을 정렬하는데 이용될 수 있다. 한 실시예에서, 1의 카운팅 로직(720)은 각 행의 1의 개수를 병렬로 카운팅하여 4-비트 대표 값(즉, 최소의 RPO를 갖는 명령어를 나타내는 1111로부터 최고의 RPO를 갖는 명령어를 나타내는 0000까지)을 생성한다. 한 실시예에서, 1의 카운팅 로직(720)은 병렬로 동작하는 (각 행에 대한) 가산기들의 트리로서 구현될 수 있다. 그 다음, 정렬 로직(730)은 이들 16개의 4-비트 대표 값들 각각을 취하여 이들의 값에 기초하여 이들을 정렬된 목록(735)에 정렬한다(1111은 정렬된 목록에서 최고 위치를 점유할 수 있는 반면, 0000은 최저 위치를 점유한다). 이런 방식으로, 정렬된 목록이 증가하는 RPO 값에 기초하여 생성된다(즉, 가장 오래된 준비완료된 명령어는 첫 번째 위치를 점유하는 반면, SSF2 내의 가장 신생의 준비완료된 명령어는 마지막 위치를 점유한다). 한 실시예에서, 정렬된 목록(735)은 대표 값(즉, 4-비트 값)만을 보유할 것이다. 한 실시예에서, 정렬 로직(730)은 1 내지 16개 디멀티플렉서로서 구현될 수 있다(정렬된 목록에서 정렬될 각 웨이(way)당 하나씩). 한 실시예에서, 정렬된 목록(735)에 기초하여, 명령어들은 실행을 위해 디스패치될 수 있다. 예를 들어, 5개의 실행 포트가 있다면, 정렬된 목록(735)으로부터의 처음 5개의 명령어들이 디스패치될 수 있다.
도 8은, 머신으로 하여금 여기서 논의된 방법론들 중 임의의 하나 이상을 수행하게 하기 위한 명령어 세트가 실행될 수 있는 예시적 형태의 컴퓨터 시스템(800)의 머신의 도식적 표현을 나타낸다. 대안적 실시예에서, 머신은, 근거리 통신망(LAN), 인트라넷, 엑스트라넷, 또는 인터넷 내의 다른 머신들에 접속(예를 들어, 네트워킹)될 수 있다.
머신은 클라이언트-서버 네트워크 환경에서 서버 또는 클라이언트 머신의 자격으로 또는 피어-투-피어(또는 분산형) 네트워크 환경에서 피어 머신으로서 동작할 수 있다. 머신은, 개인용 컴퓨터(PC), 태블릿 PC, 셋탑 박스(STB), PDA(personal digital assistant), 셀룰러 전화, 웹 어플라이언스, 서버, 네트워크 라우터, 스위치 또는 브릿지, 또는 해당 머신에 의해 취해지는 동작을 명시하는 한 세트의 명령어를 (순차적 또는 기타의 방식) 실행할 수 있는 임의의 머신일 수 있다. 또한, 단일의 머신만이 예시되어 있지만, 용어 "머신"은, 여기서 논의된 방법론들 중 임의의 하나 이상을 수행하기 위해 개별적으로 또는 공동으로 한 세트(또는 복수 세트)의 명령어를 실행하는 머신들의 임의의 집합(collection)을 포함하는 것으로 간주되어야 할 것이다. 한 실시예에서, 컴퓨터 시스템(800)은, 프로세서(100)를 포함하는 컴퓨팅 장치 등의, 컴퓨팅 장치를 나타낼 수 있다.
예시적 컴퓨터 시스템(800)은, 버스(830)를 통해 서로 통신하는, 처리 장치(802), 메인 메모리(804)(예를 들어, 판독 전용 메모리(ROM), 플래시 메모리, 동적 랜덤 액세스 메모리(DRAM)(예를 들어, SDRAM(synchronous DRAM) 또는 RDRAM(Rambus DRAM) 등), 정적 메모리(806)(예를 들어, 플래시 메모리, 정적 랜덤 액세스 메모리(SRAM) 등), 및 데이터 스토리지 장치(818)를 포함한다. 여기서 설명된 다양한 버스를 통해 제공되는 임의의 신호는 다른 신호와 시간 멀티플렉싱될 수 있고 하나 이상의 공통 버스를 통해 제공될 수 있다. 추가로, 회로 컴포넌트들 또는 블록들 사이의 상호접속은 버스로서 또는 단일 신호선으로서 도시될 수 있다. 버스들 각각은 대안으로서 하나 이상의 단일 신호선일 수도 있고 단일 신호선들 각각은 대안으로서 버스일 수도 있다.
처리 장치(802)는, 마이크로프로세서, 중앙 처리 유닛 등의, 하나 이상의 범용 처리 장치를 나타낸다. 처리 장치는, 컴파일러에 의해 복수의 스트랜드로 배열된 명령어들의 비순차 인출 및 실행을 허용하는 멀티-스트랜드 아키텍쳐를 구현한다. 처리 장치는, CISC(complex instruction set computing) 아키텍쳐, RISC(reduced instruction set computer) 아키텍쳐, VLIW(very long instruction word) 아키텍쳐, 또는 기타의 명령어 세트, 또는 명령어 세트들의 조합을, 컴파일러에 의한 앞서 언급된 명령어 세트들 내의 2진 코드들의 멀티-스트랜드 아키텍쳐로의 변환을 통해, 구현할 수 있다. 처리 장치(802)는 또한, 주문형 집적 회로(ASIC; application specific integrated circuit), 필드 프로그래머블 게이트 어레이(FPGA; field programmable gate array), 디지털 신호 프로세서(DSP; digital signal processor), 네트워크 프로세서 등의 하나 이상의 특별-목적 처리 장치일 수도 있다. 처리 장치(802)는 여기서 논의된 동작들과 단계들을 수행하기 위한 처리 로직(826)을 실행하도록 구성된다.
컴퓨터 시스템(800)은 네트워크 인터페이스 장치(808)를 더 포함할 수 있다. 컴퓨터 시스템(800)은 또한, 비디오 디스플레이 유닛(810)(예를 들어, 액정 디스플레이(LCD) 또는 음극선관(CRT)), 영숫자 입력 장치(812)(예를 들어, 키보드), 커서 제어 장치(814)(예를 들어, 마우스), 및 신호 생성 장치(816)(예를 들어, 스피커)를 포함할 수 있다.
데이터 스토리지 장치(818)는, 여기서 설명된 기능들의 방법론들 중 임의의 하나 이상을 구현하는 하나 이상의 세트의 명령어(822)(예를 들어, 소프트웨어)가 저장되어 있는 머신-액세스가능한 저장 매체(828)를 포함할 수 있다. 명령어(822)는 또한, 컴퓨터 시스템(800)에 의한 그 실행 동안에, 완전히 또는 적어도 부분적으로, 메인 메모리(804) 내에 및/또는 처리 장치(802) 내에 존재할 수 있다; 메인 메모리(804)와 처리 장치(802)는 또한 머신-액세스가능한 저장 매체를 구성한다. 명령어(822)는 또한, 네트워크 인터페이스 장치(808)를 경유해 네트워크(820)를 통해 전송되거나 수신될 수 있다. 한 실시예에서, 명령어들은 처리 장치(802)의 하드웨어에서 실행될 수 있다. 그러나, 다른 실시예에서, 명령어들은 메모리(804)에 또는 스토리지(818)에 저장될 수 있고 소프트웨어에 의해 실행될 수 있다.
머신-판독가능한 저장 매체(828)는 또한, 여기서 설명된 바와 같이, 지연된 재구성된 처리 순서에 기초하여 프로세서에서 명령어들을 스케쥴링하기 위한 명령어들을 저장하는데 이용될 수 있다. 머신-판독가능한 저장 매체(828)가 예시적인 실시예에서 단일의 매체로서 도시되어 있지만, 용어 "머신-판독가능한 저장 매체"는 하나 이상의 세트의 명령어들을 저장하는 단일 매체 또는 복수의 매체(예를 들어, 중앙집중형 또는 분산형 데이터베이스, 및/또는 연관된 캐쉬 및 서버)를 포함하는 것으로 간주되어야 한다. 머신-판독가능한 매체는, 머신(예를 들어, 컴퓨터)에 의해 판독가능한 형태의 정보(예를 들어, 소프트웨어, 처리 애플리케이션)를 저장하기 위한 임의의 메커니즘을 포함한다. 머신-판독가능한 매체는, 자기 저장 매체(예를 들어, 플로피 디스켓), 광학적 저장 매체(예를 들어, CD-ROM); 광자기 저장 매체; 판독 전용 메모리(ROM); 랜덤-액세스 메모리(RAM); 소거가능한 프로그래머블 메모리(예를 들어, EPROM 및 EEPROM); 플래시 메모리; 또는 전자적 명령어들을 저장하기에 적합한 또 다른 타입의 매체를 포함할 수 있지만, 이것으로 제한되는 것은 아니다.
여기서의 방법들의 동작들이 특정한 순서로 도시되고 설명되었지만, 소정의 동작들이 역순으로 수행되거나 소정의 동작이 적어도 부분적으로 다른 동작들과 동시에 수행되도록, 각 방법의 동작들의 순서는 변경될 수 있다. 또 다른 실시예에서, 별개의 동작들의 명령어들 또는 서브-동작들은 간헐적 및/또는 교대하는 방식일 수도 있다.

Claims (21)

  1. 프로세서 내의 명령어들을 스케쥴링하는 방법으로서,
    상기 방법은 상기 프로세서에 의해 수행되고,
    실행을 위해 스케쥴링될 준비가 되어 있는 복수의 명령어들 각각에 대한 재구성된 프로그램 순서(RPO; reconstructed program order) 값을 계산하는 단계;
    지연된 RPO 값들에 기초하여 명령어들의 정렬된 목록(ordered list)을 생성하는 단계 ―상기 지연된 RPO 값들은 이전 실행 사이클로부터의 계산된 RPO 값들을 포함함―; 및
    상기 정렬된 목록에 기초하여 스케쥴링을 위한 명령어들을 디스패치(dispatch)하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하는 단계는,
    상기 복수의 명령어들 각각에 첨부된 증분적 프로그램 순서(IPO; incremental program order) 값을 판독하는 단계; 및
    상기 IPO 값을 상기 복수의 명령어들 각각과 연관된 처리 스트랜드(processing strand)에 대한 스트랜드 프로그램 순서 값에 가산하는 단계
    를 포함하는 방법.
  3. 제2항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하는 단계는,
    각각의 실행 사이클로부터의 상기 RPO 값들을 대기 버퍼(waiting buffer)에 저장하는 단계를 더 포함하는, 방법.
  4. 제2항에 있어서, 상기 IPO 값들은 컴파일러에 의해 메모리 명령어들과 인터럽트가능한 명령어들(interruptible instructions)에 첨부되는, 방법.
  5. 제1항에 있어서, 상기 지연된 RPO 값들에 기초하여 정렬된 목록을 생성하는 단계는,
    상기 이전 실행 사이클로부터의 계산된 RPO 값들을 대기 버퍼로부터 판독하는 단계;
    상기 계산된 RPO 값들 각각을 다른 계산된 RPO 값들 모두와 비교하는 단계;
    상기 비교의 결과들에 기초하여 각각의 계산된 RPO 값들에 대한 대표 값(representative value)을 결정하는 단계; 및
    상기 정렬된 목록을 형성하기 위해 상기 대표 값들을 정렬하는 단계
    를 포함하는, 방법.
  6. 제1항에 있어서, 상기 이전 실행 사이클은, 현재의 실행 사이클에 앞선 적어도 2개의 실행 사이클에서 발생한 실행 사이클을 포함하는, 방법.
  7. 제1항에 있어서,
    상기 디스패치된 명령어들을 상기 프로세서에서 실행하는 단계를 더 포함하고, 상기 프로세서는 멀티-스트랜드 비순차 프로세서(multi-strand out-of-order processor)를 포함하는, 방법.
  8. 시스템으로서,
    메모리; 및
    상기 메모리에 통신가능하게 결합된 처리 장치를 포함하고,
    상기 처리 장치는 선택 로직을 포함하며, 상기 선택 로직은,
    실행을 위해 스케쥴링될 준비가 되어 있는 복수의 명령어들 각각에 대한 재구성된 프로그램 순서(RPO) 값을 계산하고;
    지연된 RPO 값들에 기초하여 명령어들의 정렬된 목록을 생성하며 ―상기 지연된 RPO 값들은 이전 실행 사이클로부터의 계산된 RPO 값들을 포함함―;
    상기 정렬된 목록에 기초하여 스케쥴링을 위한 명령어들을 디스패치하는, 시스템.
  9. 제8항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하기 위해, 상기 선택 로직은,
    상기 복수의 명령어들 각각에 첨부된 증분적 프로그램 순서(IPO) 값을 판독하고;
    상기 IPO 값을 상기 복수의 명령어들 각각과 연관된 처리 스트랜드에 대한 스트랜드 프로그램 순서 값에 가산하는, 시스템.
  10. 제9항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하기 위해, 상기 선택 로직은 또한,
    각각의 실행 사이클로부터의 상기 RPO 값들을 대기 버퍼에 저장하는, 시스템.
  11. 제9항에 있어서, 상기 IPO 값들은 컴파일러에 의해 메모리 명령어들과 인터럽트가능한 명령어들에 첨부되는, 시스템.
  12. 제8항에 있어서, 상기 지연된 RPO 값들에 기초하여 정렬된 목록을 생성하기 위해, 상기 선택 로직은,
    상기 이전 실행 사이클로부터의 계산된 RPO 값들을 대기 버퍼로부터 판독하고;
    상기 계산된 RPO 값들 각각을 다른 계산된 RPO 값들 모두와 비교하며;
    상기 비교의 결과들에 기초하여 각각의 계산된 RPO 값들에 대한 대표 값을 결정하고;
    상기 정렬된 목록을 형성하기 위해 상기 대표 값들을 정렬하는, 시스템.
  13. 제8항에 있어서, 상기 이전 실행 사이클은, 현재의 실행 사이클에 앞선 적어도 2개의 실행 사이클에서 발생한 실행 사이클을 포함하는, 시스템.
  14. 제8항에 있어서, 상기 처리 장치는 멀티-스트랜드 비순차 프로세서를 포함하는, 시스템.
  15. 처리 장치로서,
    실행을 위한 복수의 명령어를 스케쥴링하는 명령어 스케쥴링 유닛; 및
    상기 명령어 스케쥴링 유닛에 통신가능하게 결합되어 상기 복수의 명령어의 서브세트를 실행하는 실행 유닛
    을 포함하고,
    상기 명령어 스케쥴링 유닛은,
    상기 복수의 명령어들 간의 의존성을 해결하는(resolve) 웨이크업 로직(wakeup logic); 및
    선택 로직을 포함하고,
    상기 선택 로직은,
    실행을 위해 스케쥴링될 준비가 되어 있는 복수의 명령어들 각각에 대한 재구성된 프로그램 순서(RPO) 값을 계산하고;
    지연된 RPO 값들에 기초하여 명령어들의 정렬된 목록을 생성하며 ―상기 지연된 RPO 값들은 이전 실행 사이클로부터의 계산된 RPO 값들을 포함함―;
    상기 정렬된 목록에 기초하여 스케쥴링을 위한 명령어들을 디스패치함으로써, 실행을 위한 상기 복수의 명령어들의 서브세트를 선택하는, 처리 장치.
  16. 제15항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하는 것은,
    상기 복수의 명령어들 각각에 첨부된 증분적 프로그램 순서(IPO) 값을 판독하는 것; 및
    상기 IPO 값을 상기 복수의 명령어들 각각과 연관된 처리 스트랜드에 대한 스트랜드 프로그램 순서 값에 가산하는 것
    을 포함하는 처리 장치.
  17. 제16항에 있어서, 상기 복수의 명령어들 각각에 대한 RPO 값을 계산하는 것은,
    각각의 실행 사이클로부터의 RPO 값들을 대기 버퍼에 저장하는 것을 더 포함하는, 처리 장치.
  18. 제16항에 있어서, 상기 IPO 값들은 컴파일러에 의해 메모리 명령어들과 인터럽트가능한 명령어들에 첨부되는, 처리 장치.
  19. 제15항에 있어서, 상기 지연된 RPO 값들에 기초하여 상기 정렬된 목록을 생성하는 것은,
    상기 이전 실행 사이클로부터의 계산된 RPO 값들을 대기 버퍼로부터 판독하는 것;
    상기 계산된 RPO 값들 각각을 다른 계산된 RPO 값들 모두와 비교하는 것;
    상기 비교의 결과들에 기초하여 각각의 계산된 RPO 값들에 대한 대표 값을 결정하는 것; 및
    상기 정렬된 목록을 형성하기 위해 상기 대표 값들을 정렬하는 것
    을 포함하는, 처리 장치.
  20. 제15항에 있어서, 상기 이전 실행 사이클은, 현재의 실행 사이클에 앞선 적어도 2개의 실행 사이클에서 발생한 실행 사이클을 포함하는, 처리 장치.
  21. 제15항에 있어서, 상기 처리 장치는 멀티-스트랜드 비순차 프로세서를 포함하는, 처리 장치.
KR1020157011867A 2012-12-26 2012-12-26 지연된 재구성된 프로그램 순서를 이용한 선택 로직 KR101730282B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/IB2012/003079 WO2014102563A1 (en) 2012-12-26 2012-12-26 Select logic using delayed reconstructed program order

Publications (2)

Publication Number Publication Date
KR20150065865A KR20150065865A (ko) 2015-06-15
KR101730282B1 true KR101730282B1 (ko) 2017-04-25

Family

ID=51019952

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157011867A KR101730282B1 (ko) 2012-12-26 2012-12-26 지연된 재구성된 프로그램 순서를 이용한 선택 로직

Country Status (4)

Country Link
US (1) US9632790B2 (ko)
KR (1) KR101730282B1 (ko)
CN (1) CN104781786B (ko)
WO (1) WO2014102563A1 (ko)

Families Citing this family (13)

* 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
US10255075B2 (en) * 2013-07-18 2019-04-09 Nvidia Corporation System, method, and computer program product for managing out-of-order execution of program instructions
WO2016193774A1 (en) * 2015-06-01 2016-12-08 Intel Corporation Multi-core processor for execution of strands of instructions grouped according to criticality
US11687345B2 (en) 2016-04-28 2023-06-27 Microsoft Technology Licensing, Llc Out-of-order block-based processors and instruction schedulers using ready state data indexed by instruction position identifiers
US20180032344A1 (en) * 2016-07-31 2018-02-01 Microsoft Technology Licensing, Llc Out-of-order block-based processor
US10241801B2 (en) 2016-12-23 2019-03-26 Intel Corporation Method and apparatus to create register windows for parallel iterations to achieve high performance in HW-SW codesigned loop accelerator
US10235171B2 (en) 2016-12-27 2019-03-19 Intel Corporation Method and apparatus to efficiently handle allocation of memory ordering buffers in a multi-strand out-of-order loop processor
US10241789B2 (en) 2016-12-27 2019-03-26 Intel Corporation Method to do control speculation on loads in a high performance strand-based loop accelerator
US10983799B1 (en) 2017-12-19 2021-04-20 Apple Inc. Selection of instructions to issue in a processor
US11422821B1 (en) 2018-09-04 2022-08-23 Apple Inc. Age tracking for independent pipelines
CN109918134B (zh) * 2019-03-06 2023-05-30 湖南科技大学 用于vliw基本块调度的组合启发式指令选择优化方法
CN111552366B (zh) * 2020-04-07 2021-10-22 江南大学 一种动态延迟唤醒电路及乱序指令发射架构
CN115269008B (zh) * 2022-09-29 2023-02-28 苏州浪潮智能科技有限公司 一种数据处理方法、装置、介质及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5021945A (en) * 1985-10-31 1991-06-04 Mcc Development, Ltd. Parallel processor system for processing natural concurrencies and method therefor
US5819056A (en) * 1995-10-06 1998-10-06 Advanced Micro Devices, Inc. Instruction buffer organization method and system
US5859992A (en) 1997-03-12 1999-01-12 Advanced Micro Devices, Inc. Instruction alignment using a dispatch list and a latch list
US6085305A (en) * 1997-06-25 2000-07-04 Sun Microsystems, Inc. Apparatus for precise architectural update in an out-of-order processor
CA2433379A1 (en) * 2003-06-25 2004-12-25 Ibm Canada Limited - Ibm Canada Limitee Modulo scheduling of multiple instruction chains
US7065635B1 (en) * 2003-12-17 2006-06-20 Sun Microsystems, Inc. Method for handling condition code modifiers in an out-of-order multi-issue multi-stranded processor
CN102171650B (zh) * 2008-11-24 2014-09-17 英特尔公司 用于将顺序程序分解为多个线程、执行所述线程和重构该顺序执行的***、方法和装置

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing

Also Published As

Publication number Publication date
US9632790B2 (en) 2017-04-25
CN104781786A (zh) 2015-07-15
KR20150065865A (ko) 2015-06-15
CN104781786B (zh) 2018-05-08
WO2014102563A1 (en) 2014-07-03
US20150301831A1 (en) 2015-10-22

Similar Documents

Publication Publication Date Title
KR101730282B1 (ko) 지연된 재구성된 프로그램 순서를 이용한 선택 로직
US10157064B2 (en) Processing of multiple instruction streams in a parallel slice processor
CN107810480B (zh) 根据性能度量的指令块分配
US8332854B2 (en) Virtualized thread scheduling for hardware thread optimization based on hardware resource parameter summaries of instruction blocks in execution groups
KR101966712B1 (ko) 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
US20140208074A1 (en) Instruction scheduling for a multi-strand out-of-order processor
US9652243B2 (en) Predicting out-of-order instruction level parallelism of threads in a multi-threaded processor
US9811340B2 (en) Method and apparatus for reconstructing real program order of instructions in multi-strand out-of-order processor
KR101648278B1 (ko) 마이크로프로세서 가속 코드 최적화기 및 의존성 재순서화 방법
KR20160046331A (ko) 범용 유닛을 기반으로 하는 고성능 프로세스 시스템 및 방법
Perais et al. BeBoP: A cost effective predictor infrastructure for superscalar value prediction
KR20180021812A (ko) 연속하는 블록을 병렬 실행하는 블록 기반의 아키텍쳐
CN1760826A (zh) 用于处理指令的方法、处理器以及***
CN108027734B (zh) 空指令的动态生成
KR20170016012A (ko) 마이크로프로세서 가속 코드 최적화기
KR20180021850A (ko) 블록 크기에 기초하여 명령어 블록을 명령어 윈도우에 맵핑하기
KR20140113434A (ko) 바이패스 멀티플 인스턴스화 테이블을 갖는 이동 제거 시스템 및 방법
KR20180021165A (ko) 프로세서 명령어 창에 대한 명령어 블록의 대량 할당
CN104216683A (zh) 利用同步多线程进行数据处理的方法及其***
EP3268859A1 (en) Scheduling heterogenous processors
US20200210192A1 (en) Instruction cache in a multi-threaded processor
Iliakis et al. Repurposing GPU microarchitectures with light-weight out-of-order execution
US10983790B2 (en) Arithmetic processing unit and control method for arithmetic processing unit
US20170337062A1 (en) Single-thread speculative multi-threading
CN117707625B (zh) 支持指令多发的计算单元、方法及相应图形处理器

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant