KR101600152B1 - 이기종 멀티-코어 시스템에 대한 동적 코어 선택 - Google Patents

이기종 멀티-코어 시스템에 대한 동적 코어 선택 Download PDF

Info

Publication number
KR101600152B1
KR101600152B1 KR1020137025102A KR20137025102A KR101600152B1 KR 101600152 B1 KR101600152 B1 KR 101600152B1 KR 1020137025102 A KR1020137025102 A KR 1020137025102A KR 20137025102 A KR20137025102 A KR 20137025102A KR 101600152 B1 KR101600152 B1 KR 101600152B1
Authority
KR
South Korea
Prior art keywords
core
processing core
code
performance
program code
Prior art date
Application number
KR1020137025102A
Other languages
English (en)
Other versions
KR20130141668A (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 KR20130141668A publication Critical patent/KR20130141668A/ko
Application granted granted Critical
Publication of KR101600152B1 publication Critical patent/KR101600152B1/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
    • 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
    • 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/3287Power saving characterised by the action undertaken by switching off individual functional units in the computer system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • G06F9/445Program loading or initiating
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/81Threshold
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/501Performance 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
    • 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
    • Y02D30/00Reducing energy consumption in communication networks
    • Y02D30/50Reducing energy consumption in communication networks in wire-line communication networks, e.g. low power modes or reduced link rate

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Evolutionary Biology (AREA)
  • Probability & Statistics with Applications (AREA)
  • Devices For Executing Special Programs (AREA)
  • Power Sources (AREA)
  • Microcomputers (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Error Detection And Correction (AREA)
  • Stored Programmes (AREA)

Abstract

이기종 멀티-코어 처리 시스템에서 코어를 동적으로 스위칭하는 것이 제1 처리 코어에서 프로그램 코드를 실행하는 것에 의해 수행될 수 있다. 제2 처리 코어에 대한 파워업이 신호될 수 있다. 프로그램 코드를 실행하는 제1 처리 코어의 제1 성능 척도가 수집될 수 있다. 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 나을 때, 제2 처리 코어에 대한 파워다운이 신호될 수 있고, 프로그램 코드의 실행이 제1 처리 코어에서 계속될 수 있다. 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 낫지 않을 때, 프로그램 코드의 실행이 제1 처리 코어로부터 제2 처리 코어로 스위칭될 수 있다.

Description

이기종 멀티-코어 시스템에 대한 동적 코어 선택{DYNAMIC CORE SELECTION FOR HETEROGENEOUS MULTI-CORE SYSTEMS}
본 발명은 프로세서의 분야에 관한 것으로서, 상세하게는, 전력 및 성능 효율을 최적화하는 것에 관한 것이다.
반도체 처리 및 논리 설계의 진보는 집적 회로 디바이스에 존재할 수 있는 논리의 양의 증가를 가능하게 해주었다. 그 결과, 컴퓨터 시스템 구성이 시스템에 있는 단일 또는 다중 집적 회로로부터 개별 집적 회로에 존재하는 다수의 코어, 다수의 하드웨어 스레드 및 다수의 논리 프로세서로 진화하였다. 프로세서 또는 집적 회로는 통상적으로 단일의 물리 프로세서 다이를 포함하고 있으며, 이 경우 프로세서 다이는 임의의 수의 코어, 하드웨어 스레드 또는 논리 프로세서를 포함할 수 있다.
집적 회로 상의 처리 요소 - 코어, 하드웨어 스레드 및 논리 프로세서 - 의 수가 계속 증가하는 것은 더 많은 작업이 병렬로 달성될 수 있게 해준다. 그렇지만, 모든 비순차 코어를 이용하는 프로세서는 어떤 상황 하에서 전력 비효율 및/또는 성능 비효율을 가져올 수 있다. 그 결과, 전력-성능 효율 문제에 대처하기 위해 어떤 하드웨어-소프트웨어 동시 설계 시스템이 개발되었다. 그 시스템에서, 광폭 단순 순차 프로세서가 이용될 수 있는 반면, 소프트웨어는 순차 하드웨어에서 효율적으로 실행하기 위해 프로그램을 최적화하고 스케줄링한다.
그렇지만, 하드웨어-소프트웨어 동시 설계 시스템은 통상적으로 다음과 같은 2가지 악영향과 연관되어 있다: (1) 이진 변환기(binary translator)를 이용한 코드의 변환 및/또는 최적화는 짧은 실행 작업 및 작은 응답 시간 제약조건을 갖는 어떤 응용 프로그램을 느려지게 할 수 있고[이진 변환 취약점(binary translation glass jaw)]; 및 (2) 순차 프로세서는 병렬 실행에 더 적합한 어떤 유형의 프로그램에 대해 성능이 좋지 않을 수 있다[순차 취약점(in-order glass jaw)].
본 발명이 예로서 도시되어 있고, 첨부 도면의 도면들에 의해 제한되는 것으로 보아서는 안된다.
도 1은 2개의 이기종 코어를 포함하는 프로세서의 일 실시예를 나타낸 도면.
도 2는 네이티브 코어(native core), 소프트웨어 관리 코어(software-managed core), 및 코드 분배 모듈을 포함하는 프로세서의 일 실시예를 나타낸 도면.
도 3은 최대 성능 및 최대 전력 절감을 달성하기 위해 코어들 간에 코드를 분배하는 프로세서의 일 실시예를 나타낸 도면.
도 4는 최대 성능 및 전력 절감을 달성하기 위해 비순차 코어와 순차 코어 간에 코드를 분배하는 방법에 대한 흐름도의 일 실시예를 나타낸 도면.
도 5는 최대 성능 및 전력 절감을 달성하기 위해 비순차 코어와 순차 코어 간에 코드를 분배하는 방법에 대한 흐름도의 다른 실시예를 나타낸 도면.
도 6은 본 발명의 일 실시예에 따른 코어 스위칭 동작 및 오버헤드를 나타낸 도면.
이기종 컴퓨팅 전략은 다수의 코어를 통합시키기 위한 것이고, 여기서 각각의 코어가 특정의 코드를 실행하는 데 효율적이지만 특정의 다른 코드를 실행하는 데는 비효율적이다. 낮은 전력 및 에너지 소비로 높은 성능을 달성하기 위해, 런타임 소프트웨어(SW) 및 하드웨어(HW)는 협업하여 입력 프로그램을, 상이한 코어에 적합한 코드 세그먼트로 파티셔닝하고, 이들 각각을 가장 적절한 코어에서 실행하는 반면, 다른 코어를 저전력 상태에 둔다. 이러한 시스템의 한 예는 적어도 하나의 광폭 순차 코어(wide-in-order core) 및 적어도 하나 협폭 비순차 코어(narrow out-of-order core)로 이루어져 있고, 본 발명의 실시예에 따르면, 이 이기종 시스템은 적은 에너지 및 전력을 소비하면서 개선된 비순차 코어 성능을 달성할 수 있다. 이 유형의 컴퓨팅 시스템에 대한 주된 과제는 프로그램 거동 변화를 빠르게 식별하고 런타임 시에 효율적으로 적절한 코어로 스위칭하는 것이다. 본 발명의 실시예는 동일한 프로그램에서의 상이한 코드 세그먼트의 실행을 가장 적절한 코어로 자동으로 스위칭하기 위해 런타임 소프트웨어 및/또는 하드웨어를 사용하고, 단일 스레드 프로그램(single threaded program)의 성능을 상당히 높인다.
이하의 설명에서, 본 발명에 대한 완전한 이해를 제공하기 위해 특정 유형의 프로세서 코어, 특정의 프로세서 구성, 특정의 핫 코드 영역(hot code region) 식별 알고리즘, 변환된/최적화된 코드를 저장하는 특정의 구조, 하드웨어/소프트웨어 간의 작업의 특정의 분할, 특정의 프로세서 유닛/논리 등의 예와 같은 수많은 구체적인 상세가 기재되어 있다. 그렇지만, 이들 구체적인 상세가 본 발명을 실시하는 데 이용될 필요가 없다는 것이 기술 분야의 당업자에게 명백할 것이다. 다른 경우에, 본 발명을 불필요하게 모호하게 하는 것을 피하기 위해, 특정의 대안적인 프로세서 아키텍처, 기술된 알고리즘에 대한 특정의 논리 회로/코드, 특정의 코드 구현, 특정의 이진 변환 상세, 및 마이크로프로세서의 기타 특정의 동작 상세 등의 공지된 구성요소 또는 방법이 상세히 기술되어 있지 않다.
일 실시예에서, 본 명세서에 기술된 방법 및 장치는 최대 성능 및 전력 절감을 달성하기 위해 소프트웨어 관리 코어로 네이티브 코어를 구현하기 위한 것이다. 구체적으로는, 코어들 간의 협업이 비순차 코어 및 순차 동시 설계 코어를 참조하여 주로 논의되어 있다. 그렇지만, 본 명세서에 기술된 장치 및 방법이 그것으로 제한되지 않는데, 그 이유는 이들이 이기종 코어 간의 코드의 임의의 분배로 구현될 수 있다. 예를 들어, 고유의 ISA(Instruction Set Architecture)를 구현하는 2개의 비순차 코어를 갖는 본 명세서에 기술된 코드 분배 방법 및 장치가 이용될 수 있다. 게다가, 이러한 코어들 간의 협업이 종종 하드웨어 메커니즘과 코드/소프트웨어 간에 분할되어 있는 것으로 논의되고 있다. 그렇지만, 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 혼합 또는 전용 사용이 이하에 기술되는 방법 및 장치를 구현하는 데 이용될 수 있다.
도 1을 참조하면, 다수의 코어를 포함하는 프로세서의 일 실시예가 예시되어 있다. 프로세서(100)는 마이크로프로세서, 임베디드 프로세서(embedded processor), DSP(digital signal processor), 네트워크 프로세서, 또는 코드를 실행하는 기타 디바이스 등의 임의의 프로세서를 포함한다. 프로세서(100)는, 일 실시예에서, 상이한 유형의 적어도 2개의 코어 - 코어(101 및 102) - 를 포함하고 있다. 그렇지만, 프로세서(100)는 임의의 수의 처리 요소를 포함할 수 있다.
일 실시예에서, 처리 요소는 실행 상태 또는 아키텍처 상태(architectural state) 등의 프로세서의 상태를 보유할 수 있는 스레드 유닛, 스레드 슬롯, 프로세스 유닛, 컨텍스트, 논리 프로세서(logical processor), 하드웨어 스레드, 코어 및/또는 임의의 다른 요소를 말한다. 환언하면, 처리 요소는, 일 실시예에서, 소프트웨어 스레드, 운영 체제, 응용 프로그램, 또는 기타 코드 등의 코드와 독립적으로 연관되어 있을 수 있는 임의의 하드웨어를 말한다. 물리 프로세서(physical processor)는 통상적으로, 어쩌면 임의의 수의 기타 처리 요소(코어 또는 하드웨어 스레드 등)를 포함하는 집적 회로를 말한다.
코어는 종종 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치해 있는 논리를 말하고, 여기서 각각의 독립적으로 유지되는 아키텍처 상태는 적어도 어떤 전용 실행 리소스(execution resource)와 연관되어 있다. 코어와 달리, 하드웨어 스레드는 통상적으로 독립적인 아키텍처 상태를 유지할 수 있는 집적 회로 상에 위치해 있는 임의의 논리를 말하고, 여기서 독립적으로 유지되는 아키텍처 상태는 실행 리소스에의 액세스를 공유한다. 알 수 있는 바와 같이, 어떤 리소스는 공유되고 다른 리소스는 아키텍처 상태에 전용되어 있을 때, 하드웨어 스레드라는 용어와 코어라는 용어 사이의 경계가 겹친다. 하지만, 종종 운영 체제는 코어 및 하드웨어 스레드를 개별적인 논리 프로세서로 보며, 이 경우 운영 체제는 각각의 논리 프로세서에서 동작을 개별적으로 스케줄링할 수 있다.
물리 프로세서(100)는, 도 1에 예시된 바와 같이, 2개의 코어[코어(101 및 102)]를 포함하고 있다. 여기서, 코어(101 및 102)는 이기종 코어(heterogeneous core)(즉, 상이한 구성, 기능 유닛, 및/또는 논리를 갖는 코어)인 것으로 간주된다. 일 실시예에서, 코어(101)는 비순차 프로세서 코어(out-of-order processor core)를 포함하는 반면, 코어(102)는 순차 프로세서 코어(in-order processor core)를 포함한다. 그렇지만, 코어(101 및 102)는 임의의 유형의 코어로부터 개별적으로 선택될 수 있다. 그렇지만, 더 논의하기 위해, 도 1에 예시된 기능 유닛이 이하에서 더 상세히 기술된다.
도시된 바와 같이, 코어(101)는 2개의 하드웨어 스레드(101a 및 101b)[하드웨어 스레드 슬롯(101a 및 101b)이라고도 할 수 있음]를 포함하고 있다. 이와 달리, 코어(102)는 하나의 하드웨어 스레드(102a)를 포함하고 있다. 따라서, 운영 체제 등의 소프트웨어 엔터티는, 일 실시예에서, 어쩌면 프로세서(100)를 3개의 개별적인 프로세서(즉, 3개의 소프트웨어 스레드를 동시에 실행할 수 있는 3개의 논리 프로세서 또는 처리 요소)로 본다. 다른 대안으로서, 소프트웨어 엔터티는 단지 프로세서(100)를 2개의 개별적인 프로세서 - 스레드 슬롯(101a 및 101b) - 를 가지는 것으로 볼 수 있는 반면, 기술된 코드 분배 메커니즘은 코어(102)에서의 코드의 실행을 관리한다.
제1 스레드는 아키텍처 상태 레지스터(101a)와 연관되어 있고, 제2 스레드는 아키텍처 상태 레지스터(101b)와 연관되어 있으며, 제3 스레드는 아키텍처 상태 레지스터(102a)와 연관되어 있을 수 있다. 예시된 바와 같이, 아키텍처 상태 레지스터(101a)는 아키텍처 상태 레지스터(101b)에 복제되어 있고, 따라서, 논리 프로세서(101a) 및 논리 프로세서(101b)에 대해 개별적인 아키텍처 상태/컨텍스트가 저장될 수 있다. 아키텍처 상태 레지스터(102a)는 레지스터(101a, 101b)와 동일할 수 있다. 또는 레지스터(102a)는 그 대신에 코어(102)의 아키텍처에 고유할 수 있다. 코어(101)에서, 스레드(101a 및 101b)에 대하여, 명령어 포인터 및 이름 변경 할당기 논리(rename allocator logic)(130) 내의 이름 변경 논리 등의 다른 보다 작은 리소스가 또한 복제될 수 있다. 재정렬/폐기 유닛(135) 내의 재정렬 버퍼, ITLB(instruction-translation buffer)(120), 로드/저장 버퍼, 및 큐 등의 어떤 리소스는 파티셔닝(partitioning)을 통해 공유될 수 있다. 범용 내부 레지스터, 페이지-테이블 베이스 레지스터, 하위 레벨 데이터 캐시 및 데이터 TLB(150), 실행 유닛(들)(140), 및 비순차 유닛(135)의 일부분 등의 다른 리소스는 어쩌면 완전히 공유된다.
프로세서(100)는 종종 완전히 공유되거나, 파티셔닝을 통해 공유되거나, 처리 요소에 의해/처리 요소에 전용되어 있을 수 있는 다른 리소스를 포함하고 있다. 도 1에서, 프로세서의 예시적인 논리 유닛/리소스를 갖는 순전히 예시적인 프로세서의 일 실시예가 예시되어 있다. 유의할 점은, 프로세서가 이들 기능 유닛 중 임의의 것을 포함하거나 포함하지 않을 수 있음은 물론, 도시되지 않은 임의의 다른 공지된 기능 유닛, 논리, 또는 펌웨어를 포함할 수 있다는 것이다. 예시된 바와 같이, 코어(101)는 간략화된 비순차(out-of-order, OOO) 프로세서 코어로서 예시되어 있다. OOO 코어는 실행될/취해질 분기를 예측하는 BTB(branch target buffer)(120) 및 명령어에 대한 주소 변환 엔트리(address translation entry)를 저장하는 I-TLB(instruction-translation buffer)(120)를 포함하고 있다.
코어(101)는 페치 유닛(120)에 결합되어 페치된 요소를 디코딩하는 디코딩 모듈(125)을 추가로 포함하고 있다. 페치 논리는, 일 실시예에서, 스레드 슬롯(101a, 101b)과, 각각, 연관되어 있는 개별 시퀀스를 포함하고 있다. 보통, 코어(101)는 프로세서(100)에서 실행가능한 명령어를 정의/명시하는 제1 ISA(Instruction Set Architecture)와 연관되어 있다. 여기서, 종종 제1 ISA의 일부인 머신 코드 명령어는 수행될 명령어 또는 연산을 참조/명시하는 명령어의 일부분[연산코드(opcode)라고 함]을 포함하고 있다. 디코딩 논리(125)는 그의 연산코드로부터 이들 명령어를 인식하고, 제1 ISA에 의해 정의된 대로 처리하기 위해, 디코딩된 명령어를 파이프라인으로 전달하는 회로를 포함하고 있다.
한 예에서, 할당기(allocator) 및 이름 변경기(renamer) 블록(130)은 명령어 처리 결과를 저장하는 레지스터 파일 등의 리소스를 예비하는 할당기를 포함하고 있다. 그렇지만, 스레드(101a 및 101b)는 어쩌면 비순차 실행을 할 수 있고, 이 경우, 할당기 및 이름 변경기 블록(130)은 또한 명령어 상태를 추적하는 재정렬 버퍼 등의 다른 리소스를 예비한다. 유닛(130)은 또한 프로그램/명령어 참조 레지스터(reference register)를 프로세서(100) 내부의 다른 레지스터로 이름을 변경하는 레지스터 이름 변경기(register renamer)를 포함할 수 있다. 재정렬/폐기 유닛(135)은, 비순차 실행 및 비순차로 실행된 명령어의 나중의 순차 폐기를 지원하기 위해, 앞서 언급한 재정렬 버퍼, 로드 버퍼 및 저장 버퍼 등의 구성요소를 포함하고 있다.
스케줄러 및 실행 유닛(들) 블록(140)은, 일 실시예에서, 실행 유닛 상에 명령어/연산을 스케줄링하는 스케줄러 유닛을 포함하고 있다. 예를 들어, 부동 소수점 명령어는 이용가능한 부동 소수점 실행 유닛을 갖는 실행 유닛의 포트 상에 스케줄링된다. 정보 명령어 처리 결과를 저장하기 위해 실행 유닛과 연관되어 있는 레지스터 파일이 또한 포함되어 있다. 예시적인 실행 유닛은 부동 소수점 실행 유닛, 정수 실행 유닛, 점프 실행 유닛, 로드 실행 유닛, 저장 실행 유닛, 및 기타 공지된 실행 유닛을 포함하고 있다.
하위 레벨 데이터 캐시 및 D-TLB(data address translation lookup/side buffer)(150)가 실행 유닛(들)(140)에 결합되어 있다. 데이터 캐시는 아마도 메모리 일관성 상태(memory coherency state)에 유지되는 데이터 피연산자(data operand) 등의 최근에 사용된/연산된 요소를 저장하기 위한 것이다. D-TLB는 최근의 가상/선형 대 물리 주소 변환을 저장하기 위한 것이다. 특정의 예로서, 프로세서는 물리 메모리를 복수의 가상 페이지로 쪼개는 페이지 테이블 구조(page table structure)를 포함할 수 있다.
앞서 언급한 바와 같이, 일 실시예에서, 코어(102)는 순차, 동시 설계 코어(in-order, co-designed core)를 포함한다. 그 결과, 도 1은 순차 코어의 간략화된 파이프라인을 나타낸 것이다. 이 파이프라인은 페치 유닛(121), 디코딩 유닛(126), 실행 유닛(들)(141), 및 하위 레벨 데이터 캐시(151)를 포함하고 있다. 이들 유닛은 코어(101) 내의 대응하는 유닛과 유사한 방식으로 동작할 수 있다. 그렇지만, 순차 코어에서는, 코어(101)에서와 같이 잠재적인 비순차 실행 대신에, 명령어/연산이 프로그램 순서로 실행된다. 한 예에서, 비순차 코어(101)는 네이티브 코어(native core)라고 하는 반면, 순차 코어(102)는 동시 설계 코어(co-designed core)라고 한다. 다른 대안으로서, 순차 코어(102)는 네이티브 코어이고, 비순차 코어(101)는 동시 설계 코어이다.
여기서, 코어(101 및 102)는 최근에 페치된 요소를 캐싱하기 위한 것인 상위 레벨 또는 퍼더-아웃(further-out) 캐시(110)에의 액세스를 공유한다. 유의할 점은, 상위 레벨 또는 퍼더-아웃이 캐시 레벨이 증가하는 것 또는 실행 유닛(들)으로부터 더 멀어지는 것을 말한다는 것이다. 일 실시예에서, 상위 레벨 캐시(110)는 제2 또는 제3 레벨 데이터 캐시 등의 마지막 레벨 데이터 캐시 - 프로세서(100) 상의 메모리 계층구조에서 마지막 캐시- 이다. 그렇지만, 상위 레벨 캐시(110)가 그것으로 제한되지 않는데, 그 이유는 상위 레벨 캐시가 명령어 캐시(instruction cache)와 연관되어 있거나 그를 포함할 수 있기 때문이다. 추적 캐시(trace cache) - 일종의 명령어 캐시 - 는 그 대신에 최근에 디코딩된 자취(decoded trace)를 저장하기 위해 디코더(125) 뒤에 결합되어 있을 수 있다.
도시된 구성에서, 프로세서(100)는 또한 시스템 메모리(175), 칩셋, 노스브리지(northbridge) 또는 기타 집적 회로[SOC(system on a chip) 등의 단일 집적 회로 구현을 포함함] 등의 프로세서(100) 외부에 있는 디바이스와 통신하는 링크 인터페이스 모듈(105)을 포함하고 있다. 메모리(175)는 프로세서(100)에 전용되어 있거나 시스템 내의 다른 디바이스와 공유될 수 있다. 메모리(175)의 유형의 흔한 예로는 DRAM(dynamic random access memory), SRAM(static RAM), 비휘발성 메모리(NV 메모리), 및 다른 공지된 저장 디바이스가 있다.
일 실시예에서, 코드가 성능 및 전력 절감을 최대화하는 것에 기초하여 코어(101)와 코어(102) 간에 분배된다. 예를 들어, 2개의 코어(101, 102) 중 하나에서 더 나은 성능을 내는 코드 영역이 식별된다. 그 결과, 이러한 코드 영역들 중 하나를 만날 때/검출할 때, 그 코드 섹션이 적절한 코어에 분배된다. 이러한 영역의 식별은 하드웨어, 소프트웨어 또는 이들의 조합에 의해 정적으로(프로그램 프로파일 분석 등을 통해 코드의 실행 이전에) 또는 동적으로(코드의 실행 동안) 행해질 수 있다.
동적 방식의 한 예시적인 예에서, 코어(101) 등의 하나의 프로세서 코어가 그의 성능, 전력 절감, 네이티브 ISA, 임의의 다른 공지된 처리 고려사항, 또는 이들의 조합에 기초하여 코드를 실행하는 기본 코어(default core)로서 선택될 수 있다. 이어서, 코어(101)에서 좋지 않게 실행되거나 코어(102)에서 더 낫게 실행될 기본 코드(default code)의 영역이 식별된다. 그 식별된 코드 섹션을 나중에 만날 시에, 그 코드 섹션은 실행을 위해 코어(102)에 분배된다. 유의할 점은, 코어(102)에서 그 영역을 실행하는 것이 코어(101)을 워밍업하기 위한 추론적 런어헤드 실행(run-ahead execution), 그 영역으로부터의 결과에 의존하는 다른 영역의 코어(101)에서의 실행과 그 영역의 코어(102) 상에서의 직렬 실행, 또는 코어(102) 상에서의 다른 코드의 실행과 그 영역의 병렬 동시 실행을 포함할 수 있다.
정적 방식의 한 예에서, 컴파일러 또는 사용자는 하나의 코어 또는 다른 코어에서 더 낫게 실행되는 코드 섹션을, 명령어 또는 구분(demarcation) 등을 사용하여, 식별할 수 있다. 여기서, 코어(101)는 이러한 명령어를 만날 때까지 코드를 실행한다. 코어(102)로부터의 모니터링에 응답하여 또는 코어(102)의 단독 주도(트리거링)에 의해, 식별된 코드 섹션이 이어서 만난 명령어에 기초하여 코어(102)에서 실행된다.
하나의 코어에서 또는 다른 코어에서 더 낫게 실행될 코드 섹션의 식별이 동적으로 또는 정적으로 행해지든지 간에, 일부 실시예에서, 네이티브 코드가 다른 코어에서 실행되도록 변환 및/또는 최적화된다. 예를 들어, 코어(101)가 제1 ISA 유형을 인식하는 디코딩 논리(125)를 포함하고 코어(102)가 제2 ISA 유형을 인식하는 디코딩 논리(126)를 포함하는 것으로 가정하자. 이 경우에, 제1 ISA 유형의 코드 영역이 코어(102)에서 실행되는 경우, 코드 영역은 코어(102)에서 실행되도록 제2 ISA 유형으로 변환된다. ISA 유형 간의 변환이 순전히 예시적인 것에 유의해야 한다. 그 대신에, 코어(101)에서 실행될 비순차 최적화된 코드는 순차 코어(102)에서의 실행을 위해 재최적화될 수 있다. 이 시나리오에서, 코어(102)는 코어(101)와 동일한 ISA 또는 그의 서브셋을 포함할 수 있다. 그렇지만, 코드가 단순한 광폭 순차 코어(simple, wide in-order core)에서 보다 효율적으로 실행되도록 하기 위해 코드에 대해 최적화가 수행된다.
코드를 효율적으로 분배하기 위한 코어(101)와 코어(102) 사이의 협업은 하드웨어, 펌웨어, 소프트웨어 또는 이들의 조합으로 구현될 수 있다. 협업 메커니즘의 예시적인 실시예를 설명하기 위해 코드 영역을 식별하는 동적 방식에 관한 상기 예에 대해 추가로 살펴본다. 이 예에서, 네이티브 형식(native format)으로 되어 있는 프로그램 코드가 비순차 코어(101)에서 실행되도록 최적화된다. 코드 영역 또는 프로그램 코드의 실행 동안, 코어(101)가 코드 영역을 실행하는 것과 연관되어 있는 성능을 판정하기 위해 코어(101) 및/또는 코어(102)와 연관되어 있는 모니터 하드웨어가 이용될 수 있다. 다른 대안으로서, 코드 영역을 실행할 시의 코어(101)의 성능을 판정/모니터링하기 위해, 소프트웨어, OS 코드, 마이크로코드, 또는 기타 코드 등의 코드가 코어(102)에서 실행될 수 있다. 코드 영역이 코어(102)에서 더 낫게 실행될 것으로 판정되는 경우, 코어(102)에서 실행되도록 코드 영역을 변환 및/또는 최적화하기 위해, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합이 이용될 수 있다.
그 결과, 코어(101)가 코드 영역을 다시 만날 때 - 명령어 포인터가 코드 영역을 참조하거나, 코드 영역을 식별해주는 식별자 명령어가 페치 또는 디코딩되거나, 코드 영역을 식별해주는 다른 방식이 검출될 때 -, 코드 영역의 변환된/최적화된 버전이 코어(102)에서 실행된다. 일 실시예에서, 코드 영역을 코어(102)에서 실행하는 동안, 코어(101)는 전체적인 프로그램 실행 성능을 향상시키기 위해 다른 코드 영역을 동시에 실행할 수 있다. 동시 또는 병렬 실행이 코어(101, 102)에서 개별 소프트웨어 스레드를 실행하는 것도 포함할 수 있다는 것에 유의해야 한다.
이와 달리, 스레드가 코어(101, 102)에서 파이프라이닝될 수 있다. 이 시나리오의 한 예로서, 2개의 소프트웨어 스레드 각각이 다수의 코드 스테이지[핫(hot), 콜드(cold) 등]를 포함하는 것으로 가정하자. 여기서, 제1 스레드로부터의 콜드 코드(cold code)는 코어(101)에서 실행될 수 있고, 핫 영역(hot region)을 만날 때, 변환된 핫 영역이 코어(102)에서 실행된다. 코드의 변환된 핫 영역이 코어(102)에서 실행되는 동안, 제2 스레드로부터의 콜드 코드는 코어(101)에서 실행될 수 있다. 코어(102)에서, 제1 변환된 핫 코드(hot code)의 실행이 완료될 때, 제2 소프트웨어 스레드로부터의 다른 핫 영역의 실행이 이어서 시작될 수 있다. 이 예로부터 알 수 있는 바와 같이, 코드 스테이지가 각각의 코드에서 인터리빙될 수 있고, 그 결과 파이프라인 방식 유형의 실행이 일어난다. 다른 실시예에서, 코드가 2개의 코어에 대해 순차적으로 - 코드 영역이 코어(101)에서, 식별된 코드 영역이 코어(102)에서, 그리고 이어서 다른 코드 영역이 코어(101)에서와 같이 - 실행될 수 있다.
그에 부가하여, 코드 영역이 처음에 코어(102)에서 실행되는 것으로 식별될 때에도, 그 실행의 성능이 또한 모니터링될 수 있다. 최대 성능 및 전력 절감을 달성하기 위해 어느 코어가 코드 영역을 실행하기에 가장 적합한지를 판정하는 데 양쪽 코어에서의 성능이 이어서 고려될 수 있다. 예를 들어, 코드 영역이 코어(102)에서 변환된 코드로서 실행되는 것으로 식별되지만, 코어(102)에서의 성능이 코어(101)에서의 성능 미만인 경우[또는 코어(102)에서의 성능 이득이 코어(201)에서의 실행의 전력 절감보다 크지 않는 경우], 코드는 차후에 만날 시에 코어(101)로 재분배될 수 있다.
도 1은 상이한 모듈, 유닛 및/또는 논리로 표현된 예시적인 프로세서의 추상화된 논리 뷰를 나타낸 것이다. 그렇지만, 본 명세서에 기술된 방법 및 장치를 이용하는 프로세서가 예시된 유닛을 포함할 필요가 없다는 것에 유의해야 한다. 프로세서는 도시된 유닛들 중 일부 또는 전부를 포함하지 않을 수 있다. 게다가, 이상에서의 대부분의 논의가 비순차 프로세서 코어 및 순차 프로세서 코어를 참조하고 있다. 그렇지만, 앞서 언급한 바와 같이, 2개의 프로세서 코어는 네이티브 코어 및 소프트웨어 관리 코어(software managed core) 등의 이기종 코어의 임의의 버전일 수 있다. 그에 부가하여, 도 1은 2개의 코어만을 나타내고 있지만, 프로세서는 동일한 유형의 다수의 코어는 물론, 각각이 상이한 유형인 3개 이상의 코어 등의 임의의 수의 코어를 포함할 수 있다.
도 1은 또한 인터페이스에 의해 점대점 방식으로 외부 메모리 제어기[제어기 허브(170)]에 결합되어 있는 프로세서의 일 실시예를 나타내고 있다. 그렇지만, 많은 현재의 프로세서는 다수의 코어를 상호연결시키는 링 구성을 갖는 온-프로세서 메모리 인터페이스 모듈 - 온-칩 모듈 - 은 물론, 공유 캐시 및 기타 인터페이스를 포함하기 시작하였다. 비록 예시되어 있지는 않지만, 프로세서(100)는, 일 실시예에서, 링 상호연결 결합 코어(ring interconnect coupling core), 캐시 및 메모리 제어기 구성요소를 포함하고 있다.
여기서, 물리적으로 분산된 캐시의 슬라이스를 관리하기 위해 캐싱 에이전트가 이용된다. 한 예로서, 각각의 캐시 구성요소는 동일 위치의 코어(collocated core) - 캐시의 분산된 슬라이스를 관리하기 위한, 캐시 에이전트와 연관되어 있는 코어 - 에 대한 캐시의 슬라이스를 관리하기 위한 것이다. 캐시 에이전트가 링 상호연결부에서 트래픽을 처리하고 캐시 슬라이스와 인터페이스하는 것과 같이, 코어 에이전트/구성요소는 트래픽을 처리하고 코어와 인터페이스한다. 그에 부가하여, 링 상호연결부는 MCIL(Memory Controller Interface Logic) 및/또는 기타 제어기를, 메모리 및/또는 그래픽 프로세서 등의 다른 모듈과 인터페이스하도록 결합시킬 수 있다.
도 2를 참조하면, 2개의 코어 간에 코드를 분배하는 코드 분배 모듈의 일 실시예가 예시되어 있다. 일 실시예에서, 코어(201, 202)는 이기종 코어이다. 예를 들어, 코어(201)는 원래의 프로그램 순서를 벗어나 코드를 실행하도록 구성되어 있는 비순차(OOO) 코어이고, 코어(202)는 프로그램 순서로 코드를 실행하도록 구성되어 있는 순차 코어(또는 직렬 코어)이다. 다른 코어 유형의 비전수적인 예시적 목록은 네이티브 코어, 비네이티브 코어, 소프트웨어 관리 코어, 네이티브 ISA 코어, 변환된 ISA 코어, 동시 설계 코어, 추론적 실행 코어, 및 비추론적 실행 코어를 포함한다.
일 실시예에서, 코드 분배 모듈(210)은 성능 및 전력 절감을 최대화하는 것에 기초하여 코어(201)와 코어(202) 간에 코드를 분배하기 위한 것이다. 모듈은, 본 명세서에서 사용되는 바와 같이, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 말하는 것일 수 있다. 그에 부가하여, 모듈, 유닛 또는 논리는 코어 또는 프로세서에 집중되어 있는 것은 물론, 전체에 걸쳐 분산되어 있을 수 있다. 예를 들어, 코드 분배 모듈(210)은 코어(201), 코어(202), 프로세서(200) 또는 프로세서(200)를 포함하는 시스템과 연관되어 있는 저장 장치에 보유되어 있는 마이크로코드 또는 소프트웨어 등의 분배 코드를 포함할 수 있다. 여기서, 분배 코드는, 실행될 때, 코드 분배를 수행하는 것이다. 이와 달리, 코드 분배 프로세스는 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합에 의해 관리될 수 있다.
일 실시예에서, 코드 분배 모듈(210)은 하나의 코어로부터 다른 코어로의 프로그램 코드의 실행을 동적으로 스위칭하기 위한 것이다. 프로그램 코드를 동적으로 스위칭하는 것에 대해 도 4 및 도 5를 참조하여 이하에서 보다 상세히 논의한다. 그렇지만, 이 논의 섹션에 대한 예시적인 예로서, 프로그램 코드는 이진 또는 머신 코드 등의 처리 요소에 의해 실행될 임의의 코드를 포함할 수 있다. 코드의 핫 부분은, 전력, 성능, 열, 기타 공지된 프로세서 척도(들), 또는 이들의 조합 등의 고려 사항에 기초하여, 다른 코어보다 하나의 코어에서 실행하기에 더 적합한 코드의 부분을 말하는 것일 수 있다. 여기서, 코어(201)가 프로그램 코드의 네이티브 실행을 위한 기본 코어라고 가정하면, 프로그램 코드의 핫 부분의 식별은 코어(202)에서 실행되기에 더 적합한 코드의 부분을 결정하는 것을 포함한다. 코어(201)가 OOO 코어이고 코어(202)가 순차 코어인 실시예에서, 코드의 핫 부분은 아주 반복적인 섹션의 실행을 위한 더 많은 가용 리소스를 가질 가능성이 있는, 직렬 코어(202)에서 실행되기에 더 적합한 프로그램 코드의 핫 스폿을 말하는 것일 수 있다. 한 예로서, 코드의 핫 부분은 코드의 일부분의 반복 패턴, 또는 어떤 다른 공지된 척도(명령어 카운트 또는 사이클 카운트 등)에 의해 식별된다. 종종, 반복성이 높고 예측가능한 지연 시간 패턴을 갖는 코드의 섹션이 순차 코어에서 보다 효율적으로 실행되도록 최적화될 수 있다. 본질적으로, 이 예에서, 콜드 코드(반복성이 낮음)는 네이티브, OOO 코어(101)에 분배되는 반면, 핫 코드(반복성이 높음)는 소프트웨어 관리된, 순차 코어(102)에 분배된다.
코드의 핫 부분은 정적으로, 동적으로, 또는 이들의 조합으로 식별될 수 있다. 제1 경우에, 컴파일러 또는 사용자는 프로그램 코드의 섹션이 핫 코드라고 판정할 수 있다. 여기서, 핫 코드 식별자 명령어(들)는 코드의 섹션을 핫(hot)으로[즉, 코어(101) 대신에 코어(202)에서 실행되는 것으로] 구분할 수 있다. 코어(201) 내의 디코딩 논리는, 일 실시예에서, 프로그램 코드의 핫 부분을 식별해주기 위한 핫 코드 식별자 명령어를 프로그램 코드로부터 디코딩하도록 구성되어 있다. 이러한 명령어의 페치 또는 디코딩은 코어(202)에서의 코드의 핫 섹션의 변환 및/또는 실행을 트리거링할 수 있다. 이 예에서, 코드 분배 모듈(210)은 핫 코드 검출 명령어를 검출하는 디코딩 논리를 포함하고 있다. 모듈(210)은 또한 변환/최적화는 물론, 코어(202)에서의 핫 코드의 실행을 수행하는 다른 하드웨어 및/또는 소프트웨어를 포함할 수 있다. 다른 대안으로서, 핫 코드 섹션은 코어(202)에서 실행하기 위해 사전 최적화/변환될 수 있다.
다른 예에서, 코드 분배 모듈(210)은 프로그램 코드에서의 핫 스폿/영역을 동적으로(실행 동안) 식별한다. 일 실시예에서, 코어(201) 및/또는 코어(202)에 포함된 하드웨어는 코어(201) 등의 코어에서의 프로그램 코드의 실행을 프로파일링하는 데 이용된다. 프로파일의 특성 - 실행과 연관되어 있는 전력 및 성능 척도 - 에 기초하여, 프로그램 코드의 영역이 핫 코드로서 식별될 수 있다. 하드웨어의 동작과 유사하게, 모니터링 코드는 다른 코어[코어(201) 등]에서 실행되는 프로그램 코드의 모니터링/프로파일링을 수행하는 하나의 코어[코어(202) 등]에서 실행될 수 있다. 이러한 모니터링 코드가 코어 내의, 프로세서(200) 내의 저장 구조에 보유되어 있는, 또는 프로세서(200)를 포함하는 시스템에 보유되어 있는 코드일 수 있다는 것에 유의해야 한다. 예를 들어, 모니터링 코드는 코어(201), 코어(202) 또는 프로세서(200)의 저장 구조에 보유되어 있는 마이크로코드, 또는 다른 코드일 수 있다. 모니터링 코드는 종래의 실행 유닛은 물론, 프로세서(200) 상의 다른 펌웨어 또는 논리에 의해 실행될 수 있다.
또 다른 예로서, 핫 코드의 정적 식별이 힌트로 된다. 프로그램 코드 실행의 동적 프로파일링은 코드의 영역의 핫으로서의 정적 식별을 무시할 수 있고, 이 유형의 정적 식별은, 종종, 동적 프로파일링이 어느 코어가 코드 분배에 적절한지를 결정하는 데 고려할 수 있는 컴파일러 또는 사용자 힌트라고 한다. 더욱이, 동적 프로파일링의 속성인 것처럼, 코드의 영역을 핫으로서 식별하는 것은 그 코드 섹션을 항상 핫으로서 식별되는 것으로 한정하지 않는다. 예를 들어, 프로그램 코드가 비순차 코어(201)에서 실행되고 있는 것으로 가정하자. 코어(202) 상에시 실행 중인 모니터링 코드는 코어(201)가 프로그램 코드의 섹션을 실행하는 것의 성능 레벨을 모니터링한다. 구현에 기초하여, 코어(201)에서의 성능이 코어(202)에서 수행되는 것보다 충분히 낮고 및/또는 코어(201)에서의 코드 섹션의 반복 패턴이 높은 것 - 코어 천이 오버헤드(core transition overhead)를 감추기 위해 예측될 정도로 충분한 것 - 으로 판정되는 경우, 코드 섹션은 핫으로서 식별된다. 변환 및/또는 최적화 후에, 코드 섹션의 변환된 버전이 코어(202)에서 실행된다. 코어(201)에서의 실행의 모니터링과 유사하게, 코드의 변환된 버전의 실행이 코어(202)에서, 성능 모니터링 코드의 실행 등을 통해, 모니터링될 수 있다. 성능이 코어(201)에서보다 코어(202)에서 더 낮은 경우, 코드 섹션을 핫으로서 식별하는 것이 동적으로 반전될 수 있다(핫 코드의 섹션이 콜드 코드로 재표시될 수 있다).
코드의 섹션, 스폿 또는 영역이 핫으로서 식별되면, 코드 분배 모듈(210)은, 일 실시예에서, 최적화된/변환된 핫 코드를 획득하기 위해 코드의 핫 섹션을 최적화 및/또는 변환한다. 일 실시예에서, 이진 변환 코드 등의 변환 및/또는 최적화 코드는 코어(202)의 저장 논리에 보유되어 있다. 한 예로서, 이진 변환 코드는 코어(202)에 보유되어 있는 마이크로코드의 일부일 수 있다. 변환/최적화 코드는, 실행될 때, 코어(202)에서의 실행을 위해 코드 섹션을 변환/최적화한다. 일 실시예에서, 코어(201, 202)는 동일한 ISA 또는 그의 서브셋을 인식할 수 있고, 이 경우 변환/최적화는 코어(202)에서 보다 효율적으로 실행하기 위해 코드를 단순히 변환/최적화하는 것이다. 다른 실시예에서, 코어(201, 202)는 상이한 ISA를 인식하고, 이 경우 변환은 코드 영역을 코어(201)에 의해 인식가능한 하나의 ISA로부터 코어(202)에 의해 인식가능한 다른 ISA로 변환하는 것을 포함한다. 변환/최적화가 변환/최적화 코드의 실행을 참조하여 논의되어 있지만, 심지어 독점적 하드웨어를 통해 코드를 변환/최적화하는 임의의 공지된 메커니즘이 이용될 수 있다.
일 실시예에서, 코어(201)에서 핫 코드의 식별된 섹션을 만날 시에, 핫 코드(그의 변환된 버전)는 코어(202)에서 실행된다. 핫 코드 영역을 만날 때를 판정하는 임의의 공지된 트리거가 이용될 수 있다. 몇가지 상위 레벨 예로는 코드 영역과 연관되어 있는 명령어 주소를 만나는 것/참조하는 것, 코드 섹션을 핫 코드로서 식별해주는 명령어를 페치/디코딩/스케줄링/실행하는 것, 핫 코드의 변환된 버전이 다른 코어에서 실행되어야 한다는 것을 나타내는 명령어, 핫 코드 영역을 만났다는 것을 나타내는 모니터로부터의 외부 트리거 등을 페치/디코딩/스케줄링/실행하는 것이 있다.
한 예시적인 예로서, 코드 분배 모듈(210)은 하드웨어, 소프트웨어 또는 이들의 조합으로 구현되는 모니터 모듈을 포함하고 있다. 모니터 모듈이 코드의 핫 영역을 식별하거나 핫 영역을 변환된 영역으로 변환할 때, 모니터 모듈은 코드의 핫 영역과 연관되어 있는 명령어 주소를 등록한다. 이 등록은 명령어 주소를 코드의 변환된 영역의 위치와 연관시키는 것을 포함할 수 있다. 이어서, 명령어 포인터(프로그램 카운터)가 차후에 명령어 주소를 참조할 때, 등록된 명령어 주소로부터 코드의 핫 영역을 만난 것으로 판정된다. 여기서 만남 이벤트(encounter event)를 처리하는 동기 또는 비동기 인터럽트 스타일 등의 임의의 형태의 검출이 사용될 수 있다는 것에 유의해야 한다. 그에 부가하여, 하드웨어, 마이크로코드 및/또는 펌웨어가 핫 코드 섹션의 만남을 인터럽트와 유사한 처리 없이 - 즉, 트리거 이벤트가 핸들러에 의해 서비스되지 않음 - 직접 처리할 수 있다. 코어(101 및 102)가 핫 코드로서 등록되어 있는 주소를 식별하기 위해 특정의 하드웨어 구조(매핑 구조 등)를 공유할 수 있다는 것에 유의해야 한다.
코어(201)에서 핫 코드 섹션을 만난 것에 응답하여, 핫 코드 섹션의 변환된 및/또는 최적화된 버전이 코어(202)에서 실행된다. 코어(201)에서 핫 코드 섹션을 어떻게 식별하고 만났는지에 관계없이, 다른 코어에서 코드의 실행을 가능하게 해주는 임의의 공지된 방법이 이용될 수 있다. 일 실시예에서, 이러한 실행을 가능하게 해주기 위해 협업 모듈이 이용된다. 예를 들어, 코어(201, 202)는 특정의 하드웨어 구조를 공유할 수 있고 및/또는 정보를 공유하기 위한 통신 채널을 포함할 수 있다. 한 예로서, 코어(101, 102)는 데이터 캐시를 공유할 수 있고, 따라서 실행이 코어(201)로부터 코어(202)로 마이그레이션될 때, 데이터는 물리적으로 이동되지 않고 오히려 공유 캐시에 이미 존재하고 있다. 이와 유사하게, 일 실시예에서, 쉐도우 레지스터 파일(shadow register file) 등의 레지스터 파일이 코어(201)와 코어(202) 간에 공유되고, 따라서 레지스터 상태(컨텍스트)가 하나의 코어로부터 다른 코어로 마이그레이션될 필요가 없다. 대안으로서, 레지스터 파일을 공유하는 대신에, 컨텍스트 또는 그의 일부분을 하나의 코어로부터 다른 코어로 물리적으로 마이그레이션하기 위해 고속 상호연결부가 사용될 수 있다. 그에 부가하여, 전송이 빈번하지 않은 경우, 이러한 전송을 수행하기 위해 소프트웨어가 이용될 수 있다.
한 예로서, 코어(202)에서의 핫 코드 섹션의 실행을 지원하기 위해, 핫 코드 섹션에의 입력 값은 코어(201)로부터 코어(202)로 전송된다. 실행 후에, 출력 값이 이어서 다시 코어(201)로 전송된다. 일 실시예에서, 코드 섹션으로부터의 식별된 입력/출력 값만이 전송된다[즉, 부분 컨텍스트 스위칭(partial context switch)]. 이러한 입력 값이 사용자(소프트웨어/컴파일러)에 의해 및/또는 하드웨어/펌웨어 알고리즘에 의해 식별될 수 있다. 여기서, 직접 액세스 하드웨어는 코어(201) 내의 레지스터, 버퍼, 또는 다른 구조로부터 입력 값을 판독하고 이를 코어(202)에 기입하도록 구성되어 있을 수 있다. 이와 반대로, 코어(202)로부터 값을 판독하고 이를 코어(201)에 기입하기 위해 동일한 또는 상이한 하드웨어가 이용될 수 있다. 그렇지만, 이러한 값을 식별하는 것이 너무 번거롭게 되는 경우, 코어(201)와 코어(202) 사이에서 값을 제공하기 위해 전체 컨텍스트 스위칭, 복제 또는 공유가 수행될 수 있다.
그 다음에 도 3을 참조하면, 최대 성능 및 전력 절감을 달성하기 위해 코어들 간에 코드를 분배하는 프로세서의 일 실시예가 도시되어 있다. 상기와 같이, 프로세서(300)는 2개의 프로세서 코어를 포함하고 있으며, 이들 각각은 상이한 코어 유형을 가진다. 한 예로서, 코어(301)은 네이티브, 비순차(OOO) 프로세서 코어인 반면, 코어(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)을 식별하는 모니터 코드(monitor code) 등의 소프트웨어를 포함하고 있다. 예시적인 예로서, 프로세서(300)는, 실행될 때, 모니터링이 행해지게 하는 코드, 마이크로코드, 또는 머신 코드를 보유하기 위해 ROM(Read Only Memory) 구조, 프로그램가능 논리 등과 같은 저장 구조를 포함하고 있다. 그렇지만, 모니터 코드는 코어(301, 302)와 연관되어 있는 임의의 머신 판독가능 매체에 저장될 수 있다. 실행이라는 용어의 사용이 종래의 실행 유닛에 의한 실행으로 제한되지 않고 그 대신에 프로세서(300)와 연관되어 있는 다른 하드웨어 또는 프로그램가능 논리에 의한 실행 - 펌웨어에 의한 마이크로코드의 실행 등 - 을 말하는 것일 수 있다는 것에 유의해야 한다. 여기서, 실행된 모니터 코드는 하드웨어에 의해 측정가능한 반복, 전력 및 성능 척도의 동일한 모니터링을 수행할 수 있다.
한 예로서, 모니터링 하드웨어 및/또는 코드는 프로그램 코드의 코드 섹션에 대한 반복 패턴을 추적/결정한다. 간단한 예로서, 데이터 구조는 코드 섹션[코드 영역(327)]에 대한 참조(명령어 주소 등)를 명령어 주소/코드 섹션이 코어(301)에서 실행된 횟수의 카운트와 연관시킨다. 카운트가 절대 카운트(총 카운트) 또는 시간 카운트(어떤 양의 시간에 걸친 카운트)와 연관될 수 있다는 것에 유의해야 한다.
일 실시예에서, 모니터 모듈(305)은 프로그램 코드(325)의 핫 부분(327)을 식별/검출하도록 구성되어 있다. 한 예에서, 모니터 모듈(305)은 OOO 프로세서 코어(301)에서의 실행 동안 프로그램 코드(325)의 핫 부분(327)에 대한 하나 이상의 성능 척도(들)를 측정하기 위한 것이다. 모듈(305)은 OOO 프로세서 코어에서의 성능 척도(들)가 임계값 미만인 것에 응답하여 프로그램 코드(325)의 핫 부분(327)을 식별하기 위한 것이다. 성능 척도의 예의 비전수적인 예시적 목록은 명령어 폐기 푸시아웃, 실행된 명령어의 수, 코드 영역을 실행하는 시간의 양, 코드 영역을 만난/실행한 횟수, 코드 영역의 실행 동안 소비된 전력의 양, 코드 영역의 실행 동안 상이한 전력 상태에서 소비된 시간의 양, 코드 세그먼트의 실행 동안 열 밀도(thermal density) 등을 포함한다.
상기 예들 중 하나를 사용하여, OOO 코어(301)가 프로그램 코드(325)를 실행하고 있는 것으로 가정하자. 프로그램 코드(325)의 영역이 코어(301)에서 실행되는 횟수를 결정하기 위해 모니터 코드가 실행되고 있다. 그 카운트가 임계값을 만족시키거나 초과할 때, 일 실시예에서, 모니터 모듈(305)은 영역(327)이 핫 코드인 것으로 식별/판정한다. 3의 임계값이 사용되는 경우, 코어(302)에서 실행 중인 모니터 코드가 핫 영역(327)이 코어(301)에서 세번째로 재실행되고 있는 것을 검출할 때, 영역(327)은 코드의 핫 영역으로서 식별된다. 임의의 측정된 성능 척도에 대해 유사한 프로세스 - 카운트, 임계값과의 비교, 및 식별 - 가 이용될 수 있는지를 알아보기 위해 반복 패턴을 결정하는 특정의 예가 추정(extrapolate)될 수 있다. 게다가, 성능 척도를 결정하는 것이 간단한 카운트로 제한되지 않고, 코어, 프로세서, 또는 컴퓨터 시스템에서 실행 또는 전력 절감 성능을 판정하는 임의의 공지된 알고리즘을 포함할 수 있다.
그렇지만, 프로그램 코드(325) 내에서 핫 영역(327)을 식별하는 것은 동적 성능 모니터링으로 제한되지 않는다. 그 대신에, 순차 코어(302)에서 실행하기에 더 적합할 가능성이 있는 코드 섹션을 판정하기 위해 컴파일러 또는 정적 프로그램 분석이 이용될 수 있다. 예를 들어, 프로그램 분석이 핫 영역(327)이 여러번 재실행될 가능성이 있음을 보여주는 것으로 가정하자. 이 발견에 응답하여, 컴파일러 또는 사용자는 코드의 섹션을 핫 코드로서 식별해주는 명령어 또는 구분을 삽입할 수 있다. 따라서, 코어(301)의 디코더가 이러한 명령어를 만날 때, 디코더는 그 영역(327)이 코어(302)에서 실행되어야 하는 핫 코드인 것으로 인식한다. 일부 실시예에서, 사용자가 면밀한 프로그램 분석 없이 프로그램에 대한 그의 지식에 기초하여 이러한 코드 영역을 식별할 수 있다는 것에 유의해야 한다.
일 실시예에서, 영역(327)을 핫으로서 식별한 것에 응답하여, 최적화된 핫 코드(304)를 획득하기 위해, 코드(327)가 최적화/변환 모듈(310)에 의해 최적화 또는 변환된다. 모니터 모듈(305)의 동작과 유사하게, 최적화 모듈(310)은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구현될 수 있다. 예를 들어, 변환 및/또는 최적화 코드는 코어(302), 코어(301) 또는 프로세서(300)와 연관되어 있는 구조에 저장되어 있을 수 있다. 예시를 위해, 이진 변환 코드가 코어(302)와 연관되어 있는 펌웨어에 저장되어 있다. 핫 영역(327)을 코어(301)에 대한 네이티브 형식으로부터 코어(302)에 대한 형식으로 변환하기 위해 이진 변환 코드가 실행된다. ISA들 또는 기타 형식들 간에 변환이 있을 수 있는 반면, 최적화가 실행을 위해 코드를 최적화하는 임의의 공지된 방법 - OOO 코어(301)에서의 병렬 실행으로부터 코어(302)에서의 직렬 실행으로는 물론 그 반대로 코드를 최적화하는 공지된 기법 등 - 을 포함할 수 있다는 것에 유의해야 한다.
그렇지만, 펌웨어에서 이진 변환 코드를 사용하는 것은 순전히 예시적인 것인데, 그 이유는 임의의 변환 코드 또는 최적화 코드가 컴퓨터 시스템의 어디에라도 - 코어(302)에 있는 마이크로코드 또는 시스템 메모리에 있는 정규의 프로그램 코드 등 - 보유되어 있을 수 있기 때문이다. 핫 영역(327)을 변환 또는 최적화하여 최적화된 핫 코드(304)를 획득하기 위해 최적화 코드가 임의의 방식으로 실행될 수 있다. 사실, 현재의 소프트웨어 관리 프로세서에서 코드를 변환하는 공지된 방법 및 장치 등, 코어에 대한 코드를 변환 또는 최적화하는 임의의 공지된 방법 또는 장치가 사용될 수 있다.
소프트웨어, 펌웨어, 하드웨어 또는 이들의 조합이 사용되든 간에, 변환이 정적으로 또는 동적으로 수행될 수 있다. 사실, 모니터링이 런타임 동안 동적으로 또는 실행 이전에 정적으로 행해질 수 있는 것과 마찬가지로, 변환 및 최적화가 이와 유사하게 수행될 수 있다. 컴파일러 또는 사용자가 핫 영역(327)을 식별하는 예에서는, 최적화 및 변환이 그 시점에서(실행 이전에) 행해질 수 있다. 여기서, 핫 코드 영역(327)을 식별하는 것 및 최적화된/변환된 코드(304)의 위치를 명시하는 것 둘 다를 위해, 핫 코드 식별자 명령어가 이용될 수 있다. 그렇지만, 섹션(327)이 실행 이전에 또는 실행 동안 핫 코드로서 식별되든 간에, 일부 실시예에서, 최적화 및 변환이 동적으로(런타임 동안) 행해진다.
일 실시예에서, 핫 영역(327)이 다른 실행과 병렬로 최적화/변환된다. 한 예에서, 코어(302)는, 코어(301)가 영역(327)을 실행하는 것과 병렬로, 최적화 코드를 실행하기 시작한다. 여기서, 모니터 모듈(305)은 코어(301)에서 핫 코드 영역(327)의 실행을 검출하고, 따라서 코어(302)에서 최적화가 개시된다. 핫 영역(327)으로부터의 추가의 명령어가 코어(301)에서 여전히 실행되고 있는 동안, 코어(302)는 최적화를 시작한다. 그 결과, 코어(302)는 본질적으로, 코어(301)에서의 핫 코드(327)의 실행과 병렬로, 핫 코드(327)를 최적화하고 있다. 다른 예에서, 코어(301)는, 코어(302)가 핫 코드(327)을 최적화하는 것과 병렬로, 프로그램 코드(325)의 다른 섹션 또는 다른 상호 배타적인 코드를 실행한다. 다른 실시예에서, 핫 영역(327)의 최적화가 직렬로 행해진다. 예를 들어, 코어(301)는 핫 영역(327)을 실행하고, 이어서 코어(301 또는 302)는 핫 코드 영역(327)을 최적화한다.
일 실시예에서, 코드(327)는 그의 원래의 메모리 장소에 저장되고 코어(302)에 의해 동작 중에 변환된다. 그렇지만, 대부분의 경우에, 실행 이전에 전체 코드 섹션을 변환/최적화하는 것이 더 효율적이다. 그 결과, 최적화/변환 모듈(310)이 코어(302) 등의 코어에 대한 코드를 최적화한 후에, 최적화된 핫 코드(304)가 다른 곳에 저장된다. 최적화된 핫 코드(304)의 다른 장소는 메모리 내의 다른 장소 - 홈, 시스템 메모리 장소 등 - 일 수 있다. 그렇지만, 핫 코드(327)가 종종 빈번한 실행과 연관되어 있기 때문에, 최적화된 버전(304)을 코어(302)에 보다 가까이 보유하는 것이 유리할 가능성이 있다. 따라서, 예시된 실시예에서, 코어(303)는 최적화된 핫 코드(304)를 보유하는 코드 캐시(303)를 포함한다. 코드 캐시(303)가 코어(302)에 있는 별도의 캐시 구조; 코어(302)에 있는 공유 명령어 또는 데이터 캐시 등의 공유 캐시 구조; 또는 코어(302)와 연관되어 있는 다른 일반 저장 구조일 수 있다는 것에 유의해야 한다.
모니터 모듈(305)에 대한 논의를 다시 참조하면, 핫 코드 영역(327)을 만나는 일 실시예는 프로그램 카운터가 코드 섹션과 연관되어 있는 명령어 주소를 참조하는 것을 포함한다. 도시된 바와 같이, 매핑 모듈(315)은 최적화된 핫 코드 참조(317)와 연관되어 있는, 명령어 주소 등의 코드 영역 참조를 보유하기 위한 것이다. 본질적으로, 매핑 모듈(315)의 엔트리(entry)는 핫 코드 영역(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)를 그의 최적화된 버전과 연관시키는 데 이용될 수 있다.
비록 구체적으로 예시되어 있지는 않지만, 모니터 모듈(305)의 일부분은, 매핑 모듈(315)과 함께, 코어(301) 상의 네이티브 코드(327) 대신에, 최적화된 핫 코드(304)가 코어(302)에서 실행되어야 하는 것을 나타내는 트리거 모듈을 형성할 수 있다. 한 예로서, 코어(301)의 프로그램 카운터가 그 다음 명령어 주소로 이동될 때, 트리거 하드웨어는 그 주소를 매핑 하드웨어 테이블(315)에 저장되어 있는 참조와 대조하여 검사한다. 여기서, 프로그램 카운터가 필드(316)에 보유되어 있는 코드 영역(327)을 참조하는 명령어 주소를 가리키는 것으로 가정한다. 그러면, 트리거 하드웨어는, 매핑 테이블(315)에서의 엔트리에 기초하여, 코드 영역(327)에 대한 최적화된 코드 영역(304)이 존재한다는 것을 나타낸다. 그 결과, 코어(301)에서의 코드 영역(327)의 실행이 생략될 수 있는데, 그 이유는 최저화된 버전이 이미 존재하고 코어(302)에서 실행되어야 하기 때문이다.
일 실시예에서, 코어(301)는 코어(302)가 최적화된 코어의 실행을 완료할 때까지 실행을 중지한다(중단하거나 저전력 상태로 천이함). 그렇지만, 이것은 프로세서(300)의 처리 용량을 완전히 이용하지 않을 수 있다. 따라서, 다른 실시예에서, 코어(301)는, 최적화된 핫 코드(304)가 코어(302)에서 실행되고 있는 동안, 다른 소프트웨어 스레드[프로그램 코드(325) 이외의 코드]의 실행을 인터리빙한다. 또 다른 예로서, 코어(301)는 본질적으로 런어헤드 헬퍼 실행 스레드(run-ahead helper thread of execution)를 수행하는 프로그램 코드(325)의 다른 부분을 추론적으로 실행할 수 있거나, 코드 영역(327)에 의존하지 않는 코드(325)의 다른 부분을 비순차로 실행한다.
협업 모듈(320)은, 일 실시예에서, 코어(301)와 코어(302) 간의 협업 기능을 제공한다. 가장 간단한 예로서, 협업 모듈(320)은 정보를 전달하기 위해 코어(301)와 코어(302) 간의 상호연결부를 포함하고 있다. 그렇지만, 다른 실시예에서, 협업 모듈은, 상기한 협업을 용이하게 해주기 위해, 개별 코어에 전용되어 있거나 그들 간에 공유될 수 있는 다른 하드웨어를 포함하고 있다. 예를 들어, 코어(302)는 코어(301)의 쉐도우 레지스터 파일을 공유할 수 있고, 따라서 최적화된 핫 코드(304)가 코어(302)에서 실행될 때, 코어(301)로부터 코어(302)로의 레지스터 상태의 완전한 컨텍스트 스위칭이 수행될 필요가 없다. 그 대신에, 코어(302)는 그 시나리오에서 쉐도우 레지스터 파일에 직접 액세스할 수 있다. 그렇지만, 협업 모듈은 공유 구조 및/또는 상호연결부로만 제한되지 않는다. 사실, 협업 모듈(320)은 양쪽 코어(301, 302)에서 레지스터, 저장 구조, 및 버퍼에의 직접 판독 및/또는 기입 액세스를 제공하기 위해 하드웨어, 펌웨어, 소프트웨어, 또는 이들의 조합을 포함할 수 있다. 그 결과, 협업 모듈(320)은, 일 실시예에서, 최적화된 핫 코드의 실행에 필요한 데이터/레지스터 값을 코어(301)로부터 코어(302)로 전송할 수 있다. 협업 모듈(320)은 또한 코어(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)에 저장될 때, 코드 영역(327)을 최적화된 버전(304)과 연관시키기 위해 매핑 테이블(315)에서의 엔트리가 생성된다. 코어(301)가 그 다음에 필드(316)에서의 참조와 일치하는 참조를 만날 때, 코어(301)에서 코드 영역(327)을 실행하는 대신에, 코어(302)에서 최적화된 코드(304)를 실행하는 것이 트리거링된다. 협업 모듈이, 전송, 공유 또는 컨텍스트 스위칭을 통해, 적절한 값을 코어(301)로부터 코어(302)에 제공한다는 것에 유의해야 한다. 코어(302)가 최적화된 핫 코드(304)를 실행하는 동안, 동일한 성능 척도 - 명령어 실행 카운트 - 가 모니터 모듈(305)에 의해 추적된다. 명령어 실행 카운트가 코드 영역(327)이 코어(301)에서 실행된 것보다 작은 경우, 핫 코드로서 식별되는 영역(327)의 현재 상태가 장래에 계속된다. 그렇지만, 명령어 실행 카운트가 코어(302)에서 더 길거나 상당한 전력 증가가 검출되는 경우, 앞서 기술된 바와 같이, 영역(327)의 핫 코드로서의 식별이 뒤바뀔 수 있다.
코어(301)와 코어(302) 사이의 통신을 제공하는 것에 부가하여, 협업 모듈(320)은 또한 상이한 유형의 다수의 코어를 관리하는 다른 특징을 포함할 수 있다. 제1 예로서, 전력 관리자는 코어(301 및 302) 둘 다가 동시에 최대 전력으로 동작하지 않도록 하기 위해 전력 알고리즘을 구현한다. 그렇지만, 이 예는 순전히 예시적인 것이다. 다른 전력 알고리즘은 이러한 최대 동작을 가능하게 해줄 수 있다. 다른 전력 고려 사항으로서, 코어(302)는 코어(301)에서의 실행의 모니터링 동안 최대 미만의 전력 상태(저전력 상태)에 존재할 수 있다. 예를 들어, 코어(301)가 그 자신의 모니터링을 수행하는 메커니즘과 연관되어 있을 때, 코어(302)는 실행될 코드의 최적화된 버전이 있을 때까지 완전히 파워업될 필요가 없다. 그 결과, 실행을 위해 필요할 때까지 코어(302)를 오프시킴으로써 전력이 절감될 가능성이 있다. 이와 반대로, 코어(302)가 최적화된 핫 코드를 실행하는 동안, 코어(301)는 파워다운될 수 있다(ACPI 저전력 상태 또는 슬립 상태 등의 최대 미만의 전력 상태에 둠).
코어 간에 실행을 동적으로 스위칭하는 것은 다음과 같은 2가지 난제를 수반한다: 1) 주어진 코드 세그먼트에 대해 가장 적절한 코어를 적시에 정확하게 예측하는 것, 및 2) 코어들 사이에서 실행을 효율적으로 마이그레이션하는 것.
일 실시예에서, 제1 코어에서의 프로그램 실행이 런타임 소프트웨어 및/또는 하드웨어에 의해(예컨대, 코드 영역에서의 분석된 ILP에 기초하여) 식별될 수 있고, 이어서, 프로그램 코드의 실행이 제2 코어로 스위칭되어야만 할 때를 예측하기 위해, 현재의 코어의 성능 척도 및/또는 통계가 모니터 모듈(305)에 의해 계속 수집될 수 있다. 이 방식은 도 4에 나타내어져 있다. 이 방식이 다른 코어의 성능을 예측하기 위해 단일 코어로부터의 데이터를 사용하기 때문에, 일 실시예에서, 이 방식은 "단일 코어 예측(single-core-prediction)" 알고리즘이라고 한다.
도 4를 참조하면, 최대 성능 및 전력 절감을 달성하기 위해 제1 유형의 제1 코어(비순차 코어 등)와 제2 유형의 제2 코어(순차 코어 등) 간에 코드를 분배하는 방법(400)에 대한 흐름도의 일 실시예가 예시되어 있다. 도 4의 흐름이 실질적으로 직렬 방식으로 예시되어 있지만, 이 흐름이 다른 순서로는 물론 병렬로 수행될 수 있다. 게다가, 각각의 흐름이 하드웨어, 펌웨어를 이용하여, 또는 프로그램 코드의 실행을 통해 수행될 수 있다.
프로세서에서 비순차(OOO) 프로세서 코어에서의 프로그램 코드의 실행이 모니터링된다. 프로그램 코드라고 하는 것은, 일 실시예에서, (1) 다른 프로그램 코드를 컴파일하기 위해, 동적으로 또는 정적으로, 컴파일러 프로그램(들)을 실행하는 것; (2) 운영 체제, 하이퍼바이저, 응용 프로그램 코드, 또는 기타 소프트웨어 프로그램 등의 메인 프로그램을 실행하는 것; (3) 메인 프로그램 코드와 연관되어 있는 라이브러리 등의 다른 프로그램 코드를 실행하는 것; (4) 메인 프로그램과 직접 연관되어 있지 않을 수 있는 헬퍼 스레드 또는 다른 작업 등의 다른 프로그램 코드를 실행하는 것; 또는 (5) 이들의 조합을 말한다.
컴파일러는, 종종, 소스 텍스트/코드를 타겟 텍스트/코드로 변환하는 프로그램 또는 한 세트의 프로그램을 포함한다. 보통, 컴파일러에 의한 프로그램/응용 프로그램 코드의 컴파일은 상위 레벨 프로그래밍 언어 코드를 하위 레벨 머신 또는 어셈블리 언어 코드로 변환하기 위해 다수의 단계(phase) 및 패스(pass)에서 행해진다. 그렇지만, 간단한 컴파일에 대해서는 단일 패스 컴파일러가 여전히 이용될 수 있다. 컴파일러는 임의의 공지된 컴파일 기법을 이용하고, 어휘 분석, 전처리, 파싱, 의미 분석, 코드 발생, 코드 변환 및 코드 최적화 등의 임의의 공지된 컴파일 동작을 수행할 수 있다.
대형 컴파일러는 종종 다수의 단계를 포함하지만, 흔히 이들 단계는 다음과 같은 2개의 일반 단계 내에 포함되어 있다: (1) 일반적으로 구문 처리, 의미 처리 및 어떤 변환/최적화가 일어날 수 있는 프런트 엔드(front-end), 및 (2) 일반적으로 분석, 변환, 최적화 및 코드 발생이 일어나는 백엔드(back-end). 어떤 컴파일러는 컴파일러의 프런트 엔드와 백엔드의 구분을 모호함을 나타내는 미들 엔드(middle end)를 참조한다. 그 결과, 컴파일러의 삽입, 연관, 발생 또는 다른 동작에 대한 참조는 상기한 단계 또는 패스는 물론, 컴파일러의 임의의 다른 공지된 단계 또는 패스 중 임의의 것에서 일어날 수 있다.
일 실시예에서, 모니터 모듈(305)에 의한 프로그램 코드의 실행의 모니터링은 프로그램 코드 내의 코드 세그먼트/영역이 실행되는 횟수를 추적하는 것을 포함한다. 코드 영역은 명령어/코드를 그룹화하는 임의의 공지된 방식으로 결정될 수 있다. 한 예로서, 코드 섹션과 연관되어 있는 명령어 주소가 OOO 코어의 프로그램 카운터에 의해 참조될 때마다. 반복 카운트가 증가된다. 코드 섹션에 대한 반복 카운트가 임계값을 초과하는 경우, 일 실시예에서, 코드 섹션은 핫 코드로서 식별된다.
반복 패턴을 결정하는 것과 함께 또는 개별적으로 프로그램 코드의 실행을 모니터링하는 것은 코드 섹션과 연관되어 있는 성능 척도를 결정/추적하는 것을 포함 할수 있다. 앞서 개시한 바와 같이, 예시적인 성능 척도는 명령어 폐기 푸시아웃, 실행된 명령어의 수, 코드 영역을 실행하는 시간의 양, 코드 영역을 만난/실행한 횟수, 코드 영역의 실행 동안 소비된 전력의 양, 코드 영역의 실행 동안 상이한 전력 상태에서 소비된 시간의 양, 및 코드 세그먼트의 실행 동안 열 밀도를 포함할 수 있다. 그렇지만, 프로세서 실행과 연관되어 있는 임의의 공지된 척도 또는 척도들의 조합이 프로그램 코드의 실행 동안 모니터링될 수 있다.
블록(402)에서, 프로그램 코드가 제1 코어에서 실행될 수 있다. 일 실시예에서, 제1 코어는 협폭 비순차 코어(narrow out-of-order core) 등의 제1 유형일 수 있다. 블록(404)에서, 제1 코어가 프로그램 코드를 실행할 때, 제1 코어의 성능이 모니터링될 수 있다. 블록(406)에서, 성능에 관한 통계가 수집될 수 있다. 일 실시예에서, 통계는 분기 미스율(branch miss rate), 캐시 미스율(cache miss rate) 등을 포함할 수 있다. 일 실시예에서, 성능의 모니터링 및 통계의 수집은 모니터 모듈(305)에 의해 수행될 수 있다. 블록(408)에서, 제1 코어에서 프로그램 코드를 실행하는 성능 및 통계에 적어도 부분적으로 기초하여, 제2 코어에서 프로그램 코드를 실행하는 성능이 예측될 수 있다. 일 실시예에서, 제2 코어는 광폭 순차 코어(wide in-order core) 등의 제2 유형일 수 있다. 다른 대안으로서, 제1 유형은 광폭 순차 코어일 수 있고, 제2 유형은 협폭 비순차 코어일 수 있다. 일 실시예에서, 예측은 "predict_performance"이라는 함수로서 구현될 수 있다. 블록(410)에서, 프로그램 코드를 실행하는 제2 처리 코어의 예측된 성능이 프로그램 코드를 실행하는 제1 처리 코어의 모니터링된 성능보다 나은 경우, 다음과 같은 동작이 수행될 수 있다.
블록(412)에서, 제2 코어가 저전력 또는 "슬립" 상태로부터 파워업될 수 있다. 파워업 동안, 제1 코어는 프로그램의 실행을 계속한다. 블록(414)에서, 프로그램 코드의 실행이 제1 코어로부터 제2 코어로 스위칭될 수 있다. 블록(416)에서, 제1 코어가 파워다운되어 슬립 상태로 될 수 있다. 제2 코어의 예측된 성능이 제1 코어보다 낫지 않은 경우, 제1 코어에서의 프로그램 코드의 실행이 계속될 수 있다. 이 방법의 차후의 반복에서, 이 방법에서의 제1 코어 및 제2 코어의 위치가 바뀔 수 있다(예컨대, 따라서 제2 코어가 먼저 실행되고, 제2 코어의 성능이 모니터링되며, 제2 코어에 관한 통계가 수집되고, 제1 코어의 성능이 예측되며, 이하 마찬가지이다). 일 실시예에서, 블록(404) 내지 블록(416)은 코드 분배 모듈(210)에 의해 수행될 수 있다.
함수 predict_performance (core number, performance_core1, statistics_core1)는 현재의 코어 실행 성능 및 통계, performance_core1 및 statistics_core1을 사용하여 제2 코어에서의 실행의 성능을 예측한다. 예측된 성능이 현재의 코어에서의 성능보다 높은 경우, 실행이 다른 코어로 스위칭된다. 이 방식은 현재의 코어의 성능 정보를 사용하여 다른 코어의 성능을 예측하는 것이 가능하다는 가정에 기초하고 있다. 직관적으로, 과도한 캐시/분기 미스를 갖는 프로그램 실행은 나중의 명령어를 비순차로 실행함으로써 미스 지연 시간(miss latency)을 숨길 수 있는 것으로 인해 협폭 비순차 코어에서 더 나은 성능을 나타낼 것이다. 한편, 높은 ILP(instruction level parallelism) 및 낮은 캐시/분기 미스를 갖는 프로그램은 그의 높은 실행 대역폭으로 인해 광폭 순차 코어에서 더 효율적으로 실행될 것이다.
일 실시예에서, 함수 predict_performance를 정의하기 위해, 먼저 제1 코어 및 제2 코어 둘 다에서 n개의 코드 조각 c1, …, cn을 실행하고 2개의 코어에서, 각각, 그 각자의 성능 정보 (p11, p12, p1n), (p21, p22, p2n), 및 통계 (s11, s12, s1n), (s21, s22, s2n)을 수집할 수 있다. 이어서, (F(p11, s11), F(p12, s12), F(p1n, s1n)) - (p21, p22, p2n) 및 (F(p21, s21), F(p22, s22), F(p2n, s2n)) - (p11, p12, p1n)이 최소로 되도록 최적합 함수 F를 찾아낼 수 있다. 최적합의 표준 오차(standard error)가 작은 경우, F를 함수 predict_performance로서 사용할 수 있다. 그렇지만, 표준 오차가 높은 경우, 예측 정확도를 향상시키기 위해 더 많은 성능 파라미터를 찾아낼 필요가 있을 수 있다.
이 단일 코어 예측 방식의 한가지 장점은, 결정을 하는 데 다른 코어를 수반하는 성능 및 전력 오버헤드 없이, 다른 코어의 성능을 예측하는 데 현재의 코어의 실행 통계만을 사용한다는 것이다. 그렇지만, 이 방식은 2개의 코어의 성능이 밀접하게 상관되어 있다고 가정한다. 어떤 환경/구성에서, 2개의 코어의 성능은 단지 느슨하게 상관되어 있을 수 있고, 적합 함수(good fit function)가 존재하지 않을 수 있다. 따라서, 보다 일반적인 방식을 가지는 것이 바람직할 수 있다.
다른 실시예에서, 듀얼 코어 예측 프로세스는 코어 스위칭을 예측하기 위해 짧은 기간에 2개의 코어에서 관찰된 성능 정보를 사용한다. 구체적으로는, 2개의 코어에서의 성능을 샘플링하고 비교하여 실행을 다른 코어로 스위칭할지를 결정하기 위해 "예측"이 규칙적인 간격으로 수행될 수 있다. 각각의 예측이 2가지 코어 스위칭을 수반할 수 있다: 다른 코어로부터 성능 정보를 얻기 위해 제1 스위칭이 일어나고, 다른 코어에서의 성능이 제1 코어에서의 성능보다 좋지 않을 때 제2 스위칭이 일어날 수 있으며, 따라서 실행이 제1 코어로 다시 스위칭해야만 한다. 제1 코어 스위칭은 다른 코어를 파워업하는 것 및 실행을 위해 그의 마이크로 아키텍처 상태를 워밍업하는 것을 수반하고, 제2 스위칭은 단지 코어 파워다운을 수반할 뿐이다.
코어 스위칭 오버헤드를 감소시키기 위해, 예측이 2개의 동작 - "계속을 위한 예측"(Pcont) 동작 및 "스위칭을 위한 예측"(Pswit) - 으로 분할될 수 있다. Pcont 동작은 현재의 코어에서 수집된 성능 정보를 2개의 코어의 이전의 성능 정보와 비교하여 현재의 코어에서 실행이 계속되어야만 하는지 여부를 결정한다. Pcont 동작이 현재의 코어에서 실행이 계속되어서는 안되는 것으로 예측하는 경우, Pswit 동작은 짧은 기간 동안 다른 코어를 실행하기 위해 다른 코어를 활성화시키고, 2개의 코어에서의 성능 정보를 비교하여 실행이 다른 코어로 스위칭되어야만 하는지 여부를 결정한다. Pcont가 동일한 코어에서 너무 오랫동안 계속 실행되는 것을 방지하기 위해, Pswit 동작이 연달아 K회 이상 생략될 수 없도록 하기 위해 파라미터 K가 도입된다. 또한, Pswit 동작이 생략될 때마다, 이전의 성능이 팽창 인자(Inflation Factor)만큼 팽창되고, 따라서 그 다음의 Pcont 기간에서 Pswit 동작을 생략하는 것이 더 어렵다는 것을 알게 될 것이다.
듀얼 코어 예측 프로세스(500)가 도 5에 도시되어 있다. 일 실시예에서, S는 샘플링 구간(예컨대, 예측들 사이의 사이클의 수), M은 각각의 코어에서의 성능을 수집하기 위한 샘플 길이(예컨대, 단위: 사이클의 수)이며, PU는 제2 코어를 파워업하는 사이클의 수이고, IPC는 사이클당 명령어의 수이며, K는 계속의 최대 횟수(K는 자연수임)이고, N은 계속의 횟수(처음에 0으로 설정되어 있음)이며, Prev_IPC는 이전의 IPC(처음에 MAX_FLOAT로 설정되어 있을 수 있음)이다. 일 실시예에서, S, M, PU, K, 및 팽창 인자는 적절한 값으로 설정될 수 있다.
블록(502)에서, 프로그램 코드가 S 사이클의 샘플링 구간 동안 제1 코어에서 실행될 수 있다. 일 실시예에서, 제1 코어는 협폭 비순차 코어 등의 제1 유형일 수 있다. 블록(504)에서, 제2 코어에 대한 파워업이 프로그램 코드 실행의 시작으로부터 S+M 사이클의 종료보다 PU 사이클 이전에 신호될 수 있다. 일 실시예에서, 제2 코어는 광폭 순차 코어 등의 제2 유형일 수 있다. 다른 대안으로서, 제1 유형은 광폭 순차 코어일 수 있고, 제2 유형은 협폭 비순차 코어일 수 있다. 블록(506)에서, M 사이클 동안 제1 코어에 대한 사이클당 명령어의 수(IPC1)가 수집될 수 있다. 일 실시예에서, 성능의 모니터링 및 통계의 수집이 모니터 모듈(305) 또는 코드 분배 모듈(210) 중 하나에 의해 수행될 수 있다.
그 다음에, 제1 코어에서 실행을 계속하기 위한 예측(Pcont)이 다음과 같이 수행될 수 있다. 블록(508)에서, 계속의 횟수(N)가 계속의 최대 횟수(K)보다 작고, 제1 코어에 대한 사이클당 명령어의 수(IPC1)가 사이클당 명령어의 이전의 수(Prev_IPC, 처음에 최대값으로 설정되어 있음)보다 큰 경우, 블록(510, 512 및 514)이 수행될 수 있다. 이 경우에, 제1 코어로부터 제2 코어로의 스위칭이 행해지지 않는다. 블록(510)에서, 제2 코어에 대한 파워다운이 신호될 수 있다. 블록(512)에서, 사이클당 명령어의 이전의 수(Prev_IPC)가 Prev_IPC와 팽창 인자를 곱한 것으로 설정될 수 있다. 제1 코어에서의 프로그램 코드의 계속된 실행으로 처리가 계속된다.
블록(508)에서, 계속의 횟수(N)가 계속의 최대 횟수(K)보다 작거나 같거나, 제1 코어에 대한 사이클당 명령어의 수(IPC1)가 사이클당 명령어의 이전의 수(Prev_IPC)보가 작거나 같은 경우, 블록(516, 518 및 520)이 수행될 수 있다. 이 경우에, 제1 코어로부터 제2 코어로의 스위칭이 행해질 수 있다. 그 다음에, 제1 코어로부터 제2 코어로 실행을 스위칭하기 위한 예측(Pswit)이 다음과 같이 수행될 수 있다. 블록(516)에서, 카운터(N)가 0으로 설정될 수 있다. 블록(518)에서, 프로그램 코드의 실행이 제1 코어로부터 제2 코어로 스위칭될 수 있고, 제2 코어에 대한 사이클당 명령어의 수(IPC2)가 수집될 수 있다. 그 다음에, 스위칭이 가치가 있었는지를 검증하기 위해 검사가 행해진다.
블록(520)에서, 제2 코어에서의 사이클당 명령어의 수(IPC2)가 제1 코어에서의 사이클당 명령어의 수(IPC1)보다 작은 경우, 블록(522)에서, 프로그램 코드의 실행이 제2 코어로부터 다시 제1 코어로 스위칭될 수 있다. 다른 대안으로서, 사이클당 명령어의 수 이외의 다른 성능 척도가 사용되는 경우, 이어서 제2 코어에서의 성능이 제1 코어에서의 성능보다 낫지 않은 경우, 프로그램 코드의 실행이 제2 코어로부터 다시 제1 코어로 스위칭될 수 있다. 블록(524)에서, 제2 코어에 대한 파워다운이 이어서 신호될 수 있다. 그렇지만, 블록(520)에서 제2 코어에서의 사이클당 명령어의 수(IPC2)가 제1 코어에서의 사이클당 명령어의 수(IPC1)보다 작지 않은 경우, 코어의 스위칭은 가치가 있다. 다른 대안으로서, 사이클당 명령어의 수 이외의 다른 성능 척도가 사용되는 경우, 이어서 제2 코어에서의 성능이 제1 코어에서의 성능보다 낫거나 그와 같은 경우, 코어의 스위칭은 가치가 있다. 블록(528)에서, 제1 코어에 대한 파워다운이 신호될 수 있다. 어느 경우든지, 일 실시예에서 블록(530)에서 사이클당 명령어의 이전의 수(Prev_IPC)를 IPC 값들의 평균(예컨대, IPC1 + IPC2 / 2)으로 설정한 상태에서 처리가 계속된다. 여기서 산술 평균을 평균으로서 사용하지만, 기하 평균, 조화 평균, 및 2개의 IPC 값의 평균을 제공하는 임의의 다른 수단도 역시 사용할 수 있다. 제1 코어가 파워다운된 상태에서 처리가 이제 제2 코어에서 수행된다. 이 방법의 차후의 반복에서, 이 방법에서의 제1 코어 및 제2 코어의 위치가 바뀔 수 있다(예컨대, 따라서 제2 코어가 먼저 S 사이클 동안 실행되고, 제1 코어의 파워업을 신호하며, 제2 코어의 성능이 M 사이클 동안 모니터링되고, 제2 코어에 관한 통계가 수집되며, 이하 마찬가지이다). 일 실시예에서, 적어도 블록(504) 내지 블록(530)은 코드 분배 모듈(210)에 의해 수행될 수 있다.
코어 스위칭은 다음과 같은 몇가지 오버헤드를 수반한다: 1) 저전력 상태에 있을 수 있는 다른 코어를 활성화시키는 것; 2) x86 레지스터 상태를 다른 코어로 전송하는 것; 3) 빈번히 액세스되는 데이터를 다른 데이터 캐시로 이동시키는 것; 및 4) 명령어 캐시, 분기 예측기 상태, 및 다른 코어에서의 다른 상태를 워밍업하는 것.
다른 코어의 절전 해제(또는 파워업)까지의 지연 시간은 다른 코어가 있는 저전력 상태에 의존한다. 일부 실시예에서, 코어가 정규의 동작 전력의 약 30%를 소비하는 저전력 C2 상태에 있는 경우, 코어를 파워업하여 정상 동작 속도(C0 상태)로 되게 하는 데 약 5000 사이클이 걸릴 수 있다. 코어가 동작 전력의 10% 미만을 소비하는 보다 깊은 파워다운 상태(C6)에 있는 경우, 일 실시예에서, 절전 해제하는 데 약 200K 사이클이 걸릴 수 있다. 비록 파워업에 시간이 걸리지만, 이는 다른 코어에서의 실행과 병렬로 행해질 수 있다. 예를 들어, 일 실시예에서, 제1 코어가 Pswit/Pcont 기간에 들어가기 전에, 제1 코어(또는 다른 모듈)는 파워업을 개시하라는 신호를 제2 코어로 송신할 수 있다. 제1 코어의 예측 기간의 종료 시에, 제2 코어는 이미 파워업될 수 있고, 프로그램 코드의 실행을 계속할 수 있다. 이러한 조기 파워업 전략에 의해, 파워업 지연 시간이 코어 스위칭 지연 시간에도 성능에도 영향을 주지 않을 것이다. 비록 그것이 에너지 소비를 증가시키지만,
일 실시예에서, 레벨 2(L2) 캐시가 2개의 코어 간에 공유되더라도, 데이터 및 명령어 캐시는 워밍업하는 데 최대 10K 사이클이 걸릴 수 있다. 또한, 최근의 하이브리드 분기 예측기는 분기 예측기가 꽤 빨리 워밍업될 수 있게 해준다. 코어 파워업에 PU 사이클이 걸리고 분기 예측기 및 L1 캐시 워밍업에 WU 사이클이 걸리는 것으로 가정한다. 도 6은 코어 스위칭 동작 및 오버헤드를 나타낸 것이다. 도 6에서의 시간의 표현은 단지 예시적인 것이고, 다양한 스테이지 간의 어떤 실제의 구체적인 타이밍 관계를 전달하기 위한 것이 아니다. 제1 코어(601)가 Pcont 기간에 들어가기 전에, 제1 코어는 파워업하라고 제2 코어(602)에 신호한다(603). 제1 코어가 그의 Pcont 동작을 완료하고 코어 스위칭이 필요할 수 있음을 알아낸 후에, 프로그램 코드 실행이 제2 코어로 스위칭될 수 있다(604). 그 시간 후에, 제2 코어는 이미 파워업되었고, WU 사이클 동안 그의 워밍업을 시작한다(605). 워밍업 기간 후에, 제2 코어는 그의 성능 데이터를 수집하기 위해 짧은 시간(예컨대, M 사이클) 동안 실행된다(606). 그 때에, 제2 코어의 성능이 제1 코어의 성능보다 낫고, 따라서 제2 코어가 파워다운(PD)하라고 제1 코어에 신호하고(607) 제2 코어에서 실행을 계속하는 것으로 가정하자. 그 다음의 Pcont 기간의 종료 근방에서, 제2 코어는 파워업하라고 제1 코어에 신호한다(608). 제2 코어가 그의 Pcont 기간을 완료하고 제2 코어가 실행을 계속해야 한다는 것을 알아낸 후에, 제2 코어는 파워다운하라고 제1 코어에 신호하고(609), 제2 코어에서 프로그램 코드의 실행을 계속한다.
네이티브 코어를 상이한 동시 설계 코어와 결합한 결과로서, 본 명세서에서 논의된 동적 코어 선택 기법을 사용할 때, 전력 및 실행 이점들 중 최상의 것들이 심지어 단일의 응용 프로그램 내에서 획득될 가능성이 있다. 예를 들어, 비순차 코어 및 소프트웨어 관리 순차 코어에 의해, 소프트웨어 관리 코어에서 효율적이지 않은 코드가 비순차 코어로 마이그레이션된다. 이와 반대로, 비순차 코어에서 효율적이지 않은 코드가 소프트웨어 관리 코어로 마이그레이션된다. 따라서, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 통해, 네이티브 코드, 핫 코드 검출 및 핫 코드 최적화의 병렬 실행이 효율적으로 관리될 수 있는 반면, 다수의 스레드의 개별 섹션이 비순차 및 순차 동시 설계 코어들 사이에서 파이프라인 방식으로 효율적으로 인터리빙될 수 있다. 그 결과, 어떤 구현에서 순차 코어에서의 실행 동안 비순차 코어를 저전력 상태에 두는 것과 같은 상이한 전력 효율 기법을 통해 더 나은 전력 성능을 달성하면서 최대 성능이 달성될 수 있다.
모듈은, 본 명세서에서 사용되는 바와 같이, 임의의 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 말한다. 종종, 개별적인 것으로 예시되어 있는 모듈 경계가 흔히 달라지고 어쩌면 중복된다. 예를 들어, 제1 및 제2 모듈이, 어떤 독립적인 하드웨어, 소프트웨어 또는 펌웨어를 유지하면서, 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 공유할 수 있다. 일 실시예에서, 논리라는 용어의 사용은 트랜지스터, 레지스터, 또는 프로그램가능 논리 디바이스와 같은 기타 하드웨어 등의 하드웨어를 포함한다. 그렇지만, 다른 실시예에서, 논리는 또한 하드웨어와 통합되어 있는 소프트웨어 또는 코드 - 펌웨어 또는 마이크로코드 등 - 를 포함한다.
값은, 본 명세서에서 사용되는 바와 같이, 숫자, 상태, 논리 상태, 또는 이진 논리 상태의 임의의 공지된 표현을 포함한다. 종종, 논리 레벨(logic level), 논리 값(logic value), 또는 논리 값(logical value)의 사용은 단순히 이진 논리 상태를 나타내는 1 및 0이라고도 한다. 예를 들어, 1은 하이 논리 레벨을 말하고, 0은 로우 논리 레벨을 말한다. 일 실시예에서, 트랜지스터 또는 플래시 셀과 같은 저장 셀은 단일의 논리 값 또는 다수의 논리 값을 보유할 수 있다. 그렇지만, 컴퓨터 시스템에서의 값의 다른 표현이 사용되어 왔다. 예를 들어, 십진수 10이 또한 이진수 1010 및 16진수 문자 A로 표현될 수 있다. 따라서, 값은 컴퓨터 시스템에 보유될 수 있는 정보의 임의의 표현을 포함한다.
더욱이, 상태는 값 또는 값의 일부분에 의해 표현될 수 있다. 한 예로서, 논리 1과 같은 제1 값은 기본 또는 초기 상태를 나타낼 수 있는 반면, 논리 0과 같은 제2 값은 비기본 상태를 나타낼 수 있다. 그에 부가하여, 리셋(reset) 및 세트(set)라는 용어는, 일 실시예에서, 각각, 기본값 및 업데이트된 값 또는 상태를 말한다. 예를 들어, 기본값은 어쩌면 하이 논리 값(즉, 리셋)을 포함하는 반면, 업데이트된 값은 어쩌면 로우 논리 값(즉, 세트)을 포함한다. 값들의 임의의 조합이 임의의 수의 상태를 나타내는 데 이용될 수 있다는 것에 유의해야 한다.
앞서 기재된 방법, 하드웨어, 소프트웨어, 펌웨어 또는 코드의 실시예는 처리 요소에 의해 실행가능한 머신 판독가능 매체 상에 저장된 명령어 또는 코드를 통해 구현될 수 있다. 머신 판독가능 매체는 컴퓨터 또는 전자 시스템 등의 머신에 의해 판독가능한 형태로 정보를 제공(즉, 저장 및/또는 전송)하는 임의의 메커니즘을 포함한다. 예를 들어, 머신 판독가능 매체는 SRAM(static RAM) 또는 DRAM(dynamic RAM) 등의 RAM(random- access memory); ROM; 자기 또는 광 저장 매체; 플래시 메모리 디바이스; 전기 저장 디바이스; 광 저장 디바이스 등을 포함한다.
본 명세서 전체에 걸쳐 "일 실시예" 또는 "실시예"라는 말은 그 실시예와 관련하여 기술된 특정의 특징, 구조 또는 특성이 본 발명의 적어도 하나의 실시예에 포함되어 있다는 것을 의미한다. 따라서, 본 명세서 전반에 걸쳐 여러 곳에서 나오는 "일 실시예에서" 또는 "실시예에서"와 같은 문구 모두가 꼭 동일한 실시예를 말하는 것은 아니다. 게다가, 특정의 특징, 구조, 또는 특성이 하나 이상의 실시예에서 임의의 적당한 방식으로 조합될 수 있다.
상기 명세서에서, 특정의 예시적인 실시예를 참조하여 상세한 설명이 주어져 있다. 그렇지만, 첨부된 특허청구범위에 기재된 본 발명의 보다 광의의 사상 및 범위를 벗어나지 않고 본 발명에 다양한 수정 및 변경이 행해질 수 있다는 것이 명백할 것이다. 그에 따라, 본 명세서 및 첨부 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 한다. 게다가, 실시예 및 다른 예시적인 표현의 상기 사용이 꼭 동일한 실시예 또는 동일한 예를 말하는 것일 필요는 없으며, 상이한 다른 실시예는 물론 어쩌면 동일한 실시예를 말하는 것일 수 있다.

