(57)【要約】  第１型のプロセッサコアと第２型の協調設計コアとを結合させる装置及び方法について記載する。プログラムコードの第１コアでの実行が監視され、プログラムコードのホット部分が特定される。このホット部分は、例えば、次に当該ホット部分に遭遇した時に、協調設計コアで実行されるように最適化されて、協調設計コアで実行される。協調設計コアが最適化されたホットコードを実行している時、第１プロセッサコアは節電のために省電力状態にあってもよいし、その他のコードを平行して実行していてもよい。更に、最大性性能を達成するべく、コールドコードの複数のスレッドを第１コア上でパイプライン処理すると同時に、ホットコードの複数のスレッドが協調設計コアでパイプライン処理されてもよい。【選択図】図１
2013532331.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコードをプログラム順でない順番で実行するアウトオブオーダ（ＯＯＯ）プロセッサコアと、
プログラム順で前記プログラムコードのホット部分を実行するインオーダプロセッサコアと
を有する集積回路を備える装置。
【請求項２】
前記集積回路は更に、
前記プログラムコードの前記ホット部分を特定する監視ハードウェアを更に有する請求項１に記載の装置。
【請求項３】
プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行を監視し、
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行の監視に基づいて、前記プログラムコードの前記ホット部分の再現パターンを判断し、
前記再現パターンに基づいて、前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項２に記載の装置。
【請求項４】
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行の監視に基づいて前記プログラムコードの前記ホット部分の再現パターンを判断する前記監視ハードウェアは、前記プログラムコードの前記ホット部分が一定期間に実行された回数を判断する前記監視ハードウェアを含み、
前記再現パターンに基づいて前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、前記回数がホットコード閾値を超えたことに応答して、前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項３に記載の装置。
【請求項５】
前記監視ハードウェアは、前記ＯＯＯプロセッサコア及び前記インオーダプロセッサコアからなる一群から選択される前記集積回路の部分、及び、前記ＯＯＯプロセッサコア又は前記インオーダプロセッサコアの何れかに含まれない前記集積回路の関連付けられていない部分に含まれる請求項３に記載の装置。
【請求項６】
プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、
前記ＯＯＯプロセッサコアでの実行の間に前記プログラムコードの前記ホット部分についての性能測定値を測定し、前記ＯＯＯプロセッサコアでの前記性能測定値が閾値を下回ったことに応答して、プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項２に記載の装置。
【請求項７】
前記監視ハードウェアは、前記インオーダプロセッサコアでの実行の間に前記プログラムコードの前記ホット部分についての性能測定値を測定し、前記インオーダプロセッサコアでの実行の間の前記プログラムコードの前記ホット部分についての前記性能測定値が、前記ＯＯＯプロセッサコアでの実行の間の前記プログラムコードの前記ホット部分についての前記性能測定値を下回ったことに応答して、プログラムコードの前記ホット部分がもはやプログラムコードのホット部分と見なされないことを示す請求項６に記載の装置。
【請求項８】
前記集積回路は、
入力値を、前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する協働ハードウェアを更に有する請求項１に記載の装置。
【請求項９】
入力値を前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する前記協働ハードウェアは、
前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへの少なくとも部分的なコンテキストの切り替えを実行するコンテキストスイッチロジックを含み、
前記少なくとも部分的なコンテキストは、少なくとも前記入力値を含む請求項８に記載の装置。
【請求項１０】
入力値を前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する前記協働ハードウェアは、
前記入力値を前記ＯＯＯプロセッサコア内のレジスタから読み出し、前記インオーダプロセッサコア内の入力レジスタへ前記入力値を書き込むダイレクトアクセスハードウェアを含む請求項８に記載の装置。
【請求項１１】
前記集積回路は、実行されると、前記インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する最適化コードを保持するコード記憶ロジックを更に有し、
前記監視ハードウェアが前記プログラムコードの前記ホット部分を特定したことに応答して、前記プログラムコードの前記ホット部分を最適化するべく、前記最適化コードが実行される請求項２に記載の装置。
【請求項１２】
前記最適化コードは、最適化マイクロコードを含み、
実行されると前記インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する前記最適化マイクロコードは、実行されると前記プログラムコードの前記ホット部分を、前記ＯＯＯプロセッサコアのデコーダによって認識される第１命令セットアーキテクチャ（ＩＳＡ）から前記インオーダプロセッサコアのデコーダによって認識される第２ＩＳＡへと変換する前記最適化マイクロコードを含む請求項１１に記載の装置。
【請求項１３】
前記インオーダプロセッサコアは、コードキャッシュと関連付けられ、
前記コードキャッシュは、前記プログラムコードの前記ホット部分を前記第１ＩＳＡから前記第２ＩＳＡへと変換した後の前記プログラムコードの第２部分の最適化バージョンを保持する請求項１２に記載の装置。
【請求項１４】
前記集積回路は更に、トリガハードウェアを有し、
前記トリガハードウェアは、
前記監視ハードウェアが前記プログラムコードの前記ホット部分を特定したことに応答して、前記プログラムコードの前記ホット部分がホットコードであると示し、
前記ＯＯＯプロセッサコアが前記プログラムコードの前記ホット部分に遭遇し、前記トリガハードウェアが前記プログラムコードの前記ホット部分がホットコードであると示したことに応答して、プログラムコードの前記ホット部分の前記インオーダプロセッサコアでの実行をトリガする請求項２に記載の装置。
【請求項１５】
前記プログラムコードの前記ホット部分がホットコードであると示す前記トリガハードウェアは、
前記インオーダプロセッサコアでの実行のために最適化された前記プログラムコードの前記ホット部分の最適化バージョンのリファレンスと関連付けられた前記プログラムコードの前記ホット部分のリファレンスを保持する前記トリガハードウェアを含む請求項１４に記載の装置。
【請求項１６】
プロセッサを備える装置であって、
前記プロセッサは、
プログラムコードを実行するアウトオブオーダコアと、
協調設計コアと、
前記プログラムコードのホット部分を特定し、最適化されたホットコードを取得するべく、前記協調設計コアに対して前記プログラムコードの前記ホット部分を最適化するコード分配モジュールと
を有し、
前記コード分配モジュールが前記プログラムコードの前記ホット部分を特定し、前記アウトオブオーダコアが前記プログラムコードの前記ホット部分の実行に遭遇したことに応答して、前記協調設計コアは、前記最適化されたホットコードを実行する装置。
【請求項１７】
前記プログラムコードの前記ホット部分を特定する前記コード分配モジュールは、
前記プログラムコードの前記ホット部分を特定するべく、前記プログラムコードからホットコード特定命令をデコードするデコードロジックを含む請求項１６に記載の装置。
【請求項１８】
前記プログラムコードの前記ホット部分を特定する前記コード分配モジュールは、前記アウトオブオーダコアでの前記プログラムコードの実行を監視し、前記アウトオブオーダコアでの前記プログラムコードの実行の前記監視から前記プログラムコードの前記ホット部分を特定する監視モジュールを含む請求項１６に記載の装置。
【請求項１９】
前記監視モジュールは、前記協調設計コア内に、監視コードを実行する実行ロジックを含み、
前記監視コードは、前記協調設計コア内の前記実行ロジックによって実行されると、前記アウトオブオーダコアでの前記プログラムコードの実行を監視し、前記プログラムコードの前記ホット部分を特定する請求項１８に記載の装置。
【請求項２０】
前記最適化されたホットコードを取得するべく、前記協調設計コアに対して前記プログラムコードの前記ホット部分を最適化する前記コード分配モジュールは、
変換コードを実行する実行ロジックを含み、
前記変換コードは、実行されると、前記最適化されたホットコードを取得するべく前記プログラムコードの前記ホット部分を変換し、
前記プログラムコードの前記ホット部分は、前記アウトオブオーダコアのデコーダが認識可能な第１命令セットアーキテクチャ（ＩＳＡ）の一部である命令を含み、
前記最適化されたホットコードは、前記協調設計コアのデコーダが認識可能な第２ＩＳＡの一部である命令を含む請求項１６に記載の装置。
【請求項２１】
前記コード分配モジュールが前記プログラムコードの前記ホット部分を特定し、前記アウトオブオーダコアが前記プログラムコードの前記ホット部分の実行に遭遇したことに応答して、前記最適化されたホットコードを実行する前記協調設計コアは、
前記アウトオブオーダコアと関連付けられたプログラムカウンタが、前記プログラムコードの前記ホット部分と関連付けられた命令アドレスを参照し、マッピングテーブルが、前記プログラムコードの前記ホット部分がホットコードであることを示すべく、前記プログラムコードの前記ホット部分と前記最適化されたホットコードとを関連付けたことに応答して、前記最適化されたホットコードを実行する前記協調設計コアを含む請求項１６に記載の装置。
【請求項２２】
前記協調設計コアと関連付けられるコードキャッシュを更に備え、
前記プログラムコードの前記ホット部分がホットコードであることを示すべく、前記プログラムコードの前記ホット部分と前記最適化されたホットコードとを関連付ける前記マッピングテーブルは、
前記プログラムコードの前記ホット部分のリファレンス及び前記最適化されたホットコードのリファレンスを保持する前記マッピングテーブルのエントリを含み、
前記最適化されたホットコードの前記リファレンスは、前記コードキャッシュ内の前記最適化されたホットコードのロケーションのリファレンスを含む請求項２１に記載の装置。
【請求項２３】
前記プロセッサは、ランダムアクセスメモリ（ＲＡＭ）、ダブルデータレート（ＤＤＲ）ＲＡＭ及びバッファＲＡＭからなる一群から選択されるシステムメモリに接続され、
前記システムメモリは、前記プログラムコードを保持する請求項１６に記載の装置。
【請求項２４】
第１命令セットアーキテクチャ（ＩＳＡ）型を認識するデコードロジックと関連付けられる第１コアと、
第２命令セットアーキテクチャ（ＩＳＡ）型を認識するデコードロジックと関連付けられる第２コアと、
前記第１ＩＳＡ型のプログラムコードの前記第１コアでの実行を監視し、前記プログラムコードのホット領域を特定する監視モジュールと、
前記プログラムコードの変換されたホット領域を取得するべく、前記プログラムコードの前記ホット領域を前記第１ＩＳＡ型から前記第２ＩＳＡ型へと変換する変換モジュールと
を備え、
前記第１コアが前記プログラムコードの前記ホット領域に遭遇し、前記監視モジュールが前記プログラムコードの前記ホット領域を特定したことに応答して、前記第２コアが前記プログラムコードの前記変換されたホット領域を実行するプロセッサ。
【請求項２５】
前記監視モジュールは、実行されると、前記第１コアでのプログラムコードの実行を監視し、前記プログラムコードのホット領域を特定する監視コードを有し、
前記変換モジュールは、実行されると、前記プログラムコードの前記変換されたホット領域を取得するべく、前記第１コアでの前記プログラムコードの実行と少なくとも部分的に平行して、前記プログラムコードの前記ホット領域を変換する変換コードを有する請求項２４に記載の装置。
【請求項２６】
前記監視モジュールは、前記第１コアでのプログラムコードの実行を監視し、前記プログラムコードのホット領域を特定する監視ハードウェアを含む請求項２４に記載の装置。
【請求項２７】
前記監視モジュールが、前記第１コアでの前記プログラムコードの実行を監視し、前記プログラムコードの前記ホット領域を特定する間は、前記第２コアは低電力状態におかれ、
前記第２コアが、前記プログラムコードの前記変換されたホット領域を実行する間は、前記第１コアは低電力状態におかれる請求項２４に記載の装置。
【請求項２８】
前記第２コアが前記プログラムコードの前記変換されたホット領域を実行するのと平行して、前記第１コアは、前記プログラムコードのコールド領域を実行する請求項２４に記載の装置。
【請求項２９】
前記第１コア及び前記第２コアは、同時に最大電力状態で動作しない請求項２４に記載の装置。
【請求項３０】
コードを備える機械可読媒体であって、
前記コードは機械によって実行されると、
前記機械のプロセッサ内のアウトオブオーダ・プロセッサコアでのプログラムコードの実行を監視する段階と、
前記プログラムコードのホット部分を特定する段階と、
前記プログラムコードの最適化されたホット部分を取得するべく、前記機械内の協調設計プロセッサコアでの実行のために、前記プログラムコードの前記ホット部分を最適化する段階と、
前記プログラムコードの前記最適化されたホット部分を前記協調設計プロセッサコアに分配する段階と、
前記協調設計プロセッサコアで、前記プログラムコードの前記最適化されたホット部分を実行する段階と
を前記機械に実行させる機械可読媒体。
【請求項３１】
前記アウトオブオーダ・プロセッサコアでのプログラムコードの実行を監視する段階は、前記プログラムコードの部分と関連付けられた性能測定値を決定する段階を含む請求項３５に記載の機械可読媒体。
【請求項３２】
前記プログラムコードのホット部分を特定する段階は、
前記性能測定値と性能閾値との比較に基づいて、前記プログラムコードの前記部分を前記プログラムコードのホット部分であると判断する段階を含む請求項３１に記載の機械可読媒体。
【請求項３３】
前記協調設計プロセッサコアでの実行のために、前記プログラムコードの前記ホット部分を最適化する段階は、
前記プログラムコードの前記ホット部分を、前記アウトオブオーダ・プロセッサコアと関連付けられたデコードロジックが認識可能なネイティブ命令から、前記協調設計プロセッサコアと関連付けられたデコードロジックが認識可能な協調設計命令へと変換する段階を含む請求項３５に記載の機械可読媒体。
【請求項３４】
前記プログラムコードの前記最適化されたホット部分を前記協調設計プロセッサコアに分配する段階は、
前記プログラムコードの前記最適化されたホット部分を、前記協調設計プロセッサコアと関連付けられたコードキャッシュに書き込む段階を含む請求項３５に記載の機械可読媒体。
【請求項３５】
コードを備える機械可読媒体であって、
前記コードは機械によって実行されると、
前記機械の第１プロセッサコアに対して最適化された第１コード型を含むプログラムコードの領域がホットコードとして特定されたことに応答して、プログラムコードの前記領域を変換されたホット領域と関連付ける段階と、
前記プログラムコードの前記第１プロセッサコアでの実行の間に前記プログラムコードの前記領域に遭遇した場合に、前記プログラムコードの前記領域が前記変換されたホット領域と関連付けられていることに応答して、前記変換されたホット領域を第２プロセッサコアで実行する段階と
を前記機械に実行させ、
前記変換されたホット領域は、前記第１コード型から、前記機械の前記第２プロセッサコアに対して最適化される第２コード型へと変換されたプログラムコードの前記領域を含む機械可読媒体。
【請求項３６】
前記第１プロセッサコアは、アウトオブオーダ・プロセッサコアを含み、
前記第１コード型は、前記アウトオブオーダ・プロセッサコアに対して最適化されたアウトオブオーダコード型を含み、
前記第２プロセッサコアは、インオーダプロセッサコアを含み、
前記第２コード型は、前記インオーダプロセッサコアに対して最適化されたインオーダ型を含む請求項３５に記載の機械可読媒体。
【請求項３７】
前記アウトオブオーダ・プロセッサコアは、第１命令セットアーキテクチャ（ＩＳＡ）を認識するデコードロジックと関連付けられ、
前記第１コード型は更に、前記第１ＩＳＡに対して最適化され、
前記インオーダプロセッサコアは、第２ＩＳＡを認識するデコードロジックと関連付けられ、
前記第２コード型は更に、前記第２ＩＳＡに対して最適化される請求項３６に記載の機械可読媒体。
【請求項３８】
前記プログラムコードの前記領域がホットコードとして特定されることは、
前記第１プロセッサコアと関連付けられたデコードロジックが、前記プログラムコードから少なくとも１つの命令をデコードして、プログラムコードの前記領域をホットコードであると示すことを含む請求項３５に記載の機械可読媒体。
【請求項３９】
前記プログラムコードの前記領域がホットコードとして特定されることは、
前記機械内のハードウェアが、前記第１プロセッサコアでの前記プログラムコードの前記領域の実行を監視し、前記ハードウェアによる前記第１プロセッサコアでの前記プログラムコードの前記領域の実行の監視に基づいて、プログラムコードの前記領域がホットコードであると特定することを含む請求項３５に記載の機械可読媒体。
【請求項４０】
前記プログラムコードの前記領域を変換されたホット領域と関連付ける段階は、
前記変換されたホット領域のリファレンスと関連付けられた前記プログラムコードの前記領域のリファレンスで、データ構造内のエントリを更新する段階を含み、
前記プログラムコードの前記領域の前記リファレンス及び前記変換されたホット領域の前記リファレンスはそれぞれ独立して、アドレス、命令アドレス、キャッシュメモリ内のロケーション、プログラムカウンタ値及び命令オペコードからなる一群から選択される請求項３５に記載の機械可読媒体。
【請求項４１】
前記プログラムコードの前記第１プロセッサコアでの実行の間に、プログラムコードの前記領域に遭遇し、プログラムコードの前記領域が前記変換されたホット領域と関連付けられていることに応答して、前記第２プロセッサコアが前記変換されたホット領域を実行している間は、前記第１プロセッサコアを低電力状態に遷移させる請求項３５に記載の機械可読媒体。
【請求項４２】
プログラムコードのホット部分を特定する段階と、
前記プログラムコードの最適化されたホット部分を取得するべく、インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する段階と、
プロセッサのアウトオブオーダ・プロセッサコアで前記プログラムコードを実行する段階と、
前記アウトオブオーダ・プロセッサコアでの前記プログラムコードの実行の間に前記アウトオブオーダ・プロセッサコアが前記プログラムコードの前記ホット部分に遭遇し、プログラムコードの前記ホット部分が特定されたことに応答して、前記プログラムコードの前記ホット部分を前記アウトオブオーダ・プロセッサコアで実行するのではなく、前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行する段階と
を備える方法。
【請求項４３】
前記プログラムコードの前記ホット部分と、前記プログラムコードの前記最適化されたホット部分とを関連付ける段階を更に備える請求項４２に記載の方法。
【請求項４４】
前記プログラムコードの前記ホット部分と、前記プログラムコードの前記最適化されたホット部分とを関連付ける段階は、
前記プログラムコードの前記ホット部分のリファレンス及び前記最適化されたホット部分のリファレンスを、コードマッピングテーブルのエントリに格納する段階を含む請求項４３に記載の方法。
【請求項４５】
前記プログラムコードのホット部分を特定する段階は、
前記プログラムコードの部分を前記アウトオブオーダ・プロセッサコアで実行する間に、性能測定値を監視する段階と、
前記性能測定値と性能閾値との比較に基づいて、前記プログラムコードの前記部分をプログラムコードの前記ホット部分として特定する段階とを含む請求項４２に記載の方法。
【請求項４６】
前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行する間に前記性能測定値を監視する段階と、
前記プログラムコードの前記最適化されたホット部分の前記インオーダプロセッサコアでの実行の間の前記性能測定値が、前記アウトオブオーダ・プロセッサコアでの前記プログラムコードの部分の実行の間の前記性能測定値を下回る性能を示したことに応答して、前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行するのではなく、プログラムコードの前記ホット部分を前記アウトオブオーダ・プロセッサコアで実行することを示す段階と
を更に備える請求項４５に記載の方法。
【請求項４７】
前記プログラムコードの最適化されたホット部分を取得するべく、前記プログラムコードの前記ホット部分を、インオーダプロセッサコアでの実行のために最適化する段階は、
前記プログラムコードを前記プログラムコードの前記最適化されたホット部分へと変換するべく、バイナリ変換コードを実行する段階を含む請求項４２に記載の方法。
【請求項４８】
前記機械によって実行されると、前記機械に請求項４２に記載の段階を実行させるコードを備える機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサの分野に関し、特に、電力、性能効率を最適化することに関する。
【背景技術】
【０００２】
半導体プロセス及びロジック設計の技術の発展に伴い、多数の論理回路を集積回路デバイスに組み込むことができるようになってきた。その結果、コンピュータシステム構成は、１つのシステムに１つのＩＣ又は複数のＩＣが設けられていた構成から、複数のコア、複数のハードウェアスレッド及び複数の論理プロセッサが個々のＩＣに搭載される構成へと進化を遂げた。典型的なプロセッサ又はＩＣは、１つの物理プロセッサダイを含み、プロセッサダイは、１つ以上のコア、ハードウェアスレッド又は論理プロセッサを含む。
【０００３】
コア、ハードウェアスレッド及び論理プロセッサといったプロセッサの構成要素が数多くＩＣに設けられるようになり、より多くのタスクを平行して処理できるようになった。しかしながら、全てアウトオブオーダ・プロセッサコアを採用しているプロセッサでは、ある条件下で、電力不足及び／又はパフォーマンス不足が生じる。そこで、電力−性能効率問題に対処するべく、ハードウェア−ソフトウェア協調設計（co-designed）システムが開発されている。このシステムでは、広い、単純な、インオーダプロセッサが利用されると同時に、ソフトウェアは、インオーダハードウェアを効率的に実行するプログラムを最適化及びスケジュールする。ハードウェア−ソフトウェア協調設計システムは、典型的に２つの負の影響を伴う。（１）バイナリトランスレータを使用したコードの変換及び／又は最適化により、短いタスク及び短い応答時間制限を有するアプリケーションの一部を遅くする（binary translation glassjaw：バイナリ変換脆弱性）（２）並行実行により適したプログラムの一部の種類にはインオーダプロセッサのパフォーマンスが良好でない（in-order glassjaw：インオーダ脆弱性）。
【０００４】
バイナリ変換（ＢＴ）脆弱性の問題を例示するために、マイクロソフトＥｘｃｅｌアプリケーションを実行する場合の典型的なプロファイルの一例について説明する。１００億のダイナミックｘ８６命令が実行される場合、ダイナミック命令のうちの２３％が、繰り返しの回数が１０万回未満の静的命令からであり、これは、コールドコード（cold code）とも呼ばれる場合がある。バイナリ変換ソフトウェア（変換／解釈の典型的なオーバーヘッド、及び、最適化を伴う性能ゲインが含まれる）を使用して、このようなｘ８６命令が解釈及び変換される場合、コールドコードは、元のｘ８６の実行の約３．６倍の量の命令を占めることとなる。そして、変換には、１０Ｂ命令全体で、１．４倍の量の命令が実行される。実行されるコードの約２５％がコールドコードであることを考えると、平均して、変換オーバーヘッドにより、コールドコードの実行が４．４倍遅くなると予想される。その結果、元の実行と比較して、全体の実行が１．７倍遅くなる。
【０００５】
インオーダ脆弱性を例示するべく、ベンチマークシミュレーションの間のインオーダプロセッサの性能とアウトオブオーダプロセッサの性能とを比較した一例について説明する。同様に装備がなされたインオーダ及びアウトオブオーダ（ＯＯＯ）プロセッサにおいて、複数のプログラムのシミュレーションを行った。その結果、ＯＯＯプロセッサでは、複数のプログラムのうち約４０％を超えるプログラムが１．５７倍速く実行され、インオーダプロセッサでは、複数のプログラムのうち約４０％のプログラムが１．４５倍速く実行された。このシミュレーションは純粋に一例に過ぎず、結果が異なる場合も考えられるが、両システムが、潜在的な電力不足及び／又は性能不足を内在していることを示している。
【０００６】
以下、本発明を説明するが、本発明を例示的に説明するものであり、添付の図面によって本発明は限定されない。
【図面の簡単な説明】
【０００７】
【図１】２つの非対称コアを含むプロセッサの一実施形態を示した図である。
【図２】ネイティブコア、ソフトウェア管理コード、及び、コード分配モジュールを含むプロセッサの一実施形態を示した図である。
【図３】最大性能及び最大省電力を達成するべく、複数のコアにコードを分配するプロセッサの一実施形態を示した図である。
【図４】最大性能及び最大省電力を達成するべく、アウトオブオーダコア及びインオーダコアの間でコードを分配する方法を示したフローチャートの一実施形態を示した図である。
【図５】最大性能及び最大省電力を達成するべく、アウトオブオーダコア及びインオーダコアの間でコードを分配する方法を示したフローチャートの別の実施形態を示した図である。
【発明を実施するための形態】
【０００８】
以下、特定の種類のプロセッサコア、特定のプロセッサ構成、特定のホットコード領域特定アルゴリズム、変換済／最適化済コードを格納する特定の構造、ハードウェア／ソフトウェア間の特定のタスク分配、特定のプロセッサユニット／ロジック等の例を含め特定の詳細事項が記載されるが、これらは、本発明の深い理解を提供するためのものである。しかしながら、これらの特定の詳細事項を採用しなくとも、本発明を実行可能であることは、当業者にとって明らかである。また、特定の及び代替のプロセッサアーキテクチャ、説明するアルゴリズムに対する特定の論理回路／コード、特定のコード実装、特定のバイナリ変換詳細、及び、その他のマイクロプロセッサの特定のオペレーションの詳細等、よく知られている要素又は方法については、本発明を不明瞭にすることを防ぐため、記載を省略する。
【０００９】
本明細書に記載する方法及び装置は、最大の性能及び省電力を達成するべく、ソフトウェア管理コアを有するネイティブコアを実装する。特に、コア間の協動について、アウトオブオーダコア及びインオーダ協調設計コアを参照して説明する。しかしながら、本明細書に記載される装置及び方法はこれに限定されることなく、非対称コア間のコードの任意の分布に実装することが可能である。例えば、以下に説明されるコード分配方法及び装置は、固有の命令セットアーキテクチャ（ＩＳＡ）を実装する２つのアウトオブオーダコアを利用してもよい。更に、このようなコア間の協動について、ハードウェアメカニズム及びコード／ソフトウェアに分けて説明がなされる。しかしながら、ハードウェア、ソフトウェア、及び／又はファームウェアを混合して又は専用として利用して、以下に説明する方法及び装置を実装してもよい。
【００１０】
図１は、フクスウノコアを含むプロセッサの一実施形態を示したものである。プロセッサ１００は、どのようなプロセッサであってもよく、例えば、マイクロプロセッサ、組み込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、ネットワークプロセッサ、又は、コードを実行する他のデバイスであってもよい。一実施形態において、プロセッサ１００は、少なくとも２つのコア、異なる種類のコア１０１及びコア１０２を含む。しかしながら、プロセッサ１００は、任意の数の処理要素を含んでもよい。
【００１１】
一実施形態において、処理要素とは、スレッドユニット、スレッドスロット、プロセスユニット、コンテキスト、論理プロセッサ、ハードウェアスレッド、コア、及び／又は、実行状態又はアーキテクチャ状態のようなプロセッサの状態を保持可能なその他の要素のことを指す。すなわち、一実施形態では、処理要素は、ソフトウェアスレッドのようなコード、ＯＳ、アプリケーション又はその他のコードに独立して関連付け可能なあらゆるハードウェアを指す。物理的プロセッサとは、典型的には、コア又はハードウェアスレッド等の他の処理要素を１以上含む集積回路（ＩＣ）のことを指す。
【００１２】
コアとは、多くの場合、少なくとも幾つかの専用実行リソースと関連付けられたアーキテクチャの状態がそれぞれ独立して保持される独立アーキテクチャ状態を保持可能なＩＣに位置する論理を指す。一方、ハードウェアスレッドとは、コアとは異なり、典型的には、独立して保持されている複数のアーキテクチャ状態が実行リソースへのアクセスを共有する独立アーキテクチャ状態を保持可能であってＩＣに位置する論理を指す。このように、あるリソースは共有され、他のリソースは１つのアーキテクチャ状態に占有されている場合には、ハードウェアスレッド及びコアという命名の境界線が重複することとなる。しかしながら、やはりコアとハードウェアとは、ＯＳから見れば個々の論理プロセッサであり、ＯＳは、各論理プロセッサに対して独立してオペレーションをスケジュールすることができる。
【００１３】
図１に示すように、物理プロセッサ１００は、２つのコア、コア１０１及びコア１０２を含む。ここで、コア１０１及び１０２は、非対称コアであると見なされる、すなわち、異なる構成、機能ユニット及び／又はロジックを有する。一実施形態において、コア１０１は、アウトオブオーダ・プロセッサコアを含み、コア１０２は、インオーダプロセッサコアを含む。しかしながら、コア１０１及び１０２は、任意の種類のコアから独立して選択可能であり、例えば、ネイティブコア、ソフトウェア管理コア、ネイティブ命令セットアーキテクチャ（ＩＳＡ）、変換命令セットアーキテクチャ（ＩＳＡ）を実行するのに適用されるコア、協調設計コア、又は、その他の周知のコアから選択可能である。以下に、図１に示された機能ユニットについて更に説明する。
【００１４】
図に示すように、コア１０１は、２つのハードウェアスレッド１０１ａ及び１０１ｂを含み、これらは、スレッドスロット１０１ａ及び１０１ｂとも称される。これに対して、コア１０２は、１つのハードウェアスレッド１０２ａを含む。したがって、ＯＳのようなソフトウェア実体は、一実施形態において、プロセッサ１００を３つの別個のプロセッサとして見なすこともできる、すなわち、３つのソフトウェアスレッドを並列に実行可能な３つの論理プロセッサ又は処理要素として見なすことができる。これに替えて、ソフトウェア実体は、プロセッサ１００が２つの別個のプロセッサを有する、すなわち、スレッドスロット１０１ａ及び１０１ｂを有し、以下に説明するコード分配メカニズムが、コア１０２上でのコードの実行を管理すると見なしてもよい。
【００１５】
第１のスレッドは、複数のアーキテクチャ状態レジスタ１０１ａと関連付けられており、第２のスレッドは、複数のアーキテクチャ状態レジスタ１０１ｂと関連付けられており、第３のスレッドは、複数のアーキテクチャ状態レジスタ１０２ａと関連付けられている。図に示すように、複数のアーキテクチャ状態レジスタ１０１ａは、複数のアーキテクチャ状態１０１ｂに複製されており、個々のアーキテクチャ状態／コンテキストは、論理プロセッサ１０１ａ及び論理プロセッサ１０１ｂに記憶可能である。アーキテクチャ状態レジスタ１０２ａは、レジスタ１０１ａ、１０１ｂと同じであってもよい。又は、レジスタ１０２ａは、コア１０２のアーキテクチャに固有のものであってもよい。コア１０１において、命令ポインタ及びリネーム割り当てロジック１３０におけるリネームロジックのようなその他の小さなリソースも、スレッド１０１ａ及びスレッド１０１ｂについて複製されていてもよい。並べ替え（ｒｅ‐ｏｒｄｅｒ）／リタイアメントユニット１３５における並び換えバッファ、ＩＬＴＢ１２０、読み出し／記憶バッファ及びキューのようなリソースは、領域割り当てを通じて共有されていてもよい。汎用内部レジスタ、ページ‐テーブルベースレジスタ、下位層データキャッシュ及びデータ‐ＴＬＢ１１５、１以上の実行ユニット１４０、及びアウト・オブ・オーダーユニット１３５の部分のような他のリソースについては、完全に共有されていてもよい。
【００１６】
プロセッサ１００は、多くの場合、完全に共有されている、領域割り当てを通じて共有されている、若しくは、処理要素について占有の又は占有されている複数の他のリソースを含む。図１には、１つのプロセッサの複数の論理ユニット／リソースを持つプロセッサの一例が示されている。プロセッサは、例示されている複数の機能ユニットのうち、幾つかを含んでもよいし、又は省略してもよく、図示しない他の既知の機能ユニット、論理又はファームウェアを含んでもよい。図に示すように、コア１０１は、単純化されたアウトオブオーダ（ＯＯＯ）プロセッサコアとして例示されている。ＯＯＯコアは、実行される／選択される分岐先を予測する分岐先バッファ（Ｂｒａｎｃｈ  Ｔａｒｇｅｔ  Ｂｕｆｆｅｒ：ＢＴＢ）１２０、及び、命令についてのアドレス変換エントリを記憶する命令変換バッファ（Ｉ‐ＴＬＢ）１２０を含む。
【００１７】
コア１０１は、フェッチユニット１２０に接続され、フェッチした要素をデコードするデコードモジュール１２５を更に含む。一実施形態において、フェッチロジックは、それぞれスレッド１０１ａ、１０１ｂと関連付けられた個別のシーケンサを含む。通常、コア１０１は、プロセッサ１００で実行可能な命令を規定／特定する第１の命令セットアーキテクチャ（ＩＳＡ）と関連付けられている。ここで、第１のＩＳＡの一部分である機械コード命令は、一般的に、実行すべき命令又はオペレーションを参照する／特定する命令（ｏｐｃｏｄｅと称される）の一部分を含む。デコードロジック１２５は、ｏｐｃｏｄｅから命令を認識する回路を含み、デコードされた命令をパイプラインで受け渡して、第１のＩＳＡで規定されるように処理する。
【００１８】
一例として、割り当て及びリネームブロック１３０は、命令処理結果を記憶するレジスタファイルのようなリソースをリザーブする割り当て部を含む。しかしながら、スレッド１０１ａ及び１０１ｂは、アウトオブオーダ実行を行う能力を備え、割り当て及びリネームブロック１３０は、命令結果を追跡する並び替えバッファのような他のリソースをリザーブする。ユニット１３０は、プログラム／命令参照レジスタを、プロセッサ１００の他の内部レジスタにリネームするレジスタリネーマーを含んでもよい。並べ替え／リタイアメントユニット１３５は、アウトオブオーダ実行及びアウトオブオーダで実行される順番が最後の方の命令のリタイアメントをサポートするために、上述のような並び換えバッファ、ロードバッファ、及び、記憶バッファのような要素を含んでもよい。
【００１９】
ある実施形態では、スケジューラ及び実行ユニットブロック１４０は、実行ユニットに対して命令／オペレーションをスケジューリングするスケジューラユニットを含んでもよい。例えば、浮動小数点命令は、利用可能な浮動小数点実行ユニットを持つ実行ユニットのポートにスケジュールされる。また、情報命令処理結果を記憶するために、実行ユニットに関連付けられたレジスタファイルが含まれている。実行ユニットの例としては、浮動少数点実行ユニット、整数実行ユニット、ジャンプ実行ユニット、ロード実行ユニット、記憶実行ユニット、及びその他の既知の実行ユニットが挙げられる。
【００２０】
下位層データキャッシュ及びデータ変換バッファ（Ｄ‐ＴＬＢ）１５０は、実行ユニット１４０に接続されている。データキャッシュは、メモリコヒーレンシ状態で保持されているデータオペランドのような最近利用／処理されたものを、要素に記憶する。Ｄ‐ＴＬＢは、最近の仮想／線形アドレス−物理アドレス間の変換を記憶する。特別な例として、プロセッサは、物理メモリを複数の仮想ページに分割するためのページテーブル構造を持つとしてよい。
【００２１】
上記したように、一実施形態では、コア１０２は、インオーダ協調設計コアを含む。その結果、図１には、インオーダコアの簡単なパイプラインが示されている。このパイプラインは、フェッチユニット１２１、デコードユニット１２６、実行ユニット１４１、及び、下層データキャッシュ１５１を含む。これらのユニットは、コア１０１における対応するユニットと同様に動作してもよい。しかしながら、インオーダコアでは、命令／オペレーションは、コア１０１のようにアウトオブオーダ実行で実行されるのではなく、プログラムのオーダーで実行される。一例として、アウトオブオーダコア１０１は、ネイティブコアと称され、インオーダコア１０２は、協調設計コアと称される。これに替えて、インオーダコア１０２がネイティブコアで、アウトオブオーダコア１０１が協調設計コアであってもよい。
【００２２】
ここで、コア１０１及びコア１０２は、上位層に位置する又はより離れたところに位置し、最近フェッチされた要素をキャッシュするキャッシュ１１０へのアクセスを共有する。ここで、上位層又はより離れた位置とは、キャッシュレベルがより高い又は実行ユニットからより離れていることを指す。一実施形態では、上位層キャッシュ１１０は、Ｌ２又はＬ３データキャッシュのような、プロセッサ１００におけるメモリ階層構造において最も下層に位置するキャッシュ、すなわちラストレベルデータキャッシュである。しかしながら、上位層キャッシュ１１０は、これに限定されることなく、命令キャッシュに関連付けられていても、命令キャッシュを含んでもよい。替わりに、命令キャッシュの一種であるトレースキャッシュを、デコーダ１２５の後に連結して、最近デコードされたトレースを記憶してもよい。
【００２３】
図示されている構成では、プロセッサ１００は、プロセッサ１００外部のデバイス、例えば、システムメモリ１７５、チップセット、ノースブリッジ、又は、その他のＩＣとの間で通信を行うためのバスインターフェースモジュール１０５を含む。メモリ１７５は、プロセッサ１００専用としてもよいし、システム内の他のデバイスと共有するとしてもよい。メモリ１７５の種類の一般的な例としては、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、不揮発性メモリ（ＮＶメモリ）、及び、その他の周知の記憶デバイスが挙げられる。
【００２４】
一実施形態において、性能を最大にし、省電力を最高にするべく、コードが、コア１０１及びコア１０２の間で分配される。例えば、コード領域は、２つのコア１０１、コア１０２のうちの一方で良好に実行されるように特定される。その結果、このようなコード領域のうちの１つに遭遇／検出されると、そのコード部分が、適切なコアに分配される。このような領域の特定は、静的に（プログラムプロファイル解析のようなコードの実行の前に）又は動的に（コードの実行の間に）ハードウェア、ソフトウェア又はこれらの組み合わせによって行われてもよい。
【００２５】
動的に行う方法の一例として、コア１０１のような１つのプロセッサコアを初期設定コアとして選択して、性能、省電力、ネイティブＩＳＡ、その他の周知の処理条件又はこれらの組み合わせに基づいて、コードを実行する。そして、コア１０１上で実行が望ましくなかった初期設定コードの領域、又は、コア１０２上で良好に実行される初期設定コードの領域が特定される。特定されたコード部分に順次遭遇すると、これらが実行のためにコア１０２に割り当てられる。これらの領域のコア１０２上での実行は、コア１０１をウォームアップするための投機的な先行実行、これらの領域からの結果に依存するコア１０１のその他の領域の実行とシリアルなコア１０２上でのこれら領域の実行、又は、コア１０２上でのその他のコードの実行と平行及び並列なこれらの領域の実行を含んでもよい。
【００２６】
静的に行う方法の一例として、コンパイラ又はユーザは、一のコア又は他のコアにおいて良好に実行される命令又は境界線（demarcation）のような、コード部分を特定してもよい。ここで、コア１０１は、このような命令に遭遇するまでコードを実行する。コア１０２からの監視に応答して、又は、コア１０２単独のイニシアチブ（トリガ）により、遭遇した命令に基づいて、特定されたコード部分がコア１０２上で実行される。
【００２７】
コード部分の特定が動的に実行される又は静的に実行されるかに関わらず、ある実施形態では、一のコア又は別のコアで良好に実行させるべく、ネイティブコードは、別のコアで実行されるように変換及び／又は最適化される。例えば、コア１０１が第１のＩＳＡ型を認識するデコードロジック１２５を含むと仮定すると、コア１０２は、第２のＩＳＡ型を認識するデコードロジック１２６を含む。この場合、第１のＩＳＡ型のコード領域がコア１０２で実行されるとすると、このコード領域は、コア１０２で実行されるべく第２のＩＳＡ型に変換される。ここで、ＩＳＡ型間の変換は、一例に過ぎない。これに替えて、コア１０１で実行されるアウトオブオーダ最適化コードを、インオーダコア１０２の実行のために再最適化してもよい。このシナリオの場合、コア１０２は、コア１０１と同じＩＳＡ又はそのサブセットを含んでもよい。単純であり幅の広いインオーダコアでより効率的に実行されるようにコードに対して最適化が行われる。
【００２８】
コードを効率よく分配するためのコア１０１とコア１０２との間の協働は、ハードウェア、ファームウェア、ソフトウェア又はこれらの組み合わせに実装されてもよい。協働（collaboration）メカニズムの実施形態を例示するべく、コード領域を特定する動的な方法に関しての上記の例について、更に以下に説明する。上記の例では、ネイティブフォーマットのプログラムコードは、アウトオブオーダコア１０１で実行されるように最適化される。コード領域又はプログラムコードの実行の間に、コア１０１及び／又はコア１０２と関連付けられた監視ハードウェアを利用して、コア１０１によるコア領域の実行に関する性能を判断してもよい。これに替えて、ソフトウェア、ＯＳコード、マイクロコード、又は、その他のコードのようなコードをコア１０２で実行して、コード領域を実行する際のコア１０１の性能を判断／監視してもよい。コード領域がコア１０２上で実行した方が良好であると判断された場合には、ハードウェア、ソフトウェア、ファームウェア、又は、これらの組み合わせを使用して、コア１０２上で実行するべきコード領域を変換及び／又は最適化してもよい。
【００２９】
その結果、コア１０１が再びそのコード領域に遭遇した場合、命令ポインタはそのコード領域を参照し、そのコード領域を特定する特定命令がフェッチ又はデコードされて、又は、別のコード領域を特定する別の方法が検出されて、コード領域の変換された／最適化されたバージョンが、コア１０２上で実行される。一実施形態において、コア１０２がコード領域を実行する間、コア１０１は、全体のプログラム実行性能を向上させるべく、並行してその他のコード領域を実行してもよい。並行又は平行実行は、コア１０１、１０２上で別個のソフトウェアスレッドを複数実行することを含んでもよい。
【００３０】
反対に、複数のスレッドが、コア１０１、１０２上でパイプライン処理されてもよい。このシナリオの一例として、２つのソフトウェアスレッドの各々が、コードの複数のステージ（ホット、コールド等）を有すると仮定する。第１スレッドからのコールドコードがコア１０１で実行されて、ホット領域が発生した場合には、変換されたホット領域がコア１０２で実行される。変換されたホット領域のコードがコア１０２で実行される間、第２スレッドからのコールドコードが、コア１０１で実行されてもよい。コア１０２では、第１の変換されたホットコードの実行が完了した時に、第２ソフトウェアスレッドからの別のホット領域が実行されてもよい。この例から分かるように、コードの複数のステージは、各コアに対してインターリーブされてもよく、それにより、パイプライン型の実行となる。別の実施形態では、２つのコアについて、コードが順次実行されてもよい。例えば、コア１０１上のコード領域を実行し、特定されたコード領域をコア１０２で実行し、次に、コア１０１上の別の領域を実行するといったように実行してもよい。
【００３１】
また、最初に、コア１０２で実行されるコード領域が特定された場合であっても、その実行の性能が監視されてもよい。両方のコアにおける性能を考慮して、最大の性能及び省電力を達成するのに、どちらのコアがコード領域を実行するのに適しているか判断する。例えば、コア１０２上の変換済みコードとして実行されるべきコード領域が特定されたが、コア１０２の性能がコア１０１の性能を下回っている場合（又は、コア１０２の性能ゲインがコア２０１上での実行の省電力の効果を上回っていない場合）には、次の遭遇時に、コードがコア１０１に再割り当てされてもよい。
【００３２】
図１には、異なるモジュール、ユニット及び／又ロジックに代表されるプロセッサの例を論理的に大まかに示したものである。本明細書に記載される方法及び装置を利用するプロセッサは、ここに例示されたユニットを全て含む必要はない。また、プロセッサは、図示されたユニットの幾つか又は全てを省略してもよい。更に、上記の説明の大部分は、アウトオブオーダ・プロセッサコア及びインオーダプロセッサコアを参照してなされた。しかしながら、上記したように、２つのプロセッサコアは、非対称コアの任意のバージョンであってもよく、例えば、ネイティブコアとソフトウェア管理コアであってもよい。加えて、図１には２つのコアのみが描かれているが、プロセッサは任意の数のコアを含んでもよく、例えば、同じ種類の複数のコア、及び、異なる種類の３つ以上のコアを含んでもよい。
【００３３】
また、図１では、外部メモリコントローラ（コントローラハブ１７０）のインターフェースとポイント・ツー・ポイントの態様で接続されているプロセッサの実施形態が示されている。しかしながら、現在の多くのプロセッサは、複数のコア、並びに、共有キャッシュ及びその他のインターフェースと接続するべく環状配置を有するオンプロセッサメモリインターフェースモジュール、オンチップモジュールを含む。また、図示されていないが、一実施形態において、プロセッサ１００は、リング相互接続結合コア、キャッシュ、及び、メモリコントローラ構成要素を含む。
【００３４】
キャッシング・エージェントは、物理的に分配されたキャッシュのスライスを管理する。一例として、キャッシュ要素はそれぞれ、並べて配置されたコアに対するキャッシュのスライス、すなわち分配されたキャッシュのスライスを管理するためにキャッシュエージェントと関連付けられているコアに対するキャッシュのスライスを管理する。キャッシュエージェントが、リング接続のトラフィック及びキャッシュスライスとのインターフェースを取り扱うのと同様、コアエージェント／要素は、トラフィック及びコアとのインターフェースを取り扱う。また、メモリ及び／又はグラフィックスプロセッサのようなその他のモジュールとインターフェースするべく、リング接続は、メモリコントローラインターフェースロジック（ＭＣＩＬ）及び／又はその他のコントローラと接続を行ってもよい。
【００３５】
図２には、２つのコア間でコードを分配するコード分配モジュールの一実施形態が示されている。一実施形態において、コア２０１、２０２は、非対称コアである。例えば、コア２０１は、元のプログラム順番に従わないアウトオブオーダ（ＯＯＯ）コアであり、コア２０２は、プログラムの順番でコードを実行するインオーダコア（又はシリアルコア）である。その他のコアの種類として、全て列挙されているわけではないが、ネイティブコア、非ネイティブコア、ソフトウェア管理コア、ネイティブＩＳＡコア、変換ＩＳＡコア、協調設計コア、投機実行コア及び非投機実行コアが挙げられる。
【００３６】
一実施形態において、コア分配モジュール２１０は、性能及び省電力を最大化するように、コア２０１とコア２０２とにコードを分配する。本明細書で使用されるモジュールという言葉は、ハードウェア、ファームウェア、又は、これらの組み合わせを意味する。また、モジュール、ユニット又はロジックは、コア又はプロセッサの中央に配置されてもよいし、全体に分配されていてもよい。例えば、コード分配モジュール２１０は、マイクロコード又はソフトウェアのような分配コードを、コア２０１、コア２０２、プロセッサ２００、又は、プロセッサ２００を含むシステムと関連付けられた記憶装置に有してもよい。ここで、分配コードは実行されると、コード分配を実行する。これとは異なり、コード分配プロセスを、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせによって管理してもよい。
【００３７】
一実施形態において、コード分配モジュール２１０は、プログラムコードのホット部分（hot portion）を特定する。プログラムコードについては、以下で図面４を参照して詳細に説明する。この章の説明のための一例として、プログラムコードは、バイナリコード又は機械コードのような処理要素によって実行される任意のコードを含んでもよい。電力、性能、熱、その他の処理メトリクス又はこれらの組み合わせのような考慮すべき事項を基準として、コードのホット部分とは、一のコアよりも他のコアで実行されるのに適しているコード部分を意味してもよい。ここで、コア２０１が、プログラムコードのネイティブ実行を行う既定のコアであり、プログラムコードのホット部分の特定は、コア２０２での実行により適したコード部分の特定も含む。コア２０１がＯＯＯコアであり、コア２０２がインオーダコアである実施形態の場合、コードのホット部分とは、再現性の高い部分の実行に利用可能なリソースを多く有していると考えられるシリアルコア２０２での実行により適したプログラムコードのホットスポットであることを意味してもよい。一例として、コードのホット部分は、コードの一部、又は、命令カウント又はサイクルカウントのようなその他の周知のメトリックの反復（再現）パターンによって特定される。再現性の高いパターンを有するコード部分は、インオーダコアでより効率的に実行されるように最適化されてもよい。この例では、基本的に、コールドコード（再現性が低い）は、ネイティブコア、ＯＯＯコア１０１に割り当てられ、ホットコード（再現性が高い）は、ソフトウェア管理コア、インオーダコア１０２に割り当てられる。
【００３８】
コードのホット部分は、静的に、動的に又はこれらの組み合わせで特定されてもよい。静的に特定される場合、コンパイラ又はユーザが、プログラムコードの一部分をホットコードであると判断してもよい。ここで、ホットコード特定命令は、ホットコードとしてのコード部分の境界を定めてもよい、すなわち、コア１０１ではなくコア２０２で実行されるべき部分を定めてもよい。一実施形態において、コア２０１のデコードロジックは、プラグラムコードのホット部分を特定する、ホットコード特定命令を、プログラムコードからデコードする。このような命令のフェッチ又はデコードは、コア２０２上でコードのホット部分の変換及び／又は実行をトリガしてもよい。この例では、コード分配モジュール２１０は、ホットコード検出命令を検出するデコードロジックを含む。また、モジュール２１０は、コア２０２におけるホットコードの変換/最適化及び実行を実行するその他のハードウェア及び／又はソフトウェアを含んでもよい。これに替えて、ホットコード部分は、コア２０２で実行するために、予め最適化／変換されていてもよい。
【００３９】
別の例では、コード分配モジュール２１０は、動的に（実行の間に）プログラムコードにおけるホットスポット／領域を特定する。一実施形態において、コア２０１及び／又はコア２０２に含まれるハードウェアを利用して、コア２０１のようなコアでのプログラム実行をプロファイルする。実行に関連するプロファイルされた電力及び／又は性能メトリクスの特性に基づいて、プログラムコードの一領域をホットコードとして特定してもよい。ハードウェアのオペレーションと同様に、監視コードをコア２０２のような一のコアで実行して、コア２０１のような別のコアで実行されるプログラムコードの監視／プロファイリングを実行してもよい。このような監視コードは、コア内、プロセッサ２００内の記憶構造、又は、プロセッサ２００を含むシステム内に保持されるコードであってもよい。例えば、監視コードは、コア２０１、コア２０２又はプロセッサ２００の記憶構造に保持されるマイクロコード又はその他のコードであってもよい。そして、監視コードは、典型的な実行ユニット及びその他のファームウェア又はプロセッサ２００上のロジックによって実行されてもよい。
【００４０】
更なる別の例として、ホットコードの静的ＩＤが、ヒントとして生成される。プログラムコード実行の動的プロファイリングは、ホットコード領域の静的特定を無視することができ、この種の静的特定はしばしば、コンパイラヒント又はユーザヒントと称されて、コード分配にどのコアが適しているかを判断するのにダイナミックプロファイルが考慮すべきヒントである。更に、ダイナミックプロファイルの性質として、ホットコード領域の特定は、そのコード部分が常にホットであると特定されるように制限するわけではない。例えば、プログラムコードが、アウトオブオーダコア２０１で実行されるとする。コア２０２で実行される監視コードは、そのプログラムコードの一部分を実行するコア２０１の性能レベルを監視する。実装に基づいて、コア２０１の性能がコア２０２で実行されるよりも十分低いと判断された場合、及び／又は、コア２０１のコード部分の再現パターンの再現性が高く、コア遷移のオーバーヘッドを隠すのに予測可能である場合、そのコード部分はホットであると特定される。変換及び／又は最適化の後、コード部分の変換されたバージョンが、コア２０２で実行される。コア２０１での実行の監視と同様に、変換されたバージョンのコードの実行がコア２０２で監視されてもよく、例えば、性能監視コードの実行を介して監視されてもよい。コア２０２での性能がコア２０１での性能よりも低い場合、コード部分のホットとしての特定を、動的に取り消してもよい（ホットコードとされた部分を、コールドコードと特定し直してもよい）。
【００４１】
コードの部分、スポット又は領域がホットとして特定されると、一実施形態において、コード分配モジュール２１０は、コードのホット部分を最適化及び／又は変換して、最適化された／変換されたホットコードを得る。一実施形態において、バイナリ変換コードのような、変換及び／又は最適化コードは、コア２０２の記録ロジックに保持されている。一例として、バイナリ変換コードは、コア２０２に保持されるマイクロコードの一部分であってもよい。変換／最適化コードは、実行されると、コア２０２での実行のためにコード部分を変換／最適化する。一実施形態において、コア２０１、２０２は、変換／最適化が、同じＩＳＡ又はこれらのサブセットを認識してもよく、この部分は、コア２０２上でより効率的に実行を行うべく、変換／最適化が単なる変換／最適化コードとなる。別の実施形態では、コア２０１、２０２は、異なるＩＳＡを特定し、この場合、変換は、コア２０１によって認識可能な一のＩＳＡからのコード領域を、コア２０２によって認識可能な他のＩＳＡへと変換することを含む。上記では、変換／最適化が、変換／最適化コードの実行を参照して説明されたが、変換／最適化コードに対する任意の周知のメカニズム、ひいては、専用ハードウェアを使用してもよい。
【００４２】
一実施形態において、コア２０１でホットコード部分の特定が発生すると、ホットコード（その変換されたバージョン）がコア２０２で実行される。ホットコード領域が発生したか否かを判断する周知の任意のトリガを利用してもよい。高レベルの幾つかの例として、コード領域と関連付けられた命令アドレスの発生／参照、ホットコードとして特定されたコード部分を特定する命令をフェッチ／デコード／スケジュール／実行する、別のコアで実行されるホットコードの変換バージョンを示す命令をフェッチ／デコード／スケジュール／実行する、ホットコード領域が発生したことを示す監視部からの外部トリガ等が挙げられる。
【００４３】
一例として、コード分配モジュール２１０は、ハードウェア、ソフトウェア又はこれらの組み合わせに実装される監視モジュールを含む。監視モジュールが、コードのホット領域を特定すると、又は、ホット領域を変換領域へと変換すると、監視モジュールは、このコードのホット領域と関連付けられた命令アドレスを記録する。記録は、命令アドレスとコードの変換領域のロケーションとの関連付けを含んでもよい。そして、命令ポインタ（プログラムカウンタ）が次に命令アドレスを参照すると、記録された命令アドレスから、コードのホット領域が発生したと判断される。ここで、任意の形態の検出を利用してもよく、例えば、エンカウンタイベントを扱う同期型又は非同期型の割り込みのような形態を利用してもよい。さらに、ハードウェア、マイクロコード及び／又はファームウェアは、ホットコード部分の発生を割り込みのように扱わず、直接扱ってもよい、すなわち、ハンドラによってトリガイベントが提供されなくてもよい。コア１０１及び１０２は、マッピング構造のような特定のハードウェア構造を共有して、ホットコードとして記録されているアドレスを特定する。
【００４４】
コア２０１でホットコード部分が発生したことに応答して、ホットコード部分の変換及び／又は最適化バージョンがコア２０２で実行される。ホットコード部分がコア２０１上でどのように特定され発生したかに関係なく、別のコアでコードの実行を可能とする任意の方法を利用してもよい。一実施形態において、このような実行を可能とするべく、協働モジュールが使用される。例えば、コア２０１、２０２は、特定のハードウェア構造を共有してもよい、及び／又は、情報を共有する通信チャネルを備えてもよい。一例として、コア１０１、１０２は、データキャッシュを共有してもよく、この場合、実行がコア２０１から２０２に移った場合に、データは物理的に移動せず、共有されたキャッシュに既に存在することになる。同様に、一実施形態では、シャドウレジスタファイルのようなレジスタファイルが、コア２０１とコア２０２との間で共有され、この場合、レジスタのステート（コンテキスト）を一のコアから他のコアへと移動させる必要はない。これに替えて、レジスタファイルを共有する替わりに、高速接続を使用して、物理的に、コンテキスト又はその一部分を、一のコアから別のコアへと移動させてもよい。更に、頻繁に発生しない移動の場合には、ソフトウェアを使用してこのような移動を実行してもよい。
【００４５】
一例として、ホットコード部分への入力値が、コア２０１からコア２０２へと移動されて、コア２０２でのホットコード部分の実行がサポートされる。実行の後、出力値が、コア２０１に戻される。一実施形態では、コード部分からの特定された入力／出力値のみが転送される、すなわち、部分コンテキストスイッチとなる。このような入力値は、ユーザ（ソフトウェア／コンパイラ）及び／又はハードウェア／ファームウェアアルゴリズムによって特定されてもよい。ここで、ダイレクトアクセスハードウェアを適用して、コア２０１内のレジスタ、バッファ又はその他の構造からの入力値を読み取り、これらをコア２０２に書き込んでもよい。反対に、同じ又は異なるハードウェアを利用して、コア２０２から値を読み出し、コア２０１へと書き込んでもよい。このような値の特定が煩雑となる場合には、コンテキストスイッチ全体、複製又は共有を実行して、コア２０１とコア２０２との間の値を提供してもよい。
【００４６】
図３には、最大性能及び省電力を達成するためのコア間でのコードの分配を行うプロセッサの一実施形態が示されている。上記のように、プロセッサ３００は、異なる種類のコアである２つのプロセッサコアを備える。一例として、コア３０１は、ネイティブプロセッサコア、アウトオブオーダ（ＯＯＯ）プロセッサコアであり、コア３０２は、ソフトウェア管理プロセッサコア、インオーダプロセッサコアである。コア３０１及びコア３０２は、必須ではないが、異なるＩＳＡ型を認識してもよい。コア３０２は、コア３０１のＩＳＡのサブセットを認識してもよい。または、コア３０２は、コア３０１のＩＳＡと部分的に重複する別のＩＳＡを含んでもよい。上記したように、コア又はプロセッサは、コア又はプロセッサ内で、デコードハードウェア／ソフトウェアによって、ＩＳＡ、すなわち、認識される命令の定義と関連付けられる。
【００４７】
一実施形態において、監視モジュール３０５は、ネイティブＯＯＯコア３０１上でのネイティブプログラムコード３２５の実行を監視し、この監視によって、モジュール３０５は、プログラムコード３２５のホット部分／領域３２７を特定する。監視モジュールは、ハードウェア、ソフトウェア又はこれらの組み合わせから構成されていてもよい。一実施形態において、監視モジュール３０５は、実行を監視するハードウェアを備える。一例として、ハードウェアは、リタイアメントプッシュアウトを測定するリタイアメントプッシュアウトタグ／カウンタ、命令の数を数える命令カウンタ、実行の全体の長さ及び／又は時間を測定する全体トレース実行測定ロジック、コード部分が実行された階数をカウントする再現性（recurrence）カウンタ等の、マイクロアーキテクチャ及び／又はアーキテクチャフックを備え、コード３２５の実行の間の性能及び電力測定値を測定する。この種のハードウェアは、アウトオブオーダコア３０１、インオーダコア３０２のようなＩＣ／プロセッサの任意の部分、及び、ＯＯＯプロセッサコア３０１又はインオーダプロセッサコア３０２内に含まれないＩＣの関連付けられていない部分に位置してもよい。
【００４８】
別の実施形態では、監視モジュール３０５は、実行されるとプログラムコード３２５の実行を監視し、プログラムコード３２５のホット領域３２７を特定する監視コードのようなソフトウェアを含む。一例として、プロセッサ３００は、リードオンリーメモリ（ＲＯＭ）構造、プログラム可能ロジック等のような記憶構造を備え、実行されると監視を開始するコード、マイクロコード又は機械コードを保持してもよい。しかしながら、監視コードは、コア３０１、３０２と関連付けられた任意の機械可読媒体に格納されてもよい。期間実行の利用は、典型的な実行ユニットによる実行に限定されず、ファームウェアを使用したマイクロコードの実行のように、プロセッサ３００と関連付けられたその他のハードウェア又はプログラム可能ロジックによる実行を指してもよい。ここで、実行された監視コードは、ハードウェアが測定可能な、再現性、電力及び性能基準の監視を同様に実行してもよい。
【００４９】
一例として、監視ハードウェア及び／又はコードは、プログラムコードのコード部分の再発生パターンを追跡／判断する。単純な例として、データ構造は、命令アドレスのようなコード部分（コード領域３２７）の参照を、コア３０１上で命令アドレス／コード部分が実行された回数のカウントと関連付ける。カウントは、絶対数（全カウント）値、又は、一時的なカウント（一定時間でのカウント）と関連付けられてもよい。
【００５０】
一実施形態において、監視モジュール３０５は、プログラムコード３２５のホット部分３２７を特定／検出するのに適応化される。一例では、監視モジュール３０５は、ＯＯＯプロセッサコア３０１上での実行の間、プログラムコード３２５のホット部分３２７に対する１以上の性能測定値を測定する。そして、モジュール３０５は、ＯＯＯプロセッサコアでの性能測定値が閾値を下回ったことに応答して、プログラムコード３２５のホット部分３２７を特定する。性能測定値の例として、全て列挙するわけではないが、例えば、命令リタイアメントプッシュアウト、実行された命令の数、コード領域を実行するのにかかる時間、コード領域が発生した／実行された回数、コード領域の実行の間に消費された電力量、コード領域の実行の間に異なる電力状態で費やされた時間、コードセグメントの実行の間の熱密度等が挙げられる。
【００５１】
上記の例のうちの一つを使用して、ＯＯＯコア３０１がプログラムコード３２５を実行すると仮定する。そして、監視コードが実行され、プログラムコード３２５の領域がコア３０１上で実行された回数が判断される。一実施形態では、回数が閾値以上となった場合、監視モジュール３０５は、その領域３２７がホットコードであると特定／判断する。閾値が３である場合、コア３０２で実行される監視コードがコア３０１上でホット領域３２７が３度実行されたことを検出すると、領域３２７は、コードのホット領域として特定される。再現パターンを判断する具体的な例を外挿して、カウントを行って閾値と比較して特定するという同様なプロセスが、任意の性能測定値に適用できるかを判断してもよい。さらに、性能測定値の決定は単純なカウントに限定されず、コア、プロセッサ又はコンピュータシステムにおける実行又は省電力性能を判断する周知のアルゴリズムを含んでもよい。
【００５２】
しかしながら、プログラムコード３２５内のホット領域３２７を特定することは、動的性能監視に限定されない。コンパイラ又は静的プログラム分析を利用して、インオーダコア３０２上での実行に適していると考えられるコード部分を判断してもよい。例えば、プログラム分析により、ホット領域３２７が複数回、再実行される可能性があると明らかになったとする。この発見に応答して、コンパイラ又はユーザは、コード部分をホットコードとして特定する命令又は境界線（demarcation）を挿入してもよい。したがって、コア３０１のデコーダがこのような命令に遭遇すると、デコーダは、領域３２７は、コア３０２上で実行される予定のホットコードであると認識する。ある実施形態では、ユーザは、深いプログラム分析を行うことなく、プログラムの知識に基づいて、コードのこのような領域を特定してもよい。
【００５３】
一実施形態では、領域３２７がホット領域であると特定されたことに応答して、最適化されたホットコード３０４を取得するべく、コード３２７は、最適化／変換モジュール３１０によって最適化又は変換される。監視モジュール３０５のオペレーションと同様に、最適化モジュール３１０は、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせに実装されてもよい。例えば、変換及び／又は最適化コードは、コア３０２、コア３０１又はプロセッサ３００と関連付けられた構造に格納されてもよい。一例として、バイナリ変換コードが、コア３０２に関連付けられたファームウェアに格納される。そして、バイナリ変換コードが実行されて、ホット領域３２７が、コア３０１のネイティブフォーマットからコア３０２のフォーマットへと変換される。変換は、ＩＳＡ又はその他のフォーマット間の変換であってもよく、最適化は、コードをＯＯＯコア３０１での平行実行からコア３０２でのシリアル実行、又は、その逆へと最適化する周知の技術のように、実行のためにコードを最適化する任意の方法を含んでもよい。
【００５４】
しかしながら、ファームウェアでのバイナリ変換コードの使用は単なる例であって、任意の変換コード又は最適化コードは、マイクロコードとしてコア３０２内に、又は、通常プログラムコードとしてシステムメモリ内に保持されるといったように、コンピュータシステム内の任意の場所に保持されてもよい。そして、最適化コードが、任意の態様で実行されて、ホット領域３２７が変換又は最適化され、最適化されたホットコード３０４が取得される。具体的には、現在知られているソフトウェア管理プロセッサにおけるコード変換のための方法及び装置のように、任意の方法及び装置を用いて、コアに対してコードを変換又は最適化してもよい。
【００５５】
ソフトウェア、ファームウェア、ハードウェア又はこれらの組み合わせを使用して、変換が静的又は動的に実行されてもよい。監視がランタイムの間に動的に行われる、又は、実行の前に静的に行われるといったように、変換及び最適化も同様に実行されてもよい。コンパイラ又はユーザがホット領域３２７を特定する例では、最適化又は変換は、その時点（実行の前）で実行されてもよい。ここで、ホットコード特定命令を利用して、ホットコード領域３２７の特定、及び、最適化された／変換されたコード３０４のロケーションを特定してもよい。しかしながら、ホットコードとして部分３２７が特定されたのが実行の前又は実行の間であるかに関わらず、ある実施形態において、最適化及び変換は、動的に（ランタイムの間に）行われる。
【００５６】
一実施形態において、ホット領域３２７は、その他の実行と平行して最適化／変換される。一例として、コア３０２は、コア３０１の領域３２７の実行と平行して、最適化コードの実行を開始する。ここで、監視モジュール３０５は、コア３０１上でのホットコード領域３２７の実行を検出して、コア３０２上で最適化が開始される。ホット領域３２７からの更なる命令が３０１上で実行されている間に、コア３０２が最適化を開始する。その結果、コア３０１上でのホットコード３２７の実行と平行して、コア３０２は基本的にホットコード３２７を最適化する。別の例では、コア３０２のホットコード３２７の最適化と平行して、コア３０１は、プログラムコード３２５のその他の部分又は相互排他的なコードを実行する。別の実施形態では、ホット領域３２７の最適化がシリアルに行われる。例えば、コア３０１は、ホット領域３２７を実行し、次にコア３０１又はコア３０２がホットコード領域３２７を最適化する。
【００５７】
一実施形態において、コード３２７は、元のメモリロケーションに格納されて、オンザフライでコア３０２によって変換される。しかしながら、ほとんどの場合、実行の前に、コード部分全体を変換／最適化する方が効率が良い。したがって、最適化／変換モジュール３１０が、コア３０２のようなコアに対してコードを最適化した後、最適化されたホットコード３０４がその他の場所に格納される。最適化されたホットコード３０４のその他の場所とは、ホーム、システムメモリロケーションのようなメモリ内の別のロケーションであってもよい。ホットコード３２７は、しばしば頻度の高い実行と関連付けられることから、最適化バージョン３０４をコア３０２の近くに保持することが有益であると考えられる。したがって、例示の実施形態では、コア３０３は、最適化されたホットコード３０４を保持するためのコードキャッシュ３０２を備える。コードキャッシュ３０３は、コア３０２内の別個のキャッシュ構造であってもよく、例えば、コア３０２内の共有命令又はデータキャッシュのような共有キャッシュ構造、又は、コア３０２と関連付けられたその他の一般的な記憶構造であってもよい。
【００５８】
監視モジュール３０５の説明に戻り、ホットコード領域３２７の遭遇の一実施形態は、コア部分と関連付けられている命令アドレスを参照するプログラムカウンタを含む。図に示すように、マッピングモジュール３１５は、最適化ホットコードリファレンス３１７と関連付けられた、命令アドレスのような、コード領域リファレンスを保持する。基本的に、マッピングモジュール３１５のエントリは、ホットコード領域３２７とその最適化バージョン（最適化ホットコード３０４）とを関連付ける。一例として、リファレンス３１６は、命令アドレスのような、ホット領域３２７と関連付けられたアドレスを含む。このシナリオでは、コア３０１が、マッピングモジュール３１５のフィールド３１６に保持される命令アドレスに遭遇する（プログラムカウンタが指す）と、監視モジュール３０５はホット領域３２７に遭遇し、コア３０２で実行されることを示す。上記で簡単に説明した協働モジュール３２０（以下に詳細に説明する）は、コア３０２へのデータ及び／又はコンテキストの移動を実行のために容易にする。
【００５９】
ホット領域３２７に遭遇し、コア３０２がそれを実行するとの判断は、上記の例において、リファレンス３１６上でのみ行われる。フィールド３１７とフィールド３１６との関連付けを利用して、領域３２７の最適化されたホットコードバージョン３０４がどこに位置しているかを素早く判断してもよい。この場合、フィールド３１７は、最適化されたホットコード３０４のロケーションに対する任意のリファレンスを含んでもよい。このようなリファレンスの幾つかの単純な例としては、最適化コード３０４を保持するコードキャッシュ３０３におけるエントリのアドレス、コードキャッシュ３０３の開始から最適化ホットコードを保持するエントリ３０４までのオフセット、及び、エントリ３０４に関連付けられた物理的アドレス又は線形アドレスが挙げられる。マッピングモジュール３１５が単純なテーブル構造として例示されており、これは、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせに実装及び／又は維持されてもよい。一のロケーションと他のロケーションとを関連付けるための任意の周知の方法を使用して、ホットコード３２７とその最適化バージョンとを関連付けてもよい。
【００６０】
特に例示していないが、監視モジュール３０５の一部分がマッピングモジュール３１５と共に、コア３０１上のネイティブコード３２７の替わりに、最適化されたホットコード３０４がコア３０２上で実行されることを示すトリガモジュールを構成してもよい。一例として、コア３０１のプログラムカウンタが次の命令アドレスに移る時に、トリガハードウェアが、マッピングハードウェアテーブル３１５に格納されているリファレンスとアドレスとを確認する。ここで、プログラムカウンタが、フィールド３１６に保持されるコード領域３２７を参照する命令アドレスを指すと仮定する。この場合、トリガハードウェアは、マッピングテーブル３１５のエントリに基づいて、コード領域３２７に対する最適化されたコード領域３０４が存在することを示す。最適化されたバージョンが既に存在し、コア３０２上で実行される予定であることから、コア３０１上でのコード領域３２７の実行を省略してもよい。
【００６１】
一実施形態において、コア３０２が最適化コードの実行を完了するまで、コア３０１は、実行を中断する（停止する又は低電力状態への遷移）。しかしながら、これは、プロセッサ３００の処理能力を最大限に活かしていない。したがって、別の実施形態では、最適化されたホットコード３０４がコア３０２上で実行されている間に、コア３０１は、別のソフトウェアスレッド（プログラムコード３２５以外のコード）の実行をインターリーブする。別の例として、コア３０１は、投機的にプログラムコード３２５のその他の部分を実行してもよく、この場合、基本的に、実行のランアヘッド・ヘルパ（run-ahead helper）スレッドを実行する、又は、コード領域３２７とは独立したコード３２５の別の部分をアウトオブオーダで実行する。
【００６２】
一実施形態において、協働モジュール３２０は、コア３０１とコア３０２間の協働を提供する。単純な例として、協働モジュール３２０は、情報を転送するコア３０１及びコア３０２間の相互接続を含む。別の実施形態では、協働モジュールは、個々のコア専用であっても、複数のコア間で共有されてもよいその他のハードウェアを含み、上記の協働を簡易にしてもよい。例えば、コア３０２は、コア３０１のシャドウレジスタファイルを共有して、最適化されたホットコード３０４がコア３０２上で実行される時に、コア３０１からコア３０２へのレジスタステートのコンテキストスイッチを全て行う必要がないようにしてもよい。これに替えて、コア３０２は、このシナリオにおいてシャドウレジスタファイルに直接アクセス可能であってもよい。協働モジュールは、共有される構造及び／又は相互接続に限定されない。協働モジュール３２０は、ハードウェア、ファームウェア、ソフトウェア、又はこれらの組み合わせを含み、両方のコア３０１、３０２におけるレジスタ、記憶構造及びバッファへの直接読み出し及び／又は書き込みアクセスを提供してもよい。そして、一実施形態において、協働モジュール３２０は、コア３０１からコア３０２へと、最適化ホットコードの実行に必要なデータ／レジスタ値を転送可能である。また、コア３０１で次に適切な実行を可能とするべく、コア３０２からコア３０１へと結果を戻すことができる。
【００６３】
上記では、監視モジュール３０５がネイティブコア３０１上での実行の監視を参照して説明されたが、一実施形態では、監視モジュール３０５は、コア３０２上での最適化されたコードの実行を関しする。この場合、監視モジュール３０５は、コア３０１上でのコード部分３２７の性能と、コア３０２上での最適化バージョン３０４の性能との比較を行うことが可能である。更に、コア３０２上での性能がコア３０１上での性能よりも低い場合、又は、電力消費の増加と比較して性能ゲインがコア３０２上で小さい場合には、領域３２７をホットコードとして特定する判断は、取り消されてもよい。一例として、このような決定を示すマッピングモジュール３１５のエントリは、割り当て解除され又は無効とされて、次にコア３０１がホットコード３２７に遭遇する時に、監視モジュール３０５がリファレンス３１６を検出しない、及び、領域３２７の最適化されたホットコードバージョンがコア３０２上で実行されるべきであることを示さない。基本的に、判断の取り消しによって、前に特定されていた領域３２７は、アウトオブオーダコア３０１に戻される。
【００６４】
性能比較について更に説明する例として、高い再現性を有するパターン及び命令実行カウント値が高いことに基づいて、コード領域３２７がホットコードとして特定されたと仮定する。この場合、コード３２７は、コア３０２に存在するバイナリ変換コードによって最適化されて、最適化されたコード３０４が取得される。最適化コード３０４がコードキャッシュ３０３に格納されると、マッピングテーブル３１５におけるエントリが生成されて、コード領域３２７と最適化されたバージョン３０４とが関連付けられる。コア３０１が次に、フィールド３１６におけるリファレンスに一致するリファレンスに遭遇すると、コード領域３２７がコア３０１で実行されるのではなく、最適化コード３０４の実行がコア３０２でトリガされる。協働モジュールは、転送、共有又はコンテキストスイッチングにより、コア３０１からコア３０２へと適切な値を提供する。最適化されたホットコード３０４をコア３０２が実行する間、監視モジュール３０５によって、同じ性能測定値実行カウントが追跡される。命令実行カウントが、コード領域３２７がコア３０１で実行された場合よりも少ない場合には、領域３２７がホットコードとして特定された状態が、その後も継続する。命令実行カウントがコア３０２上で、長期の又は大幅な電力増加が検出された場合には、領域３２７のホットコードとしての特定が上記のように取り消される。
【００６５】
コア３０１とコア３０２の間の通信を提供するのに加えて、協働モジュール３２０は、異なる種類の複数のコアを管理するその他の機能を有してもよい。第１の例として、電力管理部は、電力アルゴリズムを実装して、コア３０１及びコア３０２が、同時に最大電力で動作しないようにする。これは、単なる例である。その他の電力アルゴリズムでは、このような最大電力オペレーションを可能としてもよい。別の電力に関する例として、コア３０２は、コア３０１上での実行の監視の間、最大電力を下回る電力状態（低電力状態）であってもよい。例えば、コア３０１が、自身の監視を実行するメカニズムと関連付けられている場合、実行されるコードの最適化バージョンが存在するまで、コア３０２に完全に電力を供給する必要はない。この場合、実行が必要となるまでコア３０２をオフとすることにより、節電することができる。反対に、コア３０２が最適化ホットコードを実行している間は、コア３０１の（例えば、ＡＣＰＩ低電力状態のような最大電力を超える電力状態）電力を落としてもよい。
【００６６】
図４には、最大性能及び省電力を達成するべく、アウトオブオーダコア及びインオーダコア間でコードを分配する方法を示したフローチャートの一実施形態が示されている。図４のフローは、ほぼシリアルな形態で描かれているが、フローは、異なる順番で実行されてもよいし、平行に実行されてもよい。例えば、フロー４０５においてプログラムがアウトオブオーダコア実行される前に、フロー４１０及び４１５は、プログラムコードのコンパイルの間に実行されてもよい。更に、フローのそれぞれは、ハードウェア、ファームウェア又はプログラムコードの実行を介して実行されてもよい。
【００６７】
フロー４０５において、プロセッサ内のアウトオブオーダ（ＯＯＯ）プロセッサコアでのプログラムコードの実行が監視される。一実施形態において、プログラムコードの参照とは、（１）その他のプログラムコードをコンパイルするべく、動的に又は静的にコンパイラプログラムを実行すること、（２）オペレーティングシステム、ハイパーバイザ、アプリケーションコード又はその他のソフトウェアプログラムのようなメインプログラムを実行すること、（３）メインプログラムコードと関連付けられた、ライブラリのようなその他のプログラムコードを実行すること、（４）直接メインプログラムと関連付けられていない場合があるヘルパスレッド又はその他のタスク又はその他のプログラムコード、（５）これらの組み合わせ、を実行することを指す。
【００６８】
コンパイラは多くの場合、ソーステキスト／コードをターゲットテキスト／コードへと変換するプログラム又はプログラムのセットを含む。通常、コンパイラを使用したプログラム／アプリケーションコードのコンパイルは、複数のフェーズ及びパスで実行され、高レベルプログラミング言語コードを低レベル機械又はアセンブリ言語コードへと変換する。単純なコンパイルには、シングルパスコンパイラを使用してもよい。コンパイラは、周知の任意のコンパイル技術を利用して、字句解析、前処理、構文解析、意味解析、コード生成、コード変換及びコード最適化のような周知の任意のコンパイラオペレーションを実行してもよい。
【００６９】
大きなコンパイラは複数のフェーズを有し、これらのフェーズは、２つの一般的なフェーズ内に分類される、（１）フロントエンド、すなわち、構文処理、意味処理及びその他の変換／最適化が実行されるフェーズ、（２）バックエンド、すなわち、分析、変換、最適化及びコード生成が実行されるフェーズ、である。コンパイルの中には、コンパイラのフロントエンドとバックエンドとの間の線引きをぼかすミドルエンドを参照するものもある。この場合、挿入、関連付け、生成又はコンパイラのその他のオペレーションへの参照は、上記のフェーズ又はパスの何れかで実行されてもよいし、コンパイラのその他の周知のフェーズ又はパスで実行されてもよい。
【００７０】
一実施形態において、プログラムコードの実行の監視は、プログラムコード内のコードセグメント／領域が実行される回数を追跡することを含む。コード領域は、任意の周知の命令／コードのグループ化の態様で決定されてもよい。一例として、一のコード部分と関連付けられた命令アドレスが、ＯＯＯコアのプログラムカウンタによって参照される都度、再現カウントがインクリメントされる。一実施形態では、そのコード部分に対する再現カウントが閾値を超えると、フロー４１０において、コード部分がホットコードとして特定される。
【００７１】
再現パターンの決定と共に、又は、別に、プログラムコードの実行の監視は、コード部分と関連付けられている性能測定値の決定／追跡を含んでもよい。先に開示したように、性能測定値の例として、命令リタイアメントプッシュアウト、実行された命令の数、コード領域を実行するのにかかる時間、コード領域が発生した／実行された回数、コード領域の実行の間に消費された電力量、コード領域の実行の間に異なる電力状態で費やされた時間、コードセグメントの実行の間の熱密度等が挙げられる。しかしながら、プロセッサの実行と関連付けられた周知の任意の測定値又は測定値の組み合わせを、プログラムコードの実行の間に監視してもよい。
【００７２】
フロー４１０において、プログラムコードのホット部分が、再現パターン、性能測定値又はこれらの組み合わせに基づいて特定される。再現カウントを閾値と比較した上記の例と同様に、性能測定値が閾値と比較される。例えば、監視部は、プッシュアウト回数閾値を超えるリタイアメントプッシュアウトの階数をカウントしてもよい。プッシュアウトが、カウント閾値を超える場合には、コード部分がコードのホット部分として特定される。本例では、１つの性能測定値のみを考慮するとして開示されたが、コードのホットコードの部分の特定は、複数の性能測定値及び／又は再現パターンの任意の組み合わせに基づいてもよい。例えば、複数の性能測定値、電力条件及び再現パターンを評価するアルゴリズムを開発して、コード部分のホットコード部分としての特定を行ってもよい。アルゴリズムは、実装形態に固有のものであってもよく、その組み合わせの数は多大なものとなり、本発明の説明を不必要に曖昧にするのを避けるために、組み合わせアルゴリズムの詳細については詳細に説明しない。上記したように、コード部分のホットコードとしての特定は、プログラムコードの実行の前に実行されてもよく、例えば、プログラムコードのコンパイルの間にコンパイラによって、又は、ランタイムの間にランタイムコンパイラ、ハードウェア、ファームウェア、その他のソフトウェア又はこれらの組み合わせによって実行されてもよい。
【００７３】
ホットコード領域が特定されると、プログラムコードのホット部分が、協調設計プロセッサコアで実行されるように最適化されて、フロー４１５においてプログラムコードの最適化されたホット部分が得られる。一実施形態において、このような最適化は、プログラムコードのホット部分を、アウトオブオーダ・プロセッサコアと関連付けられたデコードロジックが認識可能なネイティブ命令から、協調設計コアと関連付けられたデコードロジックが認識可能な協調設計命令へと変換することを含む。しかしながら、変換は必須ではない。ある実施形態では、協調設計コアは、アウトオブオーダコア又はこれらのサブセットのような同じＩＳＡを実行可能なシリアルコアであってもよい。このシナリオでは、コードは、一のＩＳＡから他のＩＳＡへと変換されず、アウトオブオーダ実行のフォーマットからシリアル実行のフォーマットへと変換／最適化されてもよい。コードを変換及び／又は最適化する周知の任意の方法、例えば、コードを分析、変換、変形及び／又は最適する周知のコンパイル方法を使用してもよい。具体的な例として、バイナリ変換コードが、協調設計コアに存在し、プログラムコードを、プログラムコードの最適化されたホット部分へと変換／最適化してもよい。
【００７４】
フロー４２０において、プログラムコードの最適化されたホット部分は、協調設計プロセッサコアへと分配される。一実施形態では、分配は、プログラムコードの最適化されたホット部分を、協調設計コアに関連付けられたコードキャッシュに書き込むことを含む。しかしながら、分配は、任意の記憶構造から任意のタイミングで実行されてもよい。例えば、最適化されたホット部分は、システムメモリ内に格納されてもよく、実行の直前に協調設計コアに分配されてもよい。
【００７５】
フロー４２５において、プログラムコードの特定されたホット部分は、プログラムコードの最適化されたホット部分と関連付けられる。例えば、プログラムコードのホット部分のリファレンス及び最適化されたホット部分のリファレンスは、コードマッピングテーブルのエントリに格納されてもよい。コードキャッシュの例として、最適化されたホット部分のリファレンスは、コードキャッシュ内の最適化されたホットコードのロケーションの任意のリファレンス、例えば、アドレス又はオフセットを含む。しかしながら、周知の任意のデータ構造及び／又は方法を使用して、ホットコード部分と、当該ホットコード部分の最適化されたバージョンのロケーションとを関連付けてもよい。
【００７６】
そして、アウトオブオーダコアでの実行の間にコード部分に遭遇すると、そのプログラムコードの最適化されたホット部分が、フロー４３０において、協調プロセッサコアを使用して実行される。上記したように、コードの最適化されたホット部分の実行は、設計実装に基づいて、アウトオブオーダコアでのその他のコードの実行と平行して、又は、アウトオブオーダコアでのその他のコードと平行して行われてもよい。平行実装では、アウトオブオーダコアは、同じスレッドからの別のコードを最適化ホットコードとして及びその他のスレッドからインターリーブされたコードとして実行可能であってもよい。
【００７７】
フロー４３５において、最適化されたホット部分の協調設計プロセッサコアでの実行は、フロー４０５のアウトオブオーダ・プロセッサコアでの実行の監視と同様な態様で監視される。例えば、プログラムコードの最適化ホット部分のインオーダ・協調設計プロセッサコアで実行する間に、フロー４０５で監視されたのと同じ性能測定値を監視してもよい。そして、性能測定値からアウトオブオーダコアとインオーダコアとを比較した場合に、アウトオブオーダコアでの性能が低いことが分かった場合、プログラムコードの最適化ホット部分をインオーダコアで実行する替わりに、アウトオブオーダコアを使用してプログラムコードのホット部分を実行することを示してもよい。
【００７８】
図５には、最大性能及び省電力を達成するべく、アウトオブオーダコア及びインオーダコアの間でコードを分配する方法を示したフローチャートの別の実施形態が示されている。フロー５０５において、第１プロセッサコアに対して最適化された第１コード型を含むプログラムコード領域をホットコードとして認識することに応答して、当該プログラムコード領域を、第１コード型から第２プロセッサコアに対して最適化された第２型へと変換されたプログラムコード領域を含む変換ホット領域と関連付ける。
【００７９】
一実施形態において、第１プロセッサコアはアウトオブオーダ・プロセッサコアを含み、第１コード型はアウトオブオーダ・プロセッサコアに対して最適化されたアウトオブオーダコア型を含み、第２コード型はインオーダプロセッサコアに対して最適化されたインオーダコード型を含む。一例として、アウトオブオーダ・プロセッサコアは、第１命令セットアーキテクチャ（ＩＳＡ）を認識するデコードロジックと関連付けられ、インオーダプロセッサコアは、第２ＩＳＡを認識するデコードロジックと関連付けられる。ここで、第２コード型は更に、第２ＩＳＡに対して最適化される。
【００８０】
一実施形態において、第１プロセッサコアと関連付けられたデコードロジックは、プログラムコードから少なくとも１つの命令をデコードして、プログラムコードの領域をホットコードであると示す。ここで、ユーザは、ホット領域を特定するべく、プログラムコードに命令を含めてもよい。または、プログラムコードをコンパイルする時に、プログラムコードの分析に応答して、コンパイラは命令を挿入してもよい。別の実施形態では、ハードウェアは、第１コアでのプログラムコードの領域の実行を監視し、ハードウェアの監視に基づいて、プログラムコードの領域をホットコードとして特定する。
【００８１】
更に、変換されたホット領域のリファレンスと関連付けられたプログラムコードの領域のリファレンスで、データ構造内のエントリを更新することにより、プログラムコードの領域が変換されたホット領域と関連付けられてもよい。例えば、変換されたホット領域に対するリファレンスとしては、アドレス、命令アドレス、キャッシュメモリ内のロケーション、プログラムカウンタ値及び命令オペコードが含まれてもよい。
【００８２】
フロー５１０において、第１プロセッサコアでプログラムコードを実行する間にプログラムコードのホット領域に遭遇すると、第２プロセッサコアで変換されたホット領域が実行される。一例として、第１プロセッサコアの命令ポインタがコードのホット領域を参照すると、変換された領域が第２プロセッサで実行される。しかしながら、命令に遭遇する都度、命令が第２コアでの実行をトリガしてもよい。例えば、実行をトリガする替わりに、特定のアドレスのフェッチ、又は、特定の命令のデコードを行ってもよい。
【００８３】
一実施形態において、コードの特定及び複数のコア間でのコードの分配を行う際に、電力条件を考慮してもよい。一例として、第２プロセッサコアが変換されたホット領域を実行する時、第１プロセさコアは、節電のために低電力状態へと移る。更に、一実施形態では、特定の電力条件により、両方のコアが同時に最大電力で動作することがないように制限してもよい。
【００８４】
ネイティブコアと異なる協調設計コアとを結合する結果、電力及び実行の最良の利点を１つのアプリケーション内で得ることが可能である。例えば、アウトオブオーダコア及びソフトウェア管理インオーダコアを使用することにより、ソフトウェア管理コアでは効率的でないコードが、アウトオブオーダコアに移動させる。そして、アウトオブオーダコアで効率的でないコードは、ソフトウェア管理コアへと移動させる。ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせにより、ネイティブコードの平行実行、ホットコード検出及びホットコード最適化が効率的に管理されてもよく、複数のスレッドの個々の部分は、パイプライン様にアウトオブオーダコアとインオーダ協調設計コアとの間で効率的にインターリーブされてもよい。その結果、ある実装形態において、インオーダコアで実行が行われている間はアウトオブオーダコアを低電力状態にするといったように、異なる電力効率技術を使用して良好な電力性能を達成できると同時に、最大性能を達成できると考えられる。
【００８５】
本明細書で用いられたモジュールという言葉は、任意のハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせを意味する。別個のものとして図示されているモジュールの境界は、通常変わることが多く、重複する可能性もある。例えば、第１のモジュール及び第２のモジュールは、ハードウェア、ソフトウェア、ファームウェア又はこれらの組み合わせを共有しているとしてもよいし、独立したハードウェア、ソフトウェア又はファームウェアを持つとしてもよい。一実施形態では、ロジックという用語は、例えば、トランジスタ、レジスタのようなタスクを実行するべく組み合わせられる及び／又は構成されるハードウェアを含む。別の実施形態では、ロジックという用語は、プログラム可能な論理デバイス又はプログラム可能なロジックアレイのようなその他のデバイスを含む。
【００８６】
また、本明細書で使用されている"値"という言葉は、数、状態、論理状態又は２値論理状態のあらゆる既知の表現を含む。また、明細書で使用されている論理レベル、論理値、又は論理的値は、１又は０といった単純に２値論理状態を意味している場合もある。例えば、１は高い論理レベルを指し、０は低い論理レベルを指す。一実施形態では、トランジスタ又はフラッシュセルのような記憶セルは、１つの論理値又は複数の論理値を保持可能であってもよい。しかしながら、コンピュータシステムにおける値の他の表現が使用されてもいる。例えば、１０進数の１０は、２進値表示では、１０１０と表され、１６進数表示ではＡと表される。したがって、ある１つの値は、コンピュータシステムに保持される情報のあらゆる表示形式を含む。
【００８７】
さらに、状態（ステート）は、値又は値の一部によって表されていてもよい。例えば、論理値の１のような第１の値が、デフォルト状態又は最初の状態を表していてもよく、論理値の０のような第２の値が、非デフォルト状態を表していてもよい。加えて、リセット及びセットという言葉はそれぞれ、ある実施形態では、デフォルト値又は状態及び更新された値又は状態を指す。例えば、デフォルト値は、高い論理値、すなわち、リセットを含んでもよく、更新値は、低い論理値、すなわち、セットを含んでもよい。値のどのような組み合わせを、あらゆる数の状態を表すのに利用してもよい。
【００８８】
上記の方法、ハードウェア、ソフトウェア、ファームウェア、コードの実施形態を、機械アクセス可能な又は機械可読な媒体に記憶され、プロセッシング素子によって実効可能な命令又はコードを使用して実装してもよい。機械アクセス可能／機械可読な媒体としては、コンピュータ又は電子システムのような機械によって読み出し可能な形式の情報を提供する（すなわち、記憶及び／又は送信する）あらゆるメカニズムを含む。例えば、有形機械アクセス可能媒体には、スタティックＲＡＭ（ＳＲＡＭ）若しくはダイナミックＲＡＭ（ＤＲＡＭ）のようなランダム・アクセス・メモリ（ＲＡＭ）、ＲＯＭ、磁気的又は光学的記憶媒体、フラッシュメモリデバイス、電気記憶デバイス、光学記憶デバイス、音響的記憶デバイス、又は他の形態の伝播信号（例えば、搬送波、赤外線信号、デジタル信号）記憶デバイス等が含まれる。
【００８９】
また、本明細書における「一実施形態」又は「ある実施形態」という言葉は、実施形態に関連する特定の特徴、構造及び特性が、少なくとも本発明の実施形態の一つに含まれていることを意味する。したがって、本明細書中の様々な箇所で使用されている「一実施形態において」又は「ある実施形態において」という表現は、必ずしも同一の実施形態を示していない。また、１以上の実施形態において、特定の構成、構造又は特徴を、適切な形で組み合わせてもよい。
【００９０】
明細書の上記において、特定の例示された実施形態を参照して、詳細な説明がなされた。しかしながら、添付の特許請求の範囲に記載される本発明の範囲内において、様々な変形及び変更を加えることが可能であることは、明らかである。したがって、明細書及び添付の図面は、発明を制限するものではなく、発明を例示するものであると見なされるべきである。また、上記の実施形態及び他の例で使用された言葉は、同じ実施形態又は同じ例を必ずしも指している必要はなく、異なる及び別の実施形態を指している場合もあるし、同じ実施形態を指している場合もある。
【図１】
2013532331.tif 000003
【図２】
2013532331.tif 000004
【図３】
2013532331.tif 000005
【図４】
2013532331.tif 000006
【図５】
2013532331.tif 000007
【手続補正書】
【提出日】平成24年11月29日(2012.11.29)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラムコードをプログラム順でない順番で実行するアウトオブオーダ（ＯＯＯ）プロセッサコアと、
プログラム順で前記プログラムコードのホット部分を実行するインオーダプロセッサコアと
を有する集積回路を備える装置。
【請求項２】
前記集積回路は更に、
前記プログラムコードの前記ホット部分を特定する監視ハードウェアを更に有する請求項１に記載の装置。
【請求項３】
プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行を監視し、
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行の監視に基づいて、前記プログラムコードの前記ホット部分の再現パターンを判断し、
前記再現パターンに基づいて、前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項２に記載の装置。
【請求項４】
前記ＯＯＯプロセッサコアでの前記プログラムコードの実行の監視に基づいて前記プログラムコードの前記ホット部分の再現パターンを判断する前記監視ハードウェアは、前記プログラムコードの前記ホット部分が一定期間に実行された回数を判断する前記監視ハードウェアを含み、
前記再現パターンに基づいて前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、前記回数がホットコード閾値を超えたことに応答して、前記プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項３に記載の装置。
【請求項５】
前記監視ハードウェアは、前記ＯＯＯプロセッサコア及び前記インオーダプロセッサコアからなる一群から選択される前記集積回路の部分、及び、前記ＯＯＯプロセッサコア又は前記インオーダプロセッサコアの何れかに含まれない前記集積回路の関連付けられていない部分に含まれる請求項３に記載の装置。
【請求項６】
プログラムコードの前記ホット部分を特定する前記監視ハードウェアは、
前記ＯＯＯプロセッサコアでの実行の間に前記プログラムコードの前記ホット部分についての性能測定値を測定し、前記ＯＯＯプロセッサコアでの前記性能測定値が閾値を下回ったことに応答して、プログラムコードの前記ホット部分を特定する前記監視ハードウェアを含む請求項２に記載の装置。
【請求項７】
前記監視ハードウェアは、前記インオーダプロセッサコアでの実行の間に前記プログラムコードの前記ホット部分についての性能測定値を測定し、前記インオーダプロセッサコアでの実行の間の前記プログラムコードの前記ホット部分についての前記性能測定値が、前記ＯＯＯプロセッサコアでの実行の間の前記プログラムコードの前記ホット部分についての前記性能測定値を下回ったことに応答して、プログラムコードの前記ホット部分がもはやプログラムコードのホット部分と見なされないことを示す請求項６に記載の装置。
【請求項８】
前記集積回路は、
入力値を、前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する協働ハードウェアを更に有する請求項１に記載の装置。
【請求項９】
入力値を前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する前記協働ハードウェアは、
前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへの少なくとも部分的なコンテキストの切り替えを実行するコンテキストスイッチロジックを含み、
前記少なくとも部分的なコンテキストは、少なくとも前記入力値を含む請求項８に記載の装置。
【請求項１０】
入力値を前記ＯＯＯプロセッサコアから前記インオーダプロセッサコアへと供給する前記協働ハードウェアは、
前記入力値を前記ＯＯＯプロセッサコア内のレジスタから読み出し、前記インオーダプロセッサコア内の入力レジスタへ前記入力値を書き込むダイレクトアクセスハードウェアを含む請求項８に記載の装置。
【請求項１１】
前記集積回路は、実行されると、前記インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する最適化コードを保持するコード記憶ロジックを更に有し、
前記監視ハードウェアが前記プログラムコードの前記ホット部分を特定したことに応答して、前記プログラムコードの前記ホット部分を最適化するべく、前記最適化コードが実行される請求項２に記載の装置。
【請求項１２】
前記最適化コードは、最適化マイクロコードを含み、
実行されると前記インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する前記最適化マイクロコードは、実行されると前記プログラムコードの前記ホット部分を、前記ＯＯＯプロセッサコアのデコーダによって認識される第１命令セットアーキテクチャ（ＩＳＡ）から前記インオーダプロセッサコアのデコーダによって認識される第２ＩＳＡへと変換する前記最適化マイクロコードを含む請求項１１に記載の装置。
【請求項１３】
前記インオーダプロセッサコアは、コードキャッシュと関連付けられ、
前記コードキャッシュは、前記プログラムコードの前記ホット部分を前記第１ＩＳＡから前記第２ＩＳＡへと変換した後の前記プログラムコードの第２部分の最適化バージョンを保持する請求項１２に記載の装置。
【請求項１４】
前記集積回路は更に、トリガハードウェアを有し、
前記トリガハードウェアは、
前記監視ハードウェアが前記プログラムコードの前記ホット部分を特定したことに応答して、前記プログラムコードの前記ホット部分がホットコードであると示し、
前記ＯＯＯプロセッサコアが前記プログラムコードの前記ホット部分に遭遇し、前記トリガハードウェアが前記プログラムコードの前記ホット部分がホットコードであると示したことに応答して、プログラムコードの前記ホット部分の前記インオーダプロセッサコアでの実行をトリガする請求項２に記載の装置。
【請求項１５】
前記プログラムコードの前記ホット部分がホットコードであると示す前記トリガハードウェアは、
前記インオーダプロセッサコアでの実行のために最適化された前記プログラムコードの前記ホット部分の最適化バージョンのリファレンスと関連付けられた前記プログラムコードの前記ホット部分のリファレンスを保持する前記トリガハードウェアを含む請求項１４に記載の装置。
【請求項１６】
プロセッサを備える装置であって、
前記プロセッサは、
プログラムコードを実行するアウトオブオーダコアと、
協調設計コアと、
前記プログラムコードのホット部分を特定し、最適化されたホットコードを取得するべく、前記協調設計コアに対して前記プログラムコードの前記ホット部分を最適化するコード分配モジュールと
を有し、
前記コード分配モジュールが前記プログラムコードの前記ホット部分を特定し、前記アウトオブオーダコアが前記プログラムコードの前記ホット部分の実行に遭遇したことに応答して、前記協調設計コアは、前記最適化されたホットコードを実行する装置。
【請求項１７】
前記プログラムコードの前記ホット部分を特定する前記コード分配モジュールは、
前記プログラムコードの前記ホット部分を特定するべく、前記プログラムコードからホットコード特定命令をデコードするデコードロジックを含む請求項１６に記載の装置。
【請求項１８】
前記プログラムコードの前記ホット部分を特定する前記コード分配モジュールは、前記アウトオブオーダコアでの前記プログラムコードの実行を監視し、前記アウトオブオーダコアでの前記プログラムコードの実行の前記監視から前記プログラムコードの前記ホット部分を特定する監視モジュールを含む請求項１６に記載の装置。
【請求項１９】
前記監視モジュールは、前記協調設計コア内に、監視コードを実行する実行ロジックを含み、
前記監視コードは、前記協調設計コア内の前記実行ロジックによって実行されると、前記アウトオブオーダコアでの前記プログラムコードの実行を監視し、前記プログラムコードの前記ホット部分を特定する請求項１８に記載の装置。
【請求項２０】
前記最適化されたホットコードを取得するべく、前記協調設計コアに対して前記プログラムコードの前記ホット部分を最適化する前記コード分配モジュールは、
変換コードを実行する実行ロジックを含み、
前記変換コードは、実行されると、前記最適化されたホットコードを取得するべく前記プログラムコードの前記ホット部分を変換し、
前記プログラムコードの前記ホット部分は、前記アウトオブオーダコアのデコーダが認識可能な第１命令セットアーキテクチャ（ＩＳＡ）の一部である命令を含み、
前記最適化されたホットコードは、前記協調設計コアのデコーダが認識可能な第２ＩＳＡの一部である命令を含む請求項１６に記載の装置。
【請求項２１】
前記コード分配モジュールが前記プログラムコードの前記ホット部分を特定し、前記アウトオブオーダコアが前記プログラムコードの前記ホット部分の実行に遭遇したことに応答して、前記最適化されたホットコードを実行する前記協調設計コアは、
前記アウトオブオーダコアと関連付けられたプログラムカウンタが、前記プログラムコードの前記ホット部分と関連付けられた命令アドレスを参照し、マッピングテーブルが、前記プログラムコードの前記ホット部分がホットコードであることを示すべく、前記プログラムコードの前記ホット部分と前記最適化されたホットコードとを関連付けたことに応答して、前記最適化されたホットコードを実行する前記協調設計コアを含む請求項１６に記載の装置。
【請求項２２】
前記協調設計コアと関連付けられるコードキャッシュを更に備え、
前記プログラムコードの前記ホット部分がホットコードであることを示すべく、前記プログラムコードの前記ホット部分と前記最適化されたホットコードとを関連付ける前記マッピングテーブルは、
前記プログラムコードの前記ホット部分のリファレンス及び前記最適化されたホットコードのリファレンスを保持する前記マッピングテーブルのエントリを含み、
前記最適化されたホットコードの前記リファレンスは、前記コードキャッシュ内の前記最適化されたホットコードのロケーションのリファレンスを含む請求項２１に記載の装置。
【請求項２３】
前記プロセッサは、ランダムアクセスメモリ（ＲＡＭ）、ダブルデータレート（ＤＤＲ）ＲＡＭ及びバッファＲＡＭからなる一群から選択されるシステムメモリに接続され、
前記システムメモリは、前記プログラムコードを保持する請求項１６に記載の装置。
【請求項２４】
第１命令セットアーキテクチャ（ＩＳＡ）型を認識するデコードロジックと関連付けられる第１コアと、
第２命令セットアーキテクチャ（ＩＳＡ）型を認識するデコードロジックと関連付けられる第２コアと、
前記第１ＩＳＡ型のプログラムコードの前記第１コアでの実行を監視し、前記プログラムコードのホット領域を特定する監視モジュールと、
前記プログラムコードの変換されたホット領域を取得するべく、前記プログラムコードの前記ホット領域を前記第１ＩＳＡ型から前記第２ＩＳＡ型へと変換する変換モジュールと
を備え、
前記第１コアが前記プログラムコードの前記ホット領域に遭遇し、前記監視モジュールが前記プログラムコードの前記ホット領域を特定したことに応答して、前記第２コアが前記プログラムコードの前記変換されたホット領域を実行するプロセッサ。
【請求項２５】
前記監視モジュールは、実行されると、前記第１コアでのプログラムコードの実行を監視し、前記プログラムコードのホット領域を特定する監視コードを有し、
前記変換モジュールは、実行されると、前記プログラムコードの前記変換されたホット領域を取得するべく、前記第１コアでの前記プログラムコードの実行と少なくとも部分的に平行して、前記プログラムコードの前記ホット領域を変換する変換コードを有する請求項２４に記載のプロセッサ。
【請求項２６】
前記監視モジュールは、前記第１コアでのプログラムコードの実行を監視し、前記プログラムコードのホット領域を特定する監視ハードウェアを含む請求項２４に記載のプロセッサ。
【請求項２７】
前記監視モジュールが、前記第１コアでの前記プログラムコードの実行を監視し、前記プログラムコードの前記ホット領域を特定する間は、前記第２コアは低電力状態におかれ、
前記第２コアが、前記プログラムコードの前記変換されたホット領域を実行する間は、前記第１コアは低電力状態におかれる請求項２４に記載のプロセッサ。
【請求項２８】
前記第２コアが前記プログラムコードの前記変換されたホット領域を実行するのと平行して、前記第１コアは、前記プログラムコードのコールド領域を実行する請求項２４に記載のプロセッサ。
【請求項２９】
前記第１コア及び前記第２コアは、同時に最大電力状態で動作しない請求項２４に記載のプロセッサ。
【請求項３０】
コンピュータに、
前記コンピュータのプロセッサ内のアウトオブオーダ・プロセッサコアでのプログラムコードの実行を監視する段階と、
前記プログラムコードのホット部分を特定する段階と、
前記プログラムコードの最適化されたホット部分を取得するべく、前記コンピュータ内の協調設計プロセッサコアでの実行のために、前記プログラムコードの前記ホット部分を最適化する段階と、
前記プログラムコードの前記最適化されたホット部分を前記協調設計プロセッサコアに分配する段階と、
前記協調設計プロセッサコアで、前記プログラムコードの前記最適化されたホット部分を実行する段階と
を実行させるためのプログラム。
【請求項３１】
前記アウトオブオーダ・プロセッサコアでのプログラムコードの実行を監視する段階は、前記プログラムコードの部分と関連付けられた性能測定値を決定する段階を含む請求項３０に記載のプログラム。
【請求項３２】
前記プログラムコードのホット部分を特定する段階は、
前記性能測定値と性能閾値との比較に基づいて、前記プログラムコードの前記部分を前記プログラムコードのホット部分であると判断する段階を含む請求項３１に記載のプログラム。
【請求項３３】
前記協調設計プロセッサコアでの実行のために、前記プログラムコードの前記ホット部分を最適化する段階は、
前記プログラムコードの前記ホット部分を、前記アウトオブオーダ・プロセッサコアと関連付けられたデコードロジックが認識可能なネイティブ命令から、前記協調設計プロセッサコアと関連付けられたデコードロジックが認識可能な協調設計命令へと変換する段階を含む請求項３０に記載のプログラム。
【請求項３４】
前記プログラムコードの前記最適化されたホット部分を前記協調設計プロセッサコアに分配する段階は、
前記プログラムコードの前記最適化されたホット部分を、前記協調設計プロセッサコアと関連付けられたコードキャッシュに書き込む段階を含む請求項３０に記載のプログラム。
【請求項３５】
コンピュータに、
前記コンピュータの第１プロセッサコアに対して最適化された第１コード型を含むプログラムコードの領域がホットコードとして特定されたことに応答して、プログラムコードの前記領域を変換されたホット領域と関連付ける段階と、
前記プログラムコードの前記第１プロセッサコアでの実行の間に前記プログラムコードの前記領域に遭遇した場合に、前記プログラムコードの前記領域が前記変換されたホット領域と関連付けられていることに応答して、前記変換されたホット領域を第２プロセッサコアで実行する段階と
を実行させるためのプログラムであって、
前記変換されたホット領域は、前記第１コード型から、前記コンピュータの前記第２プロセッサコアに対して最適化される第２コード型へと変換されたプログラムコードの前記領域を含むプログラム。
【請求項３６】
前記第１プロセッサコアは、アウトオブオーダ・プロセッサコアを含み、
前記第１コード型は、前記アウトオブオーダ・プロセッサコアに対して最適化されたアウトオブオーダコード型を含み、
前記第２プロセッサコアは、インオーダプロセッサコアを含み、
前記第２コード型は、前記インオーダプロセッサコアに対して最適化されたインオーダ型を含む請求項３５に記載のプログラム。
【請求項３７】
前記アウトオブオーダ・プロセッサコアは、第１命令セットアーキテクチャ（ＩＳＡ）を認識するデコードロジックと関連付けられ、
前記第１コード型は更に、前記第１ＩＳＡに対して最適化され、
前記インオーダプロセッサコアは、第２ＩＳＡを認識するデコードロジックと関連付けられ、
前記第２コード型は更に、前記第２ＩＳＡに対して最適化される請求項３６に記載のプログラム。
【請求項３８】
前記プログラムコードの前記領域がホットコードとして特定されることは、
前記第１プロセッサコアと関連付けられたデコードロジックが、前記プログラムコードから少なくとも１つの命令をデコードして、プログラムコードの前記領域をホットコードであると示すことを含む請求項３５に記載のプログラム。
【請求項３９】
前記プログラムコードの前記領域がホットコードとして特定されることは、
前記コンピュータ内のハードウェアが、前記第１プロセッサコアでの前記プログラムコードの前記領域の実行を監視し、前記ハードウェアによる前記第１プロセッサコアでの前記プログラムコードの前記領域の実行の監視に基づいて、プログラムコードの前記領域がホットコードであると特定することを含む請求項３５に記載のプログラム。
【請求項４０】
前記プログラムコードの前記領域を変換されたホット領域と関連付ける段階は、
前記変換されたホット領域のリファレンスと関連付けられた前記プログラムコードの前記領域のリファレンスで、データ構造内のエントリを更新する段階を含み、
前記プログラムコードの前記領域の前記リファレンス及び前記変換されたホット領域の前記リファレンスはそれぞれ独立して、アドレス、命令アドレス、キャッシュメモリ内のロケーション、プログラムカウンタ値及び命令オペコードからなる一群から選択される請求項３５に記載のプログラム。
【請求項４１】
前記プログラムコードの前記第１プロセッサコアでの実行の間に、プログラムコードの前記領域に遭遇し、プログラムコードの前記領域が前記変換されたホット領域と関連付けられていることに応答して、前記第２プロセッサコアが前記変換されたホット領域を実行している間は、前記第１プロセッサコアを低電力状態に遷移させる請求項３５に記載のプログラム。
【請求項４２】
プログラムコードのホット部分を特定する段階と、
前記プログラムコードの最適化されたホット部分を取得するべく、インオーダプロセッサコアでの実行のために前記プログラムコードの前記ホット部分を最適化する段階と、
プロセッサのアウトオブオーダ・プロセッサコアで前記プログラムコードを実行する段階と、
前記アウトオブオーダ・プロセッサコアでの前記プログラムコードの実行の間に前記アウトオブオーダ・プロセッサコアが前記プログラムコードの前記ホット部分に遭遇し、プログラムコードの前記ホット部分が特定されたことに応答して、前記プログラムコードの前記ホット部分を前記アウトオブオーダ・プロセッサコアで実行するのではなく、前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行する段階と
を備える方法。
【請求項４３】
前記プログラムコードの前記ホット部分と、前記プログラムコードの前記最適化されたホット部分とを関連付ける段階を更に備える請求項４２に記載の方法。
【請求項４４】
前記プログラムコードの前記ホット部分と、前記プログラムコードの前記最適化されたホット部分とを関連付ける段階は、
前記プログラムコードの前記ホット部分のリファレンス及び前記最適化されたホット部分のリファレンスを、コードマッピングテーブルのエントリに格納する段階を含む請求項４３に記載の方法。
【請求項４５】
前記プログラムコードのホット部分を特定する段階は、
前記プログラムコードの部分を前記アウトオブオーダ・プロセッサコアで実行する間に、性能測定値を監視する段階と、
前記性能測定値と性能閾値との比較に基づいて、前記プログラムコードの前記部分をプログラムコードの前記ホット部分として特定する段階とを含む請求項４２に記載の方法。
【請求項４６】
前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行する間に前記性能測定値を監視する段階と、
前記プログラムコードの前記最適化されたホット部分の前記インオーダプロセッサコアでの実行の間の前記性能測定値が、前記アウトオブオーダ・プロセッサコアでの前記プログラムコードの部分の実行の間の前記性能測定値を下回る性能を示したことに応答して、前記プログラムコードの前記最適化されたホット部分を前記インオーダプロセッサコアで実行するのではなく、プログラムコードの前記ホット部分を前記アウトオブオーダ・プロセッサコアで実行することを示す段階と
を更に備える請求項４５に記載の方法。
【請求項４７】
前記プログラムコードの最適化されたホット部分を取得するべく、前記プログラムコードの前記ホット部分を、インオーダプロセッサコアでの実行のために最適化する段階は、
前記プログラムコードを前記プログラムコードの前記最適化されたホット部分へと変換するべく、バイナリ変換コードを実行する段階を含む請求項４２に記載の方法。
【請求項４８】
コンピュータに、請求項４２に記載の方法を実行させるためのプログラム。
【国際調査報告】
2013532331.tif 000008
2013532331.tif 000009