(57)【要約】      （修正有）【課題】アプリケーション内の命令の制御フローを追跡し、アプリケーション内の命令の制御フローに基づいて処理デバイスの１つまたは複数の最適化を遂行するためのメカニズムを提供する。【解決手段】制御フロー・モジュール１４０により、アプリケーション１１０内の命令ブロックの制御フローを示す制御フロー・データ１４５が生成される。制御フロー・データは、異なる命令ブロック１１５のために最適化が遂行できるか否かを示す注釈を含むことがある。また制御フロー・データは、追跡モジュール１５０により命令の実行を追跡し、処理モジュール１６０により命令ブロック内の命令がスレッド、プロセス、および／またはプロセッサの実行コアに割り当てられているか否かを決定し、かつ命令の実行の間にエラーが生じたか否かを決定するべく使用されることもある。【選択図】図１
2014182797.tif 000002
【特許請求の範囲】
【請求項１】
複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの１つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データをストアするメモリ・モジュールと、
前記メモリ・モジュールと通信可能に結合されるプロセッサと、
を備え、
前記プロセッサは、
前記制御フロー・データを受信し、
現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定し、
前記現在の命令ブロックに関連付けられた注釈を前記制御フロー・データに基づいて識別し、
前記プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも１つを、前記注釈および前記行き先識別子のうちの１つまたは複数に基づいて遂行する、
装置。
【請求項２】
前記プロセッサは、さらに、
前記命令ブロックを有するアプリケーションのコンパイル時間および実行時間のうちの１つまたは複数の間に前記制御フロー・データを生成する、
請求項１に記載の装置。
【請求項３】
前記プロセッサは、さらに、
前記命令ブロックを有するアプリケーションの実行時プロファイルを獲得し、かつ
前記制御フロー・データを前記実行時プロファイルに基づいて生成する、
請求項１または２に記載の装置。
【請求項４】
前記プロセッサは、前記命令ブロックの前記実行を、
前記命令ブロックの前記実行におけるソフト・エラーおよび前記メモリ内のハード・エラーのうちの１つまたは複数を、前記注釈に基づいて検出することによって追跡し、
前記注釈は、前記現在の命令ブロック内の命令の数を示す、
請求項１から３のいずれか一項に記載の装置。
【請求項５】
前記プロセッサは、前記プロセッサによって使用される前記リソースを、
前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずることによって修正する、
請求項１から４のいずれか一項に記載の装置。
【請求項６】
前記プロセッサは、前記命令ブロックの前記実行を、
前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別することと、
前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記１つまたは複数を、識別するデータを用いて前記注釈を更新することと、
によって追跡する、
請求項１から５のいずれか一項に記載の装置。
【請求項７】
前記制御フロー・データを生成することは、
間接分岐命令を比較命令およびジャンプ命令のうちの１つまたは複数に変換することを含む、
請求項２に記載の装置。
【請求項８】
前記プロセッサは、さらに、
前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定し、かつ
前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新する、
請求項１から７のいずれか一項に記載の装置。
【請求項９】
前記プロセッサは、さらに、
第２の現在の命令ブロックのための第２の行き先識別子を前記制御フロー・データに基づいて決定し、
前記第２の現在の命令ブロックに関連付けされた第２の注釈を前記制御フロー・データに基づいて識別し、かつ
前記プロセッサによって使用されるリソースの修正および前記命令ブロックの実行の追跡のうちの１つまたは複数を、前記第２の注釈および前記第２の行き先識別子のうちの１つまたは複数に基づいて遂行する、
請求項１から８のいずれか一項に記載の装置。
【請求項１０】
複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの１つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データを受信することと、
現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定することと、
前記現在の命令ブロックに関連付けられた注釈を前記制御フロー・データに基づいて識別することと、
プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも１つを、前記注釈および前記行き先識別子のうちの１つまたは複数に基づいて遂行することと、
を備える方法。
【請求項１１】
前記方法は、さらに、
前記命令ブロックを有するアプリケーションのコンパイル時間および実行時間のうちの１つまたは複数の間に、前記制御フロー・データを生成すること、
を備える請求項１０に記載の方法。
【請求項１２】
前記方法は、さらに、
前記命令ブロックを有するアプリケーションの実行時プロファイルを獲得することと、
前記制御フロー・データを前記実行時プロファイルに基づいて生成することと、
を備える請求項１０または１１に記載の方法。
【請求項１３】
前記命令ブロックの前記実行を追跡することは、
前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を前記注釈に基づいて検出することを有し、
前記注釈は、前記現在の命令ブロック内の命令の数を示す、
請求項１０から１２のいずれか一項に記載の方法。
【請求項１４】
前記プロセッサによって使用される前記リソースを修正することは、
前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
を有する請求項１０から１３のいずれか一項に記載の方法。
【請求項１５】
前記命令ブロックの前記実行を追跡することは、
前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別することと、
前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記１つまたは複数を、識別するデータを用いて前記注釈を更新することと、
を有する請求項１０から１４のいずれか一項に記載の方法。
【請求項１６】
前記方法は、さらに、
前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定することと、
前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新することと、
を備える請求項１０から１５のいずれか一項に記載の方法。
【請求項１７】
プロセッサによってアクセスされたときに、前記プロセッサに、
複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの１つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を包含する制御フロー・データを受信することと、
現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定することと、
前記現在の命令ブロックに関連付けされた注釈を前記制御フロー・データに基づいて識別することと、
前記プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも１つを、前記注釈および前記行き先識別子のうちの１つまたは複数に基づいて遂行することと、
を備える動作を遂行させるデータを含むプログラム。
【請求項１８】
前記命令ブロックの前記実行を追跡することは、
前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を、前記注釈に基づいて検出することを有し、
前記注釈は、前記現在の命令ブロック内の命令の数を示す、
請求項１７に記載のプログラム。
【請求項１９】
前記プロセッサによって使用される前記リソースを修正することは、
前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
を有する請求項１７または１８に記載のプログラム。
【請求項２０】
前記命令ブロックの前記実行を追跡することは、
前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別することと、
前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記１つまたは複数を、識別するデータを用いて前記注釈を更新することと、
を有する請求項１７から１９のいずれか一項に記載のプログラム。
【請求項２１】
前記動作は、さらに、
前記プロセッサによって使用される前記リソースの修正が前記プロセッサの動作に影響を与えるか否かを決定することと、
前記リソースの修正が前記プロセッサの前記動作に影響を与えないとき、前記プロセッサによって使用される前記リソースを最適化する必要がないことを示すべく前記注釈を更新することと、
を備える請求項１７から２０のいずれか一項に記載のプログラム。
【請求項２２】
複数の、命令ブロックのためのブロック識別子、前記命令ブロックのうちの１つまたは複数のための行き先識別子、および前記命令ブロックのための注釈を有する制御フロー・データをストアするための手段と、
前記制御フロー・データを受信するための手段と、
現在の命令ブロックのための行き先識別子を前記制御フロー・データに基づいて決定するための手段と、
前記現在の命令ブロックに関連付けされた注釈を前記制御フロー・データに基づいて識別するための手段と、
プロセッサによって使用されるリソースの修正、および前記命令ブロックの実行の追跡のうちの少なくとも１つを、前記注釈および前記行き先識別子のうちの１つまたは複数に基づいて遂行するための手段と、
を備える装置。
【請求項２３】
前記命令ブロックの前記実行を追跡することは、
前記命令ブロックの前記実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を、前記注釈に基づいて検出することを有し、
前記注釈は、前記現在の命令ブロック内の命令の数を示す、
請求項２２に記載の装置。
【請求項２４】
前記プロセッサによって使用される前記リソースを修正することは、
前記プロセッサによって使用される構成要素の数を前記注釈に基づいて減ずること、
を有する請求項２２または２３に記載の装置。
【請求項２５】
前記命令ブロックの前記実行を追跡することは、
前記現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別することと、
前記命令が割り当てられた前記スレッド、前記プロセス、および前記実行コアのうちの前記１つまたは複数を、識別するデータを用いて前記注釈を更新することと、
を有する請求項２２から２４のいずれか一項に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
ここで述べられている実施態様は、概して処理デバイスに関し、より詳細には、命令の制御フローの追跡に関する。
【背景技術】
【０００２】
多くのアプリケーション（例：プログラム）は、アプリケーションの命令が処理デバイス（例：プロセッサ）によって実行されるときに相挙動を呈する。アプリケーションの実行が命令の異なる領域および／または命令ブロックの間を移動するとき、処理デバイスが異なる挙動特性を有することがある。たとえば、特定の命令ブロックは、無関係な命令を含むことがあり、また複数の命令の同時実行を可能にすることがある。別の例においては、特定の命令ブロックが、処理デバイスの特定の構成要素をより頻繁に使用することがある（例：より頻繁に算術論理ユニットおよび／またはメモリ・レジスタを使用することがある）。
【０００３】
上で論じたとおり、多くのアプリケーション（例：プログラム）は、アプリケーションの命令が処理デバイスによって実行されるときに相挙動を呈する。命令の領域または命令ブロックの分析は、処理デバイスが、命令の各個別の領域またはブロックのための処理能力および／またはパワーの利用を増加することおよび／または最適化することを可能にできる。命令の領域またはブロックを識別する可能ハードウエア・ソリューションは、相転移に対応する命令アドレスの連想メモリ（ＣＡＭ：Ｃｏｎｔｅｎｔ−Ａｄｄｒｅｓｓａｂｌｅ  Ｍｅｍｏｒｙ）を供給することである。処理デバイスが各命令を実行するとき、当該処理デバイスは、ＣＡＭにアクセスして新しいコード領域への入／出力があるか否か、および最適化を活性化するか否かを決定することが可能である。しかしながらＣＡＭは、ＣＡＭのサイズが数エントリを超えるとパワー消費という見地から非効率になることがある。それに加えて、プログラマおよび／またはコンパイラが、現在実行中のアプリケーションの命令は何かについての情報を出力する追加の命令をアプリケーション自体の中に挿入（例：コンパイル時の間に）することがある。しかしながらこれは、アプリケーションの実行を遅くし、有意な量のオーバーヘッドを追加することがある。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
この開示の実施態様は、アプリケーション内の命令の制御フローを追跡すること、およびアプリケーション内の命令の制御フローに基づいて処理デバイスの１つまたは複数の最適化を遂行することを供給する。
【課題を解決するための手段】
【０００５】
１つの実施態様においては、アプリケーション内の命令ブロックの制御フローを示す制御フロー・データが生成される。制御フロー・データは、異なる命令ブロックのために最適化が遂行できるか否かを示す注釈を含むことがある。また制御フロー・データは、命令の実行を追跡し、命令ブロック内の命令がスレッド、プロセス、および／またはプロセッサの実行コアに割り当てられているか否かを決定し、かつ命令の実行の間にエラーが生じたか否かを決定するべく使用されることもある。処理デバイスおよび／または処理デバイスに結合された追跡モジュールは、命令の実行を追跡すること、および／または制御フロー・データに基づいて処理デバイスの動作を最適化することができる。１つの実施態様においては、テーブルを使用して制御フロー・データが表現されることがあり、これは、処理デバイスおよび／または追跡モジュールが、テーブル内の単一の場所またはエントリを効率的にインデックスすることを可能にできる。
【０００６】
以下の実施態様は、コンピューティング・プラットフォームまたはマイクロプロセッサ等の特定の集積回路を参照して述べられているかも知れないが、そのほかの実施態様もそのほかのタイプの集積回路および論理デバイスに適用可能である。ここで述べられている実施態様の類似テクニックならびに教示が、そのほかのタイプの回路または半導体デバイスに適用されることはある。たとえば、開示されている実施態様は、デスクトップ・コンピュータ・システムまたはウルトラブック（Ｕｌｔｒａｂｏｏｋ（登録商標））に限定されない。また、そのほかのデバイス、たとえばハンドヘルド・デバイス、タブレット、そのほかのノートブック、システムオンチップ（ＳｏＣ）デバイス、および埋込み型アプリケーションにおいて使用されることもある。ハンドヘルド・デバイスのいくつかの例には、携帯電話、インターネット・プロトコル・デバイス、デジタル・カメラ、携帯情報端末（ＰＤＡ）、およびハンドヘルドＰＣが含まれる。埋込み型アプリケーションは、通常、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワーク・コンピュータ（ＮｅｔＰＣ）、セットトップ・ボックス、ネットワーク・ハブ、ワイド・エリア・ネットワーク（ＷＡＮ）スイッチ、またはそのほかの任意の、以下に教示されている機能および動作の遂行が可能なシステムを含む。
【０００７】
以下の実施態様は、プロセッサを参照して述べられているが、そのほかの実施態様は、そのほかのタイプの集積回路および論理デバイスに適用可能である。本発明の実施態様の類似テクニックならびに教示は、そのほかのタイプの、より高いパイプライン・スループットおよび向上した処理能力から利益を得ることが可能な回路または半導体デバイスに適用可能である。本発明の実施態様の教示は、データ操作を遂行するプロセッサまたはマシンに適用可能である。しかしながら、本発明は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビット、または１６ビット・データ動作を遂行するプロセッサまたはマシンに限定されず、データの操作または管理が遂行される任意のプロセッサまたはマシンに適用可能である。それに加えて、以下の説明は例を供給し、付随する図面は図解の目的のための多様な例を示す。しかしながら、これらの例は、本発明の実施態様のあらゆる可能な実装の網羅的なリストを供給するのではなく単に本発明の実施態様の例を供給することが意図されていることから、限定の意味に解釈されないものとする。
【０００８】
開示は、以下に与えられている詳細な説明から、また付随する開示の多様な実施態様の図面からより完全に理解されるであろう。しかしながらこれらの図面は、特定の実施態様に開示を限定するものとして解釈されるべきでなく、むしろ説明および理解のみのためのものである。
【図面の簡単な説明】
【０００９】
【図１】この開示の１つの実施態様に従ったアプリケーション内の命令の実行の制御フローを追跡するための追跡モジュールおよび制御フロー・モジュールを含むシステム・アーキテクチャのブロック図である。
【図２】この開示の１つの実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための制御フロー・データの例を図解したテーブルである。
【図３】この開示の別の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための制御フロー・データの例を図解したテーブルである。
【図４】１つの実施態様に従った、１つまたは複数の実行単位に対する命令ブロック内の命令の割付けの一例を図解したブロック図である。
【図５】この開示の追加の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブルである。
【図６】この開示の実施態様に従った、制御フロー・データを生成する制御フロー・モジュールを図解したブロック図である。
【図７】この開示の実施態様に従った、処理モジュールによって使用されるリソースの修正および／または命令の実行を追跡する追跡モジュールを図解したブロック図である。
【図８】この開示の１つの実施態様に従った、命令の制御フローを追跡する方法を図解したフローチャートである。
【図９】この開示の別の実施態様に従った、命令の制御フローを追跡する方法を図解したフローチャートである。
【図１０】この開示の実施態様に従った、システムオンチップ（ＳｏＣ）のブロック図である。
【図１１】この開示に従ったシステムオンチップ（ＳｏＣ）設計の実施態様のブロック図である。
【図１２】この中で論じている方法のうちの任意の１つまたは複数をマシンに遂行させるための命令のセットを実行できるコンピュータ・システムの例示形式でマシンを図解した図式表現の図である。
【図１３】１つの実装に従ったコンピュータ・システムのブロック図である。
【図１４】図１４の処理デバイス１４００によって実装される、イン−オーダ・パイプラインおよびレジスタ名前変更段階、アウト−オブ−オーダ発行／実行パイプラインを図解したブロック図である。
【図１５】この開示の少なくとも１つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行／実行論理を図解したブロック図である。
【図１６】本発明の１つの実施態様に従った、命令を遂行する論理回路を含むプロセッサ２００のためのマイクロアーキテクチャのブロック図である。
【発明を実施するための形態】
【００１０】
図１は、この開示の１つの実施態様に従ったアプリケーション内の命令の実行の制御フローを追跡するための追跡モジュール１５０および制御フロー・モジュール１４０を含むシステム・アーキテクチャ１００のブロック図である。このシステム・アーキテクチャは、アプリケーション１１０、コンパイラ１２０、バイナリ・アナライザ１３０、実行時プロファイル１３５、制御フロー・データ１４５、および処理モジュール１６０も含む。
【００１１】
アプリケーション１１０は、プログラム、ソフトウエア・モジュール、ソフトウエア構成要素、および／または、そのほかの処理モジュール１６０によって実行できるソフトウエア要素とすることができる。アプリケーション１１０は、複数の命令を含むことができる。命令は、処理モジュール１６０に、限定ではないが、データの読み出し、データの書き込み、データの処理、データの定義化、データの変換、データの変形等々といった活動を遂行させるプログラム・コードを含むことができる。たとえば、アプリケーション１１０は、処理モジュール１６０にメディアアイテム（デジタル・ビデオ、デジタル・ミュージック等）を再生するメディア・プレーヤを実行させるか、または処理モジュール１６０にウェブ・ブラウザを実行させる命令を含むバイナリ・ファイルおよび／または実行可能ファイルとすることができる。アプリケーション１１０内の命令は、命令ブロック１１５Ａ−１１５Ｘといった命令ブロック（例：一連の命令または命令のグループ）に分割されてよい。
【００１２】
命令ブロック１１５Ａ−１１５Ｘは、多様な異なる命令（例：プログラム命令）を含むことができる。たとえば、命令ブロック１１５Ａ−１１５Ｘは、ＡＤＤ命令（２以上の値の加算）、ＭＵＬＴ命令（２以上の値の乗算）、エクスクルーシブＯＲ（ＸＯＲ）命令（２以上の値の排他的論理和）、ＡＮＤ命令（２以上の値に対するビット単位の論理和）、ストア命令（レジスタ等のメモリの位置への値のストア）、ＪＵＭＰ命令（命令の実行フローを特定の命令へと指示すること）、ＢＲＡＮＣＨ命令（１つまたは複数の条件等に基づいて、命令の実行フローを特定の命令へと指示すること）を含むことができる。１つの実施態様においては、命令ブロック１１５Ａ−１１５Ｘを基本ブロックとすることができる。基本ブロックは、１つのエントリーポイント（例：基本ブロック内の１つの命令は、ＪＵＭＰおよび／またはＢＲＡＮＣＨ命令の行き先になる）および１つのイグジットポイント（例：最後の命令は、異なる基本ブロックへのＪＵＭＰまたはＢＲＡＮＣＨ命令になることがある）を有する命令のグループ（例：ブロック）とすることができる。
【００１３】
処理モジュール１６０は、アプリケーション１１０の命令を実行できる。命令は、処理モジュール１６０に、限定ではないが、データの読み出し、データの書き込み、データの処理、データの定義化、データの変換、データの変形等々といった活動を遂行させるプログラム・コードを含むことができる。処理モジュール１６０は、１つの説明的な例として、複合命令セット・コンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セット・コンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、マルチコア・プロセッサ、マルチスレッド・プロセッサ、超低電圧プロセッサ、埋込み型プロセッサ、命令セットの組合せを実装するプロセッサ、および／または任意のそのほかのプロセッサ・デバイス、たとえばデジタル信号プロセッサを含むことができる。処理モジュール１６０は、カリフォルニア州サンタクララのインテル社から入手可能なＣｏｒｅ（登録商標）ｉ３、ｉ５、ｉ７、２  Ｄｕｏ、およびＱｕａｄ、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、またはＳｔｒｏｎｇＡＲＭ（登録商標）プロセッサ等の汎用プロセッサとすることができる。これに代えて、処理モジュール１６０をＡＲＭホーディングスのＭＩＰＳ等の別の会社からのものとしてもよい。処理モジュール１６０は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィック・プロセッサ、コプロセッサ、埋込み型プロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、またはこれらの類の専用プロセッサとすることができる。処理モジュール１６０は、１つまたは複数のチップ上に実装されることがある。処理モジュール１６０は、たとえばＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等の多くのプロセス・テクノロジのうちのいずれかを使用して、１つまたは複数の基板上に実装され、かつ／または当該基板の一部であってもよい。
【００１４】
１つの実施態様においては、処理モジュール１６０が異なる挙動、特性を呈すること、処理モジュール１６０の特定の構成要素（例：処理モジュール１６０内の特定の回路）をより頻繁に使用すること、および／または処理モジュール１６０によって命令ブロック１１５Ａ−１１５Ｘのうちの１つまたは複数が実行されるときに特定の方法で機能することがある。たとえば、命令ブロック１１５Ａは、算術および／または論理関数（ＸＯＲ、ＡＤＤ、ＭＵＬＴ等）を行なう多様な命令（例：プログラム命令）を含むことができる。処理モジュール１６０は、ほかの命令ブロックと比較して命令ブロック１１５Ａ内の命令の実行時に算術論理演算装置（ＡＬＵ）をより多く使用することがある。別の例においては、命令ブロック１１５Ｂが無関係な命令（例：命令ブロック１１５Ｂ内のほかの命令に依存しない命令）を含むことがある。無関係な命令は、処理モジュール１６０による複数の命令の同時実行を可能にすることがある。１つの実施態様においては、命令レベルの並列性（ＩＬＰ）が、処理モジュール１６０が同時に実行できる命令がいくつあるかという尺度となり得る。命令ブロック１１５内の命令が無関係（例：その命令がほかの命令の結果に依存しない）であることから、命令ブロック１１５Ｂは、ほかの命令ブロックより高い量の（ＩＬＰ）を可能にできる。
【００１５】
１つの実施態様においては、ソース・コードに基づいてコンパイラ１２０がアプリケーション１１０を生成する。ソース・コードは、なんらかの人間可読言語（例：ＪＡＶＡ（登録商標）、Ｃ＋＋、Ｃ、Ｃ＃等のプログラミング言語）を使用して記述された１つまたは複数のコンピュータ命令とすることができる。コンパイラ１２０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有し、追加のリンク処理を伴うか、または伴わずに、処理モジュール１６０によって実行可能な命令（例：バイナリ・コード、オブジェクト・コード、プログラム命令等）を生成する、任意の処理論理でよい。別の実施態様においては、コンパイラ１２０をジャストインタイム（ＪＩＴ）コンパイラとすることがある。ＪＩＴコンパイラは、ソース・コードからバイトコードを生成するコンパイラとすることができる。バイトコードは、処理モジュール１６０が実行可能とする命令（例：バイナリ・コード、オブジェクト・コード、プログラム命令等）へと、仮想マシンによって翻訳および／または解釈される中間表現でよい。ＪＩＴコンパイラによって生成されるバイトコードは、異なるコンピュータ・アーキテクチャの間において移植可能であってよい。異なるコンピュータ・アーキテクチャのそれぞれに関連付けされた仮想マシンは、当該バイトコードを、当該コンピュータ・アーキテクチャによって使用される命令に翻訳および／または解釈することができる。
【００１６】
１つの実施態様においては、バイナリ・アナライザ１３０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有し、処理モジュール１６０によってアプリケーション１１０が実行されている間（例：命令および／または命令ブロック１１５Ａ−１１５Ｘが実行されている間）にアプリケーション１１０を分析できる処理論理でよい。バイナリ・アナライザ１３０は、アプリケーション１１０内のＢＲＡＮＣＨおよび／またはＪＵＭＰ命令の識別、ＢＲＡＮＣＨおよび／またはＪＵＭＰ命令の行き先の識別、命令ブロック１１５Ａ−１１５Ｘ内の命令のタイプ（例：メモリまたはレジスタにアクセスする命令、算術または論理動作命令等）の識別、アプリケーション１１０内の命令によって使用されるメモリの位置（例：レジスタ）の識別等を行なうことができる。バイナリ・アナライザ１３０は、また、アプリケーション１１０内の命令ブロック１１５Ａ−１１５Ｘ（例：基本ブロック）の識別もできる。たとえば、バイナリ・アナライザ１３０は、アプリケーション１１０の複数の命令を命令ブロック１１５Ｃにグループ化できる。１つの実施態様において、バイナリ・アナライザ１３０は、処理モジュール１６０からアプリケーション１１０の命令の実行についてのデータを受信できる。バイナリ・アナライザ１３０は、実行時プロファイル１３５内のアプリケーション１１０の命令の実行についてのデータを記録および／またはストアできる。実行時プロファイル１３５は、ＢＲＡＮＣＨおよび／またはＪＵＭＰ命令の位置、ＢＲＡＮＣＨ命令の各パスを通った回数、命令によって使用および／またはアクセスされたメモリの位置、命令のタイプ等といったデータを含むことができる。１つの実施態様において、実行時プロファイル１３５は、アプリケーション１１０の命令がどのように実行されたかを示すデータでよく、これに代えて、またはこれに加えて、アプリケーション１１０の命令によって使用されたリソース（例：メモリ・レジスタ、回路、および／または処理モジュール１６０の構成要素）であってもよい。実行時プロファイル１３５は、命令、動作、関数、および／またはそのほかの、実行のために取られるアクションがどのくらい長いかを示すデータも含むことができる。たとえば、実行時プロファイル１３５は、処理モジュール１６０が特定の命令および／または命令ブロックの実行にどのくらいの時間を要したかを示すデータを含むことができる。実行時プロファイル１３５は、トレースまたは命令トレースと呼ばれることもある。
【００１７】
１つの実施態様において、制御フロー・モジュール１４０は、アプリケーション１１０のための制御フロー・データ１４５を生成できる。制御フロー・モジュール１４０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理でよい。制御フロー・データ１４５は、命令ブロック１１５Ａ−１１５Ｘのための識別子、行き先識別子（例：第１の命令ブロックの分岐またはジャンプ先の１つまたは複数の命令ブロックのための識別子）、および／または命令ブロック１１５Ａ−１１５Ｘのうちの１つまたは複数のための注釈といった、データおよび／または情報を含むことができる。制御フロー・データ１４５については、図２、３、および５に関連してより詳細を後述する。制御フロー・モジュール１４０は、制御フロー・データ１４５を生成するために、コンパイラ１２０によって生成されたアプリケーション１１０を分析してよい。制御フロー・モジュール１４０は、アプリケーション１１０内の命令から命令ブロック（例：命令ブロック１１５Ａ−１１５Ｘ）を識別することができる。たとえば、コンパイラ１２０は、アプリケーション１１０の複数の命令を命令ブロック１１５Ｄにグループ化できる。制御フロー・モジュール１４０は、ＢＲＡＮＣＨおよび／またはＪＵＭＰ命令のための行き先命令ブロックを識別することもできる。たとえば、命令ブロック１１５Ａは、ＢＲＡＮＣＨ命令に関連付けられた条件が満たされたか否かに応じて命令ブロック１１５Ｂまたは命令ブロック１１５Ｄへ移動するＢＲＡＮＣＨ命令を含むことができる。
【００１８】
１つの実施態様において、制御フロー・モジュール１４０は、間接ＢＲＡＮＣＨ命令を一連のＣＯＭＰＡＲＥ命令およびＪＵＭＰ命令に変換できる。間接ＢＲＡＮＣＨ命令は、次に実行する命令のアドレスを指定するのではなく、どこにアドレスが位置するかを記述する命令でよい。制御フロー・モジュール１４０は、間接分岐の各ターゲットのためのＣＯＭＰＡＲＥおよびＪＵＭＰ命令のペアを生成できる。たとえば、間接分岐命令が第１のターゲットおよび第２のターゲットを有する場合に、制御フロー・モジュールは、次の命令アドレスが第１のターゲットに等しいか否かを決定する第１のＣＯＭＰＡＲＥ命令、および第１のターゲットと次の命令アドレスが等しい場合に実行される第１のＪＵＭＰ命令を生成すること、次の命令アドレスが第２のターゲットに等しいか否かを決定する第２のＣＯＭＰＡＲＥ命令、および第２のターゲットと次の命令アドレスが等しい場合に実行される第２のＪＵＭＰ命令を生成することができる。間接分岐の形式のリターンのために、最適化が使用されてよい。リターンについてコンパイラ１２０は、リターンは対応する呼び出しに続く命令に制御を移すことであると識別してよい。リターン命令のターゲット命令は、制御フロー・テーブルに加えて、呼び出し／リターン・ブロックのスタックを維持することによって見つけることができる。
【００１９】
１つの実施態様において、制御フロー・モジュール１４０は、命令ブロック１１５Ａ−１１５Ｘのうちの１つまたは複数のための注釈を生成できる。注釈は、制御フロー・データ１４５内に含めることができる。注釈は、アプリケーション１１０内の命令の実行の追跡に使用できるデータ、処理モジュール１６０によって使用されるリソースの修正に使用できるデータ、処理モジュール１６０のより効率的な動作を可能にするべく使用できるデータ、および／または処理モジュール１６０の動作の最適化に使用できるデータを含むことができる。たとえば、注釈は、命令ブロック内において可能となり得るＩＬＰの量といった情報を含むことができる。別の例においては、注釈が命令ブロック内の命令の数等の情報を含むことができる。この情報は、ハード・エラー（例：レジスタ等のメモリ内の物理的またはハードウエア・エラー）および／またはソフト・エラー（例：命令および／またはデータ値を変更する可能性のあるデータまたは信号内のエラー）の識別に使用できる。
【００２０】
１つの実施態様において、制御フロー・モジュール１４０は、制御フロー・データ１４５の生成時にコンパイラ１２０と通信（例：データの送信および／またはデータの受信）できる。たとえば、コンパイラ１２０がソース・コードをコンパイルしてアプリケーション１１０のための命令を生成するとき、コンパイラ１２０は、制御フロー・モジュール１４０に命令を供給でき、制御フロー・モジュール１４０は、それらの命令を分析して制御フロー・データ１４５を生成できる。別の実施態様において、制御フロー・モジュール１４０は、コンパイラ１２０の構成要素として、および／またはそれの一部として含められてよい。たとえば、制御フロー・モジュール１４０は、コンパイラ１２０がアプリケーション１１０のための命令を生成するときに、コンパイラ１２０によって使用されるソフトウエア・モジュールおよび／または構成要素でよい。コンパイラ１２０は、コンパイラ１２０がアプリケーション１１０のための命令を生成（例：アプリケーション１１０を生成）すると同時に、またはほぼ同時に、制御フロー・データ１４５を生成できる。
【００２１】
１つの実施態様において、制御フロー・モジュール１４０は、制御フロー・データ１４５の生成時にバイナリ・アナライザ１３０と通信（例：データの送信および／またはデータの受信）できる。たとえば、バイナリ・アナライザ１３０は、実行時プロファイル１３５を生成すること、および実行時プロファイル１３５を制御フロー・モジュール１４０に供給することができる。制御フロー・モジュール１４０は、制御フロー・データ１４５を生成するために、実行時プロファイル１３５を分析してよい。別の実施態様において、制御フロー・モジュール１４０は、バイナリ・アナライザ１３０の構成要素として、および／またはそれの一部として含められてよい。たとえば、バイナリ・アナライザ１３０は、バイナリ・アナライザ１３０が実行時プロファイル１３５を生成すると同時に、またはほぼ同時に、制御フロー・データ１４５を生成できる。
【００２２】
１つの実施態様において、追跡モジュール１５０は、アプリケーション１１０内の１つまたは複数の命令の実行を追跡すること、処理モジュール１６０のより効率的な動作を可能にすること、および／または制御フロー・データ１４５を使用して処理モジュール１６０の動作を最適化することができる。追跡モジュール１５０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理でよい。たとえば、追跡モジュール１５０は、ハードウエアで実装される有限状態マシンとすることができる。有限状態マシンは、プログラマブル・ロジック・デバイス、プログラマブル・ロジック・コントローラ、論理ゲート、フリップフロップ、および／またはリレーを含むことができる。有限状態マシンは、状態変数をストアする１つまたは複数のメモリおよび／またはレジスタも含むことができる。さらに有限状態マシンは、状態遷移が生じることになるか否かを決定する１つまたは複数の組み合わせ論理ブロック、および有限状態マシンの出力を決定する１つまたは複数の組み合わせ論理ブロックを含むことができる。１つの実施態様において、追跡モジュール１５０は、処理モジュール１６０の一部でよい。たとえば、追跡モジュール１５０は、処理モジュール１６０内の回路でよい。
【００２３】
１つの実施態様において、追跡モジュール１５０は、処理モジュール１６０によって使用されるリソースを修正すること、および／または制御フロー・データ１４５に基づいて処理モジュール１６０の動作を最適化することができる。たとえば、追跡モジュール１５０は、命令ブロック１１５Ａが低いＩＬＰを有していると決定できる。処理モジュール１６０は、複数の実行コア（例：４実行コア、８実行コア等）を有してよく、追跡モジュール１５０は、処理モジュール１６０によって使用されるパワーの量を抑えるべく、当該複数の実行コアのうちのいくつかを非活性化すること、パワー・ダウンすること、および／または使用を控えることを処理モジュール１６０に命令できる。別の例において、追跡モジュール１５０は、命令ブロック（例：命令ブロック１１５Ｃ）が殆どの算術および論理動作命令（例：ＡＤＤ、ＸＯＲ等）を含むと決定してよい。追跡モジュール１５０は、処理モジュール１６０に対して、次の命令ブロック内の命令のために算術および論理動作を行なう回路、構成要素、および／またはモジュールの準備を命令できる。
【００２４】
１つの実施態様において、追跡モジュール１５０は、処理モジュール１６０によって使用されるリソースの修正が処理モジュール１６０の動作に効果を有するか否かを決定できる。たとえば、追跡モジュール１５０は、処理モジュール１６０内の１つまたは複数の構成要素のパワー・ダウンまたは非活性化がコンピューティング・デバイスにパワーの節約（例：より少ないエネルギまたはバッテリ電力の使用）をもたらすか否かを決定できる。別の例においては、追跡モジュール１５０が、次の命令ブロックによって使用される処理モジュール１６０の回路、構成要素、および／またはモジュールの準備が、アプリケーション１１０内の命令の実行速度を増加するか否かを決定できる。１つの実施態様において、追跡モジュール１５０が、処理モジュール１６０によって使用されるリソースの修正が処理モジュール１６０の動作への効果を持たないと決定した場合に、追跡モジュール１５０は、リソースの修正が行なわれる必要がないことを示すべく（例：最適化が行なわれる必要がないことを示すべく）制御フロー・データ１４５を更新できる。たとえば、追跡モジュール１５０は、注釈（最適化を示すデータを含むことがある）を削除すること、またはリソースの修正が行なわれる必要がないことを示すデータを注釈に追加することができる。
【００２５】
別の実施態様において、追跡モジュール１５０は、制御フロー・データ１４５を使用してアプリケーション１１０内の命令の実行を追跡してよい。たとえば、追跡モジュール１５０は、処理モジュール１６０が命令ブロック１１５Ａを実行していること、および命令ブロック１１５Ａが１２個の命令を含むことを決定できる。処理モジュール１６０が、１２より少ない数の命令の実行後に別の命令ブロック（例：命令ブロック１１５Ｄ）内の命令の実行にジャンプした場合に、追跡モジュール１５０は、ほかの命令ブロックからの命令が実行される前に実行された命令が１２より少ない数であることからエラー（例：ハード・エラーおよび／またはソフト・エラー）が生じたと決定できる。追跡モジュール１５０は、エラー・フラグを立てるか、または送信することができ、処理モジュール１６０は、当該エラー・フラグに基づいて追加の動作を行なうことができる（例：アプリケーション１１０のための命令の実行を終了できる）。別の例において、処理モジュール１６０は、異なるプロセス、スレッド、および／または実行コアを使用して命令ブロック内の命令を実行できる。処理モジュール１６０が命令ブロックからの命令を実行するとき、処理モジュール１６０は、命令をプロセス、スレッド、および／または実行コアに割り当てることができる。追跡モジュール１５０は、制御フロー・データ１４５に対する注釈の追加および／または更新を行ない、いずれのプロセス、スレッド、および／または実行コアに命令ブロック内の命令が割り当てられているかを示すことができる。
【００２６】
１つの実施態様において、コンパイラ１２０、バイナリ・アナライザ１３０、制御フロー・モジュール１４０、および追跡モジュール１５０のうちの１つまたは複数は、同一の、処理モジュール１６０が常駐するコンピューティング・デバイス内に常駐できる。たとえば、コンパイラ１２０、追跡モジュール１５０、および処理モジュール１６０は、同一のコンピューティング・デバイス内に常駐できる。別の例において、バイナリ・アナライザ１３０、制御フロー・モジュール１４０、および追跡モジュール１５０は、同一の、処理モジュール１６０が常駐するコンピューティング・デバイス内に常駐できる。コンピューティング・デバイスの例は、限定ではないが、セルラ・ハンドセット（例：携帯電話）またはスマートフォン等のモバイル通信デバイス、タブレット・コンピュータ等のモバイル・コンピューティング・デバイス、ネットブック、ノートブック・コンピュータ、ラップトップ・コンピュータ、デスクトップ・コンピュータ、サーバ・コンピュータ等々を含むことができる。
【００２７】
図２は、この開示の１つの実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル２９０である。上で論じたとおり、追跡モジュール１５０は、テーブル２９０（例：制御フロー・データ１４５）を使用して処理モジュール１６０（例：プロセッサ）によって使用されるリソースを修正し、処理モジュール１６０がより効率的に動作すること、および／または処理モジュール１６０の動作を最適化することを可能にできる。制御フロー・データ１４５は、テーブル（例：テーブル２９０）の形式で図解されているが、多様なデータ構造および／または表現を使用して制御フロー・データ１４５を表現できることは理解されるものとする。たとえば、制御フロー・データ１４５は、グラフ、ツリー、リスト等を使用して表現できる。
【００２８】
テーブル２９０は、４つの列を含む。第１列は、『現在のブロック』とラベル付けされ、６つの異なる命令ブロック（例：基本ブロック）のための識別子（例：ブロック識別子）を含む。図１に戻るが、識別子『１』を使用した命令ブロック１１５Ａのラベル付け、識別子『２』を使用した命令ブロック１１５Ｂのラベル付け、識別子『３』を使用した命令ブロック１１５Ｃのラベル付け等々を行なうことができる。理解されるものとするが、そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および／またはそのほかの、命令ブロック（例：基本ブロック）の識別に使用できる値とすることができる。第２列は、『分岐なし』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されないときの行き先命令ブロックのための識別子を含む。たとえば、命令ブロック『１』の最後の命令がＢＲＡＮＣＨ命令であり、実行の間にＢＲＡＮＣＨ命令のための条件が満たされないことがある。処理モジュール１６０は、ＢＲＡＮＣＨ命令のための条件が満たされないとき、命令ブロック『６』内の命令にジャンプすること、および／または進むことができる。１つの実施態様においては、命令ブロックが条件付きＢＲＡＮＣＨ命令を含まない旨をテーブル２９０が示すことができる。たとえば、命令ブロック『３』は、分岐なしの列に値『Ｎ／Ａ』を有する。これは、命令ブロック『３』内の最後の命令が条件なしのＢＲＡＮＣＨまたはＪＵＭＰ命令である旨を示すことができる。第３列は、『分岐あり』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されるときの行き先命令ブロックのための識別子を含む。たとえば、命令ブロック『１』の最後の命令がＢＲＡＮＣＨ命令であり、実行の間にＢＲＡＮＣＨ命令のための条件が満たされることがある。処理モジュール１６０は、ＢＲＡＮＣＨ命令のための条件が満たされるとき、命令ブロック『２』内の命令にジャンプすること、および／または進むことができる。第４列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための１つまたは複数の注釈を含む。
【００２９】
テーブル２９０内の各行は、現在の命令ブロックのための識別子（例：現在実行中の命令を含む命令ブロックのための識別子）、ＢＲＡＮＣＨ命令が採用されない場合の行き先命令ブロックのための第１の識別子、およびＢＲＡＮＣＨ命令が採用される場合の行き先命令ブロックのための第２の識別子、および現在のブロック（例：現在の命令ブロックまたは現在の基本ブロック）のための注釈を含む。たとえば、テーブル２９０の第１行は、命令ブロック『１』が、命令ブロック『１』の最後のＢＲＡＮＣＨ命令が採用されない場合に命令ブロック『６』にジャンプすること、または命令ブロック『１』の最後のＢＲＡＮＣＨ命令が採用される場合に命令ブロック『２』にジャンプすることを示す。このテーブルの第１行は、注釈『分岐あり：２−ＷＩＤＥ』も含む。この注釈は、処理モジュール１６０が命令ブロック『２』からの命令を実行するときに可能となり得るＩＬＰの量またはレベルを示すことができる。たとえば、注釈『分岐あり：２−ＷＩＤＥ』は、処理モジュール１６０が、命令ブロック『２』からの命令の実行時に最大で２つの命令まで同時に実行可能となり得る旨を示すことができる。追跡モジュール１５０は、命令ブロック『１』のための注釈に基づいて、２つの実行コアを使用すること、およびそのほかの実行コアをパワー・ダウンすることを処理モジュール１６０に命令できる。別の例において、テーブル２９０の第５行のための注釈『分岐なし：４−ＷＩＤＥ』は、処理モジュール１６０が、命令ブロック『６』からの命令の実行時に最大で４つの命令まで同時に実行可能となり得る旨を示すことができる。追跡モジュール１５０は、命令ブロック５のための注釈に基づいて、４つの実行コアを使用することを処理モジュール１６０に命令できる。そのほかの実施態様においては、命令ブロックのための注釈が、任意の英数値、テキスト値、および／または数値を含むことがある。
【００３０】
１つの実施態様においては、追跡モジュール１５０がテーブル２９０内の単一のエントリおよび／または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル２９０が可能にする。これは、追跡モジュール１５０が、命令ブロックの実行の追跡にＣＡＭを使用（全ＣＡＭのルックアップを必要とする）するより効率的に動作することを可能にする。
【００３１】
図３は、この開示の別の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル３００である。上で論じたとおり、追跡モジュール１５０は、テーブル３００（例：制御フロー・データ１４５）を使用して処理モジュール１６０によって実行される命令を追跡できる。制御フロー・データ１４５は、テーブル（例：テーブル３００）の形式で図解されているが、多様なデータ構造および／または表現を使用して制御フロー・データ１４５を表現できることは理解されるものとする。たとえば、制御フロー・データ１４５は、グラフ、ツリー、リスト等を使用して表現できる。
【００３２】
テーブル３００は、４つの列を含む。第１列は、『現在のブロック』とラベル付けされ、６つの異なる命令ブロック（例：基本ブロック）のための識別子（例：ブロック識別子）を含む。第２列は、『分岐なし』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されないときの行き先命令ブロックのための識別子を含む。１つの実施態様においては、命令ブロックが条件付きＢＲＡＮＣＨ命令を含まない旨をテーブル３００が示すことができる。たとえば、命令ブロック『４』は、分岐なしの列に、命令ブロック『４』内の最後の命令が条件なしのＢＲＡＮＣＨまたはＪＵＭＰ命令である旨を示すことができる値『Ｎ／Ａ』を有する。第３列は、『分岐あり』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されるときの行き先命令ブロックのための識別子を含む。そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および／またはそのほかの、命令ブロック（例：基本ブロック）を識別する識別子として使用できる値とすることができる。第４列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための１つまたは複数の注釈を含む。
【００３３】
テーブル３００内の各行は、現在の命令ブロックのための識別子（例：現在実行中の命令を含む命令ブロックのための識別子）、ＢＲＡＮＣＨ命令が採用されない場合の行き先命令ブロックのための第１の識別子、およびＢＲＡＮＣＨ命令が採用される場合の行き先命令ブロックのための第２の識別子、および現在のブロック（例：現在の命令ブロックまたは現在の基本ブロック）のための注釈を含む。たとえば、テーブル３００の第２行は、命令ブロック『２』が、命令ブロック『２』の最後のＢＲＡＮＣＨ命令が採用されない場合に命令ブロック『３』にジャンプすること、または命令ブロック『２』の最後のＢＲＡＮＣＨ命令が採用される場合に命令ブロック『４』にジャンプすることを示す。テーブルの第２行は、注釈『命令カウント：３』も含む。この注釈は、命令ブロック『２』が３つの命令を含む旨を示すことができる。追跡モジュール１５０は、この注釈に基づいて命令ブロック内の命令の実行を追跡し、ソフト・エラーおよび／またはハード・エラーが生じたか否かを決定できる。たとえば、追跡モジュール１５０は、命令ブロック『２』の実行時に処理モジュール１６０が実行した命令が３未満であることからソフト・エラーが生じたことを決定できる。そのほかの実施態様においては、命令ブロックのための注釈が、任意の英数値、テキスト値、および／または数値を含み、命令ブロック内の命令の数を表わすことができる。
【００３４】
１つの実施態様においては、追跡モジュール１５０がテーブル３００内の単一のエントリおよび／または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル３００が可能にする。これは、追跡モジュール１５０が、命令ブロックの実行の追跡にＣＡＭを使用（全ＣＡＭのルックアップを必要とする）するより効率的に動作することを可能にする。
【００３５】
図４は、１つの実施態様に従った、１つまたは複数の実行単位に対する命令ブロック内の命令の割付け４００の例を図解したブロック図である。割付け４００は、命令ブロック４０５、スレッド割り当て４１０、およびスレッド割り当て４１５を含む。命令ブロック４０５は、ＸＯＲ命令、それに続くＡＮＤ命令、それに続くＳＨＩＦＴ命令、それに続くＯＲ命令、それに続くＭＵＬＴ命令、それに続くＡＮＤ命令、それに続くＳＨＩＦＴ命令、それに続くＢＲＡＮＣＨ命令を含む。上で論じたとおり、命令ブロック（例：命令ブロック４０５）内の個別の命令は、異なる実行単位（例：異なるスレッドおよび／または異なるプロセス）またはプロセッサの異なる実行コアに割り当てることができる。たとえば、命令ブロック４０５内の個別の命令が１つまたは複数のスレッドに割り当てられることがある。別の例においては、命令ブロック４０５内の個別の命令が１つまたは複数のプロセスに割り当てられることがある。さらなる例においては、命令ブロック４０５内の個別の命令が異なる実行コア（例：図１０に図解されているコア１００２Ａおよび図１１に図解されているコア１１０６および１１０７）に割り当てられることがある。
【００３６】
図４に図解されているとおり、命令ブロック４０５内の命令を１つまたは複数のスレッド（例：実行単位）に割り当てることができる。スレッド割り当て４１０は、命令が第１のスレッドによって実行されるか否かを示し、スレッド割り当て４１５は、命令が第２のスレッドによって実行されるか否かを示す。値『１』は、スレッドが命令を実行することを示し、値『０』は、スレッドが命令を実行しないことを示す。たとえば、ＸＯＲ命令が第１のスレッドに割り当てられ、ＭＵＬＴ命令が第２のスレッドに割り当てられ、ＯＲ命令が第１のスレッドおよび第２のスレッドに割り当てられている。
【００３７】
図５は、この開示の追加の実施態様に従った、アプリケーション内の命令の実行の制御フローを追跡するための例示の制御フロー・データを図解したテーブル５００である。上で論じたとおり、追跡モジュール１５０は、テーブル５００（例：制御フロー・データ１４５）を使用して処理モジュール１６０によって実行される命令を追跡できる。制御フロー・データ１４５は、テーブル（例：テーブル５００）の形式で図解されているが、多様なデータ構造および／または表現を使用して制御フロー・データ１４５を表現できることは理解されるものとする。たとえば、制御フロー・データ１４５は、グラフ、ツリー、リスト等を使用して表現できる。
【００３８】
テーブル５００は、４つの列を含む。第１列は、『現在のブロック』とラベル付けされ、６つの異なる命令ブロック（例：基本ブロック）のための識別子（例：ブロック識別子）を含む。第２列は、『分岐なし』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されないときの行き先命令ブロックのための識別子を含む。１つの実施態様においては、命令ブロックが条件付きＢＲＡＮＣＨ命令を含まない旨をテーブル５００が示すことができる。たとえば、命令ブロック『４』は、分岐なしの列に、命令ブロック『４』内の最後の命令が条件なしのＢＲＡＮＣＨまたはＪＵＭＰ命令である旨を示すことができる値『Ｎ／Ａ』を有する。第３列は、『分岐あり』とラベル付けされ、ＢＲＡＮＣＨ命令が採用されるときの行き先命令ブロックのための識別子を含む。そのほかの実施態様においては、識別子を任意の英数値、文字列、数、および／またはそのほかの、命令ブロック（例：基本ブロック）を識別する識別子として使用できる値とすることができる。第４列は、『注釈』とラベル付けされ、『現在のブロック』列内に識別されている命令ブロックのための１つまたは複数の注釈を含む。
【００３９】
テーブル５００内の各行は、現在の命令ブロックのための識別子（例：現在実行中の命令を含む命令ブロックのための識別子）、ＢＲＡＮＣＨ命令が採用されない場合の行き先命令ブロックのための第１の識別子、およびＢＲＡＮＣＨ命令が採用される場合の行き先命令ブロックのための第２の識別子、および現在のブロック（例：現在の命令ブロックまたは現在の基本ブロック）のための注釈を含む。たとえば、テーブル５００の第１行は、命令ブロック『１』が、命令ブロック『１』の最後のＢＲＡＮＣＨ命令が採用されない場合に命令ブロック『６』にジャンプすること、または命令ブロック『１』の最後のＢＲＡＮＣＨ命令が採用される場合に命令ブロック『２』にジャンプすることを示す。このテーブル５００の第１行は、注釈『Ｔ０：１１０１０１０１／Ｔ１：０１１１１０１０』も含む。命令ブロック『１』のための注釈は、命令ブロック『１』からの命令が第１のスレッドＴ０、第２のスレッドＴ１、またはその両方に割り当てられているか否かを示すことができる。図４に戻るが、命令ブロック『１』は、命令ブロック４０５内に図解されている８つの命令を含むことができる。注釈『Ｔ０：１１０１０１０１／Ｔ１：０１１１１０１０』は、命令ブロック『１』（例：命令ブロック４０５）内の１、２、４、６、および８番目の命令がスレッドＴ０に割り当てられていること、および命令ブロック『１』内の２、３、４、５、および７番目の命令がスレッドＴ１に割り当てられていることを示す。
【００４０】
１つの実施態様においては、追跡モジュール１５０がテーブル５００内の単一のエントリおよび／または位置へのインデクシングによって命令ブロックの実行を追跡することをテーブル５００が可能にする。これは、追跡モジュール１５０が、命令ブロックの実行の追跡にＣＡＭを使用（全ＣＡＭのルックアップを必要とする）するより効率的に動作することを可能にする。
【００４１】
図６は、この開示の実施態様に従った、制御フロー・データ１４５を生成する制御フロー・モジュール１４０を図解したブロック図である。制御フロー・モジュール１４０は、命令モジュール６０５、注釈モジュール６１０、およびプロファイル・モジュール６１５を含む。制御フロー・モジュール１４０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。一般性を失うことなく制御フロー・モジュール１４０内により多くの、またはより少ない構成要素を含めることはできる。たとえば、モジュールのうちの２つを単一のモジュールに結合すること、またはモジュールのうちの１つを２またはそれより多くのモジュールに分割することができる。１つの実施態様においては、制御フロー・モジュール１４０が、制御フロー・データ１４５（図１、２、３、および５に関連して上で論じたとおり）を生成できる。
【００４２】
１つの実施態様においては、命令モジュール６０５が、アプリケーション（コンパイラ１２０によって生成される）を分析できる。命令モジュール６０５は、アプリケーション内の命令内の命令ブロック（例：基本ブロック）を識別できる。命令モジュール６０５は、また、アプリケーションの命令ブロック内のＢＲＡＮＣＨおよび／またはＪＵＭＰ命令のための行き先命令ブロックも識別できる。命令モジュール６０５は、制御フロー・データ１４５の生成時にコンパイラ１２０と通信（例：データの送信および／またはデータの受信）できる。たとえば、コンパイラ１２０がソース・コードをコンパイルしてアプリケーションを生成するとき、コンパイラ１２０は、命令モジュール６０５に命令を供給でき、命令モジュール６０５は、それらの命令を分析して制御フロー・データ１４５を生成できる。
【００４３】
１つの実施態様においては、プロファイル・モジュール６１５が、バイナリ・アナライザ１３０と通信（例：データの送信および／またはデータの受信）できる。たとえば、バイナリ・アナライザ１３０は、実行時プロファイル１３５を生成すること、および実行時プロファイル１３５をプロファイル・モジュール６１５に供給することができる。プロファイル・モジュール６１５は、実行時プロファイル１３５に基づいてアプリケーション内の命令内の命令ブロック（例：基本ブロック）を識別できる。プロファイル・モジュール６１５は、また、実行時プロファイル１３５に基づいてアプリケーションの命令ブロック内のＢＲＡＮＣＨおよび／またはＪＵＭＰ命令のための行き先命令ブロックも識別できる。プロファイル・モジュール６１５は、実行時プロファイル１３５を分析して制御フロー・データ１４５を生成できる。
【００４４】
１つの実施態様においては、注釈モジュール６１０が、命令のうちの１つまたは複数のための注釈を生成できる。注釈は、制御フロー・データ１４５内に含めることができる。注釈は、上で説明し、図３−５に関連して論じたとおり、アプリケーション内の命令の実行の追跡に使用できるデータを含むことができる。注釈は、処理モジュール１６０によって使用されるリソースの修正に使用できるデータ、処理モジュール１６０のより効率的な動作を可能にするべく使用できるデータ、および／または処理モジュール１６０の動作の最適化に使用できるデータを含むことができる。たとえば、注釈は、命令ブロック内において可能となり得るＩＬＰの量といった情報を含むことができる。別の例においては、注釈が、命令ブロックが使用できる処理デバイスの構成要素および／またはユニットのタイプについての情報を含むことができる。これは、処理モジュール１６０が命令によって使用される構成要素および／またはユニットを準備することを可能にできる。
【００４５】
図７は、この開示の実施態様に従った、処理モジュール１６０によって使用されるリソースの修正および／または命令の実行を追跡する追跡モジュール１５０を図解したブロック図である。追跡モジュール１５０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。１つの実施態様においては、追跡モジュール１５０がアプリケーション内の１つまたは複数の命令の実行を追跡すること、処理モジュール１６０のより効率的な動作を可能にすること、および／または処理モジュール１６０の動作を最適化することができる。追跡モジュール１５０は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理とすることができる。一般性を失うことなく追跡モジュール１５０内により多くの、またはより少ない構成要素を含めることはできる。たとえば、モジュールのうちの２つを単一のモジュールに結合すること、またはモジュールのうちの１つを２またはそれより多くのモジュールに分割することができる。
【００４６】
１つの実施態様においては、行き先モジュール７０５が、処理モジュール１６０上で実行している現在の命令ブロックのための行き先命令ブロックを決定できる。たとえば、行き先モジュール７０５は、処理モジュール１６０と通信してＢＲＡＮＣＨ命令の結果を決定できる。別の例においては、行き先モジュール７０５が、ＪＵＭＰ命令の行き先を決定できる。
【００４７】
１つの実施態様においては、処理デバイス・ツール７１５が、処理モジュール１６０によって使用されるリソースを修正すること、および／または制御フロー・データ１４５に基づいて処理モジュール１６０の動作を最適化することができる。たとえば、処理デバイス・ツール７１５は、処理モジュール１６０によって使用されるパワーの量を抑えるべく実行コアのうちのいくつかを非活性化すること、パワー・ダウンすること、および／または使用を控えることを処理モジュール１６０に命令できる。別の例においては、処理デバイス・ツール７１５が、処理モジュール１６０に対して、次の命令ブロック内の命令によって使用される回路、構成要素、および／またはモジュールの準備を命令できる。１つの実施態様においては、処理デバイス・ツール７１５が、処理モジュール１６０によって使用されるリソースの修正が処理モジュール１６０の動作に効果を有するか否かを決定できる。処理デバイス・ツール７１５が、処理モジュール１６０によって使用されるリソースの修正が処理モジュール１６０の動作への効果を持たないと決定した場合に、処理デバイス・ツール７１５は、リソースの修正が行なわれる必要がないことを示すべく制御フロー・データ１４５を更新できる。
【００４８】
別の実施態様においては、処理デバイス・ツール７１５が、制御フロー・データ１４５を使用してアプリケーション内の命令の実行を追跡できる。たとえば、処理デバイス・ツール７１５は、処理モジュール１６０が１２個の命令を含む命令ブロックを実行していることを決定できる。処理モジュール１６０が、１２より少ない数の命令の実行後に別の命令にジャンプした場合に、追跡モジュールは、エラー（例：ハード・エラーおよび／またはソフト・エラー）が生じたと決定できる。別の例においては、処理モジュール１６０が、異なるプロセス、スレッド、および／または実行コアを使用して命令ブロック内の命令を実行できる。処理モジュール１６０が命令ブロックからの命令を実行するとき、処理モジュール１６０は、命令をプロセス、スレッド、および／または実行コアに割り当てることができる。処理デバイス・ツール７１５は、制御フロー・データ１４５に対する注釈の追加および／または更新を行ない、いずれのプロセス、スレッド、および／または実行コアに命令ブロック内の命令が割り当てられているかを示すことができる。
【００４９】
図８は、ある実施態様に従った、命令の実行を追跡する方法８００を図解したフローチャートである。方法８００は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理によって遂行できる。１つの実施態様においては、方法８００が、図１、６、および７に示されているとおりの制御フロー・モジュール１４０および追跡モジュール１５０のうちの１つまたは複数によって遂行されることがある。
【００５０】
図８を参照すると、方法８００はブロック８０５において開始し、それにおいて方法８００は、制御フロー・データ１４５を生成する（例：図２、４、および５に図解されているとおりのテーブルを生成する）。１つの実施態様においては、方法８００が、アプリケーションのためのソース・コードのコンパイル時に制御フロー・データ１４５を生成できる。別の実施態様においては、方法８００が、アプリケーションを走らせるときに制御フロー・データ１４５を生成できる。たとえば、方法８００は、処理モジュール１６０によって命令が実行されているときにそのアプリケーションのための命令を分析できる。さらなる実施態様においては、方法８００が、実行時プロファイル１３５に基づいて制御フロー・データ１４５を生成できる。ブロック８１０においては、方法８００が、現在実行中の命令ブロックのための行き先識別子を決定する。たとえば、図２に戻るが、現在実行中の命令ブロックが命令ブロック『１』であれば、方法８００は、命令ブロック『１』が命令ブロック『２』に分岐するか、またはジャンプすることになると決定できる。方法８００は、現在実行中の命令ブロックに関連付けされた注釈を識別する（ブロック８１５）。ブロック８２０において方法８００は、制御フロー・データ１４５に基づいて処理モジュール１６０によって使用されるリソースを修正するか、かつ／または命令の実行を追跡する。たとえば、方法８００は、処理モジュール１６０内の構成要素および／または回路を非活性化できる。別の例においては、方法８００が、命令が割り当てられているスレッド、プロセス、および／または実行コアを追跡できる。さらなる例においては、方法８００が、命令ブロック（例：基本ブロック）内の命令の数を追跡できる。方法８００は、ブロック８２０の後に終了する。
【００５１】
図９は、別の実施態様に従った、命令の実行を追跡する方法９００を図解したフローチャートである。方法９００は、ハードウエア（例：回路、専用論理、プログラム可能論理、マイクロコード等）、ソフトウエア（処理デバイス上で実行される命令等）、ファームウエア、またはこれらの組合せを有する処理論理によって遂行できる。１つの実施態様においては、方法９００が、図１、６、および７に示されているとおりの制御フロー・モジュール１４０および追跡モジュール１５０のうちの１つまたは複数によって遂行されることがある。
【００５２】
図９を参照すると、方法９００はブロック９０５において開始し、それにおいて方法９００は、現在実行中の命令ブロックのための行き先識別子を決定する。たとえば、図２に戻るが、現在実行中の命令ブロックが命令ブロック『５』であれば、方法８００は、命令ブロック『５』が命令ブロック『６』に分岐するか、またはジャンプすることになると決定できる。方法９００は、現在実行中の命令ブロックに関連付けされた注釈を識別する（ブロック９１０）。ブロック９１５において方法９００は、制御フロー・データ１４５に基づいて処理モジュール１６０によって使用されるリソースを修正するか、かつ／または命令の実行を追跡する。たとえば、方法９００は、処理モジュール１６０内の構成要素および／または回路を非活性化できる。別の例においては、方法９００が、命令が割り当てられているスレッド、プロセス、および／または実行コアを追跡できる。さらなる例においては、方法９００が、命令ブロック（例：基本ブロック）内の命令の数を追跡できる。
【００５３】
ブロック９２０において方法９００は、処理モジュール１６０によって使用されるリソースの修正が有用であるか否か（例：処理モジュール１６０によって使用されるリソースの修正が処理モジュール１６０の動作の仕方に影響を及ぼすか否か）を決定できる。たとえば、方法９００は、処理モジュール１６０内の１つまたは複数の回路の非活性化がパワーを節約するか否かを決定できる。別の例においては、方法９００が、次の命令ブロック内の命令のために準備するべく処理モジュール１６０の特定の構成要素および／または回路を準備することが、命令の実行速度を増加するか否かを決定できる。リソースの修正が有用である場合には、方法９００が終了する。リソースの修正が有用でない場合には、方法９００がブロック９２５に進み、それにおいて方法９００は、リソースの修正が行なわれる必要がないことを示すべく注釈を更新する。たとえば、方法９００は、注釈を削除すること、またはリソースの修正が行なわれる必要がないことを示すデータを注釈に追加することができる。方法９００は、ブロック９２５の後に終了する。
【００５４】
図１０は、この開示の実施態様に従った、ＳｏＣ１０００のブロック図である。破線のボックスは、より高度なＳｏＣのオプションの特徴である。図１０において、相互接続ユニット（１つまたは複数）１０１２は、１つまたは複数のコア１００２Ａ−Ｎおよび共有キャッシュ・ユニット（１つまたは複数）１００６のセットを含むアプリケーション・プロセッサ１０２０、システム・エージェント・ユニット１０１０、バス・コントローラ・ユニット（１つまたは複数）１０１６、内蔵型メモリ・コントローラ・ユニット（１つまたは複数）１０１４、内蔵型グラフィクス論理１００８、スチルおよび／またはビデオ・カメラ機能を供給するための画像処理プロセッサ１０２４、ハードウエア・オーディオ・アクセラレーションを供給するためのオーディオ・プロセッサ１０２６、およびビデオ符号化／復号化アクセラレーションを供給するためのビデオ・プロセッサ１０２８を含むことができるセットまたは１つ若しくは複数のメディア・プロセッサ１０１８、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）ユニット１０３０、ダイレクト・メモリ・アクセス（ＤＭＡ）ユニット１０３２、および１つまたは複数の外部ディスプレイに結合するためのディスプレイ・ユニット１０４０に結合される。
【００５５】
メモリ階層は、コア内の１つまたは複数のレベルのキャッシュ、セットまたは１つまたは複数の共有キャッシュ・ユニット１００６、および内蔵型メモリ・コントローラ・ユニット１０１４のセットに結合された外部メモリ（図示せず）を含む。共有キャッシュ・ユニット１００６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはそのほかのレベルのキャッシュ等の１つまたは複数の中レベル・キャッシュ、最終レベルのキャッシュ（ＬＬＣ）、および／またはこれらの組合せを含むことができる。
【００５６】
いくつかの実施態様においては、コア１００２Ａ−Ｎのうちの１つまたは複数がマルチスレッドの能力を有する。
【００５７】
システム・エージェント・ユニット１０１０は、コア１００２Ａ−Ｎを調和させ、動作させる構成要素を含む。システム・エージェント・ユニット１０１０は、たとえば、パワー制御ユニット（ＰＣＵ）およびディスプレイ・ユニットを含むことができる。ＰＣＵは、コア１００２Ａ−Ｎおよび内蔵型グラフィクス論理１００８のパワー状態を調整するために必要な論理および構成要素であるとすること、またはそれを含むとすることができる。ディスプレイ・ユニット１０４０は、外部的に接続された１つまたは複数のディスプレイを駆動するためのものである。
【００５８】
コア１００２Ａ−Ｎは、アーキテクチャおよび／または命令セットという見地から同種または異種とすることができる。たとえば、コア１００２Ａ−Ｎのいくつかをイン−オーダ、ほかをアウト−オブ−オーダとすることができる。別の例においては、コア１００２Ａ−Ｎのうちの２つまたはそれより多くが同一命令セットを実行する能力を持つとすること、そのほかがその命令セットまたは異なる命令セットのサブセットを実行する能力しか持たないとすることができる。
【００５９】
アプリケーション・プロセッサ１０２０は、カリフォルニア州サンタクララのインテル社から入手可能なＣｏｒｅ（登録商標）ｉ３、ｉ５、ｉ７、２  Ｄｕｏ、およびＱｕａｄ、Ｘｅｏｎ（登録商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（登録商標）、またはＳｔｒｏｎｇＡＲＭ（登録商標）プロセッサ等の汎用プロセッサとすることができる。それに代えて、アプリケーション・プロセッサ１０２０をＡＲＭホーディングス、ＭＩＰＳ等の別の会社からのものとしてもよい。アプリケーション・プロセッサ１０２０は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィック・プロセッサ、コプロセッサ、埋込み型プロセッサ、またはこれらの類の専用プロセッサとすることができる。アプリケーション・プロセッサ１０２０は、１つまたは複数のチップ上に実装されることがある。アプリケーション・プロセッサ１０２０は、たとえばＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等の多くのプロセス・テクノロジのうちのいずれかを使用して１つまたは複数の基板上に実装されるか、かつ／またはそれの一部とすることができる。
【００６０】
図１１は、この開示に従ったシステムオンチップ（ＳｏＣ）設計の実施態様のブロック図である。特定の図解の例として、ＳｏＣ１１００は、ユーザ機器（ＵＥ）を含む。１つの実施態様においては、ＵＥが、携帯電話、スマートフォン、タブレット、超薄型ノートブック、ブロードバンド・アダプタ付きノートブック、または任意のそのほかの類似の通信デバイス等のエンド・ユーザによって通信に使用されることになる任意のデバイスを参照する。しばしばＵＥは、本質的にＧＳＭ（登録商標）ネットワーク内のモバイル局（ＭＳ）と潜在的に対応する基地局またはノードに接続する。
【００６１】
ここでは、ＳｏＣ１１００が、２つのコア１１０６および１１０７を含む。コア１１０６および１１０７は、インテル（Ｉｎｔｅｌ（Ｒ））のアーキテクチャ・コア（Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｃｏｒｅ（登録商標））ベースのプロセッサ、アドバンスド・マイクロ・デバイセズ（Ａｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ，  Ｉｎｃ．）（ＡＭＤ）のプロセッサ、ＭＩＰＳベースのプロセッサ、ＡＲＭベースのプロセッサ設計、またはカスタマ自体をはじめ、それらのライセンシーまたは採用者等の命令セット・アーキテクチャに準ずることができる。コア１１０６および１１０７は、バス・インターフェース・ユニット１１０９およびＬ２キャッシュ１１１０に関連付けされてシステム１１００のほかの部分と通信するＬ２キャッシュ制御１１０１１に結合される。相互接続１１１０は、ＩＯＳＦ、ＡＭＢＡ、または上で論じた内部接続といった、ここで述べている開示の１つまたは複数の態様を潜在的に実装する相互接続等のオンチップ相互接続を含む。
【００６２】
インターフェース１１１０は、ＳＩＭカードとインターフェースする加入者識別モジュール（ＳＩＭ）１１３０、ＳｏＣ１１００の初期化およびブートのためにコア１１０６および１１０７によって実行されるブート・コードを保持するブートＲＯＭ１１３５、外部メモリ（例：ＤＲＡＭ１１６０）とインターフェースするＳＤＲＡＭコントローラ１１４０、不揮発性メモリとインターフェースする（例：フラッシュ１１６５）フラッシュ・コントローラ１１４５、周辺機器とインターフェースする周辺コントロール（ＰＣ）１１５０（例：シリアル周辺インターフェース）、入力（例：タッチ・イネーブル入力）の受信および表示を行なうビデオ・コーデック１１２０およびビデオ・インターフェース１１２５、グラフィクス関連の計算を行なうＧＰＵ１１１５等といったほかの構成要素への通信チャンネルを供給する。これらのインターフェースのうちのいずれかは、ここで述べている開示の態様を組み込むことができる。
【００６３】
それに加えてシステム１１００は、ブルートゥース（Ｂｌｕｅｔｏｏｔｈ（登録商標））モジュール１１７０、３Ｇモデム１１７５、ＧＰＳ１１８０、Ｗｉ−Ｆｉ１１８５等の通信のための周辺機器を図解している。上で述べたとおり、ＵＥは、通信のための無線を含む。その結果、これらの周辺通信モジュールのすべてが必要とはされない。しかしながら、ＵＥには、外部通信のための何らかの形式の無線が含められるものとする。
【００６４】
図１２は、この中で論じている方法のうちの任意の１つまたは複数をマシンに遂行させるための命令のセットを実行できるコンピュータ・システム１２００の例示形式でマシンの図式表現を図解している。代替実施態様においては、マシンが、ＬＡＮ、インターネット、エクストラネット、またはイントラネット内のほかのマシンに接続される（例：ネットワークされる）ことがある。マシンは、サーバのキャパシティの中、クライアント−サーバ・ネットワーク環境内のクライアント・デバイス、またはピア−トゥ−ピア（または分散）ネットワーク環境内におけるピア・マシンとして動作できる。マシンは、パーソナル・コンピュータ（ＰＣ）、タブレットＰＣ、セットトップ・ボックス（ＳＴＢ）、携帯情報端末（ＰＤＡ）、携帯電話、ウェブ・アプライアンス、サーバ、ネットワーク・ルータ、スイッチまたはブリッジ、または任意の、そのマシンによって取られるアクションを指定する命令のセットを（シーケンシャルに、またはそのほかの形で）実行する能力を持ったマシンとすることができる。さらに、ここには単一のマシンだけが図解されているが、用語『マシン』は、この中で論じている方法の任意の１つまたは複数を遂行する命令のセット（または複数セット）を個別に、または連帯的に実行するマシンの任意の集合を含むと解釈されるものとする。
【００６５】
コンピュータ・システム１２００は、処理デバイス１２０２、メイン・メモリ１２０４（例：読出し専用メモリ（ＲＯＭ）、フラッシュ・メモリ、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）（シンクロナスＤＲＡＭ（ＳＤＲＡＭ）、またはＤＲＡＭ（ＲＤＲＡＭ）等）、スタティック・メモリ１２０６（例：フラッシュ・メモリ、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）等）、およびデータ・ストレージ・デバイス１２１８を含み、これらはバス１２３０を介して互いに通信する。
【００６６】
処理デバイス１２０２は、マイクロプロセッサ、中央処理ユニット、またはこれらの類といった１つまたは複数の汎用処理デバイスを表わす。より詳細に述べれば、処理デバイスは、複合命令セット・コンピューティング（ＣＩＳＣ）マイクロプロセッサ、縮小命令セット・コンピュータ（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、またはそのほかの命令セットを実装するプロセッサ、または命令セットの組合せを実装するプロセッサとすることができる。処理デバイス１２０２は、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、ネットワーク・プロセッサ、またはこれらの類といった専用処理デバイスのうちの１つまたは複数とすることができる。１つの実施態様においては、処理デバイス１２０２が、１つまたは複数の処理コアを含むことがある。処理デバイス１２０２は、この中で論じている動作を遂行するための命令１２２６を実行するべく構成される。
【００６７】
コンピュータ・システム１２００は、さらに、ネットワーク１２２０と通信可能に結合されるネットワーク・インターフェース・デバイス１２０８を含むことができる。コンピュータ・システム１２００は、ビデオ・ディスプレイ・ユニット１２１０（例：液晶ディスプレイ（ＬＣＤ）または陰極線管（ＣＲＴ））、英数入力デバイス１２１２（例：キーボード）、カーソル制御デバイス１２１４（例：マウス）、信号発生デバイス１２１６（例：スピーカ）、またはそのほかの周辺デバイスも含むことができる。さらにまた、コンピュータ・システム１２００は、グラフィック処理ユニット１２２２、ビデオ処理ユニット１２２８、およびオーディオ処理ユニット１２３２を含むことができる。別の実施態様においては、コンピュータ・システム１２００が、処理デバイス１２０２とともに機能するべく設計され、処理デバイス１２０２と外部デバイスの間の通信を制御するチップセット（図解せず）すなわち集積回路またはチップのグループを含むことができる。たとえば、チップセットをマザーボード上のチップのセットとすることができ、それが処理デバイス１２０２を非常に高速なメイン・メモリ１２０４およびグラフィック・コントローラ等のデバイスとリンクするだけでなく、処理デバイス１２０２をより低速な、ＵＳＢ、ＰＣＩ、またはＩＳＡバス等の周辺機器の周辺バスとリンクする。
【００６８】
データ・ストレージ・デバイス１２１８は、この中で述べている機能の方法のうちの任意の１つまたは複数を具体化する命令１２２６がストアされるコンピュータ可読ストレージ媒体１２２４を含むことができる。命令１２２６は、コンピュータ・システム１２００によるそれらの実行の間に、完全に、または少なくとも部分的にメイン・メモリ１２０４内および／または処理デバイス１２０２内に常駐することが可能であり、メイン・メモリ１２０４および処理デバイス１２０２もまたコンピュータ可読ストレージ媒体を構成する。
【００６９】
コンピュータ可読ストレージ媒体１２２４は、図１、６、および７に関係して述べたとおりの制御フロー・モジュール１４０および／または追跡モジュール１５０利用する命令１２２６、および／または上記のアプリケーションを呼び出すメソッドを含むソフトウエア・ライブラリのストアにも使用される。例示の実施態様内には、コンピュータ可読ストレージ媒体１２２４が単一の媒体として示されているが、用語『コンピュータ可読ストレージ媒体』は、１つまたは複数の命令セットをストアする単一の媒体または複数の媒体（例：集中型または分散型データベース、および／または関連キャッシュおよびサーバ）を含むと解釈されるものとする。用語『コンピュータ可読ストレージ媒体』もまた、マシンによる実行のための命令のセットをストアし、符号化し、または担持する能力があり、かつマシンにこの実施態様の方法のうちの任意の１つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。したがって、用語『コンピュータ可読ストレージ媒体』は、限定ではないが、ソリッド・ステート・メモリ、および光学および磁気媒体を含むと解釈されるものとする。
【００７０】
図１３は、ある実装に従ったマルチプロセッサ・システム１３００のブロック図である。図１３に示されているとおり、マルチプロセッサ・システム１３００は、ポイント−トゥ−ポイント相互接続システムであり、ポイント−トゥ−ポイント相互接続１３５０を介して結合された第１のプロセッサ１３７０および第２のプロセッサ１３８０を含む。プロセッサ１３７０および１３８０のそれぞれは、図６の処理デバイス６０２のいずれかのバージョンとすることができる。図１３に示されているとおり、プロセッサ１３７０および１３８０のそれぞれは、第１および第２のプロセッサ・コア（すなわち、プロセッサ・コア１３７４ａおよび１３７４ｂおよびプロセッサ・コア１３８４ａおよび１３８４ｂ）を含むマルチコア・プロセッサであるとすることができるが、潜在的にはるかに多くのコアがプロセッサ内に存在する可能性がある。プロセッサ・コアは、実行コアと呼ばれることもある。プロセッサは、それぞれ、ある実施態様に従ったハイブリッド書き込みモード論理を含むことができる。１つの実施態様においては、プロセッサ１３７０および１３８０のうちの１つまたは複数が、制御フロー・モジュール（例：図１に図解されている制御フロー・モジュール１４０）を実行できる。別の実施態様においては、追跡モジュール（例：図１に図解されている追跡モジュール１５０）をプロセッサ１３７０および１３８０のうちの１つまたは複数に含めること、またはそれの一部とすることができる。
【００７１】
ここでは２つのプロセッサ１３７０、１３８０が示されているが、この開示の範囲がそのように限定されないことは理解されるものとする。ほかの実装においては、１つまたは複数の追加のプロセッサが所定のプロセッサ内に存在し得る。
【００７２】
プロセッサ１３７０および１３８０は、それぞれが内蔵型メモリ・コントローラ・ユニット１３７２および１３８２を含むとして示されている。プロセッサ１３７０は、それのバス・コントローラ・ユニットの一部としてポイント−トゥ−ポイント（Ｐ−Ｐ）インターフェース１３７６および１３７８を含み、第２のプロセッサ１３８０もＰ−Ｐインターフェース１３８６および１３８８を含む。プロセッサ１３７０、１３８０は、ポイント−トゥ−ポイント（Ｐ−Ｐ）インターフェース１３５０を介し、Ｐ−Ｐインターフェース回路１３７８、１３８８を使用して情報を交換できる。図１３に示されているとおり、ＩＭＣＳ１３７２および１３８２は、プロセッサをそれぞれのメモリに、すなわち、それぞれのプロセッサにローカルに取り付けられたメイン・メモリの一部とすることができるメモリ１３３２およびメモリ１３３４に結合する。１つの実施態様においては、制御フロー・データ１４５（例：図２、３、および５に図解されているテーブル２００、３００、および５００）をメモリ１３３２および１３３４のうちの１つまたは複数にストアできる。
【００７３】
プロセッサ１３７０および１３８０は、それぞれ個別のＰ−Ｐインターフェース１３５２、１３５４を介し、ポイント−トゥ−ポイント・インターフェース回路１３７６、１３９４、１３８６、および１３９８を使用してチップセット１３９０と情報を交換できる。チップセット１３９０もまた、高処理能力グラフィック・インターフェース１３３９を介して高処理能力グラフィック回路１３３８と情報を交換できる。
【００７４】
プロセッサが低パワー・モードに置かれている場合にいずれかまたは両方のプロセッサのローカル・キャッシュの情報を共有キャッシュ内にストアできるように、共有キャッシュ（図示せず）をいずれかのプロセッサ内または両方のプロセッサの外に、Ｐ−Ｐ相互接続を介してプロセッサと接続されるが、含めることができる。
【００７５】
チップセット１３９０は、インターフェース１３９６を介して第１のバス１３１６と結合できる。１つの実施態様においては、第１のバス１３１６がＰＣＩ（ペリフェラル・コンポーネント・インターコネクト（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ））バスまたはＰＣＩエクスプレス（ＰＣＩ  Ｅｘｐｒｅｓｓ）バスまたはそのほかの第３ジェネレーション入出力相互接続バス等のバスとすることができるが、この開示の範囲がそのように限定されることはない。
【００７６】
図１３に示されているとおり、第１のバス１３１６には、第１のバス１３１６を第２のバス１３２０に結合するバス・ブリッジ１３１８とともに多様な入出力デバイス１３１４を結合できる。１つの実施態様においては、第２のバス１３２０をＬＰＣ（ロー・ピン・カウント（Ｌｏｗ  Ｐｉｎ  Ｃｏｕｎｔ））バスとすることができる。第２のバス１３２０には、たとえば、キーボードおよび／またはマウス１３２２、通信デバイス１３２７、および１つの実施態様においては命令／コードおよびデータ１３３０を含むことができるディスク・ドライブまたはそのほかの大容量ストレージ・デバイス等のストレージ・ユニット１３２８を含めた多様なデバイスを結合できる。さらに第２のバス１３２０には、オーディオ入出力１３２４を結合できる。注意されるものとするが、このほかのアーキテクチャも可能である。たとえば、図１３のポイント−トゥ−ポイント・アーキテクチャに代えて、システムは、マルチ−ドロップ・バスまたはそのほかのその種のアーキテクチャを実装できる。
【００７７】
図１４は、処理デバイスによって実装される、イン−オーダ・パイプラインおよびレジスタ名前変更段階、アウト−オブ−オーダ発行／実行パイプラインを図解したブロック図である。図１４は、本発明の少なくとも１つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行／実行論理を図解したブロック図である。図１４内の実線のボックスはイン−オーダ・パイプラインを図解し、破線のボックスはレジスタ名前変更、アウト−オブ−オーダ発行／実行パイプラインを図解している。同様に図１４内の実線のボックスはイン−オーダ・アーキテクチャ論理を図解し、破線のボックスはレジスタ名前変更論理およびアウト−オブ−オーダ発行／実行論理を図解している。図１４において、プロセッサ・パイプライン１４００は、フェッチ段階１４０２、長さ復号化段階１４０４、復号化段階１４０６、割付けステージ１４０８、名前変更段階１４１０、スケジューリング（ディスパッチまたは発行としても知られる）段階１４１２、レジスタ読み出し／メモリ読み出し段階１４１４、実行段階１４１６、書き戻し／メモリ書き込み段階１４１８、例外ハンドリング段階１４２２、コミット段階１４２４を含む。
【００７８】
図１５は、この開示の少なくとも１つの実施態様に従った、プロセッサ内に含まれることになるイン−オーダ・アーキテクチャ・コアおよびレジスタ名前変更論理、アウト−オブ−オーダ発行／実行論理を図解したブロック図である。図１５において、矢印は、２つまたはそれより多くのユニットの間における結合を示し、矢印の方向は、それらのユニットの間におけるデータ・フローの方向を示す。図１５は、実行エンジン・ユニット１５５０に結合されたフロントエンド・ユニット１５３０を含み、それら両方がメモリ・ユニット１５７０に結合されるプロセッサ・コア１５９０を示している。１つの実施態様においては、制御フロー・データ１４５（例：図２、３、および５に図解されているテーブル２００、３００、および５００）をメモリ・ユニット１５７０にストアできる。
【００７９】
コア１５９０は、縮小命令セット・コンピューティング（ＲＩＳＣ）コア、複合命令セット・コンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドもしくは代替コア・タイプとすることができる。さらに別のオプションとして、コア１５９０は、たとえば、ネットワークまたは通信コア、圧縮エンジン、グラフィック・コア、またはこれらの類の専用コアとすることができる。１つの実施態様においては、コア１５９０が、制御フロー・モジュール（例：図１に図解されている制御フロー・モジュール１４０）を実行できる。別の実施態様においては、追跡モジュール（例：図１に図解されている追跡モジュール１５０）をコア１５９０内に含めること、またはそれの一部とすることができる。たとえば、追跡モジュールは、フロントエンド・ユニット１５３０および／または実行エンジン・ユニット１５５０の一部とすることができる。
【００８０】
フロントエンド・ユニット１５３０は分岐予測ユニット１５３２を含み、それが命令キャッシュ・ユニット１５３４に結合され、それが命令翻訳ルックアサイド・バッファ（ＴＬＢ）１５３６に結合され、それが命令取出しユニット１５３８に結合され、それが復号化ユニット１５４０に結合されている。復号化ユニットまたは復号器は、命令を復号化し、出力として、オリジナルの命令から復号化されるか、またはそのほかの形でそれらを反映するか、それらから派生する１つまたは複数のマイクロ動作、マイクロコードのエントリーポイント、マイクロ命令、そのほかの命令、またはそのほかの制御信号を生成する。復号器は、多様な異なるメカニズムを使用して実装できる。適切なメカニズムの例は、限定ではないが、ルックアップ・テーブル、ハードウエア実装、プログラム可能論理配列（ＰＬＡ）、マイクロコード読出し専用メモリ（ＲＯＭ）等を含む。命令キャッシュ・ユニット１５３４は、さらにメモリ・ユニット１５７０内のレベル２（Ｌ２）キャッシュ・ユニット１５７６に結合される。復号化ユニット１５４０は、実行エンジン・ユニット１５５０内の名前変更／割付器ユニット１５５２に結合されている。
【００８１】
実行エンジン・ユニット１５５０は、リタイアメント・ユニット１５５４に結合された名前変更／割付器ユニット１５５２および１つまたは複数のスケジューラ・ユニット１５５６のセットを含む。スケジューラ・ユニット１５５６（１つまたは複数）は、予約ステーション、中央命令ウインドウ等を含む任意数の異なるスケジューラを表わす。スケジューラ・ユニット１５５６（１つまたは複数）は、物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）に結合される。物理レジスタ・ファイル・ユニット１５５８（１つまたは複数）は、異なるものが１つまたは複数の異なるデータ型、たとえばスカラー整数、スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス（例：命令ポインタ、すなわち次に実行されるべき命令のアドレス）等をストアする１つまたは複数の物理レジスタ・ファイルを表わす。物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）は、リタイアメント・ユニット１５５４によってオーバーラップされて、レジスタ名前変更およびアウト−オブ−オーダ実行を実装できる多様な方法を説明する（例：リオーダ・バッファ（１つまたは複数）およびリタイアメント・レジスタ・ファイル（１つまたは複数）の使用、将来ファイル（１つまたは複数）、履歴バッファ（１つまたは複数）、およびリタイアメント・レジスタ・ファイル（１つまたは複数）の使用、レジスタ・マップおよびレジスタのプールの使用）。概して言えば、アーキテクチャ上のレジスタは、プロセッサの外側から、またはプログラマの観点から可視である。レジスタは、周知の特定タイプの回路に限定されない。この中で述べられているとおりのデータのストアおよび供給の能力がある限りにおいて多様な異なるタイプのレジスタが適する。適切なレジスタの例は、限定ではないが、専用物理レジスタ、レジスタ名前変更を使用して動的に割付けされる物理レジスタ、専用および動的に割付けされる物理レジスタの組合せ等を含む。リタイアメント・ユニット１５５４および物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）は、実行クラスタ１５６０（１つまたは複数）に結合される。実行クラスタ１５６０（１つまたは複数）は、１つまたは複数の実行ユニット１５６２のセットおよび１つまたは複数のメモリ・アクセス・ユニット１５６４のセットを含む。実行ユニット１５６２は、多様な型のデータ（例：スカラー浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して多様な動作（例：シフト、加算、減算、乗算）を行なうことができる。いくつかの実施態様は、特定の機能または機能のセットに専用の多数の実行ユニットを含むことができるが、ほかの実施態様は、すべての機能をすべて行なう１つの実行ユニットまたは複数の実行ユニットだけを含むことができる。スケジューラ・ユニット１５５６（１つまたは複数）、物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）、および実行クラスタ１５６０（１つまたは複数）は、特定の実施態様が特定の型のデータ／動作のために別々のパイプラインを作り出すことから可能性として複数であるとして示されている（例：スカラー整数パイプライン、スカラー浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリ・アクセス・パイプライン−−これらはそれぞれが独自のスケジューラ・ユニット、物理レジスタ・ファイル（１つまたは複数）ユニット、および／または実行クラスタを有し、また別々のメモリ・アクセス・パイプラインの場合には、このパイプラインの実行クラスタのみがメモリ・アクセス・ユニット１５６４（１つまたは複数）を有する特定の実施態様が実装される）。これについても理解されるものとするが、別々のパイプラインが使用される場合には、これらのパイプラインのうちの１つまたは複数がアウト−オブ−オーダ発行／実行となり、残りがイン−オーダとなることがある。
【００８２】
メモリ・アクセス・ユニット１５６４のセットは、レベル２（Ｌ２）キャッシュ・ユニット１５７６に結合されたデータ・キャッシュ・ユニット１５７４に結合されデータＴＬＢユニット１５７２を含むメモリ・ユニット１５７０に結合される。１つの例示的な実施態様においては、メモリ・アクセス・ユニット１５６４が、それぞれがメモリ・ユニット１５７０内のデータＴＬＢユニット１５７２に結合されたロード・ユニット、ストア・アドレス・ユニット、およびストア・データ・ユニットを含むことができる。Ｌ２キャッシュ・ユニット１５７６は、１つまたは複数のほかのレベルのキャッシュに、最終的にはメイン・メモリに結合される。
【００８３】
例として述べるが、例示的なレジスタ名前変更、アウト−オブ−オーダ発行／実行コアのアーキテクチャは、次のとおりにしてパイプライン１４００を実装できる。（１）命令取出しユニット１５３８がフェッチ段階１４０２および長さ復号化段階１４０４を遂行し、（２）復号化ユニット１５４０が復号化段階１４０６を遂行し、（３）名前変更／割付け器ユニット１５５２が割付けステージ１４０８および名前変更段階１４１０を遂行し、（４）スケジューラ・ユニット１５５６（１つまたは複数）がスケジューリング段階１４１２を遂行し、（５）物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）およびメモリ・ユニット１５７０がレジスタ読み出し／メモリ読み出し段階１４１４を遂行し、実行クラスタ１５６０が実行段階１４１６を遂行し、（６）メモリ・ユニット１５７０および物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）が書き戻し／メモリ書き込み段階１４１８を遂行し、（７）多様なユニットが例外ハンドリング段階１４２２に掛かり合うことがあり、（８）リタイアメント・ユニット１５５４および物理レジスタ・ファイル（１つまたは複数）ユニット１５５８（１つまたは複数）がコミット段階１４２４を遂行する。
【００８４】
コア１５９０は、１つまたは複数の命令セット（例：Ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張を伴う）、カリフォルニア州サニーベイルのＭＩＰＳテクノロジのＭＩＰＳ命令セット、カリフォルニア州サニーベイルのＡＲＭホーディングスのＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加の拡張を伴う））をサポートできる。
【００８５】
理解されるものとするが、コアは、マルチスレッドをサポートすること（動作またはスレッドの２つまたはそれより多くの並列セットを実行すること）、およびそれを、タイムスライス・マルチスレッド、同時マルチスレッド（単一の物理コアが、その物理コアが同時にマルチスレッディングするスレッドのそれぞれのために論理コアを供給する）、またはこれらの組合せ（例：インテル（Ｉｎｔｅｌ（Ｒ））のハイパースレッディング（Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ）テクノロジにおけるようなタイムスライス取出しおよび復号化およびその後の同時マルチスレッド））を含む多様な方法で行なうことができる。
【００８６】
レジスタ名前変更がアウト−オブ−オーダ実行の文脈で述べられているが、レジスタ名前変更は、イン−オーダ・アーキテクチャにおいても使用できることは理解されるものとする。図解されているプロセッサの実施態様は、別々の命令およびデータ・キャッシュ・ユニット１５３４／１５７４および共有Ｌ２キャッシュ・ユニット１５７６も含んでいるが、代替実施態様が、命令およびデータ両方のために単一の内部キャッシュ、たとえばレベル１（Ｌ１）内部キャッシュを、または複数レベルの内部キャッシュを有し得ることは理解されるものとする。いくつかの実施態様においては、システムが、内部キャッシュ、およびコアおよび／またはプロセッサの外部となる外部キャッシュの組合せを含むことができる。それに代えて、キャッシュのすべてをコアおよび／またはプロセッサの外部とすることができる。
【００８７】
図１６は、本発明の１つの実施態様に従った、命令を遂行する論理回路を含むプロセッサ２００のためのマイクロアーキテクチャのブロック図である。いくつかの実施態様においては、バイト、ワード、倍長ワード、４倍長ワード等のサイズをはじめ、単精度および倍精度整数、および浮動小数点データ型等のデータ型を有するデータ要素に対して動作するべく１つの実施態様に従った命令の実装が可能である。１つの実施態様においては、プロセッサ２００が、制御フロー・モジュール（例：図１に図解されている制御フロー・モジュール１４０）を実行できる。１つの実施態様においては、プロセッサ２００が、追跡モジュール（例：図１に図解されている追跡モジュール１５０）も含むことができる。たとえば、追跡モジュールは、フロントエンド２０１および／またはアウト−オブ−オーダ・エンジン２０３の一部とすることができる。１つの実施態様においては、イン−オーダ・フロントエンド２０１が、実行されるべき命令を取出し、その後プロセッサ・パイプラインにおいて使用されるべくそれらを準備するプロセッサ２００の一部になる。フロントエンド２０１は、いくつかのユニットを含むことができる。１つの実施態様においては、命令先取出し器２２６がメモリから命令を取出し、それらを命令復号器２２８に供給し、それがそれらを復号化するかまたは解釈する。たとえば、１つの実施態様においては、受信した命令を復号器が、マシンが実行することが可能な『マイクロ命令』または『マイクロ動作』と呼ばれる（マイクロオペまたはμオペとも呼ばれる）１つまたは複数の動作に復号化する。ほかの実施態様においては、復号器が命令をオペコードおよび対応するデータおよび制御フィールドにパーズし、マイクロアーキテクチャによってそれらが使用されて１つの実施態様に従った動作が遂行される。１つの実施態様においては、トレースキャッシュ２３０が復号化後のμオペを取ってそれらを実行のためのμオペ・キュー２３４内においてプログラム順序付きシーケンスまたはトレースにアッセンブルする。トレースキャッシュ２３０が複雑な命令に遭遇すると、マイクロコードＲＯＭ２３２が動作の完遂に必要となるμオペを供給する。
【００８８】
いくつかの命令は単一のマイクロオペに変換されるが、そのほかは、完全な動作の完遂にいくつかのマイクロオペを必要とする。１つの実施態様においては、命令の完遂に必要となるマイクロオペが４つを超える場合には、命令復号器２２８が、その命令を行なうべくマイクロコードＲＯＭ２３２にアクセスする。１つの実施態様については、命令を、命令復号器２２８において処理するために少ない数のマイクロオペに復号化することが可能である。別の実施態様においては、動作の達成に多くのマイクロオペが必要な場合に、命令をマイクロコードＲＯＭ２３２内にストアすることが可能である。トレースキャッシュ２３０は、エントリーポイント・プログラム可能論理アレイ（ＰＬＡ）を参照してマイクロコードＲＯＭ２３２からマイクロコード・シーケンスを読み出すための正しいマイクロ命令ポインタを決定し、１つの実施態様に従った１つまたは複数の命令を完遂する。マイクロコードＲＯＭ２３２が、命令のためのマイクロオペのシーケンシングを完了した後は、マシンのフロントエンド２０１が、トレースキャッシュ２３０からのマイクロオペの取出しを再開する。
【００８９】
アウト−オブ−オーダ実行エンジン２０３は、実行のために命令が準備されるところである。アウト−オブ−オーダ実行論理は多数のバッファを有し、命令のフローを均し、リオーダし、それらがパイプラインを下降するときの処理能力を最適化し、実行のスケジュールを維持する。割付器論理は、各μオペが実行のために必要とするマシンのバッファおよびリソースを割付けする。レジスタ名前変更論理は、論理レジスタの名前を変更してレジスタ・ファイル内のエントリに書き込む。また割付器は、２つのμオペ・キューのうちの１つの中の各μオペのために１つ、メモリ動作のために１つ、非メモリ動作のために１つのエントリを命令スケジューラ、すなわちメモリ・スケジューラ、高速スケジューラ２０２、低速／汎用浮動小数点スケジューラ２０４、および単純浮動小数点スケジューラ２０６の先頭に割付けすることも行なう。μオペ・スケジューラ２０２、２０４、２０６は、μオペが実行可能状態になるときを、それらに従属する入力レジスタのオペランド・ソースの即応性およびμオペがそれぞれの動作の完遂に必要とする実行リソースの可用性に基づいて決定する。１つの実施態様の高速スケジューラ２０２は、メイン・クロック・サイクルの各半分でのスケジューリングが可能であり、ほかのスケジューラは、メイン・プロセッサ・クロック・サイクルごとに一度だけスケジューリングが可能である。スケジューラは、ディスパッチ・ポートを調停して実行のためにμオペをスケジュールする。
【００９０】
レジスタ・ファイル２０８、２１０は、スケジューラ２０２、２０４、２０６と実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４の間に置かれている。整数と浮動小数点動作それぞれのために、別々のレジスタ・ファイル２０８、２１０が存在する。１つの実施態様の各レジスタ・ファイル２０８、２１０は、まだレジスタ・ファイル内に書き込まれていない完了したばかりの結果をバイパスするか、新しい従属μオペに転送することが可能なバイパス回路網も含む。整数レジスタ・ファイル２０８および浮動小数点レジスタ・ファイル２１０は、他方へデータを伝える能力も有する。１つの実施態様については、整数レジスタ・ファイル２０８が２つの別々のレジスタ・ファイルに分割され、そのうちの１つは低次３２ビットのデータのためのレジスタ・ファイルであり、２つ目は高次３２ビットのデータのためのレジスタ・ファイルである。通常、浮動小数点命令が６４から１２８ビットの幅のオペランドを有することから、１つの実施態様の浮動小数点レジスタ・ファイル２１０は１２８ビット幅のエントリを有する。
【００９１】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含み、そこで命令が実際に実行される。このセクションは、マイクロ命令が実行に必要とする整数および浮動小数点のデータ・オペランド値をストアするレジスタ・ファイル２０８、２１０を含む。１つの実施態様のプロセッサ２００は、多数の実行ユニット、すなわちアドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４からなる。１つの実施態様については、浮動小数点実行ブロック２２２、２２４が、浮動小数点、ＭＭＸ、ＳＩＭＤ、およびＳＳＥ、またはそのほかの動作を実行する。１つの実施態様の浮動小数点ＡＬＵ２２２は、除算、平方根、および剰余マイクロオペを実行する６４ビット×６４ビットの浮動小数点除算器を含む。本発明の実施態様について、浮動小数点値を伴う命令は、浮動小数点ハードウエアを用いて取り扱うことができる。１つの実施態様においては、ＡＬＵ動作が高速ＡＬＵ実行ユニット２１６、２１８に向けられる。１つの実施態様の高速ＡＬＵ２１６、２１８は、クロック・サイクルの半分の有効待ち時間を伴って高速動作を実行することが可能である。１つの実施態様については、低速ＡＬＵ２２０が乗算器、シフト、フラグ論理、および分岐処理といった待ち時間の長いタイプの動作のための整数実行ハードウエアを含むことから、もっとも複雑な整数動作が低速ＡＬＵ２２０に向けられる。メモリのロード／ストア動作は、ＡＧＵ２１２、２１４によって実行される。１つの実施態様については、整数ＡＬＵ２１６、２１８、２２０が、６４ビットのデータ・オペランドに対して整数動作を行なうという点に関して述べられる。代替実施態様においては、ＡＬＵ２１６、２１８、２２０を、１６、３２、１２８、２５６等を含む多様なデータ・ビットをサポートするべく実装することが可能である。同様に、浮動小数点ユニット２２２、２２４を、多様な幅のビットを有する広汎なオペランドをサポートするべく実装することが可能である。１つの実施態様については、浮動小数点ユニット２２２、２２４が、ＳＩＭＤおよびマルチメディア命令とともに１２８ビット幅のパック・データ・オペランドに動作することが可能である。
【００９２】
１つの実施態様においては、μオペ・スケジューラ２０２、２０４、２０６が、親のロードが実行を完了する前に従属動作をディスパッチする。プロセッサ２００内においてμオペが推論的にスケジュールされ、かつ実行されることから、プロセッサ２００は、メモリ・ミスを取り扱う論理も含む。データ・キャッシュ内においてデータ・ロードがミスした場合には、一時的に正しくないデータとともにスケジューラを離れたパイプライン内にインフライトの従属動作が存在する可能性がある。応答メカニズムは、正しくないデータを使用する命令を追跡し、かつ再実行する。従属動作だけがリプレイを必要とし、独立動作はそのまま完了させる。プロセッサの１つの実施態様のスケジューラおよびリプレイ・メカニズムは、テキスト文字列比較動作のための命令シーケンスを捕らえるべく設計される。
【００９３】
用語『レジスタ』は、命令の一部として使用されてオペランドを識別するオンボード・プロセッサ・ストレージ位置を言うこともある。言い換えると、レジスタは、プロセッサの外側から（プログラマの観点から）使用可能なものとすることもできる。しかしながら、実施態様のレジスタは、その意味において特定タイプの回路に限定されないものとする。むしろ実施態様のレジスタは、データのストアならびに供給、およびこの中に述べられている機能を行なう能力を有する。この中に述べられているレジスタは、専用物理レジスタ、レジスタ名前変更を使用して動的に割付けされる物理レジスタ、専用および動的に割付けされる物理レジスタの組合せといった、任意数の異なるテクニックを使用し、プロセッサ内の回路による実装が可能である。１つの実施態様においては、整数レジスタが３２ビットの整数データをストアする。１つの実施態様のレジスタ・ファイルも、パック・データのために８つのマルチメディアＳＩＭＤレジスタを含む。以下の説明においては、レジスタが、カリフォルニア州サンタクララのインテル社のＭＭＸテクノロジを用いて可能になるマイクロプロセッサ内の６４ビット幅のＭＭＸＴＭレジスタ（いくつかの例では「ｍｍ」レジスタと呼ぶこともある）等のパック・データを保持するべく設計されたデータ・レジスタであると理解されるものとする。これらのＭＭＸレジスタは、整数および浮動小数点形式の両方に用意されており、ＳＩＭＤおよびＳＳＥ命令が付随するパック・データ要素とともに動作可能である。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降（包括的に『ＳＳＥｘ』と呼ぶ）テクノロジに関係する１２８ビット幅のＸＭＭレジスタもまた、その種のパック・データ・オペランドの保持に使用することが可能である。１つの実施態様では、パック・データおよび整数データのストアにおいて、レジスタが２つのデータ型の間の区別を必要としない。１つの実施態様においては、整数および浮動小数点が同一のレジスタ・ファイルまたは異なるレジスタ・ファイルのいずれかの中に収められる。さらにまた、１つの実施態様においては、浮動小数点および整数データを異なるレジスタまたは同一のレジスタにストアできる。
【００９４】
以下の例は、さらなる実施態様に関係する。
【００９５】
例１は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの１つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データをストアするメモリ・モジュール、およびメモリ・モジュールと通信可能に結合されるプロセッサを有する装置である。プロセッサは、制御フロー・データを受信し、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定し、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別し、プロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも１つを、注釈および行き先識別子のうちの１つまたは複数に基づいて遂行するべく構成される。
【００９６】
例２は、例１の内容をオプションで拡張できる。例２においては、プロセッサがさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの１つまたは複数の間に制御フロー・データを生成するべく構成される。
【００９７】
例３は、例１および２のうちの任意の１つの内容をオプションで拡張できる。例３においては、プロセッサがさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得し、かつ制御フロー・データを実行時プロファイルに基づいて生成するべく構成される。
【００９８】
例４は、例１−３のうちの任意の１つの内容をオプションで拡張できる。例４においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの１つまたは複数を有する。
【００９９】
例５は、例１−４のうちの任意の１つの内容をオプションで拡張できる。例５においては、プロセッサが、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を注釈に基づいて検出することによって命令ブロックの実行を追跡し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
【０１００】
例６は、例１−５のうちの任意の１つの内容をオプションで拡張できる。例６においては、プロセッサが、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることによって、プロセッサによって使用されるリソースを修正する。
【０１０１】
例７は、例１−６のうちの任意の１つの内容をオプションで拡張できる。例７においては、プロセッサが、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別することによって命令ブロックの実行を追跡し、命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該１つまたは複数を識別するデータを用いて注釈を更新する。
【０１０２】
例８は、例１−７のうちの任意の１つの内容をオプションで拡張できる。例８においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの１つまたは複数に変換することを含む。
【０１０３】
例９は、例１−８のうちの任意の１つの内容をオプションで拡張できる。例８においては、プロセッサがさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定し、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新するように構成される。
【０１０４】
例１０は、例１−９のうちの任意の１つの内容をオプションで拡張できる。例１０においては、プロセッサがさらに、第２の現在の命令ブロックのための第２の行き先識別子を制御フロー・データに基づいて決定し、第２の現在の命令ブロックに関連付けされた第２の注釈を制御フロー・データに基づいて識別し、かつプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの１つまたは複数を、第２の注釈および第２の行き先識別子のうちの１つまたは複数に基づいて遂行するべく構成される。
【０１０５】
例１１は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの１つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データを受信すること、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定すること、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも１つを、注釈および行き先識別子のうちの１つまたは複数に基づいて遂行することを有する方法である。
【０１０６】
例１２は、例１２の内容をオプションで拡張できる。例１２においては、この方法がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの１つまたは複数の間に制御フロー・データを生成することを有する。
【０１０７】
例１３は、例１１−１２のうちの任意の１つの内容をオプションで拡張できる。例１３においては、この方法がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得すること、および制御フロー・データを実行時プロファイルに基づいて生成することを有する。
【０１０８】
例１４は、例１１−１３のうちの任意の１つの内容をオプションで拡張できる。例１４においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの１つまたは複数を有する。
【０１０９】
例１５は、例１１−１４のうちの任意の１つの内容をオプションで拡張できる。例１５においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
【０１１０】
例１６は、例１１−１５のうちの任意の１つの内容をオプションで拡張できる。例１６においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
【０１１１】
例１７は、例１１−１６のうちの任意の１つの内容をオプションで拡張できる。例１７においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該１つまたは複数を、識別するデータを用いて注釈を更新することを有する。
【０１１２】
例１８は、例１１−１７のうちの任意の１つの内容をオプションで拡張できる。例１８においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの１つまたは複数に変換することを有する。
【０１１３】
例１９は、例１１−１８のうちの任意の１つの内容をオプションで拡張できる。例１９においては、この方法がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定すること、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示するべく注釈を更新することを有する。
【０１１４】
例２０は、例１１−１９のうちの任意の１つの内容をオプションで拡張できる。例２０においては、この方法がさらに、第２の現在の命令ブロックのための第２の行き先識別子を制御フロー・データに基づいて決定すること、第２の現在の命令ブロックに関連付けされた第２の注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの１つまたは複数を、第２の注釈および第２の行き先識別子のうちの１つまたは複数に基づいて遂行することを有する。
【０１１５】
例２１は、プロセッサによってアクセスされたときに、当該プロセッサに、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの１つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データを受信すること、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定すること、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも１つを、注釈および行き先識別子のうちの１つまたは複数に基づいて遂行することを有する動作を行なわせるデータを含む非一過性機械可読ストレージ媒体である。
【０１１６】
例２２は、例２１の内容をオプションで拡張できる。例２２においては、この動作がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの１つまたは複数の間に制御フロー・データを生成することを有する。
【０１１７】
例２３は、例２０−２２のうちの任意の１つの内容をオプションで拡張できる。例２３においては、この動作がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得すること、および制御フロー・データを実行時プロファイルに基づいて生成することを有する。
【０１１８】
例２４は、例２０−２３のうちの任意の１つの内容をオプションで拡張できる。例２４においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの１つまたは複数を有する。
【０１１９】
例２５は、例２０−２４のうちの任意の１つの内容をオプションで拡張できる。例２５においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
【０１２０】
例２６は、例２０−２５のうちの任意の１つの内容をオプションで拡張できる。例２６においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
【０１２１】
例２７は、例２０−２６のうちの任意の１つの内容をオプションで拡張できる。例２７においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該１つまたは複数を、識別するデータを用いて注釈を更新することを有する。
【０１２２】
例２８は、例２０−２７のうちの任意の１つの内容をオプションで拡張できる。例２８においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの１つまたは複数に変換することを有する。
【０１２３】
例２９は、例２０−２８のうちの任意の１つの内容をオプションで拡張できる。例２９においては、この動作がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定すること、かつリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新することを有する。
【０１２４】
例３０は、例２０−２９のうちの任意の１つの内容をオプションで拡張できる。例３０においては、この動作がさらに、第２の現在の命令ブロックのための第２の行き先識別子を制御フロー・データに基づいて決定すること、第２の現在の命令ブロックに関連付けされた第２の注釈を制御フロー・データに基づいて識別すること、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの１つまたは複数を、第２の注釈および第２の行き先識別子のうちの１つまたは複数に基づいて遂行することを有する。
【０１２５】
例３１は、複数の、命令ブロックのためのブロック識別子、命令ブロックのうちの１つまたは複数のための行き先識別子、および命令ブロックのための注釈を有する制御フロー・データをストアするための手段、制御フロー・データを受信するための手段、現在の命令ブロックのための行き先識別子を制御フロー・データに基づいて決定するための手段、現在の命令ブロックに関連付けされた注釈を制御フロー・データに基づいて識別するための手段、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの少なくとも１つを、注釈および行き先識別子のうちの１つまたは複数に基づいて遂行するための手段を有する装置である。
【０１２６】
例３２は、例３１の内容をオプションで拡張できる。例３２においては、例３１の装置がさらに、命令ブロックを有するアプリケーションのコンパイル時および実行時のうちの１つまたは複数の間に制御フロー・データを生成するための手段を有する。
【０１２７】
例３３は、例３１−３２のうちのいずれかの内容をオプションで拡張できる。例３３においては、この装置がさらに、命令ブロックを有するアプリケーションの実行時プロファイルを獲得するための手段、および制御フロー・データを実行時プロファイルに基づいて生成するための手段を有する。
【０１２８】
例３４は、例３１−３３のうちのいずれかの内容をオプションで拡張できる。例３４においては、制御フロー・データが、テーブル、リスト、グラフ、およびツリーのうちの１つまたは複数を有する。
【０１２９】
例３５は、例３１−３４のうちのいずれかの内容をオプションで拡張できる。例３５においては、命令ブロックの実行の追跡が、命令ブロックの実行におけるソフト・エラーおよびメモリ内のハード・エラーのうちの１つまたは複数を、注釈に基づいて検出することを有し、それにおいて注釈は、現在の命令ブロック内の命令の数を示す。
【０１３０】
例３６は、例３１−３５のうちのいずれかの内容をオプションで拡張できる。例３６においては、プロセッサによって使用されるリソースの修正が、プロセッサによって使用される構成要素の数を注釈に基づいて減ずることを有する。
【０１３１】
例３７は、例３１−３６のうちのいずれかの内容をオプションで拡張できる。例３７においては、命令ブロックの実行の追跡が、現在の命令からの命令が割り当てられたスレッド、プロセス、および実行コアのうちの１つまたは複数を識別すること、および命令が割り当てられたスレッド、プロセス、および実行コアのうちの当該１つまたは複数を識別するデータを用いて注釈を更新することを有する。
【０１３２】
例３８は、例３１−３７のうちのいずれかの内容をオプションで拡張できる。例３８においては、制御フロー・データを生成することが、間接分岐命令を比較命令およびジャンプ命令のうちの１つまたは複数に変換することを有する。
【０１３３】
例３９は、例３１−３８のうちのいずれかの内容をオプションで拡張できる。例３９においては、この装置がさらに、プロセッサによって使用されるリソースの修正がプロセッサの動作に影響を与えるか否かを決定するための手段、およびリソースの修正がプロセッサの動作に影響を与えないとき、プロセッサによって使用されるリソースを最適化する必要がないことを示すべく注釈を更新するための手段を有する。
【０１３４】
例４０は、例３１−３９のうちのいずれかの内容をオプションで拡張できる。例４０においては、この装置がさらに、第２の現在の命令ブロックのための第２の行き先識別子を制御フロー・データに基づいて決定するための手段、第２の現在の命令ブロックに関連付けされた第２の注釈を制御フロー・データに基づいて識別するための手段、およびプロセッサによって使用されるリソースの修正および命令ブロックの実行の追跡のうちの１つまたは複数を、第２の注釈および第２の行き先識別子のうちの１つまたは複数に基づいて遂行するための手段を有する。
【０１３５】
以上、多様な詳細に示した。しかしながら、この開示の恩典を受ける当業者には、これらの特定の詳細なしに実施態様が実施できることが明らかであろう。いくつかの例においては、説明の不明瞭化を回避するために、周知の構造およびデバイスが詳細ではなくブロック図形式で示されている。
【０１３６】
詳細な説明のいくつかの部分は、コンピュータ・メモリ内のデータ・ビットに対する動作のアルゴリズムおよび記号表現の見地から呈示されている。これらのアルゴリズムによる記述および表現は、データ処理分野の当業者によって自分たちの研究の実体をほかの当業者にもっとも効果的に伝えるために使用される手段である。アルゴリズムは、これにおいて、また一般的に、望ましい結末を導く自己矛盾のない動作のシーケンスである。動作とは、物理量の物理的な操作を必要とする働きを言う。通常はこれらの量は、必須ではないが、ストア、転送、結合、比較、およびそのほかの操作が可能な電気的または磁気的信号の形式を取る。主として常例の理由から、これらの信号をビット、値、要素、記号、文字、項、数、またはこれらの類として参照するとしばしば好都合であることが立証されている。この中で述べているブロックは、ハードウエア、ソフトウエア、ファームウエア、またはこれらの組合せとすることが可能である。
【０１３７】
しかしながらこれらの、および類似の用語のすべては適切な物理量に関連付けされるものであり、それらの量に適用される便宜上のラベルに過ぎないことを念頭に置く必要がある。特に別段の言及がない限り、上記の考察から明らかなとおり、この説明全体を通じて、『受信する』、『識別する』、『決定する』、『遂行する』、『追跡する』、『修正する』、『獲得する』、『生成する』、『検出する』、『減ずる』、『更新する』、『変換する』、またはこれらの類等の用語を使用した考察が、コンピューティング・システム、または類似の電子コンピューティング・デバイスのアクションおよびプロセス、すなわち当該コンピューティング・システムのレジスタおよびメモリ内の物理的な（例：電子的な）量として表現されるデータの、当該コンピューティング・システムのレジスタもしくはメモリまたはそのほかのその種の情報ストレージ、送信もしくは表示デバイス内の物理的な量として類似に表現されるほかのデータへの操作および変形を行なう、アクションおよびプロセスを参照するものと認識する。
【０１３８】
用語『例』または『例示』は、例、場合、または図解としての働きであることを意味するべくこの中で使用されている。この中で『例』または『例示』として述べられている態様または設計は、必ずしも好ましいとして、またはほかの態様または設計を超えて有利であるとして解釈されるべきでない。むしろ用語『例』または『例示』は、具体的な形でコンセプトを呈示するべく意図されている。この出願において使用されるときの用語『または』は、排他的な『または』ではなく包含的な『または』を意味するべく意図されている。言い換えると、別段の指定がない限り、または文脈から明らかでない限り、『ＸはＡまたはＢを含む』は、自然な包含的組合せのいずれも意味するべく意図される。すなわち、ＸがＡを含むか、ＸがＢを含むか、またはＸがＡおよびＢの両方を含むとき、これらのいずれかの場合の下において『ＸはＡまたはＢを含む』が満たされる。それに加えて、この出願および付随する特許請求の範囲の中で『ある』という修飾が使用されるか、複数であることが明示されないときは、別段の指定がないか、または文脈から単数に向けられていることが明らかでない限り、概して『１つまたは複数』を意味するべく解釈されるものとする。さらにまた、全体を通じて用語『実施態様』または『１つの実施態様』または『実装』または『１つの実装』は、同一の実施態様であることまたは実装であることを、そのように述べられていない限り、意味するべく意図されてない。また、『第１の』、『第２の』、『第３の』、『第４の』等々の用語は、この中で使用されるとき、異なる要素を区別するラベルとしての意味であり、必ずしもそれらの数的な指定に従ったオリジナルの意味を持たないことがある。
【０１３９】
この中に述べられている実施態様は、また、これにおける動作を遂行するための装置にも関係する。この装置は、必要とされる目的のために特別に構築されることもあり、またはそれがコンピュータ内にストアされるコンピュータ・プログラムによって選択的に活性化されるか、または構成される汎用コンピュータを包含することもある。その種のコンピュータ・プログラムは、限定ではないが、フロッピー（登録商標）ディスク、光ディスク、ＣＤ−ＲＯＭ、および光磁気ディスクを含む任意タイプのディスク、読出し専用メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、ＥＰＲＯＭ、ＥＥＰＲＯＭ、磁気または光カード、フラッシュ・メモリ、または電子的な命令のストアに適した任意タイプの媒体等の非一過性のコンピュータ可読ストレージ媒体にストアできる。用語『コンピュータ可読ストレージ媒体』は、１つまたは複数の命令セットをストアする単一の媒体または複数の媒体（例：集中型または分散型データベース、および／または関連キャッシュおよびサーバ）を含むと解釈されるものとする。用語『コンピュータ可読媒体』もまた、マシンによる実行のための命令のセットをストアし、符号化し、または担持する能力があり、かつマシンにこの実施態様の方法のうちの任意の１つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。したがって、用語『コンピュータ可読ストレージ媒体』は、限定ではないが、ソリッド・ステート・メモリ、光媒体、磁気媒体といったマシンによる実行のための命令のセットをストアする能力があり、かつマシンにこの実施態様の方法のうちの任意の１つまたは複数を遂行させる任意の媒体を含むとして解釈されるものとする。
【０１４０】
この中に呈示されているアルゴリズムおよび表示は、いずれかの特定のコンピュータまたはそのほかの装置と本質的に関係がない。多様な汎用システムを、この中の教示に従ったプログラムとともに使用できるか、それらの動作を遂行するより特化された装置を構築すると好都合になることがある。多様なこれらのシステムに必要とされる構造は、以下の説明から見えてくるであろう。それに加えて、これらの実施態様は、いずれかの特定のプログラミング言語を参照して述べられていない。認識されるであろうが、この中に述べられているところの実施態様の教示の実装には多様なプログラミング言語を使用できる。
【０１４１】
上記の説明は、いくつかの実施態様の良好な理解を供給するために、特定のシステム、構成要素、方法等々の例といった多くの特定の詳細を示している。しかしながら、当業者には、少なくともいくつかの実施態様がこれらの特定の詳細を伴うことなく実施できることが明らかになるであろう。その一方において、これらの実施態様を不必要に不明瞭化することを回避するために、周知の構成要素または方法が詳細に述べられていないか、単純なブロック図形式で呈示されている。したがって、上で示した特定の詳細は単なる例示に過ぎない。特定の実装は、これらの例示的な詳細から変化することが許され、それでもなお、これらの実施態様の範囲内であることが企図されている。
【０１４２】
理解されるものとするが、上記の説明は、限定ではなく例証であることが意図されている。上記の説明を読み、理解した後であれば、ほかの多くの実施態様が当業者に明らかになるであろう。したがって、これらの実施態様の範囲は、付随する特許請求の範囲に関連して、当該特許請求の範囲に権利が与えられる均等の全範囲とともに決定されるものとする。
【図１】
2014182797.tif 000003
【図２】
2014182797.tif 000004
【図３】
2014182797.tif 000005
【図４】
2014182797.tif 000006
【図５】
2014182797.tif 000007
【図６】
2014182797.tif 000008
【図７】
2014182797.tif 000009
【図８】
2014182797.tif 000010
【図９】
2014182797.tif 000011
【図１０】
2014182797.tif 000012
【図１１】
2014182797.tif 000013
【図１２】
2014182797.tif 000014
【図１３】
2014182797.tif 000015
【図１４】
2014182797.tif 000016
【図１５】
2014182797.tif 000017
【図１６】
2014182797.tif 000018
【外国語明細書】
2014182797000001.pdf