KR101600152B1 - 이기종 멀티-코어 시스템에 대한 동적 코어 선택 - Google Patents
이기종 멀티-코어 시스템에 대한 동적 코어 선택 Download PDFInfo
- 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
Links
- 238000012545 processing Methods 0.000 claims abstract description 149
- 238000000034 method Methods 0.000 claims description 47
- 238000012544 monitoring process Methods 0.000 claims description 24
- 230000011664 signaling Effects 0.000 claims description 9
- 238000005457 optimization Methods 0.000 description 24
- 238000006243 chemical reaction Methods 0.000 description 17
- 238000013519 translation Methods 0.000 description 12
- 239000000872 buffer Substances 0.000 description 11
- 238000013507 mapping Methods 0.000 description 10
- 238000013461 design Methods 0.000 description 8
- 230000003068 static effect Effects 0.000 description 7
- 238000013459 approach Methods 0.000 description 6
- 230000007246 mechanism Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 230000009466 transformation Effects 0.000 description 5
- 239000003795 chemical substances by application Substances 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 238000000638 solvent extraction Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000002596 correlated effect Effects 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000005265 energy consumption Methods 0.000 description 2
- 239000011521 glass Substances 0.000 description 2
- 230000009249 intrinsic sympathomimetic activity Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 230000001131 transforming effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 238000010792 warming Methods 0.000 description 2
- 241000590913 Euploea core Species 0.000 description 1
- 206010000210 abortion Diseases 0.000 description 1
- 230000003213 activating effect Effects 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 210000004027 cell Anatomy 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000875 corresponding effect Effects 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 238000005259 measurement Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000003607 modifier Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 210000000352 storage cell Anatomy 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/329—Power saving characterised by the action undertaken by task scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F1/00—Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
- G06F1/26—Power supply means, e.g. regulation thereof
- G06F1/32—Means for saving power
- G06F1/3203—Power management, i.e. event-based initiation of a power-saving mode
- G06F1/3234—Power saving characterised by the action undertaken
- G06F1/3287—Power saving characterised by the action undertaken by switching off individual functional units in the computer system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3466—Performance evaluation by tracing or monitoring
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
- G06F9/4893—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues taking into account power or heat criteria
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5094—Allocation of resources, e.g. of the central processing unit [CPU] where the allocation takes into account power or heat criteria
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3409—Recording 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording 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/3452—Performance evaluation by statistical analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/81—Threshold
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/865—Monitoring of software
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/501—Performance criteria
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy efficient computing, e.g. low power processors, power management or thermal management
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Reducing energy consumption in communication networks
- Y02D30/50—Reducing 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
본 발명은 프로세서의 분야에 관한 것으로서, 상세하게는, 전력 및 성능 효율을 최적화하는 것에 관한 것이다.
반도체 처리 및 논리 설계의 진보는 집적 회로 디바이스에 존재할 수 있는 논리의 양의 증가를 가능하게 해주었다. 그 결과, 컴퓨터 시스템 구성이 시스템에 있는 단일 또는 다중 집적 회로로부터 개별 집적 회로에 존재하는 다수의 코어, 다수의 하드웨어 스레드 및 다수의 논리 프로세서로 진화하였다. 프로세서 또는 집적 회로는 통상적으로 단일의 물리 프로세서 다이를 포함하고 있으며, 이 경우 프로세서 다이는 임의의 수의 코어, 하드웨어 스레드 또는 논리 프로세서를 포함할 수 있다.
집적 회로 상의 처리 요소 - 코어, 하드웨어 스레드 및 논리 프로세서 - 의 수가 계속 증가하는 것은 더 많은 작업이 병렬로 달성될 수 있게 해준다. 그렇지만, 모든 비순차 코어를 이용하는 프로세서는 어떤 상황 하에서 전력 비효율 및/또는 성능 비효율을 가져올 수 있다. 그 결과, 전력-성능 효율 문제에 대처하기 위해 어떤 하드웨어-소프트웨어 동시 설계 시스템이 개발되었다. 그 시스템에서, 광폭 단순 순차 프로세서가 이용될 수 있는 반면, 소프트웨어는 순차 하드웨어에서 효율적으로 실행하기 위해 프로그램을 최적화하고 스케줄링한다.
그렇지만, 하드웨어-소프트웨어 동시 설계 시스템은 통상적으로 다음과 같은 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은 본 발명의 일 실시예에 따른 코어 스위칭 동작 및 오버헤드를 나타낸 도면.
도 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 처리 코어의 상기 모니터링된 성능 및 수집된 통계에 적어도 부분적으로 기초하여, 상기 이기종 멀티-코어 처리 시스템의 제2 처리 코어에서 상기 프로그램 코드를 실행하는 성능을 예측하는 단계 - 상기 제2 처리 코어는 상기 제1 유형과 상이한 제2 유형임 -; 및
상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하는 단계를 포함하는 방법. - 제1항에 있어서, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제2 처리 코어에 대해 저전력 상태로부터 파워업(power up)하는 단계를 더 포함하는 방법.
- 제1항에 있어서, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제1 처리 코어에 대해 저전력 상태로 파워다운(power down)하는 단계를 더 포함하는 방법.
- 제1항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어(out-of-order processing core)를 포함하고, 상기 제2 처리 코어는 순차 처리 코어(in-order processing core)를 포함하는 방법.
- 제1항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 방법.
- 제1항에 있어서, 상기 제2 처리 코어의 성능을 예측하는 단계는 상기 제1 처리 코어 및 상기 제2 처리 코어 둘 다에서 복수의 코드 세그먼트를 실행하는 단계, 상기 코드 세그먼트을 실행하는 동안 상기 제1 처리 코어 및 상기 제2 처리 코어의 각자의 성능 정보 및 통계를 수집하는 단계, 및 최적합 함수(best fit function) F(상기 제1 처리 코어의 성능 정보 및 통계)와 상기 제2 처리 코어의 성능 사이의 차이가 최소화되도록 F를 결정하는 단계를 포함하는 방법.
- 머신에 의해 실행될 때, 상기 머신으로 하여금 제1항의 방법을 수행하게 하는 코드를 포함하는 머신 판독가능 매체.
- 이기종 멀티-코어 처리 시스템으로서,
집적 회로를 포함하고, 상기 집적 회로는
프로그램 코드를 실행하도록 구성된 제1 유형의 제1 처리 코어;
상기 프로그램 코드를 실행하도록 구성된 제2 유형의 제2 처리 코어 - 상기 제1 유형은 상기 제2 유형과 상이함 -; 및
코드 분배 모듈(code distribution module)을 포함하며, 상기 코드 분배 모듈은 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능을 모니터링하고 통계를 수집하고, 상기 프로그램 코드가 상기 제1 처리 코어에서 실행중인 동안, 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 상기 모니터링된 성능 및 수집된 통계에 적어도 부분적으로 기초하여, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 성능을 예측하며, 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하도록 구성되는 이기종 멀티-코어 처리 시스템. - 제8항에 있어서, 상기 코드 분배 모듈은 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제2 처리 코어에 대해 저전력 상태로부터 파워업하도록 구성되는 이기종 멀티-코어 처리 시스템.
- 제8항에 있어서, 상기 코드 분배 모듈은 상기 제2 처리 코어에서 상기 프로그램 코드를 실행하는 상기 예측된 성능이 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 성능보다 나을 때, 상기 제1 처리 코어에 대해 저전력 상태로 파워다운 하도록 더 구성되는 이기종 멀티-코어 처리 시스템.
- 제8항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
- 제8항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
- 이기종 멀티-코어 처리 시스템에서 코어들을 동적으로 스위칭하는 방법으로서,
제1 수의 사이클 동안 상기 이기종 멀티-코어 처리 시스템의 제1 처리 코어에서 프로그램 코드를 실행하는 단계 - 상기 제1 처리 코어는 제1 유형임 -;
상기 이기종 멀티-코어 처리 시스템의 제2 처리 코어에 대한 파워업을 신호하는 단계 - 상기 제2 처리 코어는 상기 제1 유형과 상이한 제2 유형임 -;
제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 제1 성능 척도를 수집하는 단계;
상기 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 나을 때, 상기 제2 처리 코어가 파워업된 후 상기 프로그램 코드가 상기 제2 처리 코어에서 실행되기 전에, 상기 제2 처리 코어에 대한 파워다운을 신호하고 상기 제1 처리 코어에서 상기 프로그램 코드의 실행을 계속하는 단계; 및
상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 낫지 않을 때, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하고 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하는 단계를 포함하는 방법. - 제13항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 낫지 않을 때, 상기 프로그램 코드의 실행을 상기 제2 처리 코어로부터 다시 상기 제1 처리 코어로 스위칭하는 단계, 및 상기 제2 처리 코어에 대한 파워다운을 신호하는 단계를 더 포함하는 방법.
- 제14항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 나을 때, 상기 제1 처리 코어에 대한 파워다운을 신호하는 단계 및 상기 이전에 결정된 코어 성능 척도를 상기 제1 성능 척도와 상기 제2 성능 척도의 평균으로 설정하는 단계를 더 포함하는 방법.
- 제13항에 있어서, 상기 제2 처리 코어에 대한 파워업을 신호하는 단계는 상기 제1 수의 사이클 및 상기 제2 수의 사이클의 합의 종료보다 제3 수의 사이클 이전에 파워업을 신호하는 단계를 포함하는 방법.
- 제13항에 있어서, 상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 나을 때, 상기 이전에 결정된 코어 성능 척도를 상기 이전에 결정된 코어 성능 척도와 팽창 인자(inflation factor)를 곱한 것으로 설정하는 단계를 더 포함하는 방법.
- 제13항에 있어서, 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 강제로 스위칭하는 단계, 및 상기 제1 성능 척도과 상기 이전에 결정된 코어 성능 척도의 매 K번의 비교에 대해 적어도 한번, 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하는 단계 - K는 자연수임 - 를 더 포함하는 방법.
- 제13항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 방법.
- 제13항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 방법.
- 머신에 의해 실행될 때, 상기 머신으로 하여금 제13항의 방법을 수행하게 하는 코드를 포함하는 머신 판독가능 매체.
- 이기종 멀티-코어 처리 시스템으로서,
집적 회로를 포함하고, 상기 집적 회로는
프로그램 코드를 실행하도록 구성된 제1 유형의 제1 처리 코어;
상기 프로그램 코드를 실행하도록 구성된 제2 유형의 제2 처리 코어 - 상기 제1 유형은 상기 제2 유형과 상이함 -; 및
코드 분배 모듈을 포함하며, 상기 코드 분배 모듈은 제1 수의 사이클 동안 상기 제1 처리 코어에서 상기 프로그램 코드를 실행시키고, 상기 제2 처리 코어에 대한 파워업을 신호하며, 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제1 처리 코어의 제1 성능 척도를 수집하도록 구성되고;
상기 제1 성능 척도가 이전에 결정된 코어 성능 척도보다 나을 때, 상기 제2 처리 코어가 파워업된 후 상기 프로그램 코드가 상기 제2 처리 코어에서 실행되기 전에, 상기 코드 분배 모듈은 상기 제2 처리 코어에 대한 파워다운을 신호하고 상기 제1 처리 코어에서 상기 프로그램 코드의 실행을 계속하도록 구성되고;
상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 낫지 않을 때, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 스위칭하고 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하도록 구성되는 이기종 멀티-코어 처리 시스템. - 제22항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 낫지 않을 때, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제2 처리 코어로부터 다시 상기 제1 처리 코어로 스위칭하고, 상기 제2 처리 코어에 대한 파워다운을 신호하도록 구성되는 이기종 멀티-코어 처리 시스템.
- 제23항에 있어서, 상기 제2 성능 척도가 상기 제1 성능 척도보다 나을 때, 상기 코드 분배 모듈은 상기 제1 처리 코어에 대한 파워다운을 신호하고 상기 이전에 결정된 코어 성능 척도를 상기 제1 성능 척도와 상기 제2 성능 척도의 평균으로 설정하도록 구성되는 이기종 멀티-코어 처리 시스템.
- 제22항에 있어서, 상기 제2 처리 코어에 대한 파워업을 신호하는 것은 상기 제1 수의 사이클 및 상기 제2 수의 사이클의 합의 종료보다 제3 수의 사이클 이전에 파워업을 신호하는 것을 포함하는 이기종 멀티-코어 처리 시스템.
- 제22항에 있어서, 상기 코드 분배 모듈은 상기 제1 성능 척도가 상기 이전에 결정된 코어 성능 척도보다 나을 때, 상기 이전에 결정된 코어 성능 척도를 상기 이전에 결정된 코어 성능 척도와 팽창 인자를 곱한 것으로 설정하도록 더 구성되는 이기종 멀티-코어 처리 시스템.
- 제22항에 있어서, 상기 코드 분배 모듈은 상기 프로그램 코드의 실행을 상기 제1 처리 코어로부터 상기 제2 처리 코어로 강제로 스위칭하고 상기 제1 성능 척도와 상기 이전에 결정된 코어 성능 척도의 매 K번의 비교에 대해 적어도 한번, 상기 제2 수의 사이클 동안 상기 프로그램 코드를 실행하는 상기 제2 처리 코어의 제2 성능 척도를 수집하도록 더 구성되고, K는 자연수인 이기종 멀티-코어 처리 시스템.
- 제22항에 있어서, 상기 제1 처리 코어는 비순차 처리 코어를 포함하고, 상기 제2 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
- 제22항에 있어서, 상기 제2 처리 코어는 비순차 처리 코어를 포함하고, 상기 제1 처리 코어는 순차 처리 코어를 포함하는 이기종 멀티-코어 처리 시스템.
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)
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)
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)
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 |
-
2011
- 2011-03-11 US US13/046,031 patent/US8683243B2/en active Active
- 2011-12-28 EP EP16167191.2A patent/EP3082041B1/en active Active
- 2011-12-28 CN CN201910265983.4A patent/CN109960398B/zh active Active
- 2011-12-28 EP EP16167185.4A patent/EP3082040B1/en active Active
- 2011-12-28 EP EP19170972.4A patent/EP3540600B1/en active Active
- 2011-12-28 KR KR1020167005133A patent/KR101901037B1/ko active IP Right Grant
- 2011-12-28 KR KR1020167005134A patent/KR101899695B1/ko active IP Right Grant
- 2011-12-28 CN CN201610168094.2A patent/CN105867584B/zh active Active
- 2011-12-28 EP EP16167193.8A patent/EP3076294B1/en active Active
- 2011-12-28 KR KR1020167005132A patent/KR101908202B1/ko active IP Right Grant
- 2011-12-28 JP JP2013557709A patent/JP5750172B2/ja active Active
- 2011-12-28 CN CN201610168115.0A patent/CN105843362B/zh active Active
- 2011-12-28 KR KR1020137025102A patent/KR101600152B1/ko active Application Filing
- 2011-12-28 WO PCT/US2011/067630 patent/WO2012125200A2/en unknown
- 2011-12-28 EP EP11860992.4A patent/EP2684127B1/en active Active
- 2011-12-28 CN CN201610168003.5A patent/CN105867883B/zh active Active
- 2011-12-28 CN CN201180069184.1A patent/CN103443769B/zh active Active
- 2011-12-29 TW TW100149541A patent/TWI529625B/zh active
- 2011-12-29 TW TW105101908A patent/TWI595420B/zh active
- 2011-12-29 TW TW105101907A patent/TWI595419B/zh active
- 2011-12-29 TW TW105101906A patent/TWI605390B/zh active
-
2014
- 2014-01-31 US US14/169,955 patent/US9501135B2/en active Active
-
2015
- 2015-05-18 JP JP2015101264A patent/JP6054467B2/ja active Active
-
2016
- 2016-01-02 US US14/986,678 patent/US10437319B2/en active Active
- 2016-01-02 US US14/986,676 patent/US10534424B2/en active Active
- 2016-01-02 US US14/986,677 patent/US10437318B2/en active Active
- 2016-01-12 JP JP2016003910A patent/JP6661865B2/ja active Active
- 2016-01-12 JP JP2016003888A patent/JP6627102B2/ja active Active
- 2016-01-12 JP JP2016003917A patent/JP6627103B2/ja active Active
-
2019
- 2019-07-11 US US16/508,916 patent/US20190332158A1/en not_active Abandoned
- 2019-10-31 JP JP2019198170A patent/JP6938593B2/ja active Active
-
2022
- 2022-06-28 US US17/852,066 patent/US11755099B2/en active Active
Patent Citations (3)
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
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 |