(57)【要約】      （修正有）【課題】ソフトウェアが使用可能な異なる種類のＣＰＵコアを把握して異種性を効果的に利用出来るようにする。【解決手段】１組の大きな物理プロセッサコア８０４と、大きな物理プロセッサコアに比べて比較的低い処理能力および比較的低い電力使用を有する１組の小さな物理プロセッサコア８０２と、ブートストラッププロセッサをイネーブルとするパッケージユニット８０５とを含み、ブートストラッププロセッサは同種の物理プロセッサコアを初期化し、異種プロセッサがシステムファームウェアインタフェースにとって同種のプロセッサに見えるようにする。【選択図】図８
2014225242.tif 000002
【特許請求の範囲】
【請求項１】
第１の命令セットおよび第１の消費電力レベルを有し、第１の性能レベルでスレッドを実行する第１の物理コアと、
第２の命令セットおよび第２の消費電力レベルを有し、第２の性能レベルでスレッドを実行する第２の物理コアと、
前記第１の物理コアおよび前記第２の物理コアに対して接続され、前記第１の物理コアを仮想コアを介してシステムファームウェアインタフェースにマッピングし、前記第２の物理コアを前記システムファームウェアインタフェースから隠す仮想−物理マッピング回路（Ｖ−Ｐマッピング回路）と
を備え、
前記第１の物理コアおよび前記第２の物理コアは動的なマルチコアユニット内に存在する
プロセッサ。
【請求項２】
前記第１の命令セットおよび前記第１の消費電力レベルを有する第３の物理コアをさらに備え、前記Ｖ−Ｐマッピング回路は第１の仮想コアを前記第１の物理コアに対してマッピングし、第２の仮想コアを前記第３の物理コアにマッピングして、一組のスレッドを前記第１の物理コアおよび前記第３の物理コアの間で並列に実行可能とする請求項１に記載のプロセッサ。
【請求項３】
実行されている前記一組のスレッドに関連して検出された特性に応じて、前記Ｖ−Ｐマッピング回路は、前記ファームウェアインタフェースにトランスペアレントに、前記第２の仮想コアを前記第２の物理コアにマッピングする請求項２に記載のプロセッサ。
【請求項４】
前記第１の消費電力レベルは前記第２の消費電力レベルよりも低い請求項３に記載のプロセッサ。
【請求項５】
前記第２の性能レベルは前記第１の性能レベルよりも高い請求項４に記載のプロセッサ。
【請求項６】
前記Ｖ−Ｐマッピング回路が前記第１の仮想コアおよび前記第２の仮想コアの１つ以上を前記第２の物理コアにマッピングすることによって、前記第２の物理コアはソフトウェアにアクセス可能となる請求項５に記載のプロセッサ。
【請求項７】
単一の物理コアがブートストラッププロセッサとして動作する請求項１〜６のいずれか一項に記載のプロセッサ。
【請求項８】
前記第１の物理コアは前記ブートストラッププロセッサとして動作する請求項７に記載のプロセッサ。
【請求項９】
前記ブートストラッププロセッサは前記第２の物理コアを初期化する請求項８に記載のプロセッサ。
【請求項１０】
一組の１つ以上の小さな物理プロセッサコアを提供する段階と、
前記一組の１つ以上の小さな物理プロセッサコアと比べて比較的高性能な処理能力および比較的高い電力使用を有する少なくとも１つの大きな物理プロセッサコアを提供する段階と、
一組の２つ以上の小さな物理プロセッサコアをシステムファームウェアインタフェースに対して露出する段階と、
前記少なくとも１つの大きな物理プロセッサコアを前記システムファームウェアインタフェースから隠す段階と
を備える方法。
【請求項１１】
スレッドを大きな物理プロセッサコアで実行可能とするべく、前記スレッドを第１の小さな物理プロセッサコアから前記大きな物理プロセッサコアに動的にスワップする段階をさらに備え、前記スワップする段階は、前記スレッドに対してトランスペアレントである請求項１０に記載の方法。
【請求項１２】
前記一組の１つ以上の小さな物理プロセッサコアのうちの一の小さな物理プロセッサコアをブートストラッププロセッサとして指定する段階と、
前記ブートストラッププロセッサによって、前記一組の１つ以上の小さな物理プロセッサコア内の各物理プロセッサコアを初期化する段階と、
前記ブートストラッププロセッサによって、前記少なくとも１つの大きな物理プロセッサコアを初期化する段階と
をさらに含む請求項１０に記載の方法。
【請求項１３】
仮想プロセッサコアと小さな物理プロセッサコアとの間のデフォルトマッピングによって、前記一組の１つ以上の小さな物理プロセッサコアはソフトウェアに対して露出される請求項１２に記載の方法。
【請求項１４】
前記少なくとも１つの大きな物理プロセッサコアは、前記システムファームウェアインタフェースから隠されており、１つ以上の仮想プロセッサコアを前記少なくとも１つの大きな物理プロセッサコアに対してトランスペアレントにマッピングすることによってオペレーティングシステムにアクセス可能となる請求項１３に記載の方法。
【請求項１５】
前記少なくとも１つの大きな物理プロセッサコアは、複数の命令セットを有するプロセッサコアに対するサポートを有するオペレーティングシステムにとって可視である請求項１４に記載の方法。
【請求項１６】
一組の小さな物理プロセッサコアと、
前記一組の小さな物理プロセッサコアと比べて比較的高性能な処理能力および比較的高い電力使用を有する少なくとも１つの大きな物理プロセッサコアと、
対応する一組の仮想プロセッサコアを介して、前記一組の小さな物理プロセッサコアをシステムファームウェアインタフェースに対して露出し、前記少なくとも１つの大きな物理プロセッサコアを前記システムファームウェアインタフェースから隠す仮想−物理マッピング論理（Ｖ−Ｐマッピング論理）と、
前記一組の小さな物理プロセッサコアから選択されたブートストラッププロセッサを指定および初期化するパッケージユニットと
を備えるシステム。
【請求項１７】
前記Ｖ−Ｐマッピング論理は、各仮想コアを前記一組の小さな物理プロセッサコア内の物理プロセッサコアにマッピングして、第１の組のスレッドを前記一組の小さな物理プロセッサコア間で並列に実行可能とする請求項１６に記載のシステム。
【請求項１８】
前記一組の物理プロセッサコアから選択された一のブートストラッププロセッサをさらに備え、前記ブートストラッププロセッサは、
前記一組の小さな物理プロセッサコア内の各物理プロセッサコアを初期化し、
前記少なくとも１つの大きな物理コアを初期化する、請求項１７に記載のシステム。
【請求項１９】
前記少なくとも１つの大きな物理プロセッサコアはマスクされたアイドル状態を含み、前記少なくとも１つの大きな物理プロセッサコアが前記マスクされたアイドル状態にある場合、前記少なくとも１つの大きな物理プロセッサコアが仮想コアにマッピングされない請求項１８に記載のシステム。
【請求項２０】
第１の命令セットおよび第１の消費電力レベルを有し、第１の性能レベルでスレッドを実行する第１の物理コアと、
第２の命令セットおよび第２の消費電力レベルを有し、第２の性能レベルでスレッドを実行する第２の物理コアと、
前記第１の命令セットおよび前記第１の消費電力レベルを有し、前記第１の性能レベルでスレッドを実行する第３の物理コアと、
前記第１の物理コア、前記第２の物理コア、および前記第３の物理コアに対して接続される仮想−物理マッピング回路（Ｖ−Ｐマッピング回路）と
を備え、前記Ｖ−Ｐマッピング回路は、
第１の仮想コアを介して前記第１の物理コアをシステムファームウェアインタフェースにマッピングし、
前記第２の物理コアを前記システムファームウェアインタフェースから隠し、
第２の仮想コアを介して前記第３の物理コアを前記システムファームウェアインタフェースにマッピングして、一組のスレッドが前記第１の物理コアおよび前記第３の物理コアの間で並列に実行可能とし、
実行されている前記一組のスレッドに関連して検出された特性に応じて、前記システムファームウェアインタフェースに対してトランスペアレントに前記第２の仮想コアを前記第２の物理コアにマッピングし、
前記第１の物理コア、前記第２の物理コア、および前記第３の物理コアは動的なマルチコアユニット内に存在するプロセッサ。
【請求項２１】
前記第１の消費電力レベルは前記第２の消費電力レベルよりも低く、前記第２の性能レベルは前記第１の性能レベルよりも高い請求項２０に記載のプロセッサ。
【請求項２２】
前記Ｖ−Ｐマッピング回路によって前記第１の仮想コアおよび前記第２の仮想コアのうちの１つ以上を前記第２の物理コアにマッピングすることによって、前記第２の物理コアがソフトウェアにアクセス可能とする請求項２０に記載のプロセッサ。
【請求項２３】
前記プロセッサの単一の物理コアはブートストラッププロセッサとして動作する請求項２２に記載のプロセッサ。
【請求項２４】
前記第１の物理コアは前記ブートストラッププロセッサとして動作する請求項２３に記載のプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願は、本明細書において援用される２０１３年３月１５日に出願された仮出願番号第６１／８０１６１５の利点に関しおよび利点を主張するものである。
【０００２】
本発明は、一般に、コンピュータプロセッサの分野に関する。より詳細には、本発明は異種プロセッサの初期化およびブートを行う装置および方法に関する。
【背景技術】
【０００３】
最近のハンドヘルド装置は、その小さなサイズのため、消費電力および熱放散の両方に関する制約を有するが、消費者はさらに高度の演算能力を必要とするさらに高度な機能を期待している。消費電力の削減と演算資源の増加の両方を実現するために、異種プロセッサを利用可能である。複数の種類の演算要素を使用して演算タスクを実行可能であるため、異種コンピューティングアーキテクチャは同種アーキテクチャを上回るような独自の利点を提供しており、それによって低強度の演算タスクは省電力の演算要素によって実行可能となり、高強度の演算タスクはより高性能の演算要素上で実行される。
【発明の概要】
【０００４】
異種コンピューティングアーキテクチャの周知の利点にもかかわらず、現実にはＣＰＵコア用の異種コンピューティングの例は少ない。そのようなアーキテクチャは、どのように各ＣＰＵコアタイプに対して適切にタスクのスケジューリングを行うかを意識するソフトウェアが必要である（この場合、演算要素はＣＰＵコアである）。ハードウェアが進化しコアタイプが変化しているため、ソフトウェア（例えばオペレーティングシステム）が使用可能な異なる種類のＣＰＵコアを把握してどのように異種性を効果的に利用するかを把握するのが非常に難しい。
【０００５】
以下の図面を参照した以下の詳細な説明により、本発明のより深い理解が得られる。
【図面の簡単な説明】
【０００６】
【図１Ａ】本発明の実施形態による例示のインオーダーパイプラインと例示のレジスタリネーミング、アウトオブオーダー発行／実行パイプラインとの両方を示すブロック図である。
【０００７】
【図１Ｂ】本発明の実施形態による、インオーダーアーキテクチャコアと、プロセッサ内に含まれる例示のレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの例示の実施形態との両方を示すブロック図である。
【０００８】
【図２】本発明の実施形態による、単一コアプロセッサと、統合メモリコントローラおよびグラフィックスを有するマルチコアプロセッサのブロック図である。
【０００９】
【図３】本発明の一実施形態によるシステムのブロック図を示す。
【００１０】
【図４】本発明の一実施形態による第２のシステムのブロック図を示す。
【００１１】
【図５】本発明の一実施形態による第３のシステムのブロック図を示す。
【００１２】
【図６】本発明の一実施形態によるシステムオンチップ（ＳｏＣ）のブロック図を示す。
【００１３】
【図７】本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を比較するブロック図を示す。
【００１４】
【図８】異種コアコンピューティングアーキテクチャの一実施形態を示す。
【００１５】
【図９Ａ】一実施形態によるシステムブートフローの全体を示すフロー図である。
【図９Ｂ】一実施形態によるシステムブートフローの全体を示すフロー図である。
【００１６】
【図１０】一実施形態による、ファームウェアとマイクロコードエレメントとの間で送信されるデータおよびメッセージを示すシーケンス図である。
【００１７】
【図１１Ａ】隠された大きなコアおよび複数の可視の小さなコアを有するシステムの一実施形態を示す。
【図１１Ｂ】隠された大きなコアおよび複数の可視の小さなコアを有するシステムの一実施形態を示す。
【発明を実施するための形態】
【００１８】
例示を目的として、以下で説明する本発明の実施形態の十分な理解を実現するため、以下の記載において数多くの特定の詳細を述べる。ただし、本発明の実施形態はそれらの特定の詳細の一部がなくても実現可能であることは、当業者にとって明らかであろう。他の例では、本発明の実施形態の基本原理を曖昧にすることを避けるため、周知の構造および装置をブロック図の形態で示す。
【００１９】
＜例示のプロセッサアーキテクチャおよびデータタイプ＞
図１Ａは、発明の実施形態による例示のインオーダーパイプラインと例示のレジスタリネーミング、アウトオブオーダー発行／実行パイプラインとの両方を示すブロック図である。図１Ｂは、本発明の実施形態による、インオーダーアーキテクチャコアと、プロセッサ内に含まれる例示のレジスタリネーミング、アウトオブオーダー発行／実行アーキテクチャコアの例示の実施形態との両方を示すブロック図である。図１Ａ〜１Ｂの実線のボックスはインオーダーパイプラインとインオーダーコアを示し、任意で追加された点線の四角はレジスタリネーム、アウトオブオーダー発行／実行のパイプラインとコアを示す。インオーダー態様がアウトオブオーダー態様のサブセットであるとして、アウトオブオーダー態様を説明する。
【００２０】
図１Ａにおいて、プロセッサパイプライン１００は、フェッチステージ１０２、長デコードステージ１０４、デコードステージ１０６、割付けステージ１０８、リネームステージ１１０、スケジューリング（ディスパッチまたは発行として知られる）ステージ１１２、レジスタリード／メモリリードステージ１１４、実行ステージ１１６、ライトバック／メモリライトステージ１１８、例外処理ステージ１２２、およびコミットステージ１２４を含む。
【００２１】
図１Ｂは、実行エンジン部１５０に接続されたフロントエンド部１３０を含むプロセッサコア１９０を示す。フロントエンド部１３０および実行エンジン部１５０は、ともにメモリ部１７０に接続される。コア１９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、または混合または代替のコアタイプでもよい。さらに別の選択肢として、コア１９０は例えばネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス演算ユニット（ＧＰＧＰＵ）コア、グラフィックスコアなどの特定用途のコアでもよい。
【００２２】
フロントエンド部１３０は、命令キャッシュ部１３４に接続された分岐予測部１３２を含む。命令キャッシュ部１３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１３６に接続され、命令ＴＬＢ１３６は命令フェッチ部１３８に接続され、命令フェッチ部１３８はデコード部１４０に接続される。デコード部１４０（またはデコーダ）は命令をデコードし、出力として１つ以上のマイクロ操作、マイクロコードエントリポイント、マイクロ命令、その他の命令、またはその他の制御信号を作成するとしてよい。これらは元の命令からデコードされるか、または元の命令を反映するか、または元の命令から導出される。デコード部１４０（またはデコーダ）は、様々な異なる機構を使用して実現されてもよい。適した機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（ＰＬＡ）、マイクロコード読出専用メモリ（ＲＯＭ）等を含むが、それに限らない。一実施形態において、コア１９０は、特定のマクロ命令に対するマイクロコードを格納するマイクロコードＲＯＭなどの媒体を（例えばデコード部１４０またはフロントエンド部１３０に）含む。デコード部１４０は、実行エンジン部１５０のリネーム／アロケータ部１５２に接続される。
【００２３】
実行エンジン部１５０は、リタイアメント部１５４に接続されたリネーム／アロケータ部１５２と、一組の１つ以上のスケジューラ部１５６とを含む。スケジューラ部１５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表すものである。スケジューラ部１５６は、物理レジスタファイル部１５８に接続される。物理レジスタファイル部１５８のそれぞれは１つ以上の物理レジスタファイルを表し、それぞれは、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス（例えば次に実行される命令のアドレスである命令ポインタ）等の１つ以上の異なるデータタイプを格納する。一実施形態において、物理レジスタファイル部１５８は、ベクトルレジスタ部、書き込みマスクレジスタ部、スカラレジスタ部を含む。これらのレジスタ部は、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供してもよい。物理レジスタファイル部１５８は、レジスタリネーミングおよびアウトオブオーダー実行が実行される様々な方法（例えば、リオーダーバッファおよびリタイアメントレジスタファイルを使用、フューチャファイル、ヒストリバッファ、およびリタイアメントレジスタファイルを使用、レジスタマップおよびレジスタのプールを使用等）を図示するためにリタイアメント部１５４と重なっている。リタイアメント部１５４および物理レジスタファイル部１５８は、実行クラスタ１６０に接続される。実行クラスタ１６０は、一組の１つ以上の実行部１６２と、一組の１つ以上のメモリアクセス部１６４を含む。実行部１６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点等）に対して様々な演算（例えば、シフト、加算、減算、乗算）を実行してもよい。いくつかの実施形態は特定の機能または一組の機能に専用の実行ユニットを多数含んでもよいが、他の実施形態は全機能をすべてが実行する１つの実行ユニットのみまたは複数の実行ユニットを含んでもよい。特定の実施形態は特定のタイプのデータ／演算に対して個別のパイプラインを作成するため、スケジューラ部１５６、物理レジスタファイル部１５８、および実行クラスタ１６０は複数の可能性があるように示されている（例えば、それぞれがそれ自体のスケジューラ部、物理レジスタファイル部および／または実行クラスタを有するスカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプライン。個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセス部１６４を有する特定の実施形態が実現される）。なお、個別のパイプラインが使用される場合、そのようなパイプラインの１つ以上はアウトオブオーダー発行／実行でもよく、残りはインオーダーでもよい。
【００２４】
一組のメモリアクセス部１６４は、メモリ部１７０に接続される。メモリ部１７０は、データキャッシュ部１７４に接続されるデータＴＬＢ部１７２を含み、データキャッシュ部１７４はレベル２（Ｌ２）キャッシュ部１７６に接続される。一実施例において、メモリアクセス部１６４はロード部、アドレス格納部、データ格納部を含んでもよく、それぞれはメモリ部１７０のデータＴＬＢ部１７２に接続される。命令キャッシュ部１３４は、メモリ部１７０内のレベル２（Ｌ２）キャッシュ部１７６にさらに接続される。Ｌ２キャッシュ部１７６は、１つ以上の他のレベルのキャッシュに接続され、最終的に主メモリに接続される。
【００２５】
例として、レジスタリネーミング、アウトオブオーダー発行／実行コアアーキテクチャの一例は、以下のパイプライン１００を実現してもよい。１）命令フェッチ１３８は、フェッチおよび長デコードステージ１０２および１０４を実行し、２）デコード部１４０はデコードステージ１０６を実行し、３）リネーム／アロケータ部１５２は割付けステージ１０８およびリネームステージ１１０を実行し、４）スケジューラ部１５６はスケジュールステージ１１２を実行し、５）物理レジスタファイル部１５８およびメモリ部１７０はレジスタリード／メモリリードステージ１１４を実行し、実行クラスタ１６０は実行ステージ１１６を実行し、６）メモリ部１７０および物理レジスタファイル部１５８はライトバック／メモリライトステージ１１８を実行し、７）様々な処理部が例外処理ステージ１２２に関与してもよく、８）リタイアメント部１５４および物理レジスタファイル部１５８はコミットステージ１２４を実行する。
【００２６】
コア１９０は、上述した命令を含む１つ以上の命令セットに対応してもよい（例えば、ｘ８６命令セット（新しいバージョンではいくつかの拡張版が追加された）、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セット、カリフォルニア州ＳｕｎｎｙｖａｌｅのＡＲＭ  Ｈｏｌｄｉｎｇｓ社のＡＲＭ命令セット（ＮＥＯＮなど、オプション追加の拡張版がある）など）。一実施形態において、コア１９０は、パックデータ命令セットの拡張版をサポートする論理を含み（例えば後述するＡＶＸ１、ＡＶＸ２、および／または汎用的なベクトルと親和性のある命令フォーマット（Ｕ＝０および／またはＵ＝１）の一部の形態）、それによって多くのマルチメディアアプリケーションによって使用される演算がパックデータを使用して実行可能となる。
【００２７】
なお、コアはマルチスレッディング（演算またはスレッドの２つ以上の並列組の実行）をサポートしてもよく、時間スライスマルチスレッディング、同時マルチスレッディング（単一の物理コアは、物理コアが同時マルチスレッディングを実行するスレッドのそれぞれに対して論理コアを設ける）、またはその組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ技術でも見られる、時間スライスフェッチおよびデコード後に同時マルチスレッディングなど）を含む様々な方法でマルチスレッディングサポートするとしてよいと理解されたい。
【００２８】
レジスタリネームはアウトオブオーダー実行のコンテキストで説明されているが、レジスタリネームはインオーダーアーキテクチャにおいて使用されてもよい。プロセッサの実施例は、さらに、個別の命令およびデータキャッシュ部１３４／１７４および共有Ｌ２キャッシュ部１７６を含むが、代替実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュなど、命令およびデータの両方に対して単一の内部キャッシュを有してもよい。いくつかの実施形態において、本システムは内部キャッシュと、コアおよび／またはプロセッサの外部のキャッシュとの組み合わせを含んでもよい。もしくは、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【００２９】
図２は、本発明の実施形態による、複数のコア、統合メモリコントローラ、および統合グラフィックスを含んでもよいプロセッサ２００のブロック図である。図２の実線のボックスは単一コア２０２Ａを有するプロセッサ２００、システムエージェント２１０、一組の１つ以上のバスコントローラ部２１６を示し、任意で追加された点線のボックスは、複数のコア２０２Ａ〜Ｎを有する代替のプロセッサ２００、システムエージェント部２１０内の一組の１つ以上の統合メモリコントローラ部２１４、および特定用途論理２０８を表わす。
【００３０】
したがって、プロセッサ２００の異なる実装は、１）統合グラフィックスおよび／または科学的（スループット）論理（１つ以上のコアを含む）である特定用途の論理２０８と、１つ以上の汎用コア（例えば汎用インオーダーコア、汎用アウトオブオーダーコア、その２つの組み合わせ）であるコア２０２Ａ〜Ｎとを有するＣＰＵと、２）主にグラフィックスおよび／または科学的（スループット）を意図した多数の特定用途のコアであるコア２０２Ａ〜Ｎを有するコプロセッサと、３）多数の汎用インオーダーコアであるコア２０２Ａ〜Ｎを有するコプロセッサとを含む。したがって、プロセッサ２００は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（汎用グラフィックス演算ユニット）、高スループットのｍａｎｙ  ｉｎｔｅｇｒａｔｅｄ  ｃｏｒｅ（ＭＩＣ）コプロセッサ（３０以上のコアを含む）、埋込み型プロセッサなどの汎用プロセッサ、コプロセッサまたは特定用途のプロセッサでもよい。プロセッサは、１つ以上のチップ上に実装されてもよい。プロセッサ２００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの多くの処理技術のいずれかを使用して１つ以上の基板の一部でもよく、および／またはその基板上に実装されてもよい。
【００３１】
メモリ階層は、コア内の１つ以上のレベルのキャッシュと、一組の１つ以上の共有キャッシュ部２０６と、一組の統合メモリコントローラ部２１４に接続された外部メモリ（不図示）とを含む。一組の共有キャッシュ部２０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、またはその他のレベルのキャッシュなどの１つ以上の中間レベルキャッシュと、ラストレベルキャッシュ（ＬＬＣ）と、および／またはその組み合わせとを含んでもよい。一実施形態において、リングをベースとする相互接続部２１２は、統合グラフィックス論理２０８と、一組の共有キャッシュ部２０６と、システムエージェント部２１０／統合メモリコントローラ部２１４とを相互接続するが、代替の実施形態はそのような構成要素の相互接続に対して任意の数の周知技術を使用してもよい。一実施形態において、１つ以上のキャッシュ部２０６とコア２０２Ａ〜Ｎとの間で整合性は維持される。
【００３２】
いくつかの実施形態において、コア２０２Ａ〜Ｎの１つ以上は、マルチスレッディングを実行可能である。システムエージェント２１０は、コア２０２Ａ〜Ｎを調整して動作させるコンポーネントを含む。システムエージェント部２１０は、例えば電力調整装置（ＰＣＵ）および表示部を含んでもよい。ＰＣＵは、コア２０２Ａ〜Ｎおよび統合グラフィックス論理２０８の電力状態を調整するために必要な論理およびコンポーネントでもよく、またはそれらを含んでもよい。表示部は、１つ以上の外部接続ディスプレイを駆動するためのものである。
【００３３】
コア２０２Ａ〜Ｎはアーキテクチャ命令セットにおいて同種でも異種でもよい。すなわち、コア２０２Ａ〜Ｎの２つ以上は同じ命令セットを実行可能でもよく、残りは命令セットまたは異なる命令セットのサブセットのみを実行可能でもよい。一実施形態において、コア２０２Ａ〜Ｎは異種であり、後述する「小さな」コアおよび「大きな」コアを含む。
【００３４】
図３〜６は、例示のコンピュータアーキテクチャのブロック図である。ノート型ＰＣ、デスクトップＰＣ、ハンドヘルドＰＣ、携帯用情報端末（ＰＤＡ）、エンジニアリングワークステーション、サーバ、ネットワーク装置、ネットワークハブ、スイッチ、埋込型プロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックス装置、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤー、ハンドヘルド機器、その他の様々な電子装置に対する当業界において既知の他のシステム設計および構成も適している。一般に、本明細書で開示されているようなプロセッサおよび／または他の実行論理を取り入れることが可能な多種多様なシステムまたは電子装置が通常適している。
【００３５】
図３は、本発明の一実施形態によるシステム３００のブロック図を示す。システム３００は、コントローラハブ３２０に接続される１つ以上のプロセッサ３１０、３１５を含んでもよい。一実施形態において、コントローラハブ３２０は、グラフィックスメモリコントローラハブ（ＧＭＣＨ）３９０および入出力ハブ（ＩＯＨ）３５０（別のチップ上にあってもよい）を含み、ＧＭＣＨ３９０はメモリ３４０およびコプロセッサ３４５に接続されるメモリコントローラおよびグラフィックスコントローラを含み、ＩＯＨ３５０は、入出力（Ｉ／Ｏ）装置３６０をＧＭＣＨ３９０に対して接続する。もしくは、メモリコントローラとグラフィックスコントローラの一方または両方がプロセッサ内に統合され（本明細書で説明する通り）、メモリ３４０およびコプロセッサ３４５がＩＯＨ３５０を有する単一のチップ内のプロセッサ３１０およびコントローラハブ３２０に対して直接接続される。
【００３６】
追加のプロセッサ３１５の任意の特性を、図３にて点線で示す。各プロセッサ３１０、３１５は、本明細書で説明する処理コアの１つ以上を含んでもよく、プロセッサ２００のいずれかバージョンでもよい。
【００３７】
メモリ３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはその２つの組み合わせでもよい。少なくとも１つの実施形態において、コントローラハブ３２０は、フロントサイドバス（ＦＳＢ）などのマルチドロップバス、ＱｕｉｃｋＰａｔｈインターコネクト（ＱＰＩ）などのポイントツーポイントインタフェース、または同様の接続３９５を介してプロセッサ３１０、３１５と通信を行う。
【００３８】
一実施形態において、コプロセッサ３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋込み型プロセッサ等の特定用途のプロセッサである。一実施形態において、コントローラハブ３２０は、統合グラフィックスアクセラレータを含んでもよい。
【００３９】
アーキテクチャ、マイクロアーキテクチャ、熱特性、消費電力特性などを含む様々なメトリックに関して、物理リソース３１０、３１５間には大幅な違いがあってもよい。
【００４０】
一実施形態において、プロセッサ３１０は、一般的な種類のデータ処理演算を制御する命令を実行する。命令内に埋込まれているのは、コプロセッサ命令でもよい。プロセッサ３１０は、それらのコプロセッサ命令を、付随のコプロセッサ３４５によって実行されるべき種類のものとして認識する。したがって、プロセッサ３１０は、コプロセッサ３４５に対して、コプロセッサバスまたはその他の相互接続上でコプロセッサ命令（コプロセッサ命令を表わす制御信号）を発行する。コプロセッサ３４５は、受信されたコプロセッサ命令を受け付けて実行する。
【００４１】
図４は、本発明の一実施形態による、第１のより具体的な例示のシステム４００のブロック図を示す。図４に示すように、マルチプロセッサシステム４００はポイントツ−ポイント相互接続システムであり、ポイントツ−ポイント相互接続４５０を介して接続される第１のプロセッサ４７０および第２のプロセッサ４８０を含む。プロセッサ４７０および４８０のそれぞれは、プロセッサ２００のいずれかのバージョンでもよい。本発明の一実施形態において、プロセッサ４７０および４８０は、それぞれ、プロセッサ３１０および３１５であり、コプロセッサ４３８はコプロセッサ３４５である。別の実施形態において、プロセッサ４７０および４８０は、それぞれ、プロセッサ３１０およびコプロセッサ３４５である。
【００４２】
図示したプロセッサ４７０および４８０は、統合メモリコントローラ（ＩＭＣ）部４７２および４８２をそれぞれ含む。プロセッサ４７０は、さらに、ポイントツーポイント（Ｐ−Ｐ）インタフェース４７６および４７８をバスコントローラ部の一部として含む。同様に、第２のプロセッサ４８０はＰ−Ｐインタフェース４８６および４８８を含む。プロセッサ４７０、４８０は、Ｐ−Ｐインタフェース回路４７８、４８８を使用してＰ−Ｐインタフェース４５０を介して情報を交換してもよい。図４に示すように、ＩＭＣ４７２および４８２は各プロセッサをそれぞれのメモリ、すなわちメモリ４３２およびメモリ４３４に接続する。メモリ４３２およびメモリ４３４は、それぞれのプロセッサにローカルで取り付けられた主メモリの一部でもよい。
【００４３】
プロセッサ４７０、４８０は、Ｐ−Ｐインタフェース回路４７６、４９４、４８６、４９８を使用して、個々のＰ−Ｐインタフェース４５２、４５４を介してチップセット４９０と情報を交換してもよい。任意で、チップセット４９０は、高性能インタフェース４３９を介してコプロセッサ４３８と情報を交換してもよい。一実施形態において、コプロセッサ４３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋込み型プロセッサ等の特定用途のプロセッサである。
【００４４】
共有キャッシュ（不図示）は、プロセッサが低電力モードにされると、一方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納されるようにするために、いずれかのプロセッサ内に含まれてもよく、またはポイントツーポイント相互接続を介して各プロセッサと接続して両プロセッサの外部に配置されるとしてもよい。
【００４５】
チップセット４９０は、インタフェース４９６を介して第１のバス４１６に対して接続されてもよい。一実施形態において、第１のバス４１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスでもよく、またはＰＣＩ  Ｅｘｐｒｅｓｓバスなどのバスまたは他の第三世代の入出力相互接続バスでもよい。ただし、本発明の範囲はそれに限定されない。
【００４６】
図４に示すように、様々な入出力装置４１４は、第１のバス４１６を第２のバス４２０に対して接続するバスブリッジ４１８とともに第１のバス４１６に対して接続されてもよい。一実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えばグラフィックスアクセラレータまたはデジタル信号処理（ＤＳＰ）部など）、フィールドブログラマブルゲートアレイ、またはその他のプロセッサなどの１つ以上の追加のプロセッサ４１５が第１のバス４１６に対して接続されているとしてもよい。一実施形態において、第２のバス４２０はＬｏｗ  Ｐｉｎ  Ｃｏｕｎｔ  （ＬＰＣ）バスでもよい。一実施形態において、例えば、キーボードおよび／またはマウス４２２、通信装置４２７、さらに命令／コードおよびデータ４３０を含むことが可能なディスクドライブや他の大容量格納装置などの格納部４２８を含む様々な装置が、第２のバス４２０に対して接続されてもよい。さらに、音声Ｉ／Ｏ４２４が、第２のバス４２０に接続されてもよい。なお、その他のアーキテクチャも可能である。図４のポイントツーポーンとアーキテクチャの代わりに、例えば、システムがマルチドロップバスまたは他の同様のアーキテクチャを実現してもよい。
【００４７】
図５は、本発明の一実施形態によるより具体的な例示の第２のシステム５００のブロック図を示す。図４および図５に示す同様のものには同様の参照番号を付し、図５の他の態様を曖昧にすることを避けるため、図４の特定の態様を図５にて省略した。
【００４８】
図５は、プロセッサ４７０、４８０がそれぞれ統合メモリおよび入出力制御論理（「ＣＬ」）４７２および４８２を含むことができることを図示する。したがって、ＣＬ４７２、４８２は、統合メモリコントローラ部を含み、さらに入出力制御論理も含んでもよい。図５は、メモリ４３２、４３４がＣＬ４７２、４８２に対して接続されるだけでなく、入出力装置５１４も制御論理４７２、４８２に対して接続されることを示す。レガシー入出力装置５１５は、チップセット４９０に対して接続される。
【００４９】
図６は、本発明の一実施形態によるＳｏＣ６００のブロック図を示す。図２と同様の要素には同様の参照番号を付す。また、点線のボックスは最先端ＳｏＣに関する任意の特徴である。図６において、相互接続部６０２は、一組の１つ以上のコア２０２Ａ〜Ｎおよび共有キャッシュ部２０６を含むアプリケーションプロセッサ６１０と、システムエージェント部２１０と、バスコントローラ部２１６と、統合メモリコントローラ部２１４と、統合グラフィックス論理、画像処理プロセッサ、音声プロセッサ、映像プロセッサを含んでもよい一組の１つ以上のコプロセッサ６２０と、スタティックランダムアクセスメモリ（ＳＲＡＭ）部６３０と、ダイレクトメモリアクセス（ＤＭＡ）部６３２と、１つ以上の外部ディスプレイに対して接続するための表示部６４０とに対して接続される。一実施形態において、コプロセッサ６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋込み型プロセッサ等の特定用途のプロセッサを含む。
【００５０】
本明細書において開示されている機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装形態の組み合わせによって実装されてもよい。本発明の実施形態は、少なくとも１つのプロセッサと、格納システム（揮発性および不揮発性メモリおよび／または格納要素を含む）と、少なくとも１つの入力装置と、少なくとも１つの出力装置とを備えるプログラミング可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【００５１】
図４に示すコード４３０などのプログラムコードは、本明細書に記載の機能を実行し出力情報を生成する入力命令に対して適用されてもよい。出力情報は、既知の方法において、１つ以上の出力装置に対して適用されてもよい。この用途を目的として、処理システムは、例えばデジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【００５２】
上記プログラムコードは、処理システムとの通信のために上位プロシージャ言語またはオブジェクト指向プログラミング言語で実装されてもよい。また、プログラムコードは必要に応じてアセンブリ言語または機械言語で実装されてもよい。実際に、本明細書において記載された各機構は任意の特定のプログラミング言語に範囲が限定されるものではない。いずれの場合も、言語はコンパイラ形式言語またはインタプリタ形式の言語でよい。
【００５３】
少なくとも１つの実施形態の１つ以上の態様は、機械可読媒体に格納されプロセッサ内の様々な論理を表現する代表命令によって実装されてもよく、機械によって読み出されると、その機械に本明細書に記載の技術を実行する論理を作成させる。そのような「ＩＰコア」として知られる表現は、有形の機械可読媒体に格納され、様々な消費者または製造設備に供給され、論理またはプロセッサを実際に作成する製造機械に対してロードされてもよい。
【００５４】
そのような機械可読記憶媒体は、機械または装置によって製造または形成される物の非一時的な有形の構成を含んでもよく、これらに限定されないが、ハードディスクなどの記憶媒体や、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク読取専用メモリ（ＣＤ−ＲＯＭ）、書き換え可能なコンパクトディスク（ＣＤ−ＲＷ）、光磁気ディスクなどの他の種類のディスク、読取専用メモリ（ＲＯＭ）などの半導体装置、ランダムアクセスメモリ（ＲＡＭ）、例えば、動的ランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）、消去可能プログラマブル読取専用メモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブル読取専用メモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気または光カード、またはその他の電子命令の格納に適した種類の媒体を含んでもよい。
【００５５】
したがって、本発明の実施形態は、さらに、本明細書に記載の構造、回路、装置、プロセッサおよび／またはシステムの特徴を定義するハードウェア記述言語（ＨＤＬ）などの命令または設計データを含む非一時的な有形の機械可読媒体を含む。そのような実施形態は、プログラム製品と呼ばれる場合もある。
【００５６】
いくつかの場合において、命令コンバータを使用して、ソース命令セットからターゲット命令セットへ命令を変換してもよい。例えば、命令コンバータは、命令をコアによって処理される１つ以上の他の命令にトランスレート（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを使用）、モーフィング、エミュレート、もしくは変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはその組み合わせにおいて実装されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または部分的にプロセッサ上および部分的にプロセッサ外としてもよい。
【００５７】
図７は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令コンバータの使用を比較するブロック図である。図示した実施形態において、命令コンバータはソフトウェア命令コンバータである。ただし、代替として、命令コンバータはソフトウェア、ファームウェア、ハードウェア、またはその様々な組み合わせにおいて実装されてもよい。図７は、高級言語７０２のプログラムがｘ８６コンパイラ７０４を使用してコンパイルされて少なくとも１つｘ８６命令セットコアを有するプロセッサ７１６によってネイティブで実行可能なｘ８６バイナリコード７０６を作成できることを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ７１６は、少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサとほぼ同じ結果を得られるように、（１）インテル社製ｘ８６命令セットコアの命令セットの大部分または（２）少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサ上での動作を目的としたアプリケーションまたはその他のソフトウェアのオブジェクトコードバージョンを互換性のある状態を保って実行もしくは処理することによって少なくとも１つのｘ８６命令セットコアを有するインテル社製プロセッサとほぼ同じ機能を実行できる任意のプロセッサを表わす。ｘ８６コンパイラ７０４は、追加の連携処理を施して、もしくは施さずに、少なくとも１つのｘ８６命令セットコアを有するプロセッサ７１６上で実行することが可能なｘ８６バイナリコード７０６（例えばオブジェクトコードなど）を作成するように動作可能なコンパイラを表わす。同様に、図７は、高級言語７０２のプログラムが代替の命令セットコンパイラ７０８を使用してコンパイルされて、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ７１４（例えば、カリフォルニア州ＳｕｎｎｙｖａｌｅのＭＩＰＳ  Ｔｅｃｈｎｏｌｏｇｉｅｓ社のＭＩＰＳ命令セットを実行する、および／または英国ケンブリッジのＡＲＭ  Ｈｏｌｄｉｎｇｓ社のＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブで実行可能な代替の命令セットバイナリコード７１０を作成することを示す。命令コンバータ７１２は、ｘ８６バイナリコード７０６を、ｘ８６命令セットコアを有さないプロセッサ７１４によってネイティブで実行可能なコードに変換するために使用される。この変換されたコードは代替の命令セットバイナリコード７１０と同じには簡単にはならない。これをできる命令コンバータは作成が難しいためである。ただし、変換されたコードは通常の演算を実現し、代替の命令セットからの命令からなることが可能である。したがって、命令コンバータ７１２はエミュレーション、シミュレーションまたはその他の方法によって、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表わし、ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたはその他の電子装置がｘ８６バイナリコード７０６を実行できるようにする。
【００５８】
＜システムに対してトランスペアレントな異種コンピューティング＞
以下に記載する本発明の実施形態は、システムから全体的に隠し、プロセッサ内のすべての異種性を意識した論理および発見的方法を統合することによって、システムファームウェアインタフェースおよびオペレーティングシステム（ＯＳ）における異種性に対するサポートの欠如を克服するものである。一方、従来のＣＰＵでは、各タスクのコアに対する割り当ては、ソフトウェア（典型的にＯＳ）によってのみ行われていた。本発明の一実施形態においては、この割り当てを２つの部分に分割する。ソフトウェアは露出された同種のコアに対するソフトウェア処理のスケジューリングを継続するが、ハードウェアは露出されたコアと隠された異種コアとの間のスレッドを動的にスワップする。
【００５９】
システムに対して同種の演算要素のみを露出することによって、ハードウェアの異種性がシステムファームウェアインタフェース（例えばＢＩＯＳ、ＥＦＩ、またはＵＥＦＩ）、ＯＳおよび可能なアプリケーションレベルのソフトウェアのほぼすべてを含むソフトウェアから全体的に隠される。したがって、システムは同種のコアのみを有するプロセッサ上で動作しているかのようにブートして動作する。本実施形態のプロセッサハードウェアは、ソフトウェアに対して露出された演算要素を、使用可能な隠された物理演算要素の１つ以上に対して動的にマッピングする論理を含む。さらに、この論理は、各種のプロセッサにおける動作の整合性および様々なコアタイプ間で作業を移行する機能を保つ。ハードウェアが動的に物理演算要素を選択する特定の機構は、システムに対して透過的である。
【００６０】
異種選択された演算要素を含むことによって、プロセッサハードウェアは、非常に異なる種類の演算タスクに関して、非常に異なる動作条件においても非常に効率よく動作する。例えば、電力効率の良い小さなコアと、高性能の大きなコアの両方を含むＣＰＵを使用して、電力が制限されている（性能は重要ではない）時間、さらに高性能が必要とされている（ただし電力は制限されていない）時間にソフトウェアを効率よく動作させることができる。ハードウェア内における演算要素の異なる組み合わせを選択する際は、そのシステム上でどの種類のタスクをどのような条件で動作させる必要があるのかに関する設計要件に基づく。
【００６１】
異種システムには、プロセッサコア、グラフィックスプロセッサユニット（ＧＰＵ）、および固定機能アクセラレータ（例えばソートおよびループなどの一般的な関数の加速）などの異なる種類の演算要素を含んでもよい。以下に記載する本発明の実施形態において、異種システムは、少ない数の性能の高いコアと多数の電力効率のよい小さなコアなど、異なる種類のプロセッサコアを有する。ただし、本発明の基本的原理は、他の種類の演算要素を用いて使用されてもよい。
【００６２】
図８は、明細書において「Ｈｅｔｅｒｏ−ＵＰ」８００と呼ぶ異種コアコンピューティングアーキテクチャの一実施形態を示す。Ｈｅｔｅｒｏ−ＵＰ８００構成において、電力効率のよい小さなコア８０２はソフトウェアに対して露出される。アプリケーション８０６によって追加の処理能力が必要とされる場合、さらに十分な電力バジェットを使用可能な場合、仮想コアから物理コアへのマッピングは、電力効率のよい小さなコア８０２から高性能の大きな物理コア８０４に対してスレッドをトランスペアレントにスワップして、小さなコアの代わりに動作させることができる。一実施形態において、パッケージユニット８０５は異種プロセッサコア群を管理して、どのプロセッサコアをイネーブルとし、どのプロセッサコアをディセーブルとするかを電力プロファイルおよび必要な演算スループットに基づいて決定する。以下で異種コアコンピューティングの実装のブート方法を説明するために、Ｈｅｔｅｒｏ−ＵＰ８００実施形態を例として述べるが、それに限定されない。
【００６３】
Ｈｅｔｅｒｏ−ＵＰ８００実施形態において、ファームウェアインタフェースは、各プラットフォームプロセッサを小さなコアとしてのみ列挙することができる。大きなコアはソフトウェアから隠され、ＣＰＵＩＤなどの従来の列挙方法では列挙されることができない。ただし、高性能の大きな物理コア８０４が可視で電力効率のよい小さなコア８０２が隠されているＨｅｔｅｒｏ−Ｄｏｗｎ構成などの異種コアコンピューティング実装の他の実施形態は可能である。この場合、ファームウェアインタフェースは大きなコアプロセッサを列挙する。
【００６４】
一実施形態において、プロセッサデバッグツールなどの特殊ソフトウェアツールは、ファームウェアインタフェースおよびＯＳが異種処理システムを意識していない場合でも、使用可能な物理コアの種類を識別可能である。特殊ソフトウェアツールはコア間の切替機能をディセーブルまたはイネーブルとすることができ、あるコアタイプから別のコアタイプへのスレッドの強制切替などの動作を実行できる。
【００６５】
トランスペアレントな異種コンピューティングによってプロセッサハードウェアの設計および開発における複雑度は増すが、ファームウェアインタフェースおよびＯＳ開発者におっては多くの利点をもたらす。第１に、ファームウェアインタフェース、ＯＳ、またはアプリケーションソフトウェアは、ＣＰＵが異種コア（またはその他の演算要素）を有することを意識する必要がなく、すなわちオペレーティングシステムを含むレガシーソフトウェアが上述したハードウェアとの協働を継続できる。同様に、将来的なオペレーティングシステムおよびソフトウェアアプリケーションは、異種性の種類をハードウェアの各バージョンに反映するために定期的にアップデートする必要がなくなるであろう。
【００６６】
第２に、仮想コアから物理コアへのマッピング論理によって実装される発見的方法のすべては、ハードウェア内に含まれるか、またはハードウェアとともにバンドルされるソフトウェアまたはファームウェア内に含まれるか、もしくはプロセッサベンダによって提供される。その結果、変更の全範囲がソフトウェアから隠され、ソフトウェア更新を必要としないため、将来的なハードウェア設計はさらに積極的かつ革新的な演算要素の選択肢が実現される可能性がある。
【００６７】
＜トランスペアレントな異種コンピューティングに対するブートのフロー＞
現在の異種コンピューティングソリューションは、ファームウェアインタフェースおよびオペレーティングシステム（ＯＳ）の両方が関連するソフトウェア複雑度とともに異種コアを意識する必要がある場合がある。しかしながら、ファームウェアインタフェースおよびＯＳが実際には１つ以上の異種コアで実行している時に単一の種類のコアで実行しているように動作するようなプロセッサインタフェースを提供することが可能である。１つ方法は、他の種類のコアのふるまいを「エミュレート」するマイクロコード層を使用することである。さらなる方法は、専用のマイクロコードおよびパッケージレベルハードウェアの支援を使用して、実行スレッドを適切な実行コア（例えば低電力または高性能）に移行することである。
【００６８】
システム起動時、システムに対して露出されているコアの種類によって、ファームウェアインタフェースによって実行されるブートフローが決定される。ファームウェアインタフェースの初期化中、隠されたコアは休止状態で、特化したマイクロコードルーチンを使用する以外、システムによる使用はできない。ＯＳが初期化されると、その他のコアタイプを使用して、必要な初期化フローが実行可能である。ＯＳが異種処理システムを意識している場合、異種プロセッサコアはＯＳに対して可視となり、異なるプロセッサコアタイプのそれぞれに対して直接タスクをスケジューリング可能である。一実施形態において、異種を意識したＯＳは、エミュレーションまたは仮想プロセッサを介して、ＯＳ上で動作しているソフトウェアに対してプロセッサの異種性を抽象化し、それによって実行ソフトウェアに対して同種の抽象化レイヤーを提供する。
【００６９】
ＯＳが異種処理システムを意識していない場合、隠されたコアは動的なコアスワッピング機能を用いて使用可能である。それによって異種プロセッサは様々なコア間で実行スレッドを動的にスワップ可能となる。この方法を使用すると、どのコア上でソフトウェアが実際に実行しているかにかかわらず、ソフトウェアに可視のタイプのコア上でソフトウェアが実行していると信じる。システムの透過性をさらに促進するために、新たな「マスクされたＣ６」プロセッサ状態が実現される。この状態において、プロセッサコアは低電力状態となり、プロセッサコアの消費電力はほぼゼロとなり、プロセッサコアがシステムソフトウェアに対して不可視となる。マスクされたＣ６状態のプロセッサコアに対して、標準のシステムトリガはアクセスできず、そのかわり専用のマイクロコードルーチンを介してアクセス可能となっている。
【００７０】
以下の説明を簡略化するためにＨｅｔｅｒｏ−ＵＰ８００システムを使用して例示のブートフローを説明する。システムに可視のコアは、省電力の小さなコア８０２で、高性能の大きな物理コア８０４のサブセットを実装し、より少ない量の電力を消費する。ただし、実施形態は限定されず、コアタイプ、プロセッサ上に存在する数、ファームウェアインタフェースおよびＯＳにとって可視のタイプに関して以下の説明は独断的でない。
【００７１】
図９Ａおよび９Ｂは、一実施形態によるＨｅｔｅｒｏ−ＵＰ構成上のシステムブートフローの概略的なフロー図である。まず、図９Ａにおいて、９０１では、プラットフォームコントローラハブ（ＰＣＨ）は、ファームウェアインタフェースコードを、ユニバーサルフラッシュストレージ（ＵＦＳ）などのマイクロコードがアクセス可能なメモリ空間またはその他のプロセッサが実行可能なメモリ空間に対してコピーすることによって、システムブートに備える。９０２で、パッケージハードウェアユニット（例えば図８のパッケージユニット８０５）は、リセット脱出時にすべての小さなコアを取り出し、小さなコアのそれぞれをシステムファームウェアインタフェースにとって可視とし、ブートストラッププロセッサ（ＢＳＰ）となる省電力の小さなコアの１つを選択する。９０４で、ＢＳＰとなるように選択された小さなコアプロセッサは、マイクロコードを更新および実行する。ＢＳＰマイクロコードは、アプリケーションプロセッサとして使用される追加の小さなコアプロセッサをイネーブルとする命令を含む。
【００７２】
ＢＳＰマイクロコードは、第１のブート工程時にＢＳＰがロードするファームウェアインタフェース起動モジュールを含んでもよい。ＢＳＰは、プロセッサ間割込み（ＩＰＩ）の使用によって他のプロセッサと通信する。任意で、９１０ａ、９１０ｂ、および９１０では、ＢＳＰはプロセッサ間割込み（ＩＰＩ）を使用して、使用可能なプリブートマイクロコードをロードするように各小さなコアのＡＰをトリガする。９１２ａ、９１２ｂ、および９１２ｃに示すように、各小さなコアのＡＰは、それぞれのアプリケーションプロセッサのプリブートマイクロコードを実行する。それにはマシンチェックのサポートの初期化を含む。一実施形態において、小さなコアのＡＰが処理していない、以前のマシンチェックのイベントはログ記録されており、マシンチェックのサポートがイネーブルになると、新たなマシンチェックのイベントが処理される。９１４ａ、９１４ｂ、および９１４ｃでは、各小さなコアのＡＰがアイドル状態に入り、ＢＳＰからの起動ＩＰＩ（ＳＩＰＩ）を待つ。
【００７３】
小さなコアのアプリケーションプロセッサの初期化と同時に、９０８で示すように、小さなコアのアプリケーションプロセッサの上位セットを有する大きなコアのアプリケーションプロセッサは、パッケージユニットによってイネーブルとされ、初期化される。一実施形態において、１つ以上の大きなコアはハードウェアにおいて使用可能であるが、内部融合によってディセーブルとされる。その場合、大きなコアは初期化されない。
【００７４】
９１６では、ＢＳＰが高性能の大きなコアＡＰの起動のための準備をする。これには、大きなコアのプリブートマイクロコードに対するアップデートパッチの任意のロードを含む。９１８では、大きなコアは、命令実行のためにコアを準備するプリブートマイクロコードを実行する。９２０では、大きなコアプロセッサは、そのプリブートシーケンスを完了し、準備されたプロセッサコンテキストを保存する。９２８では、大きなコアが、ＢＳＰに対して、大きなコアの初期化シーケンスが完了し、マスクされたＣ６状態に入ることを通知する。この時点で、ブロック９３０で示すように、ＢＳＣはファームウェアインタフェースブートを完了し、ＯＳ起動の準備をする。これを図９Ｂにおいても示す。
【００７５】
図９Ｂにおいて、９３４で示すように、ＢＳＰ上で実行しているシステムファームウェアインタフェースモジュールは完了すると、ＢＳＰはマイクロコードの更新のロードを完了していなかった小さなコアのＡＰを待つ。９３６では、ＢＳＰがＳＩＰＩイベントを小さなコアのＡＰのそれぞれに対して送信する。９３８では、小さなコアのＡＰがそれぞれのリセットサイクルを完了し、標準Ｃ６状態に入る。この時点において、小さなコアのブートストラッププロセッサおよび小さなコアのアプリケーションプロセッサは使用可能であり、それぞれがシステムにとって可視となる。一方、大きなコアはマスクされたＣ６状態のままである。９４０では、ＢＳＰはパッケージユニットを異種イネーブルモードに設定し、それによってプロセッサは隠された異種コアに対してスレッドを動的にスワップできるようになる。
【００７６】
ファームウェアインタフェースの初期化が完了すると、ＯＳ初期化ルーチンを開始できる。ＯＳが異種プロセッサシステムをサポートしていない場合、ＯＳは小さなコアのＡＰ上でのタスクをスケジューリングしてもよく、さらにプロセッサハードウェアは小さなコアのＡＰのうちの１つから大きなコアのＡＰに対してタスクを自動的にスワップ可能である。ソフトウェアからみると、システムは完全に異種状態で動作している。隠された大きなコアはマスクされ、システム上で可視状態にあるソフトウェアを露出しない。例えば、異種プロセッサシステムをサポートしないＯＳ上では、隠された大きなコアは、可視の高度なプログラム可能割り込みコントローラーＩＤを有さず、直接的なソフトウェアによって開始されたプロセッサ間割込みを許容せず、大きなコアとしてマシンチェックのイベントを処理する。一実施形態において、異種処理システムの１つ以上の隠されたコアは、可視の同種コアの命令セットをエミュレートすることによって異種を意識しないＯＳに対して露出される。このＯＳが異種プロセッサシステムをサポートする場合、ＯＳは様々なコアタイプのそれぞれをソフトウェアに対して露出でき、様々なコアタイプに関してソフトウェアタスクをスケジューリングできる。さらに、異種を意識したＯＳは、コア間でのスレッドのスワップのために使用されるハードウェア機構を制御できる。
【００７７】
図１０は、異種処理システムのブートシーケンスの一実施形態のファームウェアとマイクロコードエレメントとの間でやり取りされるデータおよびメッセージを示すシーケンス図である。一実施形態において、１００２に示すように、パッケージユニットファームウェア１０００によって実行される１組のファームウェアインタフェース命令は、初期化ブートストラッププロセッサ（ＢＳＰ）メッセージを、ＢＳＰ１０２０になるように選択された小さなコアプロセッサに対して送信する。パッケージユニット１０００は、ＢＳＰ１０２０に対してマイクロコード更新およびロード１００４をトリガして、システムにとって可視となるであろう残りの小さなコアのアプリケーションプロセッサ１０４０をイネーブルとするように処理を進める。マイクロコード更新を含む初期化ランデブシーケンス１０２４は、システムにとって可視の小さなコアのアプリケーションプロセッサ１０４０のそれぞれに対して送信され、それによって各小さなコアのＡＰはランデブ状態となる。
【００７８】
ランデブ状態において、マルチコアまたはマルチプロセッサシステムの各プロセッサコアは、初期化を管理する単一コアまたはプロセッサに対する制御を放棄するか、もしくはシステム内の全プロセッサに対してエラー処理を実行する。ＢＳＰ１０２０からの初期化ランデブシーケンス２０２４の受信に応じて、可視の小さなコアのアプリケーションプロセッサ１０４０はマイクロコード更新ランデブシーケンス１０４６に入り、各プロセッサに対してマイクロコードをロードして実行する。初期化されると、各小さなコアのＡＰ１０４０は、通知メッセージ１０３５をＢＳＰ１０２０に対して送信し、その後システムが可視のアイドル状態１０４８（例えば標準Ｃ６モード）に入る。
【００７９】
小さなコアのアプリケーションプロセッサの初期化と同時に、ＢＳＰ１０２０は、初期化ランデブシーケンス１０２６を、１つ以上の隠された大きなコアのアプリケーションプロセッサ１０６０に対して送信する。１つ以上の大きなコアのアプリケーションプロセッサ１０６０は、マイクロコード更新ランデブ状態１０６８に入り、各大きなコア１０６０に対してマイクロコードをロードする。完了時に、１つ以上の大きなコアのアプリケーションプロセッサ１０６０は通知メッセージ１０５５をＢＳＰ１０２０に対して送信し、マスクされたＣ６アイドル状態１０７０に入る。この状態において、大きなコアのアプリケーションプロセッサ１０６０はファームウェアインタフェースおよびＯＳにとって不可視である。すべてのコアが初期化されると、ＢＳＰ１０２０は、すべてのコアが初期化されたこと（１０１０）をパッケージユニット１０００に対して通知し、システムはＯＳをロードするように準備する。一実施形態において、このＯＳは異種処理システムを意識しており、ＯＳ初期化時において、大きなコアのアプリケーションプロセッサ１０６０はＯＳにとって可視となり、小さなコアのアプリケーションプロセッサ１０４０とともに、コア切替動作のために使用可能となる。一実施形態において、このＯＳは異種処理システムを意識しておらず、ＯＳの指示がなくても、異種処理システムはトランスペアレントに大きなコアのアプリケーションプロセッサの使用をイネーブルとする。
【００８０】
図１１Ａ〜１１Ｂは、どのように本発明の一実施形態が必要に応じてトランスペアレントに小さなコアを大きなコアとスワップするかを示す。一実施形態において、システムファームウェアインタフェースから異種性を隠し、プロセッサ内のすべての異種性を意識した論理および発見的方法を統合することによって、異種性に対するトランスペアレントなサポートが可能となる。従来のＣＰＵにおいて、コアに対するタスクの割り当てはソフトウェア（典型的にＯＳ）によってのみ行われる。ただし、一実施形態において、この割り当ては２つの部分に分割される。ソフトウェアはプロセッサによって露出された同種の「仮想コア」に対するソフトウェア処理のスケジューリングを継続するが、ハードウェアは、どの物理コアタイプが所与の仮想コアを実装するかを動的に選択する。スループット、性能、またはその他のメトリックの最大化が意図されたソフトウェアスケジューリングアルゴリズムは作業を継続するが、ハードウェアは最適化の他の（トランスペアレントな）レイヤーを実行する。このレイヤーにおいて、各仮想コアで動作する処理／スレッドは、その仮想コア上で動作している作業負荷の種類に最適ないずれかの物理コアに送られる。
【００８１】
図１１Ａに示すように、プロセッサハードウェアは複数の異種物理コアＰＣ０〜ＰＣ４ １１５０を含む。この異種物理コアＰＣ０〜ＰＣ４  １１５０は、１組の小さなコアＰＣ０〜ＰＣ３および１つの大きなコアＰＣ４を含む。本実施形態において、同種の仮想コアＶＣ０〜ＶＣ３  １１０６はソフトウェアに対して露出されている。システム内の様々な物理コアタイプにかかわらず、仮想コアは単一の種類のコア（この場合は小さなコアタイプ）としてそれぞれ表わされる。その結果、ソフトウェアベースのスケジューラ１１１０（ＯＳの一部でもよい）が、真の同種のマルチコアプロセッサまたはマルチプロセッサシステムにあるように、露出された同種の仮想コア１１０６上で実行するように、スレッド１１０１のスケジューリングを行う。仮想−物理（Ｖ−Ｐ）マッピング論理１１３０は、１組のマッピングルール１１４０に従って、そして検出された現在の状況１１４１に基づいて、各仮想コア１１０６を１つ以上の適切な物理コア１１５０にマッピングする。上述したように、マッピングの決定は、ソフトウェア、ハードウェア、ファームウェア、またはその任意の組み合わせにおいて実現可能なマッピング決定論理１１０９によって実行してもよい。
【００８２】
一実施形態において、仮想コア１１０６と小さなコアＰＣ０〜ＰＣ３との間には、デフォルトの１：１マッピングが存在する。したがって、小さなコアＰＣ０〜ＰＣ３は、ソフトウェアベースのスケジューラにとって効果的に可視となる。一実施形態において、システムの使用率が低い（特定の閾値未満）の場合、および／または大部分の小さなコアが使用中の場合（例えば、特定の閾値を上回る高処理負荷を有する場合）、このデフォルトマッピングが維持される。例えば、一実施形態において、システムの使用率が低い（例えば６０％稼働を上回るコアがない）場合、または大部分の小さなコアが使用中（例えば全使用可能コアの７５％よりも多いコアが６０％よりも高い使用率）の場合、このデフォルトマッピングが維持される。
【００８３】
ただし、一実施形態において、システムが多数のアイドル状態のコア（例えば全使用可能コアの５０％よりも多いコア）を有する場合、さらに少数の（１つ以上の）コアが高負荷で使用率が非常に高いコアの場合、マッピング決定論理１１０９によって実装された発見的方法は、図１１Ｂに示すようにマッピングを自動的に変更する。ここでは、仮想コアＶＣ１およびＶＣ２に対して、２つのスレッド１１０１のみがスケジューラ１１１０によってスケジューリングされており、その仮想コアの少なくとも１つ（本例のＶＣ２）が特定の閾値よりも高い使用率を有する。したがって、本例において、Ｖ−Ｐコアマッピング論理１１３０はマッピング決定論理１１０９によって実行されたマッピング決定に応じて、仮想コアＶＣ２を小さな物理コアＰＣ２から大きな物理コアＰＣ４に対して再マッピングを行う。
【００８４】
本明細書にて記載するように、命令とは、特定の動作を実行するように構成された、または所定の機能を有する、特定用途向けＩＣ（ＡＳＩＣ）などのハードウェアの特定の構成、または非一時的なコンピュータ可読媒体において実現されたメモリに格納されたソフトウェア命令を指してもよい。したがって、図面に示す各技術は、１つ以上の電子装置（例えばエンドステーション、ネットワーク要素など）において格納および実行されるコードおよびデータを使用して実現可能である。そのような電子装置は、非一時的なコンピュータまたは機械読取可能格納媒体（例えば磁気ディスク、光ディスク、ランダムアクセスメモリ、読取専用メモリ、フラッシュメモリ装置、相変化メモリ）および一時的なコンピュータまたは機械読取可能通信媒体（例えば搬送波、赤外線信号、デジタル信号など、電気、光学、音響、その他の形態の伝播信号）などのコンピュータまたは機械読取可能媒体を使用して（装置内において、および／またはネットワークを介して他の電子装置と）コードおよびデータを格納および通信する。
【００８５】
さらに、そのような電子装置は、典型的に、１つ以上の格納装置（非一時的機械可読格納媒体）、ユーザ入出力装置（例えばキーボード、タッチスクリーン、および／またはディスプレイ）、およびネットワーク接続などの１つ以上の他の構成要素に対して接続された一組の１つ以上のプロセッサを含む。一組のプロセッサと他の構成要素との接続は、典型的に、１つ以上のバスおよびブリッジ（バスコントローラとも呼ばれる）を介する。ネットワークトラフィックを有する格納装置および信号は、それぞれ、１つ以上の機械可読格納媒体および機械可読通信媒体を表わす。
【００８６】
したがって、所与の電子装置の格納装置は、典型的に、その電子装置の一組の１つ以上のプロセッサ上で実行されるコードおよび／またはデータを格納する。本発明の一実施形態の１つ以上の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを用いて実現されてもよいことは明らかである。この詳細な説明全体において、本発明の十分な理解を実現するために、数多く特定の詳細を記載したが、それらは説明目的に過ぎない。ただし、本発明がそのような特定の詳細の一部がなくても実現可能であることは当業者にとって明らかであろう。特定の例において、本発明の主題を曖昧にすることを回避するため、周知の構造および機能についてさらに詳細に説明しなかった。したがって、本発明の範囲および主旨は、添付の発明の範囲によって判断されるべきである。
【図１Ａ】
2014225242.tif 000003
【図１Ｂ】
2014225242.tif 000004
【図２】
2014225242.tif 000005
【図３】
2014225242.tif 000006
【図４】
2014225242.tif 000007
【図５】
2014225242.tif 000008
【図６】
2014225242.tif 000009
【図７】
2014225242.tif 000010
【図８】
2014225242.tif 000011
【図９Ａ】
2014225242.tif 000012
【図９Ｂ】
2014225242.tif 000013
【図１０】
2014225242.tif 000014
【図１１Ａ】
2014225242.tif 000015
【図１１Ｂ】
2014225242.tif 000016
【外国語明細書】
2014225242000001.pdf