KR101751358B1 - 이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법 - Google Patents

이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법 Download PDF

Info

Publication number
KR101751358B1
KR101751358B1 KR1020157012947A KR20157012947A KR101751358B1 KR 101751358 B1 KR101751358 B1 KR 101751358B1 KR 1020157012947 A KR1020157012947 A KR 1020157012947A KR 20157012947 A KR20157012947 A KR 20157012947A KR 101751358 B1 KR101751358 B1 KR 101751358B1
Authority
KR
South Korea
Prior art keywords
power
processor
cores
field
pcu
Prior art date
Application number
KR1020157012947A
Other languages
English (en)
Other versions
KR20150070365A (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 KR20150070365A publication Critical patent/KR20150070365A/ko
Application granted granted Critical
Publication of KR101751358B1 publication Critical patent/KR101751358B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/329Power saving characterised by the action undertaken by task scheduling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/324Power saving characterised by the action undertaken by lowering clock frequency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3296Power saving characterised by the action undertaken by lowering the supply or operating voltage
    • 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/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5094Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/363Graphics controllers
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G2330/00Aspects of power supply; Aspects of display protection and defect management
    • G09G2330/02Details of power systems and of start or stop of display operation
    • G09G2330/021Power management, e.g. power saving
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Power Sources (AREA)
  • Computer Graphics (AREA)
  • Computer Hardware Design (AREA)

Abstract

프로세서에 대한 지능적인 전력 할당 아키텍처. 예를 들어, 프로세서의 일 실시예는 다음을 포함한다: 대응하는 복수의 프로세서 기능들을 수행하기 위한 복수의 프로세서 컴포넌트; 각기 프로세서 컴포넌트들 중 하나와 연관된 복수의 전력 플레인; 및 프로세서의 현재 사용에 대한 사용자 경험 메트릭들(experience metrics), 작업량 특성들 및 전력 제약 조건들에 기초하여 전력 플레인 각각에 대한 전력을 동적으로 조정하는 전력 제어 유닛(PCU).

Description

이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법{APPARATUS AND METHOD FOR INTELLIGENTLY POWERING HETEROGENEOUS PROCESSOR COMPONENTS}
본 발명은 일반적으로 컴퓨터 프로세서들의 분야에 관한 것이다. 보다 구체적으로, 본 발명은 코어들, 그래픽스 유닛들, 및 다른 기능 유닛들과 같은 이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법에 관한 것이다.
현대의 에너지에 제약이 있으며 열적으로 제약이 있는 핸드헬드 장치들의 전력 예산들은 매우 빈약하다. 그러나, 소비자들은 점점 더 많은 연산 능력을 요구하는 이들 장치들에게서 점점 더 많은 기능을 기대하고 있다. 이것 때문에, 전형적으로 시스템 온 칩(SoC)으로서 구현되는, 현재의 핸드헬드 장치들에 사용되는 프로세서들에 많은 연산 소자들이 존재한다.
이전의 해결 방법은 일반적으로 SoC내의 각각의 연산 소자를 별개로 취하여 에너지 효율을 위해 노력하였다. 이러한 해결 방법은 듀티 사이클링, 전력 및 클럭 게이팅, 발행-폭 축소, 주파수 변경 등과 같은 기술들을 사용하여 주어진 연산 소자의 전력/성능 특성을 변경하는 것이다.
필요한 것은 예외적 성능을 제공할 것이지만 타이트한 전력과 열적 설계범위(thermal envelope)하에서 여전히 작동하게 될 SoC와 같은 프로세서이다.
본 발명의 보다 나은 이해는 이하의 도면들과 함께 이하의 상세한 설명으로부터 획득될 수 있다.
도 1a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 모두를 나타낸 블록도이다.
도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어의 예시적 실시예 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어 모두를 나타낸 블록도이다.
도 2는 본 발명의 실시예들에 따라 통합 메모리 컨트롤러 및 그래픽들을 갖는 싱글 코어 프로세서 및 멀티코어 프로세서의 블록도이다.
도 3은 본 발명의 일 실시예에 따른 시스템의 블록도를 나타낸다.
도 4는 본 발명의 일 실시예에 따른 제2 시스템의 블록도를 나타낸다.
도 5는 본 발명의 일 실시예에 따른 제3 시스템의 블록도를 나타낸다.
도 6은 본 발명의 일 실시예에 따른 시스템 온 칩(SoC)의 블록도를 나타낸다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트에서의 이진 명령어들을 타깃 명령어 세트에서의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도를 나타낸다.
도 8은 이종 프로세서 아키텍처의 일 실시예를 나타낸다.
도 9a 및 도 9b는 각각 감춰진 큰 코어들과 감춰진 작은 코어들을 포함하는 실시예들을 나타낸다.
도 10은 버추얼 코어들을 물리적 코어들에 매핑하기 위한 방법의 일 실시예를 나타낸다.
도 11a 및 도 11b는 감춰진 큰 코어와 다수의 가시적 작은 코어들을 갖는 시스템의 일 실시예를 나타낸다.
도 12는 버추얼 코어들을 물리적 코어들에 매핑하기 위한 방법의 일 실시예를 나타낸다.
도 13a 내지 도 13c는 감춰진 작은 코어들과 다수의 가시적 큰 코어들을 갖는 시스템의 일 실시예를 나타낸다.
도 13d는 상이한 유형의 스레드들에 대한 코어 할당들을 나타낸다.
도 14a 및 도 14b는 이종 프로세서 컴포넌트들에 지능적으로 전력을 할당하기 위한 본 발명의 실시예들을 나타낸다.
도 15a 및 도 15b는 본 발명의 실시예들에 따라 일반적 벡터 친화적 명령어 포맷 및 그 명령어 템플릿들을 나타낸 블록도들이다.
도 16a 내지 도 16d는 본 발명의 실시예들에 따른 예시적인 특정의 벡터 친화적 명령어 포맷의 블록도들을 나타낸다.
도 17은 본 발명의 일 실시예에 따른 레지스터 아키텍처의 블록도이다.
이하의 설명에서는, 설명의 목적상, 이하 개시되는 본 발명의 실시예들의 완전한 이해를 제공할 목적으로 복수의 특정 상세들이 제시된다. 그러나, 본 분야에서 숙련된 자에게는 본 발명의 실시예들이 이러한 특정 상세들 중 일부 없이도 실시될 수 있다는 점이 명백할 것이다. 다른 경우들에서는, 본 발명의 실시예들의 근본 원리들을 모호하게 하는 것을 회피하기 위해 공지된 구조들 및 장치들이 블록도로 나타나 있다.
예시적인 프로세서 아키텍처들 및 데이터 유형들
도 1a는 본 발명의 실시예들에 따른 예시적인 순차적 파이프라인 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 모두를 나타내는 블록도이다. 도 1b는 본 발명의 실시예들에 따른 프로세서에 포함될 순차적 아키텍처 코어의 예시적인 실시예 및 예시적인 레지스터 리네이밍, 비순차적 발행/실행 아키텍처 코어 모두를 나타낸 블록도이다. 도 1a 및 도 1b에서의 실선 박스들은 순차적 파이프라인 및 순차적 코어를 나타내는 한편, 점선 박스들의 옵션적 추가는 레지스터 리네이밍, 비순차적 발행/실행 파이프라인 및 코어를 나타낸다. 순차적 양상이 비순차적 양상의 서브세트라는 것을 고려하여, 비순차적 양상이 설명될 것이다.
도 1a에서, 프로세서 파이프라인(100)은 페치 스테이지(102), 길이 디코딩 스테이지(104), 디코딩 스테이지(106), 할당 스테이지(108), 리네이밍 스테이지(110), (디스패치 또는 발행으로도 알려진) 스케줄링 스테이지(112), 레지스터 판독/메모리 판독 스테이지(114), 실행 스테이지(116), 라이트 백(write back)/메모리 기입 스테이지(118), 예외 처리 스테이지(122) 및 커밋(commit) 스테이지(124)를 포함한다.
도 1b는 실행 엔진 유닛(150)에 결합되는 프론트 엔드 유닛(130)을 포함하는 프로세서 코어(190)를 나타내며, 이들 양자 모두는 메모리 유닛(170)에 결합된다. 코어(190)는 RISC(reduced instruction set computing) 코어, CISC(complex instruction set computing) 코어, VLIW(very long instruction word) 코어, 또는 하이브리드 또는 대안적인 코어 유형일 수 있다. 또 다른 옵션으로서, 코어(190)는 예를 들어, 네트워크 또는 통신 코어, 압축 엔진, 코프로세서 코어, GPGPU(general purpose computing graphics processing unit) 코어, 그래픽 코어 또는 이와 유사한 것과 같은 특수 목적 코어일 수 있다.
프론트 엔드 유닛(130)은 명령어 캐시 유닛(134)에 결합되는 브랜치 예측 유닛(132)을 포함하고, 명령어 캐시 유닛(134)은 명령어 TLB(Translation Lookaside Buffer)(136)에 결합되고, 명령어 TLB(136)는 명령어 페치 유닛(138)에 결합되고, 명령어 페치 유닛(138)은 디코드 유닛(140)에 결합된다. 디코드 유닛(140)(또는 디코더)은 명령어들을 디코딩할 수 있으며, 오리지널 명령어들로부터 디코딩되거나, 또는 그렇지 않으면 이들을 반영하거나, 또는 이들로부터 유도되는, 하나 이상의 마이크로-연산들, 마이크로-코드 엔트리 포인트들, 마이크로명령어들, 다른 명령어들 또는 다른 제어 신호들을 출력으로서 생성할 수 있다. 디코드 유닛(140)은 상이한 메커니즘들을 이용하여 구현될 수 있다. 적절한 메커니즘들의 예들은 룩업 테이블들, 하드웨어 구현들, 프로그램가능 로직 어레이(PLAs), 마이크로코드 ROM들(ROMs) 등을 포함하지만, 이들에 한정되지 않는다. 일 실시예에서, 코어(190)는 임의의 매크로명령어들에 대한 마이크로코드를 저장하는 마이크로코드 ROM 또는 다른 매체를 포함한다(예를 들어, 디코드 유닛(140)에서 또는 그렇지 않으면 프론트 엔드 유닛(130)내에). 디코드 유닛(140)은 실행 엔진 유닛(150)에서의 리네이밍/할당기 유닛(152)에 결합된다.
실행 엔진 유닛(150)은 리타이어먼트 유닛(154) 및 하나 이상의 스케줄러 유닛(들)(156)의 세트에 결합된 리네이밍/할당기 유닛(152)을 포함한다. 스케줄러 유닛(들)(156)은 예약들 스테이션들, 중심 명령어 윈도, 등을 포함하는, 임의 수의 상이한 스케줄러들을 나타낸다. 스케줄러 유닛(들)(156)은 물리적 레지스터 파일(들) 유닛(들)(158)에 결합된다. 물리적 레지스터 파일(들) 유닛들(158) 각각은 하나 이상의 물리적 레지스터 파일들을 나타내고, 그 중 상이한 물리적 레지스터 파일들은 스칼라 정수, 스칼라 부동 소수점, 패킹된 정수(packed integer), 패킹된 부동 소수점(packed floating point), 벡터 정수, 벡터 부동 소수점, 상태(예컨대, 실행될 다음 명령어의 어드레스인 명령어 포인터) 등과 같은 하나 이상의 상이한 데이터 유형들을 저장한다. 일 실시예에서, 물리적 레지스터 파일(들) 유닛(158)은 벡터 레지스터 유닛, 기입 마스크 레지스터 유닛, 및 스칼라 레지스터 유닛을 포함한다. 이러한 레지스터 유닛들은 아키텍처의 벡터 레지스터들, 벡터 마스크 레지스터들 및 범용 레지스터들을 제공할 수 있다. 레지스터 리네이밍 및 비순차 실행이 구현될 수 있는 다양한 방식들[예컨대, 리오더 버퍼(들) 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 미래 파일(future file)(들), 이력 버퍼(들), 및 리타이어먼트 레지스터 파일(들)을 사용하는 것; 레지스터 맵들 및 레지스터들의 풀(pool)을 사용하는 것; 기타 등등]을 예시하기 위해, 물리적 레지스터 파일(들) 유닛(들)(158)이 리타이어먼트 유닛(154)과 중첩된다. 리타이어먼트 유닛(154) 및 물리적 레지스터 파일(들) 유닛(들)(158)은 실행 클러스터(들)(160)에 결합된다. 실행 클러스터(들)(160)는 하나 이상의 실행 유닛들(162)의 세트 및 하나 이상의 메모리 액세스 유닛들(164)의 세트를 포함한다. 실행 유닛들(162)은 다양한 유형의 데이터(예를 들어, 스칼라 부동 소수점, 패킹된 정수, 패킹된 부동 소수점, 벡터 정수, 벡터 부동 소수점)에 대해 다양한 연산들(예로서, 시프트, 가산, 감산, 승산)을 실행할 수 있다. 일부 실시예들은 특정 함수들이나 함수들의 세트들에 전용인 복수의 실행 유닛들을 포함할 수 있지만, 다른 실시예들은 단 하나의 실행 유닛, 또는 모두가 모든 함수들을 수행하는 복수의 실행 유닛을 포함할 수 있다. 스케줄러 유닛(들)(156), 물리적 레지스터 파일(들) 유닛(들)(158), 및 실행 클러스터(들)(160)는 가능하게는 복수개로 도시되어 있는데, 그 이유는 임의의 실시예들이 임의의 유형의 데이터/연산에 대해 별개의 파이프라인들(예를 들어, 각각이 자신의 스케줄러 유닛, 물리적 레지스터 파일(들) 유닛, 및/또는 실행 클러스터를 갖는 스칼라 정수 파이프라인, 스칼라 부동 소수점/패킹된 정수/패킹된 부동 소수점/벡터 정수/벡터 부동 소수점 파이프라인, 및/또는 메모리 액세스 파이프라인이며, 또한 별개의 메모리 액세스 파이프라인의 경우에는 이 파이프라인의 실행 클러스터만이 메모리 액세스 유닛(들)(164)을 갖는 임의의 실시예들이 구현될 수 있음)을 생성할 수 있기 때문이다. 개별 파이프라인들이 사용되는 경우, 이들 파이프라인들 중 하나 이상은 비순차적 발행/실행일 수 있고 나머지는 순차적일 수 있다는 점도 이해해야 한다.
메모리 액세스 유닛들(164)의 세트는 메모리 유닛(170)에 결합되고, 메모리 유닛은 레벨 2(L2) 캐시 유닛(176)에 결합되는 데이터 캐시 유닛(174)에 결합되는 데이터 TLB 유닛(172)을 포함한다. 하나의 예시적인 실시예에서, 메모리 액세스 유닛(164)은 로드 유닛, 저장 어드레스 유닛, 및 저장 데이터 유닛을 포함할 수 있으며, 이들 각각은 메모리 유닛(170)에서의 데이터 TLB 유닛(172)에 결합된다. 명령어 캐시 유닛(134)은 메모리 유닛(170)에서의 레벨 2(L2) 캐시 유닛(176)에 추가로 결합된다. L2 캐시 유닛(176)은 하나 이상의 다른 레벨들의 캐시에 및 결국에는 메인 메모리에 결합된다.
일례로서, 예시적인 레지스터 리네이밍, 비순차적 발행/실행 코어 아키텍처는 다음과 같이 파이프라인(100)을 구현할 수 있다: 1) 명령어 페치(138)는 페치 및 길이 디코딩 스테이지(102, 104)를 수행한다; 2) 디코드 유닛(140)은 디코딩 스테이지(106)를 수행한다; 3) 리네이밍/할당기 유닛(152)은 할당 스테이지(108)와 리네이밍 스테이지(110)를 수행한다; 4) 스케줄러 유닛(들)(156)은 스케줄 스테이지(112)를 수행한다; 5) 물리적 레지스터 파일(들) 유닛(들)(158)과 메모리 유닛(170)은 레지스터 판독/메모리 판독 스테이지(114)를 수행한다; 실행 클러스터(160)는 실행 스테이지(116)를 수행한다; 6) 메모리 유닛(170)과 물리적 레지스터 파일(들) 유닛(들)(158)은 라이트 백/메모리 기입 스테이지(118)를 수행한다; 7) 다양한 유닛들은 예외 처리 스테이지(122)에 관련될 수 있다; 8) 리타이어먼트 유닛(154)과 물리적 레지스터 파일(들) 유닛(들)(158)은 커밋 스테이지(124)를 수행한다.
코어(190)는 본 명세서에서 설명된 명령어(들)를 포함하는, 하나 이상의 명령어 세트들(예를 들어, x86 명령어 세트(더 새로운 버전들이 추가된 몇몇 확장들을 구비); 캘리포니아주 서니베일에 소재한 MIPS 테크놀리지(Technologies)의 MIPS 명령어 세트; 캘리포니아주 서니베일에 소재한 ARM 홀딩스(Holdings)의 ARM 명령어 세트(NEON과 같은 옵션적 부가적인 확장들을 구비)를 지원할 수 있다. 일 실시예에서, 코어(190)는 패킹된 데이터 명령어 세트 확장(예를 들어, 앞서 설명된 AVX1, AVX2, 및/또는 일반적 벡터 친화적 명령어 포맷(U=0 및/또는 U=1)의 일부 형태)을 지원하는 로직을 포함하며, 그에 의해 많은 멀티미디어 애플리케이션들에 사용되는 연산들이 패킹된 데이터를 이용하여 실행되도록 허용한다.
코어는 (2 이상의 병렬 세트들의 연산이나 스레드들을 실행하는) 멀티스레딩을 지원할 수 있고, 시분할 멀티스레딩(time sliced multithreading), (물리적 코어가 동시에 멀티스레딩할 수 있는 스레드들 각각에 대해 논리적 코어를 단일의 물리적 코어가 제공하는) 동시 멀티스레딩, 또는 이들의 조합(예를 들어, Intel® Hyperthreading 기술에서와 같은 시분할 페칭 및 디코딩과 그 이후의 동시 멀티스레딩)을 포함하는 다양한 방식으로 멀티스레딩을 지원할 수 있다는 점을 이해해야 한다.
레지스터 리네이밍이 비순차적 실행의 맥락에서 설명되었지만, 레지스터 리네이밍은 순차적 아키텍처에서 사용될 수 있다는 점을 이해해야 한다. 프로세서의 예시된 실시예가 또한 별개의 명령어 및 데이터 캐시 유닛들(134/174) 및 공유 L2 캐시 유닛(176)을 포함하고 있지만, 대안적 실시예들은 예를 들어 레벨 1(L1) 내부 캐시 또는 다중 레벨의 내부 캐시와 같은, 명령어 및 데이터 모두에 대한 단일 내부 캐시를 가질 수 있다. 일부 실시예들에서, 시스템은 코어 및/또는 프로세서 외부에 있는 외부 캐시외 내부 캐시의 조합을 포함할 수 있다. 대안적으로, 모든 캐시는 코어 및/또는 프로세서의 외부에 있을 수 있다.
도 2는 본 발명의 실시예들에 따라 하나보다 많은 코어를 가질 수 있고, 통합 메모리 컨트롤러를 가질 수 있고, 또한 통합 그래픽을 가질 수 있는 프로세서(200)의 블록도이다. 도 2의 실선 박스들은 싱글 코어(202A), 시스템 에이전트(210), 하나 이상의 버스 컨트롤러 유닛들(216)의 세트를 구비한 프로세서(200)를 예시하는 한편, 점선 박스들의 옵션적 추가는 다중 코어(202A-N), 시스템 에이전트 유닛(210)에서의 하나 이상의 통합 메모리 컨트롤러 유닛들(214)의 세트, 및 특수 목적 로직(208)을 가진 대안 프로세서(200)를 예시한다.
따라서, 프로세서(200)의 상이한 구현들은 다음을 포함할 수 있다: 1) 통합된 그래픽 및/또는 과학(처리량) 로직(이것은 하나 이상의 코어들을 포함할 수 있음)인 특수 목적 로직(208)을 구비한 CPU, 및 하나 이상의 범용 코어들(예를 들어, 범용 순차적 코어들, 범용 비순차적 코어들, 이 둘의 조합)인 코어들(202A-N); 2) 그래픽 및/또는 과학(처리량)을 주로 대상으로 하는 수많은 특수 목적 코어들인 코어들(202A-N)을 구비한 코프로세서; 및 3) 수많은 범용 순차적 코어들인 코어들(202A-N)을 구비한 코프로세서. 따라서, 프로세서(200)는 범용 프로세서, 코프로세서 또는 특수 목적 프로세서, 예를 들어, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU(general purpose graphics processing unit), 고 처리량 MIC(many integrated core) 코프로세서(30개 이상의 코어를 포함함), 임베디드 프로세서, 또는 이와 유사한 것 등일 수 있다. 프로세서는 하나 이상의 칩 상에 구현될 수 있다. 프로세서(200)는 예를 들어, BiCMOS, CMOS, 또는 NMOS와 같은 복수의 프로세스 기술 중 어느 하나를 이용하여 하나 이상의 기판들의 일부가 될 수 있고/또는 이들 기판상에 구현될 수 있다.
메모리 계층 구조(hierarchy)는 코어들 내에서의 하나 이상의 레벨들의 캐시, 하나 이상의 공유 캐시 유닛들(206)의 세트, 및 통합 메모리 컨트롤러 유닛들(214)의 세트에 결합되는 외부 메모리(도시 안됨)를 포함한다. 공유 캐시 유닛들(206)의 세트는 레벨 2(L2), 레벨 3(L3), 레벨 4(L4), 또는 다른 레벨들의 캐시와 같은 하나 이상의 중간 레벨 캐시들, 최종 레벨 캐시(LLC), 및/또는 이들의 조합을 포함할 수 있다. 일 실시예에서 링 기반 상호접속 유닛(212)이 통합 그래픽 로직(208), 공유 캐시 유닛들(206)의 세트, 및 시스템 에이전트 유닛(210)/통합 메모리 컨트롤러 유닛(들)(214)을 상호 접속하지만, 대안 실시예들은 그러한 유닛들을 상호 접속하기 위해 임의 수의 공지된 기술들을 이용할 수 있다. 일 실시예에서, 하나 이상의 캐시 유닛들(206)과 코어들(202A-N) 사이의 코히런시가 유지된다.
몇몇 실시예들에서, 코어들(202A-N) 중 하나 이상은 멀티스레딩할 수 있다. 시스템 에이전트(210)는 코어들(202A-N)을 코디네이팅하고 동작시키는 그런 컴포넌트들을 포함한다. 시스템 에이전트 유닛(210)은 예를 들어 전력 제어 유닛(PCU; power control unit) 및 디스플레이 유닛을 포함할 수 있다. PCU는 코어들(202A-N) 및 통합 그래픽 로직(208)의 전력 상태를 조절하는데 필요한 로직 및 컴포넌트들이거나 이들을 포함할 수 있다. 디스플레이 유닛은 하나 이상의 외부 접속되는 디스플레이들을 구동하기 위한 것이다.
코어들(202A-N)은 아키텍처 명령어 세트의 관점에서 동종 또는 이종일 수 있는데; 즉 코어들(202A-N) 중 둘 이상은 동일 명령어 세트를 실행할 수 있는 반면, 다른 코어들은 해당 명령어 세트의 서브세트만을 또는 상이한 명령어 세트를 실행할 수 있다. 일 실시예에서, 코어들(202A-N)은 이종이고, 이하 개시되는 "소형" 코어들 및 "대형" 코어들 양자 모두를 포함한다.
도 3 내지 도 6은 예시적인 컴퓨터 아키텍처들의 블록도들이다. 랩톱들, 데스크톱들, 핸드헬드 PC들, 퍼스널 디지털 어시스턴트들, 엔지니어링 워크스테이션들, 서버들, 네트워크 장치들, 네트워크 허브들, 스위치들, 임베디드 프로세서들, 디지털 신호 프로세서들(DSPs), 그래픽 장치들, 비디오 게임 장치들, 셋톱박스들, 마이크로 컨트롤러들, 휴대 전화들, 휴대용 미디어 플레이어들, 핸드헬드 장치들, 및 다양한 다른 전자 장치들에 대해 본 기술분야에 알려진 다른 시스템 설계들 및 구성들도 적합하다. 일반적으로, 본 명세서에 개시된 바와 같은 프로세서 및/또는 다른 실행 로직을 통합할 수 있는 매우 다양한 시스템들 또는 전자 장치들이 일반적으로 적합하다.
이제, 도 3을 참조하면, 본 발명의 일 실시예에 따른 시스템(300)의 블록도가 나타나 있다. 시스템(300)은 하나 이상 프로세서들(310, 315)을 포함할 수 있으며, 이들은 컨트롤러 허브(320)에 결합된다. 일 실시예에서, 컨트롤러 허브(320)는 그래픽 메모리 컨트롤러 허브(GMCH)(390) 및 입력/출력 허브(IOH)(350)(이는 별개의 칩들상에 있을 수 있음)를 포함하고; GMCH(390)는 메모리(340) 및 코프로세서(345)가 그에 결합되는 메모리 및 그래픽 컨트롤러들을 포함하고; IOH(350)는 GMCH(390)에게 입력/출력(I/O) 장치들(360)을 결합한다. 대안적으로, 메모리 및 그래픽 컨트롤러들 중 하나 또는 모두는 (본 명세서에서 설명되는 바와 같이) 프로세서 내에 통합되고, 메모리(340) 및 코프로세서(345)는 프로세서(310)에 직접 결합되며, 컨트롤러 허브(320)는 IOH(350)와 함께 싱글 칩 내에 위치한다.
부가 프로세서들(315)의 옵션적 속성은 도 3에서 파선들로 표시되어 있다. 각각의 프로세서(310, 315)는 본 명세서에서 기술된 하나 이상의 프로세싱 코어들을 포함할 수 있고, 또한 프로세서(200)의 일부 버전일 수 있다.
메모리(340)는 예를 들어, DRAM(dynamic random access memory), PCM(phase change memory), 또는 이 둘의 조합일 수 있다. 적어도 하나의 실시예에 대해, 컨트롤러 허브(320)는 FSB(frontside bus)와 같은 멀티 드롭 버스, QPI(QuickPath Interconnect)와 같은 포인트 투 포인트 인터페이스, 또는 유사한 접속부(395)를 통해 프로세서(들)(310, 315)와 통신한다.
일 실시예에서, 코프로세서(345)는 예를 들어, 고 처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서, 또는 이와 유사한 것과 같은 특수 목적 프로세서이다. 일 실시예에서, 컨트롤러 허브(320)는 통합 그래픽 가속기를 포함할 수 있다.
아키텍처적, 마이크로아키텍처적, 열적, 전력 소비 특성들, 및 그와 유사한 것을 포함하는 가치가 있는 메트릭의 스펙트럼의 측면에서 물리적 리소스들(310, 315) 사이에는 다양한 차이가 있을 수 있다.
일 실시예에서, 프로세서(310)는 일반 유형의 데이터 처리 연산들을 제어하는 명령어들을 실행한다. 명령어들 내에는 코프로세서 명령어들이 내장될 수 있다. 프로세서(310)는 이들 코프로세서 명령어들을 부착된 코프로세서(345)에 의해 실행되어야 하는 유형인 것으로서 인식한다. 따라서, 프로세서(310)는 코프로세서(345)에, 코프로세서 버스 또는 다른 상호 접속에 대한 코프로세서 명령어들(또는 코프로세서 명령어들을 나타내는 제어 신호들)을 발행한다. 코프로세서(들)(345)는 수신된 코프로세서 명령어들을 받아들이고 실행한다.
이제, 도 4를 참조하면, 본 발명의 일 실시예에 따른 제1의 보다 특정적인 예시적인 시스템(400)의 블록도가 나타나 있다. 도 4에 나타낸 바와 같이, 멀티프로세서 시스템(400)은 포인트 투 포인트 상호접속 시스템이고, 포인트 투 포인트 상호 접속(450)을 통해 결합되는 제1 프로세서(470) 및 제2 프로세서(480)를 포함한다. 각각의 프로세서들(470, 480)은 프로세서(200)의 일부 버전일 수 있다. 본 발명의 일 실시예에서, 프로세서들(470, 480)은 제각기 프로세서들(310, 315)인 반면에, 코프로세서(438)는 코프로세서(345)이다. 다른 실시예에서, 프로세서들(470, 480)은 제각기 프로세서(310), 코프로세서(345)이다.
프로세서들(470, 480)은 제각기 통합 메모리 컨트롤러(IMC) 유닛들(472, 482)을 포함하는 것으로 나타나 있다. 프로세서(470)는 또한 그의 버스 컨트롤러 유닛들의 일부로서 포인트 투 포인트(P-P) 인터페이스들(476, 478)을 포함하며; 유사하게 제2 프로세서(480)는 P-P 인터페이스들(486, 488)을 포함한다. 프로세서들(470, 480)은 P-P 인터페이스 회로들(478, 488)을 이용하여 포인트 투 포인트(P-P) 인터페이스(450)를 통해 정보를 교환할 수 있다. 도 4에 나타낸 바와 같이, IMC들(472, 482)은 각각의 프로세서들에게 국지적으로 부착되는 메인 메모리의 일부일 수 있는 각각의 메모리들, 즉 메모리(432) 및 메모리(434)에 프로세서들을 결합한다.
프로세서들(470, 480)은 각각이, 포인트 투 포인트 인터페이스 회로들(476, 494, 486, 498)을 이용하여 개별 P-P 인터페이스들(452, 454)을 통해 칩셋(490)과 정보를 교환할 수 있다. 칩셋(490)은 옵션으로서 고성능 인터페이스(439)를 통해 코프로세서(438)와 정보를 교환할 수 있다. 일 실시예에서, 코프로세서(438)는 예를 들어, 고 처리량 MIC 프로세서, 네트워크 또는 통신 프로세서, 압축 엔진, 그래픽 프로세서, GPGPU, 임베디드 프로세서, 또는 그와 유사한 것과 같은 특수 목적 프로세서이다.
공유된 캐시(도시되지 않음)는 어느 한 프로세서에 포함되거나, 양자 모두의 프로세서의 외부에 있지만, 여전히 P-P 상호접속을 통해 프로세서들과 접속될 수 있어서, 프로세서가 저 전력 모드에 놓이는 경우 어느 한쪽 또는 양자 모두의 프로세서의 로컬 캐시 정보가 공유된 캐시에 저장될 수 있다.
칩셋(490)은 인터페이스(496)를 통해 제1 버스(416)에 결합될 수 있다. 일 실시예에서, 제1 버스(416)는 주변 컴포넌트 상호 접속(PCI) 버스, 또는 PCI 고속 버스 또는 또 다른 3세대 I/O 상호 접속 버스와 같은 버스일 수 있지만, 본 발명의 범위는 이것들에만 한정되지는 않는다.
도 4에 나타낸 바와 같이, 다양한 I/O 장치들(414)은 제1 버스(416)를 제2 버스(420)에 결합하는 버스 브리지(418)와 함께 제1 버스(416)에 결합될 수 있다. 일 실시예에서, 코프로세서들, 고 처리량 MIC 프로세서들, GPGPU들, 가속기들(예를 들어, 그래픽 가속기들 또는 DSP(digital signal processing) 유닛들과 같은 것), FPGA들(field programmable gate arrays), 또는 임의의 다른 프로세서와 같은 하나 이상의 부가 프로세서(들)(415)가 제1 버스(416)에 결합된다. 일 실시예에서, 제2 버스(420)는 LPC(low pin count) 버스일 수 있다. 일 실시예에서, 예를 들어, 키보드 및/또는 마우스(422), 통신 장치들(427) 및 명령어들/코드 및 데이터(430)를 포함할 수 있는 디스크 드라이브 또는 다른 대용량 저장 장치와 같은 저장 유닛(428)을 포함하는 다양한 장치가 제2 버스(420)에 결합될 수 있다. 또한, 오디오 I/O(424)는 제2 버스(420)에 결합될 수 있다. 다른 아키텍처들도 가능하다는 점에 유의하라. 예를 들어, 도 4의 포인트 투 포인트 아키텍처 대신에, 시스템은 멀티 드롭 버스 또는 다른 그러한 아키텍처를 구현할 수 있다.
이제 도 5를 참조하면, 본 발명의 실시예에 따른 제2의 보다 구체적인 예시적인 시스템(500)의 블록도가 나타나 있다. 도 4 및 도 5의 동일 구성요소들은 동일 참조 번호가 부여되고, 도 4의 임의의 양상들은 도 5의 다른 양상들이 모호하게 되는 것을 피하기 위해 도 5로부터 생략되었다.
도 5는 프로세서들(470, 480)이 제각기 통합된 메모리 및 I/O 제어 로직("CL")(472, 482)을 포함할 수 있는 것을 예시한다. 따라서, CL(472, 482)은 통합 메모리 컨트롤러 유닛들을 포함하고, I/O 제어 로직을 포함한다. 도 5는 메모리들(432, 434)이 CL(472, 482)에 결합될 뿐만 아니라, I/O 장치들(514)이 또한 제어 로직(472, 482)에 결합된다는 것을 예시한다. 레거시 I/O 장치들(515)은 칩셋(490)에 결합된다.
이제 도 6을 참조하면, 본 발명의 일 실시예에 따른 SoC(600)의 블록도가 도시되어 있다. 도 2에 있는 유사한 구성요소들은 동일한 참조 부호를 갖는다. 또한, 점선 박스는 더욱 향상된 SoC들에 관한 선택적 특징들이다. 도 6에서, 상호접속 유닛(들)(602)이: 하나 이상의 코어들(202A-N)의 세트 및 공유 캐시 유닛(들)(206)을 포함하는 애플리케이션 프로세서(610); 시스템 에이전트 유닛(210); 버스 컨트롤러 유닛(들)(216); 통합 메모리 컨트롤러 유닛(들)(214); 통합 그래픽 로직, 이미지 프로세서, 오디오 프로세서, 및 비디오 프로세서를 포함할 수 있는 하나 이상의 코프로세서들(620)의 세트; SRAM(static random access memory) 유닛(630); DMA(direct memory access) 유닛(632); 및 하나 이상의 외부 디스플레이들에 결합하기 위한 디스플레이 유닛(640)에 결합된다. 일 실시예에서, 코프로세서(들)(620)는 특수 목적 프로세서, 예를 들어 네트워크 또는 통신 프로세서, 압축 엔진, GPGPU, 고 처리량 MIC 프로세서, 임베디드 프로세서, 또는 그와 유사한 것을 포함한다.
본 명세서에서 설명된 메커니즘들의 실시예들은 하드웨어, 소프트웨어, 펌웨어 또는 이러한 구현 접근법들의 조합으로 구현될 수 있다. 본 발명의 실시예들은 적어도 하나의 프로세서, (휘발성 및 비휘발성 메모리 및/또는 저장 구성요소를 포함하는) 저장 시스템, 적어도 하나의 입력 장치, 및 적어도 하나의 출력 장치를 포함하는 프로그램가능한 시스템상에서 실행되는 컴퓨터 프로그램 또는 컴퓨터 코드로서 구현될 수 있다.
도 4에 도시된 코드(430)와 같은 프로그램 코드는 본 명세서에서 기술된 기능들을 수행하고 출력 정보를 생성하는 명령어를 입력하기 위해 적용될 수 있다. 출력 정보는 공지 방식으로 하나 이상의 출력 장치에 적용될 수 있다. 본 명세서의 목적으로, 처리 시스템은 예를 들어 디지털 신호 프로세서(DSP), 마이크로컨트롤러, 주문형 집적 회로(ASIC) 또는 마이크로프로세서와 같은 프로세서를 갖는 임의의 시스템을 포함한다.
프로그램 코드는 처리 시스템과 통신하기 위해 고레벨 절차 또는 객체 지향 프로그래밍 언어로 구현될 수 있다. 프로그램 코드는 또한, 요구되는 경우, 어셈블리 또는 기계 언어로 구현될 수 있다. 사실상, 본 명세서에서 설명된 메커니즘들은 임의의 특정 프로그래밍 언어로 범위가 한정되지 않는다. 어느 경우에나, 언어는 컴파일되거나 해석되는 언어일 수 있다.
적어도 일 실시예의 하나 이상의 양상은 기계에 의해 판독될 때 기계로 하여금 본 명세서에서 설명되는 기술들을 수행하기 위한 로직을 제조하게 하는, 프로세서 내의 다양한 로직을 표현하는, 기계 판독가능 매체 상에 저장된 전형적인 명령어들에 의해 구현될 수 있다. "IP 코어들"로서 알려진 그러한 표현들은 유형의 기계 판독가능 매체 상에 저장될 수 있으며, 다양한 고객들 또는 제조 설비에 제공되어, 로직 또는 프로세서를 실제로 제조하는 제조 기계들 내에 로딩될 수 있다.
이러한 머신-판독가능 저장 매체들은, 하드 디스크들, 플로피 디스크들, 광 디스크들, CD-ROM들(Compact Disk Read-Only Memories), CD-RW들(Compact Disk ReWritable's) 및 광자기 디스크들 포함하는 임의의 다른 유형의 디스크들, ROM들(Read-Only Memories), DRAM들(Dynamic Random Access Memories), SRAM들(Static Random Access Memories) 등의 RAM들(Random Access Memories), EPROM들(Electrically Erasable Programmable Read-Only Memories), 플래시 메모리들, EEPROM들(Electrically Erasable Programmable Read-Only Memories), PCM(Phase Change Memory) 등의 반도체 장치, 자기 또는 광학 카드, 또는 전자적 명령어들을 저장하기에 적합한 임의의 다른 유형의 매체와 같은 저장 매체를 포함하는 머신 또는 장치에 의해 제조되거나 또는 형성되는 물품들의 비-일시적이고 유형인 배열들을 포함할 수 있고, 이에 제한되는 것은 아니다.
따라서, 본 발명의 실시예들은, 또한, 명령어들을 포함하거나, 또는 본 명세서에 개시되는 구조들, 회로들, 장치들, 프로세서들 및/또는 시스템 특징들을 정의하는, HDL(Hardware Description Language) 등의 설계 데이터를 포함하는 비-일시적이고 유형인 머신 판독가능 매체를 포함한다. 이러한 실시예들은 프로그램 제품들로도 참조될 수 있다.
일부 경우에는, 명령어 변환기가 소스 명령어 세트로부터 타깃 명령어 세트로 명령어를 변환하는데 사용될 수 있다. 예를 들어, 명령어 변환기는 코어에 의해 처리될 하나 이상의 다른 명령어들로 명령어를(예를 들어, 정적 이진 해석, 동적 컴필레이션을 포함하는 동적 이진 해석을 이용하여) 해석하거나, 모프하거나, 에뮬레이트하거나, 또는 다른 방식으로 변환할 수 있다. 명령어 변환기는 소프트웨어, 하드웨어, 펌웨어, 또는 그의 조합으로 구현될 수 있다. 명령어 변환기는 온-프로세서(on processor)에, 오프-프로세서(off processor)에, 또는 일부는 온-프로세서에 일부는 오프-프로세서에 있을 수 있다.
도 7은 본 발명의 실시예들에 따라 소스 명령어 세트 내의 이진 명령어들을 타깃 명령어 세트 내의 이진 명령어들로 변환하는 소프트웨어 명령어 변환기의 사용을 대조하는 블록도이다. 도시된 실시예에서, 명령어 변환기는 소프트웨어 명령어 변환기이지만, 대안적으로 명령어 변환기가 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 다양한 조합들로 구현될 수 있다. 도 7은 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716)에 의해 선천적으로 실행될 수 있는 x86 이진 코드(706)를 생성하기 위해 고급 언어(702)로 된 프로그램이 x86 컴파일러(704)를 이용하여 컴파일링될 수 있는 것을 보여준다. 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716)는, 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 결과들을 달성하기 위하여, (1) 인텔 x86 명령어 세트 코어의 명령어 세트의 실질적인 부분 또는 (2) 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서상에서 실행되는 것을 목표로 하는 애플리케이션들 또는 기타의 소프트웨어의 오브젝트 코드 버전들을 호환 가능하게 실행하거나 기타 방식으로 처리함으로써 적어도 하나의 x86 명령어 세트 코어를 갖는 인텔 프로세서와 실질적으로 동일한 기능들을 실행할 수 있는 임의의 프로세서를 나타낸다. x86 컴파일러(704)는 추가 연계 처리(linkage processing)를 수반하거나 수반하지 않고서 적어도 하나의 x86 명령어 세트 코어를 갖는 프로세서(716)상에서 실행될 수 있는 x86 이진 코드(706)(예를 들어, 오브젝트 코드)를 생성하도록 연산할 수 있는 컴파일러를 나타낸다. 유사하게, 도 7은 적어도 하나의 x86 명령어 세트 코어를 갖지 않는 프로세서(714)(예컨대, 미국 캘리포니아주 서니베일 소재의 MIPS 테크놀리지(Technologies)의 MIPS 명령어 세트를 실행하는 및/또는 미국 캘리포니아주 서니베일 소재의 ARM 홀딩스(Holdings)의 ARM 명령어 세트를 실행하는 코어들을 갖는 프로세서)에 의해 선천적으로 실행될 수 있는 대안의 명령어 세트 이진 코드(710)를 발생하기 위해 고급 언어(702)로 된 프로그램이 대안의 명령어 세트 컴파일러(708)를 사용하여 컴파일링될 수 있는 것을 보여준다. 명령어 변환기(712)는 x86 이진 코드(706)를 x86 명령어 세트 코어를 갖지 않는 프로세서(714)에 의해 선천적으로 실행될 수 있는 코드로 변환하는데 사용된다. 이 변환된 코드는 대안의 명령어 세트 이진 코드(710)와 동일할 가능성이 별로 없지만 -그 이유는 이것을 할 수 있는 명령어 변환기를 만들기가 어렵기 때문임 -; 변환된 코드는 일반 연산을 달성할 것이고 대안의 명령어 세트로부터의 명령어들로 구성될 것이다. 따라서, 명령어 변환기(712)는 에뮬레이션, 시뮬레이션, 또는 임의의 다른 처리를 통해 x86 명령어 세트 프로세서 또는 코어를 갖지 않는 프로세서 또는 다른 전자 장치로 하여금 x86 이진 코드(706)를 실행하게 하는 소프트웨어, 펌웨어, 하드웨어, 또는 이들의 조합을 나타낸다.
소프트웨어-투명 이종 연산
아래 기술된 본 발명의 실시예들은 소프트웨어로부터 감추고 프로세서내에 모든 이종-인식 로직 및 휴리스틱(heuristics)을 통합함으로써 이종에 대한 소프트웨어 지원의 부족함을 극복한다. 종래의 CPU에서는, 코어들의 임무의 할당이 소프트웨어에 의해(일반적으로 운영 시스템에 의해) 배타적으로 행해진 반면, 본 발명의 일 실시예에서는, 이러한 할당이 2개의 부분으로 나뉘어 진다. 소프트웨어는 프로세서에 의해 노출된 동종 "버추얼 코어들"에 대한 소프트웨어 처리를 계속해서 스케줄링하는 반면, 하드웨어는 물리적 코어가 주어진 버추얼 코어를 구현하는 것을 동적으로 선택한다. 처리량, 성능 또는 다른 메트릭(metric)을 극대화하기 위한 소프트웨어 스케줄링 알고리즘은 계속해서 작업하는 반면, 하드웨어는 최적화의 다른(투명한) 계층을 수행하며, 여기서 각각의 버추얼 코어에서 실행중인 처리들/스레드들은 그 버추얼 코어에서 실행중인 작업량의 유형에 가장 적합한 물리적 코어로 지향된다.
본 발명의 일 실시예는 상이한 유형의 연산 소자들을 포함하는 하드웨어 아키텍처를 포함하며, 각각의 타입은 상이한 성능과 전력 특성을 나타낸다. 본 명세서에서 기술된 실시예들의 일부에서, 연산 소자들은 멀티코어 프로세서 내의 코어들이다. 그러나, 본 발명의 근본 원리를 여전히 따르는 상이한 형태의 연산 소자들이 사용될 수 있다(예를 들어, 단일 프로세서 코어내의 기능 유닛들 또는 가속기들).
다수의 버추얼 및 동종 연산 소자들을 소프트웨어에 노출시킴으로써, 하드웨어의 이종 특성은 소프트웨어(예를 들어, 운영 시스템, 애플리케이션들 등)로부터 감춰질 수 있다. 따라서, 소프트웨어는 동종 코어들을 가진 프로세서에서 실행중인 것처럼 동작한다. 본 실시예의 프로세서 하드웨어는 소프트웨어에 노출된 각각의 버추얼 연산 소자들을, 활용가능한 하나 이상의 물리적 연산 소자 유형에 동적으로 매핑하는 로직을 포함한다. 하드웨어가 물리적 연산 소자들을 동적으로 선택하는 특수 메커니즘은 소프트웨어(로부터 감춰져서)에 투명하다.
연산 소자들의 이종 선택을 포함함으로써, 프로세서 하드웨어는 매우 상이한 유형의 연산 작업을 갖는 매우 상이한 동작 조건에서 상당히 효과적으로 항상 동작할 수 있다. 예를 들어, 작고, 전력 효율적인 코어와 크고, 고성능인 코어 양측 모두를 포함하는 CPU는 전력이 제한적일 때든(그리고 성능이 중요하지 않을 때) 또한 고성능이 필요한 다른 때든(하지만 전력은 제한되지 않을 때) 소프트웨어를 효율적으로 실행시키는데 사용될 수 있다. 하드웨어내의 연산 소자들의 상이한 조합들의 선택은 어느 유형들의 작업(task)이 어떤 조건하에서 시스템상에서 실행될 필요가 있는지에 대한 설계 요구사항에 기초한다.
이종 시스템들은 프로세서 코어들, 그래픽 프로세서 유닛들(GPUs), 고정된 기능 가속기들(예를 들어, 소트 및 루프와 같은 공통 기능들을 가속하기 위한)과 같은 상이한 유형의 연산 소자들을 포함할 수 있다. 후술되는 본 발명의 실시예들에서, 이종 시스템들은 상이한 유형의 프로세서 코어들 - 즉, 소수의 고성능 코어들과 다수의 작은 전력 효율적인 코어들을 갖는다. 그러나, 본 발명의 근본 원칙은 다른 유형의 연산 소자들에 의해 사용될 수 있다.
도 8은 소프트웨어 투명성을 제공하는 이종 코어 시스템의 일 실시예를 나타낸다. 프로세서 하드웨어는 다수의 이종 물리적 코어들, PC0-PC3(810)을 포함한다. 그러나, 단지 동종 버추얼 코어들 VC0-VC3(806)은 소프트웨어에 노출된다. 따라서, 소프트웨어 기반 스케줄러(804)(이것은 운영 시스템의 일부일 수 있다)는 실제의 동종 다중-코어 프로세서 또는 다중-프로세서 시스템에서 이루어지는 것과 같이 노출된 동종 버추얼 코어들(806) 각각에 대해 실행되도록 작업(802)을 스케줄링한다. 스케줄러(804)가 계속해서 버추얼 코어들(806)에 소프트웨어 작업들을 스케줄링하는 동안, 버추얼 투 피지컬(V-P) 매핑 로직(808)은 하나 이상의 적절한 물리적 코어들(810)에 각각의 버추얼 코어(806)를 매핑한다. 일 실시예에서, 매핑 판정은 매핑 룰(820)과 현재의 검출 조건(821)의 세트에 응답하여 판정 로직(809)을 매핑함으로써 수행된다. 매핑 룰(820) 및 매핑 판정 로직(809)은 펌웨어, 소프트웨어, 하드웨어 또는 이들의 임의 조합으로 구현될 수 있다. 하드웨어에서 구현될 경우, 매핑 룰(820)과 매핑 판정 로직(809)은 V-P 코어 매핑 로직(808) 내의 프로세서 칩 상의 로직으로써 통합될 수 있다. 소프트웨어 또는 펌웨어에서 특정될 경우, 매핑 룰(820)과 매핑 판정 로직(809)은 칩이 제조되어 판매된 후에 프로그램되고 재프로그램될 수 있다. 본 발명의 근본적인 원칙은 매핑 룰(820)과 매핑 판정 로직(809)이 어떻게 구현되는지 무관하게 동일하게 유지된다.
매핑 판정 로직(809)에 의해 이용되는 매핑 룰들과 조건의 몇가지 특정 예들은 아래 제공된다(예를 들어, 실행되고 있는 작업들의 요구사항들과 프로세서의 전력 프로파일에 기초하여 구현된다). 간단하게, 일 실시예에서, 매핑 판정 로직(809)은 매핑 룰(820)과 현재 동작 조건(821)에 따라 물리적 코어들(810)에 다양한 버추얼 코어들(806)이 어떻게 매핑되어야 하는지를 결정하는 매핑 알고리즘을 구현한다. 일 실시예에서, 매핑 판정 로직(809)은 버추얼 코어들과 물리적 코어들 사이에서 물리적 매핑을 수행하기 위해 V-P 코어 매핑 로직(808)에 의해 이용될 하드웨어 매핑 테이블을 구성한다.
도 8에 나타난 특정 예에서, 버추얼 코어 VCO는 물리적 코어 PC1에 매핑되고, 버추얼 코어 VC1는 물리적 코어 PC3에 매핑되고, 버추얼 코어 VC2는 물리적 코어 PC0에 매핑되고, 버추얼 코어 VC3는 물리적 코어 PC2에 매핑된다. 도 8의 물리적 코어들(810)의 상이한 사이즈들은 각각의 코어의 처리 능력의 양을 암시하는데 사용된다. 따라서, 물리적 코어 PC3는 "크고" 고성능인 코어이고; 물리적 코어들 PC0-PC1은 "작고", 전력 효율적인 코어들이고; 물리적 코어 PC2는 작은 코어들 PC0-PC1에 비해 더 높은 성능을 제공하지만 큰 코어 PC3에 비해 보다 낮은 성능을 제공한다.
따라서, 도 8에서, (매핑 룰(820)을 구현하고 현재 조건(821)에 기초하는)V-P 코어 매핑 로직(808)은 버추얼 코어들 VC0와 VC2에 할당된 작업들은 작은 코어에 가장 적합하고, VCl에 할당된 작업은 크고, 고성능인 코어에 가장 적합하고, VC3에 관련된 작업은 사이에 있는 어딘가에 있는 것으로 결정했다. 이 구현은 시스템으로 하여금 소프트웨어가 그것에 대하여 어떤 것을 알려고 요구하지 않고 이종의 편익성들을 실현할 수 있도록 허용한다.
상술한 바와 같이, 매핑 판정 로직(809)은 컴퓨팅 시스템과 연관된 현재 검출된 동작 조건(821)을 고려하여 매핑을 수행할 수 있다. 예를 들어, 컴퓨팅 시스템이 모바일 장치인 경우, V-P 코어 매핑 로직(808)은 모바일 장치가 현재 배터리에 의해 전력을 공급받는지 또는 전기 콘센트에 플러그되어 있는지에 따라 상이하게 매핑을 수행할 수 있다(예를 들어, 배터리에 전력을 공급받는 동안 가능할 경우 좀 더 작은 코어들을 사용하는 경향이 있다). 유사하게, 모바일 컴퓨팅 시스템의 배터리 레벨이 낮으면(예를 들어, 일부 특정된 임계값보다 낮다면), V-P 코어 매핑 로직(808)은 절대적으로 필요하지 않는 한, (배터리를 보다 빠르게 소모하는 경향이 있는)크고, 고성능인 코어 PC3를 사용하는 것을 삼가할 수 있다. 다른 예로서, 시스템의 전체 전력 예산의 상당한 양의 전력이 다른 프로세서 컴포넌트에 의해 소모되고 있는 경우(예를 들어, 그래픽 프로세싱 유닛이 그래픽 집중 동작을 수행하고 있는 경우), V-P 코어 매핑 로직(808)은 크고, 고성능인 코어 PC3를 사용하는 것을 삼가할 수 있다. 이런한 경우에, 현재 조건(821)은 코어들(810)에 현재 활용가능한 전체 전력 예산의 양(예를 들어, 전체에서 다른 시스템 컴포넌트들에 의해 소모되고 있는 양을 감산한 양)을 표시할 수 있고 V-P 코어 매핑 로직(808)은 그에 따라 매핑을 수행할 수 있다.
3개의 상이한 코어들이 도 8에 도시되어 있지만, 본 발명의 일 실시예는 N개의 작은 코어들과 M개의 큰 코어들을 포함하며, 여기서 N>M. 크고 작은 코어들을 가진 소프트웨어-투명한 이종 시스템은 다수의 상이한 시나리오들에 대해 조정될 수 있다. V-P 코어 매핑 로직(808)에서 구현되는 휴리스틱을 동적으로 변경함으로써, 시스템은 상이한 설정에 대해 최적화될 수 있다. 3개의 예시적 실시예들은 다음과 같다: (1) 성능을 최적화하고, (2) 전력 예산을 최적화하며, (3) 에너지 효율을 최적화한다. 예를 들어, 컴퓨팅 장치가 AC 콘센트에 플러그인되고 및/또는 가득 찬 배터리를 가지고 있다면, V-P 코어 매핑 로직(808) 시스템은 크고, 고성능인 코어 PC3에 보다 자주 매핑하는, (1)를 선택할 수 있다. 대조적으로, 교류 전력이 아닐 경우 및/또는 배터리가 낮을 경우, V-P 코어 매핑 로직(808)은 단지 작은 물리적 코어들 PC0 및 PC1만을 이용하는, (3)을 선택할 수 있다. 전력 예산이 특정될 경우, V-P 코어 매핑 로직(808)은 특정된 전력 예산내에서 시스템을 유지하면서(예를 들어, 전력 예산내에서 그러한 이용이 적합한 경우에만 고성능인 코어 PC3를 이용하면서) 허용가능한 가장 높은 성능 옵션을 선택할 것이다.
상술한 바와 같이, 물리적 코어들에 버추얼을 매핑하는 V-P 코어 매핑 로직(808)에 의해 구현되는 휴리스틱은 또한 그래픽 처리기(GPU)와 같이 다른 CPU 컴포넌트들과 성능과 전력 레벨들을 조정할 수 있다.
휴리스틱은 하드웨어로 구현될 수 있지만, 그것이 펌웨어 또는 소프트웨어에서 구현된다고 할지라도, 휴리스틱이 프로세서 공급자에 의해 제공되기 때문에 운영 시스템이 할 수 있는 것보다 하드웨어에 의해 훨씬 더 낫게 조정될 수 있다. 예를 들어, 휴리스틱은 (현재의 동작 조건(821)에 의해 표시되는 바와 같이) 실시간으로 GPU 전력 활용을 볼 수 있고, 얼마나 많은 잔여 전력이 프로세서 코어들(810)에 의해 사용될 수 있는지를 실시간으로 결정할 수 있다. 다음으로, 휴리스틱은 이들 특정된 전력 제약 조건들에 기초하여 물리적 코어들(810)에 버추얼 코어들(806)을 매핑한다.
도 9a에 도시된 바와 같이, "이종 상승(hetero-UP)"(900)으로서 본 명세서에서 언급된, 이종 코어 연산 구현의 일 실시예는 단지 작은 전력 효율적 코어들(902)만을 소프트웨어에 노출시키는 것으로 구성된다. 추가적 성능이 애플리케이션(906)에 의해 필요하게 될 경우(그리고 전력 예산이 활용가능할 경우), V-P 코어 매핑 로직(808)은 작은 코어 대신에 구동하기 위해 고성능인 큰 물리적 코어(904)를 투명하게 이용한다.
도 9b에 도시된 바와 같이, "이종 하강(hetero-Down)"(910)으로서 본 명세서에서 언급된, 이종 코어 연산 구현의 다른 실시예는 단지 큰고, 고성능인 코어들(914)만을 소프트웨어에 노출시키는 것으로 구성된다. 절전이 필요한 경우(그리고 성능이 애플리케이션(916)에 중요하지 않은 경우), V-P 코어 매핑 로직(808)은 큰 코어(914) 대신에 구동하기 위해 전력 효율적인 작은 물리적 코어(912)를 투명하게 이용한다.
상술한 투명한 접근법에 적어도 2가지 명확한 장점들이 있다:
(1) 운영 시스템 또는 애플리케이션 소프트웨어는 CPU가 이종 코어들(또는 다른 연산 소자들)을 구비하고 있는지를 알고 있을 필요가 없다. 이것은 운영 시스템들을 포함하는, 레거시 소프트웨어가 계속해서 상술한 하드웨어와 함께 작업할 수 있다는 것을 의미한다. 유사하게, 장래의 운영 시스템들과 소프트웨어 애플리케이션들은 하드웨어의 매 버전마다 이종의 유형을 반영하기 위해 지속적으로 갱신될 필요가 없을 것이다.
(2) 레버리지 이종 편익성에 대해 매핑 판정 로직(809) 또는 V-P 코어 매핑 로직(808)에 의해 구현된 모든 휴리스틱은 하드웨어 내에 또는 하드웨어와 함께 번들화된 소프트웨어 또는 펌웨어(즉, 프로세서 공급자에 의해 제공된다)에 의해 포함된다. 따라서, 장래의 하드웨어 설계는 보다 적극적이며 혁신적인 연산 소자 선택을 창출할 수 있는데, 이는 변경의 전체 범위가 소프트웨어로부터 감춰지고 소프트웨어 갱신을 필요로 하지 않게 되기 때문이다.
본 발명의 일 실시예에 따른 방법은 도 10에 도시되어 있다. 1001에서, 소프트웨어 기반 스케줄러는 버추얼 코어에 작업을 스케줄링한다. 상술한 바와 같이, 일 실시예에서, 프로세서 하드웨어는 소프트웨어에 의해 사용할 한 세트 또는 버추얼 코어들을 노출시킨다. 1002에서, 하드웨어는 실행될 작업의 요구사항과 연산 시스템의 동작 조건들을 결정한다. 예를 들어, 일부 고성능 애플리케이션은 고성능 코어를 요구하거나 보다 효율적으로 실행할 수 있지만 다른 애플리케이션들(예를 들어, 미디어 애플리케이션들)은 고성능 코어의 처리 능력을 요구하지 않을 수 있다.
현재 동작 조건 및/또는 작업 요구사항들에 기초하여(1002에서 결정된다), 1003에서, 작업이 할당된 버추얼 코어는 프로세서내의 물리적 코어에 매핑된다. 예를 들어, 작업이 고성능 처리를 요구한 것이라면, 이것은 고성능 코어에 매핑될 수 있다. 상술한 바와 같이, 일부 구현들에서, 물리적 코어들의 전부 또는 서브세트는 매핑이 소프트웨어에게 투명하게 수행되도록 "감춰질 수 있다".
일 실시예에서, 프로세서는 현재 동작 조건들을 계속해서 모니터링하고 검출된 변화에 응답하여 물리적 코어들에 버추얼 코어들을 재매핑한다. 따라서, 1004에서, 동작 조건의 변화가 검출되면, 처리는 물리적 코어들에의 버추얼 코어들의 재매핑이 수행될 수 있는 1003으로 되돌아 간다. 일례로서, 조건들의 변화는 모바일 장치의 배터리 전력이 임계치 값에 도달하는 것이거나 모바일 장치가 교류 전력에서 배터리 전력으로 이동되고 있는 것일 수 있다. 본 발명의 근본적인 원칙은 동작 조건의 다양한 다른 변화들에 응답하여 물리적 코어들을 검출하고 물리적 코어들에 버추얼을 재매핑하도록 적응될 수 있다.
이종 시스템들을 사용하여 직렬 성능을 향상시키기
시스템에 사용할 연산 소자들을 선택할 경우, 일반적으로, 성능과 효율 사이에 트레이드오프가 있다. 예를 들어, 더 크고 복합한 코어들(예를 들어, 상술한 "큰" 코어들)은 더 높은 성능을 달성할 수 있지만, 에너지 사용시 매우 낭비적이다. 한편, 보다 작고 최적화된 코어들(예를 들어, 상술한 "작은" 코어들)은 매우 에너지 효율적일 수 있지만(명령어 당 에너지를 최소화한다), 그들의 최대 성능은 제한된다. 유사한 트레이드오프는 예를 들어, 데이터 상호접속부, 그래픽, 및 메모리를 포함하는 다른 시스템 컴포넌트들에 대해 존재한다,
상당히 병렬화된 작업량들에 대해서, 최적 설계 접근법은 다수의 작고, 에너지 효율적인 연산 소자들(예를 들어, 작은 코어들)을 사용하는 것이다. 이들 소자들은 최소량의 에너지로 고정된 수의 명령어들을 연산하는 능력을 제공한다. 작업량이 병렬이기 때문에, 추가적 성능은 동일 레벨의 에너지 효율을 유지하면서(명령어당 에너지를 낮게 유지하면서) 연산 소자들(예를 들어, 작은 코어들)의 개수를 증가시킴으로써 달성될 수 있다. 그러나, 작업량(또는 그것의 일부)가 병렬화되지 았다면, 많아야 하나 코어에서 작동할 수 있다. 이러한 경우에, 성능은 더 많은 코어들을 이용함으로써 증가될 수 없다; 성능을 증가시키기 위한 유일한 방법은 에너지 효율을 희생하여 보다 강력한(보다 큰) 코어를 사용하는 것이다.
작업량들을 완전히 예측할 수 없고 코드(병렬 및 직렬)의 상이한 혼합들을 포함하기 때문에, 언제나 최적인 단일 유형의 연산 소자를 설계하는 것은 가능하지 않다. 보다 나은 설계 선택은 상이한 때마다 상이한 작업량 및 시스템 요구사항을 다루는 코어들의 이종 조합을 사용하는 것이다. 본 발명의 일 실시예에서, 작업량이 병렬화될 때, 작은 에너지 효율적인 코어들이 사용된다. 작업량이 병렬화되지 않고 성능이 요구될 경우에는, 크고 복잡한 코어가 사용된다.
본 발명의 일 실시예는 에너지 효율적이고 소프트웨어에 노출되는 다수의 작은 코어들을 포함하는 하드웨어 기반 프로세서 아키텍처로 구성된다. 즉, 그들은 소프트웨어 기반 스케줄러가 코어들 상에서 실행하기 위한 작업/스레드들을 스케줄링할 수 있도록 소프트웨어에 가시화할 수 있다. 게다가, 프로세서 아키텍처는 고성능을 제공하고 소프트웨어로부터 감춰지는 소수의 큰 코어들을 포함한다(즉, 소프트웨어 기반 스케줄러는 큰 코어들상에서 작업/스레드들을 직접적으로 스케줄링할 수 없다).
다수의 노출된 작은 코어들은 소프트웨어가 효율적 방식으로 병렬 코드를 작동하게 한다. 예를 들어, 운영 시스템 스케줄러는 작은 코어들의 수를 검출할 것이고 병렬 애플리케이션들은 이후 작은 코어들의 병렬 실행을 위한 다중 소프트웨어 스레드들을 생성할 수 있을 것이다. 병렬 스레드들은 작은 코어들의 전부 또는 서브세트에 걸쳐서 스케줄링될 수 있다. 충분한 수의 액티브 소프트웨어 스레드들이 있을 때, 애플리케이션은 매우 효율적으로 작동되며(명령어당 고성능과 낮은 에너지), 이는 모든 작은 코어들이 사용되기 때문이다.
그러나, 병렬성(parallelism)이 제한될 때(예를 들어, 액티브 스레드들의 수가 이용가능한 작은 코어들의 수보다 작다면) 애플리케이션의 위상들이 있다면, 작은 코어들에 대한 애플리케이션 성능은 또한 제한될 것이며, 이는 작은 코어들의 일부가 어떠한 작업도 하지 않고, 한가롭게 대기할 것이기 때문이다. 작은-코어 성능의 손실을 보상하기 위해, 본 발명의 일 실시예는 액티브 작은 코어들의 일부를 큰 코어들과 투명하게 교체한다. 큰 코어들이 성능이 더 높기 때문에, 큰 코어들상의 하나 이상의 스레드들을 실행하는 것은 애플리케이션의 전체적 성능을 향상시킬 것이다. 이러한 애플리케이션의 비-병렬 또는 "직렬" 위상동안, 보다 적은 코어들이 액티브가 될 것이지만, 이는 일부 큰 코어들이 사용되기 때문이고, 코어들은 전체로서 더 많은 전력을 사용하고 더 높은 성능을 가질 수 있다.
도 11a 및 도 11b는 본 발명의 일 실시예가 필요할 경우 작은 코어를 큰 코어로 어떻게 투명하게 교체하는지 나타낸다. 다른 언급이 없다면, 도 11a 및 도 11b에서의 컴포넌트들은 도 8을 참조하여 상술한 대응하는 컴포넌트들과 동일한 기능들을 수행한다. 프로세서 하드웨어는 작은 코어들 PC0-PC3과 하나의 큰 코어 PC4의 세트를 포함하는 다수의 이종 물리적 코어들 PC0-PC4(1150)을 포함한다. 이 실시예에서, 동종 버추얼 코어들 VC0-VC3(1106)은 소프트웨어에 직접적으로 노출된다. 따라서, 소프트웨어 기반 스케줄러(1110)(운영 시스템의 일부일 수 있다)는 실제의 동종 다중-코어 프로세서 또는 다중-프로세서 시스템에서 이루어지는 것과 같이 각각의 노출된 동종 버추얼 코어들(1106)상에서 실행하기 위한 스레드들(1101)을 스케줄한다. 버추얼 투 피지컬(V-P) 매핑 로직(1130)은 매핑 룰(1140)의 세트에 따라 그리고 현재 검출된 조건들(1141)에 기초하여 하나 이상의 적절한 물리적 코어들(1150)에 각각의 버추얼 코어(1120)를 매핑한다. 상술한 바와 같이, 매핑 판정은 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의 조합에서 구현될 수 있는 판정 로직(1109)을 매핑함으로써 수행될 수 있다.
도 11a에 도시한 바와 같이, 버추얼 코어들(1106)과 작은 코어들 PC0-PC3 사이에 디폴트 1:1 매핑이 존재한다. 따라서, 이 구현에서, 작은 코어들 PC0-PC3는 소프트웨어 기반 스케줄러에 효과적으로 가시화할 수 있다. 일 실시예에서, 시스템이 낮은 활용도를 가질 경우(특정된 임계값보다 낮을 경우) 및/또는 대부분의 작은 코어들이 비지(busy) 상태일 경우(예를 들어, 특정된 임계값보다 높은 처리량을 가지고 있을 경우), 이 디폴트 매핑은 유지된다. 예를 들어, 일 실시예에서, 시스템이 낮은 활용도를 가질 경우(예를 들어, 어떠한 코어도 60% 활동을 초과하지 않을 경우) 또는 대부분의 작은 코어들이 비지 상태일 경우(예를 들어, 전체 활용가능한 코어들 중 75% 초과의 코어들이 60% 활동을 초과하는 경우), 이 디폴트 매핑은 유지된다.
그러나, 일 실시예에서, 시스템이 다수의 아이들(idle) 코어들(예를 들어, 모든 활용가능한 코어들 중 50% 초과)과 소수(하나 이상)의 과부하의, 매우 액티브한 코어들을 가지고 있을 때, 매핑 판정 로직(1109)에 의해 구현되는 휴리스틱은 도 11b에 도시된 바와 같이 매핑을 자동적으로 변경한다. 여기서, 단지 2개의 스레드들(1101)은 버추얼 코어들 VC1과 VC2에 스케줄러(1110)에 의해 스케줄링되고 있는 중이고, 버추얼 코어들 중 적어도 하나(본 예에서는 VC2)는 특정된 임계값 초과의 활동성을 갖는다. 따라서, 이 예에서, V-P 코어 매핑 로직(1130)은 매핑 판정 로직(1109)에 의해 제공된 매핑 판정에 응답하여 버추얼 코어 VC2를 작은 물리적 코어 PC2로부터 큰 물리적 코어 PC4에 재매핑하였다.
본 발명의 일 실시예에 따른 방법은 도 12에 제시된다. 1201에서, 소프트웨어 기반 스케줄러는 상술한 바와 같이 버추얼 코어들에 작업/스레드들을 스케줄링한다. 상술한 바와 같이, 일 실시예에서, 디폴트 1:1 매핑은 버추얼 코어들과 작은 코어들 사이에 사용되며, 이로써 소프트웨어에 작은 코어들이 노출된다. 따라서, 1202에서, 디폴트 매핑은 작업/스레드들을 처리하기 위해 초기에 이용된다. 액티브한 작은 코어들의 수가 임계값(예를 들어, 모든 코어들 중 50%) 미만이고 및/또는 임계값 초과인 작은 코어들 중 적어도 하나의 로드가 검출되면(1204에서 판정된다), 1205에서, 버추얼 코어들 중 적어도 하나는 큰 물리적 코어(예를 들어, 로드가 가장 큰 버추얼 코어)에 매핑된다. 일 실시예에서, V-P 코어 매핑 로직은 각각의 코어들의 활용도와 로드를 계속해서 모니터링한다. 1206에서, 활성 코어들의 수가 임계치를 초과하는 경우(예를 들어, 모든 코어들 중 75%), 및/또는 임계값 미만인 작은 코어들의 로드가 검출되는 경우(실행되고 있는 애플리케이션의 병렬 부분을 나타냄), 1202에서, V-P 코어 매핑 로직은 각각의 버추얼 코어가 작은 물리적 코어에 매핑되는 디폴트 매핑으로 되돌아 간다.
이종 시스템들을 사용하여 에너지 효율을 향상시키기
새로운 컴퓨팅 장치들이 유비쿼터스화되고 개인소유화됨에 따라, 통상적인 작업량의 본질 및 유용성이 급격하게 변화하고 있다. 넷북들, 태블릿들, 스마트 폰들과 다른 클라이언트 장치들은 오랜 시간동안 전원이 켜져 있지만, 이들의 과도한 연산 작업의 대부분을 짧은 시간에 폭발적으로 수행한다. 동시에, 컴퓨팅 장치들이 보다 휴대가 용이하게 됨에 따라, 배터리 수명과 에너지 효율은 점점 중요한 관심사가 되고 있다. 가변 전력과 성능 프로파일을 갖는 코어들로 구성된 이종 칩 멀티프로세서는 지각가능할 만한 성능을 신장시킬 기회를 제공하는 한편, 에너지가 효율적이다.
모두 고성능 코어들로 구성되는 시스템은 풍부한 최종-사용자 경험을 보장하는 상급 레벨의 싱글-스레드 성능을 전달할 수 있을 것이다. 그러나, 그러한 멀티프로세서는 전력에 굶주린 코어들에 공급하기 위해 상당한 양의 전력을 소모할 것이다. 본 명세서에서 기술된 본 발명의 일 실시예는 M개의 고성능(큰) 코어들, N개의 에너지 효율적(작은) 코어들, 및 통합된 그래픽 엔진을 포함하는 이종 프로세서를 포함한다. 작은 코어들은 연속적인 동작의 긴 기간동안 절전을 제공하는데 사용되는 한편, 큰 코어들은 짧고 폭발적인 활동 기간동안 단일 스레드 성능을 빠르게 신장시키는데 사용된다.
도 13d에 도시된 바와 같이, 클라이언트 사용 케이스의 한가지 전형적인 예는 음악(1391)을 듣는 동안 웹 페이지 브라우징(1392)이다. 브라우저 애플리케이션은 대부분의 시간을 아이들(idle) 상태로 있게 된다; 이것은 최종 사용자로부터 웹 페이지의 로딩을 시작하라고 하거나 새로운 콘텐츠를 제공하라고 하는 요구가 접수된 후에만 액티브 상태가 된다. 브라우저 애플리케이션이 액티브 상태가 될 때, 그 성능 요구사항에 갑작스러운 피크가 있게 된다. 한편, 미디어 플레이어 애플리케이션은 연속적으로 액티브 상태이지만 압축된 음악 스트림이 디코딩되는 기간에 걸쳐서 낮은 CPU 활동을 갖는다. 이종 시스템은 웹-페이지 렌더링의 짧은 시간동안에는 큰 코어를 사용하는 한편, 장시간에 걸쳐서 미디어 플레이어를 작동하기 위해 작은 코어를 사용함으로써 이러한 유형의 작업량의 다양성을 활용하여 지각할 만한 성능을 향상시킬 수 있다.
후술되는 본 발명의 실시예들은 소프트웨어에 큰 코어들만을 노출시키고 작은 코어들을 감춤으로써 그러한 이종 시스템을 실현하기 위한 소프트웨어-투명한 접근법을 사용한다. 따라서, 이것은 특정 시점에 주어진 작업량에 대한 최적의 자원을 결정하기 위해 소프트웨어가 이종 자원들에 대한 완벽한(full) 지식을 갖도록 요구하게 될 소프트웨어-인식 이종 시스템의 바람직하지 않은 상황을 회피한다. 작은 코어들이 지속적인 동작을 하도록 레버리징함으로써, 최종-사용자가 감지한 성능의 향상을 직접적으로 해석한 그래픽 성능을 신장하거나(플레이 불가능한 것에서 플레이 가능한 것으로 게임을 변형하거나 게임의 품질을 향상시키는) 또는 장치의 배터리 수명을 증가시키는 것 중 하나로 재지향될 수 있어 전력을 현저하게 절약할 수 있다. 게다가, 작은 코어들의 수(N)가 큰 코어들의 수(M)보다 더 크면, 작은 코어들은 큰 코어들보다 더 높은 다중-스레드 성능을 제공할 수 있다. 그러한 이종 시스템의 투명한 구현에서, 이것은 큰 코어들이 하이퍼-스레드되고 작은 코어들이 없을 때 발생하기 쉽다.
도 13a 및 도 13b는 작은 코어들 PC2-PC5와 2개의 큰 코어들 PC0-PC1의 세트를 포함하는 다수의 이종 물리적 코어들 PC0-PC5(1350)을 프로세서 하드웨어가 포함하는 본 발명의 일 실시예를 나타낸다. 이 실시예에서, 동종 버추얼 코어들 VC0-VC3(1320)은 소프트웨어에 직접적으로 노출된다. 따라서, 소프트웨어 기반 스케줄러(1310)(이것은 운영 시스템의 일부일 수 있다)는 실제의 동종 다중-코어 프로세서 또는 다중-프로세서 시스템에서 이루어지는 것과 같이 노출된 동종 버추얼 코어들(1320) 각각에 대해 실행하기 위한 스레드들(1301)을 스케줄링한다. 버추얼 투 피지컬(V-P) 매핑 로직(1330)은 매핑 룰(1340)의 세트에 따라 그리고 현재 검출된 조건들(1341)에 기초하여 하나 이상의 적절한 물리적 코어들(1350)에 각각의 버추얼 코어(1320)를 매핑한다. 다른 언급이 없다면, 도 13a 및 도 13b에서의 컴포넌트들은 도 8과 도 11a 및 도 11b을 참조하여 상술한 대응하는 컴포넌트들과 동일한 기능들을 수행한다. 예를 들어, 상술한 바와 같이, 매핑 판정은 소프트웨어, 하드웨어, 펌웨어 또는 이들의 임의 조합에서 구현될 수 있는 판정 로직(1309)을 매핑함으로써 수행될 수 있다.
도 13a에 도시된 바와 같이, 일 실시예에서, V-P 코어 매핑 로직(1330)에 의해 사용되는 디폴트 매핑은 큰 물리적 프로세서 코어들 PC0-PC1 각각에 버추얼 코어들(1320) 중 2개를 매핑한다. 따라서, 이 실시예에서, 각각의 물리적 프로세서 코어들 PC0-PC1는 동시에 멀티스레딩할 수 있다(즉, 각각의 물리적 프로세서 코어 PC0-PC1은 적어도 2개의 스레드들의 하이퍼스레딩(hyperthreading)을 할 수 있다). 일 실시예에서, 디폴트 매핑하에서, 작은 프로세서 코어들 PC2-PC5는 소프트웨어로부터 감춰지는 한편 큰 프로세서 코어들 PC0-PC1은 노출된다. 따라서, 디폴트 구성에서, 소프트웨어는 2개의 하이퍼스레드 프로세서 코어들 PC0-PC1을 "볼 수 있고" 또는 2개 물리적 프로세서 코어들은 코어들의 하이퍼스레딩 능력으로 인해 4개 이상의 프로세서 코어들로서 소프트웨어에 나타날 수 있다(예를 들어, 코어들이 2-웨이(way) 하이퍼스레딩을 할 수 있다면, 소프트웨어는 4개의 프로세서 코어들을 볼 수 있고, 3-웨이 하이퍼스레딩을 할 수 있다면, 소프트웨어는 6개의 프로세서 코어들을 볼 수 있고, 기타 등등).
도 13b에 도시된 바와 같이, 연산 시스템과 연관된 다른 조건들(1341) 및/또는 처리되고 있는 스레드들의 유형의 변화를 검출하는 것에 응답하여, 매핑 판정 로직(1309)은 V-P 코어 매핑 로직(1330)이 노출된 큰 코어들 PC0-PC1으로부터 감춰진 작은 코어들 PC2-PC5에 스레드들을 재매핑하게 한다. 도 13c에 도시된, 또 다른 실시예에서, 스레드들 중 단지 2개만이 큰 코어 PC0로부터 작은 코어들 PC2 및 PC3에 재매핑되고; 나머지 2개의 스레드들은 큰 코어 PC1에 매핑된 채로 있다. 이들 예는 단지 설명을 위해 제공된 것이라는 것에 유의해야 한다. 본 발명의 근본적인 원칙은 코어들에 대한 스레드들의 임의의 특정한 매핑 또는 큰/작은 코어들의 임의의 특정 개수에 제한되지 않는다.
본 방법의 일 실시예는 작은 코어들 PC2-PC5을 레버리징하여 연속적인 동작의 긴 시간동안 전력을 절약하고 있지만(예를 들어, 도 13d에서의 미디어 플레이백(1390)으로부터의 결과), 큰 코어들 PC0-PC1은 소프트웨어에 투명한 방식으로 짧고 잠재적으로 폭발적인 활동 기간동안 단일 스레드 성능을 빠르게 신장시키는데 사용된다(예를 들어, 웹 페이지 브라우징(1392) 또는 다른 상호작용 애플리케이션으로부터의 결과).
일 실시예에서, V-P 코어 매핑 로직(1330)에 의해 구현되는 휴리스틱은 다음을 포함하는, 큰 코어들과 작은 코어들간에 이동하기 위한 이동 판정에 대한 범위의 다양한 인자들을 평가한다:
(1) 액티브 물리적 코어들의 개수. 이 정보는 멀티스레드 작업량들을 식별하는데 사용될 수 있다.
(2) 각각의 액티브 물리적 코어들에 대한 현재의 활용도. 이 정보는 예를 들어, 특별한 스레드를 실행하는데 필요한 처리 능력의 정도를 나타낼 수 있다.
(3) 그래픽 엔진에 대한 현재의 활용도. 이 정보는 충족될 필요가 있는 전력 및/또는 열적 예산이 있을 때 적절하다.
(4) 장래의 그래픽 성능 요구사항에 대한 예상. 이 정보는 장래에 그래픽 서브시스템에 의해 소모하게 될 전력(그리고 그에 따라 물리적 코어들에 활용가능한 전력 예산량)을 예측하는 것에 관련된다.
도 13b에 도시된 특정예에서, 매핑 판정 로직(1309)은 시스템상에서 실행되고 있는 작업량이 상당히 높게 멀티스레딩되고 있다고 판정했고, 그에 따라 큰 코어들 PC0-PC1으로부터 작은 코어들 PC2-PC5에 스레드들을 재매핑했다. 매핑 판정 로직(1309)은 모든 작은 코어들로의 이동을 트리거하기 위해 하나 이상의 상술한 인자들을 평가할 수 있다. 예를 들어, 매핑 판정 로직(1309)은 큰 코어들 양측 모두가 도 13a에서 사용되고 있는 동안, 이들 코어의 처리 자원들은 거의 활용되지 않을 수 있다고 평가할 수 있다(상술한 케이스, 예를 들어, 큰 코어의 처리 성능을 요구하지 않는 스레드의 다른 유형 또는 오디오 스트림을 코어들 중 하나가 처리하고 있는 경우일 수 있다). 이것은 또한 예를 들어, 그래픽 엔진의 현재 또는 예측된 활용도가 높고 에너지를 보존하기 위해(즉, 전력 또는 열적 예산의 제약 조건내에서 전력 소비를 유지하기 위해) 더 작은 코어들에 재할당하는 것을 검출할 수 있다.
다음 특정예들은 이종 시스템이 어떻게 에너지 효율적이면서 지각가능할 만한 성능 신장에 사용될 수 있는지를 증명한다. 그러나, 본 발명의 근본적인 원칙은 이들 특정 사용 케이스들에 제한되지 않는다는 것에 유의해야 한다:
·멀티- 태스킹 시나리오: 이 사용 케이스는 소량의 연산 코어 작업량 및 폭발적인 다량의 연산 코어 작업량의 혼합으로 구성된다. 일례는 도 13d에 도시된 음악(1401)을 듣는 동안 웹-페이지 브라우징(1402)의 조합이다.
음악 재생이 CPU 자원들에 대한 낮은 요구를 나타내기 때문에, 이것은 지각할 만한 성능의 희생없이 작은 코어로 작동시킬 수 있는 한편 큰 코어로 실행되는 것과 비해 상당한 양의 전력을 여전히 절약할 수 있다. 한편, 브라우저 애플리케이션은 대부분의 시간을 아이들(idle) 상태로 있다: 이것은 최종 사용자로부터 웹 페이지의 로딩을 시작하거나 새로운 콘텐츠를 제공하라고 하는 요구를 수신한 후에만 액티브 상태가 된다. 브라우저 애플리케이션이 액티브 상태가 될 때, 그 성능 요구사항에 갑작스러운 피크가 있게 된다. 우수한 최종-사용자 경험을 보장하기 위해, V-P 코어 매핑 로직(1330)은 사용자가 웹-페이지 로딩을 개시할 때 큰 코어들에 영향력을 발휘하여 페이지 로딩 시간을 최소화할 것이다.
·그래픽-집중 시나리오:
3D 게임들에 기인하는 것들과 같은 전형적인 게임 작업량들은 GPU보다 CPU에 대한 현저하게 더 낮은 연산 요구를 나타낸다. 전력이 제한된 동작하에서(예를 들어, 전력 예산이 임계값으로 설정되어 있는 경우), 작은 효율적인 코어들은 플레이가능한 게임의 품질을 현저하게 향상시킴으로써 최종-사용자가 감지하는 성능을 향상시키는 것을 도울 수 있다. 예를 들어, 특정 3D 그래픽-집중 게임은 초당 30 프레임을 전달하는 주파수 X에서 구동되는 그래픽 엔진을 요구할 수 있다. 큰 코어를 사용하여 게임을 구동할 때, 그래픽 엔진은 전력 예산 때문에 주파수 X에 할당될 수 없다. 그 대신에, 더 낮은 주파수 Y에서 구동되어야 할 것이며, 이로 인해 그래픽 품질은 더 낮아지고 및/또는 프레임 속도도 낮아진다. 대조적으로, 작은 코어들이 게임을 구동하는데 영향력을 발휘하면, 그래픽 주파수는 그래픽 엔진에 코어 전력 절약을 할당함으로써 Y에서 X로 신장(boost)될 수 있다.
·멀티- 스레드 시나리오: 작은 코어들의 개수가 큰 코어들의 개수보다 큰 경우(N>M), 작은 코어들은 큰 코어들보다 더 높은 다중-스레드 성능을 제공할 것이다. 그러한 이종 시스템의 투명한 구현에서, 이것은 큰 코어들이 하이퍼-스레드되고 작은 코어들이 없을 때 발생하기 쉽다.
이종 컴포넌트들에 지능적으로 전력을 공급하기 위한 장치 및 방법
본 발명의 일 실시예는 SoC의 모든 컴포넌트들이 충분히 미세한 그래뉼래리티(granularity)에서 그리고 이상적인 소비자 경험에 대한 그들의 최대 성능 레벨에서 동시에 전력 제어되는 시스템 온 칩(SoC) 아키텍처를 포함한다. 이 실시예에서, 전력 예산 및/또는 열적 예산 알고리즘은 현재 순간에 때맞춰 사용자 경험에 가장 중요한 컴포넌트들에 전력을 공급하는데 사용된다. 일 실시예에서, 각각의 컴포넌트는 개별적으로 제어 가능한 전력 "플레인(plane)"에서 동작한다. 전력 플레인에 제공되는 주파수 및 전압은 전원 제어 유닛(PCU)에 의해 제공되는 제어 신호들에 응답하여 전력을 조정하는 것을 독립적으로 제어할 수 있다. SoC의 각각의 컴포넌트들을 개별적으로 제어함으로써, 각각의 컴포넌트는 전력-성능 곡선에서 상이한 동작점에서 동작하게 된다.
상이한 전력 관리 알고리즘들은 SoC의 대상이 되는 활용 시나리오에 따라 전력 제어기에 의해 구현될 수 있다. 예를 들어, 이하 상세히 논의되는 바와 같이, 데스크톱 또는 랩톱 컴퓨터에 사용되는 SoC는 셋톱 박스, 태블릿 컴퓨터 또는 스마트폰에서 동일한 SoC에 사용되는 것보다 허용가능한 사용자 경험을 제공하기 위해 상이한 전력 관리 알고리즘을 요구할 수 있다.
일 실시예에서, 알고리즘들은 다양한 전력 플레인들을 동적으로 조정하기 위한 제어 레지스터들을 갖는 마이크로컨트롤러 유닛에서, 대역외에서 구동된다. 다른 실시예에서, 알고리즘들은 전력 플레인 제어를 위해 운영 시스템의 맥락내의 메인 애플리케이션 프로세서에서 대역내에서 구동된다. 이 실시예에서, 전력 제어 알고리즘들은 운영 시스템에 가시화될 수 있고 그래픽 사용자 인터페이스를 통해 구성할 수 있다. 또한, 각각의 컴포넌트는 그들이 현재 더 많은 전력/성능을 필요로 하고 그 필요한 전력/성능을 대역외 또는 대역내 컨트롤러로부터 요구하는 것을 결정하는 지능을 가질 수 있다. 이 실시예에서, 알고리즘은 사용자-경험 요구사항들을 판단함으로써 작동할 수 있다.
도 14a는 메인 메모리와 연관된 메모리 플레인(1404)(예컨대, RAM); 칩 상호접속부 및/또는 캐시 메모리와 연관된 상호접속부/캐시 플레인(1403); 그래픽 프로세싱 유닛(GPU)과 연관된 그래픽(GFX) 플레인(1402); 및 SoC내의 메인 프로세서 또는 코어와 연관된 프로세서/코어 플레인(1401)을 포함하는 몇가지 예시적인 전력 플레인들의 전력/성능을 제어하는 본 발명의 일 실시예에 따라 SoC(1410)내의 전력 제어 유닛(PCU)(1400)을 나타낸다. 이 특정한 구현은 설명을 위해 사용되었지만, 본 발명의 근본적인 원칙은 전력 플레인들의 임의의 특정 배열에 제한되지 않는다. 대안적인 구현들에서, 프로세서내의 각각의 코어 및/또는 각각의 코어 내에 각각의 개별적인 기능 유닛들은 분리된 전력 플레인에 대해서 구현될 수 있다.
각각의 전력 플레인(1401-1404)은 (현재의 전력 관리 알고리즘을 실행하는 동안) PCU(1400)에 의해 생성된 제어 신호들에 응답하여 동작 전압 및 주파수를 동적으로 조정하는 로직 및 회로로 구성될 수 있다. 예를 들어, 각각의 전력 플레인(1401-1404)은 각각, 전압 및 주파수를 조정하기 위해 개별적으로 제어가능한 전압 조정 모듈(VRM)과 위상 동기 루프들(PLLs)을 가질 수 있다. 일 실시예에서, 전압 및 주파수는 PCU(1400)로부터의 제어 신호들에 응답하여 선정된 세트의 전압/주파수 조합들을 사용하여 함께 조정된다. 대안적으로, 또는 전압/주파수 스케일링에 부가하여, 전력 플레인들(1401-1404)은 명령어 발행 스로틀링(instruction issue throttling), 듀티 사이클링(duty cycling), 전력 및 클럭 게이팅(clock gating), 및 발행-폭 삭감과 같은 다른 기술들을 사용하여 전력 소비를 조정할 수 있다.
일 실시예에서, PCU(1400)는 SoC(1410)가 사용되는 장치에 대한 사용자 경험 메트릭들에 기초하여 특정의 전력 관리 알고리즘(1405)으로 로딩된다. 따라서, 사용자 경험 메트릭(그리고 그에 따라 전력 관리 알고리즘(1405))은 상이한 유형의 장치마다 상이하게 될 것이다. SoC(1410)가 비디오 게임 콘솔에 사용될 경우, PCU는 사용자가 비디오 게임을 실행하고 있을 때 일반적으로 그래픽 플레인(1402)에 더 많은 전력을 할당할 수 있다(그리고 다른 플레인들에 의한 전력 소비를 줄여서 특정된 전력 임계값내에서 유지되게 한다). SoC(1410)가 범용 컴퓨터 시스템에 사용되는 경우, PCU(1400)는 사용자가 범용 프로세싱 작업들을 수행하고 있을 때(예를 들어, 인터넷에 브라우징하거나, 워드 프로세싱을 수행하는 등) 프로세서/코어 플레인(1401)에 더 많은 전력을 할당할 수 있지만, 사용자가 그래픽-집중 작업들을 수행한다면 그래픽 플레인(1402)에 더 많은 전력을 할당할 수 있다. SoC가 케이블 또는 위성 박스와 같은 셋톱 박스에 사용되는 경우, PCU(1400)는 사용자가 케이블/위성 채널을 시청하고 있을 때 통신 인터페이스 플레인(도시 생략)과 비디오 디코더(도시 생략)에 더 많은 전력을 할당할 수 있다. 따라서, 동일한 SoC는 SoC(1410)가 전반적인 전력 소비를 줄이면서 사용자 경험을 최대화하는데 사용되는 장치의 유형에 따라 사용자 경험 메트릭(1405)에 기초하여 상이한 전력 관리 알고리즘들에 의해 프로그램될 수 있다.
일 실시예에서, PCU(1400)는 특정된 전력 예산을 고려하여 상술한 바와 같이 각각의 전력 플레인들(1401-1404)에 의해 전력 소비를 재할당하고 이것은 SoC(1410)가 사용되는 서로 다른 장치들마다 상이할 수 있다. 예를 들어, 태블릿 또는 스마트폰과 같은 모바일 장치(이것은 일반적으로 배터리로 구동된다)는 셋톱 박스 또는 데스크톱 컴퓨터 시스템(이것은 일반적으로 교류 전력으로 구동된다)보다 상대적으로 더 낮은 전력 예산을 가질 수 있다.
하기 예는 상술한 개념들의 일 실시예를 나타낸다. SoC가 사용되는 장치의 전체적인 전력 예산이 2W인 예에 대해 가정될 것이다. 보장된 클럭 속도에서 프로세서/코어 플레인(1401)을 구동하는데 약 1.5W 소비되며, 그래픽(1402)에 대해서는 1.5W 소비되고, 상호접속부/캐시 플레인(1403)에 대해서는 1.75W 소비된다. 이러한 수치들을 고려하면, 2개 이상의 시스템 컴포넌트들이 동시에 최대 전력으로 작동할 수 없다. 따라서, 이 실시예의 PCU(1400)는 SoC상에서 작동되는 작업량 특성 및 전력 제약 조건에 기초하여 각각의 전력 플레인들(1401-1404)에 전력을 지능적으로 재할당하여야 한다.
이러한 목적들을 달성하기 위해, 본 발명의 일 실시예는 현재 작업량 요구사항들과 전력 제약 조건들에 기초하여 SoC의 모든 컴포넌트들에 걸쳐서 전력 분배를 관리하는 PCU(1400)에서 실행되는 연속적인 전력 관리 루프를 포함한다. PCU(1400)는 열적 조건, 다양한 액티브 컴포넌트들의 전력 소비 특성, 및 SoC상에서 실행되고 있는 현재 작업들의 작업량 특성을 지속적으로 추적한다. 예를 들어, 소프트웨어가 그래픽 프로세서에 작업량의 일정 부분을 오프로드(offload)하려고 할 경우(예를 들어, 더 나은 사용자 경험을 가능하게 하기 위해), PCU(1400)는 프로세서/코어 전력 플레인(1401)을 매우 낮은 클럭 속도로 전환하고 SoC(1410)에 대한 에너지 및 전력 예산 타깃들에 적합하게 될 타깃 주파수와 실행 유닛들의 적절한 세트까지 그래픽 플레인(1402)을 빠르게 상승시킬 것이다. 따라서, 현재로서는, 전력 예산의 대부분은 프로세서/코어 플레인(1401)과 다른 전력 플레인들로부터 가져와서 GFX 플레인(1402)에 재할당될 수 있다.
렌더링이 GPU에 의해 완료되자마자, 상호접속부 패브릭(interconnect fabric)과 디스플레이 엔진은 스크린상에 렌더링된 데이터를 매우 높은 속도로 디스플레이애햐 한다. 화면 해상도가 HD를 초과하여 증가하고 있기 때문에, 이것은 많은 대역폭을 요구한다. 게다가, 상호접속부 자체는 더 매끄러운 소비자 경험을 위해 큰 대역폭과 낮은 대기 시간을 요구한다. 따라서, PCU(1400)는 이러한 요구 사항들을 충족시키기 위해 상호접속부 플레인(1403) 내의 상호접속부에 전력을 주기적으로 상승(ramp)시킬 것이다(예를 들어, 주파수/전압을 증가시킨다). 따라서, 이러한 주기적 리프레시 시간 동안, PCU는 다른 플레인들에 대한 전력을 감소시키면서 전력 예산의 대부분을 상호접속부/캐시 플레인(1403)에 전달한다.
따라서, 상술한 예에서, PCU(1400)는 연산 흐름을 기초로 작업량 요구사항을 추적하고 주어진 순간에 최적의 사용자 경험을 전달하는데 가장 중요한 전력 플레인에 최대 전력을 전달한다. 일 실시예의 PCU(1400)는 주어진 SoC 이용에 대한 작업량 요구사항들을 모니터링하고, 주어진 작업량의 거동을 예측한 휴리스틱을 발전시킨다. 그 결과, PCU(1400)는 여전히 전력 예산에 의해 제한되는 동안 향상된 성능을 제공하기 위해 SoC의 컴포넌트들 전반에 걸쳐서 전력을 할당한다.
도 14a에 나타낸 실시예에는, PCU(1400)에 대한 적어도 2개의 클래스의 입력들이 있다: (1) 전력을 요구하는 각각의 전력 플레인들(1401-1404)로부터 수신된 신호들, 및 (2) 사용자 경험 메트릭들과 전력/열적 제약 조건들에 기초하여 선택된 현재의 전력 관리 알고리즘.
일 실시예에서, 전력 플레인들(1401-1404)은 PCU(1400)로부터 필요에 따라 전력을 요구할 수 있다(예를 들어, 동작의 고성능 모드에 진입하라고 요구할 수 있다). 이 실시예에서, PCU(1400)는 전력을 할당하는 방법을 결정하기 위해 전력 플레인들(1401-1404)로부터의 요구들과 결합하여 사용자 경험 메트릭들에 기초하여 현재의 전력 관리 알고리즘을 구현할 수 있다. 예를 들어, 플레인들로부터의 현재의 전력 요구들을 서비스하는 것이 현재의 전력/열적 예산에 위반할 경우, PCU(1400)는 최적의 사용자 경험을 위해 컴포넌트들에 전력을 지능적으로 할당할 것이다(즉, SoC가 사용되고 있는 장치에 대한 사용자 경험 메트릭에 기초한다).
게다가, PCU(1400)에 대한 선택적 입력은 SoC 칩이 사용되는 장치가 현재 교류전력 또는 배터리에 의해 전력을 공급받고 있는지와 같은 현재 검출된 외부 조건(1406)을 포함할 수 있다. 배터리에 의해 전력을 공급받는 경우, 검출된 외부 조건(1406)은 배터리의 현재 레벨을 특정할 수 있다. 일 실시예에서, PCU는 장치가 교류전력 또는 배터리로부터 전력을 공급받고 있는지, 및 배터리의 현재 레벨에 따라 전력/열적 제약 조건들의 상이한 세트를 사용할 수 있다(즉, 배터리 전력으로 구동되는 경우에는 전력 예산을 제1 임계값으로 낮추고 배터리 레벨이 특정 레벨 미만으로 떨어진 경우에는 제2 임계값으로 낮춘다).
도 14b는 본 발명의 일 실시예에 따른 방법을 나타낸다. 1431에서, 특정의 전력 관리 알고리즘은 SoC가 사용될 장치와 연관된 사용자 경험 메트릭들에 기초하여 PCU내에 로딩된다. 일 실시예에서, PCU는 전력 관리 알고리즘이 로딩되고나서 갱신될 수 있는 플래시 메모리와 같은 비휘발성 메모리를 포함한다. 이 실시예에서, PCU는 사용되는 시스템의 작업량 요구사항들이 모니터링되고 평가받은 후에 재프로그램될 수 있다. 일 실시예에서, PCU는 계속해서 (현재 사용자 경험 메트릭들에 기초하여) 장치에 대한 작업량 요구들을 모니터링 및 평가하고, 검출된 작업량에 기초하여 전력 관리 알고리즘을 자동적으로 갱신하는 지능적인 장치이다. 대안적으로, PCU는 판독 전용 메모리(ROM) 장치, ASIC(applcation-specific integrated circuit) 또는 임의의 다른 유형의 회로를 사용하여 프로그래밍될 수 있다.
도 14b로 되돌아 가면, 1432에서, PCU가 전력 관리 알고리즘에 의해 프로그램되면, PCU는 현재의 사용자 경험 메트릭들, 실행되고 있는 작업/프로세스들에 대한 작업량 요구사항들, 및 전력/열적 예산(이것은 배터리 전력 또는 교류전력과 같은 현재 조건들에 기초하는 것 자체일 수도 있다)에 기초하여 시간 t에서 각각의 전력 플레인에 대한 전력을 조정한다. 예를 들어, 상술한 바와 같이, 장치가 시간 t에서 사용자에게 비디오 프레임들의 시퀀스를 디스플레이할 필요가 있을 경우, PCU(1400)는 상호접속부/캐시 플레인(1403)에 전력 예산의 상당한 부분을 할당할 수 있다.
1433에서, 시간 변수 t는 새로운 순간을 표시하기 위해 증분된다. 시간 변수 t는 임의의 편리한 스텝 사이즈(예를 들어, 마이크로초, 밀리초, 등)으로 증분될 수 있다. 1434에서, 현재의 전력 할당들에 대한 변화들이 이 새로운 순간에 필요한지에 대한 판정이 이루어진다. 예를 들어, 장치가 상술한 바와 같이 하나 이상의 비디오 프레임들을 디스플레이한 후에, GFX 플레인(1402)은 새로운 비디오 프레임들을 제공하는 그래픽 명령을 실행하기 위해 더 많은 전력을 요구할 수 있다. 전력 할당들에 대한 변화가 요구되면, 프로세스는 전력이 현재의 요구사항들에 기초하여 각각의 전력 플레인에 재할당되는 1432로 되돌아간다. 그렇지 않다면, 이전의 전력 할당은 그대로 유지되고 프로세스 루프는 1433으로 되돌아가서 시간 변수 t를 다시 증분한다.
본 명세서에서 설명된 기술들의 이점들 중 하나는 허용가능한 사용자 경험 및 전력/열적 제약 조건들을 여전히 유지하면서, 단일 SoC가 전화기들, 태블릿들, 및 셋톱 박스들과 같은 장치들과 수많은 상이한 맥락에 사용하기 위해 용이하게 통합될 수 있다는 것이다.
본 명세서에서 설명된 본 발명의 실시예들이 주파수 및 전압을 조정함으로써 전력을 제어하는 것에 초점이 맞추어져 있지만, 다양한 다른/추가적인 기술들이 명령어 발행 스로틀링(throttling), 듀티 사이클링, 전력 및 클럭 게이팅, 및 발행-폭 삭감과 같은 각각의 전력 플레인에 의해 소비되는 전력을 제어하는 전력 컨트롤러에 의해 수행될 수 있다. 또한, 실시예들의 일부가 시스템 온 칩(SoC)의 맥락내에서 상술되었지만, 본 발명의 근본적인 원칙은 다수의 코어(예를 들어, 각 코어는 상이한 전력 플레인과 연관되어 있는 경우)를 갖는 프로세서 또는 다수의 기능 유닛들을 갖는 프로세서 또는 코어(즉, 각각의 기능 유닛은 개별적인 전력 플레인에 있거나 기능 유닛들의 그룹이 상이한 전력 플레인들에 배열되어 있는 경우)와 같은 다양한 서로 다른 프로세서 아키텍처상에서 구현될 수 있다. 예를 들어, 전력 관리 기술은 도 8, 도 9a 및 도 9b, 도 11a 및 도 11b, 또는 도 13a 내지 도 13c에 도시된 임의의 아키텍처들(예를 들어, 전력은 각각의 상이한 물리적 프로세서들에 지능적으로 할당된다)에 의해 사용될 수 있다.
예시적인 명령어 포맷들
본 명세서에 개시되는 명령어(들)의 실시예들은 상이한 포맷들로 구현될 수 있다. 또한, 예시적인 시스템들, 아키텍처들, 및 파이프라인들이 이하 상세히 설명된다. 명령어(들)의 실시예들은 이러한 시스템들, 아키텍처들 및 파이프라인들에서 실행될 수 있지만, 상세히 설명되는 것들에 제한되는 것은 아니다.
벡터 친화적 명령어 포맷은 벡터 명령어들에 대해 적절한 명령어 포맷이다(예를 들어, 벡터 연산들에 특정한 특정 필드들이 존재한다). 벡터 및 스칼라 연산들 양자 모두가 벡터 친화적 명령어 포맷을 통해 지원되는 실시예들이 설명되지만, 대안적인 실시예들은 벡터 친화적 명령어 포맷을 통한 벡터 연산들만을 이용한다.
도 15a 및 도 15b는 본 발명의 실시예들에 따라, 일반적 벡터 친화적 명령어 포맷 및 그 명령어 템플릿들을 도시하는 블록도들이다. 도 15a는 본 발명의 실시예들에 따른 일반적 벡터 친화적 명령어 포맷 및 이것의 클래스 A 명령어 템플릿들을 도시하는 블록도인 한편; 도 15b는 본 발명의 실시예들에 따른 일반적 벡터 친화적 명령어 포맷 및 이것의 클래스 B 명령어 템플릿들을 도시하는 블록도이다. 구체적으로는, 클래스 A 및 클래스 B 명령어 템플릿들이 그에 대해 정의되는 일반적 벡터 친화적 명령어 포맷(1500)이 있는데, 이들 둘 모두는 메모리 액세스 없음(1505) 명령어 템플릿들 및 메모리 액세스(1520) 명령어 템플릿들을 포함한다. 벡터 친화적 명령어 포맷의 맥락에서 일반적이라는 용어는 임의의 특정 명령어 세트에 얽매이지 않는 명령어 포맷을 말한다.
벡터 친화적 명령어 포맷이, 32 비트(4 바이트) 또는 64 비트(8 바이트) 데이터 엘리먼트 폭들(또는 사이즈들)을 갖는 64 바이트 벡터 피연산자 길이(또는 사이즈)(및 그에 따라, 64 바이트 벡터는 16개의 더블워드 사이즈 엘리먼트 또는 대안으로서 8개의 쿼드워드 사이즈 엘리먼트로서 구성됨); 16 비트(2 바이트) 또는 8 비트(1 바이트) 데이터 엘리먼트 폭들(또는 사이즈들)을 갖는 64 바이트 벡터 피연산자 길이(또는 사이즈); 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 엘리먼트 폭들(또는 사이즈들)을 갖는 32 바이트 벡터 피연산자 길이(또는 사이즈); 및 32 비트(4 바이트), 64 비트(8 바이트), 16 비트(2 바이트), 또는 8 비트(1 바이트) 데이터 엘리먼트 폭들(또는 사이즈들)을 갖는 16 바이트 벡터 피연산자 길이(또는 사이즈)를 지원하는 본 발명의 실시예들이 기술될 것이지만; 대안 실시예들이 더 많거나, 더 적거나, 또는 상이한 데이터 엘리먼트 폭들(예를 들어, 168 비트(16 바이트) 데이터 엘리먼트 폭들)을 갖는 더 많거나, 더 적거나, 및/또는 상이한 벡터 피연산자 사이즈들(예를 들어, 256 바이트 벡터 피연산자들)을 지원할 수 있다.
도 15a의 클래스 A 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(1505) 명령어 템플릿들 내에 메모리 액세스 없음, 풀 라운드 제어형 연산(1510) 명령어 템플릿 및 메모리 액세스 없음, 데이터 변환형 연산(1515) 명령어 템플릿이 보여지고; 및 2) 메모리 액세스(1520) 명령어 템플릿들 내에 메모리 액세스, 일시적(1525) 명령어 템플릿 및 메모리 액세스, 비일시적(1530) 명령어 템플릿이 도시된다. 도 15b의 클래스 B 명령어 템플릿들은 다음을 포함한다: 1) 메모리 액세스 없음(1505) 명령어 템플릿들 내에 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어형 연산(1516) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, vsize형 연산(1517) 명령어 템플릿이 보여지고; 및 2) 메모리 액세스(1520) 명령어 템플릿들 내에 메모리 액세스, 기입 마스크 제어(1527) 명령어 템플릿이 도시된다.
일반적 벡터 친화적 명령어 포맷(1500)은 도 15a 및 도 15b에 나타낸 순서로 하기에서 열거되는 하기 필드들을 포함한다.
포맷 필드(1540) - 이 필드 내의 특정한 값(명령어 포맷 식별자 값)은 벡터 친화적 명령어 포맷, 및 그에 따라 명령어 스트림들에서의 벡터 친화적 명령어 포맷으로의 명령어들의 출현들을 고유하게 식별한다. 이와 같이, 이 필드는 오직 일반적 벡터 친화적 명령어 포맷을 갖는 명령어 세트에 대해 필요하지 않다는 점에서 선택적이다.
베이스 연산 필드(1542) -이것의 내용은 상이한 베이스 연산들을 구별해 준다.
레지스터 인덱스 필드(1544) -이것의 내용은, 직접적으로 또는 어드레스 발생을 통해, 이들이 레지스터들에 있든지 메모리에 있든지, 소스 및 목적지 피연산자들의 위치들을 특정한다. 이들은 PxQ(예를 들어, 32x516, 16x168, 32x1024, 64x1024) 레지스터 파일로부터 N개의 레지스터들을 선택하기에 충분한 수의 비트들을 포함한다. 일 실시예에서, N은 최대 3개의 소스들 및 1개의 목적지 레지스터일 수 있고, 대안적인 실시예들은 더 많거나 더 적은 소스들 및 목적지 레지스터들을 지원할 수 있다(예를 들어, 소스들 중 하나가 목적지로도 작용하는 최대 2개의 소스를 지원할 수 있고, 소스들 중 하나가 목적지로도 작용하는 최대 3개의 소스를 지원할 수 있고, 최대 2개의 소스 및 1개의 목적지를 지원할 수 있다).
변경자(modifier) 필드(1546) -이것의 내용은 메모리 액세스를 특정하는 일반적 벡터 명령어 포맷으로 된 명령어들의 출현들을 그렇지 않은 것들과 구별해 준다; 즉, 메모리 액세스 없음(1505) 명령어 템플릿과 메모리 액세스(1520) 명령어 템플릿들 간에서 구별해 준다. 메모리 액세스 연산들은 메모리 계층 구조에 대해 판독 및/또는 기입하고(일부 경우에 레지스터들 내의 값들을 이용하여 소스 및/또는 목적지 어드레스들을 특정함) 한편, 메모리 액세스 없음 연산들은 하지 않는다(예를 들어, 소스 및 목적지들은 레지스터들이다). 일 실시예에서, 이 필드는 또한 메모리 어드레스 계산들을 수행하는 3개의 상이한 방식들 사이에서 선택하지만, 대안적인 실시예들은 메모리 어드레스 계산들을 수행하는 더 많거나, 더 적거나, 상이한 방식을 지원할 수 있다.
증강 연산 필드(augmentation operation field)(1550) - 이것의 내용은 다양한 상이한 연산들 중 어느 것이 베이스 연산에 부가하여 실행되어야 하는지를 구별해 준다. 이 필드는 맥락 특정(context specific)이다. 본 발명의 일 실시예에서, 이 필드는 클래스 필드(1568), 알파(alpha) 필드(1552), 및 베타(beta) 필드(1554)로 나누어진다. 증강 연산 필드(1550)는 연산들의 공통 그룹들이 2, 3, 또는 4개의 명령어가 아니라 단일 명령어로 실행되는 것을 허용한다.
스케일 필드(1560) - 이것의 내용은 메모리 어드레스 발생을 위한(예를 들어, 2scale*인덱스+베이스를 이용하는 어드레스 발생을 위한) 인덱스 필드의 내용의 스케일링(scaling)을 허용한다.
변위 필드(1562A) - 이것의 내용은 (예를 들어, 2scale*인덱스+베이스+변위를 이용하는 어드레스 발생을 위한) 메모리 어드레스 생성의 일부로서 이용된다.
변위 인자 필드(Displacement Factor Field)(1562B)(변위 인자 필드(1562B) 바로 위의 변위 필드(1562A)의 병치(juxtaposition)는 어느 하나 또는 다른 것이 이용되는 것을 표시한다는 것에 유의하라) - 이것의 내용은 어드레스 발생의 일부로서 이용되고; 이것은 메모리 액세스의 사이즈(N)에 의해 스케일링될 변위 인자를 특정하며, 여기서 N은 (예를 들어, 2scale*인덱스+베이스+스케일링된 변위를 이용하는 어드레스 발생을 위한) 메모리 액세스에서의 바이트들의 수이다. 잉여 하위 비트들(redundant low-order bits)은 무시되고, 따라서, 변위 인자 필드의 내용은 유효 어드레스를 계산하는 데 이용될 최종 변위를 생성하기 위하여 메모리 피연산자 총 사이즈(N)로 곱해진다. N의 값은 풀 오피코드 필드(1574)(이하 후술됨) 및 데이터 조작 필드(1554C)에 기초하여 실시 시간에 프로세서 하드웨어에 의해 결정된다. 변위 필드(1562A) 및 변위 인자 필드(1562B)는 이들이 메모리 액세스 없음(1505) 명령어 템플릿들에 대해 사용되지 않고/또는 상이한 실시예들이 둘 중 하나만을 구현하거나 어느 것도 구현하지 않는다는 점에서 선택 사항이다.
데이터 엘리먼트 폭 필드(1564) - 이것의 내용은 (일부 실시예들에서 모든 명령어들에 대해; 다른 실시예들에서, 명령어들 중 일부에 대해서만) 복수의 데이터 엘리먼트 폭 중 어느 것이 사용될 것인지를 구별해 준다. 이 필드는 오직 하나의 데이터 엘리먼트 폭이 지원되고/또는 데이터 엘리먼트 폭들이 오피코드들의 일부 양상을 이용하여 지원되는 경우에 필요하지 않다는 점에서 선택적이다.
기입 마스크 필드(1570) -이것의 내용은 데이터 엘리먼트 위치당 기준으로, 목적지 벡터 피연산자에서의 해당 데이터 엘리먼트 위치가 베이스 연산 및 증강 연산의 결과를 반영하는지를 제어한다. 클래스 A 명령어 템플릿들은 통합-기입마스킹(merging-writemasking)을 지원하는 한편, 클래스 B 명령어 템플릿들은 통합- 및 제로화-기입마스킹 양자 모두를 지원한다. 통합할 때, 벡터 마스크들은 목적지 내의 임의의 세트의 엘리먼트들이(베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 업데이트들로부터 보호될 수 있게 하고; 다른 일 실시예에서, 대응하는 마스크 비트가 0을 갖는 목적지의 각 엘리먼트의 이전의 값을 보존할 수 있게 한다. 대조적으로, 제로화할 때, 벡터 마스크들은 목적지 내의 임의의 세트의 엘리먼트들이(베이스 연산 및 증대 연산에 의해 특정된) 임의의 연산의 실행 중에 제로화될 수 있게 하고; 일 실시예에서, 목적지의 엘리먼트는 대응하는 마스크 비트가 0 값을 가질 때 0으로 설정된다. 이러한 기능성의 서브세트는 수행되는 연산의 벡터 길이를 제어하는 능력이지만(즉, 엘리먼트들의 스팬(span)은 제1 것에서 마지막 것까지 수정된다); 수정되는 엘리먼트들이 연속적인 것은 필요하지 않다. 따라서, 기입 마스크 필드(1570)는 부분적 벡터 연산이, 로드, 저장, 산술, 로직 등을 포함하는 것을 허용한다. 기입 마스크 필드(1570)의 내용이 이용될 기입 마스크를 포함하는 복수의 기입 마스크 레지스터 중 하나를 선택하는(및 따라서 기입 마스크 필드(1570)의 내용이 실행될 해당 마스킹을 간접적으로 식별하는) 본 발명의 실시예들이 기술되었지만, 대안 실시예들은 그 대신에 또는 추가적으로 마스크 기입 필드(1570)의 내용이 실행될 마스킹을 직접적으로 특정하는 것을 허용한다.
즉치 필드(1572) -이것의 내용은 즉치의 특정을 허용한다. 이 필드는 즉치를 지원하지 않는 일반적 벡터 친화적 포맷의 구현에 존재하지 않고, 즉치를 사용하지 않는 명령어들에 존재하지 않는다는 점에서 선택적이다.
클래스 필드(1568) -이것의 내용은 상이한 명령어들의 클래스 간에서 구별해 준다. 도 15a 및 도 15b를 참조하면, 이 필드의 내용은 클래스 A 및 클래스 B 명령어 중에서 선택을 한다. 도 15a 및 도 15b에서, 둥근 코너 스퀘어들은 구체적인 값이 필드에 존재한다는 것을 나타내는 데 사용된다(예를 들어, 도 15a 및 도 15b에서 각각 클래스 필드(1568)에 대해 클래스 A(1568A)와 클래스 B(1568B)).
클래스 A의 명령어 템플릿
클래스 A의 메모리 액세스 없음(1505) 명령어 템플릿들의 경우에, 알파 필드(1552)는 RS 필드(1552A)로서 해석되고, 이것의 내용은 상이한 증강 연산 유형들 중 어느 것이 실행되어야 하는지를 구별해주는 한편[예컨대, 라운드(1552A.1) 및 데이터 변환(1552A.2)은 제각기 메모리 액세스 없음, 라운드 유형 연산(1510) 및 메모리 액세스 없음, 데이터 변환형 연산(1515) 명령어 템플릿들에 대해 특정됨], 베타 필드(1554)는 특정된 유형의 연산들 중 어느 것이 실행되어야 하는지를 구별해 준다. 메모리 액세스 없음(1505) 명령어 템플릿들에서, 스케일 필드(1560), 변위 필드(1562A), 및 변위 스케일 필드(1562B)는 존재하지 않는다.
메모리 액세스 없음 명령어 템플릿 - 풀 라운드 제어형 연산
메모리 액세스 없음 풀 라운드 제어형 연산(1510) 명령어 템플릿에서, 베타 필드(1554)는 라운드 제어 필드(1554A)로서 해석되고, 이것의 내용(들)은 정적 라운딩(static rounding)을 제공한다. 본 발명의 기술된 실시예들에서, 라운드 제어 필드(1554A)는 모든 부동 소수점 예외 억제(SAE: suppress all floating point exceptions) 필드(1556) 및 라운드 연산 제어 필드(1558)를 포함하지만, 대안적 실시예들은 이들 개념들 모두를 동일한 필드로 지원하거나 인코딩할 수 있고 또는 이들 개념들/필드들 중 어느 하나 또는 다른 것만을 가질 수 있다(예를 들어, 라운드 연산 제어 필드(1558)만을 가질 수 있다).
SAE 필드(1556) -이것의 내용은 예외 이벤트 보고를 디스에이블링할 것인지의 여부를 구별하고; SAE 필드(1556)의 내용이 억제가 인에이블링된 것을 표시할 때, 주어진 명령어는 임의의 종류의 부동 소수점 예외 플래그도 보고하지 않고, 임의의 부동 소수점 예외 핸들러도 일으키지 않는다.
라운드 연산 제어 필드(1558) -이것의 내용은 한 그룹의 라운드 연산들 중 어느 것을 실행할지를 구별해 준다(예컨대, 라운드 업(Round-up), 라운드 다운(Round-down), 제로를 향한 라운드(Round-towards-zero) 및 최근접한 것에게의 라운드(round-to-nearest)). 따라서, 라운드 연산 제어 필드(1558)는 명령어당 기준으로 라운딩 모드의 변경을 허용한다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(1550)의 내용은 해당 레지스터 값을 오버라이딩한다.
메모리 액세스 없음 명령어 템플릿들: 데이터 변환형 연산
메모리 액세스 없음 데이터 변환형 연산(1515) 명령어 템플릿에서, 베타 필드(1554)는 데이터 변환 필드(1554B)로서 해석되고, 이것의 내용은 복수의 데이터 변환 중 어느 것이 실행되어야 하는지를 구별해 준다(예컨대, 데이터 변환 없음, 스위즐링(swizzle), 브로드캐스트).
클래스 A의 메모리 액세스(1520) 명령어 템플릿의 경우에, 알파 필드(1552)는 축출 힌트 필드(1552B)로서 해석되고, 이것의 내용은 축출 힌트들 중 어느 것이 사용되어야 하는지를 구별해주는 한편[도 16a에서, 일시적(1552B.1) 및 비일시적(1552B.2)은 제각기 메모리 액세스, 일시적(1525) 명령어 템플릿 및 메모리 액세스, 비일시적 (1530) 명령어 템플릿에 대해 특정됨], 베타 필드(1554)는 데이터 조작 필드(1554C)로서 해석되고, 이것의 내용은 다수의 데이터 조작 연산들(또는 프리미티브(primitive)로서 알려짐) 중 어느 것이 실행되어야 하는지를 구별해 준다(예를 들어, 조작 없음; 브로드캐스트; 소스의 상향 변환(up conversion); 및 목적지의 하향 변환(down conversion). 메모리 액세스(1520) 명령어 템플릿들은 스케일 필드(1560), 및 선택 사항으로 변위 필드(1562A) 또는 변위 스케일 필드(1562B)를 포함한다.
벡터 메모리 명령어들은 메모리로부터 벡터 로드들 및 메모리로의 벡터 저장들을 수행하고, 변환이 지원된다. 정규 벡터 명령어들과 관련하여, 벡터 메모리 명령어들은 데이터 엘리먼트와 관련한 방식으로 메모리로부터/메모리로 데이터를 전송하고, 실제로 전송되는 엘리먼트들은 기입 마스크로서 선택되는 벡터 마스크의 내용들에 의해 지시된다.
메모리 액세스 명령어 템플릿들 - 일시적
일시적 데이터는 캐싱으로부터 이득을 얻기에 충분히 빨리 재이용될 가능성이 있는 데이터이다. 그러나, 즉, 힌트 및 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함하는, 상이한 방식들로 그것을 구현할 수 있다.
메모리 액세스 명령어 템플릿들 - 비일시적
비일시적 데이터는 제1 레벨 캐시에서의 캐싱으로부터 이득을 얻기에 충분하도록 곧 재이용될 것 같지 않은 데이터이고, 축출을 위한 우선순위가 주어져야 한다. 그러나, 즉, 힌트 및 상이한 프로세서들은 힌트 전체를 무시하는 것을 포함하는, 상이한 방식들로 그것을 구현할 수 있다.
클래스 B의 명령어 템플릿
클래스 B의 명령어 템플릿들의 경우에, 알파 필드(1552)는 기입 마스크 제어(Z) 필드(1552C)로서 해석되고, 이것의 내용은 기입 마스크 필드(1570)에 의해 제어되는 기입 마스킹이 통합이어야 하는지 제로화되어야 하는지를 구별해 준다.
클래스 B의 메모리 액세스 없음(1505) 명령어 템플릿들의 경우에, 베타 필드(1554)의 일부는 RL 필드(1557A)로서 해석되고, 이것의 내용은 상이한 증강 연산 유형들 중 어느 것이 실행되어야 하는지를 구별해주는 한편[예컨대, 라운드(1557A.1) 및 벡터 길이(VSIZE)(1557A.2)는 제각기 메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어형 연산(1516) 명령어 템플릿 및 메모리 액세스 없음, 기입 마스크 제어, VSIZE형 연산(1517) 명령어 템플릿에 대해 특정됨], 베타 필드(1554)의 나머지는 특정된 유형의 연산들 중 어느 것이 실행되어야 하는지를 구별해 준다. 메모리 액세스 없음(1505) 명령어 템플릿들에서, 스케일 필드(1560), 변위 필드(1562A) 및 변위 스케일 필드(1562B)는 존재하지 않는다.
메모리 액세스 없음, 기입 마스크 제어, 부분 라운드 제어 유형 연산(1510) 명령어 템플릿에서, 베타 필드(1554)의 나머지는 라운드 연산 필드(1559A)로서 해석되고, 예외 이벤트 보고가 디스에이블되어 있다(주어진 명령어는 어떤 종류의 부동 소수점 예외 플래그도 보고하지 않고, 어떤 부동 소수점 예외 핸들러도 야기하지 않는다).
라운드 연산 제어 필드(1559A)는 -라운드 연산 제어 필드(1558)처럼, 이것의 내용은 한 그룹의 라운드 연산들 중 어느 것을 실행할지를 구별해 준다(예컨대, 라운드 업(Round-up), 라운드 다운(Round-down), 제로를 향한 라운드(Round-towards-zero) 및 최근접한 것에게의 라운드(round-to-nearest)). 따라서, 라운드 연산 제어 필드(1559A)는 명령어당 기준으로 라운딩 모드의 변경을 허용한다. 프로세서가 라운딩 모드들을 특정하기 위한 제어 레지스터를 포함하는 본 발명의 일 실시예에서, 라운드 연산 제어 필드(1550)의 내용은 해당 레지스터 값을 오버라이딩한다.
메모리 액세스 없음, 기입 마스크 제어, VSIZE형 연산(1517) 명령어 템플릿에서, 베타 필드(1554)의 나머지는 벡터 길이 필드(1559B)로서 해석되고, 이것의 내용은 복수의 데이터 벡터 길이 중 어느 것이 실행되어야 하는지를 구별해 준다(예컨대, 168, 256, 또는 516 바이트).
클래스 B의 메모리 액세스(1520) 명령어 템플릿의 경우에, 베타 필드(1554)의 일부는 브로드캐스트 필드(1557B)로서 해석되고, 이것의 내용은 브로드캐스트 유형 데이터 조작 연산이 실행되어야 하는지의 여부를 구별해 주는 한편, 베타 필드(1554)의 나머지는 벡터 길이 필드(1559B)로서 해석된다. 메모리 액세스(1520) 명령어 템플릿들은 스케일 필드(1560), 및 선택 사항으로 변위 필드(1562A) 또는 변위 스케일 필드(1562B)를 포함한다.
일반적 벡터 친화적 명령어 포맷(1500)에 대하여, 풀 오피코드 필드(1574)는 포맷 필드(1540), 베이스 연산 필드(1542), 및 데이터 엘리먼트 폭 필드(1564)를 포함하는 것으로 나타나 있다. 풀 오피코드 필드(1574)가 이들 필드 모두를 포함하는 일 실시예가 나타나 있지만, 풀 오피코드 필드(1574)는 이들 필드 전부를 지원하지 않는 실시예들에서 이들 필드 전부보다 적은 것을 포함한다. 풀 오피코드 필드(1574)는 연산 코드(오피코드(opcode))를 제공한다.
증강 연산 필드(1550), 데이터 엘리먼트 폭 필드(1564), 및 기입 마스크 필드(1570)는 이들의 특징들이 일반적 벡터 친화적 명령어 포맷으로 명령어당 기준으로 특정되도록 허용한다.
기입 마스크 필드와 데이터 엘리먼트 폭 필드의 조합은 그것들이 마스크가 상이한 데이터 엘리먼트 폭들에 기초하여 적용될 수 있게 한다는 점에서 유형 명령어들(typed instructions)을 생성한다.
클래스 A 및 클래스 B 내에서 발견되는 다양한 명령어 템플릿들은 상이한 상황들에서 유익하다. 본 발명의 일부 실시예들에서, 상이한 프로세서들 또는 프로세서 내의 상이한 코어들은 오직 클래스 A, 오직 클래스 B, 또는 양자의 클래스들을 지원할 수 있다. 예를 들어, 범용 컴퓨팅을 대상으로 하는 고성능 범용 비순차적 코어는 오직 클래스 B를 지원할 수 있고, 그래픽 및/또는 과학적(처리량) 컴퓨팅을 주로 대상으로 하는 코어는 오직 클래스 A를 지원할 수 있고, 양자 모두를 대상으로 하는 코어는 양자 모두를 지원할 수 있다(물론, 양자의 클래스들로부터의 템플릿들 및 명령어들의 일부 혼합을 갖지만 양자의 클래스들로부터의 템플릿들 및 명령어들 전부를 갖지는 않는 코어가 본 발명의 관점 내에 있다). 또한, 싱글 프로세서가 복수의 코어를 포함할 수 있고, 여기서, 코어들 전부가 동일한 클래스를 지원하거나 상이한 코어들이 상이한 클래스를 지원한다. 예를 들어, 별개의 그래픽 및 범용 코어들을 갖는 프로세서에서, 그래픽 및/또는 과학적 컴퓨팅을 주로 대상으로 하는 그래픽 코어들 중 하나가 오직 클래스 A를 지원할 수 있는 한편, 범용 코어들 중 하나 이상이 오직 클래스 B를 지원하는 범용 컴퓨팅을 대상으로 하는 비순차적 실행 및 레지스터 리네이밍을 갖는 고성능 범용 코어들일 수 있다. 별도의 그래픽 코어를 갖지 않는 다른 프로세서는 클래스 A 및 클래스 B 양자를 지원하는 하나 이상의 범용 순차적 또는 비순차적 코어들을 포함할 수 있다. 물론, 한 클래스로부터의 특징들은 또한 본 발명의 상이한 실시예들에서 다른 클래스에서 구현될 수 있다. 고급 언어로 작성된 프로그램들은 다양한 상이한 실행가능 형태로 제공될 것이며(예를 들면, 제시간에 맞추어 컴파일되거나 정적으로 컴파일됨), 이 실행가능한 형태는 다음을 포함한다: 1) 실행을 위한 타깃 프로세서에 의해 지원되는 클래스(들)의 명령어들만을 갖는 형태; 2) 모든 클래스들의 명령어들의 상이한 조합을 사용하여 기입된 대안적인 루틴들을 갖고, 또한 현재 코드를 실행하고 있는 프로세서에 의해 지원되는 명령어들에 기초하여 실행될 루틴들(routines)을 선택하는 제어 플로우 코드를 갖는 형태.
도 16a 내지 도 16d는 본 발명의 실시예들에 따른 예시적인 특정의 벡터 친화적 명령어 포맷을 나타낸 블록도이다. 도 16a 내지 도 16d는 이것이 필드들의 위치, 사이즈, 해석 및 순서 뿐만이 아니라 이런 필드들 중 일부 값들을 특정한다는 점에서 특정적인 특정의 벡터 친화적 명령어 포맷(1600)을 나타낸다. 특정의 벡터 친화적 명령어 포맷(1600)은 x86 명령어 세트를 확장하는 데 사용될 수 있고, 따라서 필드들 중 일부는 기존의 x86 명령어 세트 및 이것의 확장(예컨대, AVX)에서 사용되는 것들과 유사하거나 동일하다. 이 포맷은 확장들을 갖는 기존의 x86 명령어 세트의 프리픽스 인코딩 필드, 실제 오피코드 바이트 필드, MOD R/M 필드, SIB 필드, 변위 필드, 및 즉치 필드들과의 일관성을 유지한다. 도 16으로부터의 필드들이 맵핑되는 도 15의 필드들이 나타나 있다.
비록 본 발명의 실시예들이 예시적 목적을 위해 일반적 벡터 친화적 명령어 포맷(1500)의 맥락에서 특정의 벡터 친화적 명령어 포맷(1600)을 참조하여 기술되어 있지만, 본 발명은 청구되는 경우를 제외하고는, 특정의 벡터 친화적 명령어 포맷(1600)에 제한되지 않는다는 것을 알 수 있을 것이다. 예를 들어, 일반적 벡터 친화적 명령어 포맷(1500)은 다양한 필드에 대해 다양한 가능한 사이즈를 상정하는 반면, 특정의 벡터 친화적 명령어 포맷(1600)은 특정 사이즈들의 필드들을 가지는 것으로 나타나 있다. 특정의 예로서, 데이터 엘리먼트 폭 필드(1564)가 특정의 벡터 친화적 명령어 포맷(1600)으로 1 비트 필드로서 나타나 있지만, 본 발명은 이것에 제한되지 않는다(즉, 일반적 벡터 친화적 명령어 포맷(1500)은 데이터 엘리먼트 폭 필드(1564)의 다른 사이즈들을 상정한다).
일반적 벡터 친화적 명령어 포맷(1500)은 도 16a에 나타낸 순서로 하기에서 열거되는 하기 필드들을 포함한다.
EVEX 프리픽스(바이트들 0-3)(1602)는 4 바이트 형태로 인코딩된다.
포맷 필드(1640)(EVEX 바이트 0, 비트들 [7:0]) -제1 바이트(EVEX 바이트 0)는 포맷 필드(1640)이고, 이것은 0x62(본 발명의 일 실시예에서 벡터 친화적 명령어 포맷을 구별하는데 사용되는 고유값)를 포함한다.
제2-제4 바이트들(EVEX 바이트들 1-3)은 특정 능력을 제공하는 복수의 비트 필드들을 포함한다.
REX 필드(1605)(EVEX 바이트 1, 비트들 [7-5])는 -EVEX.R 비트 필드(EVEX 바이트 1, 비트 [7]-R), EVEX.X 비트 필드(EVEX 바이트 1, 비트 [6]-X), 및 1557BEX 바이트 1, 비트 [5]-B)로 구성된다. EVEX.R, EVEX.X 및 EVEX.B 비트 필드들은 대응하는 VEX 비트 필드들과 동일한 기능을 제공하고, 1의 보수 형태로 인코딩되며, 즉, ZMM0는 1611B로서 인코딩되고, ZMM15는 0000B로서 인코딩된다. 명령어들의 다른 필드들은 본 분야에 알려진 대로 레지스터 인덱스들의 하위 3개의 비트(rrr, xxx 및 bbb)를 인코딩하여, Rrrr, Xxxx, 및 Bbbb가 EVEX.R, EVEX.X 및 EVEX.B를 더함으로써 형성될 수 있도록 한다.
REX' 필드(1605) -이것은 REX' 필드(1510)의 제1 부분이고, 확장된 32 레지스터 세트의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는데 사용되는 EVEX.R' 비트 필드(EVEX 바이트 1, 비트 [4]-R')이다. 본 발명의 일 실시예에서, 이 비트는 아래 표시된 바와 같은 다른 것들과 함께, (공지된 x86 32-비트 모드에서) BOUND 명령어로부터 구별하기 위해 비트 반전된 포맷으로 저장되고, 그의 실제 오피코드 바이트가 62이지만, (아래 설명된) MOD R/M 필드에서 MOD 필드의 11의 값을 수락하지 않으며; 본 발명의 대안적인 실시예들은 반전된 포맷으로 이것 및 아래 다른 표시된 비트들을 저장하지 않는다. 1의 값을 이용하여 하위 16개의 레지스터를 인코딩한다. 즉, R'Rrrr는 다른 필드들로부터 EVEX.R', EVEX.R 및 다른 RRR을 조합함으로써 형성된다.
오피코드 맵 필드(1615)(EVEX 바이트 1, 비트 [3:0]-mmmm) -이것의 내용은 내포된 선두 오피코드 바이트(0F, 0F 38, 또는 0F 3)를 인코딩한다.
데이터 엘리먼트 폭 필드(1664)(EVEX 바이트 2, 비트 [7]-W)는 -표기법 EVEX.W로 표시된다. EVEX.W는 데이터형(32-비트 데이터 엘리먼트들 또는 64-비트 데이터 엘리먼트들 중 어느 하나)의 그래뉼래리티(granularity)(사이즈)를 정의하는 데 사용된다.
EVEX.vvvv(1620)(EVEX 바이트 2, 비트들 [6:3]-vvvv) -EVEX.vvvv의 역할은 다음을 포함할 수 있다: 1) EVEX.vvvv는 반전된(1의 보수) 형태로 특정된 제1 소스 레지스터 피연산자를 인코딩하고 또한 2개 이상의 소스 피연산자를 갖는 명령어들에 대해 유효하다; 2) EVEX.vvvv는 임의의 벡터 시프트들에 대해 1의 보수 형태로 특정된 목적지 레지스터 피연산자를 인코딩한다; 또는 3) EVEX.vvvv는 어떤 피연산자도 인코딩하지 않으며, 이 필드는 유보된다. 따라서, EVEX.vvvv 필드(1620)는 반전된(1의 보수) 형태로 저장되는 제1 소스 레지스터 특정자의 4개의 하위 비트를 인코딩한다. 명령어에 따라, 여분의 상이한 EVEX 비트 필드는 특정자 사이즈를 32개의 레지스터로 확장하는데 사용된다.
EVEX.U 클래스 필드(1668)(EVEX 바이트 2, 비트 [2]-U) - EVEX.U=0인 경우, 이는 클래스 A 또는 EVEX.U0를 나타내고; EVEX.U=1인 경우, 이는 클래스 B 또는 EVEX.U1을 나타낸다.
프리픽스 인코딩 필드(1625)(EVEX 바이트 2, 비트 [1:0]-pp)는 베이스 연산 필드에 대한 부가 비트들을 제공한다. EVEX 프리픽스 포맷에서 레거시 SSE 명령어들을 위한 지원을 제공하는 것에 덧붙여서, 이것은 또한 SIMD 프리픽스를 압축하는 이점을 갖는다(SIMD 프리픽스를 표현하기 위해 바이트를 요구하기 보다, EVEX 프리픽스는 단지 2비트만을 요구한다). 일 실시예에서, 레거시 포맷에서 및 EVEX 프리픽스 포맷 모두에서 SIMD 프리픽스(66H, F2H, F3H)를 이용하는 레거시 SSE 명령어들을 지원하기 위하여, 이들 레거시 SIMD 프리픽스들은 SIMD 프리픽스 인코딩 필드가 되도록 인코딩되고; 실행 시간에 디코더의 PLA에 제공되기 전에 레거시 SIMD 프리픽스 내로 확장된다(그래서 PLA는 변경없이 이들 레거시 명령어들의 레거시 및 EVEX 포맷 모두를 실행할 수 있다). 더 새로운 명령어들은 오피코드 확장으로서 직접 EVEX 프리픽스 인코딩 필드의 내용을 사용할 수 있더라도, 특정 실시예들은 일관성에 대해 유사한 방식으로 확장하지만, 이들 레거시 SIMD 프리픽스들에 의해 상이한 의미들이 특정될 수 있게 한다. 대안적인 실시예는 2 비트 SIMD 프리픽스 인코딩들을 지원하도록 PLA를 재설계할 수 있고, 따라서 확장을 요구하지 않는다.
알파 필드(1652)(EVEX 바이트 3, 비트 [7] - EH; EVEX.EH, EVEX.rs, EVEX.RL, EVEX.기입 마스크 제어, 및 EVEX.N이라고도 알려짐; 또한 α로 예시됨) -앞서 설명된 바와 같이, 이 필드는 맥락 특정적이다.
베타 필드(1654)(EVEX 바이트 3, 비트들 [6:4] - SSS, EVEX.s2-0, EVEX.r2-0, EVEX.rr1, EVEX.LL0, EVEX.LLB라고도 함; 또한 βββ로 예시되어 있음) - 앞서 기술된 바와 같이, 이 필드는 맥락 특정적이다.
REX' 필드(1610) - 이것은 REX' 필드의 나머지이고, 확장된 32개의 레지스터 세트의 상위 16 또는 하위 16 중 어느 하나를 인코딩하는 데 이용될 수 있는 EVEX.V' 비트 필드(EVEX 바이트 3, 비트 [3]-V')이다. 이 비트는 비트 반전된 포맷으로 저장된다. 1의 값을 이용하여 하위 16개의 레지스터를 인코딩한다. 즉, V'VVVV는 EVEX.V', EVEX.vvvv를 결합하여 형성된다.
기입 마스크 필드(1670)(EVEX 바이트 3, 비트 [2:0]-kkk) -이것의 내용은 앞서 설명된 바와 같이 기입 마스크 레지스터들에서의 레지스터의 인덱스를 특정한다. 본 발명의 일 실시예에서, 특정값 EVEX.kkk=000은 특정 명령어에 대해 임의의 기입 마스크도 이용되지 않음을 내재하는 특수 거동을 갖는다(이것은 모두 1로 하드와이어드된(hardwired) 기입 마스크 또는 마스킹 하드웨어를 바이패스하는 하드웨어의 사용을 포함하는 다양한 방식으로 구현될 수 있다).
실제 오피코드 필드(1630)(바이트 4)는 또한 오피코드 바이트로서 알려져 있다. 오피코드의 부분은 이 필드에서 특정된다.
MOD R/M 필드(1640)(바이트 5)는 MOD 필드(1642), Reg 필드(1644), 및 R/M 필드(1646)를 포함한다. 상술한 바와 같이, MOD 필드(1642)의 내용은 메모리 액세스와 비메모리 액세스 연산들 사이를 구별한다. Reg 필드(1644)의 역할은 다음 2가지 상황으로 요약될 수 있다: 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩하거나, 오피코드 확장으로서 취급하여 임의의 명령어 피연산자를 인코딩하는데 사용하지 않는다. R/M 필드(1646)의 역할은 다음을 포함할 수 있다: 메모리 어드레스를 참조하는 명령어 피연산자를 인코딩하거나, 목적지 레지스터 피연산자 또는 소스 레지스터 피연산자 중 어느 하나를 인코딩한다.
SIB(Scale, Index, Base) 바이트(바이트 6) -상술한 바와 같이, 스케일 필드(1650)의 내용은 메모리 어드레스 발생에 대해 이용된다. SIB.xxx(1654) 및 SIB.bbb(1656) -이들 필드들의 내용들은 레지스터 인덱스들 Xxxx 및 Bbbb에 대하여 앞서 언급하였다.
변위 필드(1662A)(바이트들 7-10) -MOD 필드(1642)가 10을 포함할 때, 바이트들 7-10은 변위 필드(1662A)이고, 이는 레거시 32-비트 변위(disp32)와 동일하게 작업하고 바이트 그래뉼래리티(byte granularity)로 작업한다.
변위 인자 필드(1662B)(바이트 7) -MOD 필드(1642)가 01을 포함할 때, 바이트 7은 변위 인자 필드(1662B)이다. 이 필드의 위치는 바이트 그래뉼래리티에서 작업하는 레거시 x86 명령어 세트 8-비트 변위(disp8)와 동일하다. disp8은 부호 확장되기 때문에, 오직 -168 바이트들 오프셋들과 167 바이트들 오프셋들 사이를 어드레스할 수 있고; 64 바이트 캐시 라인들에 대하여, disp8은 오직 4개의 실제 유용한 값들 -168, -64, 0, 64로 설정될 수 있는 8 비트를 사용하며; 더 큰 범위가 종종 필요하기 때문에, disp32가 사용되고; 그러나, disp32는 4 바이트를 요구한다. disp8 및 disp32와 달리, 변위 인자 필드(1662B)는 disp8의 재해석이고; 변위 인자 필드(1662B)를 사용할 때, 변위 인자 필드의 내용과 메모리 피연산자 액세스의 사이즈(N)를 곱한 것에 의해 실제 변위가 결정된다. 이러한 유형의 변위를 disp8*N이라고 한다. 이것은 평균 명령어 길이를 감소시킨다(훨씬 더 큰 범위를 갖는 변위에 대해 사용되는 단일 바이트). 그러한 압축된 변위는 유효 변위가 메모리 액세스의 그래뉼래리티의 배수이고, 따라서 어드레스 오프셋의 잉여 하위 비트들이 인코딩될 필요가 없다는 가정에 기초한다. 즉, 변위 인자 필드(1662B)는 레거시 x86 명령어 세트 8-비트 변위를 대체한다. 따라서, 변위 인자 필드(1662B)는 x86 명령어 세트 8-비트 변위와 동일한 방식으로 인코딩되고(따라서 ModRM/SIB 인코딩 규칙의 변화가 없음), 유일한 예외는 disp8이 disp8*N으로 오버로드(overload)된다는 것이다. 즉, 인코딩 규칙들 또는 인코딩 길이에 있어서 임의의 변경도 존재하지 않지만 오직 하드웨어에 의한 변위값의 해석에 있어서 변경이 존재한다(이것은 바이트-와이즈 어드레스 오프셋(byte-wise address offset)을 획득하기 위해 메모리 피연산자의 사이즈에 의해 변위를 스케일링할 필요가 있다).
즉치 필드(1672)는 앞서 기술한 바와 같이 연산한다.
풀 오피코드 필드
도 16b는 본 발명의 일 실시예에 따른, 풀 오피코드 필드(1674)를 구성하는 특정의 벡터 친화적 명령어 포맷(1600)의 필드들을 나타내는 블록도이다. 구체적으로, 풀 오피코드 필드(1674)는 포맷 필드(1640), 베이스 연산 필드(1642) 및 데이터 엘리먼트 폭(W) 필드(1664)를 포함한다. 베이스 연산 필드(1642)는 프리픽스 인코딩 필드(1625), 오피코드 맵 필드(1615) 및 실제 오피코드 필드(1630)를 포함한다.
레지스터 인덱스 필드
도 16c는 본 발명의 일 실시예에 따른 레지스터 인덱스 필드(1644)를 구성하는 특정의 벡터 친화적 명령어 포맷(1600)의 필드들을 나타낸 블록도이다. 구체적으로, 레지스터 인덱스 필드(1644)는 REX 필드(1605), REX' 필드(1610), MODR/M.reg 필드(1644), MODR/M.r/m 필드(1646), VVVV 필드(1620), xxx 필드(1654) 및 bbb 필드(1656)를 포함한다.
증강 연산 필드
도 16d는 본 발명의 일 실시예에 따라 증강 연산 필드(1650)를 구성하는 특정의 벡터 친화적 명령어 포맷(1600)의 필드들을 나타낸 블록도이다. 클래스(U) 필드(1668)가 0을 포함할 때, 이는 EVEX.U0(클래스 A(1668A))을 나타내고(signify); 이것이 1을 포함할 때, 이는 EVEX.U1(클래스 B(1668B))을 나타낸다. U=0이고 MOD 필드(1642)가 11을 포함할 때(메모리 액세스 연산 없음을 나타냄), 알파 필드(1652)(EVEX 바이트 3, 비트 [7]-EH)는 rs 필드(1652A)로서 해석된다. rs 필드(1652A)가 1(라운드 1652A.1)을 포함할 때, 베타 필드(1654)(EVEX 바이트 3, 비트 [6:4]-SSS)는 라운드 제어 필드(1654A)로서 해석된다. 라운드 제어 필드(1654A)는 1 비트 SAE 필드(1656) 및 2 비트 라운드 연산 필드(1658)를 포함한다. rs 필드(1652A)가 0을 포함할 때(데이터 변환(1652A.2)), 베타 필드(1654)(EVEX 바이트 3, 비트 [6:4]-SSS)는 3 비트 데이터 변환 필드(1654B)로서 해석된다. U=0이고 MOD 필드(1642)가 00, 01, 또는 10을 포함할 때(메모리 액세스 연산을 나타냄), 알파 필드(1652)(EVEX 바이트 3, 비트 [7]-EH)는 축출 힌트(EH) 필드(1652B)로서 해석되고, 베타 필드(1654)(EVEX 바이트 3, 비트들 [6:4]-SSS)는 3 비트 데이터 조작 필드(1654C)로서 해석된다.
U=1일 때, 알파 필드(1652)(EVEX 바이트 3, 비트 [7]-EH)는 기입 마스크 제어(Z) 필드(1652C)로서 해석된다. U=1이고 MOD 필드(1642)가 11(메모리 액세스 없음 연산을 나타냄)을 포함할 때, 베타 필드(1654)의 일부(EVEX 바이트 3, 비트 [4]-S0)는 RL 필드(1657A)로서 해석되고; 이것이 1(라운드(1657A.1))을 포함할 때, 베타 필드(1654)의 나머지(EVEX 바이트 3, 비트 [6-5]-S2- 1)는 라운드 연산 필드(1659A)로서 해석되는 반면, RL 필드(1657A)가 0(VSIZE(1657.A2))을 포함할 때, 베타 필드(1654)의 나머지(EVEX 바이트 3, 비트 [6-5]-S2- 1)는 벡터 길이 필드(1659B)(EVEX 바이트 3, 비트 [6-5]-L1- 0)로서 해석된다. U=1이고 MOD 필드(1642)가 00, 01, 또는 10을 포함할 때(메모리 액세스 연산을 나타냄), 베타 필드(1654)(EVEX 바이트 3, 비트 [6:4]-SSS)는 벡터 길이 필드(1659B)(EVEX 바이트 3, 비트 [6-5]-L1-0) 및 브로드캐스트 필드(1657B)(EVEX 바이트 3, 비트 [4]-B)로서 해석된다.
도 17는 본 발명의 일 실시예에 따른 레지스터 아키텍처(1700)의 블록도이다. 예시된 실시예에서는, 516 비트 폭을 갖는 32개의 벡터 레지스터(1710)가 있고; 이들 레지스터들은 zmm0 내지 zmm31로서 참조된다. 하위 16개의 zmm 레지스터의 하위 256 비트는 레지스터들 ymm0-16 상에 중첩된다. 하위 16개의 zmm 레지스터의 하위 168 비트(ymm 레지스터들의 하위 168 비트)는 레지스터들 xmm0-15에 중첩된다. 특정의 벡터 친화적 명령어 포맷(1600)은 아래 표에 예시된 바와 같이 이들 중첩된 레지스터 파일에 대해 연산한다.
Figure 112015046953355-pct00001
즉, 벡터 길이 필드(1559B)는 최대 길이와 하나 이상의 다른 보다 짧은 길이 중에서 선택을 하고, 여기서 각각의 이러한 보다 짧은 길이는 이전의 길이의 1/2 길이이며; 벡터 길이 필드(1559B)를 갖지 않는 명령어 템플릿은 최대 벡터 길이에 대해 연산을 한다. 또한, 일 실시예에서, 특정의 벡터 친화적 명령어 포맷(1600)의 클래스 B 명령어 템플릿들은 패킹된 또는 스칼라 싱글/더블 정밀도 부동 소수점 데이터 및 패킹된 또는 스칼라 정수 데이터에 대해 연산한다. 스칼라 연산들은 zmm/ymm/xmm 레지스터에서 최하위 데이터 엘리먼트 위치에서 수행되는 연산들이고; 상위 데이터 엘리먼트 위치들은 실시예에 따라 그것들이 명령어 이전과 동일하게 두거나 또는 제로화된다.
기입 마스크 레지스터들(1715) -예시된 실시예에서, 각각이 그 사이즈가 64 비트인 8개의 기입 마스크 레지스터(k0 내지 k7)가 있다. 대안적 실시예에서, 기입 마스크 레지스터들(1715)은 그 사이즈가 16 비트이다. 상술한 바와 같이, 본 발명의 일 실시예에서, 벡터 마스크 레지스터 k0는 기입 마스크로서 이용될 수 없고; 보통은 k0를 표시하는 인코딩이 기입 마스크에 대해 이용될 때, 이것은 0xFFFF의 하드와이어된 기입 마스크를 선택하여, 해당 명령어에 대한 기입 마스킹을 효과적으로 디스에이블링한다.
범용 레지스터들(1725) -예시된 실시예에서, 메모리 피연산자들을 어드레싱하기 위해 기존의 x86 어드레싱 모드와 함께 이용되는 16개의 64-비트 범용 레지스터가 있다. 이러한 레지스터들은 RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, 및 R8 내지 R15라는 이름으로 참조된다.
MMX 패킹된 정수 플랫 레지스터 파일(1750)이라는 에일리어싱된 스칼라 부동 소수점 스택 레지스터 파일(x87 스택)(1745) - 도시된 실시예에서, x87 스택은 x87 명령어 세트 확장을 이용하여 32/64/80비트 부동 소수점 데이터에 대해 스칼라 부동 소수점 연산들을 수행하는 데 사용되는 8-엘리먼트 스택인 반면, MMX 레지스터들은 64-비트 패킹된 정수 데이터에 대해 연산들을 수행하는 것은 물론, MMX 및 XMM 레지스터들 사이에서 수행되는 일부 연산들에 대한 피연산자들을 유지하는 데 사용된다.
본 발명의 대안적인 실시예들은 더 넓거나 더 좁은 레지스터들을 이용할 수 있다. 부가적으로, 본 발명의 대안적인 실시예들은 더 많거나, 더 적거나, 상이한 레지스터 파일들 및 레지스터들을 이용할 수 있다.
본 발명의 실시예들은 상술한 다양한 단계들을 포함할 수 있다. 이 단계들은 범용 또는 특수 목적 프로세서로 하여금 단계들을 실행하게 하는데 사용될 수 있는 머신-실행가능 명령어들로 구현될 수 있다. 대안적으로, 이 단계들은 단계들을 수행하기 위한 하드와이어드 로직을 포함하는 특정 하드웨어 컴포넌트들에 의해, 또는 프로그래밍된 컴퓨터 컴포넌트들 및 커스텀 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 명세서에서 설명된 바와 같이, 명령어들은 비일시적 컴퓨터 판독가능한 매체에 내장된 메모리에 저장된 선정된 기능 또는 소프트웨어 명령어들을 갖거나 특정 연산을 수행하도록 구성된 응용 주문형 집적 회로(ASIC)들과 같은 하드웨어의 특정 구성들을 참조할 수도 있다. 따라서, 도면들에 나타난 기술들은 하나 이상의 전자 장치들(예를 들어, 엔드 스테이션(end station), 네트워크 소자, 등)에 저장되어 실행되는 데이터 및 코드를 이용하여 구현될 수 있다. 이러한 전자 장치들은 비일시적 컴퓨터 머신-판독가능한 저장 매체(예를 들어, 자기 디스크; 광 디스크; 랜덤 액세스 메모리; 판독 전용 메모리; 플래시 메모리 장치; 상-변화 메모리)와 일시적 컴퓨터 머신-판독가능한 통신 매체(예를 들어, 반송파, 적외선 신호, 디지털 신호 등과 같은, 전기적, 광학적, 음향적 또는 기타의 전파되는 신호의 형태)와 같은 컴퓨터 머신-판독가능한 매체를 이용하여(내부적으로 및/또는 네트워크를 통해 다른 장치들과) 코드 및 데이터를 저장 및 통신할 수 있다. 또한, 이러한 전자 장치들은 통상적으로, 하나 이상의 저장 장치들(비일시적 머신 판독가능한 저장 매체), 사용자 입/출력 장치들(예를 들어, 키보드, 터치스크린, 및/또는 디스플레이), 및 네트워크 접속들과 같은 하나 이상의 다른 컴포넌트들에 결합된 하나 이상의 프로세서들의 세트를 포함한다. 프로세서의 세트 및 다른 구성 요소의 결합은 통상적으로 하나 이상의 버스 및 브리지(버스 컨트롤러라고도 부른다)를 통해 이루어진다. 저장 장치 및 네트워크 트래픽을 전달하는 신호들은 각각 하나 이상의 머신-판독가능한 저장 매체 및 머신-판독가능한 통신 매체를 나타낸다. 따라서, 주어진 전자 장치의 저장 장치는 일반적으로 실행을 위한 코드 및/또는 데이터를 그 전자 장치의 하나 이상의 프로세서들의 세트에 저장한다. 물론, 본 발명의 실시예의 하나 이상의 부분은 소프트웨어, 펌웨어 및/또는 하드웨어의 상이한 조합을 사용하여 구현될 수 있다. 이 상세한 설명 전체에 걸쳐서, 설명 목적을 위해, 수많은 특정 상세 사항들이 본 발명의 철저한 이해를 제공하기 위해 제시되었다. 그러나, 본 발명은 이들 특정 세부 사항의 일부가 없어도 실시될 수 있다는 것은 본 분야의 숙련된 자라면 명백할 것이다. 특정의 예들에서, 공지된 구조들 및 기능들은 본 발명의 주제를 모호하게 하는 것을 회피하기 위해 정교한 세부 사항으로 기술되지는 않았다. 따라서, 본 발명의 범위 및 사상은 이하의 청구항과 관련하여 판단되어야 한다.

