KR20170066695A - 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치 - Google Patents

비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치 Download PDF

Info

Publication number
KR20170066695A
KR20170066695A KR1020177015127A KR20177015127A KR20170066695A KR 20170066695 A KR20170066695 A KR 20170066695A KR 1020177015127 A KR1020177015127 A KR 1020177015127A KR 20177015127 A KR20177015127 A KR 20177015127A KR 20170066695 A KR20170066695 A KR 20170066695A
Authority
KR
South Korea
Prior art keywords
instructions
type
instruction
instruction set
execution
Prior art date
Application number
KR1020177015127A
Other languages
English (en)
Other versions
KR102074961B1 (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 KR20170066695A publication Critical patent/KR20170066695A/ko
Application granted granted Critical
Publication of KR102074961B1 publication Critical patent/KR102074961B1/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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • 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/3867Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining

Abstract

비순차 마이크로프로세서 파이프라인(out-of-order microprocessor pipeline)에서 명령어 스케줄링을 수행하는 방법이 개시되어 있다. 이 방법은 스케줄러로부터 실행 모듈로 디스패치할 제1 명령어 집합을 선택하는 단계를 포함하고, 여기서 실행 모듈은 2가지 유형의 실행 유닛들을 포함한다. 제1 유형의 실행 유닛은 제1 및 제2 유형의 명령어 둘 다를 실행하고, 제2 유형의 실행 유닛은 제2 유형만을 실행한다. 다음에, 이 방법은 제1 명령어 집합의 부분집합이고 제2 유형의 명령어들만을 포함하는, 디스패치할 제2 명령어 집합을 선택하는 단계를 포함한다. 다음에, 이 방법은 제2 명령어 집합의 일부로서 선택되지 않은 명령어들을 포함하는, 제3 명령어 집합을 결정하는 단계를 포함한다. 마지막으로, 이 방법은 제2 명령어 집합을 제2 유형의 실행 유닛을 사용하여 실행하기 위해 디스패치하고 제3 명령어 집합을 제1 유형의 실행 유닛을 사용하여 실행하기 위해 디스패치하는 단계를 포함한다.

Description

비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치{METHOD AND APPARATUS FOR EFFICIENT SCHEDULING FOR ASYMMETRICAL EXECUTION UNITS}
관련 출원과의 상호 참조
본 출원은 발명의 명칭이 "METHOD AND APPARATUS FOR EFFICIENT SCHEDULING FOR ASYMMETRICAL EXECUTION UNITS"인 미국 가특허 출원 제61/799,062호(출원일: 2013년 3월 15일)의 변경 출원(conversion)으로서, 이 미국 출원을 기초로 우선권 및 그 이득을 주장하고, 이로써 이 미국 출원은 그 전체가 참고로 본 명세서에 포함된다.
발명의 분야
본 발명에 따른 실시예들은 일반적으로 마이크로프로세서 아키텍처에 관한 것으로서, 보다 상세하게는, 비순차 마이크로프로세서(out-of-order microprocessor)에 대한 아키텍처에 관한 것이다.
비순차(Out-Of-Order)("OOO") 마이크로프로세서에서는, 명령어들이 그의 프로그램 순서와 다르게 발행되고 실행될 수 있다. OOO 마이크로프로세서의 스케줄러는 준비된 명령어(ready instruction)들을 비순차적으로 선택하여 실행 유닛들로 디스패치한다. 특정 마이크로프로세서 아키텍처들은 2가지 유형의 명령어들(A 및 E)을 가진다. A-유형 명령어의 예는 덧셈 및 뺄셈과 같은 정수 연산인 반면, E-유형 명령어의 예는 부동 소수점 덧셈, 부동 소수점 뺄셈, 및 부동 소수점 곱셈과 같은 부동 소수점 연산이다. 그렇지만, 유의할 점은, A 및 E-유형 명령어들이 이상의 예들로만 제한되지 않는다는 것이다.
그렇지만, 2가지 유형의 명령어들을 지원하는 종래의 아키텍처들은 양 유형의 명령어들을 지원할 수 있는 실행 유닛들을 갖지 않는다. 예를 들어, 종래의 프로세서는 전형적으로 A-유형 명령어들을 실행하기 위한 전용 실행 유닛(exclusive execution unit) 및 E-유형 명령어들을 처리하기 위한 전용 유닛(exclusive unit)을 가질 것이고, 여기서 양 유형의 실행 유닛들은 서로 상호 배타적(mutually exclusive)일 것이다.
이러한 아키텍처에서의 스케줄러의 목적은 전형적으로, 불균일 명령어 유형(non-uniform instruction type) 및 비대칭 실행 유닛(asymmetric execution unit)들이 주어진 경우, 디스패치 처리량(dispatch throughput)을 최적화하는 것이다. 게다가, 스케줄러의 다른 목적은 더 신생의(younger) 명령어들보다 더 오래된(older) 명령어들에 우선순위를 부여하는 것이다. 그리고, 최종적으로, 마지막 목적은 스케줄링 절차를 수행함에 있어서 경쟁력 있는 지연 시간(competitive latency)을 유지하는 것이다.
종래의 아키텍처들은, 앞서 언급된 목적들 전부를 성공적으로 달성하지 않기 때문에, 한계가 있다. 예를 들어, 앞서 언급된 바와 같이, 종래의 아키텍처들은 A-유형 실행 유닛들에서만 실행을 위한 A-유형 명령어들을 선택하고 E-유형 실행 유닛들에서만 실행을 위한 E-유형 명령어들을 선택하는 원시적인 정책을 채택할 수 있다. 이것은 보다 나은 지연 시간을 위해 실행이 병렬로 수행될 수 있게 하지만, 특정의 실행 유닛 유형들에 대해 충분한 명령어 블록들이 없는 경우, 그 결과, 사용되지 않는 실행 유닛 포트들이 있고 전체적인 디스패치 처리량이 보다 적게 될 것이다.
예를 들어, 4개의 A-유형 실행 유닛들 및 4개의 E-유형 실행 유닛들을 갖는 아키텍처에서 5개의 A-유형 명령어들 및 3개의 E-유형 명령어들이 있는 경우, A-유형 명령어들이 E-유형 실행 유닛들에서 실행될 수 없기 때문에, E-유형 실행 유닛들 중 적어도 하나가 유휴 상태(idle)로 될 것이다. 이 방식에서의 다른 문제점은 개별 카테고리(A 또는 E) 내에서만 에이지 최적화(age optimized)되고 전체적인 에이지 우선순위 부여(age prioritization)에 대해서는 최적화되지 않는다는 것이다. 이상의 예에서, 예를 들어, 7개의 명령어들만이 디스패치될 것이다. 다섯 번째 A-유형 명령어는 다음 사이클을 기다려야만 할 것이다. 그 결과, 종래의 아키텍처들은 한계가 있고, 스케줄러의 앞서 언급한 원하는 목적들 전부를 달성하도록 설계되어 있지 않다.
그에 따라, 실행 유닛이 다수의 유형의 명령어들(예컨대, A-유형의 명령어들 및 E-유형의 명령어들 둘 다)을 실행할 수 있는 방법 및 장치가 필요하다. 게다가, 디스패치 처리량을 최적화하고, 더 신생의 명령어 블록들보다 오래된 명령어 블록들에 우선순위를 부여하며, 경쟁력 있는 지연 시간을 유지하는, 비대칭 실행 유닛들에 대한 보다 효율적인 스케줄링을 위한 방법 및 장치가 필요하다.
본 발명의 실시예들은 비대칭 실행 유닛 유형들(A 및 E)을 지원하고, 여기서 A-유형 실행 유닛은 A-유형 명령어들만을 지원할 수 있지만, E-유형 실행 유닛은 A-유형의 명령어들 및 E-유형의 명령어들 둘 다를 지원할 수 있다. 그에 따라, A-유형 명령어들은 A 유닛 및 E 유닛 둘 다에서 실행될 수 있지만, E 명령어들은 E 유닛들에서만 실행될 수 있다. 그에 따라, A-유형 실행 유닛들은 E-유형 실행 유닛들의 부분집합일 수 있다.
하나의 실시예에서, 비대칭 실행 유닛들에 대한 스케줄링을 수행하기 위해, 스케줄러는 A 실행 유닛 포트들을 먼저 채우고, 이어서 A 실행 유닛들에 의해 선택되지 않은 다른 명령어 블록들 모두로 E 실행 유닛 포트들을 채운다. 하나의 실시예에서, 스케줄러는 "Find-8" 및 "Find-4" 로직 회로를 포함한다. Find-8 회로는 선택 기준을 충족시키는 처음 8개의 가장 오래된 명령어들이 있는지 스케줄러에서의 디스패치 범위(dispatch range)를 탐색한다. 한편, Find-4 회로는 처음 4개의 가장 오래된 A-유형 명령어 블록들이 있는지 탐색하기 위해 Find-8 회로와 병렬로 이용된다. Find-4 회로의 결과들은 A-유형 실행 유닛들을 스케줄링하는 데 사용된다. Find-4 회로에 의해 아직 선택되지 않은 나머지 명령어들 중에서, 가장 오래된 4개의 명령어들이 이어서 E-유형 실행 유닛들에 대해 스케줄링된다. 예를 들어, Find-8 회로가 3개의 A-유형 명령어들 및 5개의 E-유형 명령어들을 선택하고 Find-4 회로가 3개의 A-유형 명령어들을 선택하는 경우(동일한 3개의 A-유형 명령어들이 Find-8 로직에 의해 선택됨), 3개의 A-유형 명령어들은 A 포트들에 대해 스케줄링되는 반면, 나머지 5개의 E-유형 명령어들 중 가장 오래된 4개는 E 포트들에 대해 스케줄링될 수 있다. 그렇지만, 본 발명이 이 실시예로 제한되지 않는다. 예를 들어, 스케줄러가 하나의 사이클에서 16개의 명령어들을 디스패치할 수 있는 경우, "Find-16" 및 "Find-8" 로직 회로가 병렬로 이용될 것이고, 이하 마찬가지일 것이다.
그에 따라, 본 발명의 실시예들은, A-유형 포트들 및 E-유형 포트들 둘 다를 채우려고 시도할 것이기 때문에, 디스패치 효율이 높다는 장점을 가진다. 그에 부가하여, 본 발명의 실시예들은 양 유형의 블록들 사이에 더 나은 전체적인 에이지 우선순위 부여를 가진다. 마지막으로, Find-8 및 Find-4 회로가 병렬로 이용되기 때문에, 본 발명의 실시예들은 또한 스케줄링 절차를 수행함에 있어서 경쟁력 있는 지연 시간을 유지한다.
하나의 실시예에서, 비순차 마이크로프로세서 파이프라인(out-of-order microprocessor pipeline)에서 명령어 스케줄링을 수행하는 방법이 개시되어 있다. 이 방법은 스케줄러로부터 디스패치할 제1 명령어 집합을 선택하는 단계를 포함하고, 여기서 스케줄러는 2가지 유형의 명령어들을 디스패치하는 동작을 하며, 여기서 실행 모듈은 2가지 유형의 실행 유닛들을 포함한다. 제1 유형의 실행 유닛은 제1 유형의 명령어 및 제2 유형의 명령어 둘 다를 실행하고, 제2 유형의 실행 유닛은 제2 유형의 명령어만을 실행한다. 이 방법은 또한 디스패치할 제2 명령어 집합을 선택하는 단계를 포함하고, 여기서 제2 명령어 집합은 제1 명령어 집합의 부분집합이며, 여기서 제2 명령어 집합은 제2 유형의 명령어들만을 포함한다. 다음에, 이 방법은 제3 명령어 집합을 결정하는 단계를 포함하고, 여기서 제3 명령어 집합은 제1 명령어 집합의 부분집합이며, 여기서 제3 명령어 집합은 제2 명령어 집합의 일부로서 선택되지 않은 명령어들을 포함한다. 마지막으로, 이 방법은 제2 명령어 집합을 제2 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 디스패치하고 제3 명령어 집합을 제1 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 추가로 디스패치하는 단계를 포함한다.
다른 실시예에서, 비순차 마이크로프로세서 파이프라인에서 명령어들을 스케줄링하는 방법을 수행하도록 구성된 프로세서 유닛이 개시되어 있다. 이 방법은 스케줄러로부터 디스패치할 제1 명령어 집합을 선택하는 단계를 포함하고, 여기서 스케줄러는 2가지 유형의 명령어들을 디스패치하는 동작을 하며, 여기서 실행 모듈은 2가지 유형의 실행 유닛들을 포함한다. 제1 유형의 실행 유닛은 제1 유형의 명령어 및 제2 유형의 명령어 둘 다를 실행하고, 제2 유형의 실행 유닛은 제2 유형의 명령어만을 실행한다. 이 방법은 또한 디스패치할 제2 명령어 집합을 선택하는 단계를 포함하고, 여기서 제2 명령어 집합은 제1 명령어 집합의 부분집합이며, 여기서 제2 명령어 집합은 제2 유형의 명령어들만을 포함한다. 다음에, 이 방법은 제3 명령어 집합을 결정하는 단계를 포함하고, 여기서 제3 명령어 집합은 제1 명령어 집합의 부분집합이며, 여기서 제3 명령어 집합은 제2 명령어 집합의 일부로서 선택되지 않은 명령어들을 포함한다. 마지막으로, 이 방법은 제2 명령어 집합을 제2 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 디스패치하고 제3 명령어 집합을 제1 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 추가로 디스패치하는 단계를 포함한다.
다른 실시예에서, 비순차 마이크로프로세서 파이프라인에서 명령어들을 스케줄링하는 방법을 수행하도록 구성된 장치가 개시되어 있다. 이 장치는 메모리, 메모리에 통신 연결된(communicatively coupled) 프로세서를 포함하고, 여기서 프로세서는 명령어들을 비순차적으로 처리하도록 구성되어 있다. 이 프로세서는 (a) 스케줄러로부터 실행 모듈로 디스패치할 제1 명령어 집합을 선택하고 - 여기서 스케줄러는 2가지 유형의 명령어들을 디스패치하는 동작을 하고, 여기서 실행 모듈은 2가지 유형의 실행 유닛들을 포함하며, 여기서 제1 유형의 실행 유닛은 제1 유형의 명령어 및 제2 유형의 명령어 둘 다를 실행하고, 여기서 제2 유형의 실행 유닛은 제2 유형의 명령어만을 실행함 -; (b) 스케줄러로부터 디스패치할 제2 명령어 집합을 선택하며 - 여기서 제2 명령어 집합은 제1 명령어 집합의 부분집합이고, 여기서 제2 명령어 집합은 제2 유형의 명령어들만을 포함함 -; (c) 제3 명령어 집합을 결정하고 - 여기서 제3 명령어 집합은 제1 명령어 집합의 부분집합이고, 여기서 제3 명령어 집합은 제2 명령어 집합의 일부로서 선택되지 않은 명령어들을 포함함 -; (d) 제2 명령어 집합을 제2 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 디스패치하고 제3 명령어 집합을 제1 유형의 실행 유닛을 사용하여 실행하기 위해 실행 모듈로 추가로 디스패치하도록 추가로 구성되어 있다.
이하의 상세한 설명은 첨부 도면들과 함께 본 발명의 특성 및 장점들의 더 나은 이해를 제공할 것이다.
본 발명의 실시예들이 첨부 도면의 도면들에 제한이 아닌 예로서 도시되어 있고, 여기서, 유사한 참조 번호들이 유사한 요소들을 가리킨다.
도 1은 본 발명의 실시예들에 따른, 예시적인 컴퓨터 시스템을 나타낸 도면.
도 2는 비대칭 실행 유닛들에 대해 불균일한 명령어들이 선택될 수 있는 방식의 일례를 나타낸 도면.
도 3은 본 발명의 실시예들이 본 발명의 하나의 실시예에 따라 구현될 수 있는 비순차 마이크로프로세서에 대한 파이프라인의 일례를 나타낸 도면.
도 4는 본 발명의 실시예들에 따른, 비대칭 실행 유닛들에 대한 명령어들을 스케줄링하는 방식을 나타낸 블록도.
도 5는 본 발명의 실시예들에 따른, 사이클당 8개의 명령어들을 디스패치하는 스케줄러에 의해 비대칭 실행 유닛들에 대해 명령어들을 스케줄링하는 방식을 나타낸 표.
도 6은 본 발명의 실시예들에 따른, 비순차 마이크로-아키텍처에서 명령어 스케줄링을 위한 예시적인 컴퓨터 제어 프로세스(computer controlled process)에 대한 플로우차트.
이제부터, 본 개시 내용의 다양한 실시예들을 상세히 언급할 것이며, 그의 예들이 첨부 도면들에 예시되어 있다. 이 실시예들과 관련하여 기술되어 있지만, 이 실시예들이 본 개시 내용을 이 실시예들로 제한하는 것으로 의도되어 있지 않다는 것을 잘 알 것이다. 이와 반대로, 본 개시 내용은 첨부된 청구범위에 의해 한정되는 본 개시 내용의 사상 및 범주 내에 포함될 수 있는 대안들, 수정들 및 등가물들을 포함하는 것으로 의도되어 있다. 게다가, 본 개시 내용에 대한 이하의 상세한 설명에서, 본 개시 내용의 철저한 이해를 제공하기 위해 다수의 구체적인 상세들이 기재되어 있다. 그렇지만, 본 개시 내용이 이 구체적인 상세들 없이 실시될 수 있다는 것을 잘 알 것이다. 다른 경우에, 본 개시 내용의 양태들을 불필요하게 모호하게 하지 않기 위해 공지의 방법들, 절차들, 구성요소들 및 회로들이 상세히 기술되지 않았다.
표기법 및 명명법
이하의 상세한 설명의 어떤 부분들은 컴퓨터 메모리 내의 데이터 비트들에 대한 동작들의 절차들, 로직 블록들, 처리 및 다른 심볼 표현들로 제시되어 있다. 이 설명들 및 표현들은 데이터 처리 분야의 통상의 기술자가 자신의 작업의 내용을 다른 통상의 기술자들에게 가장 효과적으로 전달하기 위해 사용되는 수단이다. 본 출원에서, 절차, 로직 블록, 프로세스 등은 원하는 결과를 가져오는 자기 모순 없는(self-consistent) 단계들 또는 명령어들의 시퀀스인 것으로 생각된다. 단계들은 물리적 양들의 물리적 조작들을 이용하는 것이다. 꼭 그럴 필요는 없지만, 보통, 이 양들은 컴퓨터 시스템에서 저장, 전송, 결합, 비교, 그리고 다른 방식으로 조작될 수 있는 전기 또는 자기 신호의 형태를 갖는다. 대체적으로 흔히 사용되기 때문에, 이 신호들을 트랜잭션, 비트, 값, 요소, 심볼, 문자, 샘플, 픽셀 등으로 지칭하는 것이 때로는 편리한 것으로 밝혀졌다.
그렇지만, 이 용어들 및 유사한 용어들 모두가 적절한 물리적 양들과 연관될 수 있고 이 양들에 적용되는 편리한 라벨들에 불과하다는 것을 염두에 두어야 한다. 달리 구체적으로 언급되지 않는 한, 이하의 논의들로부터 명백한 바와 같이, 본 개시 내용 전체에 걸쳐, "선택", "디스패치", "결정", "저장", "발행", "판정", "유효성 확인(validating)" 등과 같은 용어들을 이용하는 논의들이 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스 또는 프로세서[예컨대, 도 1의 시스템(110)]의 동작들 및 프로세스들[예컨대, 도 6의 플로우차트(600)]을 지칭한다는 것을 잘 알 것이다. 컴퓨터 시스템 또는 유사한 전자 컴퓨팅 디바이스는 컴퓨터 시스템 메모리들, 레지스터들 또는 다른 이러한 정보 저장, 전송 또는 디스플레이 디바이스들 내의 물리적(전자적) 양들로서 표현되는 데이터를 조작하고 변환한다.
본 명세서에 기술된 실시예들이 일반적으로, 하나 이상의 컴퓨터들 또는 다른 디바이스들에 의해 실행되는, 어떤 형태의 컴퓨터 판독 가능 저장 매체 상에 존재하는 컴퓨터 실행가능 명령어들(프로그램 모듈 등)과 관련하여 논의될 수 있다. 제한이 아닌 예로서, 컴퓨터 판독 가능 저장 매체는 비일시적 컴퓨터 판독 가능 저장 매체 및 통신 매체를 포함할 수 있고; 비일시적 컴퓨터 판독가능 매체는 일시적인 전파 신호(transitory, propagating signal)를 제외한 모든 컴퓨터 판독가능 매체를 포함한다. 일반적으로, 프로그램 모듈은 특정의 작업들을 수행하거나 특정의 추상 데이터 유형들을 구현하는 루틴, 프로그램, 객체, 구성요소, 데이터 구조 등을 포함한다. 프로그램 모듈의 기능이 다양한 실시예들에서 원하는 바에 따라 결합되거나 분산되어 있을 수 있다.
컴퓨터 저장 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위해 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 이동식 및 비이동식 매체를 포함한다. 컴퓨터 저장 매체는 RAM(random access memory), ROM(read only memory), EEPROM(electrically erasable programmable ROM), 플래시 메모리 또는 다른 메모리 기술, CD-ROM(compact disk ROM), DVD(digital versatile disk) 또는 다른 광 저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 디바이스, 또는 원하는 정보를 저장하는 데 사용될 수 있고 그 정보를 검색하기 위해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들로 제한되지 않는다.
통신 매체는 컴퓨터 실행가능 명령어, 데이터 구조, 및 프로그램 모듈을 구현할 수 있고, 임의의 정보 전달 매체(information delivery media)를 포함한다. 제한이 아닌 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 연결과 같은 유선 매체, 및 음향, RF(radio frequency), 적외선, 및 다른 무선 매체와 같은 무선 매체를 포함한다. 상기한 것들 중 임의의 것의 조합들이 또한 컴퓨터 판독가능 매체의 범주 내에 포함될 수 있다.
도 1은 본 개시 내용의 일 실시예의 프로세서(114)와 통합될 수 있는 컴퓨팅 시스템(110)의 일례의 블록도이다. 컴퓨팅 시스템(110)은 컴퓨터 판독 가능 명령어를 실행할 수 있는 임의의 단일 또는 다중 프로세서 컴퓨팅 디바이스 또는 시스템을 광범위하게 나타낸다. 컴퓨팅 시스템(110)의 예는 워크스테이션, 랩탑, 클라이언트 측 단말기, 서버, 분산 컴퓨팅 시스템, 핸드헬드 디바이스 또는 임의의 다른 컴퓨팅 시스템 또는 디바이스를 포함하지만 이에 한정되지 않는다. 컴퓨팅 시스템(110)은 그의 가장 기본적인 구성에서 본 발명의 일 실시예의 적어도 하나의 프로세서(114), 및 시스템 메모리(116)를 포함할 수 있다.
프로세서(114)는 본 발명의 실시예들을 포함하며, 일반적으로 데이터를 처리하거나 명령어를 해석 및 실행할 수 있는 임의 타입 또는 형태의 처리 유닛을 나타낸다. 소정 실시예들에서, 프로세서(114)는 소프트웨어 애플리케이션 또는 모듈로부터 명령어를 수신할 수 있다. 이러한 명령어는 프로세서(114)가 본 명세서에서 설명 및/또는 예시되는 실시예들 중 하나 이상의 기능을 수행하게 할 수 있다. 일 실시예에서, 프로세서(114)는 비순차적 마이크로프로세서일 수 있다. 다른 실시예에서, 프로세서(114)는 수퍼스칼라 프로세서일 수 있다. 또 다른 실시예에서, 프로세서(114)는 병렬로 동작하는 다수의 프로세서를 포함할 수 있다.
시스템 메모리(116)는 일반적으로 데이터 및/또는 다른 컴퓨터 판독 가능 명령어를 저장할 수 있는 임의 타입 또는 형태의 휘발성 또는 비휘발성 저장 디바이스 또는 매체를 나타낸다. 시스템 메모리(116)의 예는 RAM, ROM, 플래시 메모리 또는 임의의 다른 적절한 메모리 디바이스를 포함하지만 이에 한정되지 않는다. 필요한 것은 아니지만, 소정 실시예들에서, 컴퓨팅 시스템(110)은 (예를 들어, 시스템 메모리(116)와 같은) 휘발성 메모리 유닛 및 (예로서, 일차 저장 디바이스(primary storage device)(132)와 같은) 비휘발성 저장 디바이스 양자를 포함할 수 있다.
컴퓨팅 시스템(110)은 프로세서(114) 및 시스템 메모리(116)에 더하여 하나 이상의 컴포넌트 또는 요소도 포함할 수 있다. 예를 들어, 도 1의 실시예에서, 컴퓨팅 시스템(110)은 메모리 제어기(118), 입출력(I/O) 제어기(120) 및 통신 인터페이스(122)를 포함하며, 이들 각각은 통신 기반구조(112)를 통해 상호접속될 수 있다. 통신 기반구조(112)는 일반적으로 컴퓨팅 디바이스의 하나 이상의 컴포넌트 사이의 통신을 용이하게 할 수 있는 임의 타입 또는 형태의 기반구조를 나타낸다. 통신 기반구조(112)의 예는 (ISA(Industry Standard Architecture), PCI(Peripheral Component Interconnect), PCIe(PCI Express) 또는 유사한 버스와 같은) 통신 버스 및 네트워크를 포함하지만 이에 한정되지 않는다.
메모리 제어기(118)는 일반적으로 메모리 또는 데이터를 처리하거나 컴퓨팅 시스템(110)의 하나 이상의 컴포넌트 간의 통신을 제어할 수 있는 임의 타입 또는 형태의 디바이스를 나타낸다. 예를 들어, 메모리 제어기(118)는 통신 기반구조(112)를 통한 프로세서(114), 시스템 메모리(116) 및 I/O 제어기(120) 간의 통신을 제어할 수 있다.
I/O 제어기(120)는 일반적으로 컴퓨팅 디바이스의 입력 및 출력 기능들을 조정 및/또는 제어할 수 있는 임의 타입 또는 형태의 모듈을 나타낸다. 예를 들어, I/O 제어기(120)는 컴퓨팅 시스템(110)의 하나 이상의 요소, 예로서 프로세서(114), 시스템 메모리(116), 통신 인터페이스(122), 디스플레이 어댑터(126), 입력 인터페이스(130) 및 저장 인터페이스(134) 사이의 데이터의 전송을 제어 또는 촉진할 수 있다.
통신 인터페이스(122)는 예시적인 컴퓨팅 시스템(110)과 하나 이상의 추가 디바이스 간의 통신을 촉진할 수 있는 임의 타입 또는 형태의 통신 디바이스 또는 어댑터를 광범위하게 나타낸다. 예를 들어, 통신 인터페이스(122)는 컴퓨팅 시스템(110)과 추가적인 컴퓨팅 시스템들을 포함하는 비공개 또는 공개 네트워크 간의 통신을 촉진할 수 있다. 통신 인터페이스(122)의 예는 (네트워크 인터페이스 카드와 같은) 유선 네트워크 인터페이스, (무선 네트워크 인터페이스 카드와 같은) 무선 네트워크 인터페이스, 모뎀 및 임의의 다른 적절한 인터페이스를 포함하지만 이에 한정되지 않는다. 일 실시예에서, 통신 인터페이스(122)는 인터넷과 같은 네트워크에 대한 직접 링크를 통해 원격 서버에 대한 직접 접속을 제공한다. 통신 인터페이스(122)는 또한 그러한 접속을 임의의 다른 적절한 접속을 통해 간접적으로 제공할 수 있다.
통신 인터페이스(122)는 또한 외부 버스 또는 통신 채널을 통한 컴퓨팅 시스템(110)과 하나 이상의 추가적인 네트워크 또는 저장 디바이스 간의 통신을 촉진하도록 구성되는 호스트 어댑터를 나타낼 수 있다. 호스트 어댑터의 예는 SCSI(Small Computer System Interface) 호스트 어댑터, USB(Universal Serial Bus) 호스트 어댑터, IEEE(Institute of Electrical and Electronics Engineers) 1394 호스트 어댑터, SATA(Serial Advanced Technology Attachment) 및 eSATA(External SATA) 호스트 어댑터, ATA(Advanced Technology Attachment) 및 PATA(Parallel ATA) 호스트 어댑터, 광섬유 채널 인터페이스 어댑터, 이더넷 어댑터 등을 포함하지만 이에 한정되지 않는다. 통신 인터페이스(122)는 또한 컴퓨팅 시스템(110)이 분산 또는 원격 컴퓨팅에 참여(engage)하는 것을 가능하게 할 수 있다. 예를 들어, 통신 인터페이스(122)는 원격 디바이스로부터 명령어를 수신하거나, 실행을 위해 명령어를 원격 디바이스로 전송할 수 있다.
도 1에 도시된 바와 같이, 컴퓨팅 시스템(110)은 디스플레이 어댑터(126)를 통해 통신 기반구조(112)에 결합된 적어도 하나의 디스플레이 디바이스(124)도 포함할 수 있다. 디스플레이 디바이스(124)는 일반적으로 디스플레이 어댑터(126)에 의해 전달되는 정보를 시각적으로 표시할 수 있는 임의 타입 또는 형태의 디바이스를 나타낸다. 유사하게, 디스플레이 어댑터(126)는 일반적으로 디스플레이 디바이스(124) 상에서의 표시를 위해 그래픽, 텍스트 및 다른 데이터를 전달하도록 구성되는 임의 타입 또는 형태의 디바이스를 나타낸다.
도 1에 도시된 바와 같이, 컴퓨팅 시스템(110)은 입력 인터페이스(130)를 통해 통신 기반구조(112)에 결합된 적어도 하나의 입력 디바이스(128)도 포함할 수 있다. 입력 디바이스(128)는 일반적으로 컴퓨터 또는 사람에 의해 생성되는 입력을 컴퓨팅 시스템(110)에 제공할 수 있는 임의 타입 또는 형태의 입력 디바이스를 나타낸다. 입력 디바이스(128)의 예는 키보드, 포인팅 디바이스, 음성 인식 디바이스 또는 임의의 다른 입력 디바이스를 포함하지만 이에 한정되지 않는다.
도 1에 도시된 바와 같이, 컴퓨팅 시스템(110)은 저장 인터페이스(134)를 통해 통신 기반구조(112)에 결합된 일차 저장 디바이스(132) 및 백업 저장 디바이스(133)도 포함할 수 있다. 저장 디바이스들(132, 133)은 일반적으로 데이터 및/또는 다른 컴퓨터 판독 가능 명령어를 저장할 수 있는 임의 타입 또는 형태의 저장 디바이스 또는 매체를 나타낸다. 예를 들어, 저장 디바이스들(132, 133)은 자기 디스크 드라이브(예로서, 소위 하드 드라이브), 플로피 디스크 드라이브, 자기 테이프 드라이브, 광 디스크 드라이브, 플래시 드라이브 등일 수 있다. 저장 인터페이스(134)는 일반적으로 컴퓨팅 시스템(110)의 저장 디바이스들(132, 133)과 다른 컴포넌트들 사이에 데이터를 전송하기 위한 임의 타입 또는 형태의 인터페이스 또는 디바이스를 나타낸다.
일례에서는, 데이터베이스들(140)이 일차 저장 디바이스(132) 내에 저장될 수 있다. 데이터베이스들(140)은 단일 데이터베이스 또는 컴퓨팅 디바이스의 부분들을 나타낼 수 있거나, 다수의 데이터베이스 또는 컴퓨팅 디바이스를 나타낼 수 있다. 예를 들어, 데이터베이스들(140)은 컴퓨팅 시스템(110)의 일부를 나타낼 수 있다(그에 저장될 수 있다). 대안으로서, 데이터베이스들(140)은 컴퓨팅 시스템(110)과 같은 컴퓨팅 디바이스에 의해 액세스될 수 있는 하나 이상의 물리적으로 분리된 디바이스를 나타낼 수 있다(그에 저장될 수 있다).
도 1을 계속 참조하면, 저장 디바이스들(132, 133)은 컴퓨터 소프트웨어, 데이터 또는 다른 컴퓨터 판독 가능 정보를 저장하도록 구성되는 이동식 저장 유닛으로부터 판독하고/하거나 그에 기입하도록 구성될 수 있다. 적절한 이동식 저장 유닛의 예는 플로피 디스크, 자기 테이프, 광 디스크, 플래시 메모리 디바이스 등을 포함하지만 이에 한정되지 않는다. 저장 디바이스들(132, 133)은 컴퓨터 소프트웨어, 데이터 또는 다른 컴퓨터 판독 가능 명령어가 컴퓨팅 시스템(110) 내에 로딩되는 것을 가능하게 하기 위한 다른 유사한 구조들 또는 디바이스들도 포함할 수 있다. 예를 들어, 저장 디바이스들(132, 133)은 소프트웨어, 데이터 또는 다른 컴퓨터 판독 가능 명령어를 판독 및 기입하도록 구성될 수 있다. 저장 디바이스들(132, 133)은 컴퓨팅 시스템(110)의 일부일 수도 있거나, 다른 인터페이스 시스템들을 통해 액세스되는 개별 디바이스들일 수 있다.
많은 다른 디바이스 또는 서브시스템이 컴퓨팅 시스템(110)에 접속될 수 있다. 이와 달리, 본 명세서에서 설명되는 실시예들을 실시하기 위해 도 1에 도시된 컴포넌트들 및 디바이스들 모두가 존재할 필요는 없다. 전술한 디바이스들 및 서브시스템들은 도 1에 도시된 것과 다른 방식들로 상호접속될 수도 있다. 컴퓨팅 시스템(110)은 또한 임의 수의 소프트웨어, 펌웨어 및/또는 하드웨어 구성을 이용할 수 있다. 예를 들어, 본 명세서에서 개시되는 실시예들은 컴퓨터 판독 가능 매체 상에 (컴퓨터 소프트웨어, 소프트웨어 애플리케이션, 컴퓨터 판독 가능 명령어 또는 컴퓨터 제어 로직으로도 지칭되는) 컴퓨터 프로그램으로서 인코딩될 수 있다.
컴퓨터 프로그램을 포함하는 컴퓨터 판독 가능 매체가 컴퓨팅 시스템(110) 내에 로딩될 수 있다. 이어서, 컴퓨터 판독 가능 매체 상에 저장된 컴퓨터 프로그램의 전부 또는 일부가 시스템 메모리(116) 및/또는 저장 디바이스들(132, 133)의 다양한 부분들 내에 저장될 수 있다. 프로세서(114)에 의해 실행될 때, 컴퓨팅 시스템(110) 내에 로딩된 컴퓨터 프로그램은 프로세서(114)가 본 명세서에서 설명 및/또는 예시되는 실시예들의 기능들을 수행하게 하고/하거나 수행하기 위한 수단이 되게 할 수 있다. 추가로 또는 대안으로서, 본 명세서에서 설명 및/또는 예시되는 실시예들은 펌웨어 및/또는 하드웨어에서 구현될 수 있다.
비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치
본 발명의 실시예들은 실행 유닛이 다수의 유형의 명령어들(예컨대, A-유형의 명령어들 및 E-유형의 명령어들 둘 다)을 실행할 수 있는 방법 및 장치를 제공한다. 게다가, 본 발명의 실시예들은 디스패치 처리량을 최적화하고, 더 신생의 명령어 블록들보다 오래된 명령어 블록들에 우선순위를 부여하며, 경쟁력 있는 지연 시간을 유지하는, 비대칭 실행 유닛들에 대한 보다 효율적인 스케줄링을 제공한다.
본 발명의 실시예들은 비대칭 실행 유닛 유형들(A 및 E)을 지원하고, 여기서 A-유형 실행 유닛은 A-유형 명령어들만을 지원할 수 있지만, E-유형 실행 유닛은 A-유형의 명령어들 및 E-유형의 명령어들 둘 다를 지원할 수 있다. 그에 따라, A-유형 명령어들은 A 유닛 및 E 유닛 둘 다에서 실행될 수 있지만, E 명령어들은 E 유닛들에서만 실행될 수 있다. 따라서, A-유형 실행 유닛들은 E-유형 실행 유닛들의 부분집합인 것으로 간주될 수 있다.
하나의 실시예에서, 스케줄러는 A 실행 유닛 포트들을 먼저 채우고, 이어서 A 실행 유닛들에 의해 선택되지 않은 다른 명령어 블록들 모두로 E 실행 유닛 포트들을 채운다. 하나의 실시예에서, 스케줄러는 "Find-8" 및 "Find-4" 로직 회로를 포함한다. Find-8 회로는 선택 기준을 충족시키는 처음 8개의 가장 오래된 명령어들이 있는지 스케줄러에서의 디스패치 범위(dispatch range)를 탐색한다. 한편, Find-4 회로는 처음 4개의 가장 오래된 A-유형 명령어 블록들이 있는지 탐색하기 위해 Find-8 회로와 병렬로 이용된다. Find-4 회로의 결과들은 A-유형 실행 유닛들을 스케줄링하는 데 사용된다. Find-4 회로에 의해 아직 선택되지 않은 나머지 명령어들 중에서, 가장 오래된 4개의 명령어들이 이어서 E-유형 실행 유닛들에 대해 스케줄링된다. 예를 들어, Find-8 회로가 3개의 A-유형 명령어들 및 5개의 E-유형 명령어들을 선택하고 Find-4 회로가 3개의 A-유형 명령어들을 선택하는 경우(Find-8 로직에 의해서도 선택됨), 3개의 A-유형 명령어들은 A 포트들에 대해 스케줄링되는 반면, 나머지 5개의 E-유형 명령어들 중 가장 오래된 4개는 E 포트들에 대해 스케줄링된다. 그렇지만, 본 발명이 이 실시예로 제한되지 않는다. 예를 들어, 스케줄러가 하나의 사이클에서 16개의 명령어들을 디스패치할 수 있는 경우, "Find-16" 및 "Find-8" 로직 회로가 병렬로 이용될 것이고, 이하 마찬가지일 것이다.
그에 따라, 본 발명의 실시예들은, A-유형 포트들 및 E-유형 포트들 둘 다를 채우려고 시도할 것이기 때문에, 디스패치 효율이 높다는 장점을 가진다. 그에 부가하여, 본 발명의 실시예들은 양 유형의 블록들 사이에 더 나은 전체적인 에이지 우선순위 부여(overall age prioritization)를 가진다. 마지막으로, Find-8 및 Find-4 회로가 병렬로 이용되기 때문에, 본 발명의 실시예들은 또한 스케줄링 절차를 수행함에 있어서 경쟁력 있는 지연 시간을 유지한다.
도 2는 비대칭 실행 유닛들에 대해 불균일한 명령어들이 선택될 수 있는 방식의 일례를 나타낸 것이다. A-유형 명령어들은 A 유닛 및 E 유닛 둘 다에서 실행될 수 있지만, E 명령어들은 E 유닛들에서만 실행될 수 있다. 그에 따라, 앞서 언급된 바와 같이, A-유형 실행 유닛들은 E-유형 실행 유닛들의 부분집합인 것으로 간주될 수 있다. 도 2는 비대칭 실행 유닛들에 대해 불균일한 명령어들이 선택될 수 있는 방법의 일례를 나타낸 것이다. 명령어들(272, 276, 278, 284 및 286)은 A-유형 명령어들인 반면, 명령어들(274, 280, 및 282)은 E-유형 명령어들이다. 스케줄러(280)는 명령어들을 비대칭 실행 유닛들로 디스패치하고, 여기서 실행 유닛들(252, 254, 256 및 258)은 A-유형 실행 유닛들인 반면, 실행 유닛들(260, 262, 264 및 266)은 E-유형 실행 유닛들이다. 스케줄러(280)는 5개의 A-유형 명령어들 및 3개의 E-유형 명령어들을 포함한다. E-유형 명령어들 모두가 E-유형 실행 유닛들에서만 실행되는 반면, A-유형 명령어들은 A-유형 및 E-유형 실행 유닛들 둘 다로 디스패치된다. 예를 들어, 도 2에 도시된 바와 같이, 명령어(284)(A-유형 명령어)는 실행 유닛(258)(A-유형 실행 유닛)에서 실행되는 반면, 명령어(286)(역시 A-유형 명령어)는 실행 유닛(266)(E-유형 실행 유닛)에서 실행된다.
앞서 언급한 바와 같이, A-유형 명령어의 예는 덧셈 및 뺄셈 연산과 같은 정수 연산인 반면, E-유형 명령어의 예는 부동 소수점 덧셈, 부동 소수점 뺄셈, 및 부동 소수점 곱셈과 같은 부동 소수점 연산이다. 그에 따라, E-유형 실행 유닛들이, 본 발명의 실시예들에 따라, A-유형 명령어들을 지원하도록 약간 변경될 수 있다. 그렇게 하는 것은 E-유형 실행 유닛들을 약간 더 논리적으로 복잡하게 만들지만, 치러지는 대가는 최소이고 유연성 및 지연 시간의 면에서 얻어지는 이점들이 그보다 더 크다.
도 3은 본 발명의 실시예들이 본 발명의 하나의 실시예에 따라 구현될 수 있는 비순차 마이크로프로세서에 대한 파이프라인의 일례를 나타낸 도면이다.
도 3에 예시된 바와 같이, 명령어들이 페치 스테이지(302)에서 페치되고 페치 스테이지(302) 내의 명령어 페치 큐(instruction fetch queue)(IFQ)(도시 생략)에 위치된다. 이 명령어들은 레지스터 파일(register file)(310)에 저장되는 아키텍처 레지스터(architectural register)들을 참조한다. 명령어들이 페치 유닛(302)으로부터 디스패치된 후에, 명령어들은 디코드 모듈(304)에 의해 디코딩되고, ROB(308) 및 발행 큐(issue queue)(IQ)(306)에 위치된다. 본 발명의 일 실시예에서, 스케줄러 모듈(372)은 ROB(308) 및 IQ(306)를 포함한다. 명령어들이 스케줄러 모듈(372)을 사용하여 IQ(306)로부터 비순차적으로 발행될 때, 명령어들은 실행 모듈(312)에 의해 실행된다.
앞서 논의된 바와 같이, 본 발명의 하나의 실시예에서, 실행 모듈(312)은 비대칭 실행 유닛들(A 및 E)을 포함하고, 여기서 A-유형 실행 유닛은 A-유형 명령어들만을 지원할 수 있지만, E-유형 실행 유닛은 A-유형의 명령어들 및 E-유형의 명령어들 둘 다를 지원할 수 있다. 그에 따라, A-유형 명령어들은 A 유닛 및 E 유닛 둘 다에서 실행될 수 있지만, E 명령어들은 E 유닛들에서만 실행될 수 있다. 그에 따라, A-유형 실행 유닛들은 E-유형 실행 유닛들의 부분집합일 수 있다.
하나의 실시예에서, 라이트백 모듈(write back module)(314)은 먼저 그 명령어들로부터의 결과 값들을 ROB(308)에 있는 임시 레지스터들에 다시 기입할 수 있다. ROB(308)는 명령어들이 파이프라인에 들어간 프로그램 순서를 추적하고, 이 명령어들 각각에 대해, ROB는 물리 레지스터 파일(physical register file)(380)에 임시 레지스터 저장소(temporary register storage)를 유지한다. 물리 레지스터 파일은, 본 발명의 일 실시예에서, 명령어들이 스케줄러로부터 디스패치될 때 동적으로 할당된다. 명령어들이 디스패치될 때 물리 레지스터 파일이 할당되기 때문에, 물리 레지스터 파일은 에이지 순서(age order)로 되어 있지 않다. 물리 레지스터 파일은 비순차적 엔트리들을 저장하고, 엔트리들이 아키텍처 레지스터 파일(310)로 순차적으로 리타이어(retire)되는 것을 기다린다.
ROB에서의 가장 오래된 명령어들이 유효한 결과를 생성할 때, 그 명령어들은 안전하게 커밋(commit)될 수 있다. 즉, 그 명령어들의 결과들이 영구적인 것으로 될 수 있는데, 그 이유는 그 명령어들의 효과를 원상으로 돌릴 수 있는 예측 오류(mispredict) 또는 예외(exception)를 야기할 수 있는 이전의 명령어가 없기 때문이다. 명령어들이 커밋될 준비가 되어 있을 때, ROB(308)는 그 명령어들에 대한 임시 레지스터들에 있는 대응하는 값들을 아키텍처 레지스터 파일(310)로 이동시킬 것이다. 따라서, ROB의 순차적 커밋 프로세스(in-order commit process)를 통해, 레지스터 파일(310)에 있는 결과들이 영구적인 것으로 되고 아키텍처적으로 보이게 된다.
IQ(306)로부터 비순차적으로 발행되는 명령어들이 또한 로드(load)들 및 스토어(store)들을 포함할 수 있다. 로드들 및 스토어들이 IQ(306)로부터 비순차적으로 발행될 때, 그 명령어들이 커밋될 수 있기 전에 해결될 필요가 있는 그들 사이의 메모리 의존성들(memory dependencies)이 있다. 그에 따라, 로드 및 스토어 명령어들이 로드 스토어 큐(LSQ; Load Store Queue)(316)에 저장되는 반면, 그들 사이의 의존성들은, 그들의 결과 값들이 메모리(318)로 커밋될 수 있기 전에, ROB(308)의 도움으로 해결된다.
도 4는 본 발명의 실시예들에 따른, 비대칭 실행 유닛들에 대한 명령어들을 스케줄링하는 방식을 나타낸 블록도이다.
비대칭 실행 유닛들에 대한 명령어들을 스케줄링하는 몇 가지 방식들이 있다. 앞서 논의된 하나의 방식은 A-유형 실행 유닛들에 대해서는 A-유형 명령어들을 선택하고 E-유형 실행 유닛들에 대해서는 E-유형 명령어들을 선택하는 것이다. 이 유형의 원시적인 스케줄링 방식의 단점들은 이전에 논의되었다.
명령어들을 스케줄링하는 다른 방식은 E-유형 명령어들을 먼저 선택하여 E-유형 실행 유닛들을 채우는 것이고, 충분한 E-유형 명령어 블록들이 없는 경우, 추가의 A-유형 명령어 블록들을 선택하여 E 유닛들을 채우고 이어서 A 유닛들을 채운다. 이 방식에서의 첫 번째 문제점은 2-단계 절차가 순차적으로 수행되어야 한다는 것이고, 이는 그 절차가 지연 시간 친화적(latency friendly)이지 않다는 것을 의미한다. 둘째, 이 절차는 전체적인 에이지 우선순위 부여를 갖지 않는다. 예를 들어, 특정 경우들에서, 이 절차는 오래된 A 명령어들보다 더 신생의 E 명령어들을 선택하여 E 실행 유닛들을 채울 것이다.
마지막으로, 명령어들을 스케줄링하는 제3 방식은 (a) A 실행 포트들을 먼저 채우고, 이어서 (b) 이전의 단계에 의해 선택되지 않은 다른 명령어 블록들 모두로 E 포트들을 채우는 것일 것이다. 환언하면, 이 절차는 첫 번째 A-유형 명령어 블록들에 우선순위를 부여할 것이고, 예컨대, 사이클당 8개의 명령어들을 디스패치하고 4개의 A-유형 실행 유닛들을 포함하는 스케줄러에서, 이는 처음 4개의 A-유형 명령어 블록들에 우선순위를 부여할 것이다. E 실행 유닛들은, A 또는 E-유형의 명령어들을 취할 수 있기 때문에, A-유형 실행 유닛들을 채우려고 시도한 후에 채워질 수 있다.
이 절차는, 양 유형의 실행 포트들(A 및 E)을 채우려고 시도할 것이기 때문에, 높은 효율을 가진다. 이 절차는 양 유형의 블록들 간의 전체적인 에이지 우선순위 부여의 면에서 잘 동작한다. A-유형 블록들이 E-유형 블록들보다 더 신생일 때 A-유형 블록들에 너무 많은 우선순위를 부여하는 것처럼 보일 수 있지만, 이것은 그렇지 않다. 예를 들어, 하나의 사이클에서 8개의 명령어들을 디스패치할 수 있고 4개의 A-유형 실행 유닛들 및 4개의 E-유형 실행 유닛들을 포함하는 스케줄러에서, E-유형 명령어 블록들이 4개까지만 선택될 수 있다. 그 결과, 다섯 번째 E-유형 블록 또는 그 이후의 것이 A-유형 블록들보다 더 오래된 에이지를 갖는지는 아무런 관련이 없다. 그들은 결코 선택될 수 없다. 환언하면, 임의의 주어진 사이클에서 4개의 E-유형 명령어들만이 선택될 수 있기 때문에, 그 절차가 A 실행 포트들을 먼저 채우는 경우, 이는 전체적인 에이지 우선순위 부여에 영향을 미치지 않는다.
디스패치 기회를 최대화하기 위해, 본 발명의 실시예들은, 따라서, 앞서 상세히 기술한 제3 방식에 따라 A 포트들을 먼저 그리고 이어서 E 포트들을 스케줄링하도록 구성되어 있다. 그렇지만, 이 절차의 하나의 단점은 2-단계 구현으로 인해 타이밍 친화적(timing friendly)이지 않다는 것이다. 이것은 문제가 되는데, 그 이유는 고성능 프로세서에서 디스패치 탐색 로직(dispatch search logic)이 지연 시간에 민감하기(latency critical) 때문이다. 이 문제를 해결하기 위해, 본 발명의 실시예들은, 이하에서 논의될 것인 바와 같이, 절차에서의 특정 단계들을 병렬화(parallelize)한다.
도 4는 본 발명의 실시예들에 따른, 비대칭 실행 유닛들에 대한 명령어들을 스케줄링하는 방식을 나타낸 블록도이다. 앞서 논의된 절차를 병렬화하기 위해, 스케줄러(472)에서 Find-4 로직 구조(406)가 Find-8 로직(404)과 병렬로 구성된다. Find-8 로직은 선택 기준을 충족시키는 디스패치될 처음 8개의 가장 오래된 명령어들을 선택하는 동작을 하는 구조이다. Find-4 로직 구조는 선택 기준을 충족시키는 디스패치될 처음 4개의 가장 오래된 명령어들을 선택하는 동작을 한다.
Find-8 구조(404)는 8개의 후보들이 있는지 스케줄러에서의 디스패치 범위에 걸쳐 탐색한다. 사용되는 기준은 명령어 후보들의 준비 완료 비트(ready-bit)이다. 준비 완료 비트가 세트되어 있는 경우, 명령어는 디스패치될 준비가 되어 있다. E-유형 명령어들을 마스킹 제거하여, Find-4 구조(406)는 4개의 A-유형 블록들이 있는지 디스패치 범위에 걸쳐 탐색한다. 이것은 Find-8 동작과 병렬로 수행된다. Find-4 로직은, A-유형 명령어 블록들이 있는지만 탐색하는 부가 기준을 제외하고는, Find-8 로직과 유사하다. Find-8 로직 구조 및 Find-4 로직 구조 둘 다는 디스패치 범위에서 최고 우선순위 블록들이 있는지 탐색한다. 하나의 실시예에서, 로직 구조들은 우선순위를 결정하기 위해 명령어들의 ROB ID(Re-Order Buffer ID)를 사용한다. 다른 실시예에서, 우선순위를 결정하는 데도 사용될 수 있는 인덱스 번호가 스케줄러에서의 각각의 엔트리에 할당될 수 있다.
E-유형 명령어들을 마스킹 제거하고 A-유형 명령어들만을 선택하는 Find-4 모듈(406)로부터의 결과가 실행 모듈(474)에서의 A-유형 실행 유닛들(410)로 전송된다. 환언하면, Find-4 모듈(406)은 E-유형 명령어들을 마스킹 제거하고 4개의 A-유형 블록들이 있는지 디스패치 범위에 걸쳐 탐색한다. 한편, Find-8 모듈(404)은, Find-4 모듈(406)과 병렬로, 가장 오래된 8개의 명령어들(A-유형 및 E-유형 둘 다)을 선택한다. Find-4 구조(406)로부터의 결과들이 이어서 Find-4 구조(406)에 의해 선택되지 않은 나머지 명령어들 중 가장 오래된 것을 E-유형 실행 유닛들(408)로 디스패치하기 위해 Find-8 모듈(404)에 의해 사용된다. 환언하면, Find-4 구조(406)에 의해 선택되는 명령어들은 Find-8 모듈(404)에 의해 선택되는 명령어들로부터 마스킹되고, 나머지 명령어들 중 가장 오래된 4개가 E-유형 실행 유닛들(408)로 디스패치된다. 이 절차의 순 효과는 그러면 더 오래된 A-유형 블록에 E-유형 블록보다 우선순위를 부여하는 것이다.
예를 들어, Find-8 모듈(404)은 최고 우선순위 명령어인 것으로 결정하는 5개의 A-유형 명령어들 및 3개의 E-유형 명령어들을 선택할 수 있다. 이 예에서, Find-4 모듈(406)은 A-유형 실행 유닛들(410)로 디스패치될 5개의 A-유형 명령어들 중 가장 오래된 4개를 선택할 것이다. 그 4개의 가장 오래된 A 명령어들은 이어서 Find-8 모듈(404)에 의해 선택된 명령어 집합으로부터 마스킹 제거될 것이다. 나머지 3개의 E-유형 명령어들 및 1개의 가장 신생의 A-유형 명령어가 이어서 E-유형 실행 유닛들(408)로 디스패치될 것이다.
다른 예로서, Find-8 모듈(404)은 최고 우선순위 명령어인 것으로 결정하는 3개의 A-유형 명령어들 및 5개의 E-유형 명령어들을 선택할 수 있다. 이 예에서, Find-4 모듈(406)은 A-유형 실행 유닛들(410)로 디스패치될 3개의 A-유형 명령어들을 선택할 것이다. 그 3개의 A 명령어들은 이어서 Find-8 모듈(404)에 의해 선택된 명령어 집합으로부터 마스킹 제거될 것이다. Find-8 모듈에 의해 선택된 나머지 5개의 E-유형 명령어들 중에서, 가장 오래된 4개의 E-유형 명령어들이 E-유형 실행 유닛들(408)로 디스패치되도록 선택될 것이다.
하나의 실시예에서, 스케줄러에서 명령어들에 우선순위를 부여하기 위해 사용되는 인덱스 번호 또는 ROB ID가 또한 실행 모듈(474) 내에서 명령어들을 실행하기 위해 사용되는 실행 유닛들에 대한 포트 번호들을 계산하는 데 사용된다.
Find-8 모듈과 함께 Find-4 모듈을 사용하여 동작들을 병렬화한 결과, 상당한 시간 절감이 얻어진다. 이전에 언급된 바와 같이, 기본적인 디스패치 탐색 로직은 고성능 프로세서에서 지연 시간에 민감하다. 예를 들어, A 실행 포트들을 채우고 이어서 E 실행 포트들을 채우는 것이 직렬화된 경우, 각각의 동작은 1 ns 걸릴 수 있고, 그 결과 디스패치 탐색 로직은 2 ns 걸린다. 예를 들어, 1.2 ns 걸릴 수 있는 Find-8 동작을 1 ns 걸릴 수 있는 Find-4 동작과 병렬화하는 것에 의해, 본 발명의 일 실시예는 각각의 사이클에서 디스패치 동안 0.8 ns를 절감할 수 있고, 이는 프로세서 설계 관점에서 볼 때 상당한 것이다. 게다가, Find-4 구조의 결과들을 Find-8 구조의 결과들로부터 분리시키는 마스킹 동작에 소요되는 시간의 양은 Find-4 또는 Find-8 동작들 자체의 지연 시간과 비교하여 그다지 크지 않다.
도 5는 본 발명의 실시예들에 따른, 사이클당 8개의 명령어들을 디스패치하는 스케줄러에 의해 비대칭 실행 유닛들에 대해 명령어들을 스케줄링하는 방식을 나타낸 표이다. 앞서 언급한 바와 같이, 이 예가 사이클당 8개의 명령어들을 선택하고 디스패치하는 스케줄러에 기초하는 반면, 본 발명의 실시예들은 8개보다 더 많거나 더 적은 수의 명령어들을 디스패치하는 스케줄러들의 요구사항들에 적합하도록 용이하게 스케일링될 수 있다.
명령어들(572 내지 599)은 그들의 ROB ID 번호 또는 명령어들을 정렬하고 우선순위를 부여하기 위해 유지되는 임의의 다른 인덱스 번호에 기초한 우선순위의 순서로 되어 있다. Find-8 모듈은 준비 완료 비트가 세트되어 있는 8개의 가장 높은 우선순위의(또는 가장 오래된) 명령어들이 있는지 탐색한다. 그에 따라, Find-8 모듈은, 도 5의 표에서 0 내지 7의 카운트 값으로, 각각, 표시된 바와 같이, 명령어들(572, 574, 576, 578, 580, 588, 590 및 592)을 선택한다. 준비 완료 비트가 어써트되지 않은(unasserted) 명령어들(예컨대, 582, 584 및 586)은 무시된다. 게다가, 최고 우선순위 8을 초과하는 명령어들[예컨대, 명령어들(594, 596, 598 및 599)]이 무시된다.
앞서 언급한 바와 같이, Find-4 로직은 A-유형 블록들이 있는지 디스패치 범위에 걸쳐 탐색하고, 4개 초과가 발견되는 경우 카운트를 포화(saturate)시킨다. 도 5에서의 표의 열 3에 나타낸 바와 같이, 처음 4개의 A-유형 명령어들(572, 574, 580 및 590)을 선택한 후에, Find-4 모듈은 포화되고, Find-8 모듈에 의해서도 선택된 마지막 A-유형 명령어(592)를 선택할 수 없다. 앞서 설명한 바와 같이, 다섯 번째 A-유형 명령어는 E-유형 실행 유닛(408)에 스케줄링하기 위해 전송된다.
도 5에서의 표의 열 4에 나타낸 바와 같이, A-유형 명령어들에 대한 마스크는 Find-4 로직 모듈이 A-유형 명령어들을 선택할 수 있게 하기 위해 이용된다. 이 마스크는 Find-4 모듈이 0 내지 7의 Find-8 카운트 범위(열 2에 나타내어져 있음) 내의 처음 4개의 A-유형 명령어들(572, 574, 580 및 590)을 선택할 수 있게 한다.
게다가, 열 5에 나타낸 바와 같이, E-유형 명령어들에 대해 마스크가 사용된다 - 이 마스크는 또한 Find-4 모듈에 의해 선택되지 않은 A-유형 명령어들을 선택한다 -. 이 마스크는 Find-8 모듈이 E 실행 유닛들로 디스패치해야 하는 명령어들을 결정하기 위해 Find-8 모듈에 의해 이용된다. 그에 따라, 이 마스크에 의해 마스킹되는 명령어들은 0 내지 7의 카운트 범위에서의 3개의 E-유형 명령어들(576, 578 및 588) 및 Find-4 모듈이 이미 포화되었기 때문에 Find-4 모듈에 의해 선택되지 않은 단일의 A-유형 명령어(592)이다.
도 6은 본 발명의 실시예들에 따른, 비순차 마이크로 아키텍처에서 명령어 스케줄링을 위한 예시적인 컴퓨터 제어 프로세스에 대한 플로우차트를 도시한다. 이 플로우차트에서의 다양한 단계들이 순차적으로 제시되고 기술되어 있지만, 통상의 기술자라면 단계들 중 일부 또는 전부가 상이한 순서들로 실행될 수 있고 단계들 중 일부 또는 전부가 병렬로 실행될 수 있다는 것을 잘 알 것이다. 게다가, 본 발명의 하나 이상의 실시예들에서, 이하에서 기술되는 단계들 중 하나 이상이 생략되고, 반복되며, 그리고/또는 상이한 순서로 수행될 수 있다. 그에 따라, 도 6에 도시된 단계들의 구체적인 배열이 본 발명의 범주를 제한하는 것으로 해석되어서는 안된다. 오히려, 다른 기능 흐름들이 본 발명의 범주 및 사상 내에 속한다는 것이 본 명세서에 제공된 교시 내용으로부터 관련 기술 분야(들)의 통상의 기술자들에게 명백할 것이다. 플로우차트(600)는 앞서 기술된 예시적인 실시예들을 계속 참조하여 기술될 수 있지만, 이 방법이 그 실시예들로 제한되지 않는다.
단계(602)에서, 스케줄러(472)로부터 실행 모듈(474)로 디스패치될 제1 명령어 집합이 선택된다. 하나의 실시예에서, Find-8 구조(404)는 스케줄러로부터 한번에 디스패치될 상위 우선순위 명령어들을 8개까지 선택할 수 있다. 앞서 논의된 바와 같이, 스케줄러는 2가지 유형의 명령어들(A 및 E)을 디스패치하는 동작을 한다. 실행 모듈은 또한 2가지 유형의 실행 유닛들을 포함하고, 여기서 A-유형 실행 유닛들은 A-유형 명령어들만을 실행할 수 있는 반면, E-유형 실행 유닛들은 A-유형의 명령어들 및 E-유형의 명령어들 둘 다를 실행할 수 있다.
단계(604)에서, 다른 발견 및 선택(find and select) 모듈[예컨대, Find-4 모듈(406)]은 스케줄러로부터 디스패치할 제2 명령어 집합을 선택하도록 구성될 수 있다. 제2 명령어 집합은 제1 명령어 집합의 부분집합이다(예컨대, Find-4 모듈은 Find-8 모듈에 의해 선택되는 8개의 명령어들의 부분집합인 4개의 명령어들을 선택함). 그렇지만, 제2 부분집합은 하나의 유형의 명령어(예컨대, A-유형의 명령어)만으로 이루어져 있다.
단계(606)에서, 제2 명령어 집합에 의해 선택되지 않은 제1 명령어 집합 내의 명령어들을 포함하는 제3 명령어 집합이 결정된다.
단계(608)에서, 제2 명령어 집합이 제2 유형의 실행 유닛을 사용하여 실행하기 위해 디스패치된다. 예를 들어, Find-4 구조는 A-유형의 실행 유닛들에서 실행하기 위해 A-유형의 명령어들을 디스패치한다. 그리고 마지막으로, 단계(610)에서, 제3 명령어 집합이 제1 유형의 실행 유닛에서 실행하기 위해 실행 모듈로 디스패치된다. 예를 들어, Find-8 모듈은 E-유형의 실행 유닛들에서 실행하기 위해 Find-4 모듈에 의해 선택되지 않은 명령어들을 디스패치한다.
위의 개시 내용은 특정 블록도들, 흐름도들 및 예들을 이용하여 다양한 실시예들을 설명하지만, 본 명세서에서 설명 및/또는 예시된 각각의 블록도 컴포넌트, 흐름도 단계, 동작 및/또는 컴포넌트는 광범위한 하드웨어, 소프트웨어 또는 펌웨어(또는 이들의 임의 조합) 구성들을 이용하여 개별적으로 그리고/또는 공동으로 구현될 수 있다. 게다가, 다른 컴포넌트들 내에 포함된 컴포넌트들의 임의의 개시 내용은 예들로서 간주되어야 하는데, 그 이유는 많은 다른 아키텍처들이 동일한 기능을 달성하도록 구현될 수 있기 때문이다.
본 명세서에서 설명 및/또는 예시된 프로세스 파라미터들 및 단계들의 시퀀스는 예시적으로 제공될 뿐이다. 예를 들어, 본 명세서에서 설명 및/또는 예시된 단계들은 특정 순서로 예시 또는 설명될 수 있지만, 이러한 단계들은 도시되거나 설명된 순서로 반드시 수행될 필요는 없다. 본 명세서에서 설명 및/또는 예시된 다양한 예시적인 방법들은 또한 본 명세서에서 설명 또는 예시된 단계들 중 하나 이상을 생략할 수 있거나, 개시된 것들에 더하여 추가적인 단계들을 포함할 수 있다.
본 명세서에서는 다양한 실시예들이 완전히 기능적인 컴퓨팅 시스템들과 관련하여 설명 및/또는 예시되었지만, 이러한 예시적인 실시예들 중 하나 이상은 배포를 실제로 수행하는 데 사용되는 특정 타입의 컴퓨터 판독 가능 매체에 관계없이 다양한 형태의 프로그램 제품으로서 배포될 수 있다. 본 명세서에서 개시된 실시예들은 또한 특정 작업들을 수행하는 소프트웨어 모듈들을 이용하여 구현될 수 있다. 이러한 소프트웨어 모듈들은 컴퓨터 판독 가능 저장 매체 상에 또는 컴퓨팅 시스템 내에 저장될 수 있는 스크립트, 배치(batch) 또는 다른 실행 가능 파일들을 포함할 수 있다. 이러한 소프트웨어 모듈들은 본 명세서에서 개시된 예시적인 실시예들 중 하나 이상을 수행하도록 컴퓨팅 시스템을 구성할 수 있다.
위의 설명은 설명의 목적을 위해 특정 실시예들을 참조하여 설명되었다. 그러나, 위의 예시적인 설명들은 포괄적이거나, 본 발명을 개시된 바로 그 형태들로 한정하는 것을 의도하지 않는다. 위의 가르침들에 비추어 많은 변경들 및 변형들이 가능하다. 실시예들은 본 발명의 원리들 및 그의 실용적인 응용들을 최상으로 설명하여 이 분야의 다른 통상의 기술자들이 고려되는 특정 사용에 적합할 수 있는 바와 같은 다양한 변경들과 더불어 본 발명 및 다양한 실시예들을 최상으로 이용하는 것을 가능하게 하도록 선택되고 설명되었다.
이와 같이, 본 발명에 따른 실시예들이 설명되었다. 본 개시 내용은 특정 실시예들에서 설명되었지만, 본 발명은 그러한 실시예들에 의해 한정되는 것으로 해석되지 않아야 하며, 아래의 청구항들에 따라 해석되어야 한다는 것을 알아야 한다.

Claims (20)

  1. 비순차 마이크로프로세서 파이프라인(out-of-order microprocessor pipeline)에서 명령어들을 스케줄링하는 방법으로서,
    실행 유닛 집합에 대한 스케줄링을 기다리는 제1 명령어 집합을 식별하는 단계 - 상기 실행 유닛 집합은 제1 유형의 명령어 및 제2 유형의 명령어를 실행할 수있는 제1 실행 유닛을 포함하고 상기 실행 유닛 집합은 상기 제1 유형의 명령어를 실행할 수 없는 제2 실행 유닛을 더 포함함 - ;
    상기 제1 명령어 집합의 부분집합인 제2 명령어 집합을 식별하는 단계 - 상기 제2 명령어 집합에서 모든 명령어들은 상기 제2 유형임 - ;
    상기 제1 명령어 집합의 부분집합인 제3 명령어 집합을 식별하는 단계 - 상기 제3 명령어 집합에서 모든 명령어는 상기 제2 명령어 집합에 존재하지 않음 -; 및
    실행을 위해 제2 실행 유닛에 제2 명령어 집합을 할당하고 실행을 위해 제1 실행 유닛에 제3 명령어 집합을 할당하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서, 상기 제3 명령어 집합은 상기 제1 유형의 명령어들 중 적어도 하나의 명령어 및 상기 제2 유형의 명령어들 중 적어도 하나의 명령어를 포함하는 방법.
  3. 제1항에 있어서, 상기 제1 유형의 명령어들은 부동 소수점 연산을 위한 명령어들인 방법.
  4. 제1항에 있어서, 상기 제2 유형의 명령어들은 정수 연산을 위한 명령어들인 방법.
  5. 제1항에 있어서, 상기 제1 명령어 집합을 식별하는 단계와 상기 제2 명령어 집합을 식별하는 단계는 병렬로 수행되는 방법.
  6. 제1항에 있어서, 상기 제1 명령어 집합, 상기 제2 명령어 집합, 및 상기 제3 명령어 집합은 우선순위에 기초하여 식별되고, 상기 우선순위는 ROB ID(Re-Order Buffer identifier) 번호 또는 각각의 명령어에 할당된 인덱스 번호에 기초하여 결정되는 방법.
  7. 제1항에 있어서, 상기 제2 명령어 집합은 상기 제3 명령어 집합의 식별을 가능하게 하기 위하여 상기 제1 명령어 집합으로부터 마스킹 제거되는(masked out of) 방법.
  8. 명령어들을 저장하는 비일시적 컴퓨터 판독 가능 저장 매체로서, 상기 명령어들은 컴퓨팅 디바이스의 하나 이상의 프로세서 집합에 의해 실행될 때 상기 컴퓨팅 디바이스로 하여금,
    제1 실행 유닛에 의한 실행을 위한 제2 명령어 집합을 식별하고 - 상기 제1 실행 유닛은 제1 유형의 명령어 및 제2 유형의 명령어를 실행할 수 있음 - ; 및
    제2 실행 유닛에 의한 실행을 위한 제3 명령어 집합을 식별하도록 하고 - 상기 제2 실행 유닛은 상기 제2 유형의 명령어들을 실행할 수 없음 - ,
    상기 제2 명령어 집합은 상기 제1 명령어 집합의 부분집합이고 상기 제2 명령어 집합은 상기 제2 유형이며,
    상기 제3 명령어 집합은 상기 제1 명령어 집합의 부분집합이고,
    상기 제3 명령어 집합은 상기 제2 명령어 집합과는 구별되는, 비일시적 컴퓨터 판독 가능 저장 매체.
  9. 제8항에 있어서, 상기 제3 명령어 집합은 상기 제1 유형의 명령어 및 상기 제2 유형의 명령어를 포함하는 비일시적 컴퓨터 판독 가능 저장 매체.
  10. 제8항에 있어서, 상기 제1 유형은 부동 소수점 연산을 위한 명령어들을 나타내는 비일시적 컴퓨터 판독 가능 저장 매체.
  11. 제8항에 있어서, 상기 제2 유형은 정수 연산을 위한 명령어들을 나타내는 비일시적 컴퓨터 판독 가능 저장 매체.
  12. 제8항에 있어서, 상기 제1 명령어 집합을 식별하는 것 및 상기 제2 명령어 집합을 식별하는 것은 병렬로 수행되는 비일시적 컴퓨터 판독 가능 저장 매체.
  13. 제8항에 있어서, 상기 제2 명령어 집합 및 상기 제3 명령어 집합은 우선순위에 기초하여 식별되고, 상기 우선순위는 ROB ID(Re-Order Buffer identifier) 번호 또는 각 명령어에 할당된 인덱스 번호에 기초하여 결정되는 비일시적 컴퓨터 판독 가능 저장 매체.
  14. 제8항에 있어서, 상기 제2 명령어 집합은 상기 제3 명령어 집합의 식별을 가능하게 하기 위하여 상기 제1 명령어 집합으로부터 마스킹 제거되는 비일시적 컴퓨터 판독 가능 저장 매체.
  15. 비순차 파이프라인을 갖는 마이크로프로세서로서,
    제1 유형의 명령어 및 제2 유형의 명령어를 실행할 수 있는 제1 실행 유닛을 포함하고 상기 제1 유형의 명령어를 실행할 수 없는 제2 실행 유닛을 더 포함하는 실행 유닛 집합;
    상기 실행 유닛 집합에 대한 스케쥴링을 기다리는 명령어들을 저장하는 명령어 저장소; 및
    상기 실행 유닛 집합 및 상기 명령어 저장소에 연결된 스케줄러
    를 포함하고, 상기 스케줄러는,
    상기 명령어 저장소에서 제1 명령어 집합을 식별하고,
    상기 제1 명령어 집합의 부분집합인 제2 명령어 집합을 식별하고 - 상기 제2 명령어 집합에서 모든 명령어들은 상기 제2 유형의 명령어들임 - ,
    상기 명령어 저장소에서, 상기 제1 명령어 집합의 부분집합인 제3 명령어 집합을 식별하고 - 상기 제3 명령어 집합에서 모든 명령어들은 상기 제2 명령어 집합에 존재하지 않음 - ,
    실행을 위해 상기 제2 실행 유닛에 상기 제2 명령어 집합을 할당하고 실행을 위해 제1 실행 유닛에 상기 제3 명령어 집합을 할당하는 마이크로프로세서.
  16. 제15항에 있어서, 상기 제3 명령어 집합은 상기 제1 유형의 명령어들 중 적어도 하나의 명령어 및 상기 제2 유형의 명령어들 중 적어도 하나의 명령어를 포함하는 마이크로프로세서.
  17. 제15항에 있어서, 상기 제1 유형의 명령어들은 부동 소수점 연산을 위한 명령어들인 마이크로프로세서.
  18. 제15항에 있어서, 상기 제2 유형의 명령어들은 정수 연산을 위한 명령어들 인 마이크로 프로세서.
  19. 제15항에 있어서, 상기 스케줄러는 상기 제1 명령어 집합과 상기 제2 명령어 집합을 병렬로 식별하는 마이크로프로세서.
  20. 제15항에 있어서, 상기 제1 명령어 집합, 상기 제2 명령어 집합, 및 상기 제3 명령어 집합은 우선순위에 기초하여 상기 스케줄러에 의해 식별되고, 상기 우선순위는 ROB ID(Re-Order Buffer identifier) 번호 또는 각각의 명령어에 할당된 인덱스 번호에 기초하여 결정되는 마이크로 프로세서.
KR1020177015127A 2013-03-15 2014-03-14 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치 KR102074961B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201361799062P 2013-03-15 2013-03-15
US61/799,062 2013-03-15
US14/107,116 2013-12-16
US14/107,116 US9632825B2 (en) 2013-03-15 2013-12-16 Method and apparatus for efficient scheduling for asymmetrical execution units
PCT/US2014/027252 WO2014152359A1 (en) 2013-03-15 2014-03-14 Method and apparatus for efficient scheduling for asymmetrical execution units

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020157028996A Division KR101746018B1 (ko) 2013-03-15 2014-03-14 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20170066695A true KR20170066695A (ko) 2017-06-14
KR102074961B1 KR102074961B1 (ko) 2020-02-10

Family

ID=51581196

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020157028996A KR101746018B1 (ko) 2013-03-15 2014-03-14 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치
KR1020177015127A KR102074961B1 (ko) 2013-03-15 2014-03-14 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020157028996A KR101746018B1 (ko) 2013-03-15 2014-03-14 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치

Country Status (6)

Country Link
US (3) US9632825B2 (ko)
EP (1) EP2972844B1 (ko)
KR (2) KR101746018B1 (ko)
CN (1) CN105122211B (ko)
TW (1) TWI517044B (ko)
WO (1) WO2014152359A1 (ko)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
TWI533129B (zh) 2011-03-25 2016-05-11 軟體機器公司 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
US9274793B2 (en) 2011-03-25 2016-03-01 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
KR101639854B1 (ko) 2011-05-20 2016-07-14 소프트 머신즈, 인크. 복수의 엔진에 의해 명령어 시퀀스들의 실행을 지원하기 위한 상호접속 구조
EP2710481B1 (en) 2011-05-20 2021-02-17 Intel Corporation Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
EP2783281B1 (en) 2011-11-22 2020-05-13 Intel Corporation A microprocessor accelerated code optimizer
KR101842550B1 (ko) 2011-11-22 2018-03-28 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
KR20150002319A (ko) * 2013-06-28 2015-01-07 삼성전자주식회사 비대칭형 클러스터 구조의 프로세서
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US9367322B1 (en) 2015-07-27 2016-06-14 International Business Machines Corporation Age based fast instruction issue
US11314516B2 (en) * 2018-01-19 2022-04-26 Marvell Asia Pte, Ltd. Issuing instructions based on resource conflict constraints in microprocessor
JP7032647B2 (ja) * 2018-04-17 2022-03-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11294678B2 (en) 2018-05-29 2022-04-05 Advanced Micro Devices, Inc. Scheduler queue assignment
US11334384B2 (en) * 2019-12-10 2022-05-17 Advanced Micro Devices, Inc. Scheduler queue assignment burst mode
US11327766B2 (en) 2020-07-31 2022-05-10 International Business Machines Corporation Instruction dispatch routing
US11948000B2 (en) 2020-10-27 2024-04-02 Advanced Micro Devices, Inc. Gang scheduling for low-latency task synchronization
CN113778528B (zh) * 2021-09-13 2023-03-24 北京奕斯伟计算技术股份有限公司 指令发送方法、装置、电子设备及存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6529928B1 (en) * 1999-03-23 2003-03-04 Silicon Graphics, Inc. Floating-point adder performing floating-point and integer operations
KR20070049095A (ko) * 2003-08-15 2007-05-10 마이크로소프트 코포레이션 서비스 패키지로 소프트웨어 제품을 업데이트하는 방법 및컴퓨터 판독가능 매체
US20100205603A1 (en) * 2009-02-09 2010-08-12 Unisys Corporation Scheduling and dispatching tasks in an emulated operating system
US20120066483A1 (en) * 2010-09-15 2012-03-15 International Business Machines Corporation Computing Device with Asynchronous Auxiliary Execution Unit

Family Cites Families (106)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6140643A (ja) * 1984-07-31 1986-02-26 Hitachi Ltd システムの資源割当て制御方式
JPH0820949B2 (ja) 1991-11-26 1996-03-04 松下電器産業株式会社 情報処理装置
US5819088A (en) 1993-03-25 1998-10-06 Intel Corporation Method and apparatus for scheduling instructions for execution on a multi-issue architecture computer
US6948172B1 (en) 1993-09-21 2005-09-20 Microsoft Corporation Preemptive multi-tasking with cooperative groups of tasks
US5761476A (en) 1993-12-30 1998-06-02 Intel Corporation Non-clocked early read for back-to-back scheduling of instructions
US5724565A (en) 1995-02-03 1998-03-03 International Business Machines Corporation Method and system for processing first and second sets of instructions by first and second types of processing systems
US5751982A (en) 1995-03-31 1998-05-12 Apple Computer, Inc. Software emulation system with dynamic translation of emulated instructions for increased processing speed
US6643765B1 (en) 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5911057A (en) 1995-12-19 1999-06-08 Texas Instruments Incorporated Superscalar microprocessor having combined register and memory renaming circuits, systems, and methods
US5928356A (en) * 1997-10-11 1999-07-27 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for selectively controlling groups of registers
US6216215B1 (en) 1998-04-02 2001-04-10 Intel Corporation Method and apparatus for senior loads
JPH11338710A (ja) 1998-05-28 1999-12-10 Toshiba Corp 複数種の命令セットを持つプロセッサのためのコンパイル方法ならびに装置および同方法がプログラムされ記録される記録媒体
US8631066B2 (en) 1998-09-10 2014-01-14 Vmware, Inc. Mechanism for providing virtual machines for use by multiple users
GB9825102D0 (en) 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6490673B1 (en) 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
US6477562B2 (en) * 1998-12-16 2002-11-05 Clearwater Networks, Inc. Prioritized instruction scheduling for multi-streaming processors
US7020879B1 (en) * 1998-12-16 2006-03-28 Mips Technologies, Inc. Interrupt and exception handling for multi-streaming digital processors
JP3842474B2 (ja) 1999-02-02 2006-11-08 株式会社ルネサステクノロジ データ処理装置
US6668316B1 (en) * 1999-02-17 2003-12-23 Elbrus International Limited Method and apparatus for conflict-free execution of integer and floating-point operations with a common register file
US6732220B2 (en) 1999-02-17 2004-05-04 Elbrus International Method for emulating hardware features of a foreign architecture in a host operating system environment
US6557095B1 (en) 1999-12-27 2003-04-29 Intel Corporation Scheduling operations using a dependency matrix
US6728872B1 (en) 2000-02-04 2004-04-27 International Business Machines Corporation Method and apparatus for verifying that instructions are pipelined in correct architectural sequence
US6944750B1 (en) * 2000-03-31 2005-09-13 Intel Corporation Pre-steering register renamed instructions to execution unit associated locations in instruction cache
US6704860B1 (en) 2000-07-26 2004-03-09 International Business Machines Corporation Data processing system and method for fetching instruction blocks in response to a detected block sequence
US7206925B1 (en) * 2000-08-18 2007-04-17 Sun Microsystems, Inc. Backing Register File for processors
US7757065B1 (en) 2000-11-09 2010-07-13 Intel Corporation Instruction segment recording scheme
US7092869B2 (en) 2001-11-14 2006-08-15 Ronald Hilton Memory address prediction under emulation
US7331040B2 (en) 2002-02-06 2008-02-12 Transitive Limted Condition code flag emulation for program code conversion
US8024735B2 (en) 2002-06-14 2011-09-20 Intel Corporation Method and apparatus for ensuring fairness and forward progress when executing multiple threads of execution
US7222218B2 (en) 2002-10-22 2007-05-22 Sun Microsystems, Inc. System and method for goal-based scheduling of blocks of code for concurrent execution
US6981083B2 (en) 2002-12-05 2005-12-27 International Business Machines Corporation Processor virtualization mechanism via an enhanced restoration of hard architected states
US7089374B2 (en) 2003-02-13 2006-08-08 Sun Microsystems, Inc. Selectively unmarking load-marked cache lines during transactional program execution
US20040268097A1 (en) * 2003-06-26 2004-12-30 International Business Machines Corporation Instruction sampling in a microprocessor
EP1658563B1 (en) 2003-08-28 2013-06-05 MIPS Technologies, Inc. Apparatus, and method for initiation of concurrent instruction streams in a multithreading microprocessor
US9032404B2 (en) 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US8407433B2 (en) 2007-06-25 2013-03-26 Sonics, Inc. Interconnect implementing internal controls
US7243170B2 (en) 2003-11-24 2007-07-10 International Business Machines Corporation Method and circuit for reading and writing an instruction buffer
US7246219B2 (en) * 2003-12-23 2007-07-17 Intel Corporation Methods and apparatus to control functional blocks within a processor
US7594234B1 (en) 2004-06-04 2009-09-22 Sun Microsystems, Inc. Adaptive spin-then-block mutual exclusion in multi-threaded processing
US20050289530A1 (en) 2004-06-29 2005-12-29 Robison Arch D Scheduling of instructions in program compilation
US8044951B1 (en) * 2004-07-02 2011-10-25 Nvidia Corporation Integer-based functionality in a graphics shading language
US7707578B1 (en) 2004-12-16 2010-04-27 Vmware, Inc. Mechanism for scheduling execution of threads for fair resource allocation in a multi-threaded and/or multi-core processing system
US8719819B2 (en) 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
US7050922B1 (en) 2005-01-14 2006-05-23 Agilent Technologies, Inc. Method for optimizing test order, and machine-readable media storing sequences of instructions to perform same
US7681014B2 (en) 2005-02-04 2010-03-16 Mips Technologies, Inc. Multithreading instruction scheduler employing thread group priorities
US7657891B2 (en) 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7400548B2 (en) 2005-02-09 2008-07-15 International Business Machines Corporation Method for providing multiple reads/writes using a 2read/2write register file array
US8195922B2 (en) 2005-03-18 2012-06-05 Marvell World Trade, Ltd. System for dynamically allocating processing time to multiple threads
US20060230243A1 (en) 2005-04-06 2006-10-12 Robert Cochran Cascaded snapshots
US20060230409A1 (en) 2005-04-07 2006-10-12 Matteo Frigo Multithreaded processor architecture with implicit granularity adaptation
US8010969B2 (en) 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
US7350056B2 (en) * 2005-09-27 2008-03-25 International Business Machines Corporation Method and apparatus for issuing instructions from an issue queue in an information handling system
US8423682B2 (en) 2005-12-30 2013-04-16 Intel Corporation Address space emulation
GB2435362B (en) 2006-02-20 2008-11-26 Cramer Systems Ltd Method of configuring devices in a telecommunications network
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7610571B2 (en) 2006-04-14 2009-10-27 Cadence Design Systems, Inc. Method and system for simulating state retention of an RTL design
CN100485636C (zh) 2006-04-24 2009-05-06 华为技术有限公司 一种基于模型驱动进行电信级业务开发的调试方法及装置
US8145882B1 (en) 2006-05-25 2012-03-27 Mips Technologies, Inc. Apparatus and method for processing template based user defined instructions
US8046775B2 (en) 2006-08-14 2011-10-25 Marvell World Trade Ltd. Event-based bandwidth allocation mode switching method and apparatus
TWI337495B (en) 2006-10-26 2011-02-11 Au Optronics Corp System and method for operation scheduling
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US7934179B2 (en) 2006-11-20 2011-04-26 Et International, Inc. Systems and methods for logic verification
TW200833002A (en) 2007-01-31 2008-08-01 Univ Nat Yunlin Sci & Tech Distributed switching circuit having fairness
US20080250227A1 (en) 2007-04-04 2008-10-09 Linderman Michael D General Purpose Multiprocessor Programming Apparatus And Method
US7716183B2 (en) 2007-04-11 2010-05-11 Dot Hill Systems Corporation Snapshot preserved data cloning
US7937568B2 (en) 2007-07-11 2011-05-03 International Business Machines Corporation Adaptive execution cycle control method for enhanced instruction throughput
US8245232B2 (en) 2007-11-27 2012-08-14 Microsoft Corporation Software-configurable and stall-time fair memory access scheduling mechanism for shared memory systems
US7809925B2 (en) 2007-12-07 2010-10-05 International Business Machines Corporation Processing unit incorporating vectorizable execution unit
US20090165007A1 (en) 2007-12-19 2009-06-25 Microsoft Corporation Task-level thread scheduling and resource allocation
US7865770B2 (en) * 2008-01-10 2011-01-04 Advanced Micro Devices, Inc. Processor including efficient signature generation for logic error protection
US7937561B2 (en) * 2008-04-03 2011-05-03 Via Technologies, Inc. Merge microinstruction for minimizing source dependencies in out-of-order execution microprocessor with variable data size macroarchitecture
TWI364703B (en) 2008-05-26 2012-05-21 Faraday Tech Corp Processor and early execution method of data load thereof
WO2010004474A2 (en) 2008-07-10 2010-01-14 Rocketic Technologies Ltd Efficient parallel computation of dependency problems
US9244732B2 (en) 2009-08-28 2016-01-26 Vmware, Inc. Compensating threads for microarchitectural resource contentions by prioritizing scheduling and execution
US7941616B2 (en) 2008-10-21 2011-05-10 Microsoft Corporation System to reduce interference in concurrent programs
WO2010049585A1 (en) 2008-10-30 2010-05-06 Nokia Corporation Method and apparatus for interleaving a data block
US8074060B2 (en) * 2008-11-25 2011-12-06 Via Technologies, Inc. Out-of-order execution microprocessor that selectively initiates instruction retirement early
US8200949B1 (en) 2008-12-09 2012-06-12 Nvidia Corporation Policy based allocation of register file cache to threads in multi-threaded processor
US8312268B2 (en) 2008-12-12 2012-11-13 International Business Machines Corporation Virtual machine
US8805788B2 (en) 2009-05-04 2014-08-12 Moka5, Inc. Transactional virtual disk with differential snapshots
US8332854B2 (en) 2009-05-19 2012-12-11 Microsoft Corporation Virtualized thread scheduling for hardware thread optimization based on hardware resource parameter summaries of instruction blocks in execution groups
US8533437B2 (en) * 2009-06-01 2013-09-10 Via Technologies, Inc. Guaranteed prefetch instruction
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
US9122487B2 (en) 2009-06-23 2015-09-01 Oracle America, Inc. System and method for balancing instruction loads between multiple execution units using assignment history
US8539486B2 (en) 2009-07-17 2013-09-17 International Business Machines Corporation Transactional block conflict resolution based on the determination of executing threads in parallel or in serial mode
US8695002B2 (en) 2009-10-20 2014-04-08 Lantiq Deutschland Gmbh Multi-threaded processors and multi-processor systems comprising shared resources
US8312258B2 (en) 2010-07-22 2012-11-13 Intel Corporation Providing platform independent memory logic
US8677355B2 (en) 2010-12-17 2014-03-18 Microsoft Corporation Virtual machine branching and parallel execution
TWI533129B (zh) 2011-03-25 2016-05-11 軟體機器公司 使用可分割引擎實體化的虛擬核心執行指令序列程式碼區塊
KR101620676B1 (ko) 2011-03-25 2016-05-23 소프트 머신즈, 인크. 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 레지스터 파일 세그먼트
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US8930432B2 (en) * 2011-08-04 2015-01-06 International Business Machines Corporation Floating point execution unit with fixed point functionality
KR20130119285A (ko) * 2012-04-23 2013-10-31 한국전자통신연구원 클러스터 컴퓨팅 환경에서의 자원 할당 장치 및 그 방법
US8904100B2 (en) * 2012-06-11 2014-12-02 International Business Machines Corporation Process identifier-based cache data transfer
US9195506B2 (en) 2012-12-21 2015-11-24 International Business Machines Corporation Processor provisioning by a middleware processing system for a plurality of logical processor partitions
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
EP2972845B1 (en) 2013-03-15 2021-07-07 Intel Corporation A method for executing multithreaded instructions grouped onto blocks
EP2972794A4 (en) 2013-03-15 2017-05-03 Soft Machines, Inc. A method for executing blocks of instructions using a microprocessor architecture having a register view, source view, instruction view, and a plurality of register templates
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6529928B1 (en) * 1999-03-23 2003-03-04 Silicon Graphics, Inc. Floating-point adder performing floating-point and integer operations
KR20070049095A (ko) * 2003-08-15 2007-05-10 마이크로소프트 코포레이션 서비스 패키지로 소프트웨어 제품을 업데이트하는 방법 및컴퓨터 판독가능 매체
US20100205603A1 (en) * 2009-02-09 2010-08-12 Unisys Corporation Scheduling and dispatching tasks in an emulated operating system
US20120066483A1 (en) * 2010-09-15 2012-03-15 International Business Machines Corporation Computing Device with Asynchronous Auxiliary Execution Unit

Also Published As

Publication number Publication date
EP2972844A1 (en) 2016-01-20
US20170199744A1 (en) 2017-07-13
EP2972844A4 (en) 2017-04-19
US9965285B2 (en) 2018-05-08
KR102074961B1 (ko) 2020-02-10
US10552163B2 (en) 2020-02-04
US9632825B2 (en) 2017-04-25
KR20150132356A (ko) 2015-11-25
WO2014152359A1 (en) 2014-09-25
CN105122211A (zh) 2015-12-02
CN105122211B (zh) 2018-10-12
KR101746018B1 (ko) 2017-06-13
TW201506784A (zh) 2015-02-16
US20140373022A1 (en) 2014-12-18
EP2972844B1 (en) 2021-03-10
TWI517044B (zh) 2016-01-11
US20180232237A1 (en) 2018-08-16

Similar Documents

Publication Publication Date Title
KR101746018B1 (ko) 비대칭 실행 유닛들의 효율적인 스케줄링을 위한 방법 및 장치
US10467010B2 (en) Method and apparatus for nearest potential store tagging
US9292291B2 (en) Instruction merging optimization
KR101734350B1 (ko) 동적 포트 리맵핑을 이용하여 명령어 스케줄링 동안 데드록을 방지하기 위한 방법 및 장치
US10289419B2 (en) Method and apparatus for sorting elements in hardware structures
US9405547B2 (en) Register allocation for rotation based alias protection register
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
US10970079B2 (en) Parallel dispatching of multi-operation instructions in a multi-slice computer processor
JP2017102919A (ja) 命令を処理するための複数の実行ユニットを備えるプロセッサ、プロセッサを使用して命令を処理するための方法、およびプロセッサの設計プロセスにおいて使用される設計構造
US8261049B1 (en) Determinative branch prediction indexing
US11531544B1 (en) Method and system for selective early release of physical registers based on a release field value in a scheduler
US20130007424A1 (en) Cascading indirect branch instructions
US10606602B2 (en) Electronic apparatus, processor and control method including a compiler scheduling instructions to reduce unused input ports
US9086871B2 (en) Reordering the output of recirculated transactions within a pipeline

Legal Events

Date Code Title Description
A107 Divisional application of patent
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant