JP2014182797A - 命令の制御フローの追跡 - Google Patents

命令の制御フローの追跡 Download PDF

Info

Publication number
JP2014182797A
JP2014182797A JP2014029706A JP2014029706A JP2014182797A JP 2014182797 A JP2014182797 A JP 2014182797A JP 2014029706 A JP2014029706 A JP 2014029706A JP 2014029706 A JP2014029706 A JP 2014029706A JP 2014182797 A JP2014182797 A JP 2014182797A
Authority
JP
Japan
Prior art keywords
instruction
processor
instruction block
control flow
execution
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.)
Granted
Application number
JP2014029706A
Other languages
English (en)
Other versions
JP5865405B2 (ja
Inventor
Bobba Jayaram
ボバ、ジャヤラム
Sasanka Ruchira
ササンカ、ルチラ
J Cook Jeffrey
ジェイ. クック、ジェフェリー
Das Abhinav
ダス、アビナブ
Krishnaswamy Arvind
クリシュナスワミー、アービンド
J Sager David
ジェイ. サガー、デーヴィッド
M Agron Jason
エム. アグロン、ジェイソン
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 JP2014182797A publication Critical patent/JP2014182797A/ja
Application granted granted Critical
Publication of JP5865405B2 publication Critical patent/JP5865405B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0715Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a system implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0751Error or fault detection not based on redundancy
    • G06F11/0754Error or fault detection not based on redundancy by exceeding limits
    • G06F11/076Error or fault detection not based on redundancy by exceeding limits by exceeding a count or rate limit, e.g. word- or bit count limit
    • 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】アプリケーション内の命令の制御フローを追跡し、アプリケーション内の命令の制御フローに基づいて処理デバイスの1つまたは複数の最適化を遂行するためのメカニズムを提供する。
【解決手段】制御フロー・モジュール140により、アプリケーション110内の命令ブロックの制御フローを示す制御フロー・データ145が生成される。制御フロー・データは、異なる命令ブロック115のために最適化が遂行できるか否かを示す注釈を含むことがある。また制御フロー・データは、追跡モジュール150により命令の実行を追跡し、処理モジュール160により命令ブロック内の命令がスレッド、プロセス、および/またはプロセッサの実行コアに割り当てられているか否かを決定し、かつ命令の実行の間にエラーが生じたか否かを決定するべく使用されることもある。
【選択図】図1

Description

ここで述べられている実施態様は、概して処理デバイスに関し、より詳細には、命令の制御フローの追跡に関する。
多くのアプリケーション(例:プログラム)は、アプリケーションの命令が処理デバイス(例:プロセッサ)によって実行されるときに相挙動を呈する。アプリケーションの実行が命令の異なる領域および/または命令ブロックの間を移動するとき、処理デバイスが異なる挙動特性を有することがある。たとえば、特定の命令ブロックは、無関係な命令を含むことがあり、また複数の命令の同時実行を可能にすることがある。別の例においては、特定の命令ブロックが、処理デバイスの特定の構成要素をより頻繁に使用することがある(例:より頻繁に算術論理ユニットおよび/またはメモリ・レジスタを使用することがある)。
上で論じたとおり、多くのアプリケーション(例:プログラム)は、アプリケーションの命令が処理デバイスによって実行されるときに相挙動を呈する。命令の領域または命令ブロックの分析は、処理デバイスが、命令の各個別の領域またはブロックのための処理能力および/またはパワーの利用を増加することおよび/または最適化することを可能にできる。命令の領域またはブロックを識別する可能ハードウエア・ソリューションは、相転移に対応する命令アドレスの連想メモリ(CAM:Content−Addressable Memory)を供給することである。処理デバイスが各命令を実行するとき、当該処理デバイスは、CAMにアクセスして新しいコード領域への入/出力があるか否か、および最適化を活性化するか否かを決定することが可能である。しかしながらCAMは、CAMのサイズが数エントリを超えるとパワー消費という見地から非効率になることがある。それに加えて、プログラマおよび/またはコンパイラが、現在実行中のアプリケーションの命令は何かについての情報を出力する追加の命令をアプリケーション自体の中に挿入(例:コンパイル時の間に)することがある。しかしながらこれは、アプリケーションの実行を遅くし、有意な量のオーバーヘッドを追加することがある。
この開示の実施態様は、アプリケーション内の命令の制御フローを追跡すること、およびアプリケーション内の命令の制御フローに基づいて処理デバイスの1つまたは複数の最適化を遂行することを供給する。
1つの実施態様においては、アプリケーション内の命令ブロックの制御フローを示す制御フロー・データが生成される。制御フロー・データは、異なる命令ブロックのために最適化が遂行できるか否かを示す注釈を含むことがある。また制御フロー・データは、命令の実行を追跡し、命令ブロック内の命令がスレッド、プロセス、および/またはプロセッサの実行コアに割り当てられているか否かを決定し、かつ命令の実行の間にエラーが生じたか否かを決定するべく使用されることもある。処理デバイスおよび/または処理デバイスに結合された追跡モジュールは、命令の実行を追跡すること、および/または制御フロー・データに基づいて処理デバイスの動作を最適化することができる。1つの実施態様においては、テーブルを使用して制御フロー・データが表現されることがあり、これは、処理デバイスおよび/または追跡モジュールが、テーブル内の単一の場所またはエントリを効率的にインデックスすることを可能にできる。
以下の実施態様は、コンピューティング・プラットフォームまたはマイクロプロセッサ等の特定の集積回路を参照して述べられているかも知れないが、そのほかの実施態様もそのほかのタイプの集積回路および論理デバイスに適用可能である。ここで述べられている実施態様の類似テクニックならびに教示が、そのほかのタイプの回路または半導体デバイスに適用されることはある。たとえば、開示されている実施態様は、デスクトップ・コンピュータ・システムまたはウルトラブック(Ultrabook(登録商標))に限定されない。また、そのほかのデバイス、たとえばハンドヘルド・デバイス、タブレット、そのほかのノートブック、システムオンチップ(SoC)デバイス、および埋込み型アプリケーションにおいて使用されることもある。ハンドヘルド・デバイスのいくつかの例には、携帯電話、インターネット・プロトコル・デバイス、デジタル・カメラ、携帯情報端末(PDA)、およびハンドヘルドPCが含まれる。埋込み型アプリケーションは、通常、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワーク・コンピュータ(NetPC)、セットトップ・ボックス、ネットワーク・ハブ、ワイド・エリア・ネットワーク(WAN)スイッチ、またはそのほかの任意の、以下に教示されている機能および動作の遂行が可能なシステムを含む。
以下の実施態様は、プロセッサを参照して述べられているが、そのほかの実施態様は、そのほかのタイプの集積回路および論理デバイスに適用可能である。本発明の実施態様の類似テクニックならびに教示は、そのほかのタイプの、より高いパイプライン・スループットおよび向上した処理能力から利益を得ることが可能な回路または半導体デバイスに適用可能である。本発明の実施態様の教示は、データ操作を遂行するプロセッサまたはマシンに適用可能である。しかしながら、本発明は、512ビット、256ビット、128ビット、64ビット、32ビット、または16ビット・データ動作を遂行するプロセッサまたはマシンに限定されず、データの操作または管理が遂行される任意のプロセッサまたはマシンに適用可能である。それに加えて、以下の説明は例を供給し、付随する図面は図解の目的のための多様な例を示す。しかしながら、これらの例は、本発明の実施態様のあらゆる可能な実装の網羅的なリストを供給するのではなく単に本発明の実施態様の例を供給することが意図されていることから、限定の意味に解釈されないものとする。
開示は、以下に与えられている詳細な説明から、また付随する開示の多様な実施態様の図面からより完全に理解されるであろう。しかしながらこれらの図面は、特定の実施態様に開示を限定するものとして解釈されるべきでなく、むしろ説明および理解のみのためのものである。
この開示の1つの実施態様に従ったアプリケーション内の命令の実行の制御フローを追跡するための追跡モジュールおよび制御フロー・モジュールを含むシステム・アーキテクチャのブロック図である。 この開示の1つの実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための制御フロー・データの例を図解したテーブルである。 この開示の別の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための制御フロー・データの例を図解したテーブルである。 1つの実施態様に従った、1つまたは複数の実行単位に対する命令ブロック内の命令の割付けの一例を図解したブロック図である。 この開示の追加の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブルである。 この開示の実施態様に従った、制御フロー・データを生成する制御フロー・モジュールを図解したブロック図である。 この開示の実施態様に従った、処理モジュールによって使用されるリソースの修正および/または命令の実行を追跡する追跡モジュールを図解したブロック図である。 この開示の1つの実施態様に従った、命令の制御フローを追跡する方法を図解したフローチャートである。 この開示の別の実施態様に従った、命令の制御フローを追跡する方法を図解したフローチャートである。 この開示の実施態様に従った、システムオンチップ(SoC)のブロック図である。 この開示に従ったシステムオンチップ(SoC)設計の実施態様のブロック図である。 この中で論じている方法のうちの任意の1つまたは複数をマシンに遂行させるための命令のセットを実行できるコンピュータ・システムの例示形式でマシンを図解した図式表現の図である。 1つの実装に従ったコンピュータ・システムのブロック図である。 図14の処理デバイス1400によって実装される、イン−オーダ・パイプラインおよびレジスタ名前変更段階、アウト−オブ−オーダ発行/実行パイプラインを図解したブロック図である。 この開示の少なくとも1つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行/実行論理を図解したブロック図である。 本発明の1つの実施態様に従った、命令を遂行する論理回路を含むプロセッサ200のためのマイクロアーキテクチャのブロック図である。
図1は、この開示の1つの実施態様に従ったアプリケーション内の命令の実行の制御フローを追跡するための追跡モジュール150および制御フロー・モジュール140を含むシステム・アーキテクチャ100のブロック図である。このシステム・アーキテクチャは、アプリケーション110、コンパイラ120、バイナリ・アナライザ130、実行時プロファイル135、制御フロー・データ145、および処理モジュール160も含む。
アプリケーション110は、プログラム、ソフトウエア・モジュール、ソフトウエア構成要素、および/または、そのほかの処理モジュール160によって実行できるソフトウエア要素とすることができる。アプリケーション110は、複数の命令を含むことができる。命令は、処理モジュール160に、限定ではないが、データの読み出し、データの書き込み、データの処理、データの定義化、データの変換、データの変形等々といった活動を遂行させるプログラム・コードを含むことができる。たとえば、アプリケーション110は、処理モジュール160にメディアアイテム(デジタル・ビデオ、デジタル・ミュージック等)を再生するメディア・プレーヤを実行させるか、または処理モジュール160にウェブ・ブラウザを実行させる命令を含むバイナリ・ファイルおよび/または実行可能ファイルとすることができる。アプリケーション110内の命令は、命令ブロック115A−115Xといった命令ブロック(例:一連の命令または命令のグループ)に分割されてよい。
命令ブロック115A−115Xは、多様な異なる命令(例:プログラム命令)を含むことができる。たとえば、命令ブロック115A−115Xは、ADD命令(2以上の値の加算)、MULT命令(2以上の値の乗算)、エクスクルーシブOR(XOR)命令(2以上の値の排他的論理和)、AND命令(2以上の値に対するビット単位の論理和)、ストア命令(レジスタ等のメモリの位置への値のストア)、JUMP命令(命令の実行フローを特定の命令へと指示すること)、BRANCH命令(1つまたは複数の条件等に基づいて、命令の実行フローを特定の命令へと指示すること)を含むことができる。1つの実施態様においては、命令ブロック115A−115Xを基本ブロックとすることができる。基本ブロックは、1つのエントリーポイント(例:基本ブロック内の1つの命令は、JUMPおよび/またはBRANCH命令の行き先になる)および1つのイグジットポイント(例:最後の命令は、異なる基本ブロックへのJUMPまたはBRANCH命令になることがある)を有する命令のグループ(例:ブロック)とすることができる。
処理モジュール160は、アプリケーション110の命令を実行できる。命令は、処理モジュール160に、限定ではないが、データの読み出し、データの書き込み、データの処理、データの定義化、データの変換、データの変形等々といった活動を遂行させるプログラム・コードを含むことができる。処理モジュール160は、1つの説明的な例として、複合命令セット・コンピュータ(CISC)マイクロプロセッサ、縮小命令セット・コンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、マルチコア・プロセッサ、マルチスレッド・プロセッサ、超低電圧プロセッサ、埋込み型プロセッサ、命令セットの組合せを実装するプロセッサ、および/または任意のそのほかのプロセッサ・デバイス、たとえばデジタル信号プロセッサを含むことができる。処理モジュール160は、カリフォルニア州サンタクララのインテル社から入手可能なCore(登録商標)i3、i5、i7、2 Duo、およびQuad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、またはStrongARM(登録商標)プロセッサ等の汎用プロセッサとすることができる。これに代えて、処理モジュール160をARMホーディングスのMIPS等の別の会社からのものとしてもよい。処理モジュール160は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィック・プロセッサ、コプロセッサ、埋込み型プロセッサ、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、デジタル信号プロセッサ(DSP)、またはこれらの類の専用プロセッサとすることができる。処理モジュール160は、1つまたは複数のチップ上に実装されることがある。処理モジュール160は、たとえばBiCMOS、CMOS、またはNMOS等の多くのプロセス・テクノロジのうちのいずれかを使用して、1つまたは複数の基板上に実装され、かつ/または当該基板の一部であってもよい。
1つの実施態様においては、処理モジュール160が異なる挙動、特性を呈すること、処理モジュール160の特定の構成要素(例:処理モジュール160内の特定の回路)をより頻繁に使用すること、および/または処理モジュール160によって命令ブロック115A−115Xのうちの1つまたは複数が実行されるときに特定の方法で機能することがある。たとえば、命令ブロック115Aは、算術および/または論理関数(XOR、ADD、MULT等)を行なう多様な命令(例:プログラム命令)を含むことができる。処理モジュール160は、ほかの命令ブロックと比較して命令ブロック115A内の命令の実行時に算術論理演算装置(ALU)をより多く使用することがある。別の例においては、命令ブロック115Bが無関係な命令(例:命令ブロック115B内のほかの命令に依存しない命令)を含むことがある。無関係な命令は、処理モジュール160による複数の命令の同時実行を可能にすることがある。1つの実施態様においては、命令レベルの並列性(ILP)が、処理モジュール160が同時に実行できる命令がいくつあるかという尺度となり得る。命令ブロック115内の命令が無関係(例:その命令がほかの命令の結果に依存しない)であることから、命令ブロック115Bは、ほかの命令ブロックより高い量の(ILP)を可能にできる。
1つの実施態様においては、ソース・コードに基づいてコンパイラ120がアプリケーション110を生成する。ソース・コードは、なんらかの人間可読言語(例:JAVA(登録商標)、C++、C、C#等のプログラミング言語)を使用して記述された1つまたは複数のコンピュータ命令とすることができる。コンパイラ120は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有し、追加のリンク処理を伴うか、または伴わずに、処理モジュール160によって実行可能な命令(例:バイナリ・コード、オブジェクト・コード、プログラム命令等)を生成する、任意の処理論理でよい。別の実施態様においては、コンパイラ120をジャストインタイム(JIT)コンパイラとすることがある。JITコンパイラは、ソース・コードからバイトコードを生成するコンパイラとすることができる。バイトコードは、処理モジュール160が実行可能とする命令(例:バイナリ・コード、オブジェクト・コード、プログラム命令等)へと、仮想マシンによって翻訳および/または解釈される中間表現でよい。JITコンパイラによって生成されるバイトコードは、異なるコンピュータ・アーキテクチャの間において移植可能であってよい。異なるコンピュータ・アーキテクチャのそれぞれに関連付けされた仮想マシンは、当該バイトコードを、当該コンピュータ・アーキテクチャによって使用される命令に翻訳および/または解釈することができる。
1つの実施態様においては、バイナリ・アナライザ130は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有し、処理モジュール160によってアプリケーション110が実行されている間(例:命令および/または命令ブロック115A−115Xが実行されている間)にアプリケーション110を分析できる処理論理でよい。バイナリ・アナライザ130は、アプリケーション110内のBRANCHおよび/またはJUMP命令の識別、BRANCHおよび/またはJUMP命令の行き先の識別、命令ブロック115A−115X内の命令のタイプ(例:メモリまたはレジスタにアクセスする命令、算術または論理動作命令等)の識別、アプリケーション110内の命令によって使用されるメモリの位置(例:レジスタ)の識別等を行なうことができる。バイナリ・アナライザ130は、また、アプリケーション110内の命令ブロック115A−115X(例:基本ブロック)の識別もできる。たとえば、バイナリ・アナライザ130は、アプリケーション110の複数の命令を命令ブロック115Cにグループ化できる。1つの実施態様において、バイナリ・アナライザ130は、処理モジュール160からアプリケーション110の命令の実行についてのデータを受信できる。バイナリ・アナライザ130は、実行時プロファイル135内のアプリケーション110の命令の実行についてのデータを記録および/またはストアできる。実行時プロファイル135は、BRANCHおよび/またはJUMP命令の位置、BRANCH命令の各パスを通った回数、命令によって使用および/またはアクセスされたメモリの位置、命令のタイプ等といったデータを含むことができる。1つの実施態様において、実行時プロファイル135は、アプリケーション110の命令がどのように実行されたかを示すデータでよく、これに代えて、またはこれに加えて、アプリケーション110の命令によって使用されたリソース(例:メモリ・レジスタ、回路、および/または処理モジュール160の構成要素)であってもよい。実行時プロファイル135は、命令、動作、関数、および/またはそのほかの、実行のために取られるアクションがどのくらい長いかを示すデータも含むことができる。たとえば、実行時プロファイル135は、処理モジュール160が特定の命令および/または命令ブロックの実行にどのくらいの時間を要したかを示すデータを含むことができる。実行時プロファイル135は、トレースまたは命令トレースと呼ばれることもある。
1つの実施態様において、制御フロー・モジュール140は、アプリケーション110のための制御フロー・データ145を生成できる。制御フロー・モジュール140は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理でよい。制御フロー・データ145は、命令ブロック115A−115Xのための識別子、行き先識別子(例:第1の命令ブロックの分岐またはジャンプ先の1つまたは複数の命令ブロックのための識別子)、および/または命令ブロック115A−115Xのうちの1つまたは複数のための注釈といった、データおよび/または情報を含むことができる。制御フロー・データ145については、図2、3、および5に関連してより詳細を後述する。制御フロー・モジュール140は、制御フロー・データ145を生成するために、コンパイラ120によって生成されたアプリケーション110を分析してよい。制御フロー・モジュール140は、アプリケーション110内の命令から命令ブロック(例:命令ブロック115A−115X)を識別することができる。たとえば、コンパイラ120は、アプリケーション110の複数の命令を命令ブロック115Dにグループ化できる。制御フロー・モジュール140は、BRANCHおよび/またはJUMP命令のための行き先命令ブロックを識別することもできる。たとえば、命令ブロック115Aは、BRANCH命令に関連付けられた条件が満たされたか否かに応じて命令ブロック115Bまたは命令ブロック115Dへ移動するBRANCH命令を含むことができる。
1つの実施態様において、制御フロー・モジュール140は、間接BRANCH命令を一連のCOMPARE命令およびJUMP命令に変換できる。間接BRANCH命令は、次に実行する命令のアドレスを指定するのではなく、どこにアドレスが位置するかを記述する命令でよい。制御フロー・モジュール140は、間接分岐の各ターゲットのためのCOMPAREおよびJUMP命令のペアを生成できる。たとえば、間接分岐命令が第1のターゲットおよび第2のターゲットを有する場合に、制御フロー・モジュールは、次の命令アドレスが第1のターゲットに等しいか否かを決定する第1のCOMPARE命令、および第1のターゲットと次の命令アドレスが等しい場合に実行される第1のJUMP命令を生成すること、次の命令アドレスが第2のターゲットに等しいか否かを決定する第2のCOMPARE命令、および第2のターゲットと次の命令アドレスが等しい場合に実行される第2のJUMP命令を生成することができる。間接分岐の形式のリターンのために、最適化が使用されてよい。リターンについてコンパイラ120は、リターンは対応する呼び出しに続く命令に制御を移すことであると識別してよい。リターン命令のターゲット命令は、制御フロー・テーブルに加えて、呼び出し/リターン・ブロックのスタックを維持することによって見つけることができる。
1つの実施態様において、制御フロー・モジュール140は、命令ブロック115A−115Xのうちの1つまたは複数のための注釈を生成できる。注釈は、制御フロー・データ145内に含めることができる。注釈は、アプリケーション110内の命令の実行の追跡に使用できるデータ、処理モジュール160によって使用されるリソースの修正に使用できるデータ、処理モジュール160のより効率的な動作を可能にするべく使用できるデータ、および/または処理モジュール160の動作の最適化に使用できるデータを含むことができる。たとえば、注釈は、命令ブロック内において可能となり得るILPの量といった情報を含むことができる。別の例においては、注釈が命令ブロック内の命令の数等の情報を含むことができる。この情報は、ハード・エラー(例:レジスタ等のメモリ内の物理的またはハードウエア・エラー)および/またはソフト・エラー(例:命令および/またはデータ値を変更する可能性のあるデータまたは信号内のエラー)の識別に使用できる。
1つの実施態様において、制御フロー・モジュール140は、制御フロー・データ145の生成時にコンパイラ120と通信(例:データの送信および/またはデータの受信)できる。たとえば、コンパイラ120がソース・コードをコンパイルしてアプリケーション110のための命令を生成するとき、コンパイラ120は、制御フロー・モジュール140に命令を供給でき、制御フロー・モジュール140は、それらの命令を分析して制御フロー・データ145を生成できる。別の実施態様において、制御フロー・モジュール140は、コンパイラ120の構成要素として、および/またはそれの一部として含められてよい。たとえば、制御フロー・モジュール140は、コンパイラ120がアプリケーション110のための命令を生成するときに、コンパイラ120によって使用されるソフトウエア・モジュールおよび/または構成要素でよい。コンパイラ120は、コンパイラ120がアプリケーション110のための命令を生成(例:アプリケーション110を生成)すると同時に、またはほぼ同時に、制御フロー・データ145を生成できる。
1つの実施態様において、制御フロー・モジュール140は、制御フロー・データ145の生成時にバイナリ・アナライザ130と通信(例:データの送信および/またはデータの受信)できる。たとえば、バイナリ・アナライザ130は、実行時プロファイル135を生成すること、および実行時プロファイル135を制御フロー・モジュール140に供給することができる。制御フロー・モジュール140は、制御フロー・データ145を生成するために、実行時プロファイル135を分析してよい。別の実施態様において、制御フロー・モジュール140は、バイナリ・アナライザ130の構成要素として、および/またはそれの一部として含められてよい。たとえば、バイナリ・アナライザ130は、バイナリ・アナライザ130が実行時プロファイル135を生成すると同時に、またはほぼ同時に、制御フロー・データ145を生成できる。
1つの実施態様において、追跡モジュール150は、アプリケーション110内の1つまたは複数の命令の実行を追跡すること、処理モジュール160のより効率的な動作を可能にすること、および/または制御フロー・データ145を使用して処理モジュール160の動作を最適化することができる。追跡モジュール150は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理でよい。たとえば、追跡モジュール150は、ハードウエアで実装される有限状態マシンとすることができる。有限状態マシンは、プログラマブル・ロジック・デバイス、プログラマブル・ロジック・コントローラ、論理ゲート、フリップフロップ、および/またはリレーを含むことができる。有限状態マシンは、状態変数をストアする1つまたは複数のメモリおよび/またはレジスタも含むことができる。さらに有限状態マシンは、状態遷移が生じることになるか否かを決定する1つまたは複数の組み合わせ論理ブロック、および有限状態マシンの出力を決定する1つまたは複数の組み合わせ論理ブロックを含むことができる。1つの実施態様において、追跡モジュール150は、処理モジュール160の一部でよい。たとえば、追跡モジュール150は、処理モジュール160内の回路でよい。
1つの実施態様において、追跡モジュール150は、処理モジュール160によって使用されるリソースを修正すること、および/または制御フロー・データ145に基づいて処理モジュール160の動作を最適化することができる。たとえば、追跡モジュール150は、命令ブロック115Aが低いILPを有していると決定できる。処理モジュール160は、複数の実行コア(例:4実行コア、8実行コア等)を有してよく、追跡モジュール150は、処理モジュール160によって使用されるパワーの量を抑えるべく、当該複数の実行コアのうちのいくつかを非活性化すること、パワー・ダウンすること、および/または使用を控えることを処理モジュール160に命令できる。別の例において、追跡モジュール150は、命令ブロック(例:命令ブロック115C)が殆どの算術および論理動作命令(例:ADD、XOR等)を含むと決定してよい。追跡モジュール150は、処理モジュール160に対して、次の命令ブロック内の命令のために算術および論理動作を行なう回路、構成要素、および/またはモジュールの準備を命令できる。
1つの実施態様において、追跡モジュール150は、処理モジュール160によって使用されるリソースの修正が処理モジュール160の動作に効果を有するか否かを決定できる。たとえば、追跡モジュール150は、処理モジュール160内の1つまたは複数の構成要素のパワー・ダウンまたは非活性化がコンピューティング・デバイスにパワーの節約(例:より少ないエネルギまたはバッテリ電力の使用)をもたらすか否かを決定できる。別の例においては、追跡モジュール150が、次の命令ブロックによって使用される処理モジュール160の回路、構成要素、および/またはモジュールの準備が、アプリケーション110内の命令の実行速度を増加するか否かを決定できる。1つの実施態様において、追跡モジュール150が、処理モジュール160によって使用されるリソースの修正が処理モジュール160の動作への効果を持たないと決定した場合に、追跡モジュール150は、リソースの修正が行なわれる必要がないことを示すべく(例:最適化が行なわれる必要がないことを示すべく)制御フロー・データ145を更新できる。たとえば、追跡モジュール150は、注釈(最適化を示すデータを含むことがある)を削除すること、またはリソースの修正が行なわれる必要がないことを示すデータを注釈に追加することができる。
別の実施態様において、追跡モジュール150は、制御フロー・データ145を使用してアプリケーション110内の命令の実行を追跡してよい。たとえば、追跡モジュール150は、処理モジュール160が命令ブロック115Aを実行していること、および命令ブロック115Aが12個の命令を含むことを決定できる。処理モジュール160が、12より少ない数の命令の実行後に別の命令ブロック(例:命令ブロック115D)内の命令の実行にジャンプした場合に、追跡モジュール150は、ほかの命令ブロックからの命令が実行される前に実行された命令が12より少ない数であることからエラー(例:ハード・エラーおよび/またはソフト・エラー)が生じたと決定できる。追跡モジュール150は、エラー・フラグを立てるか、または送信することができ、処理モジュール160は、当該エラー・フラグに基づいて追加の動作を行なうことができる(例:アプリケーション110のための命令の実行を終了できる)。別の例において、処理モジュール160は、異なるプロセス、スレッド、および/または実行コアを使用して命令ブロック内の命令を実行できる。処理モジュール160が命令ブロックからの命令を実行するとき、処理モジュール160は、命令をプロセス、スレッド、および/または実行コアに割り当てることができる。追跡モジュール150は、制御フロー・データ145に対する注釈の追加および/または更新を行ない、いずれのプロセス、スレッド、および/または実行コアに命令ブロック内の命令が割り当てられているかを示すことができる。
1つの実施態様において、コンパイラ120、バイナリ・アナライザ130、制御フロー・モジュール140、および追跡モジュール150のうちの1つまたは複数は、同一の、処理モジュール160が常駐するコンピューティング・デバイス内に常駐できる。たとえば、コンパイラ120、追跡モジュール150、および処理モジュール160は、同一のコンピューティング・デバイス内に常駐できる。別の例において、バイナリ・アナライザ130、制御フロー・モジュール140、および追跡モジュール150は、同一の、処理モジュール160が常駐するコンピューティング・デバイス内に常駐できる。コンピューティング・デバイスの例は、限定ではないが、セルラ・ハンドセット(例:携帯電話)またはスマートフォン等のモバイル通信デバイス、タブレット・コンピュータ等のモバイル・コンピューティング・デバイス、ネットブック、ノートブック・コンピュータ、ラップトップ・コンピュータ、デスクトップ・コンピュータ、サーバ・コンピュータ等々を含むことができる。
図2は、この開示の1つの実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル290である。上で論じたとおり、追跡モジュール150は、テーブル290(例:制御フロー・データ145)を使用して処理モジュール160(例:プロセッサ)によって使用されるリソースを修正し、処理モジュール160がより効率的に動作すること、および/または処理モジュール160の動作を最適化することを可能にできる。制御フロー・データ145は、テーブル(例:テーブル290)の形式で図解されているが、多様なデータ構造および/または表現を使用して制御フロー・データ145を表現できることは理解されるものとする。たとえば、制御フロー・データ145は、グラフ、ツリー、リスト等を使用して表現できる。
テーブル290は、4つの列を含む。第1列は、『現在のブロック』とラベル付けされ、6つの異なる命令ブロック(例:基本ブロック)のための識別子(例:ブロック識別子)を含む。図1に戻るが、識別子『1』を使用した命令ブロック115Aのラベル付け、識別子『2』を使用した命令ブロック115Bのラベル付け、識別子『3』を使用した命令ブロック115Cのラベル付け等々を行なうことができる。理解されるものとするが、そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および/またはそのほかの、命令ブロック(例:基本ブロック)の識別に使用できる値とすることができる。第2列は、『分岐なし』とラベル付けされ、BRANCH命令が採用されないときの行き先命令ブロックのための識別子を含む。たとえば、命令ブロック『1』の最後の命令がBRANCH命令であり、実行の間にBRANCH命令のための条件が満たされないことがある。処理モジュール160は、BRANCH命令のための条件が満たされないとき、命令ブロック『6』内の命令にジャンプすること、および/または進むことができる。1つの実施態様においては、命令ブロックが条件付きBRANCH命令を含まない旨をテーブル290が示すことができる。たとえば、命令ブロック『3』は、分岐なしの列に値『N/A』を有する。これは、命令ブロック『3』内の最後の命令が条件なしのBRANCHまたはJUMP命令である旨を示すことができる。第3列は、『分岐あり』とラベル付けされ、BRANCH命令が採用されるときの行き先命令ブロックのための識別子を含む。たとえば、命令ブロック『1』の最後の命令がBRANCH命令であり、実行の間にBRANCH命令のための条件が満たされることがある。処理モジュール160は、BRANCH命令のための条件が満たされるとき、命令ブロック『2』内の命令にジャンプすること、および/または進むことができる。第4列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための1つまたは複数の注釈を含む。
テーブル290内の各行は、現在の命令ブロックのための識別子(例:現在実行中の命令を含む命令ブロックのための識別子)、BRANCH命令が採用されない場合の行き先命令ブロックのための第1の識別子、およびBRANCH命令が採用される場合の行き先命令ブロックのための第2の識別子、および現在のブロック(例:現在の命令ブロックまたは現在の基本ブロック)のための注釈を含む。たとえば、テーブル290の第1行は、命令ブロック『1』が、命令ブロック『1』の最後のBRANCH命令が採用されない場合に命令ブロック『6』にジャンプすること、または命令ブロック『1』の最後のBRANCH命令が採用される場合に命令ブロック『2』にジャンプすることを示す。このテーブルの第1行は、注釈『分岐あり:2−WIDE』も含む。この注釈は、処理モジュール160が命令ブロック『2』からの命令を実行するときに可能となり得るILPの量またはレベルを示すことができる。たとえば、注釈『分岐あり:2−WIDE』は、処理モジュール160が、命令ブロック『2』からの命令の実行時に最大で2つの命令まで同時に実行可能となり得る旨を示すことができる。追跡モジュール150は、命令ブロック『1』のための注釈に基づいて、2つの実行コアを使用すること、およびそのほかの実行コアをパワー・ダウンすることを処理モジュール160に命令できる。別の例において、テーブル290の第5行のための注釈『分岐なし:4−WIDE』は、処理モジュール160が、命令ブロック『6』からの命令の実行時に最大で4つの命令まで同時に実行可能となり得る旨を示すことができる。追跡モジュール150は、命令ブロック5のための注釈に基づいて、4つの実行コアを使用することを処理モジュール160に命令できる。そのほかの実施態様においては、命令ブロックのための注釈が、任意の英数値、テキスト値、および/または数値を含むことがある。
1つの実施態様においては、追跡モジュール150がテーブル290内の単一のエントリおよび/または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル290が可能にする。これは、追跡モジュール150が、命令ブロックの実行の追跡にCAMを使用(全CAMのルックアップを必要とする)するより効率的に動作することを可能にする。
図3は、この開示の別の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル300である。上で論じたとおり、追跡モジュール150は、テーブル300(例:制御フロー・データ145)を使用して処理モジュール160によって実行される命令を追跡できる。制御フロー・データ145は、テーブル(例:テーブル300)の形式で図解されているが、多様なデータ構造および/または表現を使用して制御フロー・データ145を表現できることは理解されるものとする。たとえば、制御フロー・データ145は、グラフ、ツリー、リスト等を使用して表現できる。
テーブル300は、4つの列を含む。第1列は、『現在のブロック』とラベル付けされ、6つの異なる命令ブロック(例:基本ブロック)のための識別子(例:ブロック識別子)を含む。第2列は、『分岐なし』とラベル付けされ、BRANCH命令が採用されないときの行き先命令ブロックのための識別子を含む。1つの実施態様においては、命令ブロックが条件付きBRANCH命令を含まない旨をテーブル300が示すことができる。たとえば、命令ブロック『4』は、分岐なしの列に、命令ブロック『4』内の最後の命令が条件なしのBRANCHまたはJUMP命令である旨を示すことができる値『N/A』を有する。第3列は、『分岐あり』とラベル付けされ、BRANCH命令が採用されるときの行き先命令ブロックのための識別子を含む。そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および/またはそのほかの、命令ブロック(例:基本ブロック)を識別する識別子として使用できる値とすることができる。第4列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための1つまたは複数の注釈を含む。
テーブル300内の各行は、現在の命令ブロックのための識別子(例:現在実行中の命令を含む命令ブロックのための識別子)、BRANCH命令が採用されない場合の行き先命令ブロックのための第1の識別子、およびBRANCH命令が採用される場合の行き先命令ブロックのための第2の識別子、および現在のブロック(例:現在の命令ブロックまたは現在の基本ブロック)のための注釈を含む。たとえば、テーブル300の第2行は、命令ブロック『2』が、命令ブロック『2』の最後のBRANCH命令が採用されない場合に命令ブロック『3』にジャンプすること、または命令ブロック『2』の最後のBRANCH命令が採用される場合に命令ブロック『4』にジャンプすることを示す。テーブルの第2行は、注釈『命令カウント:3』も含む。この注釈は、命令ブロック『2』が3つの命令を含む旨を示すことができる。追跡モジュール150は、この注釈に基づいて命令ブロック内の命令の実行を追跡し、ソフト・エラーおよび/またはハード・エラーが生じたか否かを決定できる。たとえば、追跡モジュール150は、命令ブロック『2』の実行時に処理モジュール160が実行した命令が3未満であることからソフト・エラーが生じたことを決定できる。そのほかの実施態様においては、命令ブロックのための注釈が、任意の英数値、テキスト値、および/または数値を含み、命令ブロック内の命令の数を表わすことができる。
1つの実施態様においては、追跡モジュール150がテーブル300内の単一のエントリおよび/または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル300が可能にする。これは、追跡モジュール150が、命令ブロックの実行の追跡にCAMを使用(全CAMのルックアップを必要とする)するより効率的に動作することを可能にする。
図4は、1つの実施態様に従った、1つまたは複数の実行単位に対する命令ブロック内の命令の割付け400の例を図解したブロック図である。割付け400は、命令ブロック405、スレッド割り当て410、およびスレッド割り当て415を含む。命令ブロック405は、XOR命令、それに続くAND命令、それに続くSHIFT命令、それに続くOR命令、それに続くMULT命令、それに続くAND命令、それに続くSHIFT命令、それに続くBRANCH命令を含む。上で論じたとおり、命令ブロック(例:命令ブロック405)内の個別の命令は、異なる実行単位(例:異なるスレッドおよび/または異なるプロセス)またはプロセッサの異なる実行コアに割り当てることができる。たとえば、命令ブロック405内の個別の命令が1つまたは複数のスレッドに割り当てられることがある。別の例においては、命令ブロック405内の個別の命令が1つまたは複数のプロセスに割り当てられることがある。さらなる例においては、命令ブロック405内の個別の命令が異なる実行コア(例:図10に図解されているコア1002Aおよび図11に図解されているコア1106および1107)に割り当てられることがある。
図4に図解されているとおり、命令ブロック405内の命令を1つまたは複数のスレッド(例:実行単位)に割り当てることができる。スレッド割り当て410は、命令が第1のスレッドによって実行されるか否かを示し、スレッド割り当て415は、命令が第2のスレッドによって実行されるか否かを示す。値『1』は、スレッドが命令を実行することを示し、値『0』は、スレッドが命令を実行しないことを示す。たとえば、XOR命令が第1のスレッドに割り当てられ、MULT命令が第2のスレッドに割り当てられ、OR命令が第1のスレッドおよび第2のスレッドに割り当てられている。
図5は、この開示の追加の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル500である。上で論じたとおり、追跡モジュール150は、テーブル500(例:制御フロー・データ145)を使用して処理モジュール160によって実行される命令を追跡できる。制御フロー・データ145は、テーブル(例:テーブル500)の形式で図解されているが、多様なデータ構造および/または表現を使用して制御フロー・データ145を表現できることは理解されるものとする。たとえば、制御フロー・データ145は、グラフ、ツリー、リスト等を使用して表現できる。
テーブル500は、4つの列を含む。第1列は、『現在のブロック』とラベル付けされ、6つの異なる命令ブロック(例:基本ブロック)のための識別子(例:ブロック識別子)を含む。第2列は、『分岐なし』とラベル付けされ、BRANCH命令が採用されないときの行き先命令ブロックのための識別子を含む。1つの実施態様においては、命令ブロックが条件付きBRANCH命令を含まない旨をテーブル500が示すことができる。たとえば、命令ブロック『4』は、分岐なしの列に、命令ブロック『4』内の最後の命令が条件なしのBRANCHまたはJUMP命令である旨を示すことができる値『N/A』を有する。第3列は、『分岐あり』とラベル付けされ、BRANCH命令が採用されるときの行き先命令ブロックのための識別子を含む。そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および/またはそのほかの、命令ブロック(例:基本ブロック)を識別する識別子として使用できる値とすることができる。第4列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための1つまたは複数の注釈を含む。
テーブル500内の各行は、現在の命令ブロックのための識別子(例:現在実行中の命令を含む命令ブロックのための識別子)、BRANCH命令が採用されない場合の行き先命令ブロックのための第1の識別子、およびBRANCH命令が採用される場合の行き先命令ブロックのための第2の識別子、および現在のブロック(例:現在の命令ブロックまたは現在の基本ブロック)のための注釈を含む。たとえば、テーブル500の第1行は、命令ブロック『1』が、命令ブロック『1』の最後のBRANCH命令が採用されない場合に命令ブロック『6』にジャンプすること、または命令ブロック『1』の最後のBRANCH命令が採用される場合に命令ブロック『2』にジャンプすることを示す。このテーブル500の第1行は、注釈『T0:11010101/T1:01111010』も含む。命令ブロック『1』のための注釈は、命令ブロック『1』からの命令が第1のスレッドT0、第2のスレッドT1、またはその両方に割り当てられているか否かを示すことができる。図4に戻るが、命令ブロック『1』は、命令ブロック405内に図解されている8つの命令を含むことができる。注釈『T0:11010101/T1:01111010』は、命令ブロック『1』(例:命令ブロック405)内の1、2、4、6、および8番目の命令がスレッドT0に割り当てられていること、および命令ブロック『1』内の2、3、4、5、および7番目の命令がスレッドT1に割り当てられていることを示す。
1つの実施態様においては、追跡モジュール150がテーブル500内の単一のエントリおよび/または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル500が可能にする。これは、追跡モジュール150が、命令ブロックの実行の追跡にCAMを使用(全CAMのルックアップを必要とする)するより効率的に動作することを可能にする。
図6は、この開示の実施態様に従った、制御フロー・データ145を生成する制御フロー・モジュール140を図解したブロック図である。制御フロー・モジュール140は、命令モジュール605、注釈モジュール610、およびプロファイル・モジュール615を含む。制御フロー・モジュール140は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。一般性を失うことなく制御フロー・モジュール140内により多くの、またはより少ない構成要素を含めることはできる。たとえば、モジュールのうちの2つを単一のモジュールに結合すること、またはモジュールのうちの1つを2またはそれより多くのモジュールに分割することができる。1つの実施態様においては、制御フロー・モジュール140が、制御フロー・データ145(図1、2、3、および5に関連して上で論じたとおり)を生成できる。
1つの実施態様においては、命令モジュール605が、アプリケーション(コンパイラ120によって生成される)を分析できる。命令モジュール605は、アプリケーション内の命令内の命令ブロック(例:基本ブロック)を識別できる。命令モジュール605は、また、アプリケーションの命令ブロック内のBRANCHおよび/またはJUMP命令のための行き先命令ブロックも識別できる。命令モジュール605は、制御フロー・データ145の生成時にコンパイラ120と通信(例:データの送信および/またはデータの受信)できる。たとえば、コンパイラ120がソース・コードをコンパイルしてアプリケーションを生成するとき、コンパイラ120は、命令モジュール605に命令を供給でき、命令モジュール605は、それらの命令を分析して制御フロー・データ145を生成できる。
1つの実施態様においては、プロファイル・モジュール615が、バイナリ・アナライザ130と通信(例:データの送信および/またはデータの受信)できる。たとえば、バイナリ・アナライザ130は、実行時プロファイル135を生成すること、および実行時プロファイル135をプロファイル・モジュール615に供給することができる。プロファイル・モジュール615は、実行時プロファイル135に基づいてアプリケーション内の命令内の命令ブロック(例:基本ブロック)を識別できる。プロファイル・モジュール615は、また、実行時プロファイル135に基づいてアプリケーションの命令ブロック内のBRANCHおよび/またはJUMP命令のための行き先命令ブロックも識別できる。プロファイル・モジュール615は、実行時プロファイル135を分析して制御フロー・データ145を生成できる。
1つの実施態様においては、注釈モジュール610が、命令のうちの1つまたは複数のための注釈を生成できる。注釈は、制御フロー・データ145内に含めることができる。注釈は、上で説明し、図3−5に関連して論じたとおり、アプリケーション内の命令の実行の追跡に使用できるデータを含むことができる。注釈は、処理モジュール160によって使用されるリソースの修正に使用できるデータ、処理モジュール160のより効率的な動作を可能にするべく使用できるデータ、および/または処理モジュール160の動作の最適化に使用できるデータを含むことができる。たとえば、注釈は、命令ブロック内において可能となり得るILPの量といった情報を含むことができる。別の例においては、注釈が、命令ブロックが使用できる処理デバイスの構成要素および/またはユニットのタイプについての情報を含むことができる。これは、処理モジュール160が命令によって使用される構成要素および/またはユニットを準備することを可能にできる。
図7は、この開示の実施態様に従った、処理モジュール160によって使用されるリソースの修正および/または命令の実行を追跡する追跡モジュール150を図解したブロック図である。追跡モジュール150は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。1つの実施態様においては、追跡モジュール150がアプリケーション内の1つまたは複数の命令の実行を追跡すること、処理モジュール160のより効率的な動作を可能にすること、および/または処理モジュール160の動作を最適化することができる。追跡モジュール150は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。一般性を失うことなく追跡モジュール150内により多くの、またはより少ない構成要素を含めることはできる。たとえば、モジュールのうちの2つを単一のモジュールに結合すること、またはモジュールのうちの1つを2またはそれより多くのモジュールに分割することができる。
1つの実施態様においては、行き先モジュール705が、処理モジュール160上で実行している現在の命令ブロックのための行き先命令ブロックを決定できる。たとえば、行き先モジュール705は、処理モジュール160と通信してBRANCH命令の結果を決定できる。別の例においては、行き先モジュール705が、JUMP命令の行き先を決定できる。
1つの実施態様においては、処理デバイス・ツール715が、処理モジュール160によって使用されるリソースを修正すること、および/または制御フロー・データ145に基づいて処理モジュール160の動作を最適化することができる。たとえば、処理デバイス・ツール715は、処理モジュール160によって使用されるパワーの量を抑えるべく実行コアのうちのいくつかを非活性化すること、パワー・ダウンすること、および/または使用を控えることを処理モジュール160に命令できる。別の例においては、処理デバイス・ツール715が、処理モジュール160に対して、次の命令ブロック内の命令によって使用される回路、構成要素、および/またはモジュールの準備を命令できる。1つの実施態様においては、処理デバイス・ツール715が、処理モジュール160によって使用されるリソースの修正が処理モジュール160の動作に効果を有するか否かを決定できる。処理デバイス・ツール715が、処理モジュール160によって使用されるリソースの修正が処理モジュール160の動作への効果を持たないと決定した場合に、処理デバイス・ツール715は、リソースの修正が行なわれる必要がないことを示すべく制御フロー・データ145を更新できる。
別の実施態様においては、処理デバイス・ツール715が、制御フロー・データ145を使用してアプリケーション内の命令の実行を追跡できる。たとえば、処理デバイス・ツール715は、処理モジュール160が12個の命令を含む命令ブロックを実行していることを決定できる。処理モジュール160が、12より少ない数の命令の実行後に別の命令にジャンプした場合に、追跡モジュールは、エラー(例:ハード・エラーおよび/またはソフト・エラー)が生じたと決定できる。別の例においては、処理モジュール160が、異なるプロセス、スレッド、および/または実行コアを使用して命令ブロック内の命令を実行できる。処理モジュール160が命令ブロックからの命令を実行するとき、処理モジュール160は、命令をプロセス、スレッド、および/または実行コアに割り当てることができる。処理デバイス・ツール715は、制御フロー・データ145に対する注釈の追加および/または更新を行ない、いずれのプロセス、スレッド、および/または実行コアに命令ブロック内の命令が割り当てられているかを示すことができる。
図8は、ある実施態様に従った、命令の実行を追跡する方法800を図解したフローチャートである。方法800は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理によって遂行できる。1つの実施態様においては、方法800が、図1、6、および7に示されているとおりの制御フロー・モジュール140および追跡モジュール150のうちの1つまたは複数によって遂行されることがある。
図8を参照すると、方法800はブロック805において開始し、それにおいて方法800は、制御フロー・データ145を生成する(例:図2、4、および5に図解されているとおりのテーブルを生成する)。1つの実施態様においては、方法800が、アプリケーションのためのソース・コードのコンパイル時に制御フロー・データ145を生成できる。別の実施態様においては、方法800が、アプリケーションを走らせるときに制御フロー・データ145を生成できる。たとえば、方法800は、処理モジュール160によって命令が実行されているときにそのアプリケーションのための命令を分析できる。さらなる実施態様においては、方法800が、実行時プロファイル135に基づいて制御フロー・データ145を生成できる。ブロック810においては、方法800が、現在実行中の命令ブロックのための行き先識別子を決定する。たとえば、図2に戻るが、現在実行中の命令ブロックが命令ブロック『1』であれば、方法800は、命令ブロック『1』が命令ブロック『2』に分岐するか、またはジャンプすることになると決定できる。方法800は、現在実行中の命令ブロックに関連付けされた注釈を識別する(ブロック815)。ブロック820において方法800は、制御フロー・データ145に基づいて処理モジュール160によって使用されるリソースを修正するか、かつ/または命令の実行を追跡する。たとえば、方法800は、処理モジュール160内の構成要素および/または回路を非活性化できる。別の例においては、方法800が、命令が割り当てられているスレッド、プロセス、および/または実行コアを追跡できる。さらなる例においては、方法800が、命令ブロック(例:基本ブロック)内の命令の数を追跡できる。方法800は、ブロック820の後に終了する。
図9は、別の実施態様に従った、命令の実行を追跡する方法900を図解したフローチャートである。方法900は、ハードウエア(例:回路、専用論理、プログラム可能論理、マイクロコード等)、ソフトウエア(処理デバイス上で実行される命令等)、ファームウエア、またはこれらの組合せを有する処理論理によって遂行できる。1つの実施態様においては、方法900が、図1、6、および7に示されているとおりの制御フロー・モジュール140および追跡モジュール150のうちの1つまたは複数によって遂行されることがある。
図9を参照すると、方法900はブロック905において開始し、それにおいて方法900は、現在実行中の命令ブロックのための行き先識別子を決定する。たとえば、図2に戻るが、現在実行中の命令ブロックが命令ブロック『5』であれば、方法800は、命令ブロック『5』が命令ブロック『6』に分岐するか、またはジャンプすることになると決定できる。方法900は、現在実行中の命令ブロックに関連付けされた注釈を識別する(ブロック910)。ブロック915において方法900は、制御フロー・データ145に基づいて処理モジュール160によって使用されるリソースを修正するか、かつ/または命令の実行を追跡する。たとえば、方法900は、処理モジュール160内の構成要素および/または回路を非活性化できる。別の例においては、方法900が、命令が割り当てられているスレッド、プロセス、および/または実行コアを追跡できる。さらなる例においては、方法900が、命令ブロック(例:基本ブロック)内の命令の数を追跡できる。
ブロック920において方法900は、処理モジュール160によって使用されるリソースの修正が有用であるか否か(例:処理モジュール160によって使用されるリソースの修正が処理モジュール160の動作の仕方に影響を及ぼすか否か)を決定できる。たとえば、方法900は、処理モジュール160内の1つまたは複数の回路の非活性化がパワーを節約するか否かを決定できる。別の例においては、方法900が、次の命令ブロック内の命令のために準備するべく処理モジュール160の特定の構成要素および/または回路を準備することが、命令の実行速度を増加するか否かを決定できる。リソースの修正が有用である場合には、方法900が終了する。リソースの修正が有用でない場合には、方法900がブロック925に進み、それにおいて方法900は、リソースの修正が行なわれる必要がないことを示すべく注釈を更新する。たとえば、方法900は、注釈を削除すること、またはリソースの修正が行なわれる必要がないことを示すデータを注釈に追加することができる。方法900は、ブロック925の後に終了する。
図10は、この開示の実施態様に従った、SoC1000のブロック図である。破線のボックスは、より高度なSoCのオプションの特徴である。図10において、相互接続ユニット(1つまたは複数)1012は、1つまたは複数のコア1002A−Nおよび共有キャッシュ・ユニット(1つまたは複数)1006のセットを含むアプリケーション・プロセッサ1020、システム・エージェント・ユニット1010、バス・コントローラ・ユニット(1つまたは複数)1016、内蔵型メモリ・コントローラ・ユニット(1つまたは複数)1014、内蔵型グラフィクス論理1008、スチルおよび/またはビデオ・カメラ機能を供給するための画像処理プロセッサ1024、ハードウエア・オーディオ・アクセラレーションを供給するためのオーディオ・プロセッサ1026、およびビデオ符号化/復号化アクセラレーションを供給するためのビデオ・プロセッサ1028を含むことができるセットまたは1つ若しくは複数のメディア・プロセッサ1018、スタティック・ランダム・アクセス・メモリ(SRAM)ユニット1030、ダイレクト・メモリ・アクセス(DMA)ユニット1032、および1つまたは複数の外部ディスプレイに結合するためのディスプレイ・ユニット1040に結合される。
メモリ階層は、コア内の1つまたは複数のレベルのキャッシュ、セットまたは1つまたは複数の共有キャッシュ・ユニット1006、および内蔵型メモリ・コントローラ・ユニット1014のセットに結合された外部メモリ(図示せず)を含む。共有キャッシュ・ユニット1006のセットは、レベル2(L2)、レベル3(L3)、レベル4(L4)、またはそのほかのレベルのキャッシュ等の1つまたは複数の中レベル・キャッシュ、最終レベルのキャッシュ(LLC)、および/またはこれらの組合せを含むことができる。
いくつかの実施態様においては、コア1002A−Nのうちの1つまたは複数がマルチスレッドの能力を有する。
システム・エージェント・ユニット1010は、コア1002A−Nを調和させ、動作させる構成要素を含む。システム・エージェント・ユニット1010は、たとえば、パワー制御ユニット(PCU)およびディスプレイ・ユニットを含むことができる。PCUは、コア1002A−Nおよび内蔵型グラフィクス論理1008のパワー状態を調整するために必要な論理および構成要素であるとすること、またはそれを含むとすることができる。ディスプレイ・ユニット1040は、外部的に接続された1つまたは複数のディスプレイを駆動するためのものである。
コア1002A−Nは、アーキテクチャおよび/または命令セットという見地から同種または異種とすることができる。たとえば、コア1002A−Nのいくつかをイン−オーダ、ほかをアウト−オブ−オーダとすることができる。別の例においては、コア1002A−Nのうちの2つまたはそれより多くが同一命令セットを実行する能力を持つとすること、そのほかがその命令セットまたは異なる命令セットのサブセットを実行する能力しか持たないとすることができる。
アプリケーション・プロセッサ1020は、カリフォルニア州サンタクララのインテル社から入手可能なCore(登録商標)i3、i5、i7、2 Duo、およびQuad、Xeon(登録商標)、Itanium(登録商標)、XScale(登録商標)、またはStrongARM(登録商標)プロセッサ等の汎用プロセッサとすることができる。それに代えて、アプリケーション・プロセッサ1020をARMホーディングス、MIPS等の別の会社からのものとしてもよい。アプリケーション・プロセッサ1020は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィック・プロセッサ、コプロセッサ、埋込み型プロセッサ、またはこれらの類の専用プロセッサとすることができる。アプリケーション・プロセッサ1020は、1つまたは複数のチップ上に実装されることがある。アプリケーション・プロセッサ1020は、たとえばBiCMOS、CMOS、またはNMOS等の多くのプロセス・テクノロジのうちのいずれかを使用して1つまたは複数の基板上に実装されるか、かつ/またはそれの一部とすることができる。
図11は、この開示に従ったシステムオンチップ(SoC)設計の実施態様のブロック図である。特定の図解の例として、SoC1100は、ユーザ機器(UE)を含む。1つの実施態様においては、UEが、携帯電話、スマートフォン、タブレット、超薄型ノートブック、ブロードバンド・アダプタ付きノートブック、または任意のそのほかの類似の通信デバイス等のエンド・ユーザによって通信に使用されることになる任意のデバイスを参照する。しばしばUEは、本質的にGSM(登録商標)ネットワーク内のモバイル局(MS)と潜在的に対応する基地局またはノードに接続する。
ここでは、SoC1100が、2つのコア1106および1107を含む。コア1106および1107は、インテル(Intel(R))のアーキテクチャ・コア(Architecture Core(登録商標))ベースのプロセッサ、アドバンスド・マイクロ・デバイセズ(Advanced Micro Devices, Inc.)(AMD)のプロセッサ、MIPSベースのプロセッサ、ARMベースのプロセッサ設計、またはカスタマ自体をはじめ、それらのライセンシーまたは採用者等の命令セット・アーキテクチャに準ずることができる。コア1106および1107は、バス・インターフェース・ユニット1109およびL2キャッシュ1110に関連付けされてシステム1100のほかの部分と通信するL2キャッシュ制御11011に結合される。相互接続1110は、IOSF、AMBA、または上で論じた内部接続といった、ここで述べている開示の1つまたは複数の態様を潜在的に実装する相互接続等のオンチップ相互接続を含む。
インターフェース1110は、SIMカードとインターフェースする加入者識別モジュール(SIM)1130、SoC1100の初期化およびブートのためにコア1106および1107によって実行されるブート・コードを保持するブートROM1135、外部メモリ(例:DRAM1160)とインターフェースするSDRAMコントローラ1140、不揮発性メモリとインターフェースする(例:フラッシュ1165)フラッシュ・コントローラ1145、周辺機器とインターフェースする周辺コントロール(PC)1150(例:シリアル周辺インターフェース)、入力(例:タッチ・イネーブル入力)の受信および表示を行なうビデオ・コーデック1120およびビデオ・インターフェース1125、グラフィクス関連の計算を行なうGPU1115等といったほかの構成要素への通信チャンネルを供給する。これらのインターフェースのうちのいずれかは、ここで述べている開示の態様を組み込むことができる。
それに加えてシステム1100は、ブルートゥース(Bluetooth(登録商標))モジュール1170、3Gモデム1175、GPS1180、Wi−Fi1185等の通信のための周辺機器を図解している。上で述べたとおり、UEは、通信のための無線を含む。その結果、これらの周辺通信モジュールのすべてが必要とはされない。しかしながら、UEには、外部通信のための何らかの形式の無線が含められるものとする。
図12は、この中で論じている方法のうちの任意の1つまたは複数をマシンに遂行させるための命令のセットを実行できるコンピュータ・システム1200の例示形式でマシンの図式表現を図解している。代替実施態様においては、マシンが、LAN、インターネット、エクストラネット、またはイントラネット内のほかのマシンに接続される(例:ネットワークされる)ことがある。マシンは、サーバのキャパシティの中、クライアント−サーバ・ネットワーク環境内のクライアント・デバイス、またはピア−トゥ−ピア(または分散)ネットワーク環境内におけるピア・マシンとして動作できる。マシンは、パーソナル・コンピュータ(PC)、タブレットPC、セットトップ・ボックス(STB)、携帯情報端末(PDA)、携帯電話、ウェブ・アプライアンス、サーバ、ネットワーク・ルータ、スイッチまたはブリッジ、または任意の、そのマシンによって取られるアクションを指定する命令のセットを(シーケンシャルに、またはそのほかの形で)実行する能力を持ったマシンとすることができる。さらに、ここには単一のマシンだけが図解されているが、用語『マシン』は、この中で論じている方法の任意の1つまたは複数を遂行する命令のセット(または複数セット)を個別に、または連帯的に実行するマシンの任意の集合を含むと解釈されるものとする。
コンピュータ・システム1200は、処理デバイス1202、メイン・メモリ1204(例:読出し専用メモリ(ROM)、フラッシュ・メモリ、ダイナミック・ランダム・アクセス・メモリ(DRAM)(シンクロナスDRAM(SDRAM)、またはDRAM(RDRAM)等)、スタティック・メモリ1206(例:フラッシュ・メモリ、スタティック・ランダム・アクセス・メモリ(SRAM)等)、およびデータ・ストレージ・デバイス1218を含み、これらはバス1230を介して互いに通信する。
処理デバイス1202は、マイクロプロセッサ、中央処理ユニット、またはこれらの類といった1つまたは複数の汎用処理デバイスを表わす。より詳細に述べれば、処理デバイスは、複合命令セット・コンピューティング(CISC)マイクロプロセッサ、縮小命令セット・コンピュータ(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、またはそのほかの命令セットを実装するプロセッサ、または命令セットの組合せを実装するプロセッサとすることができる。処理デバイス1202は、特定用途向け集積回路(ASIC)、フィールド・プログラマブル・ゲート・アレイ(FPGA)、デジタル信号プロセッサ(DSP)、ネットワーク・プロセッサ、またはこれらの類といった専用処理デバイスのうちの1つまたは複数とすることができる。1つの実施態様においては、処理デバイス1202が、1つまたは複数の処理コアを含むことがある。処理デバイス1202は、この中で論じている動作を遂行するための命令1226を実行するべく構成される。
コンピュータ・システム1200は、さらに、ネットワーク1220と通信可能に結合されるネットワーク・インターフェース・デバイス1208を含むことができる。コンピュータ・システム1200は、ビデオ・ディスプレイ・ユニット1210(例:液晶ディスプレイ(LCD)または陰極線管(CRT))、英数入力デバイス1212(例:キーボード)、カーソル制御デバイス1214(例:マウス)、信号発生デバイス1216(例:スピーカ)、またはそのほかの周辺デバイスも含むことができる。さらにまた、コンピュータ・システム1200は、グラフィック処理ユニット1222、ビデオ処理ユニット1228、およびオーディオ処理ユニット1232を含むことができる。別の実施態様においては、コンピュータ・システム1200が、処理デバイス1202とともに機能するべく設計され、処理デバイス1202と外部デバイスの間の通信を制御するチップセット(図解せず)すなわち集積回路またはチップのグループを含むことができる。たとえば、チップセットをマザーボード上のチップのセットとすることができ、それが処理デバイス1202を非常に高速なメイン・メモリ1204およびグラフィック・コントローラ等のデバイスとリンクするだけでなく、処理デバイス1202をより低速な、USB、PCI、またはISAバス等の周辺機器の周辺バスとリンクする。
データ・ストレージ・デバイス1218は、この中で述べている機能の方法のうちの任意の1つまたは複数を具体化する命令1226がストアされるコンピュータ可読ストレージ媒体1224を含むことができる。命令1226は、コンピュータ・システム1200によるそれらの実行の間に、完全に、または少なくとも部分的にメイン・メモリ1204内および/または処理デバイス1202内に常駐することが可能であり、メイン・メモリ1204および処理デバイス1202もまたコンピュータ可読ストレージ媒体を構成する。
コンピュータ可読ストレージ媒体1224は、図1、6、および7に関係して述べたとおりの制御フロー・モジュール140および/または追跡モジュール150利用する命令1226、および/または上記のアプリケーションを呼び出すメソッドを含むソフトウエア・ライブラリのストアにも使用される。例示の実施態様内には、コンピュータ可読ストレージ媒体1224が単一の媒体として示されているが、用語『コンピュータ可読ストレージ媒体』は、1つまたは複数の命令セットをストアする単一の媒体または複数の媒体(例:集中型または分散型データベース、および/または関連キャッシュおよびサーバ)を含むと解釈されるものとする。用語『コンピュータ可読ストレージ媒体』もまた、マシンによる実行のための命令のセットをストアし、符号化し、または担持する能力があり、かつマシンにこの実施態様の方法のうちの任意の1つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。したがって、用語『コンピュータ可読ストレージ媒体』は、限定ではないが、ソリッド・ステート・メモリ、および光学および磁気媒体を含むと解釈されるものとする。
図13は、ある実装に従ったマルチプロセッサ・システム1300のブロック図である。図13に示されているとおり、マルチプロセッサ・システム1300は、ポイント−トゥ−ポイント相互接続システムであり、ポイント−トゥ−ポイント相互接続1350を介して結合された第1のプロセッサ1370および第2のプロセッサ1380を含む。プロセッサ1370および1380のそれぞれは、図6の処理デバイス602のいずれかのバージョンとすることができる。図13に示されているとおり、プロセッサ1370および1380のそれぞれは、第1および第2のプロセッサ・コア(すなわち、プロセッサ・コア1374aおよび1374bおよびプロセッサ・コア1384aおよび1384b)を含むマルチコア・プロセッサであるとすることができるが、潜在的にはるかに多くのコアがプロセッサ内に存在する可能性がある。プロセッサ・コアは、実行コアと呼ばれることもある。プロセッサは、それぞれ、ある実施態様に従ったハイブリッド書き込みモード論理を含むことができる。1つの実施態様においては、プロセッサ1370および1380のうちの1つまたは複数が、制御フロー・モジュール(例:図1に図解されている制御フロー・モジュール140)を実行できる。別の実施態様においては、追跡モジュール(例:図1に図解されている追跡モジュール150)をプロセッサ1370および1380のうちの1つまたは複数に含めること、またはそれの一部とすることができる。
ここでは2つのプロセッサ1370、1380が示されているが、この開示の範囲がそのように限定されないことは理解されるものとする。ほかの実装においては、1つまたは複数の追加のプロセッサが所定のプロセッサ内に存在し得る。
プロセッサ1370および1380は、それぞれが内蔵型メモリ・コントローラ・ユニット1372および1382を含むとして示されている。プロセッサ1370は、それのバス・コントローラ・ユニットの一部としてポイント−トゥ−ポイント(P−P)インターフェース1376および1378を含み、第2のプロセッサ1380もP−Pインターフェース1386および1388を含む。プロセッサ1370、1380は、ポイント−トゥ−ポイント(P−P)インターフェース1350を介し、P−Pインターフェース回路1378、1388を使用して情報を交換できる。図13に示されているとおり、IMCS1372および1382は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサにローカルに取り付けられたメイン・メモリの一部とすることができるメモリ1332およびメモリ1334に結合する。1つの実施態様においては、制御フロー・データ145(例:図2、3、および5に図解されているテーブル200、300、および500)をメモリ1332および1334のうちの1つまたは複数にストアできる。
プロセッサ1370および1380は、それぞれ個別のP−Pインターフェース1352、1354を介し、ポイント−トゥ−ポイント・インターフェース回路1376、1394、1386、および1398を使用してチップセット1390と情報を交換できる。チップセット1390もまた、高処理能力グラフィック・インターフェース1339を介して高処理能力グラフィック回路1338と情報を交換できる。
プロセッサが低パワー・モードに置かれている場合にいずれかまたは両方のプロセッサのローカル・キャッシュの情報を共有キャッシュ内にストアできるように、共有キャッシュ(図示せず)をいずれかのプロセッサ内または両方のプロセッサの外に、P−P相互接続を介してプロセッサと接続されるが、含めることができる。
チップセット1390は、インターフェース1396を介して第1のバス1316と結合できる。1つの実施態様においては、第1のバス1316がPCI(ペリフェラル・コンポーネント・インターコネクト(Peripheral Component Interconnect))バスまたはPCIエクスプレス(PCI Express)バスまたはそのほかの第3ジェネレーション入出力相互接続バス等のバスとすることができるが、この開示の範囲がそのように限定されることはない。
図13に示されているとおり、第1のバス1316には、第1のバス1316を第2のバス1320に結合するバス・ブリッジ1318とともに多様な入出力デバイス1314を結合できる。1つの実施態様においては、第2のバス1320をLPC(ロー・ピン・カウント(Low Pin Count))バスとすることができる。第2のバス1320には、たとえば、キーボードおよび/またはマウス1322、通信デバイス1327、および1つの実施態様においては命令/コードおよびデータ1330を含むことができるディスク・ドライブまたはそのほかの大容量ストレージ・デバイス等のストレージ・ユニット1328を含めた多様なデバイスを結合できる。さらに第2のバス1320には、オーディオ入出力1324を結合できる。注意されるものとするが、このほかのアーキテクチャも可能である。たとえば、図13のポイント−トゥ−ポイント・アーキテクチャに代えて、システムは、マルチ−ドロップ・バスまたはそのほかのその種のアーキテクチャを実装できる。
図14は、処理デバイスによって実装される、イン−オーダ・パイプラインおよびレジスタ名前変更段階、アウト−オブ−オーダ発行/実行パイプラインを図解したブロック図である。図14は、本発明の少なくとも1つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行/実行論理を図解したブロック図である。図14内の実線のボックスはイン−オーダ・パイプラインを図解し、破線のボックスはレジスタ名前変更、アウト−オブ−オーダ発行/実行パイプラインを図解している。同様に図14内の実線のボックスはイン−オーダ・アーキテクチャ論理を図解し、破線のボックスはレジスタ名前変更論理およびアウト−オブ−オーダ発行/実行論理を図解している。図14において、プロセッサ・パイプライン1400は、フェッチ段階1402、長さ復号化段階1404、復号化段階1406、割付けステージ1408、名前変更段階1410、スケジューリング(ディスパッチまたは発行としても知られる)段階1412、レジスタ読み出し/メモリ読み出し段階1414、実行段階1416、書き戻し/メモリ書き込み段階1418、例外ハンドリング段階1422、コミット段階1424を含む。
図15は、この開示の少なくとも1つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行/実行論理を図解したブロック図である。図15において、矢印は、2つまたはそれより多くのユニットの間における結合を示し、矢印の方向は、それらのユニットの間におけるデータ・フローの方向を示す。図15は、実行エンジン・ユニット1550に結合されたフロントエンド・ユニット1530を含み、それら両方がメモリ・ユニット1570に結合されるプロセッサ・コア1590を示している。1つの実施態様においては、制御フロー・データ145(例:図2、3、および5に図解されているテーブル200、300、および500)をメモリ・ユニット1570にストアできる。
コア1590は、縮小命令セット・コンピューティング(RISC)コア、複合命令セット・コンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッドもしくは代替コア・タイプとすることができる。さらに別のオプションとして、コア1590は、たとえば、ネットワークまたは通信コア、圧縮エンジン、グラフィック・コア、またはこれらの類の専用コアとすることができる。1つの実施態様においては、コア1590が、制御フロー・モジュール(例:図1に図解されている制御フロー・モジュール140)を実行できる。別の実施態様においては、追跡モジュール(例:図1に図解されている追跡モジュール150)をコア1590内に含めること、またはそれの一部とすることができる。たとえば、追跡モジュールは、フロントエンド・ユニット1530および/または実行エンジン・ユニット1550の一部とすることができる。
フロントエンド・ユニット1530は分岐予測ユニット1532を含み、それが命令キャッシュ・ユニット1534に結合され、それが命令翻訳ルックアサイド・バッファ(TLB)1536に結合され、それが命令取出しユニット1538に結合され、それが復号化ユニット1540に結合されている。復号化ユニットまたは復号器は、命令を復号化し、出力として、オリジナルの命令から復号化されるか、またはそのほかの形でそれらを反映するか、それらから派生する1つまたは複数のマイクロ動作、マイクロコードのエントリーポイント、マイクロ命令、そのほかの命令、またはそのほかの制御信号を生成する。復号器は、多様な異なるメカニズムを使用して実装できる。適切なメカニズムの例は、限定ではないが、ルックアップ・テーブル、ハードウエア実装、プログラム可能論理配列(PLA)、マイクロコード読出し専用メモリ(ROM)等を含む。命令キャッシュ・ユニット1534は、さらにメモリ・ユニット1570内のレベル2(L2)キャッシュ・ユニット1576に結合される。復号化ユニット1540は、実行エンジン・ユニット1550内の名前変更/割付器ユニット1552に結合されている。
実行エンジン・ユニット1550は、リタイアメント・ユニット1554に結合された名前変更/割付器ユニット1552および1つまたは複数のスケジューラ・ユニット1556のセットを含む。スケジューラ・ユニット1556(1つまたは複数)は、予約ステーション、中央命令ウインドウ等を含む任意数の異なるスケジューラを表わす。スケジューラ・ユニット1556(1つまたは複数)は、物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)に結合される。物理レジスタ・ファイル・ユニット1558(1つまたは複数)は、異なるものが1つまたは複数の異なるデータ型、たとえばスカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例:命令ポインタ、すなわち次に実行されるべき命令のアドレス)等をストアする1つまたは複数の物理レジスタ・ファイルを表わす。物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)は、リタイアメント・ユニット1554によってオーバーラップされて、レジスタ名前変更およびアウト−オブ−オーダ実行を実装できる多様な方法を説明する(例:リオーダ・バッファ(1つまたは複数)およびリタイアメント・レジスタ・ファイル(1つまたは複数)の使用、将来ファイル(1つまたは複数)、履歴バッファ(1つまたは複数)、およびリタイアメント・レジスタ・ファイル(1つまたは複数)の使用、レジスタ・マップおよびレジスタのプールの使用)。概して言えば、アーキテクチャ上のレジスタは、プロセッサの外側から、またはプログラマの観点から可視である。レジスタは、周知の特定タイプの回路に限定されない。この中で述べられているとおりのデータのストアおよび供給の能力がある限りにおいて多様な異なるタイプのレジスタが適する。適切なレジスタの例は、限定ではないが、専用物理レジスタ、レジスタ名前変更を使用して動的に割付けされる物理レジスタ、専用および動的に割付けされる物理レジスタの組合せ等を含む。リタイアメント・ユニット1554および物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)は、実行クラスタ1560(1つまたは複数)に結合される。実行クラスタ1560(1つまたは複数)は、1つまたは複数の実行ユニット1562のセットおよび1つまたは複数のメモリ・アクセス・ユニット1564のセットを含む。実行ユニット1562は、多様な型のデータ(例:スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して多様な動作(例:シフト、加算、減算、乗算)を行なうことができる。いくつかの実施態様は、特定の機能または機能のセットに専用の多数の実行ユニットを含むことができるが、ほかの実施態様は、すべての機能をすべて行なう1つの実行ユニットまたは複数の実行ユニットだけを含むことができる。スケジューラ・ユニット1556(1つまたは複数)、物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)、および実行クラスタ1560(1つまたは複数)は、特定の実施態様が特定の型のデータ/動作のために別々のパイプラインを作り出すことから可能性として複数であるとして示されている(例:スカラー整数パイプライン、スカラー浮動小数点/パック整数/パック浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/またはメモリ・アクセス・パイプライン−−これらはそれぞれが独自のスケジューラ・ユニット、物理レジスタ・ファイル(1つまたは複数)ユニット、および/または実行クラスタを有し、また別々のメモリ・アクセス・パイプラインの場合には、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット1564(1つまたは複数)を有する特定の実施態様が実装される)。これについても理解されるものとするが、別々のパイプラインが使用される場合には、これらのパイプラインのうちの1つまたは複数がアウト−オブ−オーダ発行/実行となり、残りがイン−オーダとなることがある。
メモリ・アクセス・ユニット1564のセットは、レベル2(L2)キャッシュ・ユニット1576に結合されたデータ・キャッシュ・ユニット1574に結合されデータTLBユニット1572を含むメモリ・ユニット1570に結合される。1つの例示的な実施態様においては、メモリ・アクセス・ユニット1564が、それぞれがメモリ・ユニット1570内のデータTLBユニット1572に結合されたロード・ユニット、ストア・アドレス・ユニット、およびストア・データ・ユニットを含むことができる。L2キャッシュ・ユニット1576は、1つまたは複数のほかのレベルのキャッシュに、最終的にはメイン・メモリに結合される。
例として述べるが、例示的なレジスタ名前変更、アウト−オブ−オーダ発行/実行コアのアーキテクチャは、次のとおりにしてパイプライン1400を実装できる。(1)命令取出しユニット1538がフェッチ段階1402および長さ復号化段階1404を遂行し、(2)復号化ユニット1540が復号化段階1406を遂行し、(3)名前変更/割付け器ユニット1552が割付けステージ1408および名前変更段階1410を遂行し、(4)スケジューラ・ユニット1556(1つまたは複数)がスケジューリング段階1412を遂行し、(5)物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)およびメモリ・ユニット1570がレジスタ読み出し/メモリ読み出し段階1414を遂行し、実行クラスタ1560が実行段階1416を遂行し、(6)メモリ・ユニット1570および物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)が書き戻し/メモリ書き込み段階1418を遂行し、(7)多様なユニットが例外ハンドリング段階1422に掛かり合うことがあり、(8)リタイアメント・ユニット1554および物理レジスタ・ファイル(1つまたは複数)ユニット1558(1つまたは複数)がコミット段階1424を遂行する。
コア1590は、1つまたは複数の命令セット(例:X86命令セット(より新しいバージョンに追加されたいくつかの拡張を伴う)、カリフォルニア州サニーベイルのMIPSテクノロジのMIPS命令セット、カリフォルニア州サニーベイルのARMホーディングスのARM命令セット(NEON等のオプションの追加の拡張を伴う))をサポートできる。
理解されるものとするが、コアは、マルチスレッドをサポートすること(動作またはスレッドの2つまたはそれより多くの並列セットを実行すること)、およびそれを、タイムスライス・マルチスレッド、同時マルチスレッド(単一の物理コアが、その物理コアが同時にマルチスレッディングするスレッドのそれぞれのために論理コアを供給する)、またはこれらの組合せ(例:インテル(Intel(R))のハイパースレッディング(Hyperthreading)テクノロジにおけるようなタイムスライス取出しおよび復号化およびその後の同時マルチスレッド))を含む多様な方法で行なうことができる。
レジスタ名前変更がアウト−オブ−オーダ実行の文脈で述べられているが、レジスタ名前変更は、イン−オーダ・アーキテクチャにおいても使用できることは理解されるものとする。図解されているプロセッサの実施態様は、別々の命令およびデータ・キャッシュ・ユニット1534/1574および共有L2キャッシュ・ユニット1576も含んでいるが、代替実施態様が、命令およびデータ両方のために単一の内部キャッシュ、たとえばレベル1(L1)内部キャッシュを、または複数レベルの内部キャッシュを有し得ることは理解されるものとする。いくつかの実施態様においては、システムが、内部キャッシュ、およびコアおよび/またはプロセッサの外部となる外部キャッシュの組合せを含むことができる。それに代えて、キャッシュのすべてをコアおよび/またはプロセッサの外部とすることができる。
図16は、本発明の1つの実施態様に従った、命令を遂行する論理回路を含むプロセッサ200のためのマイクロアーキテクチャのブロック図である。いくつかの実施態様においては、バイト、ワード、倍長ワード、4倍長ワード等のサイズをはじめ、単精度および倍精度整数、および浮動小数点データ型等のデータ型を有するデータ要素に対して動作するべく1つの実施態様に従った命令の実装が可能である。1つの実施態様においては、プロセッサ200が、制御フロー・モジュール(例:図1に図解されている制御フロー・モジュール140)を実行できる。1つの実施態様においては、プロセッサ200が、追跡モジュール(例:図1に図解されている追跡モジュール150)も含むことができる。たとえば、追跡モジュールは、フロントエンド201および/またはアウト−オブ−オーダ・エンジン203の一部とすることができる。1つの実施態様においては、イン−オーダ・フロントエンド201が、実行されるべき命令を取出し、その後プロセッサ・パイプラインにおいて使用されるべくそれらを準備するプロセッサ200の一部になる。フロントエンド201は、いくつかのユニットを含むことができる。1つの実施態様においては、命令先取出し器226がメモリから命令を取出し、それらを命令復号器228に供給し、それがそれらを復号化するかまたは解釈する。たとえば、1つの実施態様においては、受信した命令を復号器が、マシンが実行することが可能な『マイクロ命令』または『マイクロ動作』と呼ばれる(マイクロオペまたはμオペとも呼ばれる)1つまたは複数の動作に復号化する。ほかの実施態様においては、復号器が命令をオペコードおよび対応するデータおよび制御フィールドにパーズし、マイクロアーキテクチャによってそれらが使用されて1つの実施態様に従った動作が遂行される。1つの実施態様においては、トレースキャッシュ230が復号化後のμオペを取ってそれらを実行のためのμオペ・キュー234内においてプログラム順序付きシーケンスまたはトレースにアッセンブルする。トレースキャッシュ230が複雑な命令に遭遇すると、マイクロコードROM232が動作の完遂に必要となるμオペを供給する。
いくつかの命令は単一のマイクロオペに変換されるが、そのほかは、完全な動作の完遂にいくつかのマイクロオペを必要とする。1つの実施態様においては、命令の完遂に必要となるマイクロオペが4つを超える場合には、命令復号器228が、その命令を行なうべくマイクロコードROM232にアクセスする。1つの実施態様については、命令を、命令復号器228において処理するために少ない数のマイクロオペに復号化することが可能である。別の実施態様においては、動作の達成に多くのマイクロオペが必要な場合に、命令をマイクロコードROM232内にストアすることが可能である。トレースキャッシュ230は、エントリーポイント・プログラム可能論理アレイ(PLA)を参照してマイクロコードROM232からマイクロコード・シーケンスを読み出すための正しいマイクロ命令ポインタを決定し、1つの実施態様に従った1つまたは複数の命令を完遂する。マイクロコードROM232が、命令のためのマイクロオペのシーケンシングを完了した後は、マシンのフロントエンド201が、トレースキャッシュ230からのマイクロオペの取出しを再開する。
アウト−オブ−オーダ実行エンジン203は、実行のために命令が準備されるところである。アウト−オブ−オーダ実行論理は多数のバッファを有し、命令のフローを均し、リオーダし、それらがパイプラインを下降するときの処理能力を最適化し、実行のスケジュールを維持する。割付器論理は、各μオペが実行のために必要とするマシンのバッファおよびリソースを割付けする。レジスタ名前変更論理は、論理レジスタの名前を変更してレジスタ・ファイル内のエントリに書き込む。また割付器は、2つのμオペ・キューのうちの1つの中の各μオペのために1つ、メモリ動作のために1つ、非メモリ動作のために1つのエントリを命令スケジューラ、すなわちメモリ・スケジューラ、高速スケジューラ202、低速/汎用浮動小数点スケジューラ204、および単純浮動小数点スケジューラ206の先頭に割付けすることも行なう。μオペ・スケジューラ202、204、206は、μオペが実行可能状態になるときを、それらに従属する入力レジスタのオペランド・ソースの即応性およびμオペがそれぞれの動作の完遂に必要とする実行リソースの可用性に基づいて決定する。1つの実施態様の高速スケジューラ202は、メイン・クロック・サイクルの各半分でのスケジューリングが可能であり、ほかのスケジューラは、メイン・プロセッサ・クロック・サイクルごとに一度だけスケジューリングが可能である。スケジューラは、ディスパッチ・ポートを調停して実行のためにμオペをスケジュールする。
レジスタ・ファイル208、210は、スケジューラ202、204、206と実行ブロック211内の実行ユニット212、214、216、218、220、222、224の間に置かれている。整数と浮動小数点動作それぞれのために、別々のレジスタ・ファイル208、210が存在する。1つの実施態様の各レジスタ・ファイル208、210は、まだレジスタ・ファイル内に書き込まれていない完了したばかりの結果をバイパスするか、新しい従属μオペに転送することが可能なバイパス回路網も含む。整数レジスタ・ファイル208および浮動小数点レジスタ・ファイル210は、他方へデータを伝える能力も有する。1つの実施態様については、整数レジスタ・ファイル208が2つの別々のレジスタ・ファイルに分割され、そのうちの1つは低次32ビットのデータのためのレジスタ・ファイルであり、2つ目は高次32ビットのデータのためのレジスタ・ファイルである。通常、浮動小数点命令が64から128ビットの幅のオペランドを有することから、1つの実施態様の浮動小数点レジスタ・ファイル210は128ビット幅のエントリを有する。
実行ブロック211は、実行ユニット212、214、216、218、220、222、224を含み、そこで命令が実際に実行される。このセクションは、マイクロ命令が実行に必要とする整数および浮動小数点のデータ・オペランド値をストアするレジスタ・ファイル208、210を含む。1つの実施態様のプロセッサ200は、多数の実行ユニット、すなわちアドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224からなる。1つの実施態様については、浮動小数点実行ブロック222、224が、浮動小数点、MMX、SIMD、およびSSE、またはそのほかの動作を実行する。1つの実施態様の浮動小数点ALU222は、除算、平方根、および剰余マイクロオペを実行する64ビット×64ビットの浮動小数点除算器を含む。本発明の実施態様について、浮動小数点値を伴う命令は、浮動小数点ハードウエアを用いて取り扱うことができる。1つの実施態様においては、ALU動作が高速ALU実行ユニット216、218に向けられる。1つの実施態様の高速ALU216、218は、クロック・サイクルの半分の有効待ち時間を伴って高速動作を実行することが可能である。1つの実施態様については、低速ALU220が乗算器、シフト、フラグ論理、および分岐処理といった待ち時間の長いタイプの動作のための整数実行ハードウエアを含むことから、もっとも複雑な整数動作が低速ALU220に向けられる。メモリのロード/ストア動作は、AGU212、214によって実行される。1つの実施態様については、整数ALU216、218、220が、64ビットのデータ・オペランドに対して整数動作を行なうという点に関して述べられる。代替実施態様においては、ALU216、218、220を、16、32、128、256等を含む多様なデータ・ビットをサポートするべく実装することが可能である。同様に、浮動小数点ユニット222、224を、多様な幅のビットを有する広汎なオペランドをサポートするべく実装することが可能である。1つの実施態様については、浮動小数点ユニット222、224が、SIMDおよびマルチメディア命令とともに128ビット幅のパック・データ・オペランドに動作することが可能である。
1つの実施態様においては、μオペ・スケジューラ202、204、206が、親のロードが実行を完了する前に従属動作をディスパッチする。プロセッサ200内においてμオペが推論的にスケジュールされ、かつ実行されることから、プロセッサ200は、メモリ・ミスを取り扱う論理も含む。データ・キャッシュ内においてデータ・ロードがミスした場合には、一時的に正しくないデータとともにスケジューラを離れたパイプライン内にインフライトの従属動作が存在する可能性がある。応答メカニズムは、正しくないデータを使用する命令を追跡し、かつ再実行する。従属動作だけがリプレイを必要とし、独立動作はそのまま完了させる。プロセッサの1つの実施態様のスケジューラおよびリプレイ・メカニズムは、テキスト文字列比較動作のための命令シーケンスを捕らえるべく設計される。
用語『レジスタ』は、命令の一部として使用されてオペランドを識別するオンボード・プロセッサ・ストレージ位置を言うこともある。言い換えると、レジスタは、プロセッサの外側から(プログラマの観点から)使用可能なものとすることもできる。しかしながら、実施態様のレジスタは、その意味において特定タイプの回路に限定されないものとする。むしろ実施態様のレジスタは、データのストアならびに供給、およびこの中に述べられている機能を行なう能力を有する。この中に述べられているレジスタは、専用物理レジスタ、レジスタ名前変更を使用して動的に割付けされる物理レジスタ、専用および動的に割付けされる物理レジスタの組合せといった、任意数の異なるテクニックを使用し、プロセッサ内の回路による実装が可能である。1つの実施態様においては、整数レジスタが32ビットの整数データをストアする。1つの実施態様のレジスタ・ファイルも、パック・データのために8つのマルチメディアSIMDレジスタを含む。以下の説明においては、レジスタが、カリフォルニア州サンタクララのインテル社のMMXテクノロジを用いて可能になるマイクロプロセッサ内の64ビット幅のMMXTMレジスタ(いくつかの例では「mm」レジスタと呼ぶこともある)等のパック・データを保持するべく設計されたデータ・レジスタであると理解されるものとする。これらのMMXレジスタは、整数および浮動小数点形式の両方に用意されており、SIMDおよびSSE命令が付随するパック・データ要素とともに動作可能である。同様に、SSE2、SSE3、SSE4、またはそれ以降(包括的に『SSEx』と呼ぶ)テクノロジに関係する128ビット幅のXMMレジスタもまた、その種のパック・データ・オペランドの保持に使用することが可能である。1つの実施態様では、パック・データおよび整数データのストアにおいて、レジスタが2つのデータ型の間の区別を必要としない。1つの実施態様においては、整数および浮動小数点が同一のレジスタ・ファイルまたは異なるレジスタ・ファイルのいずれかの中に収められる。さらにまた、1つの実施態様においては、浮動小数点および整数データを異なるレジスタまたは同一のレジスタにストアできる。
以下の例は、さらなる実施態様に関係する。
例1は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの1つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データをストアするメモリ・モジュール、およびメモリ・モジュールと通信可能に結合されるプロセッサを有する装置である。プロセッサは、制御フロー・データを受信し、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定し、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別し、プロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも1つを、注釈および行き先識別子のうちの1つまたは複数に基づいて遂行するべく構成される。
例2は、例1の内容をオプションで拡張できる。例2においては、プロセッサがさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの1つまたは複数の間に制御フロー・データを生成するべく構成される。
例3は、例1および2のうちの任意の1つの内容をオプションで拡張できる。例3においては、プロセッサがさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得し、かつ制御フロー・データを実行時プロファイルに基づいて生成するべく構成される。
例4は、例1−3のうちの任意の1つの内容をオプションで拡張できる。例4においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの1つまたは複数を有する。
例5は、例1−4のうちの任意の1つの内容をオプションで拡張できる。例5においては、プロセッサが、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を注釈に基づいて検出することによって命令ブロックの実行を追跡し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
例6は、例1−5のうちの任意の1つの内容をオプションで拡張できる。例6においては、プロセッサが、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることによって、プロセッサによって使用されるリソースを修正する。
例7は、例1−6のうちの任意の1つの内容をオプションで拡張できる。例7においては、プロセッサが、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別することによって命令ブロックの実行を追跡し、命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該1つまたは複数を識別するデータを用いて注釈を更新する。
例8は、例1−7のうちの任意の1つの内容をオプションで拡張できる。例8においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの1つまたは複数に変換することを含む。
例9は、例1−8のうちの任意の1つの内容をオプションで拡張できる。例8においては、プロセッサがさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定し、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新するように構成される。
例10は、例1−9のうちの任意の1つの内容をオプションで拡張できる。例10においては、プロセッサがさらに、第2の現在の命令ブロックのための第2の行き先識別子を制御フロー・データに基づいて決定し、第2の現在の命令ブロックに関連付けされた第2の注釈を制御フロー・データに基づいて識別し、かつプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの1つまたは複数を、第2の注釈および第2の行き先識別子のうちの1つまたは複数に基づいて遂行するべく構成される。
例11は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの1つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データを受信すること、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定すること、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも1つを、注釈および行き先識別子のうちの1つまたは複数に基づいて遂行することを有する方法である。
例12は、例12の内容をオプションで拡張できる。例12においては、この方法がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの1つまたは複数の間に制御フロー・データを生成することを有する。
例13は、例11−12のうちの任意の1つの内容をオプションで拡張できる。例13においては、この方法がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得すること、および制御フロー・データを実行時プロファイルに基づいて生成することを有する。
例14は、例11−13のうちの任意の1つの内容をオプションで拡張できる。例14においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの1つまたは複数を有する。
例15は、例11−14のうちの任意の1つの内容をオプションで拡張できる。例15においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
例16は、例11−15のうちの任意の1つの内容をオプションで拡張できる。例16においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
例17は、例11−16のうちの任意の1つの内容をオプションで拡張できる。例17においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該1つまたは複数を、識別するデータを用いて注釈を更新することを有する。
例18は、例11−17のうちの任意の1つの内容をオプションで拡張できる。例18においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの1つまたは複数に変換することを有する。
例19は、例11−18のうちの任意の1つの内容をオプションで拡張できる。例19においては、この方法がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定すること、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示するべく注釈を更新することを有する。
例20は、例11−19のうちの任意の1つの内容をオプションで拡張できる。例20においては、この方法がさらに、第2の現在の命令ブロックのための第2の行き先識別子を制御フロー・データに基づいて決定すること、第2の現在の命令ブロックに関連付けされた第2の注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの1つまたは複数を、第2の注釈および第2の行き先識別子のうちの1つまたは複数に基づいて遂行することを有する。
例21は、プロセッサによってアクセスされたときに、当該プロセッサに、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの1つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データを受信すること、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定すること、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも1つを、注釈および行き先識別子のうちの1つまたは複数に基づいて遂行することを有する動作を行なわせるデータを含む非一過性機械可読ストレージ媒体である。
例22は、例21の内容をオプションで拡張できる。例22においては、この動作がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの1つまたは複数の間に制御フロー・データを生成することを有する。
例23は、例20−22のうちの任意の1つの内容をオプションで拡張できる。例23においては、この動作がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得すること、および制御フロー・データを実行時プロファイルに基づいて生成することを有する。
例24は、例20−23のうちの任意の1つの内容をオプションで拡張できる。例24においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの1つまたは複数を有する。
例25は、例20−24のうちの任意の1つの内容をオプションで拡張できる。例25においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
例26は、例20−25のうちの任意の1つの内容をオプションで拡張できる。例26においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
例27は、例20−26のうちの任意の1つの内容をオプションで拡張できる。例27においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該1つまたは複数を、識別するデータを用いて注釈を更新することを有する。
例28は、例20−27のうちの任意の1つの内容をオプションで拡張できる。例28においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの1つまたは複数に変換することを有する。
例29は、例20−28のうちの任意の1つの内容をオプションで拡張できる。例29においては、この動作がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定すること、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新することを有する。
例30は、例20−29のうちの任意の1つの内容をオプションで拡張できる。例30においては、この動作がさらに、第2の現在の命令ブロックのための第2の行き先識別子を制御フロー・データに基づいて決定すること、第2の現在の命令ブロックに関連付けされた第2の注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの1つまたは複数を、第2の注釈および第2の行き先識別子のうちの1つまたは複数に基づいて遂行することを有する。
例31は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの1つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データをストアするための手段、制御フロー・データを受信するための手段、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定するための手段、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別するための手段、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも1つを、注釈および行き先識別子のうちの1つまたは複数に基づいて遂行するための手段を有する装置である。
例32は、例31の内容をオプションで拡張できる。例32においては、例31の装置がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの1つまたは複数の間に制御フロー・データを生成するための手段を有する。
例33は、例31−32のうちのいずれかの内容をオプションで拡張できる。例33においては、この装置がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得するための手段、および制御フロー・データを実行時プロファイルに基づいて生成するための手段を有する。
例34は、例31−33のうちのいずれかの内容をオプションで拡張できる。例34においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの1つまたは複数を有する。
例35は、例31−34のうちのいずれかの内容をオプションで拡張できる。例35においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
例36は、例31−35のうちのいずれかの内容をオプションで拡張できる。例36においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
例37は、例31−36のうちのいずれかの内容をオプションで拡張できる。例37においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該1つまたは複数を識別するデータを用いて注釈を更新することを有する。
例38は、例31−37のうちのいずれかの内容をオプションで拡張できる。例38においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの1つまたは複数に変換することを有する。
例39は、例31−38のうちのいずれかの内容をオプションで拡張できる。例39においては、この装置がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定するための手段、およびリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新するための手段を有する。
例40は、例31−39のうちのいずれかの内容をオプションで拡張できる。例40においては、この装置がさらに、第2の現在の命令ブロックのための第2の行き先識別子を制御フロー・データに基づいて決定するための手段、第2の現在の命令ブロックに関連付けされた第2の注釈を制御フロー・データに基づいて識別するための手段、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの1つまたは複数を、第2の注釈および第2の行き先識別子のうちの1つまたは複数に基づいて遂行するための手段を有する。
以上、多様な詳細に示した。しかしながら、この開示の恩典を受ける当業者には、これらの特定の詳細なしに実施態様が実施できることが明らかであろう。いくつかの例においては、説明の不明瞭化を回避するために、周知の構造およびデバイスが詳細ではなくブロック図形式で示されている。
詳細な説明のいくつかの部分は、コンピュータ・メモリ内のデータ・ビットに対する動作のアルゴリズムおよび記号表現の見地から呈示されている。これらのアルゴリズムによる記述および表現は、データ処理分野の当業者によって自分たちの研究の実体をほかの当業者にもっとも効果的に伝えるために使用される手段である。アルゴリズムは、これにおいて、また一般的に、望ましい結末を導く自己矛盾のない動作のシーケンスである。動作とは、物理量の物理的な操作を必要とする働きを言う。通常はこれらの量は、必須ではないが、ストア、転送、結合、比較、およびそのほかの操作が可能な電気的または磁気的信号の形式を取る。主として常例の理由から、これらの信号をビット、値、要素、記号、文字、項、数、またはこれらの類として参照するとしばしば好都合であることが立証されている。この中で述べているブロックは、ハードウエア、ソフトウエア、ファームウエア、またはこれらの組合せとすることが可能である。
しかしながらこれらの、および類似の用語のすべては適切な物理量に関連付けされるものであり、それらの量に適用される便宜上のラベルに過ぎないことを念頭に置く必要がある。特に別段の言及がない限り、上記の考察から明らかなとおり、この説明全体を通じて、『受信する』、『識別する』、『決定する』、『遂行する』、『追跡する』、『修正する』、『獲得する』、『生成する』、『検出する』、『減ずる』、『更新する』、『変換する』、またはこれらの類等の用語を使用した考察が、コンピューティング・システム、または類似の電子コンピューティング・デバイスのアクションおよびプロセス、すなわち当該コンピューティング・システムのレジスタおよびメモリ内の物理的な(例:電子的な)量として表現されるデータの、当該コンピューティング・システムのレジスタもしくはメモリまたはそのほかのその種の情報ストレージ、送信もしくは表示デバイス内の物理的な量として類似に表現されるほかのデータへの操作および変形を行なう、アクションおよびプロセスを参照するものと認識する。
用語『例』または『例示』は、例、場合、または図解としての働きであることを意味するべくこの中で使用されている。この中で『例』または『例示』として述べられている態様または設計は、必ずしも好ましいとして、またはほかの態様または設計を超えて有利であるとして解釈されるべきでない。むしろ用語『例』または『例示』は、具体的な形でコンセプトを呈示するべく意図されている。この出願において使用されるときの用語『または』は、排他的な『または』ではなく包含的な『または』を意味するべく意図されている。言い換えると、別段の指定がない限り、または文脈から明らかでない限り、『XはAまたはBを含む』は、自然な包含的組合せのいずれも意味するべく意図される。すなわち、XがAを含むか、XがBを含むか、またはXがAおよびBの両方を含むとき、これらのいずれかの場合の下において『XはAまたはBを含む』が満たされる。それに加えて、この出願および付随する特許請求の範囲の中で『ある』という修飾が使用されるか、複数であることが明示されないときは、別段の指定がないか、または文脈から単数に向けられていることが明らかでない限り、概して『1つまたは複数』を意味するべく解釈されるものとする。さらにまた、全体を通じて用語『実施態様』または『1つの実施態様』または『実装』または『1つの実装』は、同一の実施態様であることまたは実装であることを、そのように述べられていない限り、意味するべく意図されてない。また、『第1の』、『第2の』、『第3の』、『第4の』等々の用語は、この中で使用されるとき、異なる要素を区別するラベルとしての意味であり、必ずしもそれらの数的な指定に従ったオリジナルの意味を持たないことがある。
この中に述べられている実施態様は、また、これにおける動作を遂行するための装置にも関係する。この装置は、必要とされる目的のために特別に構築されることもあり、またはそれがコンピュータ内にストアされるコンピュータ・プログラムによって選択的に活性化されるか、または構成される汎用コンピュータを包含することもある。その種のコンピュータ・プログラムは、限定ではないが、フロッピー(登録商標)ディスク、光ディスク、CD−ROM、および光磁気ディスクを含む任意タイプのディスク、読出し専用メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、EPROM、EEPROM、磁気または光カード、フラッシュ・メモリ、または電子的な命令のストアに適した任意タイプの媒体等の非一過性のコンピュータ可読ストレージ媒体にストアできる。用語『コンピュータ可読ストレージ媒体』は、1つまたは複数の命令セットをストアする単一の媒体または複数の媒体(例:集中型または分散型データベース、および/または関連キャッシュおよびサーバ)を含むと解釈されるものとする。用語『コンピュータ可読媒体』もまた、マシンによる実行のための命令のセットをストアし、符号化し、または担持する能力があり、かつマシンにこの実施態様の方法のうちの任意の1つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。したがって、用語『コンピュータ可読ストレージ媒体』は、限定ではないが、ソリッド・ステート・メモリ、光媒体、磁気媒体といったマシンによる実行のための命令のセットをストアする能力があり、かつマシンにこの実施態様の方法のうちの任意の1つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。
この中に呈示されているアルゴリズムおよび表示は、いずれかの特定のコンピュータまたはそのほかの装置と本質的に関係がない。多様な汎用システムを、この中の教示に従ったプログラムとともに使用できるか、それらの動作を遂行するより特化された装置を構築すると好都合になることがある。多様なこれらのシステムに必要とされる構造は、以下の説明から見えてくるであろう。それに加えて、これらの実施態様は、いずれかの特定のプログラミング言語を参照して述べられていない。認識されるであろうが、この中に述べられているところの実施態様の教示の実装には多様なプログラミング言語を使用できる。
上記の説明は、いくつかの実施態様の良好な理解を供給するために、特定のシステム、構成要素、方法等々の例といった多くの特定の詳細を示している。しかしながら、当業者には、少なくともいくつかの実施態様がこれらの特定の詳細を伴うことなく実施できることが明らかになるであろう。その一方において、これらの実施態様を不必要に不明瞭化することを回避するために、周知の構成要素または方法が詳細に述べられていないか、単純なブロック図形式で呈示されている。したがって、上で示した特定の詳細は単なる例示に過ぎない。特定の実装は、これらの例示的な詳細から変化することが許され、それでもなお、これらの実施態様の範囲内であることが企図されている。
理解されるものとするが、上記の説明は、限定ではなく例証であることが意図されている。上記の説明を読み、理解した後であれば、ほかの多くの実施態様が当業者に明らかになるであろう。したがって、これらの実施態様の範囲は、付随する特許請求の範囲に関連して、当該特許請求の範囲に権利が与えられる均等の全範囲とともに決定されるものとする。