Claims (29)

  1. 이기종 멀티-코어 처리 시스템에서 코어들을 동적으로 스위칭하는 방법으로서,
    상기 이기종 멀티-코어 처리 시스템의 제1 처리 코어에서 프로그램 코드를 실행하는 단계 - 상기 제1 처리 코어는 제1 유형임 -;
    상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능을 모니터링하고 통계를 수집하는 단계;
    상기 프로그램 코드가 상기 제1 처리 코어에서 실행중인 동안, 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 상기 모니터링된 성능 및 수집된 통계에 적어도 부분적으로 기초하여, 상기 이기종 멀티-코어 처리 시스템의 제2 처리 코어에서 상기 프로그램 코드를 실행하는 성능을 예측하는 단계 - 상기 제2 처리 코어는 상기 제1 유형과 상이한 제2 유형임 -; 및
    상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제2 처리 코어에 대해 저전력 상태로부터 파워업(power up)하는 단계를 더 포함하는 방법.
  3. 제1항에 있어서, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제1 처리 코어에 대해 저전력 상태로 파워다운(power down)하는 단계를 더 포함하는 방법.
  4. 제1항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어(out-of-order processing core)를 포함하고, 상기 제2 처리 코어는 순차 처리 코어(in-order processing core)를 포함하는 방법.
  5. 제1항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 방법.
  6. 제1항에 있어서, 상기 제2 처리 코어의 성능을 예측하는 단계는 상기 제1 처리 코어 및 상기 제2 처리 코어 둘 다에서 복수의 코드 세그먼트를 실행하는 단계, 상기 코드 세그먼트을 실행하는 동안 상기 제1 처리 코어 및 상기 제2 처리 코어의 각자의 성능 정보 및 통계를 수집하는 단계, 및 최적합 함수(best fit function) F(상기 제1 처리 코어의 성능 정보 및 통계)와 상기 제2 처리 코어의 성능 사이의 차이가 최소화되도록 F를 결정하는 단계를 포함하는 방법.
  7. 머신에 의해 실행될 때, 상기 머신으로 하여금 제1항의 방법을 수행하게 하는 코드를 포함하는 머신 판독가능 매체.
  8. 이기종 멀티-코어 처리 시스템으로서,
    집적 회로를 포함하고, 상기 집적 회로는
    프로그램 코드를 실행하도록 구성된 제1 유형의 제1 처리 코어;
    상기 프로그램 코드를 실행하도록 구성된 제2 유형의 제2 처리 코어 - 상기 제1 유형은 상기 제2 유형과 상이함 -; 및
    코드 분배 모듈(code distribution module)을 포함하며, 상기 코드 분배 모듈은 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능을 모니터링하고 통계를 수집하고, 상기 프로그램 코드가 상기 제1 처리 코어에서 실행중인 동안, 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 상기 모니터링된 성능 및 수집된 통계에 적어도 부분적으로 기초하여, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 성능을 예측하며, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하도록 구성되는 이기종 멀티-코어 처리 시스템.
  9. 제8항에 있어서, 상기 코드 분배 모듈은 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제2 처리 코어에 대해 저전력 상태로부터 파워업하도록 구성되는 이기종 멀티-코어 처리 시스템.
  10. 제8항에 있어서, 상기 코드 분배 모듈은 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제1 처리 코어에 대해 저전력 상태로 파워다운 하도록 더 구성되는 이기종 멀티-코어 처리 시스템.
  11. 제8항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
  12. 제8항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
  13. 이기종 멀티-코어 처리 시스템에서 코어들을 동적으로 스위칭하는 방법으로서,
    제1 수의 사이클 동안 상기 이기종 멀티-코어 처리 시스템의 제1 처리 코어에서 프로그램 코드를 실행하는 단계 - 상기 제1 처리 코어는 제1 유형임 -;
    상기 이기종 멀티-코어 처리 시스템의 제2 처리 코어에 대한 파워업을 신호하는 단계 - 상기 제2 처리 코어는 상기 제1 유형과 상이한 제2 유형임 -;
    제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 제1 성능 척도를 수집하는 단계;
    상기 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 나을 때, 상기 제2 처리 코어가 파워업된 후 상기 프로그램 코드가 상기 제2 처리 코어에서 실행되기 전에, 상기 제2 처리 코어에 대한 파워다운을 신호하고 상기 제1 처리 코어에서 상기 프로그램 코드의 실행을 계속하는 단계; 및
    상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 낫지 않을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하고 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하는 단계를 포함하는 방법.
  14. 제13항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 낫지 않을 때, 상기 프로그램 코드의 실행을 상기 제2 처리 코어로부터 다시 상기 제1 처리 코어로 스위칭하는 단계, 및 상기 제2 처리 코어에 대한 파워다운을 신호하는 단계를 더 포함하는 방법.
  15. 제14항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 나을 때, 상기 제1 처리 코어에 대한 파워다운을 신호하는 단계 및 상기 이전에 결정된 코어 성능 척도를 상기 제1 성능 척도와 상기 제2 성능 척도의 평균으로 설정하는 단계를 더 포함하는 방법.
  16. 제13항에 있어서, 상기 제2 처리 코어에 대한 파워업을 신호하는 단계는 상기 제1 수의 사이클 및 상기 제2 수의 사이클의 합의 종료보다 제3 수의 사이클 이전에 파워업을 신호하는 단계를 포함하는 방법.
  17. 제13항에 있어서, 상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 나을 때, 상기 이전에 결정된 코어 성능 척도를 상기 이전에 결정된 코어 성능 척도와 팽창 인자(inflation factor)를 곱한 것으로 설정하는 단계를 더 포함하는 방법.
  18. 제13항에 있어서, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 강제로 스위칭하는 단계, 및 상기 제1 성능 척도과 상기 이전에 결정된 코어 성능 척도의 매 K번의 비교에 대해 적어도 한번, 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하는 단계 - K는 자연수임 - 를 더 포함하는 방법.
  19. 제13항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 방법.
  20. 제13항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 방법.
  21. 머신에 의해 실행될 때, 상기 머신으로 하여금 제13항의 방법을 수행하게 하는 코드를 포함하는 머신 판독가능 매체.
  22. 이기종 멀티-코어 처리 시스템으로서,
    집적 회로를 포함하고, 상기 집적 회로는
    프로그램 코드를 실행하도록 구성된 제1 유형의 제1 처리 코어;
    상기 프로그램 코드를 실행하도록 구성된 제2 유형의 제2 처리 코어 - 상기 제1 유형은 상기 제2 유형과 상이함 -; 및
    코드 분배 모듈을 포함하며, 상기 코드 분배 모듈은 제1 수의 사이클 동안 상기 제1 처리 코어에서 상기 프로그램 코드를 실행시키고, 상기 제2 처리 코어에 대한 파워업을 신호하며, 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 제1 성능 척도를 수집하도록 구성되고;
    상기 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 나을 때, 상기 제2 처리 코어가 파워업된 후 상기 프로그램 코드가 상기 제2 처리 코어에서 실행되기 전에, 상기 코드 분배 모듈은 상기 제2 처리 코어에 대한 파워다운을 신호하고 상기 제1 처리 코어에서 상기 프로그램 코드의 실행을 계속하도록 구성되고;
    상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 낫지 않을 때, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하고 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하도록 구성되는 이기종 멀티-코어 처리 시스템.
  23. 제22항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 낫지 않을 때, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제2 처리 코어로부터 다시 상기 제1 처리 코어로 스위칭하고, 상기 제2 처리 코어에 대한 파워다운을 신호하도록 구성되는 이기종 멀티-코어 처리 시스템.
  24. 제23항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 나을 때, 상기 코드 분배 모듈은 상기 제1 처리 코어에 대한 파워다운을 신호하고 상기 이전에 결정된 코어 성능 척도를 상기 제1 성능 척도와 상기 제2 성능 척도의 평균으로 설정하도록 구성되는 이기종 멀티-코어 처리 시스템.
  25. 제22항에 있어서, 상기 제2 처리 코어에 대한 파워업을 신호하는 것은 상기 제1 수의 사이클 및 상기 제2 수의 사이클의 합의 종료보다 제3 수의 사이클 이전에 파워업을 신호하는 것을 포함하는 이기종 멀티-코어 처리 시스템.
  26. 제22항에 있어서, 상기 코드 분배 모듈은 상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 나을 때, 상기 이전에 결정된 코어 성능 척도를 상기 이전에 결정된 코어 성능 척도와 팽창 인자를 곱한 것으로 설정하도록 더 구성되는 이기종 멀티-코어 처리 시스템.
  27. 제22항에 있어서, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 강제로 스위칭하고 상기 제1 성능 척도와 상기 이전에 결정된 코어 성능 척도의 매 K번의 비교에 대해 적어도 한번, 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하도록 더 구성되고, K는 자연수인 이기종 멀티-코어 처리 시스템.
  28. 제22항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
  29. 제22항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
