JP6627103B2 - 異種マルチコアシステム用のダイナミックコア選択 - Google Patents

異種マルチコアシステム用のダイナミックコア選択 Download PDF

Info

Publication number
JP6627103B2
JP6627103B2 JP2016003917A JP2016003917A JP6627103B2 JP 6627103 B2 JP6627103 B2 JP 6627103B2 JP 2016003917 A JP2016003917 A JP 2016003917A JP 2016003917 A JP2016003917 A JP 2016003917A JP 6627103 B2 JP6627103 B2 JP 6627103B2
Authority
JP
Japan
Prior art keywords
core
code
execution
performance
processor core
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
JP2016003917A
Other languages
English (en)
Other versions
JP2016095872A (ja
Inventor
ウー、ユーフェン
フー、シーリアン
ボリン、エドソン
ワン、チェン
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2016095872A publication Critical patent/JP2016095872A/ja
Application granted granted Critical
Publication of JP6627103B2 publication Critical patent/JP6627103B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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 or 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)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Probability & Statistics with Applications (AREA)
  • Evolutionary Biology (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Devices For Executing Special Programs (AREA)
  • Power Sources (AREA)
  • Microcomputers (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Error Detection And Correction (AREA)
  • Stored Programmes (AREA)

Description

本発明は、特に電力およびパフォーマンスの効率を最適化するためのプロセッサ分野に関する。
半導体処理および論理設計の進化により、集積回路素子に含まれてよい論理量を増やすことが可能になっている。この結果、コンピュータシステム構成は、1つのシステムに1つまたは複数の集積回路が存在しているものから、個々の集積回路に、複数のコア、複数のハードウェアスレッド、および複数の論理プロセッサが存在するものへと進化を遂げている。通常、1つのプロセッサまたは集積回路は、1つの物理プロセッサダイを含んでおり、プロセッサダイは、任意の数のコア、ハードウェアスレッド、または論理プロセッサを含んでよい。
増加の一途を辿る、集積回路上のプロセッサエレメント(コア、ハードウェアスレッド、および論理プロセッサ)によって、より多くのタスクを並列処理することが可能となっている。しかし、全てアウトオブオーダコアを利用するプロセッサは、条件によって電力非効率および/またはパフォーマンスの非効率に陥りやすい。この結果、電力−パフォーマンスの効率問題に対処すべく、ハードウェア−ソフトウェア共同設計システムが開発された。このシステムでは、幅広く、簡単なインオーダプロセッサを利用することができ、同時に、ソフトウェアが、インオーダハードウェアで効率的に実行されるようにプログラムを最適化させたりスケジュールしたりすることができる。
しかし、ハードウェア−ソフトウェア共同設計システムでは、通常、2つの悪影響が指摘されている。つまり、(1)バイナリトランスレータを利用するコードの変換および/または最適化によって、短い実行タスクの、応答時間制約の小さい一部のアプリケーションの処理速度が落ち(バイナリ変換の脆弱性)、(2)インオーダプロセッサが、並列実行により適している一部のプログラムのスタイルにはパフォーマンスがよくない(インオーダの脆弱性)がある。
本発明を例示するが、添付図面によって制限はされない。
2つの異種コアを含むプロセッサの一実施形態を示す。 ネイティブコア、ソフトウェア管理されているコア、およびコア分配モジュールを含むプロセッサの一実施形態を示す。 最大のパフォーマンスおよび節電効果を達成するために、コア間にコードを分配するプロセッサのフロー図の一実施形態を示す。 最大のパフォーマンスおよび節電効果を達成するために、アウトオブオーダコアおよびインオーダコアにコードを分配する方法のフロー図の一実施形態を示す。 最大のパフォーマンスおよび節電効果を達成するために、アウトオブオーダコアおよびインオーダコアにコードを分配する方法のフロー図の別の一実施形態を示す。 本発明の一実施形態におけるコア切り替えオペレーションおよびオーバヘッドを示す。
異種コンピューティング戦略は、それぞれのコアが特定のコードを実行するのには効率がよいが、他のコードを実行するのには効率が悪いような複数のコアを統合するものである。ランタイムソフトウェア(SW)およびハードウェア(HW)は、協力して、入力プログラムを、別々のコアに適したコードセグメントに分割して、これらそれぞれを最も適したコアの上で実行して、同時に、他のコアを低電力状態にしておき、低電力およびエネルギー消費において高いパフォーマンスを達成する。このようなシステムの一例は、少なくとも1つの広帯域インオーダコアと、少なくとも1つの狭帯域アウトオブオーダコアとからなり、本発明の実施形態においては、この異質システムが、アウトオブオーダコアのパフォーマンスを向上させ、且つ、エネルギーおよび電力の一部しか消費しない。このタイプのコンピューティングシステムの主要な課題は、プログラムの振る舞いの変化を迅速に特定して、適切なコアにランタイムにおいて効率的にスイッチする、ということである。本発明の実施形態では、ランタイムソフトウェアおよび/またはハードウェアを利用して、同じプログラムの別々のコードセグメントを最も適したコアの実行を自動的に切り換えて、シングルスレッドプログラムのパフォーマンス速度を顕著に速くする。
以下の記載では、具体的なプロセッサコアの種類、具体的なプロセッサ構成、具体的なホットコード領域特定アルゴリズム、変換/最適化コードを格納する具体的な構造、ハードウェア/ソフトウェアの間のタスクの具体的な分割法、具体的なプロセッサユニット/論理等についての例など、複数の具体的な詳細を述べ、本発明の完全な理解を提供している。しかし当業者には、本発明を実施するためにこれらの具体的な詳細が必ずしも利用されなくてもよいことが明らかである。また、公知のコンポーネントまたは方法(たとえば特定およびその他のプロセッサアーキテクチャ、記述されたアルゴリズム用の具体的な論理回路/コード、具体的なコード実装、具体的なバイナリ変換の詳細、およびその他のマイクロプロセッサの具体的なオペレーションの詳細)は、詳述を避けて、本発明の不当にあいまいにしないようにしている箇所もある。
一実施形態では、ここの記載する方法および装置は、最大のパフォーマンスおよび節電効果を実現するために、ソフトウェア管理されているコアをもつネイティブコアを実装することである。特に、コア間の協力は、まず一義的に、アウトオブオーダコアおよびインオーダの共同設計コアを参照して説明する。しかし、ここに記載する装置および方法は、これらに限定はされず、異種コア間でコードを分配するいずれの様式に実装することもできる。たとえば、ここで記載するコード分配方法および装置は、固有の命令セットアーキテクチャ(ISA)を実装する2つのアウトオブオーダコアとともに利用することもできる。さらに、これらコアの間の協力が、しばしば、ハードウェアメカニズムおよびコード/ソフトウェアの間で分割されるものとして記載される場合がある。しかし、後述する方法および装置を実装するために利用可能なハードウェア、ソフトウェア、および/またはファームウェアは適宜組み合わせまたは排他的利用することが可能である。
図1は、複数のコアを含む1つのプロセッサの一実施形態を示している。プロセッサ100は、マイクロプロセッサ、エンベデッドプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、またはコードを実行するその他のデバイス等の任意のプロセッサであってよい。一実施形態では、プロセッサ100は、それぞれ異なる種類のコア101および102という少なくとも2つのコアを含む。しかし、プロセッサ100は、任意の数の処理エレメントを含んでよい。
一実施形態では、処理エレメントは、スレッドユニット、スレッドスロット、処理ユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、および/または、プロセッサの状態(たとえば実行状態またはアーキテクチャ状態)を維持することができる任意の他のエレメントのことであってよい。言い換えると、一実施形態において処理エレメントとは、ソフトウェアスレッド、オペレーティングシステム、アプリケーション、その他のコードといったコードに独立して関連付けることができる任意のハードウェアのことであってよい。物理的なプロセッサは通常、コアまたはハードウェアスレッドといった任意の数の他の処理エレメントを潜在的に含むことができる集積回路のことであってよい。
コアは、それぞれ独立して維持されるアーキテクチャ状態が少なくともいくつかの専用実行リソースと関連付けられている独立アーキテクチャ状態を維持することができる集積回路上に位置する論理のことを指す場合が多い。コアに対して、ハードウェアスレッドとは、通常、独立して維持されるアーキテクチャ状態が実行リソースに対するアクセスを共有する独立アーキテクチャ状態を維持することができる集積回路上に位置する任意の論理のことである。上記からわかるように、特定のリソースが共有されている場合、他のリソースはアーキテクチャ状態専用であり、ハードウェアスレッドとコアとの境目は曖昧である。しかししばしば、コアとハードウェアスレッドとは、オペレーティングシステムから個別の論理プロセッサとみられており、オペレーティングシステムは、各論理プロセッサ上での動作を個々にスケジュールすることができる。
物理的プロセッサ100(図1に示す)は、2つのコア(コア101および102)を含む。ここでコア101およびコア102は、異質コアと考えることができる(つまり、それぞれ異なる構成、機能ユニットおよび/または論理をもつコアのこと)。一実施形態では、コア101は、アウトオブオーダプロセッサコアを含み、コア102が、インオーダプロセッサコアを含む。しかしコア101および102は、任意のタイプのコアから個々に選択されてよい。しかし説明を続けるために、図1に示す機能ユニットを以下で詳述する。
記載したようにコア101は、2つのハードウェアスレッド101aおよび101bを含み、これらは、ハードウェアスレッドスロット101aおよび101bとも称される場合がある。これに対して、コア102は、1つのハードウェアスレッド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では、他のより小さいリソース(たとえば、リネームアロケータ論理130の命令ポインタおよびリネーミング論理)も、スレッド101aおよび101b用に複製されてよい。一部のリソース(たとえば、リオーダ/リタイヤユニット135のリオーダバッファ、命令−変換バッファ(ITLB)120、ロード/格納バッファ、およびキュー)が、分割によって共有されてもよい。他のリソース(たとえば、汎用内部レジスタ、ページ−テーブルベースレジスタ、低レベルデータ−キャッシュおよびデータ−TLB150、実行ユニット140、およびアウトオブオーダユニット135の幾つかの部分)が、潜在的に完全共有されてもよい。
しばしばプロセッサ100は、完全共有されていたり、分割により共有されたり、処理エレメント専用であったりしてよい他のリソースを含む場合がある。図1では、プロセッサの例示的な論理ユニット/リソースをもつ、純粋に例であるプロセッサの実施形態が示されている。プロセッサは、これら機能ユニットのいずれかを含んでも、含まなくてもよく、同時に、図示されていない任意の他の公知の機能ユニット、論理、またはファームウェアを含んでもよい。図では、コア101は、単純化されたアウトオブオーダ(OOO)プロセッサコアとして示されている。OOOコアは、実行/とられるべき分岐を予測するための分岐対象バッファ(BTB)120、および、命令用にアドレス変換エントリを格納するための命令−変換バッファ(I−TLB)120を含む。
コア101はさらに、フェッチユニット120に連結されて、フェッチされたエレメントをデコードするためのデコードモジュール125を含む。一実施形態では、フェッチ論理は、それぞれ、スレッドスロット101a、101bに関連付けられている個々のシーケンサを含む。通常、コア101は、プロセッサ100上で実行可能な命令を定義/特定する第1の命令セットアーキテクチャ(ISA)に関連付けられている。ここで、しばしば、第1のISAの一部である機械コード命令が、実行すべき命令またはオペレーションを参照/特定する、命令の一部(オペコードと称される)を含む。デコード論理125は、これら命令を自身のオペコードから認識して、デコードされた命令を、第1のISAが定義する処理を受けさせるためにパイプラインに送る回路を含んでいる。
一例では、アロケータリネーマブロック130が、結果を処理する命令を格納するリソース(レジスタファイル)をリザーブするアロケータを含む。しかしスレッド101aおよび101bは、潜在的に、アウトオブオーダ実行をすることができ、アロケータおよびリネーマブロック130も、他のリソース(たとえば、命令ステータスを追跡するためのリオーダバッファ)を含んでよい。ユニット130は、さらに、プログラム/命令参照レジスタをプロセッサ100内部の他のレジスタにリネームするレジスタリネーマを含んでよい。リオーダ/リタイヤユニット135は、コンポーネント(たとえば上述したリオーダバッファ、ロードバッファ、および格納バッファ)を含み、アウトオブオーダ実行をサポートして、後では、アウトオブオーダ実行された命令のインオーダリタイヤをサポートする。
スケジューラおよび実行ユニットブロック140は、一実施形態では、実行ユニットの命令/オペレーションをスケジュールするためのスケジューラユニットを含む。たとえば、浮動小数点命令が、利用可能な浮動小数点実行ユニットを有する実行ユニットの一部に対してスケジュールされる。実行ユニットに関連づけられているレジスタファイルも、結果を処理する情報命令を格納するために含まれている。例である実行ユニットは、浮動小数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、格納実行ユニット、およびその他の公知の実行ユニットを含む。
低レベルデータキャッシュおよびデータアドレス変換ルックアップ/サイドバッファ(D−TLB)150が、実行ユニット140に連結されている。データキャッシュは、エレメントに最近利用された/操作されたものを格納する(たとえば、メモリコヒーレンシー状態に潜在的に維持されているデータオペランド)。D−TLBは、物理的アドレス変換に対して最近の仮想/リニアを格納する。具体的な例としては、プロセッサは、物理的メモリを複数の仮想ページに分割するためにページテーブル構造を含んでよい。
上述したように、一実施形態では、コア102が、インオーダ、共同設計コアを含む。この結果、図1は、インオーダコアの簡略化されたパイプラインを示している。このパイプラインは、フェッチユニット121、デコードユニット126、実行ユニット(1または複数)141、および低レベルデータキャッシュ151を含む。これらユニットは、コア101の対応するユニットに同様に動作してよい。しかしインオーダコアでは、命令/オペレーションが、プログラム順に実行される(コア101におけるような潜在的なアウトオブオーダ実行ではなく)。一例としては、アウトオブオーダコア101が、ネイティブコアと称され、インオーダコア102は、共同設計コアと称される。この代わりに、インオーダコア102が、ネイティブコアであり、アウトオブオーダコア101が共同設計コアであってもよい。
ここで、コア101および102は、最近フェッチされたエレメントをキャッシュするための、より高レベルまたはさらに外側の(further-out)キャッシュ110に対するアクセスを共有する。ここで、より高レベルまたはさらに外側とは、キャッシュレベルが増加する、または、実行ユニットからさらに離れることを意味している。一実施形態では、より高レベルのキャッシュ110が、最終レベルデータキャッシュである(第2または第3レベルデータキャッシュのような、プロセッサ100のメモリ階層で最終のキャッシュ)。しかし、より高レベルキャッシュ110は、命令キャッシュに関連付けられていれば、または、命令キャッシュを含んでいればいいのであって、これに限定はされない。追跡キャッシュ(命令キャッシュの一種)が、この代わりに、デコーダ125の後に連結されていて、最近デコードされたトレースを格納してもよい。
図示されている構成では、プロセッサ100はさらに、リンクインタフェースモジュール105を含み、プロセッサ100外のデバイス(たとえば、システムメモリ175、チップセット、ノースブリッジ、その他の集積回路(たとえば「システムオンチップ(system on a chip)(SOC)」等の1つの集積回路実装)を含む)と通信する。メモリ175は、プロセッサ100専用であっても、システム内の他のデバイスと共有されてもよい。メモリ175の種類のよくある例としては、ダイナミックランダムアクセスメモリ(DRAM)、スタティックRAM(SRAM)、不揮発性メモリ(NVメモリ)、その他の公知の記憶デバイスが含まれる。
一実施形態では、コードが、コア101および102の間で、最大のパフォーマンスおよび節電効果に基づいて分配される。たとえば、コード領域が、2つのコア101、102のいずれかにより良く実行されるように特定される。この結果、これらコード領域のいずれかに遭遇したり、これらコード領域のいずれかを検知したりするとき、このコードセクションが適切な分配されることになる。これら領域の特定は、静的に(コードの実行前、たとえばプログラムプロフィール分析によって)行われてもよいし、ハードウェア、ソフトウェア、またはこれらの組み合わせによって動的に(コードの実行中に)行われてもよい。
動的な方法の一例では、1つのプロセッサコア(たとえばコア101)が、パフォーマンス、節電、ネイティブISA,任意の他の公知の処理の考慮、またはこれらの組み合わせに基づいてコードを実行するデフォルトコアとして選択されてよい。そして、コア101での実行状態が良くない、または、コア102での実行状態のほうが良いと見込まれるデフォルトコアの領域を特定する。後でこれら特定されたコードのセクションに遭遇すると、実行されるべくコア102に分配される。これら領域のコア102における実行には、ウォームアップコア101に対する投機的、ランアヘッド実行、コア102のこれら領域に対するシリアル実行と、これら領域の結果に依存するコア101の他の領域に対する実行との組み合わせ、または、これらの領域の同時実行と、コア102の他のコードの実行との組み合わせが含まれてよい。
静的な方法の一例では、コンパイラまたはユーザが、あるコアその他のコアでより良く実行されるコードのセクションを特定してよい(たとえば、命令またはデマケーションにより)。ここで、コア101は、これらの命令に遭遇するまではコードを実行する。コア102からの監視に呼応する、または、コア102単独の判断(トリガ)によって、特定されたコードのセクションを次に、遭遇した命令に基づいてコア102で実行する。
1つのコアまたは別のコアでの実行するほうが良いコードのセクションの特定を、動的または静的に行うかによって、一部の実施形態では、ネイティブコードを別のコアで実行するよう変換したり、および/または、最適化したりする。たとえば、コア101が、第1のISAタイプを認識するデコード論理125を含み、コア102が、第2のISAタイプを認識するデコード論理126を含むと想定する。この場合、第1のISAタイプのコード領域が、コア102で実行され、次に、コード領域を第2のISAタイプに変換して、コア102で実行させる。ISAタイプの間の変換は純粋な例である。この代わりに、コア101で実行されるアウトオブオーダ最適化コードを、インオーダコア102の実行用に再度最適化する。このシナリオでは、コア102は、同じもの、またはコア101の同じISAのサブセットを含んでよい。または、最適化を、コードに行って、単純な、広帯域のイノーダコアに確実により効率的に実行されるようにしてもよい。
コードを効率的に分配するための、コア101とコア102との間の協力は、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせで実行されてもよい。上述した、コード領域を特定するために動的な方法に関する例をさらに照査して、協力メカニズムの実施形態を説明する。この例では、ネイティブフォーマットのプログラムコードが、アウトオブオーダコア101での実行用に最適化される。コード領域またはプログラムコードの実行中に、コア101および/またはコア102に関するモニタハードウェアが、コード領域のコア101の実行に関するパフォーマンスを決定するために利用されてよい。この代わりに、ソフトウェア、OSコード、マイクロコード、またはその他のコード等のモニタハードウェアが、コア102で実行され、これによりコード領域の実行の際のコア101のパフォーマンスを判断/監視してもよい。そのコード領域がコア102で実行されるほうがよいと判断されると、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせを利用して、コア102で実行するコード領域を変換および/または最適化してよい。
この結果、コア101がコード領域に再度遭遇すると(命令ポインタがコード領域を参照すると)、コード領域を識別する識別子命令がフェッチされデコードされ、または、コード領域を特定する別の方法が検知され、次に、コード領域の変換/最適化されたバージョンがコア102で実行される。一実施形態では、コード領域がコア102で実行されている間、コア101は、他のコード領域を同時に実行して、プログラム実行パフォーマンス全体を高める。同時または並列実行は、コア101、102での別個のソフトウェアスレッド実行を含んでよい。
これに対して、スレッドは、コア101、102でパイプライン実行されてよい。このシナリオの一例として、2つのソフトウェアスレッドの各々が、多くのコード段階(ホット、コールドなど)を含むと想定する。ここで、第1のステッドからのコールドコードは、コア101で実行されてよく、ホットな領域に遭遇すると、変換されたホットな領域をコア102で実行する。コア102でコードの変換されたホットな領域が実行されている間、第2のスレッドからのコールドコードがコア101で実行されてよい。コア102では、第1の変換されたホットコードの実行が完了すると、第2のソフトウェアスレッドからの別のホットな領域の実行が開始されてよい。この例からわかるように、コードの段階は、パイプラインタイプの実行を生じる各コアにインタリーブされてよい。別の実施形態では、コードが、2つのコア(コア101のコード領域、コア102で特定されたコード領域、その後に、コア101の別のコード領域といったように)に対して連続実行されてよい。
加えて、コード領域がコア102での実行のために最初に特定された場合であっても、その実行のパフォーマンスを監視することができる。次に、最大のパフォーマンスおよび節電効果を達成するためにどのコアがコード領域の実行に最も適しているかを判断するために、両方のコアのパフォーマンスが考慮されてもよい。たとえば、あるコード領域が、コア102上で変換されたコードとして実行されるものとして特定されたが、コア102でのパフォーマンスがコア101でのパフォーマンスを下回るような場合(または、コア102でのパフォーマンス利得が、コア201で実行される際の節電量を上回らないような場合)、後で遭遇したときに、コア101に対してコードを再分配することができる。
図1は、それぞれ別のモジュール、ユニット、および/または論理を表す、例示的なプロセッサの抽象的な論理図である。しかし、ここで記載する方法および装置を利用するプロセッサは、例示したユニットを含まなくてもよい点を理解されたい。プロセッサは、示されているユニットの一部または全てを含まなくてもよい。さらに、記載の大半は、アウトオブオーダプロセッサコアとインオーダプロセッサコアとを参照して行われる。しかし、上述したように、2つのプロセッサコアは、異種のコアバージョンであればいずれであってもよい(たとえば、ネイティブコアとソフトウェア管理されているコア等)。加えて、図1は2つのコアのみを示しているが、プロセッサは任意の数のコアを含んでよい(たとえば、同じタイプの複数のコア、および、互いにタイプの異なる2を超える数のコア)。
図1は、外部メモリコントローラ(コントローラハブ170)に対するインタフェースを有するポイントツーポイント法で連結されたプロセッサの一実施形態を示す。しかし、既に数多くのプロセッサ(複数のコア、および共有キャッシュおよびその他のインタフェースをインターコネクトするリング構成を有するオンプロセッサメモリインタフェースモジュール(オンチップモジュール))が存在している。図示はされていないが、一実施形態では、プロセッサ100が、コア、キャッシュ、およびメモリコントローラコンポーネントを連結するリングインターコネクトを含んでいる。
ここで、キャッシュエージェントを利用して、物理的に分配しているキャッシュのスライスを管理することができる。一例としては、各キャッシュコンポーネントが、配列コア(collocated core)(キャッシュエージェントが、キャッシュの分配されたスライスを管理する目的のために関連付けられているコア)のためのキャッシュのスライスを管理する。キャッシュエージェントがキャッシュスライスとのリングインターコネクトおよびインタフェースのトラフィックを取り扱うのと同様に、コアエージェント/コンポーネントが、コアとのトラフィックおよびインタフェースを取り扱う。加えて、リングインターコネクトは、メモリコントローラインタフェース論理(MCIL)および/または他のコントローラを連結して、他のモジュール(たとえばメモリおよび/またはグラフィックプロセッサ)とインタフェースさせてよい。
図2を参照すると、2つのコア間でコードを分配させるコード分配モジュールの一実施形態が示されている。一実施形態では、コア201、202が、異種コアである。たとえばコア201は、元のプログラム順序ではない順序でコードを実行するよう適合されているアウトオブオーダ(OOO)コアであり、コア202は、プログラム順序でコードを実行するよう適合されているインオーダ(またはシリアルコア)である。他のコアのタイプの非包括的な例のリストには、ネイティブコア、非ネイティブコア、ソフトウェア管理されているコア、ネイティブISAコア、変換されたISAコア、共同設計コア、投機的実行コア、および非投機的コアが含まれる。
一実施形態では、コード分配モジュール210が、コードをコア201および202の間で、最大のパフォーマンスおよび節電効果に基づいて分配させる。ここで利用するモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせのことであってよい。加えて、モジュール、ユニット、または論理は、1つのコアまたはプロセッサに集中されていても、全体に分散されていてもよい。たとえば、コード分配モジュール210は、マイクロコードまたはソフトウェア等の、コア201、コア202、プロセッサ200、またはプロセッサ200を含むシステムに関連付けられているストレージに保持されている分配コードを含んでよい。ここで、分配コードは、実行されると、コードの分配を実行する。これに対して、コード分配プロセスは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせで管理されてよい。
一実施形態では、コード分配モジュール210は、プログラムコードの実行をあるコアから別のコアへと動的に切り替える。動的切り替えプログラムコードは、図4および図5を参照して後で詳述する。しかし、このセクションの説明としては、プログラムコードは、処理エレメント(たとえばバイナリまたは機械コード)で実行される任意のコードを含んでよい。コードのホットな部分は、考慮要件(たとえば電力、パフォーマンス、熱、その他の公知のプロセッサメトリック、またはこれらの組み合わせ)に基づいて、他よりあるコアで実行するほうが適しているコードの部分のことであってよい。ここで、コア201が、プログラムコードのネイティブ実行のためのデフォルトのコアであると想定すると、プログラムコードのホットな部分の特定は、コア202での実行により適しているコードの部分を判断することを含む。コア201がOOOコアでありコア202がインオーダコアである実施形態では、コードのホットな部分が、シリアルコア202での実行により適したプログラムコードのホットスポットのことであってよく、この部分は、潜在的に高い反復セクションの実行のためにより有用なリソースを有している可能性がある。一例として、コードのホットな部分を、コードのその部分の反復パターンで特定し、または、その他の公知のメトリックで特定する(たとえば命令カウントまたはサイクルカウント)。反復の可能性が高く(high-recurrence)、予測可能なレイテンシーパターンをもつコードのセクションが、しばしば、インオーダコアでより有効に実行されるよう最適化されるとよい場合が多い。本質的には、この例で、コールドコード(反復の可能性が低い(low-recurrence))は、ネイティブのOOOコア101に分配され、ホットコード(反復の可能性が高い)は、ソフトウェア管理されているインオーダコア102に分配される。
コードのホットな部分は、静的に、動的に、またはこれらの組み合わせで特定することができる。最初の場合、コンパイラまたはユーザは、プログラムコードのセクションがホットコードであると判断してよい。ここで、ホットコード識別子命令は、コードの一セクションをホット(コア101でではなくてコア202で実行される)として区別する(demarcate)することができる。コア201のデコード論理は、一実施形態では、プログラムコードからホットコード識別子命令をデコードするよう適合されており、これは、プログラムコードのホットな部分を特定する。これらの命令のフェッチまたはデコードは、コア202におけるコードのホットなセクションの変換および/または実行をトリガしてよい。この例では、コード分配モジュール210は、ホットコード検知命令を検知するデコード論理を含む。そしてモジュール210は、さらに、コア202におけるホットコードの変換/最適化および実行を行う他のハードウェアおよび/またはソフトウェアを含んでよい。この代わりに、ホットコードのセクションは、コア202での実行のために予め最適化/変換されてよい。
別の例においては、コード分配モジュール210は、動的に(実行中に)、プログラムコードのホットスポット/領域を特定する。一実施形態では、コア201および/またはコア202に含まれているハードウェアは、コア(たとえばコア201)におけるプログラムコードのプロフィール実行を行うために利用される。プロフィールの特徴に基づいて(実行にまつわる電力および/パフォーマンスメトリック)、プログラムコードの1つの領域をホットコードとして特定することができる。ハードウェアのオペレーションに類似して、監視コードを1つのコア(たとえばコア202)の上で実行して、他のコア(コア201)で実行されているプログラムコードの監視/プロフィールを実行してよい。このような監視コードは、プロセッサ200内のコア内の格納構造に維持されたり、プロセッサ200を含むシステムで維持されたりするコードであってよい。たとえば、監視コードは、コア201、コア202、またはプロセッサ200の格納構造に維持されるマイクロコードまたはその他のコードであってよい。そして、監視コードは、従来の実行ユニットおよびプロセッサ200の他のファームウェアまたは論理によって実行されてよい。
また別の例として、ホットコードの静的識別が、ヒントとして作成される。しかしプログラムコード実行の動的プロファイルは、コードの一領域のホットとしての静的な識別を無視することができ、このタイプの静的識別はしばしば、動的プロファイルがコード分配に適したコアを判断する際に考慮するコンパイラまたはユーザヒントとして参照される。さらに、動的プロファイルの性質として、コードの1つの領域をホットとして特定することによって、コードのそのセクションが常にホットとして特定されるわけではない。たとえば、プログラムコードがアウトオブオーダコア201で実行されていると想定する。コア202で実行されている監視コードは、プログラムコードの1つのセクションのコア201の実行のパフォーマンスレベルを監視する。実装に基づき、コア201のパフォーマンスが、コア202で実行されるよりも十分低いと判断されると、および/または、コア201におけるコードのセクションの反復パターンが、コアの遷移オーバヘッドを隠すと予測することができる程度に十分高いと判断されると、コードのセクションをホットとして特定する。変換および/または最適化の後に、コードのセクションの変換されたバージョンをコア202で実行する。コア201における実行の監視同様に、たとえばパフォーマンス監視コードの実行によって、コードの変換されたバージョンの実行もコア202で監視されてよい。パフォーマンスがコア201におけるよりコア202においてのほうが低い場合には、コードのセクションをホットと特定することを、動的に逆にすることもできる(ホットコードのセクションをコールドコードとして命名しなおしてよい)。
ひとたびコードのあるセクション、スポット、または領域がホットとして特定されると、コード分配モジュール210は、一実施形態では、コードのホットなセクションを最適化および/または変換して、最適化/変換されたホットコードを得る。一実施形態では、バイナリ変換コード等の変換および/または最適化コードが、コア202の格納論理に維持される。一例として、バイナリ変換コードは、コア202に維持されているマイクロコードの一部であってよい。変換/最適化コードは、実行されると、コア202での実行用にコードのセクションを変換/最適化する。一実施形態では、コア201、202は、同じISAまたはそのサブセットを認識することができ、ここでの変換/最適化は単に、コードを変換/最適化して、より効率的にコア202で実行できるようにすることであってよい。別の実施形態では、コア201、202が、異なるISAを認識して、ここでは、変換が、コア201が認識可能な1つのISAからのコード領域を、コア202が認識可能な別のISAに変換することを含む。変換/最適化は、変換/最適化コードの実行の観点から説明されているが、任意の変換/最適化コードのメカニズムを利用することができる(専用ハードウェアを利用する場合であっても)。
一実施形態では、ホットコードの特定されたセクションにコア201で遭遇すると、ホットコード(その変換されたバージョン)が、コア202で実行される。ホットコード領域に遭遇する時を判断するための公知のトリガを利用することができる。高レベルの例のいくつかとして、コード領域に関連付けられている命令アドレスに遭遇/参照すること、コードのセクションをホットコードとして特定する命令をフェッチ/デコード/スケジュールすること、が含まれており、ホットコードの変換されたバージョンを示す命令をフェッチ/デコード/スケジュールすることは、別のコアで実行され、ホットコード領域を示すモニタからの外部トリガに遭遇すること等が含まれている。
例では、コード分配モジュール210が、ハードウェア、ソフトウェア、またはこれらの組み合わせで実装されるモニタモジュールを含む。モニタモジュールが、コードのホットな領域を特定している、または、ホットな領域を変換された領域に変換している場合、モニタモジュールは、コードのホットな領域に関する命令アドレスを登録する。登録には、コードの変換された領域の位置との、命令アドレスの関連付けが含まれていてよい。そして、後で命令ポンタ(プログラムカウンタ)が、命令アドレスにアクセスすると、登録されている命令アドレスから、コードのホットな領域に遭遇したと判断する。ここでは任意の形態の検知を利用することができる(たとえば、遭遇イベントの同期または非同期の割り込み処理スタイル)。加えて、ハードウェア、マイクロコード、および/または、ファームウェアが、割り込みのような処理、つまり、ハンドラによりトリガイベントが行われることなくなしに、ホットコードセクションの遭遇を直接処理することができてよい。コア101および102は、マッピング構造等の特定のハードウェア構造を共有して、登録されているアドレスをホットコードとして特定することができる。
コア201でホットコードセクションに遭遇すると、ホットコードセクションの変換された、および/または、最適化されているバージョンがコア202で実行される。ホットコードセクションがどのようにコア201で特定または遭遇された場合であっても、別のコアでコードの実行を可能とする任意の公知の方法を利用することができる。一実施形態では、協力モジュールを利用してこのような実行を行うことができる。たとえば、コア201、202は、特定のハードウェア構造を共有したり、および/または、情報共有のための通信チャネルを含んだりすることができる。一例としては、コア101、102が、データキャッシュを共有してよいので、たとえば実行がコア201から202に移る場合などに、データを物理的に移動させるのではなく、共有キャッシュに既に存在させておくことができる。同様に、シャドウレジスタファイル等のレジスタファイルを、一実施形態で、コア201および202の間で共有することができるので、レジスタ状態(コンテキスト)を1つのコアから別のコアへと移す必要がない。この代わりに、レジスタファイルを共有する代わりに、高速インターコネクトを利用して、1つのコアから別のコアへと物理的にコンテキストまたはその一部を移すことができる。これに加えて、あまり頻繁に移されないソフトウェアを利用して移送を行うこともできる。
一例として、ホットコードセクションに対する入力値が、コア201からコア202へ返送されて、コア202のホットコードセクションの実行をサポートする。実行の後に、出力値がコア201に戻される。一実施形態では、コードセクションから特定された入出力値のみを移すことができる(つまり、部分的なコンテキストスイッチ)。この入力値は、ユーザが(ソフトウェア/コンパイラ)および/またはハードウェア/ファームウェアアルゴリズムによって移すことができてよい。ここで、直接アクセスハードウェアは、レジスタ、バッファ、コア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の実行中のパフォーマンス電力メトリックを決定してよい。このタイプのハードウェアは、集積回路/プロセッサの任意の部分(たとえばアウトオブオーダコア301内、インオーダコア302内、および、OOOプロセッサコア301にもインオーダプロセッサコア302にも含まれていない集積回路の非関連部分)に位置させてよい。
別の実施形態では、モニタモジュール305が、実行されると、プログラムコード325の実行を監視して、プログラムコード325のホットな領域327を特定するソフトウェア(たとえばモニタコード)を含む。図示した例では、プロセッサ300が、格納構造(たとえば読み取り専用(ROM)構造、プログラム可能論理等)を含むことで、実行されると監視を行わせるコード、マイクロコード、または機械コードを保持する。しかし監視コードは、コア301、302に関連付けられている任意の機械可読媒体に格納することもできる。実行という用語は、単に従来の実行ユニットによる実行に限られず、プロセッサ300に関連付けられている他のハードウェアまたはプログラム可能論理を含む(たとえば、ファームウェアでのマイクロコードの実行)。ここでは、実行される監視コードは、ハードウェアが計測可能な反復(recurrence)、電力、および、パフォーマンスメトリックの同じ監視を実行することができる。
一例として、監視ハードウェアおよび/またはコードが、プログラムコードのコードセクションの反復パターンを追跡/判断する。簡単な例として、データ構造が、コードセクションに対する参照(コード領域327;たとえば命令アドレス)を、命令アドレス/コードセクションがコア301で実行された回数のカウントに関連付ける。ここでカウントは、絶対カウント(総カウント)または一時的カウント(単位時間当たりのカウント)に関連付けられていてよい。
一実施形態では、モニタモジュール305が、プログラムコード325のホットな部分327を特定/検知するよう適合されている。モニタモジュール305は、一例では、OOOプロセッサコア301における実行中にプログラムコード325のホットな部分327の1以上のパフォーマンスメトリックを計測する。そしてモジュール305は、閾値未満のOOOプロセッサコアのパフォーマンスメトリックに応じて、プログラムコード325のホットな領域327を特定する。包括的ではなく、例であるパフォーマンスメトリックのリストには、命令リタイヤプッシュアウト、実行された命令数、コード領域の実行にかかる時間、コード領域が遭遇された/実行された回数、コード領域の実行中に消費された電力量、コード領域の実行中の様々な電力状態で消費される時間、コードセグメントに実行中の熱密度などが含まれる。
これら例の1つを利用して、OOOコア301がプログラムコード325を実行すると仮定する。監視コードは、プログラムコード325の領域がコア301上で実行される回数を判断するために実行される。一実施形態で、カウントが閾値になる、またはこれを超えると、モニタモジュール305は、この領域327がホットコードであると特定/判断する。3の閾値が利用される場合、コア302で実行されている監視コードが、コア301で3度、再実行されたホットな領域327を検知して、領域327が、コードのホットな領域であると特定される。反復パターンを判断する具体例から推定して(extrapolate)、同様のプロセス(カウント、閾値に対する比較、および特定)が、計測されたパフォーマンスメトリックのいずれかに利用可能であることを示すことができる。さらに、パフォーマンスメトリックの判断は簡単なカウントに限られず、コア、プロセッサ、またはコンピュータシステムにおける実行または節電パフォーマンスを判断する任意の公知のアルゴリズムが含まれてよい。
しかし、プログラムコード325内でホットな領域327を特定することは、動的なパフォーマンス監視に限られない。この代わりに、コンパイラまたは静的プログラム分析を利用して、インオーダコア302の実行により適している可能性のあるコードセクションを判断することもできる。たとえば、プログラム分析によって、ホットな領域327が複数回再実行される可能性がある場合を想定する。この発見に応じて、コンパイラまたはユーザは、ホットコードとしてコードのセクションを特定する命令またはデマケーションを挿入してよい。したがい、コア301のデコーダがこの命令に遭遇すると、この領域327が、コア302で実行されるべきホットコードであると認識する。一部の実施形態では、ユーザが、深くプログラムを分析するのではなく、自身のプログラムの知識に基づいてコードのこの領域を特定する。
一実施形態では、領域327をホットとして特定すると、コード327が、最適化/変換モジュール310によって最適化され、または変換されて、最適化されたホットコード304が得られる。モニタモジュール305のオペレーション同様に、最適化モジュール310も、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせで実装されてよい。たとえば、変換および/または最適化コードは、コア302、コア301、またはプロセッサ300に関連付けられている構造に格納されてよい。例示すると、バイナリ変換コードが、コア302に関連付けられているファームウェアに格納されている。バイナリ変換コードは、実行されると、コア301のネイティブフォーマットからのホットな領域327を、コア302のフォーマットに変換する。変換は、ISAの間またはその他のフォーマットの間で行われてよく、一方で、最適化には、実行のためにコードを最適化する任意の公知の方法(たとえば、OOOコア301のパラレル実行から、コア302におけるシリアル実行に、またはこの逆にコードを最適化する公知の技術)が含まれてよい。
しかし、ファームウェアのバイナリ変換コードの利用は、純粋に例であり、任意の変換コードまたは最適化コードを、コンピュータの任意の場所に保持することができる(たとえばコア302のマイクロコード、または、システムメモリの通常のプログラムコード)。そして、最適化コードは、任意の方法で実行されて、ホットな領域327を変換、または最適化して、最適化されたホットコード304を得ることができる。実際、コアのためのコードを変換または最適化する任意の公知の方法または装置(たとえば現行のソフトウェア管理されているプロセッサにおけるコード変換のための公知の方法または装置)を利用することができる。
ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせのいずれを利用するにしても、変換は静的または動的に実行することができる。実際、監視がランタイム中に動的に、または実行前に静的に実行可能であるのと同様に、変換および最適化も実行することができる。コンパイラまたはユーザがホットな領域327を特定する例では、最適化および変換が、その時点で行われてよい(実行前)。ここで、ホットコード識別子命令を利用して、ホットコード領域327の特定と、最適化/変換されたコード304の位置の特定の両方を行うことができる。しかし、セクション327が実行前または実行中nホットコードとして特定されたか否かに関わらず、一部の実施形態では、最適化および変換が動的に行われる(ランタイム中に)。
一実施形態では、ホットな領域327は、他の実行とパラレルに最適化/変換される。一例では、コア302は、領域327のコア301の実行とパラレルに最適化コードの実行を開始する。ここで、モニタモジュール305は、コア301のホットコード領域327の実行を検知して、最適化がコア302で行われるようにする。ホットな領域327からのさらなる命令がコア301でまだ行われている間に、コア302は最適化を開始する。この結果、コア302は、本質的にホットコード327を、コア301におけるホットコード327の実行とパラレルに最適化する。別の例では、コア301は、プログラムコード325の他のセクションを実行し、または、ホットコード327のコア302の最適化とパラレルに他の排他的なコードを実行する。別の実施形態では、ホットな領域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のエントリが、ホットコード領域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とを組み合わせて、ネイティブコード327をコア301で実行するのではなく、最適化されたホットコード304をコア302で実行することを示すトリガモジュールが形成される。一例では、コア301のプログラムカウンタが次の命令アドレスに移動されると、トリガハードウェアが、マッピングハードウェアテーブル315に格納されている参照との対照で、そのアドレスをチェックする。ここで、プログラムカウンタが、フィールド316に維持されているコード領域327を参照する命令アドレスを指し示していると想定する。次に、トリガハードウェアが、マッピングテーブル315のエントリに基づいて、コード領域327のための最適化されたコード領域304が存在していることを示す。この結果、コア301のコード領域327の実行を無視することができる(最適化されたバージョンが既に存在しており、コア302で実行されるから)。
一実施形態では、コア301が、コア302が最適化されたコードの実行を完了するまで、実行を停止する(ストップする、または、低電力状態に遷移する)。しかし、これは、プロセッサ300の処理容量の完全利用にならない場合もある。したがって別の実施形態では、最適化されたホットコード304がコア302で実行されている間に、コア301が、別のソフトウェアスレッド(プログラムコード325以外のコード)の実行をインタリーブする。また別の例では、コア301が、投機的にプログラムコード325の他の部分を実行してよく、これは、本質的に、実行のランアヘッドヘルパスレッド(run-ahead helper thread)を実行したり、または、コード領域327に依存しないコード325の他の部分をアウトオブオーダで実行したりする。
協力モジュール320は、一実施形態では、コア301、302の間に協力機能を提供する。一番簡単な例では、協力モジュール320が、情報を移すためのコア301、302の間のインターコネクトを含んでいる。しかし別の実施形態では、協力モジュールが、上述した協力を促すために、個々のコア専用であってもこれらの間で共有されていてもよい他のハードウェアを含んでいる。たとえばコア302は、コア301から302へのレジスタ状態の完全なコンテキストスイッチが、最適化されたホットコード304がコア302で実行されているときに実行される必要がないように、コア301のシャドウレジスタファイルを共有してもよい。この代わりに、コア302が、この例のシャドウレジスタファイルに直接アクセスできる。しかし協力モジュールは、共有構造および/またはインターコネクトのみに限定はされない。実際、協力モジュール320は、レジスタ、格納構造、および両方のコア301、302のバッファに対して直接読み書きアクセスを提供するために、ハードウェア、ファームウェア、ソフトウェア、またはこれらの組み合わせを含んでよい。この結果、協力モジュール320は、一実施形態では、コア301からコア302への最適化されたホットコードの実行に必要なデータ/レジスタ値を移すことができる。そして、コア302からコア301に結果を戻して、後で、コア301で適切に実行させることもできる。
モニタモジュール305は、主に、ネイティブコア301での実行監視を例にとって説明されたが、一実施形態では、モニタモジュール305が、コア302における最適化されたコードの実行を監視することもできる。この結果、モニタモジュール305は、コア302での最適化されたバージョン304のパフォーマンスと、コア301のコードセクション327のパフォーマンスとを比較することができる。さらに、コア302のパフォーマンスがコア301のパフォーマンスより低い場合、または、コア302におけるパフォーマンス利得が、電力消費の増加に比べて小さい場合には、領域327をホットコードとして特定するための決定を逆にしてよい。一例では、この決定を示すマッピングモジュール315のエントリが割り当て解除されたり無効化されたりして、次にコア301がホットコード327に遭遇したときに、モニタモジュール305が、参照316を検知せず、領域327の最適化されたホットコードバージョンがコア302で実行されるべきであると示さないようにする。本質的には、逆の決定によって、前に特定された領域327が、アウトオブオーダコア301に戻される。
このパフォーマンス比較をさらに示す具体例として、コード領域327が、高い反復パターンと高い命令実行カウントに基づいて、ホットコードとして特定されると想定する。この結果、コード327が、コア302に存在しているバイナリ変換コードにより最適化され、最適化されたコード304が得られる。最適化されたコード304をコードキャッシュ303に格納するとき、マッピングテーブル315のエントリを作成して、コード領域327を、最適化されたバージョン304に関連付ける。コア301が、次に、フィールド316の参照に合致する参照に遭遇すると、最適化されたコード304の実行が、コア302でトリガされる(コア301のコード領域327で実行される代わりに)。協力モジュールは、転送、共有、またはコンテキストスイッチによって、コア301からコア302に適切な値を提供する点に留意されたい。コア302がホットコード304を実行している間に、同じパフォーマンスメトリック(命令実行カウント)をモニタモジュール305によって追跡する。命令実行カウントがコア301で実行されたコード領域327未満である場合、領域327をホットコードとして特定する現状維持を将来的も続ける。しかし、コア302での命令実行カウントのほうが長い場合、または顕著な電力増加が検知された場合には、上述したように、領域327をホットコードとして特定する判断を逆にすることができる。
コア301および302の間に通信を提供するのに加えて、協力モジュール320は、さらに、それぞれ異なるタイプの複数のコアを管理する他の特徴部を含んでよい。第1の例として、電力マネージャが、両方のコア301および302が同時に最大電力で動作しないようにする電力アルゴリズムを実装する。しかしこの例は純粋な例である。他の電力アルゴリズムでこのような最大のオペレーションをさせることもできる。電力について考えなければならない別のこととして、コア302が、コア301における実行監視中に、最大を下回る電力状態に存在している(低電力状態)場合もある、ということがある。たとえば、コア301が、自身の監視を実行するメカニズムに関連付けられている場合には、コア302は、実行するべきコードの最適化されたバージョンが得られるまでは、完全に電源が入った(powered up)状態にする必要はない。この結果、実行に必要となるまでは、コア302を停止させることで潜在的に節電することができるようになる。逆に、コア302が最適なホットコードを実行している間は、コア301への電力供給を停止させてよい(たとえばACPI低電力状態またはスリープ状態といった、最大未満の電力状態にする)。
コア間を動的に実行切り替えするときに、(1)コードの任意のセグメントのために最も適切なコアをタイムリー且つ正確に予測すること、および(2)コア間で実行を効率よく移動させること、という2つの課題がある。
一実施形態では、第1のコアでのプログラム実行が(たとえば、コード領域で分析されるILPに基づいて)ランタイムソフトウェアおよび/またはハードウェアにより特定されてよく、次に、現在のコアのパフォーマンスメトリックおよび/または統計データを、モニタモジュール305で継続的に収集して、プログラムコードの実行を第2のコアにスイッチするべきときを予測する。この方法は図4に示されている。この方法は、1つのコアからのデータを利用して、他のコアのパフォーマンスを予測するので、一実施形態では、この方法は「シングルコア予測」アルゴリズムと称される。
図4に戻ると、第1のタイプの第1のコア(アウトオブオーダコア等)と、第2のタイプの第2のコア(インオーダコア等)との間でコードを分配して、最大のパフォーマンスおよび節電効果を達成するための方法400のフロー図の一実施形態が示されている。図4のフローは、実質的にシリアルで描かれているが、フローは、異なる順序で実施されても、パラレルに実施されてもよい。さらにフローそれぞれを、ハードウェア、ファームウェアを利用して、またはプログラムコードに実行によって実施されてもよい。
プロセッサのアウトオブオーダ(OOO)プロセッサコアでのプログラムコードの実行を監視する。一実施形態では、プログラムコードに対する言及は、(1)動的であっても静的であっても、他のプログラムコードをコンパイルするためのコンパイラプログラムの実行、(2)オペレーティングシステム、ハイパーバイザ、アプリケーションコードその他のソフトウェアプログラム等のメインプログラムの実行、(3)メインプログラムコードに関連付けられている、ライブラリ等の他のプログラムコードの実行、(4)メインプログラムに直接関係しなくてよい他のプログラムコード(たとえばヘルパースレッドその他のタスク)、または(5)これらの組み合わせのことであってよい。
コンパイラは、対象テキスト/コードにソーステキスト/コードを変換するプログラムまたは一組のプログラムを含んでよい。通常は、コンパイラによるプログラム/アプリケーションコードのコンパイルは、複数フェーズで行われ、高レベルプログラミング言語コードを、低レベルマシンまたはアセンブリ言語コードに変換するように渡すことができる。しかし、シングルパスコンパイラは、単純なコンパイルに利用することもできる。コンパイラは、任意の公知のコンパイル技術を利用して、任意の公知のコンパイラオペレーションを行うことができる(語彙分析、前処理パース、意味分析、コード生成、コード変換、およびコードの最適化等)。
より大きなコンパイラが、しばしば、複数のフェーズを含むことができるが、(1)フロントエンド(一般的に構文処理、意味処理、および一部の変換/最適化を行ってよい場所)、(2)バックエンド(一般的に、分析、変換、最適化、およびコード生成を行ってよい場所)という2つの一般的なフェーズ内に含まれている。一部のコンパイラは、ミドルエンドについて言及しているが、このミドルエンドは、コンパイラのフロントエンドとバックエンドとの間の境界の曖昧なところを表している。この結果、挿入、関連付け、生成、その他のコンパイラのオペレーションに対する言及は、上述したフェーズまたはパスのいずれか、および、コンパイラの任意の他の公知のフレーズまたはパスで行われてよい。
一実施形態では、モニタモジュール305のプログラムコードの実行監視が、プログラムコード内でのコードセグメント/領域の実行回数を追跡することを含む。コード領域は、命令/コードを分類する任意の公知の方法で決定されてよい。一例として、コードセクションに関連付けられている命令アドレスがOOOコアのプログラムカウンタにより参照されるたびに、反復カウントを増分させる。コードセクションの反復カウントが閾値を超えると、一実施形態では、このコードセクションをホットコードとして特定する。
反復パターンの判断に関連して、または別個に、プログラムコードの実行監視には、コードセクションに関するパフォーマンスメトリックの決定/追跡が含まれてよい。上述したように、例であるパフォーマンスメトリックには、命令リタイヤプッシュアウト、実行された命令数、コード領域の実行にかかる時間、コード領域が遭遇された/実行された回数、コード領域の実行中に消費された電力量、コード領域の実行中の様々な電力状態で消費される時間、コードセグメントに実行中の熱密度が含まれてよい。しかし、プロセッサ実行に関する任意の公知のメトリックまたはメトリックの組み合わせが、プログラムコードの実行中に監視されてよい。
ブロック402で、プログラムコードを第1のコアで実行してよい。一実施形態では、第1のコアが、狭帯域のアウトオブオーダコア等の第1のタイプであってよい。ブロック404で、第1のコアがプログラムコードを実行する際に、第1のコアのパフォーマンスを監視してよい。ブロック406で、パフォーマンスの統計データを収集してよい。一実施形態では、統計データには、分岐ミス率、キャッシュミス率等が含まれてよい。一実施形態では、パフォーマンスの監視および統計データの収集が、モニタモジュール305により実行されてよい。ブロック408で、第2のコアにおけるプログラムコードの実行のパフォーマンスが、第1のコアにおけるプログラムコードの実行のパフォーマンスおよび統計データに少なくとも一部基づいて、予測されてよい。一実施形態では、第2のコードが、第2のタイプであってよい(たとえば広帯域のインオーダコア)。代わりに、第1のタイプが、広帯域のインオーダコアであってよく、第2のタイプが、狭帯域のアウトオブオーダコアであってよい。一実施形態では、予測が、「予測_パフォーマンス」と称される関数として実装されてよい。ブロック410で、第2のコアによるプログラムコードの実行について予測されたパフォーマンスが、第1のコアによるプログラムコードの実行について監視されたパフォーマンスよりも良好な場合には、以下の動作を実行してよい。
ブロック412で、第2のコアを、低電力または「スリープ」状態から立ち上げてよい(powered up)。立ち上げ中に、第1のコアが、プログラム実行を続ける。ブロック414で、プログラムコードの実行が、第1のコアから第2のコアにスイッチされてよい。ブロック416で、第1のコアが、スリープ状態へと電力を落とされる(powered down)。第2のコアの予測されたパフォーマンスが第1のコアのものよりよくない場合には、第1のコアにおけるプログラムコードの実行を続けてよい。後で方法を反復するときに、方法における第1のコアおよび第2のコアの位置を交換してもよい(たとえば、第2のコアがまず実行されて、第2のコアのパフォーマンスが監視され、第2のコアの統計データを収集して、第1のコアのパフォーマンスを予測する、等が行われてよい)。一実施形態では、ブロック404から416が、コード分配モジュール210により実行されてよい。
予測_パフォーマンス関数(コア数、パフォーマンス_コア1、統計データ_コア1)で、現在のコアの実行パフォーマンスおよび統計データである、パフォーマンス_コア1、および統計データ_コア1を利用して、第2のコアにおける実行のパフォーマンスを予測する。予測されたパフォーマンスが現在のコアよりも高い場合、実行を他のコアに切り替える。この方法は、現在のコアのパフォーマンス情報を利用して、他のコアのパフォーマンスを予測することができるという想定に基づいている。直感的には、過度のキャッシュ/分岐ミスのあるプログラムの実行は、後の命令をアウトオブオーダで実行すると、ミスのレイテンシーを隠すことができることから、狭帯域のアウトオブオーダのコアでのパフォーマンスのほうが良好になるはずである。他方で、高い命令レベルのパラレリズム(ILP)および低キャッシュ/分岐ミスのプログラムは、実行帯域幅が高いことから、広帯域のインオーダコアでより効率的に実行されるはずである。
一実施形態では、予測_パフォーマンス関数を定義するためには、まずc1、...、cnというn個のコードを第1のコアおよび第2のコアの両方で実行して、2つのコアにおけるそれぞれのパフォーマンス情報(p11、p12、...、p1n)(p21、p22、...、p2n)および、統計データ(s11、s12、...、s1n)(s21、s22、...、s2n)を収集してよい。そして、最適に適合する関数Fを見つけるための1つのやり方としては、(F(p11、s11)、F(p12、s12)、...、F(p1n、s1n)、−(p21、p22、...、p2n)およびF(F(p21、s21)、F(p22、s22)、...、F(p2n、s2n)、−(p11、p12、...、p1n)が最小限になるものを見つけるやり方がある。最適な適合の標準誤差が小さい場合には、Fを、予測_パフォーマンスの関数として利用することができる。しかし標準誤差が大きい場合には、予測精度を高めるために、より多くのパフォーマンスパラメータを見つける必要があるだろう。
シングルコアの予測法の1つの利点は、決定に際して他のコアに関するパフォーマンスおよび電力オーバヘッドを考慮せずに、現在のコア実行統計データのみを利用して、他のコアのパフォーマンスを予測することができる点である。しかしこの方法は、2つのコアのパフォーマンスが密に関連しあっていることが前提である。一部の環境/構成においては、2つのコアのパフォーマンスが、緩い相関性しか有さず、良好な適合関数が存在しない場合もある。したがって、この場合は、より一般的な方法をとると好適だろう。
別の実施形態では、デュアルコア予測方法により、短期間に2つのコアに観察されるパフォーマンス情報を利用して、コアの切り替えが予測される。具体的に、「予測」は、2つのコアのパフォーマンスをサンプリングおよび比較するために定期的な間隔で実行されて、異なるコアに実行をスイッチすべきかを決定してよい。各予測は、2つのコアのスイッチに関している。つまり、第1のスイッチは、他のコアからパフォーマンス情報を取得するために行われ、第2のスイッチは、他のコアのパフォーマンスが、第1のコアのものより劣るために、実行を第1のコアに戻すべき場合に行われる。第1のコアのスイッチは、他のコアを立ち上げて、実行のためにそのマイクロアーキテクチャ状態をウォームアップして、第2のコアのスイッチは、コアの電力を落とすことだけに関している。
コアのスイッチオーバヘッドを低減させるために、予測は2つのオペレーション(つまり「継続用の予測(Pcont)」オペレーションおよび「スイッチのための予測(Pswit)」に分けられてよい。Pcontオペレーションは、現在のコアで収集されたパフォーマンス情報を、2つのコアの前のパフォーマンス情報と比較して、実行を現在のコアで続けるべきかを判断する。Pcontオペレーションが、実行を現在のコアで続けるべきではないと予測している場合には、Pswitオペレーションにより、他のコアを起動して、他のコアを短期間実行させ、2つのコアのパフォーマンス情報を比較して、他のコアに実行を移すべきかを判断する。Pcontが同じコアで実行され続ける期間が長くなりすぎないように、パラメータKを導入して、PswitオペレーションがKを超える回数、立て続けに(in a row)省かれないようにする。さらに、Pswitオペレーションを省くたびに、前のパフォーマンスを、インフレーション係数でインフレーションして、次の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で、プログラムコード実行開始からS+Mサイクルが終わる前に、PUサイクル分、第2のコアの立ち上げを、信号で指示してよい。一実施形態では、第2のコアが、第2のタイプであってよい(たとえば広帯域のインオーダコア)。この代わりに、第1のタイプが、広帯域のインオーダコアであって、第2のタイプが、狭帯域のアウトオブオーダコアであってのよい。ブロック506で、第1のコア(IPC1)のサイクルごとの命令数を、M個のサイクルの間収集してよい。一実施形態では、パフォーマンスの監視と、統計データの収集とを、モニタモジュール305またはコード分配モジュール210のいずれかで実行してよい。
次に、第1のコア(Pcont)での継続実行の予測を以下のように行ってよい。ブロック508で、継続数Nが、最大継続数Kを下回る場合であって、第1のコアIPC1のサイクルごとの命令数が、サイクルごとの前の命令数より大きい場合(Prev_IPCであり、最初は最大値に設定されている)には、ブロック510、512、および514を実行してよい。この場合には、第1のコアから第2のコアへのスイッチを行わない。ブロック510で、第2のコアの電力を落とすよう信号で指示してよい。ブロック512で、サイクルごとの前の命令数(Prev_IPC)が、Prev_IPCに、インフレーション係数を乗じた数に設定されてよい。処理は、プログラムコードを第1のコアで継続実行して継続される。
継続数Nが、最大継続数K以下である場合、または、第1のコアのサイクルごとの命令数(IPC1)が、サイクルごとの前の命令数(Prev_IPC)以下である場合には(ブロック508)、ブロック516、518、および520を実行してよい。この場合には、第1のコアから第2のコアへのスイッチを行ってよい。次に、第1のコアから第2のコアへの実行のスイッチのための予測(Pswit)を以下のように行ってよい。ブロック516で、カウンタNが0に設定されてよい。ブロック518で、プログラムコードの実行を第1のコアから第2のコアにスイッチしてよく、第2のコアのサイクルごとの命令数(IPC2)を収集してよい。次に、チェックを行って、スイッチが意味のあるものであったかを検証する。
ブロック520で第2のコアのサイクルごとの命令数(IPC2)が、第1のコアのサイクルごとの命令数(IPC1)未満である場合に、プログラムコードの実行を第2のコアから第1のコアにスイッチして戻す(ブロック522)。サイクルごとの命令数以外の別のパフォーマンスメトリックを利用する場合に、第2のコアにおけるパフォーマンスが第1のコアにおけるパフォーマンスより良くない場合には、プログラムコードの実行が、第2のコアから第1のコアにスイッチして戻されてよい。第2のコアの電力を落とすよう、次に信号で指示してよい(ブロック524)。しかし、ブロック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)命令キャッシュ、分岐予測状態、および他のコアの他の状態をウォームアップする、といったいくつかのオーバヘッドが関係する。
他のコアを起動する(または立ち上げる)ときのレイテンシーは、他のコアの低電力状態に依存している。一部の実施形態では、コアが停電量C2状態にあるとき(つまり通常の動作出力の30%までを消費するとき)、コアの電力を通常の動作速度(C0状態)にまで上げるためには、5000サイクル程度が必要となるだろう。コアが、より深い電源停止状態(C6)にある場合には(つまり、動作電力の10%未満を消費しているとき)、一実施形態では、再起動(wake up)するために20万サイクル程度が必要となるだろう。立ち上げは時間がかかるが、他のコアの実行とパラレルに実行することができる。例えば、一実施形態では、第1のコアがPswit/Pcont期間に入る前に、第1のコア(またはその他のモジュール)が、信号を第2のコアに送って、立ち上げを開始させてもよい。第1のコアの予測期間が終わるときには、第2のコアが既に立ち上がっており、プログラムコードの実行を続けることができてもよい。この早期に立ち上げる戦略をもってすれば、立ち上げのレイテンシーは、エネルギー消費量を増加させはするかもしれないが、コアのスイッチのレイテンシーにもパフォーマンスにも影響しない。
一実施形態では、レベル2(L2)キャッシュが2つのコアで共有されていても、データおよび命令キャッシュのウォームアップに1万サイクル程度かかる。さらに、現代のハイブリッド分岐予測器においては、分岐予測器をかなり急速にウォームアップすることができる。コアの立ち上げが、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のコアが第1のコアに対して電力を落とすよう(PD)指示して607、第2のコアでの実行を続ける、と想定する。次のPcont期間の最後に近づくと、第2のコアは、第1のコアに立ち上がるよう信号で指示する608.第2のコアが自身のPcont期間を終えた後で、第2のコアが実行を継続すべきであると認識すると、第2のコアは第1のコアに対して、電力を落とすようして609、第2のコアでのプログラムコードの実行を続けるよう信号で指示する。
ネイティブコアを、異なる共同設計されたコアに連結させる結果、ここで説明する動的なコア選択技術を利用した場合に1つのアプリケーション内であっても、電力および実行の利点のうち最良のものが潜在的に得られる。例えば、アウトオブオーダコアおよびソフトウェア管理されているインオーダコアを利用すると、ソフトウェア管理されているコアでは非効率なコードが、アウトオブオーダコアに移される。またこの逆に、アウトオブオーダコアでは非効率なコードが、ソフトウェア管理されているコアに移される。ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせによって、ネイティブコードのパラレル実行、ホットコード検知、およびホットコード最適化を効率的に管理することができるようになり、且つ、複数のスレッドの個々のセクションを、アウトオブオーダおよびインオーダ共同設計コアの間で、パイプライン方式で効率よくインタリーブすることができるようになる。この結果、最大パフォーマンスが得られ、且つ、異なる電力効率技術(たとえば、一部の実装例で、インオーダコアにおける実行中に、アウトオブオーダコアを低電力状態に置く等)によってより良い電力パフォーマンスを達成することができる。
ここで利用するモジュールは、任意のハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせであってよい。別個に例示されているモジュール間の境界は、通常変化して、潜在的に重なっている場合もある。例えば第1および第2のモジュールは、ハードウェア、ソフトウェア、ファームウェア、またはこれらの組み合わせを共有して、一方で、一部の独立したハードウェア、ソフトウェア、またはファームウェアを維持している可能性があってもよい。一実施形態では、論理という用語を利用する場合、ハードウェア(たとえばトランジスタ、レジスタ、またはその他の、プログラム可能な論理デバイス等のハードウェア)が含まれてよい。しかし別の実施形態では、論理にはさらに、ハードウェアと統合されたソフトウェアコードが含まれる(たとえばファームウェアまたはマイクロコード)。
ここで利用する値には、任意の公知の数、状態、論理状態、またはバイナリ論理状態の表現が含まれている。しばしば、論理レベル、論理値またはロジック値の利用は、1および0で表されることがあり、これらは単にバイナリ論理状態を表しているに過ぎない。たとえば1は、論理レベルがハイである場合を示し、0は、論理レベルがローである場合を示す。一実施形態では、記憶セル(たとえばトランジスタまたはフラッシュセル)が、1つの論理値または複数の論理値を維持することができる。しかし、コンピュータシステムでは値の他の表現を利用してきた。例えば十進数の10は、二値法で1010で表され、16進法でAで表される。したがって、値は、コンピュータシステムが維持可能な情報の任意の表現形態を含む。
さらに、状態は、値または値のある部分によって表現されてよい。一例では、第1の値(たとえば論理「1」)は、デフォルトまたは初期状態を表してよく、第2の値(たとえば論理「0」)は、デフォルトではない状態を表してよい。加えて、リセットおよびセット(設定)という用語は、デフォルトと、更新された値または状態をそれぞれ示す。例えば、デフォルト値は、潜在的に、高い論理値(つまりリセット)を示し、更新された値は、潜在的に、低い論理値(つまりセット)を含む。値の任意の組み合わせを利用することで、任意の数の状態を表すことができる。
上述した方法、ハードウェア、ソフトウェア、ファームウェア、またはコードの実施形態は、処理エレメントが実行可能な機械可読媒体に格納されている命令またはコードにより実装されてよい。機械可読媒体は、機械(たとえばコンピュータまたは電子システム)が可読な形態で情報を提供(つまり格納および/または送信)することができる任意のメカニズムを含む。たとえば、機械可読媒体は、ランダムアクセスメモリ(RAM)(たとえばスタティックRAM(SRAM)またはダイナミックRAM(DRAM))、ROM,磁気または光学記憶媒体、フラッシュメモリ素子、電気記憶素子、光学記憶素子等を含む。
本明細書全体において、「1実施形態」または「1つの実施形態」という言い回しは、その実施形態で記載される特定の特徴、構造、または特性が、本発明の少なくとも1つの実施形態に含まれていることを示す。したがって「1実施形態」または「1つの実施形態」という言い回しが本明細書の随所にみられても、これらは必ずしも全てが同じ実施形態のことを意味しているわけではない。さらに、特定の特徴、構造、または特性は、1以上の実施形態において、任意の適切な方法で組み合わせることができる。
前述した明細書では、具体的な実施形態を参照しながら詳細な記載を行った。しかし、添付請求項に示されている本発明の広義の精神および範囲を逸脱せずに、様々な変形例および変更例が可能である。したがい、明細書および図面は、限定ではなく例示として受け取られたい。さらに、実施形態の前述した用途および例である他の用語は、必ずしも同じ実施形態または同じ例を示している場合ばかりではなく、異なる別個の実施形態のことである場合もあれば、同じ実施形態を示している場合もある。
[項目1]
異種マルチコア処理システムで動的にコアをスイッチする方法であって、
前記異種マルチコア処理システムの第1のタイプの第1の処理コアでプログラムコードを実行する段階と、
前記プログラムコードを実行する前記第1の処理コアのパフォーマンスを監視して、統計データを収集する段階と、
前記第1の処理コアについての監視された前記パフォーマンスおよび収集された前記統計データに少なくとも一部基づいて、前記異種マルチコア処理システムの、前記第1のタイプと異なる第2のタイプの第2の処理コアで前記プログラムコードを実行する際のパフォーマンスを予測する段階と、
予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチする段階と
を備え、
前記第2の処理コアのパフォーマンスを予測する段階は、
複数のコードセグメントを、前記第1の処理コアおよび前記第2の処理コアの両方で実行する段階と、
前記コードを実行している間に、前記第1の処理コアおよび前記第2の処理コアのそれぞれのパフォーマンス情報および統計データを収集する段階と、
最良適合関数(best fit function)F(前記第1の処理コアのパフォーマンス情報および統計データ)と、前記第2の処理コアのパフォーマンスとの間の差が最小になるように前記Fを決定する段階と
を有する、方法。
[項目2]
予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記第2の処理コアを、低電力状態から立ち上げる段階をさらに備える、項目1に記載の方法。
[項目3]
予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記第1の処理コアを低電力状態に落とす段階をさらに備える、項目1または2に記載の方法。
[項目4]
前記第1の処理コアは、アウトオブオーダ処理コアを含み、前記第2の処理コアは、インオーダ処理コアを含む、項目1から3のいずれか一項に記載の方法。
[項目5]
前記第2の処理コアは、アウトオブオーダ処理コアを含み、前記第1の処理コアは、インオーダ処理コアを含む、項目1から3のいずれか一項に記載の方法。
[項目6]
コンピュータに項目1から5のいずれか一項に記載の方法を実行させるためのプログラム。
[項目7]
集積回路を備える異種マルチコア処理システムであって、前記集積回路は、
プログラムコードを実行する第1のタイプの第1の処理コアと、
前記プログラムコードを実行する、前記第1のタイプとは異なる第2のタイプの第2の処理コアと、
コード分配モジュールと
を備え、
前記コード分配モジュールは、
前記プログラムコードを実行する前記第1の処理コアのパフォーマンスを監視して、統計データを収集して、前記第1の処理コアについての監視された前記パフォーマンスおよび収集された前記統計データに少なくとも一部基づいて、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスを予測して、予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチし、
前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスを予測することは、複数のコードセグメントを、前記第1の処理コアおよび前記第2の処理コアの両方で実行し、前記コードを実行している間に、前記第1の処理コアおよび前記第2の処理コアのそれぞれのパフォーマンス情報および統計データを収集し、最良適合関数(best fit function)F(前記第1の処理コアのパフォーマンス情報および統計データ)と、前記第2の処理コアのパフォーマンスとの間の差が最小になるように前記Fを決定することを含む、
異種マルチコア処理システム。
[項目8]
前記コード分配モジュールは、
予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記第2の処理コアを、低電力状態から立ち上げる、項目7に記載の異種マルチコア処理システム。
[項目9]
前記コード分配モジュールは、
予測された、前記第2の処理コアで前記プログラムコードを実行する際のパフォーマンスが、前記プログラムコードを実行する前記第1の処理コアのパフォーマンスよりも良好である場合には、前記第1の処理コアを低電力状態に落とす、項目7または8に記載の異種マルチコア処理システム。
[項目10]
前記第1の処理コアは、アウトオブオーダ処理コアを含み、前記第2の処理コアは、インオーダ処理コアを含む、項目7から9のいずれか一項に記載の異種マルチコア処理システム。
[項目11]
前記第2の処理コアは、アウトオブオーダ処理コアを含み、前記第1の処理コアは、インオーダ処理コアを含む、項目7から9のいずれか一項に記載の異種マルチコア処理システム。
[項目12]
異種マルチコア処理システムで動的にコアをスイッチする方法であって、
前記異種マルチコア処理システムの第1のタイプの第1の処理コアでプログラムコードを、第1の数のサイクルの間、実行する段階と、
前記異種マルチコア処理システムの、前記第1のタイプと異なる第2のタイプの第2の処理コアの立ち上げを信号で指示する段階と、
第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集する段階と、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集する段階と
を備え、
前記第2の処理コアの立ち上げを信号で指示する段階は、
前記第1の数のサイクルと前記第2の数のサイクルの合計が終わる前に、第3の数のサイクルを立ち上げるよう信号で指示する段階を有する、方法。
[項目13]
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好な場合には、前記前に決定されたコアパフォーマンスメトリックを、前記前に決定されたコアパフォーマンスメトリックを、インフレーション係数で乗算した値に設定する段階をさらに備える、項目12に記載の方法。
[項目14]
前記第1の処理コアから前記第2の処理コアに、前記プログラムコードの実行を強制的にスイッチさせ、前記第2の数のサイクルの間、前記プログラムコードを実行する前記第2の処理コアの第2のパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記前に決定されたコアパフォーマンスメトリックとをK回比較する毎に少なくとも1度、収集する段階をさらに備え、
前記Kは自然数である、項目12または13に記載の方法。
[項目15]
異種マルチコア処理システムで動的にコアをスイッチする方法であって、
前記異種マルチコア処理システムの第1のタイプの第1の処理コアでプログラムコードを、第1の数のサイクルの間、実行する段階と、
前記異種マルチコア処理システムの、前記第1のタイプと異なる第2のタイプの第2の処理コアの立ち上げを信号で指示する段階と、
第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集する段階と、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集する段階と
を備え、
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好な場合には、前記前に決定されたコアパフォーマンスメトリックを、前記前に決定されたコアパフォーマンスメトリックを、インフレーション係数で乗算した値に設定する段階をさらに備える、方法。
[項目16]
異種マルチコア処理システムで動的にコアをスイッチする方法であって、
前記異種マルチコア処理システムの第1のタイプの第1の処理コアでプログラムコードを、第1の数のサイクルの間、実行する段階と、
前記異種マルチコア処理システムの、前記第1のタイプと異なる第2のタイプの第2の処理コアの立ち上げを信号で指示する段階と、
第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集する段階と、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集する段階と
を備え、
前記第1の処理コアから前記第2の処理コアに、前記プログラムコードの実行を強制的にスイッチさせ、前記第2の数のサイクルの間、前記プログラムコードを実行する前記第2の処理コアの第2のパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記前に決定されたコアパフォーマンスメトリックとをK回比較する毎に少なくとも1度、収集する段階をさらに備え、
前記Kは自然数である、方法。
[項目17]
前記第2のパフォーマンスメトリックが前記第1のパフォーマンスメトリックより良好ではない場合、前記プログラムコードの実行を、前記第2の処理コアから前記第1の処理コアにスイッチして戻し、前記第2の処理コアの電力を落とすよう信号で指示する段階をさらに備える、項目12から16のいずれか一項に記載の方法。
[項目18]
前記第2のパフォーマンスメトリックが前記第1のパフォーマンスメトリックより良好な場合、前記第1の処理コアの電力を落とすよう信号で指示し、前記前に決定されたコアパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記第2のパフォーマンスメトリックとの平均に設定する段階をさらに備える、項目17に記載の方法。
[項目19]
前記第1の処理コアは、アウトオブオーダ処理コアを含み、前記第2の処理コアは、インオーダ処理コアを含む、項目12から18のいずれか一項に記載の方法。
[項目20]
前記第2の処理コアは、アウトオブオーダ処理コアを含み、前記第1の処理コアは、インオーダ処理コアを含む、項目12から18のいずれか一項に記載の方法。
[項目21]
コンピュータに項目12から20のいずれか一項に記載の方法を実行させるためのプログラム。
[項目22]
集積回路を備える異種マルチコア処理システムであって、前記集積回路は、
プログラムコードを実行する第1のタイプの第1の処理コアと、
前記プログラムコードを実行する、前記第1のタイプとは異なる第2のタイプの第2の処理コアと、
前記第1の処理コアで第1の数のサイクルの間、前記プログラムコードを実行させ、前記第2の処理コアの立ち上げを信号で指示して、第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集するコード分配モジュールと、
を備え、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記コード分配モジュールは、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記コード分配モジュールは、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集し、
前記第2の処理コアの立ち上げを信号で指示することは、前記第1の数のサイクルと前記第2の数のサイクルの合計が終わる前に、第3の数のサイクルを立ち上げるよう信号で指示することを含む、異種マルチコア処理システム。
[項目23]
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好な場合には、前記コード分配モジュールはさらに、前記前に決定されたコアパフォーマンスメトリックを、前記前に決定されたコアパフォーマンスメトリックをインフレーション係数で乗算した値に設定する、項目22に記載の異種マルチコア処理システム。
[項目24]
前記コード分配モジュールは、さらに、前記第1の処理コアから前記第2の処理コアに、前記プログラムコードの実行を強制的にスイッチさせ、前記第2の数のサイクルの間、前記プログラムコードを実行する前記第2の処理コアの第2のパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記前に決定されたコアパフォーマンスメトリックとをK回比較する毎に少なくとも1度、収集し、
前記Kは自然数である、項目22または23に記載の異種マルチコア処理システム。
[項目25]
集積回路を備える異種マルチコア処理システムであって、前記集積回路は、
プログラムコードを実行する第1のタイプの第1の処理コアと、
前記プログラムコードを実行する、前記第1のタイプとは異なる第2のタイプの第2の処理コアと、
前記第1の処理コアで第1の数のサイクルの間、前記プログラムコードを実行させ、前記第2の処理コアの立ち上げを信号で指示して、第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集するコード分配モジュールと、
を備え、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記コード分配モジュールは、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記コード分配モジュールは、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集し、
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好な場合には、前記コード分配モジュールはさらに、前記前に決定されたコアパフォーマンスメトリックを、前記前に決定されたコアパフォーマンスメトリックをインフレーション係数で乗算した値に設定する、異種マルチコア処理システム。
[項目26]
集積回路を備える異種マルチコア処理システムであって、前記集積回路は、
プログラムコードを実行する第1のタイプの第1の処理コアと、
前記プログラムコードを実行する、前記第1のタイプとは異なる第2のタイプの第2の処理コアと、
前記第1の処理コアで第1の数のサイクルの間、前記プログラムコードを実行させ、前記第2の処理コアの立ち上げを信号で指示して、第2の数のサイクルの間、前記プログラムコードを実行する前記第1の処理コアの第1のパフォーマンスメトリックを収集するコード分配モジュールと、
を備え、
前記第1のパフォーマンスメトリックが、前に決定されたコアパフォーマンスメトリックより良好な場合には、前記コード分配モジュールは、前記第2の処理コアの電力を落とすよう信号で指示して、前記第1の処理コアで前記プログラムコードの実行を続け、
前記第1のパフォーマンスメトリックが、前記前に決定されたコアパフォーマンスメトリックより良好ではない場合には、前記コード分配モジュールは、前記プログラムコードの実行を、前記第1の処理コアから前記第2の処理コアにスイッチして、第2の数のサイクルの間、前記プログラムコードを実行している前記第2の処理コアの第2のパフォーマンスメトリックを収集し、
前記コード分配モジュールは、さらに、前記第1の処理コアから前記第2の処理コアに、前記プログラムコードの実行を強制的にスイッチさせ、前記第2の数のサイクルの間、前記プログラムコードを実行する前記第2の処理コアの第2のパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記前に決定されたコアパフォーマンスメトリックとをK回比較する毎に少なくとも1度、収集し、
前記Kは自然数である、異種マルチコア処理システム。
[項目27]
前記第2のパフォーマンスメトリックが前記第1のパフォーマンスメトリックより良好ではない場合、前記コード分配モジュールは、前記プログラムコードの実行を、前記第2の処理コアから前記第1の処理コアにスイッチして戻し、前記第2の処理コアの電力を落とすよう信号で指示する、項目22から26のいずれか一項に記載の異種マルチコア処理システム。
[項目28]
前記第2のパフォーマンスメトリックが前記第1のパフォーマンスメトリックより良好な場合、前記コード分配モジュールは、前記第1の処理コアの電力を落とすよう信号で指示し、前記前に決定されたコアパフォーマンスメトリックを、前記第1のパフォーマンスメトリックと前記第2のパフォーマンスメトリックとの平均に設定する、項目27に記載の異種マルチコア処理システム。
[項目29]
前記第1の処理コアは、アウトオブオーダ処理コアを含み、前記第2の処理コアは、インオーダ処理コアを含む、項目22から28のいずれか一項に記載の異種マルチコア処理システム。
[項目30]
前記第2の処理コアは、アウトオブオーダ処理コアを含み、前記第1の処理コアは、インオーダ処理コアを含む、項目22から28のいずれか一項に記載の異種マルチコア処理システム。

Claims (10)

  1. マルチコア処理システムであって、
    システムメモリと、
    プログラムコードを実行する第1のタイプの第1のプロセッサコアと、
    前記第1のタイプとは異なる第2のタイプの第2のプロセッサコアと、
    (i)前記第1のプロセッサコアが前記プログラムコードを実行している間に、前記第1のプロセッサコアの1又は複数のパフォーマンスメトリック、及び前記第2のプロセッサコアが前記プログラムコードを実行する際の前記第2のプロセッサコアの1又は複数のパフォーマンスメトリックを決定し、かつ、(ii)前記第2のプロセッサコアの前記1又は複数のパフォーマンスメトリックが前記第1のプロセッサコアの前記1又は複数のパフォーマンスメトリックよりも良好であることの決定に応じて、前記プログラムコードの実行を、前記第1のプロセッサコアから前記第2のプロセッサコアにスイッチするコード分配モジュールと
    備え、
    前記第2のプロセッサコアの前記1又は複数のパフォーマンスメトリックを決定することは、前記第1のプロセッサコアが前記プログラムコードを実行する際の監視されたパフォーマンスおよび収集された統計データを予測関数に適用することを含む、
    ルチコア処理システム。
  2. 前記1又は複数のパフォーマンスメトリックは、コード領域の実行中に消費された電力量を含む、請求項1に記載のマルチコア処理システム。
  3. 前記コード分配モジュールはさらに、前記第1のプロセッサコアから前記第2のプロセッサコアへの前記プログラムコードの実行のスイッチに応じて、前記第1のプロセッサコアの電力を落とす、請求項1又は2に記載のマルチコア処理システム。
  4. 前記第1のプロセッサコアはインオーダプロセッサコアであり、前記第2のプロセッサコアはアウトオブオーダプロセッサコアである、請求項1から3のいずれか一項に記載のマルチコア処理システム。
  5. 前記第2のプロセッサコアはインオーダプロセッサコアであり、前記第1のプロセッサコアはアウトオブオーダプロセッサコアである、請求項1から3のいずれか一項に記載のマルチコア処理システム。
  6. 前記第1のプロセッサコアと、前記第2のプロセッサコアと、前記コード分配モジュールとを有する集積回路をさらに備える、請求項1から5のいずれか一項に記載のマルチコア処理システム。
  7. 前記集積回路は、前記第1のプロセッサコア及び前記第2のプロセッサコアによって共有されるメモリを管理するメモリコントローラをさらに有する、請求項6に記載のマルチコア処理システム。
  8. グラフィックプロセッサをさらに備える、請求項1から7のいずれか一項に記載のマルチコア処理システム。
  9. ネットワーク回路をさらに備える、請求項1から8のいずれか一項に記載のマルチコア処理システム。
  10. 前記システムメモリは、ランダムアクセスメモリ(RAM)を含む、請求項1から9のいずれか一項に記載のマルチコア処理システム。
JP2016003917A 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択 Active JP6627103B2 (ja)

Applications Claiming Priority (2)

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

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2015101264A Division JP6054467B2 (ja) 2011-03-11 2015-05-18 異種マルチコアシステム用のダイナミックコア選択

Publications (2)

Publication Number Publication Date
JP2016095872A JP2016095872A (ja) 2016-05-26
JP6627103B2 true JP6627103B2 (ja) 2020-01-08

Family

ID=46797157

Family Applications (6)

Application Number Title Priority Date Filing Date
JP2013557709A Active JP5750172B2 (ja) 2011-03-11 2011-12-28 異種マルチコアシステム用のダイナミックコア選択
JP2015101264A Active JP6054467B2 (ja) 2011-03-11 2015-05-18 異種マルチコアシステム用のダイナミックコア選択
JP2016003917A Active JP6627103B2 (ja) 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択
JP2016003888A Active JP6627102B2 (ja) 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択
JP2016003910A Active JP6661865B2 (ja) 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択
JP2019198170A Active JP6938593B2 (ja) 2011-03-11 2019-10-31 異種マルチコアシステム用のダイナミックコア選択

Family Applications Before (2)

Application Number Title Priority Date Filing Date
JP2013557709A Active JP5750172B2 (ja) 2011-03-11 2011-12-28 異種マルチコアシステム用のダイナミックコア選択
JP2015101264A Active JP6054467B2 (ja) 2011-03-11 2015-05-18 異種マルチコアシステム用のダイナミックコア選択

Family Applications After (3)

Application Number Title Priority Date Filing Date
JP2016003888A Active JP6627102B2 (ja) 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択
JP2016003910A Active JP6661865B2 (ja) 2011-03-11 2016-01-12 異種マルチコアシステム用のダイナミックコア選択
JP2019198170A Active JP6938593B2 (ja) 2011-03-11 2019-10-31 異種マルチコアシステム用のダイナミックコア選択

Country Status (7)

Country Link
US (7) US8683243B2 (ja)
EP (5) EP3076294B1 (ja)
JP (6) JP5750172B2 (ja)
KR (4) KR101899695B1 (ja)
CN (5) CN105843362B (ja)
TW (4) TWI605390B (ja)
WO (1) WO2012125200A2 (ja)

Families Citing this family (76)

* 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 ルネサスエレクトロニクス株式会社 情報処理装置および情報処理方法
US9588570B2 (en) * 2013-04-30 2017-03-07 Samsung Electronics Co., Ltd. Apparatus and method for adjusting bandwidth
KR102157326B1 (ko) * 2013-04-30 2020-09-17 삼성전자 주식회사 컴퓨팅 장치, 컴퓨팅 장치의 메모리 대역폭 조정 방법 및 메모리 대역폭 조정기
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
US20150220340A1 (en) * 2013-10-04 2015-08-06 Rajkishore Barik 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
US9823673B2 (en) 2014-04-08 2017-11-21 Qualcomm Incorporated Energy efficiency aware thermal management in a multi-processor system on a chip based on monitored processing component current draw
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 无锡江南计算技术研究所 一种基于多版本代码生成的众核循环分块方法
EP3385857A4 (en) * 2015-11-30 2018-12-26 Pezy Computing K.K. Die and package, and manufacturing method for die and producing method for package
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 커널을 처리하는 방법과 이를 수행하는 컴퓨팅 장치
PL3812900T3 (pl) 2016-12-31 2024-04-08 Intel Corporation Systemy, sposoby i aparaty do obliczania heterogenicznego
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
CN109937410B (zh) * 2017-10-25 2021-02-23 华为技术有限公司 核心调度方法和终端
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
CN113722082A (zh) * 2020-05-25 2021-11-30 阿里巴巴集团控股有限公司 任务调度方法、装置、系统及计算机可读介质
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
US12093096B2 (en) * 2022-12-15 2024-09-17 Qualcomm Incorporated Ruler-follower dynamic voltage and frequency scaling schemes for integrated circuit components
CN116400795A (zh) * 2023-06-09 2023-07-07 上海芯联芯智能科技有限公司 电源门控方法及系统级芯片
JP7562053B1 (ja) 2024-04-15 2024-10-04 三菱電機株式会社 プログラマブルロジックコントローラ、制御方法及びプログラム

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6233250Y2 (ja) 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
US7093147B2 (en) 2003-04-25 2006-08-15 Hewlett-Packard Development Company, L.P. Dynamically selecting processor cores for overall power efficiency
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 プログラムの実行方法と、マルチプロセッサシステム及びその制御プログラム
US7386739B2 (en) 2005-05-03 2008-06-10 International Business Machines Corporation Scheduling processor voltages and frequencies based on performance prediction and power constraints
US20080026332A1 (en) * 2006-06-19 2008-01-31 Kabushiki Kaisha Toshiba Developing agent and manufacturing method thereof
US20080263324A1 (en) * 2006-08-10 2008-10-23 Sehat Sutardja Dynamic core switching
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

Also Published As

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

Similar Documents

Publication Publication Date Title
JP6627103B2 (ja) 異種マルチコアシステム用のダイナミックコア選択
EP2588958B1 (en) Apparatus, method, and system for improving power performance efficiency by coupling a first core type with a second core type

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160115

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20160115

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20161129

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170228

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20170501

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170529

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171031

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20180130

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20180508

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180910

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20180918

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20181102

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20191108

R150 Certificate of patent or registration of utility model

Ref document number: 6627103

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250