Claims (25)

  1. 複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの1つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データをストアするメモリ・モジュールと、
    前記メモリ・モジュールと通信可能に結合されるプロセッサと、
    を備え、
    前記プロセッサは、
    前記制御フロー・データを受信し、
    現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定し、
    前記現在の命令ブロックに関連付けられた注釈を前記制御フロー・データに基づいて識別し、
    前記プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも1つを、前記注釈および前記行き先識別子のうちの1つまたは複数に基づいて遂行する、
    装置。
  2. 前記プロセッサは、さらに、
    前記命令ブロックを有するアプリケーションのコンパイル時間および実行時間のうちの1つまたは複数の間に前記制御フロー・データを生成する、
    請求項1に記載の装置。
  3. 前記プロセッサは、さらに、
    前記命令ブロックを有するアプリケーションの実行時プロファイルを獲得し、かつ
    前記制御フロー・データを前記実行時プロファイルに基づいて生成する、
    請求項1または2に記載の装置。
  4. 前記プロセッサは、前記命令ブロックの前記実行を、
    前記命令ブロックの前記実行におけるソフト・エラーおよび前記メモリ内のハード・エラーのうちの1つまたは複数を、前記注釈に基づいて検出することによって追跡し、
    前記注釈は、前記現在の命令ブロック内の命令の数を示す、
    請求項1から3のいずれか一項に記載の装置。
  5. 前記プロセッサは、前記プロセッサによって使用される前記リソースを、
    前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずることによって修正する、
    請求項1から4のいずれか一項に記載の装置。
  6. 前記プロセッサは、前記命令ブロックの前記実行を、
    前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別することと、
    前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記1つまたは複数を、識別するデータを用いて前記注釈を更新することと、
    によって追跡する、
    請求項1から5のいずれか一項に記載の装置。
  7. 前記制御フロー・データを生成することは、
    間接分岐命令を比較命令およびジャンプ命令のうちの1つまたは複数に変換することを含む、
    請求項2に記載の装置。
  8. 前記プロセッサは、さらに、
    前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定し、かつ
    前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新する、
    請求項1から7のいずれか一項に記載の装置。
  9. 前記プロセッサは、さらに、
    第2の現在の命令ブロックのための第2の行き先識別子を前記制御フロー・データに基づいて決定し、
    前記第2の現在の命令ブロックに関連付けされた第2の注釈を前記制御フロー・データに基づいて識別し、かつ
    前記プロセッサによって使用されるリソースの修正および前記命令ブロックの実行の追跡のうちの1つまたは複数を、前記第2の注釈および前記第2の行き先識別子のうちの1つまたは複数に基づいて遂行する、
    請求項1から8のいずれか一項に記載の装置。
  10. 複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの1つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データを受信することと、
    現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定することと、
    前記現在の命令ブロックに関連付けられた注釈を前記制御フロー・データに基づいて識別することと、
    プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも1つを、前記注釈および前記行き先識別子のうちの1つまたは複数に基づいて遂行することと、
    を備える方法。
  11. 前記方法は、さらに、
    前記命令ブロックを有するアプリケーションのコンパイル時間および実行時間のうちの1つまたは複数の間に、前記制御フロー・データを生成すること、
    を備える請求項10に記載の方法。
  12. 前記方法は、さらに、
    前記命令ブロックを有するアプリケーションの実行時プロファイルを獲得することと、
    前記制御フロー・データを前記実行時プロファイルに基づいて生成することと、
    を備える請求項10または11に記載の方法。
  13. 前記命令ブロックの前記実行を追跡することは、
    前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を前記注釈に基づいて検出することを有し、
    前記注釈は、前記現在の命令ブロック内の命令の数を示す、
    請求項10から12のいずれか一項に記載の方法。
  14. 前記プロセッサによって使用される前記リソースを修正することは、
    前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
    を有する請求項10から13のいずれか一項に記載の方法。
  15. 前記命令ブロックの前記実行を追跡することは、
    前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別することと、
    前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記1つまたは複数を、識別するデータを用いて前記注釈を更新することと、
    を有する請求項10から14のいずれか一項に記載の方法。
  16. 前記方法は、さらに、
    前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定することと、
    前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新することと、
    を備える請求項10から15のいずれか一項に記載の方法。
  17. プロセッサによってアクセスされたときに、前記プロセッサに、
    複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの1つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を包含する制御フロー・データを受信することと、
    現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定することと、
    前記現在の命令ブロックに関連付けされた注釈を前記制御フロー・データに基づいて識別することと、
    前記プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも1つを、前記注釈および前記行き先識別子のうちの1つまたは複数に基づいて遂行することと、
    を備える動作を遂行させるデータを含むプログラム。
  18. 前記命令ブロックの前記実行を追跡することは、
    前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を、前記注釈に基づいて検出することを有し、
    前記注釈は、前記現在の命令ブロック内の命令の数を示す、
    請求項17に記載のプログラム。
  19. 前記プロセッサによって使用される前記リソースを修正することは、
    前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
    を有する請求項17または18に記載のプログラム。
  20. 前記命令ブロックの前記実行を追跡することは、
    前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別することと、
    前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記1つまたは複数を、識別するデータを用いて前記注釈を更新することと、
    を有する請求項17から19のいずれか一項に記載のプログラム。
  21. 前記動作は、さらに、
    前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定することと、
    前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新することと、
    を備える請求項17から20のいずれか一項に記載のプログラム。
  22. 複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの1つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データをストアするための手段と、
    前記制御フロー・データを受信するための手段と、
    現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定するための手段と、
    前記現在の命令ブロックに関連付けされた注釈を前記制御フロー・データに基づいて識別するための手段と、
    プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも1つを、前記注釈および前記行き先識別子のうちの1つまたは複数に基づいて遂行するための手段と、
    を備える装置。
  23. 前記命令ブロックの前記実行を追跡することは、
    前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの1つまたは複数を、前記注釈に基づいて検出することを有し、
    前記注釈は、前記現在の命令ブロック内の命令の数を示す、
    請求項22に記載の装置。
  24. 前記プロセッサによって使用される前記リソースを修正することは、
    前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
    を有する請求項22または23に記載の装置。
  25. 前記命令ブロックの前記実行を追跡することは、
    前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの1つまたは複数を識別することと、
    前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記1つまたは複数を、識別するデータを用いて前記注釈を更新することと、
    を有する請求項22から24のいずれか一項に記載の装置。