KR1020137025102A 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택 KR101600152B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/046,031 2011-03-11
US13/046,031 US8683243B2 (en) 2011-03-11 2011-03-11 Dynamic core selection for heterogeneous multi-core systems
PCT/US2011/067630 WO2012125200A2 (en) 2011-03-11 2011-12-28 Dynamic core selection for heterogeneous multi-core systems

Related Child Applications (3)

Application Number Title Priority Date Filing Date
KR1020167005132A Division KR101908202B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005133A Division KR101901037B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005134A Division KR101899695B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택

Publications (2)

Publication Number Publication Date
KR20130141668A KR20130141668A (ko) 2013-12-26
KR101600152B1 true KR101600152B1 (ko) 2016-03-14

Family

ID=46797157

Family Applications (4)

Application Number Title Priority Date Filing Date
KR1020167005133A KR101901037B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005134A KR101899695B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005132A KR101908202B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020137025102A KR101600152B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택

Family Applications Before (3)

Application Number Title Priority Date Filing Date
KR1020167005133A KR101901037B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005134A KR101899695B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR1020167005132A KR101908202B1 (ko) 2011-03-11 2011-12-28 이기종 멀티-코어 시스템에 대한 동적 코어 선택

Country Status (7)

Country Link
US (7) US8683243B2 (ko)
EP (5) EP3082041B1 (ko)
JP (6) JP5750172B2 (ko)
KR (4) KR101901037B1 (ko)
CN (5) CN109960398B (ko)
TW (4) TWI529625B (ko)
WO (1) WO2012125200A2 (ko)

