KR101507702B1 - 제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템 - Google Patents

제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템 Download PDF

Info

Publication number
KR101507702B1
KR101507702B1 KR1020127034268A KR20127034268A KR101507702B1 KR 101507702 B1 KR101507702 B1 KR 101507702B1 KR 1020127034268 A KR1020127034268 A KR 1020127034268A KR 20127034268 A KR20127034268 A KR 20127034268A KR 101507702 B1 KR101507702 B1 KR 101507702B1
Authority
KR
South Korea
Prior art keywords
program code
hot
code
core
processor core
Prior art date
Application number
KR1020127034268A
Other languages
English (en)
Other versions
KR20130032333A (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 KR20130032333A publication Critical patent/KR20130032333A/ko
Application granted granted Critical
Publication of KR101507702B1 publication Critical patent/KR101507702B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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
    • 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
    • G06F9/4893Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues taking into account power or heat criteria
    • 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)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Power Sources (AREA)
  • Advance Control (AREA)
  • Debugging And Monitoring (AREA)

Abstract

여기에 제1 유형의 프로세서 코어와 제2 유형의 공동 설계된 코어를 결합하기 위한 장치 및 방법을 기술한다. 제1 코어 상의 프로그램 코드의 실행을 모니터링하고 프로그램 코드의 핫 섹션을 식별한다. 이들 핫 섹션은 공동 설계된 코어 상의 실행을 위해 최적화됨으로써, 후속하여 이들 핫 섹션을 만날 시에, 최적화된 핫 섹션은 공동 설계된 코어 상에서 실행된다. 공동 설계된 코어가 최적화된 핫 코드를 실행중일 때, 제1 프로세서 코어는 전력을 절감하거나 다른 코드를 병렬로 실행하기 위해 저전력 상태에 있을 수 있다. 더욱이 콜드 코드의 다중 스레드는 제1 코어 상에 파이프라이닝되는 반면에, 핫 코드의 다중 스레드는 최대 성능을 얻기 위하여 공동 설계된 코어 상에 파이프라이닝된다.

Description