Claims (34)

  1. 프로세서로서,
    대응하는 복수의 프로세서 기능들을 수행하기 위한 복수의 프로세서 컴포넌트들;
    각각이 상기 프로세서 컴포넌트들 중 하나와 연관되는 복수의 전력 플레인(a plurality of power planes); 및
    상기 프로세서의 현재 사용에 대한 열적 제약 조건들, 전력 제약 조건들, 작업량 특성들 및 상기 프로세서가 사용되는 장치의 프로세싱 요구사항들에 기초하여 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정하는 전력 제어 유닛(PCU)
    을 포함하고,
    상기 전력 제약 조건들은 특정된 전력 예산을 포함하고, 상기 PCU는 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정할 때 상기 전력 플레인들에 의해 사용되는 조합된 전력이 상기 특정된 전력 예산을 초과하지 않도록 보장하고, 상기 열적 제약 조건들은 상기 프로세서 컴포넌트들 각각에 대한 특정 열적 예산을 포함하고, 상기 PCU는 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정할 때 각각의 전력 플레인에 의해 사용되는 전력이 상기 연관된 프로세서 컴포넌트의 온도로 하여금 상기 연관된 프로세서 컴포넌트의 상기 특정 열적 예산을 초과하게 하지 않도록 보장하는, 프로세서.
  2. 제1항에 있어서,
    시스템 온 칩(SoC) 아키텍처를 사용하여 구현되는, 프로세서.
  3. 제1항에 있어서,
    상기 복수의 프로세서 컴포넌트들은 메모리 컴포넌트, 상호접속부 및/또는 캐시 컴포넌트, 그래픽 컴포넌트, 및 범용 프로세싱 컴포넌트를 포함하는, 프로세서.
  4. 제1항에 있어서,
    상기 전력 플레인들의 각각은 전력을 조정하기 위한 독립적으로 변경가능한 주파수 및 전압 레벨을 포함하는, 프로세서.
  5. 제4항에 있어서,
    상기 PCU는 전력 플레인과 연관된 상기 프로세서 컴포넌트에 대한 동작 주파수를 조정함으로써 상기 전력 플레인에 대한 전력을 조정하는, 프로세서.
  6. 삭제
  7. 제1항에 있어서,
    상기 장치는 셋톱 박스; 범용 컴퓨터 시스템; 태블릿 컴퓨터; 또는 스마트폰 장치로 구성된 그룹으로부터 선택되는, 프로세서.
  8. 제1항에 있어서,
    상기 PCU는 상기 프로세서상에서 실행되는 프로세스들에 대한 상기 작업량 특성들을 계속해서 모니터링하고 상기 작업량 특성들에 기초하여 상기 전력 플레인들 각각에 대한 상기 전력을 동적으로 조정하는, 프로세서.
  9. 제8항에 있어서,
    상기 PCU는 그래픽 명령들이 허용가능한 사용자 경험을 위해 특정 속도(particular rate)로 실행될 필요가 있다는 것을 나타내는 작업량 특성들을 검출하는 것에 응답하여 그래픽 플레인에 대한 전력을 증가시키는, 프로세서.
  10. 제9항에 있어서,
    상기 PCU는 비디오 화상들이 허용가능한 사용자 경험을 위해 특정 속도로 디스플레이될 필요가 있다는 것을 나타내는 작업량 특성들을 검출하는 것에 응답하여 상호접속 플레인에 대한 전력을 증가시키는, 프로세서.
  11. 제1항에 있어서,
    상기 전력 제약 조건들은 주어진 순간에 상기 전력 플레인들 모두에 의해 소비될 최대 전체 전력을 포함하는, 프로세서.
  12. 제11항에 있어서,
    상기 PCU는 사용자 경험 메트릭들에 의해 특정되는 허용가능한 사용자 경험을 유지하면서 상기 전력 제약 조건들을 고려하여 상기 전력 플레인들에 제공되는 상기 전력을 동적으로 변경하는, 프로세서.
  13. 제1항에 있어서,
    상기 PCU는 상기 프로세서가 사용중인 시스템이 동작하고 있는 현재 검출되는 외부 조건들에 부가적으로 기초하여 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정하는, 프로세서.
  14. 제13항에 있어서,
    상기 외부 조건들은 상기 시스템을 위한 전원에 관한 표시를 포함하는, 프로세서.
  15. 제14항에 있어서,
    상기 외부 조건들은 상기 시스템이 교류 전력으로 구동되고 있는지 또는 배터리 전력으로 구동되고 있는지에 관한 표시를 포함하는, 프로세서.
  16. 제15항에 있어서,
    상기 외부 조건들은 상기 배터리 전력의 현재 레벨의 표시를 포함하는, 프로세서.
  17. 제1항에 있어서,
    상기 프로세서 컴포넌트들의 각각은 상기 PCU로부터의 전력을 요구하고, 이에 응답하여 상기 PCU는 상기 전력 제약 조건들 내에서 전체적인 전력 소비를 여전히 유지하면서 상기 요구하는 프로세서 컴포넌트들에 전력을 할당하는, 프로세서.
  18. 방법으로서,
    프로세서의 특정 사용에 대한 열적 제약 조건들, 전력 제약 조건들, 작업량 특성들 및 상기 프로세서가 사용되는 장치의 프로세싱 요구사항들의 세트를 정의하는 단계 - 상기 프로세서는 대응하는 복수의 프로세서 기능들을 수행하는 복수의 프로세서 컴포넌트들을 구비하며, 상기 프로세서 컴포넌트들 각각은 특정 전력 플레인과 연관됨 -; 및
    상기 프로세서의 상기 특정 사용에 대한 열적 제약 조건들, 전력 제약 조건들, 작업량 특성들 및 상기 프로세서가 사용되는 상기 장치의 프로세싱 요구사항들에 기초하여 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정하는 단계
    를 포함하고,
    상기 전력 제약 조건들은 특정된 전력 예산을 포함하고, 전력 제어 유닛(PCU)은 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정할 때 상기 전력 플레인들에 의해 사용되는 조합된 전력이 상기 특정된 전력 예산을 초과하지 않도록 보장하고, 상기 열적 제약 조건들은 상기 프로세서 컴포넌트들 각각에 대한 특정 열적 예산을 포함하고, 상기 PCU는 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정할 때 각각의 전력 플레인에 의해 사용되는 전력이 상기 연관된 프로세서 컴포넌트의 온도로 하여금 상기 연관된 프로세서 컴포넌트의 상기 특정 열적 예산을 초과하게 하지 않도록 보장하는, 방법.
  19. 제18항에 있어서,
    시스템 온 칩(SoC) 아키텍처를 사용하여 구현되는, 방법.
  20. 제18항에 있어서,
    상기 복수의 프로세서 컴포넌트들은 메모리 컴포넌트, 상호접속부 및/또는 캐시 컴포넌트, 그래픽 컴포넌트, 및 범용 프로세싱 컴포넌트를 포함하는, 방법.
  21. 제18항에 있어서,
    상기 전력 플레인들 각각은 전력을 조정하기 위한 독립적으로 변경가능한 주파수 및 전압 레벨을 포함하는, 방법.
  22. 제21항에 있어서,
    전력 플레인과 연관된 상기 프로세서 컴포넌트에 대한 동작 주파수를 조정함으로써 상기 전력 플레인에 대해 전력이 조정되는, 방법.
  23. 삭제
  24. 제18항에 있어서,
    상기 장치는 셋톱 박스; 범용 컴퓨터 시스템; 태블릿 컴퓨터; 또는 스마트폰 장치로 구성된 그룹으로부터 선택되는, 방법.
  25. 제18항에 있어서,
    상기 프로세서 상에서 실행되는 프로세스들에 대한 상기 작업량 특성들을 계속해서 모니터링하고 상기 작업량 특성들에 기초하여 상기 전력 플레인들 각각에 대한 상기 전력을 동적으로 조정하는 단계를 더 포함하는, 방법.
  26. 제25항에 있어서,
    그래픽 명령들이 허용가능한 사용자 경험을 위해 특정 속도로 실행될 필요가 있다는 것을 나타내는 작업량 특성들을 검출하는 것에 응답하여 그래픽 플레인에 대한 전력을 증가시키는 단계를 더 포함하는, 방법.
  27. 제26항에 있어서,
    비디오 화상들이 허용가능한 사용자 경험을 위해 특정 속도로 디스플레이될 필요가 있다는 것을 나타내는 작업량 특성들을 검출하는 것에 응답하여 상호접속 플레인에 대한 전력을 증가시키는 단계를 더 포함하는, 방법.
  28. 제18항에 있어서,
    상기 전력 제약 조건들은 주어진 순간에 상기 전력 플레인들 모두에 의해 소비될 최대 전체 전력을 포함하는, 방법.
  29. 제28항에 있어서,
    사용자 경험 메트릭들에 의해 특정된 허용가능한 사용자 경험을 유지하면서 상기 전력 제약 조건들을 고려하여 상기 전력 플레인들에 제공되는 상기 전력을 동적으로 변경하는 단계를 더 포함하는, 방법.
  30. 제18항에 있어서,
    상기 프로세서가 사용중인 시스템이 동작하고 있는 현재 검출되는 외부 조건들에 부가적으로 기초하여 상기 전력 플레인들 각각에 대한 전력을 동적으로 조정하는 단계를 더 포함하는, 방법.
  31. 제30항에 있어서,
    상기 외부 조건들은 상기 시스템을 위한 전원에 관한 표시를 포함하는, 방법.
  32. 제31항에 있어서,
    상기 외부 조건들은 상기 시스템이 교류 전력으로 구동되고 있는지 또는 배터리 전력으로 구동되고 있는지에 관한 표시를 포함하는, 방법.
  33. 제32항에 있어서,
    상기 외부 조건들은 상기 배터리 전력의 현재 레벨의 표시를 포함하는, 방법.
  34. 제18항에 있어서,
    상기 프로세서 컴포넌트들의 각각은 상기 PCU로부터의 전력을 요구하고, 이에 응답하여 상기 PCU는 상기 전력 제약 조건들 내에서 전체적인 전력 소비를 여전히 유지하면서 상기 요구하는 프로세서 컴포넌트들에 전력을 할당하는, 방법.