Families Citing this family (73)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8683243B2 (en) 2011-03-11 2014-03-25 Intel Corporation Dynamic core selection for heterogeneous multi-core systems
JP5692381B2 (ja) * 2011-07-13 2015-04-01 富士通株式会社 マルチコアプロセッサシステム、および制御方法
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
US20130185581A1 (en) * 2012-01-18 2013-07-18 Qualcomm Incorporated Efficient Code Dispatch Based on Performance and Energy Consumption
US10114750B2 (en) * 2012-01-23 2018-10-30 Qualcomm Incorporated Preventing the displacement of high temporal locality of reference data fill buffers
US9223599B1 (en) * 2012-03-30 2015-12-29 Zynga Inc. Client-side server for client-side scripting languages
US10013511B2 (en) * 2012-04-09 2018-07-03 Purdue Research Foundation System and method for energy usage accounting in software applications
US10185566B2 (en) * 2012-04-27 2019-01-22 Intel Corporation Migrating tasks between asymmetric computing elements of a multi-core processor
US9035956B1 (en) * 2012-05-08 2015-05-19 Apple Inc. Graphics power control with efficient power usage during stop
US9003218B2 (en) 2012-05-21 2015-04-07 International Business Machines Corporation Power shifting in multicore platforms by varying SMT levels
US9401869B1 (en) * 2012-06-04 2016-07-26 Google Inc. System and methods for sharing memory subsystem resources among datacenter applications
US9459879B2 (en) * 2012-06-08 2016-10-04 Qualcomm Incorporated Systems and methods for thermal mitigation with multiple processors
US9619284B2 (en) * 2012-10-04 2017-04-11 Intel Corporation Dynamically switching a workload between heterogeneous cores of a processor
US8996902B2 (en) * 2012-10-23 2015-03-31 Qualcomm Incorporated Modal workload scheduling in a heterogeneous multi-processor system on a chip
JP2014102683A (ja) * 2012-11-20 2014-06-05 Fujitsu Ltd 情報処理装置の制御プログラム、情報処理装置の制御方法および情報処理装置
WO2014105058A1 (en) * 2012-12-28 2014-07-03 Intel Corporation Optimal logical processor count and type selection for a given workload on platform thermals and power budgeting constraints
US9164822B2 (en) * 2013-03-12 2015-10-20 Oracle International Corporation Method and system for key performance indicators elicitation with incremental data decycling for database management system
US9405551B2 (en) 2013-03-12 2016-08-02 Intel Corporation Creating an isolated execution environment in a co-designed processor
US9342303B2 (en) * 2013-03-15 2016-05-17 Intel Corporation Modified execution using context sensitive auxiliary code
US10423216B2 (en) * 2013-03-26 2019-09-24 Via Technologies, Inc. Asymmetric multi-core processor with native switching mechanism
JP6321325B2 (ja) * 2013-04-03 2018-05-09 ルネサスエレクトロニクス株式会社 情報処理装置および情報処理方法
KR102157326B1 (ko) * 2013-04-30 2020-09-17 삼성전자 주식회사 컴퓨팅 장치, 컴퓨팅 장치의 메모리 대역폭 조정 방법 및 메모리 대역폭 조정기
US9588570B2 (en) * 2013-04-30 2017-03-07 Samsung Electronics Co., Ltd. Apparatus and method for adjusting bandwidth
KR20140139371A (ko) * 2013-05-27 2014-12-05 한국전자통신연구원 멀티 코어 시스템 반도체 제어 장치 및 방법
WO2014204437A2 (en) * 2013-06-18 2014-12-24 Empire Technology Development Llc Tracking core-level instruction set capabilities in a chip multiprocessor
WO2015050557A1 (en) 2013-10-04 2015-04-09 Intel Corporation Techniques for heterogeneous core assignment
US9965279B2 (en) * 2013-11-29 2018-05-08 The Regents Of The University Of Michigan Recording performance metrics to predict future execution of large instruction sequences on either high or low performance execution circuitry
US20150154100A1 (en) * 2013-12-04 2015-06-04 International Business Machines Corporation Tuning business software for a specific business environment
KR102205836B1 (ko) 2014-01-29 2021-01-21 삼성전자 주식회사 태스크 스케줄링 방법 및 장치
US9910683B2 (en) * 2014-03-28 2018-03-06 Lenovo (Singapore) Pte. Ltd. Dynamic application optimization
US9582012B2 (en) 2014-04-08 2017-02-28 Qualcomm Incorporated Energy efficiency aware thermal management in a multi-processor system on a chip
US9858111B2 (en) * 2014-06-18 2018-01-02 Empire Technologies Development Llc Heterogeneous magnetic memory architecture
US9870226B2 (en) 2014-07-03 2018-01-16 The Regents Of The University Of Michigan Control of switching between executed mechanisms
US9958932B2 (en) 2014-11-20 2018-05-01 Apple Inc. Processor including multiple dissimilar processor cores that implement different portions of instruction set architecture
US9898071B2 (en) 2014-11-20 2018-02-20 Apple Inc. Processor including multiple dissimilar processor cores
US10049327B2 (en) * 2014-12-12 2018-08-14 Qualcomm Incorporated Application characterization for machine learning on heterogeneous core devices
US9658937B2 (en) * 2015-03-17 2017-05-23 Qualcomm Incorporated Optimization of hardware monitoring for computing devices
KR102352756B1 (ko) 2015-04-29 2022-01-17 삼성전자주식회사 애플리케이션 프로세서, 시스템 온 칩, 및 이를 포함하는 컴퓨팅 장치
GB2546465B (en) * 2015-06-05 2018-02-28 Advanced Risc Mach Ltd Modal processing of program instructions
US9934124B2 (en) 2015-06-05 2018-04-03 Intel Corporation Implementation of processor trace in a processor that supports binary translation
US10942748B2 (en) * 2015-07-16 2021-03-09 Nxp B.V. Method and system for processing interrupts with shadow units in a microcontroller
US20170052799A1 (en) * 2015-08-21 2017-02-23 Microchip Technology Incorporated Integrated Circuit Device With Selectable Processor Core
US9928115B2 (en) * 2015-09-03 2018-03-27 Apple Inc. Hardware migration between dissimilar cores
KR101715759B1 (ko) * 2015-09-22 2017-03-15 한국전자통신연구원 멀티코어 환경에서의 악성코드 분석 장치 및 방법
US9942631B2 (en) * 2015-09-25 2018-04-10 Intel Corporation Out-of-band platform tuning and configuration
US9891926B2 (en) * 2015-09-30 2018-02-13 International Business Machines Corporation Heterogeneous core microarchitecture
CN105242909B (zh) * 2015-11-24 2017-08-11 无锡江南计算技术研究所 一种基于多版本代码生成的众核循环分块方法
JP5956708B1 (ja) * 2015-11-30 2016-07-27 株式会社PEZY Computing ダイ及びパッケージ、並びに、ダイの製造方法及びパッケージの生成方法
US9939873B1 (en) * 2015-12-09 2018-04-10 International Business Machines Corporation Reconfigurable backup and caching devices
US10037227B2 (en) * 2015-12-17 2018-07-31 Intel Corporation Systems, methods and devices for work placement on processor cores
KR102578648B1 (ko) 2016-03-14 2023-09-13 삼성전자주식회사 모뎀 데이터에 따라 코어 스위칭이 수행되는 애플리케이션 프로세서 및 이를 포함하는 시스템 온 칩
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10282182B2 (en) * 2016-09-23 2019-05-07 Intel Corporation Technologies for translation cache management in binary translation systems
US20180095792A1 (en) * 2016-10-05 2018-04-05 Mediatek Inc. Multi-core system including heterogeneous processor cores with different instruction set architectures
KR102592330B1 (ko) * 2016-12-27 2023-10-20 삼성전자주식회사 OpenCL 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
EP3812900B1 (en) * 2016-12-31 2023-11-29 Intel Corporation Systems, methods, and apparatuses for heterogeneous computing
US10613866B2 (en) * 2017-04-04 2020-04-07 The Regents Of The University Of Michigan Method of detecting repetition of an out-of-order execution schedule, apparatus and computer-readable medium
US10564702B2 (en) 2017-06-28 2020-02-18 Dell Products L.P. Method to optimize core count for concurrent single and multi-thread application performance
WO2019079994A1 (zh) * 2017-10-25 2019-05-02 华为技术有限公司 核心调度方法和终端
CN110611690B (zh) * 2018-06-15 2022-05-10 上海诺基亚贝尔股份有限公司 主核心设备重选的方法、远程设备和计算机可读介质
CN109271168A (zh) * 2018-08-09 2019-01-25 上海鲸鱼机器人科技有限公司 一种代码转换方法、装置及设备、存储介质
US11334398B2 (en) * 2018-08-29 2022-05-17 International Business Machines Corporation Learning-based thermal estimation in multicore architecture
US20190042395A1 (en) * 2018-09-28 2019-02-07 Intel Corporation Source code profiling through enhanced mapping
EP3903198B1 (en) * 2018-12-24 2024-03-13 Telefonaktiebolaget LM Ericsson (publ) Efficient mechanism for executing software-based switching programs on heterogenous multicore processors
KR20200097579A (ko) 2019-02-08 2020-08-19 삼성전자주식회사 프로세스 스케줄링을 위한 전자 장치, 저장 매체 및 방법
CN110083469B (zh) * 2019-05-11 2021-06-04 广东财经大学 一种异构硬件组织运行统一内核方法及系统
US20210124615A1 (en) * 2019-10-29 2021-04-29 Thomas Klingenbrunn Thread scheduling based on performance metric information
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
CN113568390B (zh) * 2021-09-22 2021-12-14 中国核动力研究设计院 基于多级处理器的dcs系统动态分层通信方法及系统
US11797410B2 (en) * 2021-11-15 2023-10-24 Advanced Micro Devices, Inc. Chiplet-level performance information for configuring chiplets in a processor
US20230418664A1 (en) * 2022-06-22 2023-12-28 Advanced Micro Devices, Inc. Adaptive thread management for heterogenous computing architectures
CN116400795A (zh) * 2023-06-09 2023-07-07 上海芯联芯智能科技有限公司 电源门控方法及系统级芯片

Citations (3)

* 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
US20080209243A1 (en) * 2005-05-03 2008-08-28 International Business Machines Corporation Scheduling processor voltages and frequencies based on performance prediction and power constraints
US20080263324A1 (en) * 2006-08-10 2008-10-23 Sehat Sutardja Dynamic core switching

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6233250Y2 (ko) 1980-09-09 1987-08-25
JPH05151184A (ja) * 1991-11-29 1993-06-18 Toshiba Corp マルチプロセツサ制御方式
US6134675A (en) * 1998-01-14 2000-10-17 Motorola Inc. Method of testing multi-core processors and multi-core processor testing device
US6615366B1 (en) * 1999-12-21 2003-09-02 Intel Corporation Microprocessor with dual execution core operable in high reliability mode
US7017138B2 (en) * 2001-08-15 2006-03-21 National Instruments Corporation Dynamically determining a route through one or more switch devices at program execution time
DE10218613A1 (de) * 2002-04-25 2003-12-04 Wet Automotive Systems Ag Vorrichtung zur Detektion mechanischer Kräfte
US7100060B2 (en) * 2002-06-26 2006-08-29 Intel Corporation Techniques for utilization of asymmetric secondary processing resources
JP2004171234A (ja) 2002-11-19 2004-06-17 Toshiba Corp マルチプロセッサシステムにおけるタスク割り付け方法、タスク割り付けプログラム及びマルチプロセッサシステム
US7337334B2 (en) * 2003-02-14 2008-02-26 International Business Machines Corporation Network processor power management
US7996839B2 (en) 2003-07-16 2011-08-09 Hewlett-Packard Development Company, L.P. Heterogeneous processor core systems for improved throughput
US7725683B2 (en) * 2003-09-25 2010-05-25 Marvell International Ltd. Apparatus and method for power optimized replay via selective recirculation of instructions
US7194643B2 (en) * 2003-09-29 2007-03-20 Intel Corporation Apparatus and method for an energy efficient clustered micro-architecture
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
US20060212677A1 (en) * 2005-03-15 2006-09-21 Intel Corporation Multicore processor having active and inactive execution cores
JP2006277364A (ja) 2005-03-29 2006-10-12 Nec Corp プログラムの実行方法と、マルチプロセッサシステム及びその制御プログラム
US20080026332A1 (en) * 2006-06-19 2008-01-31 Kabushiki Kaisha Toshiba Developing agent and manufacturing method thereof
TW200834422A (en) * 2007-02-07 2008-08-16 Asustek Comp Inc Performance enhancement method for a multi-processing core device
TWI388974B (zh) 2007-03-01 2013-03-11 Via Tech Inc 根據工作溫度的變化來動態改變功率損耗的微處理器及方法
US7904287B2 (en) * 2007-11-13 2011-03-08 International Business Machines Corporation Method and system for real-time prediction of power usage for a change to another performance state
US20090187735A1 (en) 2008-01-22 2009-07-23 Sonix Technology Co., Ltd. Microcontroller having dual-core architecture
US8453129B2 (en) * 2008-04-24 2013-05-28 International Business Machines Corporation Using hardware interrupts to drive dynamic binary code recompilation
US8683471B2 (en) 2008-10-02 2014-03-25 Mindspeed Technologies, Inc. Highly distributed parallel processing on multi-core device
US20100122073A1 (en) * 2008-11-10 2010-05-13 Ravi Narayanaswamy Handling exceptions in software transactional memory systems
US9715376B2 (en) * 2008-12-29 2017-07-25 Intel Corporation Energy/performance with optimal communication in dynamic parallelization of single threaded programs
JP5305926B2 (ja) 2009-01-06 2013-10-02 キヤノン株式会社 重合トナーの製造方法
JP2010160715A (ja) 2009-01-09 2010-07-22 Toyota Motor Corp 車両用電子制御ユニット
US8683477B2 (en) * 2009-07-05 2014-03-25 Hewlett-Packard Development Company, L.P. Performance degradation based at least on computing application priority and in a relative manner that is known and predictable beforehand
CN101923492B (zh) * 2010-08-11 2013-05-01 上海交通大学 面向嵌入式异构多核上执行动态分配指令的方法
US9063730B2 (en) * 2010-12-20 2015-06-23 Intel Corporation Performing variation-aware profiling and dynamic core allocation for a many-core processor
US8683243B2 (en) 2011-03-11 2014-03-25 Intel Corporation Dynamic core selection for heterogeneous multi-core systems
US10423216B2 (en) 2013-03-26 2019-09-24 Via Technologies, Inc. Asymmetric multi-core processor with native switching mechanism