제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템{APPARATUS, METHOD, AND SYSTEM FOR IMPROVING POWER PERFORMANCE EFFICIENCY BY COUPLING A FIRST CORE TYPE WITH A SECOND CORE TYPE}
본 발명은 프로세서 분야에 관한 것으로, 특히 전력, 성능 효율성을 최적화하는 것에 관한 것이다.
반도체 처리 및 논리 설계가 향상됨에 따라 집적회로 장치 상에 제공가능한 논리의 양을 증가시킬 수 있었다. 결과적으로, 컴퓨터 시스템 구성은 시스템에서 단일 또는 다중 집적회로로부터 개별 집적회로 상에 존재하는 다중 코어, 다중 하드웨어 스레드(multiple hardware threads) 및 다중 논리 프로세서까지 발전해 왔다. 프로세서 또는 집적회로는 전형적으로 단일 물리적 프로세서 다이를 구비하는데, 여기서 프로세서 다이는 임의 수의 코어, 하드웨어 스레드 또는 논리 프로세서를 포함할 수 있다.
집적회로 상의 처리 요소(코어, 하드웨어 스레드 및 논리 프로세서)의 수가 계속 증가함에 따라 더 많은 작업을 동시에 처리할 수 있게 되었다. 그러나 비순차 코어(out-of-order cores)를 모두 사용하는 프로세서로 인하여 소정 환경하에서 전력의 비효율성 및/또는 성능 비효율성이 발생할 수 있다. 결과적으로, 일부 하드웨어-소프트웨어 공동설계된 시스템은 전력 성능 효율성 문제에 맞서도록 발전되어 왔다. 이 시스템에서, 폭넓고 간단한 순차(in-order) 프로세서를 이용할 수 있는데, 소프트웨어는 순차 하드웨어 상에서 실행할 프로그램을 효율적으로 최적화 및 스케줄링한다.
그러나 하드웨어-소프트웨어 공동설계된 시스템은 전형적으로 두 가지 악영향과 관련있다: (1) 이진 변환기(binary translator)를 이용한 코드의 변환 및/또는 최적화는 짧은 실행 작업과 작은 응답 시간 제약로 인해 일부 애플리케이션을 느리게 할 수 있다(이진 변환 글래스조(glassjaw). (2) 순차 프로세서는 병렬 실행에 더 잘 맞는 소정 스타일의 프로그램에 대해서도 잘 수행할 수 없을 수도 있다(순차 글래스조).
BT(binary translation) 글래스조 문제를 설명하기 위하여, 마이크로소프트 엑셀 응용프로그램의 실행에 대한 전형적인 프로파일의 예를 검토한다. 100억 동적 x86 인스트럭션 실행의 경우, 시뮬레이션은 동적 인스트럭션의 23%가 100,000 번 보다 적게 반복되는 정적 인스트럭션으로부터임을 설명하며, 이것은 콜드 코드(cold code)로서 언급될 수 있다. 이들 x86 인스트럭션이 (최적화로 인한 성능 이득과 변환/해석에 따른 전형적인 오버헤드를 가진) 이진 변환 소프트웨어를 사용하여 해석 및 변환된다면, 콜드 코드는 원시 x86 실행보다는 대략 3.6 배 더 많은 실행할 인스트럭션을 가질 것이다. 그리고 변환은 전체 10B 인스트럭션이 1.4배 더 많은 인스트럭션을 실행하게 한다. 실행 코드의 대략 25%가 콜드 코드임을 고려시에, 평균적으로 변환 오버헤드는 콜드 코드를 4.4배 느리게 실행되게 할 것이다. 그리고 전체 실행이 원시 실행보다 1.7배 느리게 실행되게 한다.
순차 글래스조를 설명하기 위하여, 벤치마크 시뮬레이션 동안에 비순차 프로세서와 비교하여 순차 프로세서의 성능의 예를 검토한다. 유사한 설비의 순차 및 비순차(OOO: out-of-order) 프로세서 상에서 다수 프로그램을 시뮬레이션하는 동안에, 프로그램의 약 40%가 000 프로세서에서 1.57배 더 빠르게 실행되는 반면에, 프로그램의 약 40%는 순차 프로세서에서는 1.45배 빠르게 실행된다는 것을 알았다. 이들 시뮬레이션은 순전히 예시를 위한 것이며 결과에 있어 변동이 있을 수 있지만, 이것은 두 시스템이 잠재적으로(potentially) 전력 및/또는 성능에 있어 비효율성을 포함한다는 것을 보여준다.
본 발명은 예로써 도시되며 첨부 도면의 그림에 의해 제한하려는 것이 아니다.
도 1은 두 비대칭 코어를 포함한 프로세서의 실시예를 도시하는 도면.
도 2는 원시 코어, 소프트웨어 관리된 코어 및 코드 분산 모듈을 포함한 프로세서의 실시예를 도시하는 도면.
도 3은 최대 성능 및 최대 전력 절감을 성취하기 위해 코어들 간에 코드를 분산하기 위한 프로세서의 실시예를 도시하는 도면.
도 4는 최대 성능 및 전력 절감을 성취하기 위해 비순차 코어와 순차 코어 간에 코드를 분산하는 방법에 대한 흐름도의 실시예를 도시하는 도면.
도 5는 최대 성능 및 전력 절감을 성취하기 위해 비순차 코어와 순차 코어 간에 코드를 분산하는 방법에 대한 흐름도의 다른 실시예를 도시하는 도면.
다음 설명에서, 본 발명의 완전한 이해를 제공하기 위하여 특정 유형의 프로세서 코어, 특정 프로세서 구성, 특정 핫 코드 영역 식별 알고리즘, 변환/최적화된 코드를 저장하기 위한 특정 구조, 하드웨어/소프트웨어 간의 특정 작업 분할, 특정 프로세서 유닛/논리부 등과 같은 많은 특정한 상세부분을 기술한다. 그러나 당해 기술분야에 통상의 지식을 가진 자는 본 발명을 실행하는데 이들 특정한 상세부분을 사용할 필요는 없다는 것을 명백히 알 것이다. 다른 경우, 특정한 다른 프로세서 구조, 기술한 알고리즘을 위한 특정 논리 회로/코드, 특정 코드 구현, 특정 이진 변환 상세부분, 그리고 마이크로프로세서의 다른 특정한 동작 상세부분과 같은 잘 알려진 구성요소 또는 방법은 본 발명을 불필요하게 모호하게 하지 않도록 상세히 기술되지 않는다.
여기에 기술된 방법 및 장치는 최대 성능 및 전력 절감을 성취하기 위해 소프트웨어 관리된 코어와 함께 원시 코어를 구현하는 것이다. 특히, 코어들 간의 공동 작업(collaboration)은 주로 비순차 코어와 순차 공동설계된 코어와 관련하여 거론된다. 그러나 여기에 기술된 장치 및 방법은 비대칭 코어들 간의 임의 코드 분산으로 구현될 수 있으므로 그렇게 제한적이지는 않다. 예를 들면 여기에 기술된 코드 분산 방법과 장치는 고유 ISA(Instruction Set Architectures)를 구현하는 2개의 비순차 코어와 함께 이용될 수 있다. 더욱이 이러한 코어들 간의 공동 작업은 하드웨어 메카니즘과 코드/소프트웨어 간의 분할로서 종종 거론된다. 그러나 후술되는 방법 및 장치를 구현하는데 하드웨어, 소프트웨어 및/또는 펌웨어의 임의 혼합 또는 배타적 사용을 이용할 수 있다.
도 1을 참조하면, 다중 코어를 포함한 프로세서의 실시예를 도시한다. 프로세서(100)는 마이크로프로세서, 내장 프로세서, DSP(digital signal processor), 네트워크 프로세서, 또는 코드를 실행하기 위한 다른 장치와 같은 임의 프로세서를 포함한다. 일 실시예에서, 프로세서(100)는 상이한 유형의 적어도 두 코어(코어 101 및 102)를 포함한다. 그러나 프로세서(100)는 임의 수의 처리 요소를 포함할 수 있다.
일 실시예에서, 처리 요소는 스레드 유닛(thread unit), 스레드 슬롯, 처리 유닛, 콘텍스트, 논리 프로세서, 하드웨어 스레드, 코어, 그리고/또는 실행 상태 또는 구조 상태와 같은 프로세서 상태를 유지할 수 있는 임의 다른 요소를 언급한다. 환언하면, 일 실시예에서 처리 요소는 소프트웨어 스레드, 운영체제, 애플리케이션 또는 다른 코드와 같이 코드와 독자적으로 연관될 수 있는 임의 하드웨어를 언급한다. 물리적 프로세서는 전형적으로 코어 또는 하드웨어 스레드와 같은 임의 수의 다른 처리 요소를 잠재적으로 포함한 집적회로를 언급한다.
코어는 종종 독립적 구조 상태를 유지할 수 있는 집적회로 상에 위치한 논리부를 언급하며, 여기서 각 독립적으로 유지되는 구조 상태는 적어도 일부 전용 실행 자원과 관련있다. 코어와 대조적으로, 하드웨어 스레드는 전형적으로 독립적 구조 상태를 유지할 수 있는 집적회로 상에 위치한 임의 논리부를 언급하며, 여기서 독립적으로 유지된 구조 상태는 실행 자원에 대한 액세스를 공유한다. 알 수 있는 바와 같이, 소정 자원이 공유되며 다른 자원은 구조 상태 전용일 때, 코어와 하드웨어 스레드의 명명 간의 경계가 일부 중복된다. 그러나 종종 코어와 하드웨어 스레드는 임의 운영체제에 의해 개별 논리 프로세서로 간주될 수 있고, 여기서 운영체제는 각 논리 프로세서 상에 동작을 개별적으로 스케줄링할 수 있다.
도 1에 도시된 바와 같이, 물리적 프로세서(100)는 두 코어(코어 101, 102)를 포함한다. 여기서 코어(101)와 코어(102)는 비대칭 코어, 즉 상이한 구성, 기능 유닛 및/또는 논리부를 가진 코어로 간주된다. 일 실시예에서, 코어(101)는 비순차 프로세서 코어를 포함하지만, 코어(102)는 순차 프로세서 코어를 포함한다. 그러나 코어(102, 102)는 원시 코어, 소프트웨어 관리 코어, 원시 ISA를 실행하도록 구성된 코어, 변환된 ISA를 실행하도록 구성된 코어, 공동 설계된 코어, 또는 다른 알려진 코어와 같은 임의 유형의 코어로부터 개별적으로 선택될 수 있다. 추가적인 논의를 위해, 도 1에 도시된 기능 유닛은 보다 상세히 후술된다.
묘사한 바와 같이, 코어(101)는 하드웨어 스레드 슬롯(101a, 101b)으로도 언급될 수 있는 두 하드웨어 스레드(101a, 101b)를 포함한다. 그에 반해, 코어(102)는 하나의 하드웨어 스레드(102a)를 포함한다. 따라서 일 실시예에서 운영체제와 같은 소프트웨어 엔티티는 잠재적으로, 프로세서(100)를 3개의 독립된 프로세서로서, 즉 3개의 소프트웨어 스레드를 동시에 실행할 수 있는 3개의 논리 프로세서 또는 처리 요소로서 간주한다. 이 대신에, 기술한 코드 분산 메카니즘이 코어(102) 상의 코드 실행을 관리하는 동안에, 소프트웨어 엔티티는 프로세서(100)를 단지 두 독립된 프로세서(스레드 슬롯 101a, 101b)를 가지는 것으로 간주할 수 있다.
위의 내용으로 돌아가서, 제1 스레드는 구조 상태 레지스터(101a)와 관련있고, 제2 스레드는 구조 상태 레지스터(101b)와 관련있으며, 제3 스레드는 구조 상태 레지스터(102a)와 관련될 수 있다. 도시된 바와 같이, 구조 상태 레지스터(102a)는 구조 상태 레지스터(101b)에 복제되고, 따라서 개별 구조 상태/콘텍스트가 논리 프로세서(102a)와 논리 프로세서(101b)를 위해 저장될 수 있다. 구조 상태 레지스터(102a)는 레지스터(101a, 101b)와 동일할 수 있다. 그렇지 않다면, 레지스터(102a)는 코어(102)의 구조에 대해 고유한 스레드일 수 있다. 코어(101)에서, 인스트럭션 포인터, 및 재명명/할당기 논리부(rename/allocator logic)(130)에서의 재명명 논리부와 같은 다른 보다 작은 자원은 또한 스레드(101a, 101b)를 위해 복제될 수 있다. 재순서화/퇴거(reorder/retirement) 유닛(135)에서 재순서화 버퍼, ILTB(120), 로드/저장 버퍼 및 큐와 같은 소정 자원은 분할화를 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스 레지스터, 저레벨 데이터-캐시 및 데이터-TLB(115), 실행 유닛(들)(140) 및 비순차 유닛(135)의 일부와 같은 다른 자원들은 잠재적으로 충분히 공유된다.
프로세서(100)는 종종, 완전히 공유되거나, 분할화를 통해 공유되거나, 또는 처리 요소에 의해/로 전용될 수 있는 다른 자원을 포함한다. 도 1에서, 프로세서의 예시적 논리 유닛/자원을 가진 순전히 예시적인 프로세서의 실시예를 도시한다. 프로세서는 이들 기능 유닛의 임의 유닛을 포함하거나 또는 생략할 수 있을 뿐만 아니라, 도시되지 않은 임의 다른 알려진 기능 유닛, 논리부 또는 펌웨어를 포함할 수 있다는 데에 주목한다. 도시된 바와 같이, 코어(101)는 단순화된 비순차(OOO: out-of-order) 프로세서 코어로서 도시된다. OOO 코어는 실행/취할 분기를 예측하기 위해 분기 목표 버퍼(120), 그리고 인스트럭션을 위한 주소 변환 엔트리를 저장하기 위해 I-TLB(instruction-translation buffer)(120)를 포함한다.
코어(101)는 인출 요소를 디코딩하기 위한 인출 유닛(fetch unit)(120)으로 연결된 디코드 모듈(125)을 더 포함한다. 일 실시예에서, 인출 논리부는 스레드 슬롯(101a, 101b)과 제각기 관련된 개별 시퀀서(sequencer)를 포함한다. 주로 코어(101)는 프로세서(100) 상에 실행될 수 있는 인스트럭션은 정의/명시하는 제1 ISA와 관련있다. 여기서, 제1 ISA의 일부인 기계 코드 인스트럭션은 종종, 수행할 인스트럭션 또는 동작을 참조/명시하는 (opcode로 언급되는) 인스트럭션 부분을 포함한다. 디코드 논리부(125)는 제1 ISA에 의해 정의되는 바와 같이 그들의 opcode로부터 이들 인스트럭션을 인식하고 처리를 위한 파이프라인 상으로 디코딩된 인스트럭션을 전달하는 회로를 포함한다.
일 예에서, 할당기 및 재명명기 블록(130)는 인스트럭션 처리 결과를 저장하기 위한 레지스터 파일과 같이 자원을 보존하기 위해 할당기를 포함한다. 그러나 스레드(101a, 101b)는 잠재적으로 비순차 실행을 할 수 있고, 여기서 할당기 및 재명명기 블록(130)은 또한 인스트럭션 결과를 추적하기 위한 재순서화 버퍼와 같이 다른 자원을 보존한다. 또한 유닛(130)은 프로그램/인스트럭션 참조 레지스터를 프로세서(100)에 내부적인 다른 레지스터로 재명명하기 위한 레지스터 재명명기를 포함할 수 있다. 재순서화/퇴거 유닛(135)은 비순차 실행, 그리고 비순차 실행된 인스트럭션의 차후 순차적 퇴거를 지원하기 위해, 위에서 언급한 재순서화 버퍼, 로드 버퍼 및 저장 버퍼와 같은 구성요소를 포함한다.
일 실시예에서, 스케줄러 및 실행 유닛(들) 블록(140)은 실행 유닛 상의 인스트럭션/동작을 스케줄링하기 위한 스케줄러 유닛을 포함한다. 예를 들면 부동 소수점 인스트럭션은 이용가능한 부동 소수점 실행 유닛을 가진 가진 실행 유닛의 포트 상에서 스케줄링된다. 또한 실행 유닛과 관련된 레지스터 파일은 정보 인스트럭션 처리 결과를 저장하기 위해 포함된다. 예시적 실행 유닛은 부동 소수점 실행유닛, 정수 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛 및 다른 알려진 실행 유닛을 포함한다.
하위 레벨 D-TLB(data cache and data translation buffer)(150)가 실행 유닛(들)(140)으로 연결된다. 데이터 캐시는 메모리 일관성 상태로 잠재적으로 유지되는 데이터 피연산자와 같이 최근에 사용/작동된 요소를 저장할 수 있다. D-TLB는 최근 가상/선형 주소-물리적 주소 변환을 저장할 수 있다. 특정 예를 들면, 프로세서는 물리적 메모리를 다수의 가상 페이지로 분할하기 위해 페이지 테이블 구조를 포함할 수 있다.
위에 언급한 바와 같이 일 실시예에서, 코어(102)는 공동 설계된 순차 코어를 포함한다. 결과적으로, 도 1은 단순화된 순차 코어 파이프라인을 도시한다. 이 파이프라인은 인출 유닛(121), 디코드 유닛(126), 실행 유닛(들)(141) 및 하위 레벨 데이터 캐시(151)를 포함한다. 이들 유닛은 코어(101)의 대응한 유닛과 유사한 방식으로 작동할 수 있다. 그러나 순차 코어에서, 인스트럭션/연산은 코어(101)에서와 같이 잠재적 비순차 실행 대신에 프로그램 순서대로 실행된다. 일 예에서, 비순차 코어(101)는 원시 코어로서 언급되는 반면에, 순차 코어(102)는 공동 설계된 코어로서 언급된다. 이 대신에, 순차 코어(102)가 원시 코어이며, 비순차 코어(101)는 공동 설계된 코어가 될 수 있다.
여기서, 코어(101, 102)는 최근에 인출한 요소를 캐시하기 위한 것으로 상위 레벨 또는 퍼더아웃 캐시(further-out cache)(110)에 대한 액세스를 공유한다. 상위 레벨 또는 퍼더아웃 이란 실행 유닛(들)로부터 더 멀어지거나 또는 증가된 캐시 레벨을 언급한다는 데에 주목한다. 일 실시예에서, 상위 레벨 캐시(110)는 제2 또는 제3 레벨 데이터 캐시와 같은 마지막 레벨 데이터 캐시(프로세서 100 상에서 메모리 계층에서 마지막 캐시)이다. 그러나 상위 레벨 캐시(110)는 인스트럭션 캐시와 관련있거나 또는 이를 포함할 수 있으므로 그렇게 제한적이지는 않다. 대신에, 트레이스 캐시(trace cache)(인스트럭션 캐시 유형)가 최근에 디코딩된 트레이스를 저장하기 위해 디코더(125) 뒤에 연결될 수 있다.
도시된 구성에서, 프로세서(100)는 또한 시스템 메모리(175), 칩셋, 노스브리지(northbridge), 또는 다른 집적회로와 같이 프로세서(100)의 외부에 있는 장치와 통신하기 위해 버스 인터페이스 모듈(105)을 포함한다. 메모리(175)는 프로세서(100) 전용이 되거나, 또는 시스템에서 다른 장치와 공유될 수 있다. 메모리(175) 유형의 일반 예는 DRAM(dynamic random access memory), SRAM(static RAM), NV(non-volatile) memory 및 다른 알려진 저장장치를 포함한다.
일 실시예에서, 코드는 성능 및 전력의 최대화를 기반으로 코어(101)와 코어(102) 사이에 분산된다. 예를 들면 코드 영역은 두 코어(101, 102) 중의 한 코어 상에서 더 양호하게 수행되는 것으로 확인된다. 결과적으로, 이러한 코드 영역 중의 한 영역을 만날 때(encounter)/검출시에, 코드 섹션은 적절한 코어로 분산된다. 이러한 영역의 식별은 (프로그램 프로파일 분석을 통하는 것과 같이 코드 실행 전에) 정적으로 행해질 수 있거나, 또는 하드웨어, 소프트웨어 또는 이들의 결합에 의해 (코드 실행 동안에) 동적으로 행해질 수 있다.
동적 접근방안의 일 실례로서의 예에서, 코어(101)와 같은 일 프로세서 코어는 그의 성능, 전력 절감, 원시 ISA, 알려진 임의 처리 고려사항 또는 이들의 결합을 기반으로 코드를 실행하기 위해 디폴트 코어로서 선택될 수 있다. 그 후, 코어(101) 상에 빈약하게 실행되는 디폴트 코드의 영역, 또는 코더(102) 상에서 더 양호하게 실행되는 디폴트 코드의 영역을 식별한다. 이들 식별된 코드 섹션을 후속하여 만날 때, 그들은 실행을 위해 코어(102)로 분산된다. 코어(102) 상의 이들 영역의 실행은 코어(101)를 워밍업하기 위한 순환적 런-어헤드(run-ahead execution), 이들 영역으로부터의 결과에 의존하는 코어(102) 상의 다른 영역의 실행과 함께 코어(102) 상의 이들 영역의 직렬 실행, 또는 코어(102) 상의 다른 코드의 실행과 함께 이들 영역의 병렬인 동시적 실행을 포함할 수 있다는 데에 주목한다.
정적 접근방안의 예에서, 컴파일러 또는 사용자는 하나의 코어 또는 다른 코어 상에 보다 양호하게 실행되는 인스트럭션 또는 구획설정(demarcations)과 같은 것으로써 코드 섹션을 식별할 수 있다. 여기서, 코어(101)는 이러한 인스트럭션을 만날 때까지 코드를 실행한다. 코어(102)로부터의 모니터링에 응답하거나, 또는 코어(102)의 단독 발의(트리거링)에 의해, 만났던 인스트럭션을 기반으로 코어(102) 상에서 식별된 코드 섹션을 실행한다.
일 코어 또는 다른 코어 상에서의 양호한 실행에 대한 코드 섹션의 식별을 동적으로 또는 정적으로 행하든지 간에, 소정 실시예에서, 원시 코드는 또 다른 코어 상에 실행되도록 변환 및/또는 최적화된다. 예를 들어 코어(101)는 제1 ISA 유형을 인식하는 디코드 논리부(125)를 포함하고, 코어(102)는 제2 ISA 유형을 인식하는 디코드 논리부(126)를 포함한다고 가정한다. 이 경우, 제1 ISA 유형의 코드 영역이 코어(102) 상에서 실행된다면, 코드 영역은 코어(102) 상에 실행될 제2 ISA 유형으로 변환된다. ISA 유형들 간의 변환은 순전히 예시적인 것이라는 데에 주목한다. 대신에, 코어(101) 상에 실행될 최적화된 비순차 코드는 순차 코어(102)의 실행을 위해 다시 최적화될 수 있다. 이 시나리오에서, 코어(102)는 코어(101)과 동일한 ISA 또는 동일한 ISA의 서브셋을 포함할 수 있다. 그러나 최적화는 간단하고 폭넓은 순차 코어 상에서 보다 효율적인 실행을 보장하도록 코드 상에서 수행된다.
코드를 효율적으로 분산시키기 위한 코어(101)와 코어(102) 간의 협동 작업은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 결합으로 구현될 수 있다. 협동 작업 메카니즘의 예시적 실시예를 설명하기 위하여 코드 영역을 식별하기 위한 동적 접근방안에 관한 상기 예를 더 검토한다. 예에서, 원시 포맷의 프로그램 코드는 비순차 코어(101) 상에 실행되도록 최적화된다. 코드 영역 또는 프로그램 코드의 실행 동안에, 코어(101) 및/또는 코어(102)와 관련된 모니터 하드웨어를 이용하여 코어(101)의 코드 영역과 관련된 성능을 결정할 수 있다. 이 대신에, 코드 영역을 실행시에 코어(101)의 성능을 결정/모니터링하기 위해 소프트웨어, OS 코드, 마이크로코드 또는 다른 코드와 같은 코드를 코어(102) 상에서 실행할 수 있다. 코드 영역이 코어(102) 상에서 더 양호하게 실행된다고 결정되면, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합을 이용하여 코어(102) 상에 실행할 코드 영역을 변환 및/또는 최적화할 수 있다.
결과적으로, 코어(101)는 코드 영역을 다시 만날 때(인스트럭션 포인터가 코드 영역을 참조), 코드 영역을 식별하기 위한 식별자 인스트럭션을 인출 또는 디코딩하거나, 또는 코드 영역을 식별하는 다른 방식을 검출하고, 그 후 변환/최적화된 버전의 코드 영역을 코어(102) 상에서 실행한다. 일 실시예에서, 코어(102) 상의 코드 영역 실행 동안에, 코어(101)는 전체 프로그램 실행 성능을 증가시키기 위해 다른 코드 영역을 동시에 실행할 수 있다. 동시적 또는 병렬 실행은 코어(101, 102) 상에서 별개의 소프트웨어 스레드의 실행도 포함할 수 있다는 데에 주목한다.
이와 대조적으로, 스레드는 코어(101, 102) 상에서 파이프라이닝(pipelining)될 수 있다. 이 시나리오의 예를 들면, 두 소프트웨어 스레드의 각각이 코드의 다중 단계(multiple stages)(핫, 콜드 등)를 포함한다고 가정한다. 여기서, 제1 스레드로부터의 콜드 코드(cold code)는 코어(101) 상에 실행될 수 있고, 핫 영역을 만날 때, 변환된 핫 영역이 코어(102) 상에 실행된다. 코어(102) 상의 코드의 변환된 핫 영역의 실행 동안에, 제2 스레드로부터의 콜드 코드는 코어(101) 상에 실행될 수 있다. 코어(102) 상에서, 제1 변환된 핫 코드의 실행이 완료될 때, 그러면 제2 소프트웨어 스레드로부터의 또 다른 핫 영역의 실행이 수행될 수 있다. 이 예로부터 알 수 있는 바와 같이, 코드의 단계는 각 코어 상에 인터리빙될 수 있어, 결과적으로 파이프라이닝 유형의 실행이 된다. 다른 실시예에서, 코드는 코어(101) 상에 코드 영역, 코어(102) 상에 식별된 코드 영역, 그리고 후속하여 코어(101) 상의 또 다른 코드 영역과 같이 두 영역에 대하여 순차적으로 실행될 수 있다.
또한 처음에 코어(102) 상의 실행을 위해 코드 영역을 식별할 때 조차도, 그 실행의 성능을 또한 모니터링할 수 있다. 그 다음, 두 코어 상의 성능을 고려함으로써 최대 성능 및 전력 절감을 성취하기 위하여 코드 영역을 실행하는데 최상의 적합성을 보이는 코어를 결정시에 고려할 수 있다. 예를 들어 코드 영역이 코어(102) 상에 변환된 코드로서 실행되는 것으로 확인되지만, 코어(102) 상의 성능이 코어(101) 상의 성능보다 아래인 경우(또는 코어(102) 상의 성능 이득이 코어(201) 상의 실행의 전력 절감을 능가하지 않는다면), 코드는 후속하여 만날시에 코어(101)로 재분산될 수 있다.
도 1은 상이한 모듈, 유닛 및/또는 논리부의 표현과 함께 예시적 프로세서의 추상적인 논리 뷰를 도시한다. 그러나 여기에 기술된 방법 및 장치를 이용하는 프로세서는 도시된 유닛을 포함할 필요는 없다는 데에 주목한다. 그리고 프로세서는 도시된 유닛의 모두 또는 일부를 생략할 수 있다. 더욱이, 전술한 바의 대부분은 비순차 프로세서 코어 및 순차 프로세서 코어를 관련이 있다. 그러나 전술한 바와 같이, 두 프로세서 코어는 원시 코어 및 소프트웨어 관리 코어와 같이 비대칭 코어의 임의 버전일 수 있다. 또한 도 1은 두 코어를 도시하지만, 프로세서는 동일 유형의 다중 코어뿐만 아니라, 각 상이한 유형의 셋 이상의 코어와 같이 임의 수의 코어를 포함할 수 있다.
또한 도 1은 외부 메모리 제어기(제어기 허브 170)로의 인터페이스를 가진 포인트 대 포인트(point-to-point) 방식으로 연결된 프로세서의 실시예를 도시한다. 그러나 다수의 현 프로세서는 다수의 코어를 상호연결하기 위한 링 구성뿐만 아니라 공유 캐시 및 다른 인터페이스를 가진 일 프로세서 메모리 인터페이스 모듈(온칩 모듈)을 포함하기 시작하였다. 도시하진 않았지만, 일 실시예에서 프로세서(100)는 링 상호연결 결합 코어, 캐시 및 메모리 제어기 구성요소를 포함한다.
여기서, 캐싱 에이전트(caching agent)를 이용하여 물리적으로 분산된 캐시의 슬라이스를 관리한다. 예를 들면 각 캐시 구성요소는 나란히 배치된 코어(캐시의 분산된 슬라이스를 관리할 목적인 캐시 에이전트와 관련있는 코어)를 위한 캐시 슬라이스를 관리할 수 있다. 캐시 에이전트가 캐시 슬라이스와의 링 상호연결부 및 인터페이스 상의 트래픽을 다루는 것과 상당히 유사하게, 코어 에이전트/구성요소는 코어와의 트래픽 및 인터페이스를 다룰 수 있다. 부가적으로, 링 상호연결부는 메모리 및/또는 그래픽 프로세서와 같은 다른 모듈과의 인터페이스를 위해 MCIL(Memory Controller interface Logic) 및/또는 다른 제어기를 연결시킬 수 있다.
도 2를 참조하면, 두 코어들 간에 코드를 분산하기 위한 코드 분산 모듈의 실시예를 도시한다. 일 실시예에서, 코어(201, 202)는 비대칭 코어이다. 예를 들면 코어(201)는 원래 프로그램 순서를 벗어나 코드를 실행하도록 구성된 비순차(out-of-order: OOO) 코어이고, 코어(202)는 프로그램 순서대로 코드를 실행하도록 구성된 순차(또는 직렬 코어)이다. 완전하진 않지만 다른 코어 유형의 예시적 리스트를 보면 원시 코어, 비원시 코어, 소프트웨어 관리 코어, 원시 ISA 코어, 변환 ISA 코어, 공동설계된 코어, 추론적 실행 코어 및 비추론적 실행 코어를 포함한다.
일 실시예에서, 코드 분산 모듈(210)은 성능 및 전력 절감을 최대화하는 것을 기반으로 코어(201, 202) 간에 분산시키는 것이다. 여기에 사용된 바와 같은 모듈은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 결합을 언급할 수 있다. 또한 모듈, 유닛 또는 논리부는 코어 또는 프로세서에서 중심이 될 수 있을뿐만 아니라 이를 통해 분산될 수 있다. 예를 들면 코드 분산 모듈(210)은 코어(201), 코어(202), 프로세서(200) 또는 프로세서(200)를 포함한 시스템과 관련된 저장소에 유지되는 마이크로 코드 또는 소프트웨어와 같은 분산 코드를 포함할 수 있다. 여기서, 분산 코드는 실행될 때 코드 분산을 수행한다. 그에 반해, 코드 분산 처리는 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합에 의해 관리될 수 있다.
일 실시예에서, 코드 분산 모듈(210)은 프로그램 코드의 핫 부분을 식별할 수 있다. 프로그램 코드는 도 4를 참조하여 아래에서 보다 상세히 거론된다. 그러나 논의되는 이 섹션에 대한 실례로서의 예를 들면, 프로그램 코드는 이진 또는 기계 코드와 같이 처리 요소로써 실행할 임의 코드를 포함할 수 있다. 코드의 핫 부분은 전력, 성능, 히트, 다른 알려진 프로세서 메트릭스, 또는 이들의 결합과 같은 고려사항을 기반으로 다른 코어에 비해 일 코어 상에서 실행하는데 보다 적합한 코드 부분을 언급할 수 있다. 여기서, 코어(201)가 프로그램 코드의 원시 실행을 위한 디폴트 코어라고 가정시에, 프로그램 코드의 핫 부분의 식별은 코어(202) 상에서 실행하는데 보다 적합한 코드 부분을 결정하는 것을 포함한다. 코어(201)가 OOO 코어이고, 코어(202)는 순차 코어인 실시예에서, 코드의 핫 부분은 고 순환 섹션(highly-recurrent section)의 실행을 위해 보다 이용될 수 있는 자원을 잠재적으로 가진 직렬 코어(202) 상에서 실행하는데 보다 적합한 프로그램 코드의 핫 스팟을 언급할 수 있다. 예를 들면 코드의 핫 부분은 코드의 부분의 반복 패턴(recurrent pattern), 또는 인스트럭션 카운트 또는 사이클 카운트와 같은 소정의 다른 잘 알려진 메트릭에 의해 식별된다. 종종, 높은 반복 패턴을 가진 코드 섹션은 순차 코어 상에서 보다 효율적으로 실행되도록 최적화될 수 있다. 본래, 이 예에서 콜드 코드(낮은 반복성)는 원시, OOO 코어(101)로 분산되고, 핫 코드(높은 반복성)는 소프트웨어 관리 순차 코어(102)로 분산된다.
코드의 핫 부분은 정적으로, 동적으로, 또는 이들의 결합으로 식별될 수 있다. 첫 번째 경우, 컴파일러 또는 사용자는 프로그램 코드의 섹션이 핫 코드인지를 결정할 수 있다. 여기서, 핫 코드 식별자 인스트럭션(들)은 코드 섹션을 핫으로, 즉 코어(201) 대신에 코어(202) 상에 실행될 것으로 표시할 수 있다. 일 실시예에서, 코어(201)에서 디코드 논리부는 프로그램 코드의 핫 부분을 식별할 수 있는 프로그램 코드로부터의 핫 코드 식별자 인스트럭션을 디코딩하도록 구성된다. 이러한 인스트럭션의 디코드 또는 인출은 코어(202) 상에서 코드의 핫 섹션의 변환 및/또는 실행을 트리거링할 수 있다. 이 예에서, 코드 분산 모듈(210)은 핫 코드 검출 인스트럭션을 검출하기 위한 디코드 논리부를 포함한다. 또한 모듈(210)은 코어(202) 상의 핫 코드의 실행뿐만 아니라 변환/최적화를 수행하기 위해 다른 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 이 대신에, 핫 코드 섹션은 코어(202) 상의 실행을 위해 미리 최적화/변환될 수 있다.
다른 예에서, 코드 분산 모듈(210)은 프로그램 코드에서 핫 스팟/영역(hot spot/regions)을 (실행 동안에) 동적으로 식별한다. 일 실시예에서, 코어(201) 및/또는 코어(202) 에 포함된 하드웨어를 이용하여 코어(201)와 같은 코어 상에 프로그램 코드의 실행을 프로파일링(profile)할 수 있다. 프로파일의 특성(실행과 관련된 전력 및/또는 성능 메트릭)을 기반으로, 프로그램 코드의 영역은 핫 코드로서 식별될 수 있다. 하드웨어 동작과 유사하게, 모니터링 코드는 코어(201)와 같은 다른 코어 상에서 실행되는 프로그램 코드의 모니터링/프로파일링을 수행하기 위해 코어(202)와 같은 일 코어 상에서 실행될 수 있다. 이러한 모니터링 코드는 코어 내, 프로세서(200) 내 저장 구조에서, 또는 프로세서(200)를 포함한 시스템에서 유지되는 코드일 수 있다는 데에 주목한다. 예를 들면 모니터링 코드는 코어(201), 코어(202) 또는 프로세서(200)의 저장 구조에서 유지되는 마이크로코드 또는 마이크로코드일 수 있다. 그리고 모니터링 코드는 종래 실행 유닛뿐만 아니라 프로세서(200) 상의 다른 펌웨어 또는 논리부에 의해 실행될 수 있다.
또 다른 예를 들면, 힌트로서 핫 코드의 정적 식별을 행한다. 그러나 프로그램 코드 실행의 동적 프로파일링은 코드 영역의 정적 식별을 핫으로 무시할 수 있고, 이 유형의 정적 식별은 코어가 코드 분산을 위해 적절할 지를 결정시에 동적 프로파일링에 의해 고려될 수 있는 컴파일러 또는 사용자 힌트로서 종종 언급된다. 더욱이 동적 프로파일링의 특성상, 핫인 코드 영역의 식별은 코드의 그 섹션을 항상 핫으로 식별되도록 제약하지 않는다. 예를 들면 프로그램 코드가 비순차 코어(201) 상에 실행된다고 가정한다. 코어(202) 상에 실행되는 모니터 코드는 코어(201)의 프로그램 코드 섹션 실행의 성능 레벨을 모니터링 한다. 구현을 기반으로, 코어(201) 상의 성능이 코어(202) 상에서 수행되는 것보다 충분히 낮은 것으로 결정된고, 그리고/또는 코어(201) 상의 코드 섹션의 반복 패턴이 코어 천이 오버헤드를 숨기는 것으로 예측하기에는 충분히 높다면, 코드 섹션은 핫으로 식별된다. 변환 및/또는 최적화 후에, 변환된 버전의 코드 섹션이 코어(202) 상에서 실행된다. 코어(201) 상에서의 실행의 모니터링과 유사하게, 성능 모니터링 코드의 실행과 같은 것을 통해 코어(22) 상에서의 변환 버전 코드의 실행을 모니터링할 수 있다. 성능이 코어(201) 상에서보다 코어(202) 상에서 더 낮은 경우, 핫인 코드 섹션의 식별은 동적으로 반전될 수 있다(핫 코드 섹션이 콜드 코드로서 다시 레벨링될 수 있다).
일단 코드의 섹션, 스팟 또는 영역이 핫으로 식별되면, 일 실시예에서 코드 분산 모듈(210)은 최적화/변환된 핫 코드를 얻기 위하여 코드의 핫 섹션을 최적화 및/또는 변환한다. 일 실시예에서, 이진 변환 코드와 같은 변환 및/또는 최적화 코드는 코어(202)의 저장 논리부에서 유지된다. 예를 들면 이진 변환 코드는 코어(202)에 유지된 마이크로-코드 부분일 수 있다. 변환/최적화 코드는 실행될 시에 코어(202) 상의 실행을 위해 코드 섹션을 변환/최적화한다. 일 실시예에서, 코어(202, 202)는 동일 ISA 또는 이의 서브셋을 인식할 수 있고, 여기서 변환/최적화는 단순히, 코어(202) 상에서 보다 효율적으로 실행하기 위한 변환/최적화 코드이다. 또 다른 실시예에서, 코어(201, 202)는 상이한 ISA를 인식하고, 여기서 변환은 코드 영역을, 코어(201)에 의해 인식될 수 있는 일 ISA로부터 코어(202)에 의해 인식될 수 있는 다른 ISA로 변환하는 것을 포함한다. 변환/최적화를 변환/최적화 코드의 실행과 관련하여 거론하였지만, 전용 하드웨어일지라도 변환/최적화 코드를 위한 임의 알려진 메카니즘을 이용할 수 있다.
일 실시예에서, 코어(201)를 가진 핫 코드의 식별된 섹션을 만날 시에, 핫 코드(이의 변환 버전)는 코어(202) 상에서 실행된다. 핫 코드 영역을 만날 때를 결정하기 위해 임의 알려진 트리거를 이용할 수 있다. 몇몇 고레벨 예는 코드 영역과 관련된 인스트럭션 주소를 만남(encountering)/참조(referencing), 코드 섹션을 핫 코드로서 식별하는 인스트럭션을 인출/디코딩/스케줄링/실행, 다른 코어 상에서 실행할 핫 코드의 변환 버전을 나타내는 인스트럭션을 인출/디코딩/스케줄링/실행, 핫 코드 영역을 만났다는 것을 나타내는 모니터로부터 외부 트리거 등을 포함한다.
실례로서 예를 들면, 코드 분산 모듈(210)은 하드웨어, 소프트웨어 또는 이들의 결합으로 구현된 모니터 모듈을 포함한다. 모니터 모듈은 코드의 핫 영역을 식별하거나, 또는 핫 영역을 변환 영역으로 변환할 때, 모니터 모듈은 코드의 핫 영역과 관련된 인스트럭션 주소를 등록한다. 이 등록은 코드의 변환 영역의 위치와 인스트럭션 주소를 연관시키는 것을 포함할 수 있다. 그 후, 인스트럭션 포인터(프로그램 카운터)가 후속하여 인스트럭션 주소를 참조할 때, 이것은 코드의 핫 영역을 만났던 등록된 인스트럭션 주소로부터 결정된다. 여기에 인카운터 사건(encounter event)을 다루는 동기 또는 비동기 인터럽트 스타일과 같은 임의 형태의 검출을 사용할 수 있다는 데에 주목한다. 부가적으로, 하드웨어, 마이크로코드 및/또는 펌웨어는 인터럽트같은 처리없이 핫 코드 섹션의 만남을 직접 다룰 수 있는데, 즉 트리거 사건은 핸들러에 의해 서비스되지 않는다. 코어(101, 102)는 핫 코드로 등록된 주소를 식별하기 위해 매핑 구조와 같은 소정 하드웨어 구조를 공유할 수 있다.
코어(201) 상에서 핫 코드 섹션을 만나는 것에 응답하여, 핫 코드 섹션의 변환 및/또는 최적화 버전이 코어(202) 상에서 실행된다. 코어(201) 상에서 핫 코드 섹션을 식별하고 만나는 방법도 있지만, 다른 코어 상에서 코드 실행을 가능하게 하기 위한 임의 알려진 방법을 이용할 수 있다. 일 실시예에서, 협동작업 모듈을 이용하여 이러한 실행을 가능하게 한다. 예를 들면 코어(201, 202)는 소정 하드웨어 구조를 공유하고, 그리고/또는 정보를 공유하기 위한 통신 채널을 포함할 수 있다. 일 예를 들면, 코어(101, 102)는 데이터 캐시를 공유할 수 있고, 따라서 실행이 코어(201)로부터 코어(202)로 이전(migration)할 때, 데이터는 물리적으로 이동하지 않고 오히려 공유 캐시에 이미 상주해 있다. 유사하게, 일 실시예에서 섀도우 레지스터 파일(shadow register file)과 같은 레지스터 파일은 코어(201)와 코어(202) 간에 공유되고, 따라서 레지스터 상태(콘텍스트)는 일 코어로부터 다른 코어로 이전하지 않아도 된다. 대안으로서, 레지스터 파일을 공유하는 대신에, 고속 상호연결부를 사용하여 일 코어로부터 다른 코어로 콘텍스트 또는 이의 일부를 물리적으로 이전시킬 수 있다. 또한 드물게는 전송 소프트웨어를 사용하여 이러한 전송을 수행할 수 있다.
일 예를 들면, 핫 코드 섹션으로의 입력 값은 코어(202) 상에서의 핫 코드 섹션의 실행을 지원하기 위해 코어(201)로부터 코어(202)로 전송된다. 실행 후에, 출력 값은 코어(201)로 되전송된다. 일 실시예에서, 코드 섹션으로부터의 단지 식별된 입력/출력 값이 전송되는데, 즉 부분 콘텍스트 스위칭이다. 이러한 입력값은 사용자(소프트웨어/컴파일러) 및/또는 하드웨어/펌웨어 알고리즘에 의해 식별될 수 있다. 여기서 직접 액세스 하드웨어는 코어(201)에서 레지스터, 버퍼 또는 다른 구조로부터의 입력값을 판독하고, 이들을 코어(202)로 기록하도록 구성될 수 있다. 반대로, 동일하거나 또는 상이한 하드웨어를 이용하여 코어(202)로부터의 값을 판독하고 이들을 코어(201)로 기록할 수 있다. 그러나 이러한 값을 식별하는 일은 너무 성가신 일이며, 코어(201)와 코어(202) 간에 값을 제공하기 위해 전체 콘텍스트 스위칭, 복제 또는 공유를 수행할 수 있다.
다음 도 3을 참조하면, 최대 성능 및 전력 절감을 성취하기 위해 코어들 간에 코드를 분산시키기 위한 프로세서의 실시예를 도시한다. 전술한 바와 같이, 프로세서(300)는 각 상이한 코어 유형인 두 프로세서 코어를 포함한다. 일 예를 들면, 코어(301)는 원시 OOO(out-of-order) 프로세서 코어인 반면에, 코어(302)는 소프트웨어 관리된 순차 프로세서 코어이다. 코어(301) 및 코어(302)는 필수적인 것은 아니지만 상이한 ISA 유형을 인식할 수 있다. 사실상, 코어(302)는 코어(301)의 ISA의 서브셋을 인식할 수 있다. 그렇지 않으면, 코어(302)는 코어(301)의 ISA를 부분적으로 오버랩하는 별개의 ISA를 포함할 수 있다. 전술한 바와 같이, 코어 또는 프로세서는 종종, 코어 또는 프로세서에서 하드웨어/소프트웨어를 디코딩함으로써 ISA와 관련있다(인식된 인스트럭션의 정의).
일 실시예에서, 모니터 모듈(305)은 원시 OOO 코어(301) 상에 원시 프로그램 코드(325)의 실행을 모니터링할 수 있다. 이 모니터링을 통해, 모듈(305)은 프로그램 코드(325)의 핫 부분/영역(327)을 식별할 수 있다. 모니터 모듈은 하드웨어, 소프트웨어 또는 이들의 결합으로 구성될 수 있다. 일 실시예에서, 모니터 모듈(305)은 실행을 모니터링하기 위한 하드웨어를 포함한다. 일 예를 들면, 하드웨어는 코드(325)의 실행 동안에 성능/전력 메트릭을 결정하기 위하여, 퇴거 푸시아웃(retirement pushout)을 측정하기 위한 퇴거 푸시아웃 태그/카운터, 인스트럭션의 수를 세기위한 인스트럭션 카운터, 전체 실행 길이 및/또는 시간을 측정하기 위한 전체 트레이스 실행 측정 논리부, 코드 섹션을 실행한 횟수를 세기 위한 반복 카운터 등과 같은 마이크로-구조 및/또는 구조적 후크를 포함한다. 이 유형의 하드웨어는 비순차 코어(301)내, 순차 코어(302)내, 그리고 OOO 프로세서 코어(301) 또는 순차 프로세서 코어(302) 내에 포함되지 않는 집적회로의 비관련 부분에서와 같이 집적회로/프로세서의 임의 부분에 위치될 수 있다.
다른 실시예에서, 모니터 모듈(305)은 실행될 시에 프로그래 코드(325)의 실행을 모니터링하고, 프로그램 코드(325)의 핫 영역(327)을 식별할 수 있는 모니터 코드와 같은 소프트웨어를 포함한다. 실례로서 예를 들면, 프로세서(300)는 실행될 시에 모니터링을 발생시키는 코드, 마이크로코드 또는 기계 코드를 유지하기 위한 ROM(Read Only Memory) 구조, 프로그램가능 논리부 등과 같은 저장 구조를 포함한다. 그러나 모니터 코드는 코어(301, 302)와 관련된 임의 기계 판독가능 매체에 저장될 수 있다. 용어 "실행"의 사용은 종래 실행 유닛에 의한 실행으로 제한되지 않고, 펌웨어를 가진 마이크로코드의 실행과 같은 프로세서(300)와 관련된 다른 하드웨어 또는 프로그램가능 논리부에 의한 실행을 언급할 수 있다는 데에 주목한다. 여기서, 실행된 모니터 코드는 하드웨어에 의해 측정될 수 있는 반복성, 전력 및 성능 메트릭의 동일 모니터링을 수행할 수 있다.
일 예를 들면, 모니터링 하드웨어 및/또는 코드는 프로그램 코드의 코드 섹션에 대한 반복 패턴을 추적/결정한다. 간단한 예를 들면, 데이터 구조는 인스트럭션 주소와 같은 코드 섹션(코드 영역 327)에 대한 참조와, 인스트럭션 주소/코드 섹션이 코어(301) 상에 실행되었던 횟수의 카운트를 연관시킨다. 카운트는 절대 카운트(총 카운트) 또는 임시 카운트(시간량에 대한 카운트)와 관련될 수 있다는 데에 주목한다.
일 실시예에서, 모니터 모듈(305)은 프로그램 코드(325)의 핫 부분을 식별/검출하도록 구성된다. 모니터 모듈(305)은 일 예에서 OOO 프로세서 코어(301) 상에서의 실행 동안에 프로그램 코드(325)의 핫 부분(327)에 대한 하나 이상의 성능 메트릭(들)을 측정할 수 있다. 그리고 모듈(305)은 임계치 이하인 OOO 프로세서 코어 상의 성능 메트릭(들)에 응답하여 프로그램 코드(325)의 핫 부분(327)을 식별할 수 있다. 완전하진 않지만 성능 메트릭 예의 예시적 리스트를 보면 인스트럭션 퇴거 푸시아웃, 실행된 인스트럭션의 수, 코드 영역을 실행하기 위한 시간량, 코드 영역을 만난/실행한 횟수, 코드 영역의 실행 동안에 소비된 전력량, 코드 영역의 실행 동안에 상이한 전력 상태에서 소비된 시간량, 코드 세그먼트의 실행 동안의 열 밀적도 등을 포함한다.
전술한 일 예를 사용하여, OOO 코어(301)가 프로그램 코드(325)를 실행중이라고 가정한다. 그리고 모니터 코드는 코어(301) 상에서 프로그램 코드(325)의 영역을 실행하는 횟수를 결정하기 위해 실행되고 있다. 일 실시예에서, 그 카운트가 임계치를 만족시키거나 또는 초과할 때, 모니터 모듈(305)은 그 영역(327)이 핫 코드인지를 식별/결정한다. 임계치 3을 사용할 시에, 코어(302) 상에서 실행되는 모니터 코드가 코어(301) 상에서 세 번째 재실행되는 핫 영역(327)을 검출할 때, 영역(327)은 코드의 핫 영역으로서 식별된다. 임의 측정된 성능 메트릭을 위해 유사한 처리(카운트, 임계치에 대해 비교, 식별)를 사용할 수 있다는 것을 알기 위해 반복 패턴을 결정하는 특정 예를 추론할 수 있다. 더욱이 성능 메트릭을 결정하는 것은 단순한 카운트로 제한되지 않으며, 코어, 프로세서 또는 컴퓨터 시스템에서 실행 또는 전력 절감 성능에 대한 임의 알려진 알고리즘을 포함할 수 있다.
그러나 프로그램 코드(325) 내 핫 영역(327)을 식별하는 일은 동적 성능 모니터링으로 제한되지 않는다. 대신에, 컴파일러 또는 정적 프로그램 분석을 이용하여 순차 코어(302) 상의 실행에 보다 적합할 것 같은 코드 섹션을 결정할 수 있다. 예를 들면 프로그램 분석이 핫 영역(327)이 다수 번 재실행될 것 같다는 것을 보여준다고 가정한다. 이 발견에 응답하여, 컴파일러 또는 사용자는 핫 코드로서 코드 섹션을 식별하는 인스트럭션 또는 경계를 삽입할 수 있다. 따라서 코어(301)의 디코더가 이러한 인스트럭션을 만날 때, 그들은 영역(327)이 코어(302) 상에서 실행될 핫 코드임을 인식한다. 소정 실시예에서, 사용자는 상세한 프로그램 분석없이 프로그램에 대한 지식을 기반으로 이러한 코드 영역을 식별할 수 있다는 데에 주목한다.
일 실시예에서, 영역(327)을 핫으로 식별하는 것에 응답하여, 코드(327)는 최적화된 핫 코드(304)를 얻기 위하여 최적화/변환 모듈(310)에 의해 최적화 또는 변환된다. 모니터 모듈(305)의 동작과 유사하게, 최적화 모듈(310)은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합으로 구현될 수 있다. 예를 들면 변환 및/또는 최적화 코드는 코어(302), 코어(301) 또는 프로세서(300)와 관련된 구조에 저장될 수 있다. 설명을 위해, 이진 변환 코드를 코어(302)와 관련된 펌웨어에 저장한다. 그리고 이진 변환 코드를 코어(301)를 위한 원시 포맷으로부터 코어(302)를 위한 포맷으로 핫 영역(327)을 변환하도록 실행한다. 변환이 ISA 또는 다른 포맷들간에 있을 수 있지만, 최적화는 OOO 코어(301) 상의 병렬 실행으로부터 코어(302) 상의 직렬 실행으로 최적화 코드를 위한 알려진 기법과 같이 실행을 위한 최적화 코드를 위한 임의 기지의 방법을 포함할 수 있다는 데에 주목한다.
그러나 임의 변환 코드 또는 최적화 코드는 코어(302)에서 마이크로코드, 또는 시스템 메모리에서 정규 프로그램 코드와 같이 컴퓨터 시스템의 임의 곳에 유지될 수 있으므로, 펌웨어에서 이진 변환 코드를 사용하는 것은 순전히 설명을 위한 것이다. 그리고 최적화 코드는 최적화된 핫 코드(304)를 얻기 위하여 핫 영역(327)을 변환 또는 최적화하기 위해 임의 방식으로 실행될 수 있다. 사실상, 현 소프트웨어 관리 프로세서에서 변환 코드를 위해 알려진 방법 및 장치와 같이 코어를 위한 변환 또는 최적화 코드를 위한 임의 알려진 방법 또는 장치를 사용할 수 있다.
소프트웨어, 펌웨어, 하드웨어 또는 이들의 결합을 사용하든지 간에, 변환은 정적으로 또는 동적으로 수행될 수 있다. 사실상, 상당히 유사한 모니터링을 런타임 동안에 동적으로, 또는 실행, 변환 및 최적화를 유사하게 수행할 수 있기 전에 정적으로 행할 수 있다. 컴파일러 또는 사용자가 핫 영역(327)을 식별하는 예에서, 최적화 및 변환은 (실행 전) 그 시점에 발생할 수 있다. 여기서, 핫 코드 식별자 인스트럭션은 핫 코드 영역(327)을 식별하고 최적화/변환된 코드(304)의 위치를 명시하는데 이용될 수 있다. 그러나 섹션(327)이 실행전 또는 그 동안에 핫 코드로서 식별되든지 간에, 소정 실시예에서 최적화 및 변환은 (런타임 동안에) 동적으로 발생한다.
일 실시예에서, 핫 영역(327)은 다른 실행과 병렬로 최적화/변환된다. 일 예에서, 코어(302)는 코어(301)의 영역(327) 실행과 병렬로 최적화 코드의 실행을 시작하다. 여기서, 모니터 모듈(305)은 코어(301) 상에서 핫 코드 영역의 실행을 검출하고, 따라서 최적화는 코어(302)에서 시작된다. 핫 영역(327)으로부터의 추가 인스트럭션이 코어(301) 상에서 여전히 실행중이라면, 코어(302)는 최적화를 시작한다. 결과적으로, 코어(302)는 본래, 코어(301) 상에서 핫 코드(327)의 실행과 병렬로 핫 코드(327)를 최적화한다. 또 다른 예를 들면, 코어(301)는 프로그램 코드(325)의 다른 섹션을 실행하거나, 또는 코어(302)의 핫 코드(327) 최적화와 병렬로 상호 배타적인 다른 코드를 실행한다. 또 다른 실시에에서, 핫 영역(327)의 최적화는 직렬로 행해진다. 예를 들면, 코어(301)는 핫 영역(327)을 실행하고, 후속하여 코어(301 또는 302)는 핫 코드 영역(327)을 최적화한다.
일 실시예에서, 코드(327)는 그의 원래 메모리 위치에 저장되고, 코어(302)에 의해 즉시(on the fly) 변환된다. 그러나 대부분의 경우, 실행 전에 전체 코드 섹션을 변환/최적화하는 것이 보다 효율적이다. 결과적으로, 최적화/변환 모듈(310)이 코어(302)와 같은 코어에 대한 코드를 최적화한 후에, 최적화된 핫 코드(304)는 어딘가에 저장된다. 최적화된 핫 코드(304)를 위한 다른 위치는 홈, 시스템 메모리 위치와 같은 메모리에서의 다른 위치일 수 있다. 그러나 핫 코드(327)가 빈번한 실행과 종종 관련있으므로, 잠재적으로는 코어(302)에 보다 근접하게 최적화 버전(304)를 유지하는 것이 유리하다. 따라서 도시된 실시예에서, 코어(303)는 최적화된 핫 코드(304)를 홀딩하기 위해 코드 캐시(302)를 포함한다. 코드 캐시(303)는 코어(302)에서 별개의 캐시 구조, 코어(302)에서 공유 인스트럭션 또는 데이터 캐시와 같은 공유 캐시 구조, 또는 코어(302)와 관련된 다른 일반 저장 구조일 수 있다는 데에 주목한다.
모니터 모듈(305)를 다시 거론하면, 핫 코드 영역(327)을 만나는 일은 코드 섹션과 관련된 인스트럭션 주소를 참조하는 프로그램 카운터를 포함한다. 도시된 바와 같이, 매핑 모듈(315)은 최적화된 핫 코드 참조(317)와 관련있는 인스트럭션 주소와 같은 코드 영역 참조를 유지할 수 있다. 본래, 매핑 모듈(315)의 엔트리는 그들의 최적화 버전과 핫 코드 영역(327)을 연관시킨다(최적화된 핫 코드 304). 실례로서 예를 들면, 참조(316)는 핫 영역(327)과 관련된 인스트럭션 주소와 같은 주소를 포함한다. 이 시나리오에서, 코어(301)가 매핑 모듈(315)의 필드(316)에 유지된 인스트럭션 주소를 만날 때(프로그램 카운터가 가리킬 때), 모니터 모듈(305)은 핫 영역(327)을 만났으며, 코어(302) 상에서 실행될 수 있다는 것을 나타낸다. 앞에서 간단히 기술하였으며 아래에서 보다 상세히 거론할 협동 작업 모듈(320)은 실행을 위해 코어(302)로 데이터 및/또는 콘텍스트의 이동을 용이하게 한다.
상기 예에서, 핫 영역(327)을 만났으며 코어(302) 상에서 실행할 수 있다는 것을 결정하는 일은 단지 참조(316) 상에서이다. 필드(317)와 필드(316)의 상관성은 영역(327)의 최적화된 핫 코드 버전(304)이 위치한 곳을 신속하게 결정하는데 이용될 수 있다. 결과적으로 필드(317)는 최적화된 핫 코드(304)의 위치에 대한 임의 참조를 포함할 수 있다. 이러한 참조의 몇몇 간단한 예는 최적화 코드(304)를 유지하는 코드 캐시(303)에서 엔트리의 주소, 코드 캐시(303)의 시작부로부터 최적화 핫 코드를 홀딩하는 엔트리(304)로의 오프셋, 그리고 엔트리(304)와 관련된 물리적 또는 선형 주소를 포함한다. 매핑 모듈(315)은 하드웨어, 소프트웨어, 펌웨어 또는 그들의 결합으로 구현 및/또는 유지될 수 있는 간단한 테이블 구조로 도시된다. 그러나 일 위치와 또 다른 위치를 상관시키기 위한 임의 알려진 방법을 이용하여 핫 코드(327)와 그의 최적화 버전을 관련시킬 수 있다.
특별히 도시하진 않았지만, 매핑 모듈(315)과 결합한 모니터 모듈(305)의 일부는 최적화된 핫 코드(304)가 코어(301) 상의 원시 코드(327) 대신에 코어(302) 상에 실행된다는 것을 나타내기 위해 트리거 모듈을 형성할 수 있다. 예를 들면 코어(301)를 위한 프로그램 카운터가 다음 인스트럭션 주소로 이동할 때, 트리거 하드웨어는 매핑 하드웨어 테이블(315)에 저장된 참조에 비해 그 주소를 검사한다. 여기서, 프로그램 카운터가 필드(316)에 유지된 코드 영역(327)를 참조하는 인스트럭션 주소를 가리킨다고 가정한다. 그 후, 트리거 하드웨어는 매핑 테이블(315)의 엔트리를 기반으로 코드 영역(327)을 위한 최적화된 코드 영역(304)이 존재한다는 것을 나타낸다. 결과적으로, 최적화 버전은 이미 존재하며 코어(302)상에서 실행될 것이므로, 코어(301) 상에의 코드 영역(327) 실행은 생략될 수 있다.
일 실시예에서, 코어(302)가 최적화 코드의 실행을 완료할 때까지, 코어(301)는 실행을 중지한다(중단하거나 또는 저전력 상태로 천이). 그러나 이것은 프로세서(300)의 처리 능력을 충분히 이용할 수 없을 수도 있다. 따라서 다른 실시예에서, 최적화된 핫 코드(304)가 코어(302) 상에서 실행중일 때, 코어(301)는 또 다른 소프트웨어 스레드(프로그램 코드 325와 다른 코드)의 실행을 인터리빙한다. 또 다른 예를 들면, 코어(301)는 사실상 실행의 런-어헤드 헬퍼 스레드(run-ahead helper thread)를 실행하거나, 또는 코드 영역(327)에 의존하지 않는 코드(325)의 다른 부분을 비순차적으로 실행한다.
일 실시예에서, 협동 작업 모듈(320)은 코어(301)와 코어(302) 간에 협동 작업 기능을 제공한다. 가장 간단한 예를 들면, 협동작업 모듈(320)은 정보를 전송하기 위해 코어(301)와 코어(302) 간을 상호연결하는 것을 포함한다. 그러나 다른 실시예에서, 협동 작업 모듈은 언급한 협동 작업을 용이하게 하기 위해 개별 코어들에 배타적일 수 있거나 그들 간에 공유될 수 있는 다른 하드웨어를 포함한다. 예를 들어 코어(302)는 코어(301)의 섀도우 레지스터 파일을 공유할 수 있으므로, 최적화된 핫 코드(304)가 코어(302) 상에 실행될 시에 코어(301)로부터 코어(302)로의 레지스터 상태의 전체 콘텍스트 스위칭을 수행할 필요가 없다. 대신에, 코어(302)는 그 시나리오에서 섀도우 레지스터 파일을 직접 액세스할 수 있다. 그러나 협동 작업 모듈은 공유 구조 및/또는 상호연결부만으로 제한되지 않는다. 사실상, 협동 작업 모듈(320)은 코어(301, 302)의 모두에서 레지스터, 저장 구조 및 버퍼에 대한 직접 판독 및/또는 기록 액세스를 제공하기 위해 하드웨어, 펌웨어, 소프트웨어 또는 그들의 결합을 포함할 수 있다. 결과적으로, 일 실시예에서 협동 작업 모듈(320)은 최적화된 핫 코드의 실행에 필요한 데이터/레지스터 값을 코어(301)로부터 코어(302)로 전송할 수 있다. 그리고 코어(301) 상의 후속된 적절한 실행을 가능하게 하기 위해 코어(302)로부터 코어(301)로 결과를 되전송할 수 있다.
모니터 모듈(305)은 원시 코어(301) 상의 모니터링 실행과 관련하여 주로 거론되었지만, 또한 일 실시예에서 모니터 모듈(305)은 코어(302) 상의 최적화된 코드의 실행을 감시한다. 결과적으로, 모니터 모듈(305)은 코어(301) 상의 코드 섹션(327)의 성능과 코어(302) 상에 최적화된 버전(304)의 성능을 비교할 수 있다. 더욱이, 코어(302) 상의 성능이 코어(301) 상의 성능보다 낮거나, 또는 성능 이들이 전력 소비를 증가시키는 것에 비하여 코어(302) 상에서 작을 시, 영역(327)을 핫 코드로 식별하는 판정은 반전될 수 있다. 예를 들면 이러한 결정을 나타내는 매핑 모듈(315)의 엔트리가 재할당되거나 또는 무효화됨으로서, 다음 번 코어(301)가 핫 코드(327)를 만나고, 모니터 모듈(305)은 참조(316)를 검출하지 않고, 최적화된 핫 코드 버전의 영역(327)이 코어(302) 상에 실행되어야 한다는 것을 나타내지 않는다. 본래, 반전은 이전에 식별된 영역(327)을 비순차 코어(301)로 다시 이전시킨다.
이 성능 비교를 더 데모실험하기 위해 특정한 실례로서 예를 들면, 코드 영역(327)이 높은 반복 패턴과 높은 인스트럭션 실행 카운트를 기반으로 핫 코드로서 식별된다고 가정한다. 결과적으로, 코드(327)는 최적화된 코드(304)를 얻기 위하여 코어(302) 상에 상주하는 이진 변환 코드에 의해 최적화된다. 최적화된 코드(304)가 코드 캐시(303)에 저장될 때, 매핑 테이블(315)에서의 엔트리는 최적화 버전(304)과 코드 영역(327)을 관련시키기 위해 생성된다. 코어(301)가 필드(316)에서 참조와 매칭하는 참조를 만날 때, 코어(301) 상의 코드 영역(327)을 실행하는 대신에 최적화 코드(34)의 실행이 코어(302) 상에서 트리거링된다. 전송, 공유 또는 콘텍스트 스위칭을 통한 협동 작업 모듈영역(327)은 코어(301)로부터 코어(302)로 적절한 값을 제공한다는 데에 주목한다. 코어(302)의 최적화된 핫 코드(304) 실행 동안에, 동일한 성능 메트릭(인스트럭션 실행 카운트)이 모니터 모듈(305)에 의해 추적된다. 인스트럭션 실행 카운트가 코어(301) 상에서 실행된 코드 영역(327) 보다 작다면, 핫 코드로 식별되는 영역(327)의 현재 상태(status quo)가 장래에 계속된다. 그러나 전술한 바와 같이, 인스트럭션 실행 카운트가 코어(302) 상에서 보다 길거나, 또는 상당한 전력 증가가 검출된다면, 핫 코드로서 영역(327)의 식별은 반전될 수 있다.
코어(301)와 코어(302) 간의 통신을 제공하는 것에 부가적으로, 협동작업 모듈(320)은 또한 상이한 유형의 다수 코어를 관리하기 위해 다른 특징을 포함할 수 있다. 첫 예를 들면, 전력 관리자는 코어(301)와 코어(302)가 동시에 최대 전력으로 동작하지 않도록 보장하기 위해 전력 알고리즘을 구현한다. 그러나 이 예는 순전히 예시적인 것이다. 그리고 다른 전력 알고리즘은 이러한 최대 동작을 허용할 수 있다. 다른 전력 고려사항으로서, 코어(302)는 코어(301) 상의 실행을 모니터링하는 동안에 최대 이하의 전력 상태(저전력 상태)로 있을 수 있다. 예를 들면 코어(301)가 그 자신의 모니터링을 수행하기 위한 메카니즘과 관련있을 때, 코어(302)는 실행할 최적화된 버전의 코드가 있을 때까지 충분히 파워링될 필요는 없다. 결과적으로, 전력은 실행을 위해 필요할 때까지 코어(302)를 턴오프함으로서 잠재적으로 절감된다. 반대로, 코어(302)가 최적화된 핫 코드를 실행중인 동안에,코어(301)는 파워 다운될 수 있다(ACPI 저전력 상태와 같이 전력 상태를 최대치 이상으로 둠).
도 4를 참조하면, 최대 성능과 전력 절감을 성취하기 위하여 비순차 코어와 순차 코어들 간에 코드를 분산시키는 방법에 대한 흐름도의 실시예를 도시한다. 도 4의 흐름도가 대체로 직렬 방식으로 도시되었지만, 흐름도는 병렬뿐만 아니라 상이한 순서로 수행될 수 있다. 예를 들면 프로그램이 흐름(405)에서 비순차 코어 상에 실행되기 전에, 흐름(410, 415)은 프로그램 코드의 컴파일 동안에 수행될 수 있다. 더욱이, 각 흐름은 하드웨어, 펌웨어를 이용하거나, 또는 프로그램 코드의 실행을 통해 수행될 수 있다.
흐름(405)에서, 프로세서에서 OOO 프로세서 코어 상의 프로그램 코드 실행을 모니터링한다. 일 실시예에서, 프로그램 코드에 대한 참조는 (1) 다른 프로그램 코드를 컴파일하기 위한 동적 또는 정적으로 컴파일러 프로그램(들)을 실행, (2) 운영체제, 하이퍼바이저(hypervisor), 애플리케이션 코드 또는 다른 소프트웨어 프로그램과 같은 주 프로그램의 실행, (3) 주 프로그램 코드와 관련된 라이브러리와 같은 다른 프로그램 코드의 실행, (4) 주 프로그램과 직접 관련없을 수도 있는 헬퍼 스레드(helper threads) 또는 다른 작업과 같은 다른 프로그램 코드의 실행, (5) 그들의 결합을 언급한다.
컴파일러는 종종, 소스 텍스트/코드를 목표 텍스트/코드로 변환하기 위한 프로그램 또는 프로그램셋을 포함한다. 주로, 컴파일러에 의해 프로그램/애플리케이션 코드를 컴파일하는 일은 고레벨 프로그램 언어 코드를 저레벨 기계 또는 어셈블리 언어 코드로 변환하기 위해 다수의 단계 및 패스로 행해진다. 그러나 단일 패스 컴파일러는 여전히 단순한 컴파일을 위해 이용될 수 있다. 컴파일러는 임의 알려진 컴파일 기법을 이용할 수 있고, 의미 분석, 사전처리, 파싱, 의미론적 분석, 코드 생성, 코드 변환 및 코드 최적화와 같은 임의 알려진 컴파일러 동작을 수행할 수 있다.
보다 큰 컴파일러는 종종 다수의 단계를 포함하지만, 가장 빈번한 이들 단계가 두 일반 단계 내에 포함된다:(1) 전단(front-end), 즉 일반적으로 구문론적 처리, 의미론적 처리 및 소정 변환/최적화가 발생하는 곳, (2) 후단(back-end), 즉 일반적으로 분석, 변환, 최적화 및 코드 생성이 발생하는 곳. 일부 컴파일러는 컴파일러의 전단과 후단 간의 윤곽이 모호해짐을 설명하는 중간 단을 참조한다. 결과적으로, 컴파일러의 삽입, 연관성, 생성 또는 다른 동작에 대한 참조는 전술한 단계 또는 패스 중의 임의 단계 또는 패스에 발생할 수 있을 뿐만 아니라 컴파일러의 알려진 임의 다른 단계 또는 패스에서 발생할 수 있다.
일 실시예에서, 프로그램 코드의 모니터링 실행은 프로그램 코드내 코드 세그먼트/영역이 실행되는 횟수를 추적하는 것을 포함한다. 코드 영역은 인스트럭션/코드를 그룹화하는 임의 알려진 방식으로 결정될 수 있다. 예를 들면 코드 섹션과 관련된 인스트럭션 주소가 OOO 코어의 프로그램 카운터에 의해 참조될 때마다, 반복 카운트가 증분된다. 일 실시예에서, 코드 섹션에 대한 반복 카운트가 임계치를 초과한다면, 코드 섹션은 흐름(410)에서 핫 코드로서 식별된다.
반복 패턴을 결정하거나, 프로그램 코드의 실행을 독립적으로 모니터링하는 것과 함께, 코드 섹션과 관련된 성능 메트릭을 결정/추적하는 것을 포함할 수 있다. 앞에서 개시한 바와 같이, 예시적 성능 메트릭은 인스트럭션 퇴거 푸시아웃, 실행된 인스트럭션의 수, 코드 영역을 실행하기 위한 시간 량, 코드 영역을 만난/실행하는 횟수, 코드 영역의 실행 동안에 소비되는 전력량, 코드 영역의 실행 동안에 상이한 전력 상태에서 소비되는 시간량, 코드 세그먼트 실행 동안의 열 밀적도를 포함한다. 그러나 프로그램 코드의 실행 동안에 프로세서 실행과 관련된 임의 알려진 메트릭 또는 메트릭들의 결합을 모니터링할 수 있다.
흐름(410)에서, 프로그램 코드의 핫 섹션은 반복 패턴, 성능 메트릭, 또는 이들의 결합을 기반으로 식별된다. 반복 카운트를 임계치와 비교하는 앞의 예와 유사하게, 성능 메트릭을 또한 임계치와 비교할 수 있다. 예를 들면 모니터는 푸시아웃 시간 임계치를 초과하는 퇴거 푸시아웃의 수를 셀 수 있다. 그리고 푸시아웃이 카운트 임계치를 초과한다면, 코드 섹션은 코드의 핫 섹션으로서 식별된다. 이 예는 고려사항으로서 단지 단일 성능 메트릭을 개시하지만, 코드의 핫 코드 섹션을 식별하는 일은 성능 메트릭 및/또는 반복 패턴의 임의 결합을 기반으로 할 수 있다. 예를 들면 코드 섹션을 핫 코드로서 식별하기 위해 다수의 성능 메트릭, 전력 고려사항 및 반복 패턴을 평가하는 알고리즘을 고안할 수 있다. 알고리즘이 구현 특정적이며 순환의 수가 광범위하므로, 설명을 불필요하게 모호하게 하지 않도록 결합 알고리즘의 상세사항을 자세히 거론하지 않는다. 전술한 바와 같이, 코드 섹션을 핫 코드로 식별하는 일은 프로그램 코드의 컴파일 동안에 컴파일러와 같은 것에 의해, 프로그램 코드의 실행 전에, 또는 런타임 컴파일러, 하드웨어, 펌웨어, 다른 소프트웨어 또는 이들의 결합에 의해 런타임시에 행해질 수 있다.
핫 코드 영역을 식별하는 것에 응답하여, 프로그램 코드의 핫 섹션은 흐름(415)에서 프로그램 코드의 최적화된 핫 섹션을 얻기 위하여 공동 설계된 프로세서 코어 상에서의 실행을 위해 최적화된다. 일 실시예에서, 이러한 최적화는 비순차 프로세서 코어와 관련된 논리부를 디코딩함으로써 인식될 수 있는 원시 인스트럭션으로부터, 공동 설계된 코어와 관련된 디코드 논리부에 의해 인식될 수 있는 공동 설계된 인스트럭션으로 프로그램 코드의 핫 섹션을 변환하는 것을 포함한다. 그러나 변환이 요구되는 것은 아니다. 사실상 소정 실시예에서, 공동 설계된 코어는 비순차 코어 또는 이의 서브셋과 동일한 ISA를 실행할 수 있는 직렬 코어일 수 있다. 이 시나리오에서, 코드는 하나의 ISA로부터 다른 ISA로 변환될 수 없고, 오히려 비순차 실행을 위한 포맷으로부터 직렬 실행을 위한 포맷으로 변환/최적화될 수 있다. 코드를 분석, 변환, 변형 및/또는 최적화하기 위한 알려진 컴파일러 방법과 같이 코드를 변환 및/또는 최적화하기 위한 임의 알려진 방법을 이용할 수 있다. 특정한 실례로서 예를 들면, 이진 변환 코드는 프로그램 코드를 프로그램 코드의 최적화된 핫 섹션으로 변환/최적화하기 위해 공동 설계된 코어 상에 상주할 수 있다.
흐름(420)에서 프로그램 코드의 최적화된 핫 섹션은 공동 설계된 프로세서 코어로 분산된다. 일 실시예에서, 분산은 공동 설계된 코어와 관련된 코드 캐시로, 프로그램 코드의 최적화된 핫 섹션을 기록하는 것을 포함한다. 그러나 분산은 언제든지 임의 저장 구조로부터 행해질 수 있다. 예를 들면 최적화된 핫 섹션은 시스템 메모리에 저장되고, 실행 바로 전에 공동 설계된 코어로 분산될 수 있다.
흐름(425)에서, 프로그램 코드의 식별된 핫 섹션은 프로그램 코드의 최적화된 핫 섹션과 관련있다. 예를 들면 프로그램 코드의 핫 섹션에 대한 참조, 그리고 최적화된 핫 섹션에 대한 참조는 코드 매핑 테이블의 엔트리에 저장된다. 코드 캐시 예에 이어서, 최적화된 핫 섹션에 대한 참조는 주소 또는 오프셋과 같은 코드 캐시내 최적화된 핫 코드의 위치에 대한 임의 참조를 포함한다. 그러나 임의 알려진 데이터 구조 및/또는 방법을 이용하여 핫 코드 섹션과 이의 최적화 버전의 위치를 연관시킬 수 있다.
그 후 흐름(430)에서, 코드 섹션이 비순차 코어 상의 실행 동안에 만날 때, 프로그램 코드의 최적화 핫 섹션은 비순차 코어 대신에 공동 설계된 프로세서 코어에 의해 실행된다. 전술한 바와 같이, 코드의 최적화된 핫 섹션의 실행은 설계 구현을 기반으로 비순차 코어 상의 다른 코드와 직렬로 비순차 코어 상에 다른 코드의 실행과 병렬로 발생할 수 있다. 그러나 병렬 구현시에, 비순차 코어는 다른 스레드로부터 인터리브된 코드뿐만 아니라 최적화된 핫 코드와 동일한 스레드로부터의 다른 코드를 실행할 수 있다.
비순차 프로세서 코어 상의 실행의 흐름(405)에서 수행되는 모니터링과 유사한 방식으로, 흐름(435)에서 공동 설계된 프로세서 코어 상의 최적화된 핫 섹션의 실행을 모니터링한다. 예를 들면 흐름(405)에서 모니터링된 동일한 성능 메트릭이, 순차적으로 공동 설계된 프로세서 코어와 함께 프로그램 코드의 최적화된 핫 섹션을 실행하는 동안에 모니터링될 수 있다. 그리고 비순차 코어에 비하여 순차 코어 상의 적은 성능을 나타내는 성능 메트릭에 응답하여, 순차 코어와 함께 프로그램 코드의 최적화된 핫 섹션을 실행하는 대신에 프로그램 코드의 핫 섹션을 비순차 코어와 함께 실행할 수 있다는 것을 나타낼 수 있다.
도 5를 참조하면, 최대 성능 및 전력 절감을 성취하기 위해 비순차 코어와 순차 코어 간에 코드를 분산시키는 방법에 대한 흐름도의 다른 실시예를 도시한다. 흐름(505)에서, 제1 프로세서 코어를 위해 최적화된 제1 코드 유형을 포함하는 프로그램 코드 영역을 핫 코드로서 식별하는 것에 응답하여, 제1 코드 유형으로부터 제2 프로세서 코어를 위해 최적화할 수 있는 제2 유형으로 변환된 프로그램 코드의 영역을 포함하는, 변환된 핫 영역과 프로그램 코드 영역을 관련시킨다.
일 실시예에서, 제1 프로세서 코어는 비순차 프로세서 코어를 포함하고, 제1 코드 유형은 비순차 프로세서 코어를 위해 최적화된 비순차 코드 유형을 포함하고, 제2 프로세서 코어는 순차 프로세서 코어를 포함하고, 그리고 제2 코드 유형은 순차 프로세서 코어를 위해 최적화된 순차 코드 유형을 포함한다. 일 예를 들면, 비순차 프로세서 코어는 제1 ISA(Instruction Set Architecture)를 인식하는 디코드 논리부와 관련있고, 순차 프로세서 코어는 제2 ISA를 인식하는 디코드 논리부와 관련있다. 여기서, 제2 코드 유형은 제2 ISA를 위해 더 최적화된다.
일 실시예에서, 제1 프로세서 코어와 관련있는 디코드 논리부는 프로그램 코드 영역이 핫 코드임을 나타내는, 프로그램 코드로부터의 적어도 하나의 인스트럭션을 디코딩할 수 있다. 여기서, 사용자는 핫 영역을 식별하기 위해 프로그램 코드에 인스트럭션을 포함할 수 있다. 그렇지 않으면, 컴파일러는 프로그램 코드를 컴파일할 시에 프로그램 코드의 분석에 응답하여 인스트럭션을 삽입할 수 있다. 다른 실시예에서, 하드웨어는 제1 코어 상의 프로그램 코드의 영역의 실행을 모니터링하고, 하드웨어 모니터링을 기반으로 핫 코드로서 프로그램 코드의 영역을 식별한다.
부가적으로, 프로그램 코드 영역은 변환된 핫 영역에 대한 참조와 관련된 프로그램 코드의 영역을 참조하여 데이터 구조에서의 엔트리 갱신을 통해 변환된 핫 영역과 연관될 수 있다. 예를 들면 변환된 핫 영역에 대한 참조는 주소, 인스트럭션 주소, 캐시 메모리내 위치, 프로그램 카운터 값 및 인스트럭션 opcode를 포함할 수 있다.
흐름(510)에서, 제2 프로세서 코어 상의 변환된 핫 영역은 제1 프로세서 코어에 의한 프로그램 코드의 실행 동안에 프로그램 코드의 영역을 만나는 것에 응답하여 실행된다. 예를 들면 제1 프로세서 코어의 인스트럭션 포인터가 코드의 핫 영역을 참조할 때, 변환 영역은 제2 프로세서 상에서 실행된다. 그러나 인스트럭션을 만나기 위한 임의 시간을 제2 코어 상의 실행을 트리거링할 수 있다. 예를 들면 특정 주소의 인출, 또는 특정 인스트럭션의 디코딩이 대신 실행을 트리거할 수 있다.
일 실시예에서, 코어들 간에 코드를 식별 및 분산할 시에 전력 고려사항을 고려할 수 있다. 실례로서 예를 들면, 제2 프로세서 코어가 변환된 핫 영역을 실행할 때, 제1 프로세서 코어는 전력 절감을 위해 저전력 상태로 천이한다. 또한 특정 전력 고려사항은 일 실시예에서 모든 코어가 동시에 최대 전력으로 동작하지 못하게 할 수 있다.
상이하게 공동 설계된 코어와 원시 코어를 결합한 결과로서, 잠재적으로 단일 애플리케이션 내에서도 최상의 전력 및 실행 이점을 얻는다. 예를 들면 비순차 코어 및 소프트웨어 관리 순차 코어의 경우, 소프트웨어 관리 코어 상에 비효율적인 코드는 비순차 코어로 이전한다. 그리고 이와 반대로, 비순차 코어 상에서 비효율적인 코드는 소프트웨어 관리 코어로 이전한다. 따라서 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합을 통해, 원시 코드의 병렬 실행, 핫 코드 검출 및 핫 코드 최적화가 효율적으로 관리될 수 있으면서, 다중 스레드의 개별 섹션은 비순차 및 순차 공동 설계된 코어 간에 파이프라인 방식으로 효율적으로 인터리빙될 수 있다. 결과적으로, 소정 구현에서 순차 코어 상의 실행 동안에 비순차 코어를 저전력 상태로 배치하는 것과 같이 상이한 전력 효율성 기법을 통해 보다 나은 전력 성능을 성취하면서 최대 성능을 얻을 수 있다.
여기에 사용되는 모듈은 임의 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합을 언급한다. 종종, 분리된 것으로 도시된 모듈 경계들은 보통 변경되며 잠재적으로 겹쳐진다. 예를 들면 제1 및 제2 모듈은 하드웨어, 소프트웨어, 펌웨어 또는 이들의 결합을 공유할 수 있으면서, 잠재적으로 소정 독립적인 하드웨어, 소프트웨어 또는 펌웨어룰 보유한다. 일 실시예에서, 용어 "논리"의 사용은 트랜지스터, 레지스터와 같은 하드웨어, 프로그램가능 논리 장치와 같은 다른 하드웨어를 포함한다. 그러나 다른 실시예에서, 논리부는 펌웨어 또는 마이크로코드와 같이 하드웨어와 집적된 소프트웨어 또는 코드를 포함한다.
여기에 사용된 바와 같이, 값은 수치, 상태, 논리 상태 또는 이진 논리 상태의 임의 알려진 표현을 포함한다. 종종, 논리 레벨, 논리 값의 사용은 또한 이진 논리 상태를 간단히 나나내는 1과 0으로 언급된다. 예를 들어 1은 고 논리 레벨을 언급하고, 0은 저 논리 레벨을 언급한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일 논리값 또는 다중 논리값을 유지할 수 있다. 그러나 컴퓨터 시스템에서 값의 다른 표현을 사용하였다. 예를 들면 십진수 10은 1010의 16진수 글자 A와 같이 표현될 수 있다. 따라서 값은 컴퓨터 시스템에서 유지될 수 있는 정보의 임의 표현을 포함한다.
더욱이, 상태는 값, 또는 값의 일부에 의해 표현될 수 있다. 예를 들면 논리 1과 같은 제1 값은 디폴트 또는 초기 상태를 나타낼 수 있는 반면에, 논리 0과 같은 제2 값은 디폴트가 아닌 상태를 나타낼 수 있다. 또한 일 실시예에서, 용어 "리셋"과 "셋"은 디폴트와 갱신된 값 또는 상태를 각각 언급한다. 예를 들면 디폴트 값은 잠재적으로 높은 논리 값, 즉 리셋을 포함하는 반면에, 갱신된 값은 잠재적으로 낮은 논리 값, 즉 셋을 포함한다. 값의 임의 결합을 이용하여 임의 수의 상태를 나타낼 수 있음을 안아야 한다.
방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드 셋의 실시예는 처리 요소에 의해 실행될 수 있는 기계 액세스가능 또는 기계 판독가능 매체 또는 기계 액세스가능 매체 상에 저장된 인스트럭션 또는 코드를 통해 구현될 수 있다. 기계 액세스가능/판독가능 매체는 컴퓨터 또는 전자 시스템과 같은 기계에 의해 판독될 수 있는 형태의 정보를 제공(즉 저장 및/또는 전송)하는 임의 메카니즘을 포함한다. 예를 들면 기계 액세스가능 매체는 SRAM(static random access memory) 또는 동적 RAM(DRAM)과 같은 RAM, ROM, 자기 또는 광저장 매체, 플래시 메모리 장치, 전기 저장장치, 광저장 장치, 음향 저장장치, 전달 신호(반송파, 적외선 신호, 디지털 신호)를 유지하기 위한 다른 형태의 저장 장치 등을 포함한다.
본 명세서를 통해서 "일 실시예(one embodiment 또는 an embodiment)에 대한 참조는 실시예와 함께 기술된 특정 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함된다는 것을 의미한다. 따라서 본 명세서를 통해 다양한 곳에서 나타나는 구문 "일 실시예에서(in one embodiment 또는 in an embodiment)"가 모두 동일 실시예를 참조할 필요는 없다. 더욱이 특정한 특징, 구조 또는 특성은 하나 이상의 실시예에서 임의 적당한 방식으로 결합될 수 있다.
전술한 명세서에서, 특정한 예시적 실시예를 참조하여 상세한 설명을 하였다. 그러나 첨부된 청구범위에서 설명된 본 발명의 보다 넓은 사상 및 범주를 벗어나지 않고서도 다양한 변형 및 변경을 행할 수 있다는 것은 명백할 것이다. 따라서 명세서 및 도면은 제한하려는 것이기 보다는 설명을 위한 것으로 간주된다. 더욱이 실시예의 상기 사용과 다른 예시적 언어가 반드시 동일 실시예 또는 동일 예를 참조할 필요가 없으며, 잠재적으로 동일한 실시예뿐만 아니라 상이하고 개별적인 실시예를 참조할 수 있다.

Claims (48)

  1. 집적회로를 포함하는 장치로서,
    상기 집적회로는,
    프로그램 순서를 벗어나 프로그램 코드를 실행하도록 구성된 비순차 프로세서 코어(an out-of-order(OOO) processor core)와,
    상기 프로그램 코드의 핫 부분(hot portion)을 프로그램 순서대로 실행하도록 구성된 순차 프로세서 코어(an in-order processor core) - 상기 프로그램 코드의 상기 핫 부분은 상기 OOO 프로세서 코어보다 상기 순차 프로세서 코어 상에서 실행하는 것이 더 적합하다고 모니터 하드웨어에 의해 식별되는 부분임- 와,
    상기 프로그램 코드의 상기 핫 부분을 식별하도록 구성되는 상기 모니터 하드웨어 ― 상기 모니터 하드웨어는 상기 OOO 프로세서 코어 상의 실행 동안에 상기 프로그램 코드의 상기 핫 부분에 대한 성능 메트릭(a performance metric)을 측정하도록 구성되고, 상기 OOO 프로세서 코어 상의 상기 성능 메트릭이 임계치 아래인 것에 응답하여 상기 프로그램 코드의 상기 핫 부분을 식별하도록 구성됨 ― 를 포함하는
    장치.
  2. 삭제
  3. 제 1 항에 있어서,
    상기 프로그램 코드의 핫 부분을 식별하도록 구성된 상기 모니터 하드웨어는,
    상기 OOO 프로세서 코어 상의 상기 프로그램 코드의 실행을 모니터링하고,
    상기 OOO 프로세서 코어 상의 상기 프로그램 코드의 실행을 모니터링하는 것을 기반으로 상기 프로그램 코드의 핫 부분에 대한 반복 패턴(a recurrence pattern)을 결정하며,
    상기 반복 패턴을 기반으로 상기 프로그램 코드의 핫 부분을 식별하도록 구성되는
    장치.
  4. 제 3 항에 있어서,
    상기 OOO 프로세서 코어 상의 상기 프로그램 코드의 실행을 모니터링하는 것을 기반으로 상기 프로그램 코드의 핫 부분에 대한 반복 패턴을 결정하도록 구성된 상기 모니터 하드웨어는, 상기 프로그램 코드의 핫 부분이 시간에 따라 실행되는 횟수를 결정하도록 구성된 모니터 하드웨어를 포함하고,
    상기 반복 패턴을 기반으로 상기 프로그램 코드의 핫 부분을 식별하도록 구성된 상기 모니터 하드웨어는, 상기 횟수가 핫 코드 임계치보다 큰 것에 응답하여 상기 프로그램 코드의 핫 부분을 식별하도록 구성된 모니터 하드웨어를 포함하는
    장치.

  5. 제 3 항에 있어서,
    상기 모니터 하드웨어는 상기 OOO 프로세서 코어, 상기 순차 프로세서 코어 및 상기 OOO 프로세서 코어 또는 상기 순차 프로세서 코어 내에 포함되지 않은 상기 집적회로의 비관련 부분으로 구성되는 그룹으로부터 선택된 상기 집적회로의 부분에 포함되는
    장치.
  6. 삭제
  7. 제 1 항에 있어서,
    상기 모니터 하드웨어는 또한 상기 순차 프로세서 코어 상의 실행 동안에 상기 프로그램 코드의 핫 부분에 대한 성능 메트릭을 측정하고, 상기 순차 프로세서 코어 상의 실행 동안에 상기 프로그램 코드의 핫 부분에 대한 상기 성능 메트릭이 상기 OOO 프로세서 코어 상의 실행 동안에 상기 프로그램 코드의 핫 부분에 대한 성능 메트릭보다 작은 것에 응답하여 상기 프로그램 코드의 핫 부분이 더 이상 상기 프로그램 코드의 핫 부분으로 간주되지 않음을 나타내도록 구성된
    장치.
  8. 제 1 항에 있어서,
    상기 집적회로는 상기 OOO 프로세서 코어로부터 상기 순차 프로세서 코어로 입력 값을 제공하도록 구성된 협동 작업 하드웨어(collaboration hardware)를 더 포함하는
    장치.
  9. 제 8 항에 있어서,
    상기 OOO 프로세서 코어로부터 상기 순차 프로세서 코어로 입력 값을 제공하도록 구성된 상기 협동 작업 하드웨어는, 상기 OOO 프로세서 코어로부터 상기 순차 프로세서 코어로 적어도 부분적인 콘텍스트 스위치(context switch)를 수행하도록 구성된 콘텍스트 스위치 논리부를 포함하고,
    상기 적어도 부분적인 콘텍스트는 적어도 상기 입력 값을 포함하는
    장치.
  10. 제 8 항에 있어서,
    상기 OOO 프로세서 코어로부터 상기 순차 프로세서 코어로 입력 값을 제공하도록 구성된 상기 협동 작업 하드웨어는, 상기 OOO 프로세서 코어의 레지스터로부터 상기 입력 값을 판독하고, 상기 입력 값을 상기 순차 프로세서 코어의 입력 레지스터로 기록하도록 구성된 직접 액세스 하드웨어를 포함하는
    장치.
  11. 제 1 항에 있어서,
    상기 집적회로는 실행될 시에 상기 순차 프로세서 코어 상의 실행을 위해 상기 프로그램 코드의 핫 부분을 변환하는 최적화 코드를 유지하는 코드 저장 논리부를 더 포함하고,
    상기 최적화 코드는 상기 모니터 하드웨어가 상기 프로그램 코드의 핫 부분을 식별하는 것에 응답하여 상기 프로그램 코드의 핫 부분을 변환하도록 실행되는
    장치.
  12. 제 11 항에 있어서,
    상기 최적화 코드는 최적화 마이크로코드를 포함하고, 실행될 시에 상기 순차 프로세서 코어 상의 실행을 위해 상기 프로그램 코드의 핫 부분을 변환하는 상기 최적화 마이크로코드는, 실행될 시에 상기 프로그램 코드의 핫 부분을, 상기 OOO 프로세서 코어의 디코더에 의해 인식되는 제 1 ISA(Instruction Set Architecture)로부터 상기 순차 프로세서 코어의 디코더에 의해 인식되는 제 2 ISA로 변환하는 최적화 마이크로코드를 포함하는
    장치.
  13. 제 12 항에 있어서,
    상기 순차 프로세서 코어는 코드 캐시(code cache)와 관련되고, 상기 코드 캐시는 상기 제 1 ISA로부터 상기 제 2 ISA로 상기 프로그램 코드의 핫 부분의 변환 후에 상기 프로그램 코드의 상기 핫 부분의 변환된 버전을 유지하도록 구성된
    장치.
  14. 제 1 항에 있어서,
    상기 집적회로는,
    상기 모니터 하드웨어가 상기 프로그램 코드의 핫 부분을 식별하는 것에 응답하여 상기 프로그램 코드의 핫 부분이 핫 코드임을 나타내고,
    상기 OOO 프로세서 코어가 상기 프로그램 코드의 핫 부분을 만나고(encounter) 트리거 하드웨어(trigger hardware)가 상기 프로그램 코드의 핫 부분이 핫 코드임을 나타내는 것에 응답하여, 상기 순차 프로세서 코어 상의 상기 프로그램 코드의 핫 부분의 실행을 트리거링하도록 구성된 트리거 하드웨어를 더 포함하는
    장치.
  15. 제 14 항에 있어서,
    상기 프로그램 코드의 핫 부분이 핫 코드임을 나타내도록 구성된 상기 트리거 하드웨어는, 상기 순차 프로세서 코어 상에 실행되도록 변환된 상기 프로그램 코드의 핫 부분의 변환된 버전에 대한 참조와 관련된 상기 프로그램 코드의 핫 부분에 대한 참조를 유지하도록 구성된 트리거 하드웨어를 포함하는
    장치.
  16. 프로세서를 포함하는 장치로서,
    상기 프로세서는,
    프로그램 코드를 실행하도록 구성된 비순차 코어와,
    공동 설계된 코어와,
    상기 프로그램 코드의 핫 부분을 식별하고, 변환된 핫 코드를 얻기 위하여 상기 공동 설계된 코어에 대한 상기 프로그램 코드의 상기 핫 부분을 변환하도록 구성된 코드 분산 모듈 - 상기 프로그램 코드의 상기 핫 부분은 상기 비순차 코어보다 상기 공동 설계된 코어 상에서 실행하는 것이 더 적합하다고 상기 코드 분산 모듈에 의해 식별되는 부분임 - 을 포함하되,
    상기 공동 설계된 코어는 상기 코드 분산 모듈이 상기 프로그램 코드의 상기 핫 부분을 식별하고 상기 비순차 코어가 실행을 위해 상기 프로그램 코드의 상기 핫 부분을 만나는 것에 응답하여 상기 변환된 핫 코드를 실행하고, 상기 비순차 코어 및 상기 공동 설계된 코어는 레지스터 파일을 공유하고 상기 변환된 핫 코드는 상기 공유된 레지스터 파일에 저장되는
    장치.
  17. 제 16 항에 있어서,
    상기 프로그램 코드의 핫 부분을 식별하도록 구성된 상기 코드 분산 모듈은, 상기 프로그램 코드의 핫 부분을 식별하는, 상기 프로그램 코드로부터의 핫 코드 식별자 인스트럭션을 디코딩하도록 구성된 디코드 논리부를 포함하는
    장치.
  18. 제 16 항에 있어서,
    상기 프로그램 코드의 핫 부분을 식별하도록 구성된 상기 코드 분산 모듈은, 상기 비순차 코어 상의 상기 프로그램 코드의 실행을 모니터링하고, 상기 비순차 코어 상의 상기 프로그램 코드의 실행의 모니터링으로부터 상기 프로그램 코드의 핫 부분을 식별하도록 구성된 모니터 모듈을 포함하는
    장치.
  19. 제 18 항에 있어서,
    상기 모니터 모듈은 모니터링 코드를 실행하도록 구성된 상기 공동 설계된 코어에서 실행 논리부를 포함하고, 상기 모니터링 코드는 상기 공동 설계된 코어에서 상기 실행 논리부에 의해 실행될 시에 상기 비순차 코어 상의 상기 프로그램 코드의 실행을 모니터링하고 상기 프로그램 코드의 핫 부분을 식별하는
    장치.
  20. 제 16 항에 있어서,
    변환된 핫 코드를 얻기 위하여 상기 공동 설계된 코어에 대한 상기 프로그램 코드의 핫 부분을 변환하도록 구성된 상기 코드 분산 모듈은, 변환 코드를 실행하기 위한 실행 논리부를 포함하고, 상기 변환 코드는 실행시에 상기 변환된 핫 코드를 얻기 위하여 상기 프로그램 코드의 핫 부분을 변환하고, 상기 프로그램 코드의 핫 부분은 상기 비순차 코어의 디코더에 의해 인식될 수 있는 제 1 ISA의 일부인 인스트럭션을 포함하고, 상기 변환된 핫 코드는 상기 공동 설계된 코어의 디코더에 의해 인식될 수 있는 제 2 ISA의 일부인 인스트럭션을 포함하는
    장치.
  21. 제 16 항에 있어서,
    상기 공동 설계된 코어가, 상기 코드 분산 모듈이 상기 프로그램 코드의 핫 부분을 식별하는 것과 상기 비순차 코어가 실행을 위해 상기 프로그램 코드의 핫 부분을 만나는 것에 응답하여 상기 변환된 핫 코드를 실행하는 것은, 상기 비순차 코어와 관련된 프로그램 카운터가 상기 프로그램 코드의 핫 부분과 관련된 인스트럭션 주소를 참조하고 상기 프로그램 코드의 핫 부분이 핫 코드임을 나타내기 위해 매핑 테이블(mapping table)이 상기 프로그램 코드의 핫 부분을 상기 변환된 핫 코드와 연관시키는 것에 응답하여, 상기 공동 설계된 코어가 상기 변환된 핫 코드를 실행하는 것을 포함하는
    장치.
  22. 제 21 항에 있어서,
    상기 공동 설계된 코어와 연관되는 코드 캐시를 더 포함하되,
    상기 프로그램 코드의 핫 부분이 핫 코드임을 나타내기 위해 상기 프로그램 코드의 핫 부분을 상기 변환된 핫 코드와 연관시키는 상기 매핑 테이블은, 상기 프로그램의 핫 부분에 대한 참조 및 상기 변환된 핫 코드에 대한 참조를 유지하는 매핑 테이블의 엔트리를 포함하고, 상기 변환된 핫 코드에 대한 참조는 상기 코드 캐시에서 상기 변환된 핫 코드의 위치에 대한 참조를 포함하는
    장치.
  23. 제 16 항에 있어서,
    상기 프로세서는 RAM(Random Access Memory), DDR(double-data-rate) RAM 및 버퍼링된 RAM으로 구성된 그룹으로부터 선택된 시스템 메모리에 연결되고, 상기 시스템 메모리는 상기 프로그램 코드를 유지하는
    장치.
  24. 제 1 ISA(Instruction Set Architecture) 유형을 인식하도록 구성된 디코드 논리부와 관련있는 제 1 코어와,
    제 2 ISA 유형을 인식하도록 구성된 디코드 논리부와 관련있는 제 2 코어와,
    상기 제 1 코어 상의 제 1 ISA 유형인 프로그램 코드의 실행을 모니터링하고, 상기 프로그램 코드의 핫 영역을 식별하기 위한 모니터 모듈 - 상기 프로그램 코드의 상기 핫 영역은 상기 제 1 코어보다 상기 제 2 코어 상에서 실행하는 것이 더 적합하다고 식별되는 영역임 - 과,
    상기 프로그램 코드의 변환된 핫 영역을 얻기 위하여, 상기 제 1 ISA 유형으로부터 상기 제 2 ISA 유형으로 상기 프로그램 코드의 핫 영역을 변환하기 위한 변환 모듈을 포함하되,
    상기 제 2 코어는 상기 제 1 코어가 상기 프로그램 코드의 핫 영역을 후속하여 만나는 것과 상기 모니터 하드웨어가 상기 프로그램 코드의 핫 영역을 식별하는 것에 응답하여 상기 프로그램 코드의 변환된 핫 영역을 실행하고, 상기 제 1 코어는 상기 제 2 코어가 상기 프로그램 코드의 변환된 핫 영역을 실행하는 것과 동시에(in parallel) 상기 프로그램 코드의 콜드 영역(cold region)을 실행하도록 구성되는
    프로세서.
  25. 제 24 항에 있어서,
    상기 모니터 모듈은 실행될 시에 상기 제 1 코어 상의 프로그램 코드의 실행을 모니터링하고 상기 프로그램 코드의 핫 영역을 식별하기 위한 모니터 코드를 포함하고, 상기 변환 모듈은 실행될 시에 상기 제 1 코어 상의 상기 프로그램 코어의 실행과 동시에(in parallel) 상기 프로그램 코드의 변환된 핫 영역을 적어도 부분적으로 얻기 위하여 상기 프로그램 코드의 핫 영역을 변환하기 위한 변환 코드를 포함하는
    프로세서.
  26. 제 24 항에 있어서,
    상기 모니터 모듈은 상기 제 1 코어 상의 상기 프로그램 코드의 실행을 모니터링하고 상기 프로그램 코드의 핫 영역을 식별하기 위한 모니터 하드웨어를 포함하는
    프로세서.
  27. 제 24 항에 있어서,
    상기 제 2 코어는, 상기 모니터 모듈이 상기 제 1 코어 상의 상기 프로그램 코드의 실행을 모니터링하고 상기 프로그램 코드의 핫 영역을 식별하는 동안에 저전력 상태에 있도록 구성되고, 상기 제 1 코어는 상기 제 2 코어가 상기 프로그램 코드의 변환된 핫 영역을 실행하는 동안에 저전력 상태에 있도록 구성된
    프로세서.
  28. 삭제
  29. 제 24 항에 있어서,
    상기 제 1 코어와 상기 제 2 코어는 동시에 최대 전력 상태로 동작하지 않도록 구성된
    프로세서.
  30. 코드를 포함하는 비일시적 컴퓨터 판독 가능 저장 매체로서,
    상기 코드는 컴퓨터에 의해 실행될 시에 상기 컴퓨터로 하여금,
    상기 컴퓨터 내 프로세서 내의 비순차 프로세서 코어 상의 프로그램 코드의 실행을 모니터링하는 동작과,
    상기 프로그램 코드의 핫 섹션을 식별하는 동작 - 상기 프로그램 코드의 상기 핫 섹션은 상기 비순차 프로세서 코어보다 공동 설계된 코어 상에서 실행하는 것이 더 적합하다고 식별되는 섹션임 - 과,
    상기 프로그램 코드의 변환된 핫 섹션을 얻기 위하여 상기 컴퓨터 내에서 상기 공동 설계된 프로세서 코어 상의 실행을 위해 상기 프로그램 코드의 상기 핫 섹션을 변환하는 동작과,
    상기 프로그램 코드의 변환된 핫 섹션을 상기 공동 설계된 프로세서 코어로 분산하는 동작과,
    상기 공동 설계된 프로세서 코어로 상기 프로그램 코어의 변환된 핫 섹션― 상기 변환된 핫 섹션은 상기 비순차 프로세서와 상기 공동 설계된 프로세서 코어에 의해 공유된 레지스터 파일에 저장됨 ― 을 실행하는 동작을 수행하게 하는
    컴퓨터 판독 가능 저장 매체.
  31. 제 30 항에 있어서,
    상기 비순차 프로세서 코어 상의 상기 프로그램 코드의 실행을 모니터링하는 상기 동작은, 상기 프로그램 코드의 섹션과 관련된 성능 메트릭을 결정하는 동작을 포함하는
    컴퓨터 판독 가능 저장 매체.
  32. 제 31 항에 있어서,
    상기 프로그램 코드의 핫 섹션을 식별하는 상기 동작은, 임계치와 비교한 상기 성능 메트릭을 기반으로 상기 프로그램 코드의 섹션이 상기 프로그램 코드의 핫 섹션임을 결정하는 동작을 포함하는
    컴퓨터 판독 가능 저장 매체.
  33. 제 30 항에 있어서,
    공동 설계된 프로세서 코어 상의 실행을 위해 상기 프로그램 코드의 핫 섹션을 변환하는 상기 동작은, 상기 비순차 프로세서 코어와 관련된 디코드 논리부에 의해 인식될 수 있는 원시(native) 인스트럭션으로부터, 상기 공동 설계된 프로세서 코어와 관련된 디코드 논리부에 의해 인식될 수 있는 공동 설계된 인스트럭션으로 상기 프로그램의 핫 섹션을 변환하는 동작을 포함하는
    컴퓨터 판독 가능 저장 매체.
  34. 제 30 항에 있어서,
    상기 프로그램 코드의 변환된 핫 섹션을 상기 공동 설계된 프로세서 코어로 분산하는 상기 동작은, 상기 프로그램 코드의 변환된 핫 섹션을, 상기 공동 설계된 프로세서 코어와 관련된 코드 캐시로 기록하는 동작을 포함하는
    컴퓨터 판독 가능 저장 매체.
  35. 코드를 포함하는 비일시적 컴퓨터 판독 가능 저장 매체로서,
    상기 코드는 컴퓨터에 의해 실행될 시에 상기 컴퓨터로 하여금,
    상기 컴퓨터 내 제 1 프로세서 코어에 대해 변환된 제 1 코드 유형을 포함한 프로그램 코드의 영역을 핫 영역으로서 식별하는 것에 응답하여, 상기 제 1 코드 유형으로부터, 상기 컴퓨터 내 제 2 프로세서 코어에 대해 변환된 제 2 코드 유형으로 변환된 상기 프로그램 코드의 영역을 포함하는 변환된 핫 영역과 상기 프로그램 코드의 영역을 연관시키는 동작 ― 상기 프로그램 코드의 상기 핫 영역은 상기 제 1 프로세서 코어보다 상기 제 2 프로세스 코어 상에서 실행하는 것이 더 적합하다고 식별되는 영역임 ― 과,
    상기 제 1 프로세서 코어로 상기 프로그램 코드를 실행하는 동안에 상기 프로그램 코드의 영역을 만나는 것에 응답하여, 상기 변환된 핫 영역과 관련있는 상기 프로그램 코드의 영역에 응답하여 상기 제 2 프로세서 코어 상에서 상기 변환된 핫 영역을 실행하는 동작 ― 상기 제 1 프로세서 코어는 상기 제 2 프로세스 코어가 상기 프로그램 코드의 변환된 핫 영역을 실행하는 것과 동시에 상기 프로그램 코드의 콜드 영역을 실행하도록 구성됨 ― 을 수행하게 하는
    컴퓨터 판독 가능 저장 매체.
  36. 제 35 항에 있어서,
    상기 제 1 프로세서 코어는 비순차 프로세서 코어를 포함하고, 상기 제 1 코드 유형은 상기 비순차 프로세서 코어에 대해 변환된 비순차 코드 유형을 포함하고, 상기 제 2 프로세서 코어는 순차 프로세서 코어를 포함하고, 상기 제 2 코드 유형은 상기 순차 프로세서 코어에 대해 변환된 순차 코드 유형을 포함하는
    컴퓨터 판독 가능 저장 매체.
  37. 제 36 항에 있어서,
    상기 비순차 프로세서 코어는 제 1 ISA를 인식하는 디코드 논리부와 관련있고, 상기 제 1 코드 유형은 상기 제 1 ISA에 대해 더 변환되고, 상기 순차 프로세서 코어는 제 2 ISA를 인식하는 디코드 논리부와 관련있고, 상기 제 2 코드 유형은 상기 제 2 ISA에 대해 더 변환되는
    컴퓨터 판독 가능 저장 매체.
  38. 제 35 항에 있어서,
    상기 프로그램 코드의 영역을 핫 코드로서 식별하는 것은, 상기 프로그램 코드의 영역이 핫 코드임을 나타내는 상기 프로그램 코드로부터의 적어도 하나의 인스트럭션을 디코딩하는 상기 제 1 프로세서 코어와 관련있는 디코드 논리부를 포함하는
    컴퓨터 판독 가능 저장 매체.
  39. 제 35 항에 있어서,
    상기 프로그램 코드의 영역을 핫 코드로서 식별하는 것은, 상기 제 1 프로세서 코어 상의 상기 프로그램 코드의 영역의 실행을 모니터링하고, 상기 제 1 프로세서 코어 상의 상기 프로그램 코드 영역의 실행을 모니터링하는 하드웨어를 기반으로 상기 프로그램 코드의 영역을 핫 코드로서 식별하기 위해 기계에 상기 하드웨어를 포함하는
    컴퓨터 판독 가능 저장 매체.
  40. 제 35 항에 있어서,
    상기 프로그램 코드의 영역을 변환된 핫 영역과 연관시키는 상기 동작은, 상기 변환된 핫 영역에 대한 참조와 관련된 상기 프로그램 코드의 영역에 대한 참조로 데이터 구조의 엔트리를 갱신하는 동작을 포함하고, 상기 프로그램 코드의 영역에 대한 참조와 상기 변환된 핫 영역에 대한 참조는 각각 주소, 인스트럭션 주소, 캐시 메모리 내 위치, 프로그램 카운터 값 및 인스트럭션 오피코드(opcode)로 구성되는 그룹으로부터 개별적으로 선택되는
    컴퓨터 판독 가능 저장 매체.
  41. 제 35 항에 있어서,
    상기 제 1 프로세서 코어로 상기 프로그램 코드를 실행하는 동안에 상기 프로그램 코드의 영역을 만나는 것과, 상기 프로그램 코드의 영역이 상기 변환된 핫 영역과 관련있는 것에 응답하여, 상기 제 2 프로세서 코어가 상기 변환된 핫 영역을 실행하는 동안에 상기 제 1 프로세서 코어를 저전력 상태로 천이시키는
    컴퓨터 판독 가능 저장 매체.
  42. 프로그램 코드의 핫 섹션을 식별하는 단계와,
    상기 프로그램 코드의 변환된 핫 섹션을 얻기 위하여 순차 프로세서 코어로 실행하기 위한 상기 프로그램 코드의 핫 섹션을 변환하는 단계와,
    비순차 프로세서 코어로 상기 프로그램 코드를 실행하는 단계와,
    상기 비순차 프로세서 코어로 상기 프로그램 코드를 실행하는 동안에 상기 프로그램 코드의 핫 섹션을 만나고 상기 프로그램 코드의 핫 섹션을 식별하는 상기 비순차 코어에 응답하여, 상기 비순차 프로세서 코어로 상기 프로그램 코드의 핫 섹션을 실행하는 대신에, 상기 순차 프로세서 코어로 상기 프로그램 코드의 변환된 핫 섹션을 실행하는 단계 ― 상기 변환된 핫 섹션은 상기 비순차 프로세서 코어와 상기 순차 프로세서 코어에 의해 공유된 레지스터 파일에 저장됨 ― 를 포함하되,
    상기 프로그램 코드의 핫 섹션은 상기 비순차 프로세서 코어보다 상기 순차 프로세서 코어 상에서 실행하는 것이 더 적합다고 식별되는 섹션인,
    방법.
  43. 제 42 항에 있어서,
    상기 프로그램 코드의 핫 섹션과 상기 프로그램 코드의 변환된 핫 섹션을 연관시키는 단계를 더 포함하는
    방법.
  44. 제 43 항에 있어서,
    상기 프로그램 코드의 핫 섹션과 상기 프로그램 코드의 변환된 핫 섹션을 연관시키는 상기 단계는, 상기 프로그램 코드의 핫 섹션에 대한 참조 및 상기 변환된 핫 섹션에 대한 참조를 코드 매핑 테이블의 엔트리에 저장하는 단계를 포함하는
    방법.
  45. 제 42 항에 있어서,
    상기 프로그램 코드의 핫 섹션을 식별하는 상기 단계는,
    상기 비순차 프로세서 코어로 상기 프로그램 코드의 섹션을 실행하는 동안에 성능 메트릭을 모니터링하는 단계와,
    임계치와 비교한 상기 성능 메트릭을 기반으로 상기 프로그램 코드의 섹션을 상기 프로그램 코드의 핫 섹션으로 식별하는 단계를 포함하는
    방법.
  46. 제 45 항에 있어서,
    상기 순차 프로세서 코어로 상기 프로그램 코드의 변환된 핫 섹션을 실행하는 동안에 상기 성능 메트릭을 모니터링하는 단계와,
    상기 순차 프로세서 코어로 상기 프로그램 코드의 변환된 핫 섹션을 실행하는 동안의 성능 메트릭이 상기 비순차 프로세서 코어로 상기 프로그램 코드의 섹션을 실행하는 동안의 성능 메트릭보다 작은 성능을 나타내는 것에 응답하여, 상기 순차 프로세서 코어로 실행되는 상기 프로그램 코드의 변환된 핫 섹션 대신에, 상기 프로그램 코드의 핫 섹션이 상기 비순차 프로세서 코어로 실행됨을 나타내는 단계를 더 포함하는
    방법.
  47. 제 42 항에 있어서,
    상기 프로그램 코드의 변환된 핫 섹션을 얻기 위하여 상기 순차 프로세서 코어로 실행하기 위한 상기 프로그램 코드의 핫 섹션을 변환하는 상기 단계는, 상기 프로그램 코드의 핫 섹션을 상기 프로그램 코드의 변환된 핫 섹션으로 변환하기 위해 이진 변환 코드를 실행하는 단계를 포함하는
    방법.
  48. 삭제
KR1020127034268A 2010-06-29 2011-06-22 제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템 KR101507702B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/826,107 US20110320766A1 (en) 2010-06-29 2010-06-29 Apparatus, method, and system for improving power, performance efficiency by coupling a first core type with a second core type
US12/826,107 2010-06-29
PCT/US2011/041429 WO2012005949A2 (en) 2010-06-29 2011-06-22 Apparatus, method, and system for improving power performance efficiency by coupling a first core type with a second core type

Publications (2)

Publication Number Publication Date
KR20130032333A KR20130032333A (ko) 2013-04-01
KR101507702B1 true KR101507702B1 (ko) 2015-04-07

Family

ID=45353677

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020127034268A KR101507702B1 (ko) 2010-06-29 2011-06-22 제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템

Country Status (8)

Country Link
US (1) US20110320766A1 (ko)
EP (1) EP2588958B1 (ko)
JP (1) JP2013532331A (ko)
KR (1) KR101507702B1 (ko)
CN (1) CN102934084B (ko)
AU (1) AU2011276656B2 (ko)
TW (1) TWI516908B (ko)
WO (1) WO2012005949A2 (ko)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8799693B2 (en) * 2011-09-20 2014-08-05 Qualcomm Incorporated Dynamic power optimization for computing devices
US9098309B2 (en) 2011-09-23 2015-08-04 Qualcomm Incorporated Power consumption optimized translation of object code partitioned for hardware component based on identified operations
WO2013162589A1 (en) * 2012-04-27 2013-10-31 Intel Corporation Migrating tasks between asymmetric computing elements of a multi-core processor
CN103514110B (zh) * 2012-06-20 2016-08-24 华为技术有限公司 非易失性存储设备的缓存管理方法及装置
US10437591B2 (en) 2013-02-26 2019-10-08 Qualcomm Incorporated Executing an operating system on processors having different instruction set architectures
US9405551B2 (en) * 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9396012B2 (en) 2013-03-14 2016-07-19 Qualcomm Incorporated Systems and methods of using a hypervisor with guest operating systems and virtual processors
US10114756B2 (en) 2013-03-14 2018-10-30 Qualcomm Incorporated Externally programmable memory management unit
US9606818B2 (en) 2013-03-14 2017-03-28 Qualcomm Incorporated Systems and methods of executing multiple hypervisors using multiple sets of processors
US10423216B2 (en) * 2013-03-26 2019-09-24 Via Technologies, Inc. Asymmetric multi-core processor with native switching mechanism
US9563432B2 (en) * 2013-04-19 2017-02-07 Nvidia Corporation Dynamic configuration of processing pipeline based on determined type of fetched instruction
KR20150019349A (ko) * 2013-08-13 2015-02-25 삼성전자주식회사 다중 쓰레드 실행 프로세서 및 이의 동작 방법
US9552205B2 (en) * 2013-09-27 2017-01-24 Intel Corporation Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions
US10503513B2 (en) * 2013-10-23 2019-12-10 Nvidia Corporation Dispatching a stored instruction in response to determining that a received instruction is of a same instruction type
KR20150050135A (ko) 2013-10-31 2015-05-08 삼성전자주식회사 복수의 이종 코어들을 포함하는 전자 시스템 및 이의 동작 방법
US9547496B2 (en) 2013-11-07 2017-01-17 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue
GB2521367A (en) * 2013-12-17 2015-06-24 Ibm Adaptable and extensible runtime and system for heterogeneous computer systems
US9395797B2 (en) 2014-07-02 2016-07-19 Freescale Semiconductor, Inc. Microcontroller with multiple power modes
US9575537B2 (en) * 2014-07-25 2017-02-21 Intel Corporation Adaptive algorithm for thermal throttling of multi-core processors with non-homogeneous performance states
US9190989B1 (en) 2014-10-07 2015-11-17 Freescale Semiconductor, Inc. Integrated circuit power management
US9411363B2 (en) * 2014-12-10 2016-08-09 Intel Corporation Synchronization in a computing device
US10387158B2 (en) * 2014-12-24 2019-08-20 Intel Corporation Systems, apparatuses, and methods for data speculation execution
US9563431B2 (en) * 2014-12-26 2017-02-07 Intel Corporation Techniques for cooperative execution between asymmetric processor cores
US9547483B1 (en) * 2015-11-06 2017-01-17 International Business Machines Corporation Feedback directed optimized compiling of optimized executable code
US10605920B2 (en) * 2016-01-13 2020-03-31 Ams Sensors Singapore Pte. Ltd. Power savings through refresh control for distance sensing devices
US10235178B2 (en) 2017-06-02 2019-03-19 Microsoft Technology Licensing, Llc Performance scaling for binary translation
CN109996185B (zh) * 2017-12-29 2022-02-15 腾讯科技(深圳)有限公司 终端的定位方法和装置、存储介质、电子装置
KR102042495B1 (ko) * 2018-11-30 2019-11-08 아주대학교산학협력단 멀티 코어 시스템의 저전력 운영을 위한 데이터 흐름 최적화 장치 및 방법
US10983796B2 (en) 2019-06-29 2021-04-20 Intel Corporation Core-to-core end “offload” instruction(s)
US11182208B2 (en) 2019-06-29 2021-11-23 Intel Corporation Core-to-core start “offload” instruction(s)
US11321144B2 (en) 2019-06-29 2022-05-03 Intel Corporation Method and apparatus for efficiently managing offload work between processing units
US11372711B2 (en) 2019-06-29 2022-06-28 Intel Corporation Apparatus and method for fault handling of an offload transaction
US11016766B2 (en) 2019-06-29 2021-05-25 Intel Corporation Apparatus and method for compiler hints for inter-core offload
US10929129B2 (en) 2019-06-29 2021-02-23 Intel Corporation Apparatus and method for modifying addresses, data, or program code associated with offloaded instructions
US11030000B2 (en) 2019-06-29 2021-06-08 Intel Corporation Core advertisement of availability
US20200409764A1 (en) * 2019-06-29 2020-12-31 Intel Corporation Core-to-core "snoop" instruction variants
US12008398B2 (en) * 2019-12-28 2024-06-11 Intel Corporation Performance monitoring in heterogeneous systems
US11669491B2 (en) * 2020-04-09 2023-06-06 Samsung Electronics Co., Ltd. Processor, system on chip including heterogeneous core, and operating methods thereof for optimizing hot functions for execution on each core of a heterogeneous processor
US20230012543A1 (en) * 2021-07-16 2023-01-19 International Business Machines Corporation Data transformation for acceleration of context migration in interactive computing notebooks

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040215987A1 (en) 2003-04-25 2004-10-28 Keith Farkas Dynamically selecting processor cores for overall power efficiency
US20070079296A1 (en) 2005-09-30 2007-04-05 Zhiyuan Li Compressing "warm" code in a dynamic binary translation environment
US20080244538A1 (en) 2007-03-26 2008-10-02 Nair Sreekumar R Multi-core processor virtualization based on dynamic binary translation
US20110066828A1 (en) 2009-04-21 2011-03-17 Andrew Wolfe Mapping of computer threads onto heterogeneous resources

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0769825B2 (ja) * 1989-02-10 1995-07-31 三菱電機株式会社 並列処理装置
JPH02301830A (ja) * 1989-05-17 1990-12-13 Mitsubishi Electric Corp 情報処理方式
JP2970553B2 (ja) * 1996-08-30 1999-11-02 日本電気株式会社 マルチスレッド実行方法
US5802338A (en) * 1996-10-01 1998-09-01 International Business Machines Corporation Method of self-parallelizing and self-parallelizing multiprocessor using the method
JP3209205B2 (ja) * 1998-04-28 2001-09-17 日本電気株式会社 プロセッサにおけるレジスタ内容の継承装置
JP3604029B2 (ja) * 1999-01-12 2004-12-22 日本電気株式会社 マルチスレッドプロセッサ
US6681387B1 (en) * 1999-12-01 2004-01-20 Board Of Trustees Of The University Of Illinois Method and apparatus for instruction execution hot spot detection and monitoring in a data processing unit
JP2001167066A (ja) * 1999-12-08 2001-06-22 Nec Corp プロセッサ間通信方法及びマルチプロセッサシステム
US20020066081A1 (en) * 2000-02-09 2002-05-30 Evelyn Duesterwald Speculative caching scheme for fast emulation through statically predicted execution traces in a caching dynamic translator
US6691306B1 (en) * 2000-12-22 2004-02-10 Lsi Logic Corporation Use of limited program space of general purpose processor for unlimited sequence of translated instructions
US7100060B2 (en) * 2002-06-26 2006-08-29 Intel Corporation Techniques for utilization of asymmetric secondary processing resources
US7802236B2 (en) * 2002-09-09 2010-09-21 The Regents Of The University Of California Method and apparatus for identifying similar regions of a program's execution
JP2006520034A (ja) * 2003-02-20 2006-08-31 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 一連のコンピュータ命令の変換
US7480899B2 (en) * 2004-03-22 2009-01-20 International Business Machines Corporation Method and apparatus for autonomic test case feedback using hardware assistance for code coverage
US7437581B2 (en) * 2004-09-28 2008-10-14 Intel Corporation Method and apparatus for varying energy per instruction according to the amount of available parallelism
US20060123397A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US20060212677A1 (en) * 2005-03-15 2006-09-21 Intel Corporation Multicore processor having active and inactive execution cores
US7734895B1 (en) * 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US7461275B2 (en) * 2005-09-30 2008-12-02 Intel Corporation Dynamic core swapping
US7506205B2 (en) * 2006-02-14 2009-03-17 Atmel Corporation Debugging system and method for use with software breakpoint
JP4439491B2 (ja) * 2006-05-24 2010-03-24 株式会社ソニー・コンピュータエンタテインメント マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法
US20080263324A1 (en) * 2006-08-10 2008-10-23 Sehat Sutardja Dynamic core switching
US8190652B2 (en) * 2007-12-06 2012-05-29 Intel Corporation Achieving coherence between dynamically optimized code and original code
JP2009199384A (ja) * 2008-02-22 2009-09-03 Nec Corp データ処理装置
US8615647B2 (en) * 2008-02-29 2013-12-24 Intel Corporation Migrating execution of thread between cores of different instruction set architecture in multi-core processor and transitioning each core to respective on / off power state
JP5547208B2 (ja) * 2008-11-24 2014-07-09 インテル コーポレイション シーケンシャル・プログラムを複数スレッドに分解し、スレッドを実行し、シーケンシャルな実行を再構成するシステム、方法および装置
US8458676B2 (en) * 2009-06-30 2013-06-04 International Business Machines Corporation Executing platform-independent code on multi-core heterogeneous processors

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040215987A1 (en) 2003-04-25 2004-10-28 Keith Farkas Dynamically selecting processor cores for overall power efficiency
US20070079296A1 (en) 2005-09-30 2007-04-05 Zhiyuan Li Compressing "warm" code in a dynamic binary translation environment
US20080244538A1 (en) 2007-03-26 2008-10-02 Nair Sreekumar R Multi-core processor virtualization based on dynamic binary translation
US20110066828A1 (en) 2009-04-21 2011-03-17 Andrew Wolfe Mapping of computer threads onto heterogeneous resources

Also Published As

Publication number Publication date
TW201209572A (en) 2012-03-01
WO2012005949A2 (en) 2012-01-12
EP2588958A4 (en) 2016-11-02
JP2013532331A (ja) 2013-08-15
KR20130032333A (ko) 2013-04-01
TWI516908B (zh) 2016-01-11
CN102934084B (zh) 2016-11-16
WO2012005949A3 (en) 2012-05-18
CN102934084A (zh) 2013-02-13
AU2011276656A1 (en) 2013-01-10
AU2011276656B2 (en) 2015-08-20
US20110320766A1 (en) 2011-12-29
EP2588958A2 (en) 2013-05-08
EP2588958B1 (en) 2019-11-06

Similar Documents

Publication Publication Date Title
KR101507702B1 (ko) 제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템
US11755099B2 (en) Dynamic core selection for heterogeneous multi-core systems

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20190227

Year of fee payment: 5