KR1020157012947A 2012-12-28 2013-06-24 이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법 KR101751358B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/730,493 US9672046B2 (en) 2012-12-28 2012-12-28 Apparatus and method for intelligently powering heterogeneous processor components
US13/730,493 2012-12-28
PCT/US2013/047434 WO2014105169A1 (en) 2012-12-28 2013-06-24 Apparatus and method for intelligently powering heterogeneous processor components

Publications (2)

Publication Number Publication Date
KR20150070365A KR20150070365A (ko) 2015-06-24
KR101751358B1 true KR101751358B1 (ko) 2017-06-27

Family

ID=51018729

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157012947A KR101751358B1 (ko) 2012-12-28 2013-06-24 이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법

Country Status (4)

Country Link
US (1) US9672046B2 (ko)
KR (1) KR101751358B1 (ko)
CN (1) CN104823129B (ko)
WO (1) WO2014105169A1 (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9727345B2 (en) * 2013-03-15 2017-08-08 Intel Corporation Method for booting a heterogeneous system and presenting a symmetric core view
US9513689B2 (en) * 2014-06-30 2016-12-06 Intel Corporation Controlling processor performance scaling based on context
US9424092B2 (en) 2014-09-26 2016-08-23 Microsoft Technology Licensing, Llc Heterogeneous thread scheduling
US9542518B2 (en) 2014-11-17 2017-01-10 Qualcomm Incorporated User experience based management technique for mobile system-on-chips
US9660649B2 (en) 2014-11-17 2017-05-23 Qualcomm Incorporated Voltage scaling for holistic energy management
US9760159B2 (en) 2015-04-08 2017-09-12 Microsoft Technology Licensing, Llc Dynamic power routing to hardware accelerators
US10114649B2 (en) 2015-05-26 2018-10-30 International Business Machines Corporation Thermal availability based instruction assignment for execution
US9760160B2 (en) * 2015-05-27 2017-09-12 Intel Corporation Controlling performance states of processing engines of a processor
US11221853B2 (en) * 2015-08-26 2022-01-11 Huawei Technologies Co., Ltd. Method of dispatching instruction data when a number of available resource credits meets a resource requirement
US10853077B2 (en) * 2015-08-26 2020-12-01 Huawei Technologies Co., Ltd. Handling Instruction Data and Shared resources in a Processor Having an Architecture Including a Pre-Execution Pipeline and a Resource and a Resource Tracker Circuit Based on Credit Availability
US9971393B2 (en) 2015-12-16 2018-05-15 International Business Machines Corporation Dynamic workload frequency optimization
US9934048B2 (en) * 2016-03-29 2018-04-03 Intel Corporation Systems, methods and devices for dynamic power management of devices using game theory
US10146287B2 (en) * 2016-04-01 2018-12-04 Intel Corporation Processor power monitoring and control with dynamic load balancing
US10296074B2 (en) 2016-08-12 2019-05-21 Qualcomm Incorporated Fine-grained power optimization for heterogeneous parallel constructs
US11513805B2 (en) * 2016-08-19 2022-11-29 Wisconsin Alumni Research Foundation Computer architecture with synergistic heterogeneous processors
US10354033B2 (en) * 2016-10-18 2019-07-16 Intel Corporation Mapping application functional blocks to multi-core processors
KR102034660B1 (ko) * 2017-07-31 2019-10-21 서울대학교산학협력단 이종 시스템의 가속기 제어 방법 및 이를 수행하기 위한 이종 시스템
US11698812B2 (en) 2019-08-29 2023-07-11 Intel Corporation System, apparatus and method for providing hardware state feedback to an operating system in a heterogeneous processor
KR20210100894A (ko) 2020-02-07 2021-08-18 이희내 스마트보행기
US20230152989A1 (en) * 2021-11-15 2023-05-18 Samsung Electronics Co., Ltd. Memory controller adjusting power, memory system including same, and operating method for memory system
KR102458919B1 (ko) * 2021-11-15 2022-10-26 삼성전자주식회사 적응적인 파워 조절을 수행하는 메모리 컨트롤러, 이를 포함하는 메모리 시스템 및 메모리 시스템의 동작방법

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7272517B1 (en) 2006-04-25 2007-09-18 International Business Machines Corporation Method and system for providing performance estimations for a specified power budget
US20090309243A1 (en) * 2008-06-11 2009-12-17 Nvidia Corporation Multi-core integrated circuits having asymmetric performance between cores

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5440752A (en) 1991-07-08 1995-08-08 Seiko Epson Corporation Microprocessor architecture with a switch network for data transfer between cache, memory port, and IOU
AU5722296A (en) 1995-05-01 1996-11-21 Apple Computer, Inc. A modular system utilizing interchangeable printed circuit b oard processor cards
US6341347B1 (en) 1999-05-11 2002-01-22 Sun Microsystems, Inc. Thread switch logic in a multiple-thread processor
US7233998B2 (en) 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US7100056B2 (en) * 2002-08-12 2006-08-29 Hewlett-Packard Development Company, L.P. System and method for managing processor voltage in a multi-processor computer system for optimized performance
US7996839B2 (en) 2003-07-16 2011-08-09 Hewlett-Packard Development Company, L.P. Heterogeneous processor core systems for improved throughput
US7873776B2 (en) 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
US9264384B1 (en) 2004-07-22 2016-02-16 Oracle International Corporation Resource virtualization mechanism including virtual host bus adapters
US7353410B2 (en) 2005-01-11 2008-04-01 International Business Machines Corporation Method, system and calibration technique for power measurement and management over multiple time frames
US7600135B2 (en) 2005-04-14 2009-10-06 Mips Technologies, Inc. Apparatus and method for software specified power management performance using low power virtual threads
US7490254B2 (en) * 2005-08-02 2009-02-10 Advanced Micro Devices, Inc. Increasing workload performance of one or more cores on multiple core processors
US7516301B1 (en) 2005-12-16 2009-04-07 Nvidia Corporation Multiprocessor computing systems with heterogeneous processors
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7822941B2 (en) 2006-06-05 2010-10-26 Oracle America, Inc. Function-based virtual-to-physical address translation
US8219788B1 (en) 2007-07-23 2012-07-10 Oracle America, Inc. Virtual core management
US8386747B2 (en) 2009-06-11 2013-02-26 Freescale Semiconductor, Inc. Processor and method for dynamic and selective alteration of address translation
US8400458B2 (en) 2009-09-09 2013-03-19 Hewlett-Packard Development Company, L.P. Method and system for blocking data on a GPU
US8869164B2 (en) 2010-09-02 2014-10-21 International Business Machines Corporation Scheduling a parallel job in a system of virtual containers
US8943334B2 (en) * 2010-09-23 2015-01-27 Intel Corporation Providing per core voltage and frequency control
US8418177B2 (en) 2010-10-01 2013-04-09 Microsoft Corporation Virtual machine and/or multi-level scheduling support on systems with asymmetric processor cores
US9092219B2 (en) * 2010-11-02 2015-07-28 Advanced Micro Devices, Inc. Method and system of sampling to automatically scale digital power estimates with frequency
US8861434B2 (en) 2010-11-29 2014-10-14 Alcatel Lucent Method and system for improved multi-cell support on a single modem board
US9286257B2 (en) * 2011-01-28 2016-03-15 Qualcomm Incorporated Bus clock frequency scaling for a bus interconnect and related devices, systems, and methods
EP2689336A1 (en) 2011-03-25 2014-01-29 BlackBerry Limited Dynamic power management of cache memory in a multi-core processing system
US8793686B2 (en) 2011-06-08 2014-07-29 Microsoft Corporation Operating system decoupled heterogeneous computing
US9442773B2 (en) * 2011-11-21 2016-09-13 Qualcomm Incorporated Thermally driven workload scheduling in a heterogeneous multi-processor system on a chip
US20130155081A1 (en) * 2011-12-15 2013-06-20 Ati Technologies Ulc Power management in multiple processor system
US9372524B2 (en) * 2011-12-15 2016-06-21 Intel Corporation Dynamically modifying a power/performance tradeoff based on processor utilization
US20130160003A1 (en) 2011-12-19 2013-06-20 Vmware, Inc. Managing resource utilization within a cluster of computing devices
US9524012B2 (en) * 2012-10-05 2016-12-20 Dell Products L.P. Power system utilizing processor core performance state control

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7272517B1 (en) 2006-04-25 2007-09-18 International Business Machines Corporation Method and system for providing performance estimations for a specified power budget
US20090309243A1 (en) * 2008-06-11 2009-12-17 Nvidia Corporation Multi-core integrated circuits having asymmetric performance between cores

Also Published As

Publication number Publication date
WO2014105169A1 (en) 2014-07-03
CN104823129A (zh) 2015-08-05
US9672046B2 (en) 2017-06-06
US20140189377A1 (en) 2014-07-03
CN104823129B (zh) 2018-01-30
KR20150070365A (ko) 2015-06-24

Similar Documents

Publication Publication Date Title
KR101751358B1 (ko) 이종 프로세서 컴포넌트들에 지능적으로 전원을 공급하기 위한 장치 및 방법
US9329900B2 (en) Hetergeneous processor apparatus and method
US9448829B2 (en) Hetergeneous processor apparatus and method
CN110832460A (zh) 基于中断率来修改处理器频率
KR101729829B1 (ko) 복수의 곱셈 연산들을 수행하는 방법 및 장치
US9639372B2 (en) Apparatus and method for heterogeneous processors mapping to virtual cores
KR20150066573A (ko) 멀티스레딩 컴퓨터 시스템에서의 고성능 및 공정성을 제공하기 위한 메커니즘
WO2020163445A1 (en) Adjusting display refresh rates based on user activity
EP3674847B1 (en) Controlling power state demotion in a processor
CN115048326A (zh) 用于管理总线通信协议的选择
US20230113953A1 (en) Dynamic voltage and frequency scaling for discrete graphics systems
EP4198689A1 (en) Frequency budget in a processor
JP7455856B2 (ja) プロセッサにおけるスロットリング閾値の調整
US20240111598A1 (en) Sequencing circuit for a processor
US11354213B2 (en) Utilization metrics for processing engines
US20230087502A1 (en) Gating of a mesh clock signal in a processor
CN114661349A (zh) 用于代码预取的指令和逻辑

Legal Events

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