Patent Citations (3)

* 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
US20080209243A1 (en) * 2005-05-03 2008-08-28 International Business Machines Corporation Scheduling processor voltages and frequencies based on performance prediction and power constraints
US20080263324A1 (en) * 2006-08-10 2008-10-23 Sehat Sutardja Dynamic core switching

Also Published As

Publication number Publication date
KR101899695B1 (ko) 2018-09-17
CN103443769B (zh) 2017-10-13
JP6938593B2 (ja) 2021-09-22
US11755099B2 (en) 2023-09-12
KR101908202B1 (ko) 2018-10-15
US10437319B2 (en) 2019-10-08
TW201616354A (zh) 2016-05-01
US20120233477A1 (en) 2012-09-13
JP6627102B2 (ja) 2020-01-08
US20190332158A1 (en) 2019-10-31
CN103443769A (zh) 2013-12-11
TWI605390B (zh) 2017-11-11
CN105843362B (zh) 2019-03-29
JP6661865B2 (ja) 2020-03-11
JP2016095871A (ja) 2016-05-26
JP2016095870A (ja) 2016-05-26
JP2016095872A (ja) 2016-05-26
EP3082041B1 (en) 2020-06-17
EP3540600B1 (en) 2022-09-14
KR101901037B1 (ko) 2018-09-20
EP2684127B1 (en) 2020-06-24
TW201237760A (en) 2012-09-16
US10437318B2 (en) 2019-10-08
EP3082041A1 (en) 2016-10-19
JP2014507737A (ja) 2014-03-27
TWI595419B (zh) 2017-08-11
TWI529625B (zh) 2016-04-11
KR20160027995A (ko) 2016-03-10
TWI595420B (zh) 2017-08-11
CN105843362A (zh) 2016-08-10
EP3076294A1 (en) 2016-10-05
CN105867883A (zh) 2016-08-17
CN109960398B (zh) 2023-11-07
JP6627103B2 (ja) 2020-01-08
TW201616352A (zh) 2016-05-01
EP3076294B1 (en) 2021-05-26
KR20160027997A (ko) 2016-03-10
EP3082040A1 (en) 2016-10-19
CN105867883B (zh) 2019-07-09
TW201616353A (zh) 2016-05-01
US20220326756A1 (en) 2022-10-13
US20160116963A1 (en) 2016-04-28
EP2684127A4 (en) 2014-11-26
KR20160027996A (ko) 2016-03-10
US9501135B2 (en) 2016-11-22
JP2015187878A (ja) 2015-10-29
EP3082040B1 (en) 2020-03-18
US20140223166A1 (en) 2014-08-07
KR20130141668A (ko) 2013-12-26
US20160116964A1 (en) 2016-04-28
EP3540600A1 (en) 2019-09-18
CN105867584A (zh) 2016-08-17
EP2684127A2 (en) 2014-01-15
US10534424B2 (en) 2020-01-14
JP6054467B2 (ja) 2016-12-27
CN109960398A (zh) 2019-07-02
JP5750172B2 (ja) 2015-07-15
WO2012125200A2 (en) 2012-09-20
US20160116965A1 (en) 2016-04-28
WO2012125200A3 (en) 2012-11-15
CN105867584B (zh) 2019-07-26
US8683243B2 (en) 2014-03-25
JP2020035472A (ja) 2020-03-05

Similar Documents

Publication Publication Date Title
KR101600152B1 (ko) 이기종 멀티-코어 시스템에 대한 동적 코어 선택
KR101507702B1 (ko) 제 1 코어 유형과 제 2 코어 유형을 결합함으로써 전력 성능 효율을 개선하는 장치, 방법 및 시스템

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 5