JP2014029706A 2013-03-15 2014-02-19 命令の制御フローの追跡 Expired - Fee Related JP5865405B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/834,049 2013-03-15
US13/834,049 US9880842B2 (en) 2013-03-15 2013-03-15 Using control flow data structures to direct and track instruction execution

Publications (2)

Publication Number Publication Date
JP2014182797A true JP2014182797A (ja) 2014-09-29
JP5865405B2 JP5865405B2 (ja) 2016-02-17

Family

ID=50440410

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014029706A Expired - Fee Related JP5865405B2 (ja) 2013-03-15 2014-02-19 命令の制御フローの追跡

Country Status (7)

Country Link
US (1) US9880842B2 (ja)
JP (1) JP5865405B2 (ja)
KR (1) KR101607549B1 (ja)
CN (2) CN106843810B (ja)
BR (1) BR102014005801A2 (ja)
DE (1) DE102014003689A1 (ja)
GB (1) GB2512727B (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017117442A (ja) * 2015-12-21 2017-06-29 インテル コーポレイション コンパイラー型情報を利用するプロセッサトレースログにおけるデータフロー分析のための方法及び装置

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9378560B2 (en) 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9563431B2 (en) * 2014-12-26 2017-02-07 Intel Corporation Techniques for cooperative execution between asymmetric processor cores
US10452370B2 (en) * 2015-01-09 2019-10-22 University Of Virginia Patent Foundation System, method and computer readable medium for space-efficient binary rewriting
US10229273B2 (en) * 2015-02-25 2019-03-12 Veracode, Inc. Identifying components for static analysis of software applications
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US11755484B2 (en) 2015-06-26 2023-09-12 Microsoft Technology Licensing, Llc Instruction block allocation
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US11016770B2 (en) 2015-09-19 2021-05-25 Microsoft Technology Licensing, Llc Distinct system registers for logical processors
US11126433B2 (en) 2015-09-19 2021-09-21 Microsoft Technology Licensing, Llc Block-based processor core composition register
US10768936B2 (en) 2015-09-19 2020-09-08 Microsoft Technology Licensing, Llc Block-based processor including topology and control registers to indicate resource sharing and size of logical processor
KR101715759B1 (ko) * 2015-09-22 2017-03-15 한국전자통신연구원 멀티코어 환경에서의 악성코드 분석 장치 및 방법
EP3244300B1 (fr) * 2016-02-24 2022-02-09 STMicroelectronics (Rousset) SAS Procédé et outil de génération d'un code programme configuré pour effectuer une vérification du flot de contrôle d'un autre code programme contenant des instructions de branchements indirects
US10108530B2 (en) * 2016-02-24 2018-10-23 Stmicroelectronics (Rousset) Sas Method and tool for generating a program code configured to perform control flow checking on another program code containing instructions for indirect branching
US11106467B2 (en) * 2016-04-28 2021-08-31 Microsoft Technology Licensing, Llc Incremental scheduler for out-of-order block ISA processors
DE102016208864A1 (de) * 2016-05-23 2017-11-23 Robert Bosch Gmbh Recheneinheit
US10209764B2 (en) * 2016-12-20 2019-02-19 Intel Corporation Apparatus and method for improving power-performance using a software analysis routine
US10885676B2 (en) * 2016-12-27 2021-01-05 Samsung Electronics Co., Ltd. Method and apparatus for modifying display settings in virtual/augmented reality
US11531552B2 (en) 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11250123B2 (en) 2018-02-28 2022-02-15 Red Hat, Inc. Labeled security for control flow inside executable program code
GB2572578B (en) * 2018-04-04 2020-09-16 Advanced Risc Mach Ltd Cache annotations to indicate specultative side-channel condition
US10740220B2 (en) * 2018-06-27 2020-08-11 Microsoft Technology Licensing, Llc Cache-based trace replay breakpoints using reserved tag field bits
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
US10922203B1 (en) * 2018-09-21 2021-02-16 Nvidia Corporation Fault injection architecture for resilient GPU computing
US11327798B1 (en) * 2019-05-08 2022-05-10 Meta Platforms, Inc. Accelerating an application code portion based on a received configuration
US11822468B2 (en) 2019-05-24 2023-11-21 Microsoft Technology Licensing, Llc Executable code branch annotations for objective branch verification
US10983794B2 (en) * 2019-06-17 2021-04-20 Intel Corporation Register sharing mechanism
US11087429B2 (en) * 2019-07-19 2021-08-10 Red Hat, Inc. Run-time optimization of media pipelines
WO2021071854A1 (en) * 2019-10-06 2021-04-15 Pdf Solutions, Inc. Anomalous equipment trace detection and classification

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254739A (ja) * 1997-03-10 1998-09-25 Digital Equip Corp <Dec> コンピュータ性能データを分析する方法
JP2001117890A (ja) * 1999-10-22 2001-04-27 Nec Corp 並列化コンパイル装置、並列化コンパイル方法及び並列化コンパイル用プログラムを記録した記録媒体
US20060200801A1 (en) * 1998-12-08 2006-09-07 Patel Mukesh K Java Virtual Machine hardware for RISC and CISC processors
JP2007188523A (ja) * 2007-03-15 2007-07-26 Toshiba Corp タスク実行方法およびマルチプロセッサシステム
JP2010257445A (ja) * 2009-04-14 2010-11-11 Technology Currents Llc ハードウェアカスタマイゼーション及びエネルギー最適化のためのプログラム及びデータアノテーション

Family Cites Families (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3601341B2 (ja) 1999-02-09 2004-12-15 株式会社日立製作所 並列プログラム生成方法
AU4804493A (en) 1992-08-07 1994-03-03 Thinking Machines Corporation Massively parallel computer including auxiliary vector processor
JP3597247B2 (ja) 1995-03-15 2004-12-02 富士通株式会社 可換媒体型記憶装置及び光ディスク装置及びデータ転送制御方法
US6077315A (en) 1995-04-17 2000-06-20 Ricoh Company Ltd. Compiling system and method for partially reconfigurable computing
US5944816A (en) * 1996-05-17 1999-08-31 Advanced Micro Devices, Inc. Microprocessor configured to execute multiple threads including interrupt service routines
US6711667B1 (en) 1996-06-28 2004-03-23 Legerity, Inc. Microprocessor configured to translate instructions from one instruction set to another, and to store the translated instructions
US5933627A (en) 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US5835775A (en) 1996-12-12 1998-11-10 Ncr Corporation Method and apparatus for executing a family generic processor specific application
US5890008A (en) 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US5999734A (en) 1997-10-21 1999-12-07 Ftl Systems, Inc. Compiler-oriented apparatus for parallel compilation, simulation and execution of computer programs and hardware models
US6253370B1 (en) 1997-12-01 2001-06-26 Compaq Computer Corporation Method and apparatus for annotating a computer program to facilitate subsequent processing of the program
DE69737750T2 (de) 1997-12-17 2008-03-06 Hewlett-Packard Development Co., L.P., Houston Erst- und Zweitprozessoren verwendetes Verfahren
US6247107B1 (en) 1998-04-06 2001-06-12 Advanced Micro Devices, Inc. Chipset configured to perform data-directed prefetching
JP2000057122A (ja) * 1998-08-06 2000-02-25 Yamaha Corp デジタル信号処理装置
US6662354B1 (en) 1999-01-29 2003-12-09 Unisys Corporation Determining destinations of a dynamic branch
US7089404B1 (en) 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
DE60044300D1 (de) * 1999-08-30 2010-06-10 Ip Flex Inc Daten-prozessor
US6446195B1 (en) * 2000-01-31 2002-09-03 Intel Corporation Dyadic operations instruction processor with configurable functional blocks
JP3641997B2 (ja) 2000-03-30 2005-04-27 日本電気株式会社 プログラム変換装置及び方法並びに記録媒体
US7702499B1 (en) * 2000-05-02 2010-04-20 Cadence Design Systems, Inc. Systems and methods for performing software performance estimations
GB0028079D0 (en) 2000-11-17 2001-01-03 Imperial College System and method
US7178137B1 (en) 2001-04-05 2007-02-13 Network Appliance, Inc. Automatic verification of scheduling domain consistency
KR20030018720A (ko) 2001-08-31 2003-03-06 (주) 소프트4소프트 소프트웨어 유지보수를 위한 소스 코드 브라우저 자동생성 방법 및 시스템
US6934865B2 (en) * 2002-07-09 2005-08-23 University Of Massachusetts Controlling a processor resource based on a compile-time prediction of number of instructions-per-cycle that will be executed across plural cycles by the processor
US7765532B2 (en) 2002-10-22 2010-07-27 Oracle America, Inc. Inducing concurrency in software code
US7103757B1 (en) 2002-10-22 2006-09-05 Lsi Logic Corporation System, circuit, and method for adjusting the prefetch instruction rate of a prefetch unit
US7603664B2 (en) 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code
US7346902B2 (en) 2002-10-22 2008-03-18 Sun Microsystems, Inc. System and method for block-based concurrentization of software code
DE10394047D2 (de) 2003-01-15 2005-11-10 Continental Teves Ag & Co Ohg Verfahren zur Erkennung und/oder Korrektur von Speicherzugriffsfehlern und elektronische Schaltungsanordnung zur Durchführung des Verfahrens
US7260685B2 (en) 2003-06-20 2007-08-21 Micron Technology, Inc. Memory hub and access method having internal prefetch buffers
US7373640B1 (en) 2003-07-31 2008-05-13 Network Appliance, Inc. Technique for dynamically restricting thread concurrency without rewriting thread code
US7216196B2 (en) 2003-12-29 2007-05-08 Micron Technology, Inc. Memory hub and method for memory system performance monitoring
GB0400659D0 (en) 2004-01-13 2004-02-11 Koninkl Philips Electronics Nv Microprocessor, related method of operating the same and related instruction word
US7162567B2 (en) 2004-05-14 2007-01-09 Micron Technology, Inc. Memory hub and method for memory sequencing
JP3901181B2 (ja) 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
JP3901180B2 (ja) 2004-06-30 2007-04-04 日本電気株式会社 プログラム並列化装置及びその方法並びにプログラム
US7480902B2 (en) 2004-07-08 2009-01-20 Intel Corporation Unwind information for optimized programs
US7446773B1 (en) 2004-12-14 2008-11-04 Nvidia Corporation Apparatus, system, and method for integrated heterogeneous processors with integrated scheduler
US7466316B1 (en) 2004-12-14 2008-12-16 Nvidia Corporation Apparatus, system, and method for distributing work to integrated heterogeneous processors
US20060136878A1 (en) 2004-12-17 2006-06-22 Arun Raghunath Method and apparatus for enabling compiler and run-time optimizations for data flow applications in multi-core architectures
US7734895B1 (en) 2005-04-28 2010-06-08 Massachusetts Institute Of Technology Configuring sets of processor cores for processing instructions
US20090106744A1 (en) 2005-08-05 2009-04-23 Jianhui Li Compiling and translating method and apparatus
JP3938387B2 (ja) 2005-08-10 2007-06-27 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、制御方法、およびコンパイラ・プログラム
US7757222B2 (en) 2005-09-30 2010-07-13 Intel Corporation Generating efficient parallel code using partitioning, coalescing, and degenerative loop and guard removal
EP1783604A3 (en) 2005-11-07 2007-10-03 Slawomir Adam Janczewski Object-oriented, parallel language, method of programming and multi-processor computer
US8387034B2 (en) 2005-12-21 2013-02-26 Management Services Group, Inc. System and method for the distribution of a program among cooperating processing elements
US7765536B2 (en) 2005-12-21 2010-07-27 Management Services Group, Inc. System and method for the distribution of a program among cooperating processors
US7506217B2 (en) * 2005-12-30 2009-03-17 Intel Corporation Apparatus and method for software-based control flow checking for soft error detection to improve microprocessor reliability
US9038040B2 (en) 2006-01-25 2015-05-19 International Business Machines Corporation Method for partitioning programs between a general purpose core and one or more accelerators
US8595703B2 (en) * 2006-01-30 2013-11-26 Microsoft Corporation Context based code analysis
US20070226696A1 (en) 2006-02-03 2007-09-27 Dell Products L.P. System and method for the execution of multithreaded software applications
US20070234315A1 (en) 2006-02-09 2007-10-04 International Business Machines Corporation Compiling an application by cluster members
WO2007119329A1 (ja) * 2006-03-14 2007-10-25 Nec Corporation 階層化システム及びその管理方法と、プログラム
JP4849606B2 (ja) 2006-04-28 2012-01-11 株式会社日立製作所 制御フロー誤り検出方法、データ処理装置、及びコンパイラ
JP4784827B2 (ja) 2006-06-06 2011-10-05 学校法人早稲田大学 ヘテロジニアスマルチプロセッサ向けグローバルコンパイラ
US8136102B2 (en) 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US7814486B2 (en) 2006-06-20 2010-10-12 Google Inc. Multi-thread runtime system
US8156480B2 (en) 2006-09-29 2012-04-10 Intel Corporation Methods and apparatus to form a resilient objective instruction construct
US20080141268A1 (en) 2006-12-12 2008-06-12 Tirumalai Partha P Utility function execution using scout threads
US20080163183A1 (en) 2006-12-29 2008-07-03 Zhiyuan Li Methods and apparatus to provide parameterized offloading on multiprocessor architectures
US8250556B1 (en) 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
US8010954B2 (en) 2007-02-14 2011-08-30 The Mathworks, Inc. Parallel programming interface to dynamically allocate program portions
US8214808B2 (en) 2007-05-07 2012-07-03 International Business Machines Corporation System and method for speculative thread assist in a heterogeneous processing environment
US7831800B2 (en) 2007-05-17 2010-11-09 Globalfoundries Inc. Technique for prefetching data based on a stride pattern
US20090006813A1 (en) 2007-06-28 2009-01-01 Abhishek Singhal Data forwarding from system memory-side prefetcher
US8127283B2 (en) 2007-09-05 2012-02-28 Intel Corporation Enabling graphical notation for parallel programming
US8789031B2 (en) 2007-09-18 2014-07-22 Intel Corporation Software constructed strands for execution on a multi-core architecture
CN101855617A (zh) 2007-09-19 2010-10-06 Kpit库敏思信息系统有限公司 使即插即用硬件用于半自动软件迁移的机制
JP5067425B2 (ja) 2007-09-21 2012-11-07 富士通株式会社 翻訳装置と翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサ
US7962724B1 (en) 2007-09-28 2011-06-14 Oracle America, Inc. Branch loop performance enhancement
US20090172353A1 (en) 2007-12-28 2009-07-02 Optillel Solutions System and method for architecture-adaptable automatic parallelization of computing code
US20110067015A1 (en) 2008-02-15 2011-03-17 Masamichi Takagi Program parallelization apparatus, program parallelization method, and program parallelization program
US8473935B2 (en) 2008-04-21 2013-06-25 Microsoft Corporation Just-ahead-of-time compilation
JP2010039536A (ja) 2008-07-31 2010-02-18 Panasonic Corp プログラム変換装置、プログラム変換方法およびプログラム変換プログラム
EP2329389A4 (en) 2008-08-13 2013-02-27 ENHANCING THE PERFORMANCE OF A SOFTWARE APPLICATION
US20100274972A1 (en) 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
BRPI0920541A2 (pt) 2008-11-24 2018-11-06 Intel Corp sistemas, métodos e aparelho para decompor um programa sequencial em multicadeias, executar as ditas cadeias, e reconstruir a execução sequencial
US9672019B2 (en) 2008-11-24 2017-06-06 Intel Corporation Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads
US8161246B2 (en) 2009-03-30 2012-04-17 Via Technologies, Inc. Prefetching of next physically sequential cache line after cache line that includes loaded page table entry
US8166251B2 (en) 2009-04-20 2012-04-24 Oracle America, Inc. Data prefetcher that adjusts prefetch stream length based on confidence
JP5581606B2 (ja) 2009-04-21 2014-09-03 株式会社カネカ 成形性の優れた樹脂組成物、及びその成形体
CA2672337C (en) 2009-07-15 2017-01-03 Ibm Canada Limited - Ibm Canada Limitee Compiler instrumentation infrastructure to facilitate multiple pass and multiple purpose dynamic analysis
GB2474521B (en) * 2009-10-19 2014-10-15 Ublox Ag Program flow control
US8707282B2 (en) 2009-12-14 2014-04-22 Advanced Micro Devices, Inc. Meta-data based data prefetching
CN101763291B (zh) 2009-12-30 2012-01-18 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法
CN101814054B (zh) * 2010-03-23 2012-05-02 苏州国芯科技有限公司 一种用于调试微控制器的指令追踪控制器
GB2481385B (en) * 2010-06-21 2018-08-15 Advanced Risc Mach Ltd Tracing speculatively executed instructions
JP2012194947A (ja) 2011-03-18 2012-10-11 Ricoh Co Ltd 画像処理装置及び画像処理方法
CN102163143B (zh) 2011-04-28 2013-05-01 北京北大众志微系统科技有限责任公司 一种实现值关联间接跳转预测的方法
CN102156655B (zh) 2011-05-05 2014-04-02 北京大学深圳研究生院 高级语言代码的生成方法及其产生器
CN102789377B (zh) 2011-05-18 2015-09-30 国际商业机器公司 处理指令分组信息的方法和装置
US20130024674A1 (en) * 2011-07-20 2013-01-24 International Business Machines Corporation Return address optimisation for a dynamic code translator
US10191742B2 (en) * 2012-03-30 2019-01-29 Intel Corporation Mechanism for saving and retrieving micro-architecture context

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10254739A (ja) * 1997-03-10 1998-09-25 Digital Equip Corp <Dec> コンピュータ性能データを分析する方法
US20060200801A1 (en) * 1998-12-08 2006-09-07 Patel Mukesh K Java Virtual Machine hardware for RISC and CISC processors
JP2001117890A (ja) * 1999-10-22 2001-04-27 Nec Corp 並列化コンパイル装置、並列化コンパイル方法及び並列化コンパイル用プログラムを記録した記録媒体
JP2007188523A (ja) * 2007-03-15 2007-07-26 Toshiba Corp タスク実行方法およびマルチプロセッサシステム
JP2010257445A (ja) * 2009-04-14 2010-11-11 Technology Currents Llc ハードウェアカスタマイゼーション及びエネルギー最適化のためのプログラム及びデータアノテーション

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNG199800428020; 小松秀昭,他2名: '命令レベル並列アーキテクチャのための大域的コードスケジューリング技法' 情報処理学会論文誌 第37巻,第6号, 19960615, pp.1149-1161, 社団法人情報処理学会 *
JPN6015002047; 小松秀昭,他2名: '命令レベル並列アーキテクチャのための大域的コードスケジューリング技法' 情報処理学会論文誌 第37巻,第6号, 19960615, pp.1149-1161, 社団法人情報処理学会 *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017117442A (ja) * 2015-12-21 2017-06-29 インテル コーポレイション コンパイラー型情報を利用するプロセッサトレースログにおけるデータフロー分析のための方法及び装置
US10013335B2 (en) 2015-12-21 2018-07-03 Intel Corporation Data flow analysis in processor trace logs using compiler-type information method and apparatus

Also Published As

Publication number Publication date
US20140281424A1 (en) 2014-09-18
CN106843810B (zh) 2019-03-15
CN106843810A (zh) 2017-06-13
BR102014005801A2 (pt) 2016-03-15
DE102014003689A1 (de) 2014-09-18
CN104049941B (zh) 2017-04-12
GB2512727B (en) 2015-10-21
GB2512727A (en) 2014-10-08
JP5865405B2 (ja) 2016-02-17
US9880842B2 (en) 2018-01-30
CN104049941A (zh) 2014-09-17
KR101607549B1 (ko) 2016-03-30
GB201402938D0 (en) 2014-04-02
KR20140113462A (ko) 2014-09-24

Similar Documents

Publication Publication Date Title
JP5865405B2 (ja) 命令の制御フローの追跡
US20140281434A1 (en) Path profiling using hardware and software combination
US9342284B2 (en) Optimization of instructions to reduce memory access violations
JP6306729B2 (ja) ストアをソート及びリタイアする命令及びロジック
US10216516B2 (en) Fused adjacent memory stores
US10409613B2 (en) Processing devices to perform a key value lookup instruction
US9715388B2 (en) Instruction and logic to monitor loop trip count and remove loop optimizations
US20180232235A1 (en) Efficient hardware-based extraction of program instructions for critical paths
US9378127B2 (en) Dynamic memory page policy
US20170177543A1 (en) Aggregate scatter instructions
US20170185400A1 (en) Mode-specific endbranch for control flow termination
US10019262B2 (en) Vector store/load instructions for array of structures
US9690582B2 (en) Instruction and logic for cache-based speculative vectorization
US10691454B2 (en) Conflict mask generation
US9116719B2 (en) Partial commits in dynamic binary translation based systems
RU2644528C2 (ru) Инструкция и логика для идентификации инструкций для удаления в многопоточном процессоре с изменением последовательности
US20180217839A1 (en) Branch type logging in last branch registers
US20170185413A1 (en) Processing devices to perform a conjugate permute instruction

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150108

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150127

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150421

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20151027

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20151126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151225

R150 Certificate of patent or registration of utility model

Ref document number: 5865405

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees