(57)【要約】一実施形態は装置を提供する。本装置は、第1の伝導性バスを介した第1のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第1のメモリ・コントローラ回路を含む。本装置は、第2の伝導性バスを介した第2のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第2のメモリ・コントローラ回路を含む。本装置は、前記第1のメモリ・コントローラ回路および前記第2のメモリ・コントローラ回路に結合された電力制御回路を含む。電力制御回路は、前記第2の伝導性バスを介した前記第2のメモリ・コントローラ回路を用いる前記第2のメモリ回路からのデータを、前記第1の伝導性バスを介した前記第1のメモリ・コントローラ回路を用いる前記第1のメモリ回路にデータを転送する。電力制御回路は、前記第2のメモリ回路から前記第1のメモリ回路への前記データの転送後に、前記第2のメモリ回路をパワーダウンする。電力制御回路は、本装置の電力消費を減少させ、本装置のバッテリー寿命を延ばしうる。
2021528712.tif 000002
【特許請求の範囲】
【請求項１】
第1の伝導性バスを介した第1のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第1のメモリ・コントローラ回路と；
第2の伝導性バスを介した第2のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第2のメモリ・コントローラ回路と；
前記第1のメモリ・コントローラ回路および前記第2のメモリ・コントローラ回路に結合された電力制御回路であって、前記電力制御回路は、前記第2の伝導性バスを介した前記第2のメモリ・コントローラ回路を用いる前記第2のメモリ回路からのデータを、前記第1の伝導性バスを介した前記第1のメモリ・コントローラ回路を用いる前記第1のメモリ回路に転送するとともに、前記電力制御回路は、前記第2のメモリ回路から前記第1のメモリ回路への前記データの転送後に、前記第2のメモリ回路をパワーダウンする、電力制御回路とを有する、
装置。
【請求項２】
前記第1のメモリ・コントローラ回路は、第1の複数のメモリ・コントローラを含み、前記第1のメモリ回路は、第1の複数のメモリ・パッケージを含み、前記第1の伝導性バスは、前記第1の複数のメモリ・コントローラを前記第1の複数のメモリ・パッケージに結合する第1の複数のチャネルを含み、
前記第2のメモリ・コントローラ回路は、第2の複数のメモリ・コントローラを含み、前記第2のメモリ回路は、第2の複数のメモリ・パッケージを含み、前記第2の伝導性バスは、前記第2の複数のメモリ・コントローラを前記第2の複数のメモリ・パッケージに結合する第2の複数のチャネルを含む、
請求項１に記載の装置。
【請求項３】
前記電力制御回路が、前記第2の複数のメモリ・コントローラおよび前記第2の複数のメモリ・パッケージをパワーダウンすることによって、前記第2のメモリ回路をパワーダウンする、請求項２に記載の装置。
【請求項４】
オペレーティング・システムを実行するプロセッサ・コアをさらに有しており、前記オペレーティング・システムは、前記第1のメモリ回路および前記第2のメモリ回路のデータの諸ページの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送し、前記オペレーティング・システムは、前記第1のメモリ回路および前記第2のメモリ回路のデータの残りのページを、前記第1のメモリ回路および前記第2のメモリ回路内の連続するメモリ・ページのグループに移動する、
請求項１ないし３のうちいずれか一項に記載の装置。
【請求項５】
前記第1のメモリ回路および前記第2のメモリ回路のデータの前記残りのページを、前記第1のメモリ回路および前記第2のメモリ回路内の連続するメモリ・ページのグループに移動することにより、前記第1のメモリ回路内のメモリの空きページおよび前記第2のメモリ回路内のメモリの占有ページが生じる、請求項４に記載の装置。
【請求項６】
前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送することが：
前記第2のメモリ回路内のメモリの前記占有ページの前記データを前記第1のメモリ回路内のメモリの前記空きページ内の位置に転送することを含む、
請求項５に記載の装置。
【請求項７】
前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送することが：
前記第2のメモリ回路内のメモリの動的ランダムアクセスメモリ（「DRAM」）・ページを前記第1のメモリ回路内のメモリのDRAMページに転送することを含む、
請求項５に記載の装置。
【請求項８】
前記第2のメモリ回路がパワーダウンされている間、新しいトラフィックが前記第2のメモリ回路内の位置にマッピングされる場合、前記電力制御回路は、前記新しいトラフィックを、前記第1のメモリ回路内の位置にルーティングする、
請求項１ないし３のうちいずれか一項に記載の装置。
【請求項９】
前記電力制御回路が、前記第2のメモリ回路をパワーアップするコマンドの受領に応答して、前記第2のメモリ回路をパワーアップし、前記電力制御回路が、前記転送されたデータを、前記第1のメモリ回路から前記第2のメモリ回路に戻す、請求項１ないし３のうちいずれか一項に記載の装置。
【請求項１０】
前記第2のメモリ回路をパワーダウンすることが：
前記第2の伝導性バスを通じた前記第2のメモリ回路へのクロック信号送信を停止すること；
前記第2のメモリ回路への電力を除去すること；
前記第2のメモリ回路のための自動化された自己リフレッシュ動作を無効にすること；または
前記第2のメモリ・コントローラ回路への電力を少なくとも部分的に除去すること、
のうちの一つまたは複数を含む、請求項１ないし３のうちいずれか一項に記載の装置。
【請求項１１】
前記電力制御回路が前記第2のメモリ回路をパワーダウンすることが、前記第1のメモリ回路および前記第2のメモリ回路の組み合わせの少なくとも半分をパワーダウンすることを含む、請求項１ないし３のうちいずれか一項に記載の装置。
【請求項１２】
前記電力制御回路が、電力制御レジスタの構成ビットに応答して、前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送する、請求項１ないし３のうちいずれか一項に記載の装置。
【請求項１３】
前記電力制御レジスタは、プロセッサによって実行されるオペレーティング・システムによってアクセス可能である、請求項１２に記載の装置。
【請求項１４】
電力制御回路により、第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領する段階と；
メモリ制御回路によって、前記第1のメモリ回路に記憶されている、および前記第2のメモリ回路に記憶されているデータの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送する段階であって、転送されないデータは残りのデータである、段階と；
前記メモリ制御回路によって、前記残りのデータを前記第1のメモリ回路内および前記第2のメモリ回路内の連続するページのグループにコピーして、前記第2のメモリ回路内の占有メモリ・ページおよび前記第1のメモリ回路内の空きメモリ・ページを提供する段階と；
前記メモリ制御回路によって、前記第2のメモリ回路内の前記占有メモリ・ページから前記第1のメモリ回路内の前記空きメモリ・ページ内のメモリ位置へデータを転送する段階と；
前記電力制御回路によって、前記第2のメモリ回路に加えられる電力を減少させる段階とを含む、
方法。
【請求項１５】
前記第2のメモリ回路に加えられる電力を減少させることは：
前記電力制御回路によって、前記第2のチャネルを通じた前記第2のメモリ回路へのクロック信号送信を停止すること；
前記電力制御回路によって、前記第2のメモリ回路への電力を除去すること；
前記電力制御回路によって、前記第2のメモリ回路のための自動化された自己リフレッシュ動作を無効にすること；または
前記電力制御回路によって、前記第2のメモリ・コントローラ回路への電力を少なくとも部分的に除去すること、
のうちの一つまたは複数を含む、請求項１４に記載の方法。
【請求項１６】
前記第2のメモリ回路をパワーアップするコマンドの受領に応答して、前記電力制御回路によって、前記第2のメモリ回路に電力を再び加える段階と；
前記メモリ制御回路によって、前記第2のメモリ回路から前記第1のメモリ回路に転送された前記データを、前記第1のメモリ回路から前記第2のメモリ回路にコピーする段階とをさらに含む、
請求項１４に記載の方法。
【請求項１７】
前記第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領することが：
前記電力制御回路によって、前記第1のメモリ回路および前記第2のメモリ回路についての構成設定を格納する電力制御レジスタからのビットを読むことを含む、
請求項１４に記載の方法。
【請求項１８】
第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領する手段と；
前記第1のメモリ回路に記憶されている、および前記第2のメモリ回路に記憶されているデータの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送する手段であって、転送されないデータは残りのデータである、手段と；
前記残りのデータを前記第1のメモリ回路内および前記第2のメモリ回路内の連続するページのグループにコピーして、前記第2のメモリ回路内の占有メモリ・ページおよび前記第1のメモリ回路内の空きメモリ・ページを提供する手段と；
前記第2のメモリ回路内の前記占有メモリ・ページから前記第1のメモリ回路内の前記空きメモリ・ページ内のメモリ位置へデータを転送する手段と；
前記第2のメモリ回路に加えられる電力を減少させる手段とを有する、
システム。
【請求項１９】
前記第2のメモリ回路に加えられる電力を減少させる手段は：
前記第2のチャネルを通じた前記第2のメモリ回路へのクロック信号送信を停止する手段；
前記第2のメモリ回路への電力を除去する手段；
前記第2のメモリ回路のための自動化された自己リフレッシュ動作を無効にする手段；または
前記第2のメモリ・コントローラ回路への電力を少なくとも部分的に除去する手段、
のうちの一つまたは複数を有する、請求項１８に記載のシステム。
【請求項２０】
前記第2のメモリ回路をパワーアップするコマンドの受領に応答して、前記第2のメモリ回路に電力を再び加える手段と；
前記第2のメモリ回路から前記第1のメモリ回路に転送された前記データを、前記第1のメモリ回路から前記第2のメモリ回路にコピーする手段とをさらに有する、
請求項１８に記載のシステム。
【請求項２１】
前記第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領する手段が：
前記電力制御回路によって、前記第1のメモリ回路および前記第2のメモリ回路についての構成設定を格納する電力制御レジスタからビットを読むことを含む、
請求項１８に記載のシステム。
【請求項２２】
請求項１４ないし１７のうちいずれか一項に記載の方法を実行するよう構成された、データを転送するためのシステム。
【請求項２３】
請求項１４ないし１７のうちいずれか一項に記載の方法を実行するよう構成されたチップセット。
【請求項２４】
コンピューティング装置上で実行されることに応答して該コンピューティング装置に請求項１４ないし１７のうちいずれか一項に記載の方法を実行させる複数の命令を有している少なくとも一つの機械可読媒体。
【請求項２５】
請求項１４ないし１７のうちいずれか一項に記載の方法を実行するよう構成された、データを転送するよう構成された装置。
【請求項２６】
コンピュータに請求項１４ないし１７のうちいずれか一項に記載の方法を実行させるためのコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、メモリ構成、特に、メモリ構成の動的変換のためのアーキテクチャに関する。
【背景技術】
【０００２】
バッテリー寿命は、モバイル・コンピューティング装置の利便性を実質的に規定する。バッテリー寿命がより長いモバイル装置は、利用者が、物理的に移動しながらも、実質的にネットワークに繋がったままでいることを許容する。しかしながら、モバイル・コンピューティング装置が短いバッテリー寿命をもつ場合には、ユーザーは、画面を暗くする、低電力モードに入る、プロセッサの速度を落とす、機能をオフにする、モバイル装置の電源をオフにする等といった一連の不便な操作を通してバッテリー寿命を延ばそうと試みる。装置およびソフトウェア製造業者の相反する目標は、モバイル・コンピューティング装置の便利な使用を可能にするバッテリー寿命を提供しつつ、モバイル・コンピューティング装置のユーザーがモバイル・コンピューティング装置によって提供される機能を享受することを許容することである。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
低電力動作と電力集約的な動作の両方の間にバッテリーから電力を引き出すコンピュータ・コンポーネントの一つは、モバイル・コンピューティング装置のメインメモリである。メインメモリは、典型的には、データを保存するために定期的にリフレッシュされる、または電力を再供給されることによって電力を引き出す、ランダムアクセスメモリ（RAM）をいう。メインメモリは、たとえば、アプリケーション、データ、およびモバイル・コンピューティング装置の基本動作に関連する情報を格納するためにプロセッサによって使用される。メモリの容量および帯域幅の両方が長年にわたって著しく増加したので、多くのモバイル・コンピューティング装置は、単純な動作または使用のために必要とされるよりもはるかに多くのメインメモリ容量を有する。かかるメインメモリ容量ならびに大量のメインメモリによって引き出される電力のため、いくつかのモバイル・コンピューティング装置は、より小さく、より薄く、それほどパワフルでない電子回路（たとえばタブレット）のバッテリー寿命能力についていくのに苦労している。このため、モバイル・コンピューティング装置が補助電子装置と同じ機能（およびそれ以上）を提供できるにもかかわらず、ユーザーが補助電子装置を購入することがある。
【図面の簡単な説明】
【０００４】
特許請求される主題の特徴および利点は、それと整合する実施形態の以下の詳細な説明から明白となるであろう。該説明は添付の図面を参照して考慮されるべきである。
【図１Ａ】本開示のいくつかの実施形態と整合するメインメモリを動的に統合および／または再構成することによってコンピューティング・システムの電力消費を低減しうるホスト・システムを有するコンピューティング・システムの機能ブロック図である。
【図１Ｂ】本開示のいくつかの実施形態と整合するメインメモリを動的に統合および／または再構成することによってコンピューティング・システムの電力消費を低減しうるホスト・システムを有するコンピューティング・システムの機能ブロック図である。
【図２】本開示の少なくとも一つの実施形態による、メインメモリのメモリ・セグメントのメモリ・ページを動的に統合することのフローチャートである;
【図３】本開示のさまざまな実施形態による、メインメモリをデュアルチャネルまたはマルチチャネル構成から単一チャネル構成に変換することのフローチャートである。
【図４】本開示のさまざまな実施形態による、メインメモリをデュアルチャネルまたはマルチチャネル構成から単一チャネル構成に動的に変換することのフローチャートである。
【図５】本開示のさまざまな実施形態による、メインメモリを単一チャネル構成からネイティブ（デュアルチャネルまたはマルチチャネル）構成に動的に変換解除することのフローチャートである。
【図６Ａ】本開示の実施形態による、一般的ベクトル・フレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【図６Ｂ】本開示の実施形態による、一般的ベクトル・フレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。
【図７】図７A〜Cは、本開示の実施形態による、例示的な特定のベクトル・フレンドリー命令フォーマットを示すブロック図である。
【図７Ｄ】図７Dは、本開示の実施形態による、例示的な特定のベクトル・フレンドリー命令フォーマットを示すブロック図である。
【図８】本開示のある実施形態によるレジスタ・アーキテクチャのブロック図である。
【図９】図9Aは、本開示の実施形態による、例示的な順序内パイプラインおよび例示的なレジスタ名称変更、順序外の発行／実行パイプラインの両方を示すブロック図である。図9Bは、本開示の実施形態による、プロセッサに含まれるべき、順序内アーキテクチャ・コアの例示的実施形態および例示的なレジスタ名称変更、順序外の発行／実行アーキテクチャ・コアの両方を示すブロック図である。
【図１０】図10のA〜Bは、より特定的な例示的な順序内コア・アーキテクチャのブロック図を示す。このコアは、チップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの一つであろう。
【図１１】本開示の実施形態による、2つ以上のコアを有してもよく、統合メモリ・コントローラを有してもよく、統合グラフィックスを有してもよいプロセッサのブロック図である。
【図１２】例示的なコンピュータ・アーキテクチャのブロック図である。
【図１３】例示的なコンピュータ・アーキテクチャのブロック図である。
【図１４】例示的なコンピュータ・アーキテクチャのブロック図である。
【図１５】例示的なコンピュータ・アーキテクチャのブロック図である。
【図１６】本開示の実施形態による、ソース命令セット内のバイナリー命令を、ターゲット命令セット内のバイナリー命令に変換するためのソフトウェア命令コンバータの使用を対照するブロック図である。
【０００５】
以下の詳細な説明は、例示的な実施形態を参照して進行するが、その多くの代替、修正、および変形が、当業者には明らかであろう。
【発明を実施するための形態】
【０００６】
本明細書に開示されているのは、本開示のいくつかの実施形態と整合する、コンピューティング・システムのメモリの諸部分の電力を下げることを可能にするようメモリを動的に統合することによって、電力消費を低減するように構成されたコンピューティング・システムである。
【０００７】
いくつかの要因が、コンピューティング・システムによって使用される電力の量に影響を与える。要因のいくつかは、プロセッサを低温に保つためにファンに電力を供給すること、計算動作を可能にするためにプロセッサに電力を供給すること、およびプロセッサ動作をサポートするためにメモリをリフレッシュすることを含む。際限のない電力供給があれば、これらの要因の多くは問題とならない。しかしながら、バッテリー寿命を延ばそうとする、電力消費を低減しようとする、またはコンピューティング・システム動作によって散逸される熱を減らそうとするときには、コンピューティング・システムによって消費される電力の量を減らすことが望ましい目標でありうる。
【０００８】
本開示は、概括的には、たとえば性能トレードオフが受け入れ可能なとき（たとえば、ビデオストリーミングの代わりにビデオ再生）に、コンピューティング・システムがメモリの諸部分の電力を下げることを許容することによって、電力消費を減少させることに関する。典型的には、コンピューティング・システムにおいてプロセッサによって最も使用されるメモリは、メインメモリと呼ばれ、これは、迅速に書き込みおよび読み出しが可能である。このメインメモリは、一般に、非永続的なメモリであり、電力が除去されるとき、および／またはメインメモリによって記憶されている情報がリフレッシュされないときは、データを失う。メインメモリのリフレッシュは、メモリ・セルに記憶されたデータが必要なときに正しく読み取れることを保証するために、メインメモリ内のメモリ・セル（たとえば、キャパシタ）に定期的に電力を印加することを含む。コンピューティング・システムが低電力モードまたはスタンバイ・モードに置かれるときでも、メインメモリはやはり、コンピューティング・システムが迅速に以前の動作を再開できるように、リフレッシュされる。しかしながら、スタンバイ・モードにおいてでさえ、メインメモリは、メモリのアイドル・パワーおよびメモリの容量に比例する量の電力を引き出し続ける。コンピューティング・システムのいくつかの動作は、メインメモリの全容量よりも著しく少ない（たとえば、半分以下）で実行されうるので、本開示の実施形態は、コンピューティング・システムが、物理的メモリ・チャネルにアクセスしないこと、パワーダウンされたメモリ・チャネルに関連付けられたメモリをリフレッシュしないこと、パワーダウンされたメモリ・チャネルのためのメモリ・コントローラを電源オフにすること、およびプロセッサ・パッケージのシステムオンチップ（SoC）内の物理回路（PHY）の諸部分を電源オフにすることによって、メモリを動的に統合し、電力消費を削減することを可能にする。
【０００９】
ある実施形態では、コンピューティング・システムは、2つ以上のチャネルで動作するメインメモリを含む。メインメモリを動的に統合するために、メインメモリのセグメント（または諸部分）が識別される。メインメモリの諸セグメント内では、より重要でない（たとえば、それほど使用されない）メモリ・ページがページアウトされ（すなわち、永続的メモリに転送／記憶される）、より重要なメモリ・ページが、メインメモリの減らされた量のセグメント（たとえば、一つのセグメント、2つのセグメント、または全セグメントの半分）の中に統合される。次いで、ある実施形態によれば、電力制御回路が、複数のチャネル、メモリ回路、および／またはメモリ回路のランクの間に分散されたデータを、単一チャネル、単一セットのメモリ回路、および／または単一ランク上に系統的に移動させるように構成される。次いで、不使用のチャネルに関連するメインメモリの諸部分は、メインメモリによって消費される電力の量を減らすために、パワーダウンされるか、またはリフレッシュされるのをやめるかしてもよい。
【００１０】
本開示のいくつかのプロトタイプとして試作された実装は、モバイル・コンピューティング装置のスタンバイ・モードでのバッテリー寿命を7.2日から8.5日に（すなわち、約18%）増加させることが示されている。非スタンバイ・モードでは、メインメモリの動的統合は、さまざまな実装によれば、（たとえば、ビデオ再生動作中）同時に電力消費を3.8%ないし10.8%減らしつつ、継続した計算動作を可能にしうる。
【００１１】
図1Aおよび図1Bは、本開示のいくつかの実施形態と整合する、メインメモリを動的に統合するおよび／または再構成することによって、コンピューティング・システム100の電力消費を低減することができるシステム・ホスト102を有するコンピューティング・システム100のブロック図を示す。システム・ホスト102は、システムオンチップ（SOC）であってもよく、本明細書に記載される、図15のSOC  1500の一つの例示的実装である。コンピューティング・システム100は、通信チャネル106および通信チャネル108を介してメインメモリ104に／から、メモリ・ページおよびキャッシュラインを格納し、取り出すように構成されたシステム・ホスト102を含む。通信チャネル106および108は、データ、制御および／または電力のためのトレースを含む伝導性バスまたはポイントツーポイント相互接続である。システム・ホスト102は、コンピューティング・システム100の電力消費を低減するためにシステム・ホスト102がメインメモリ104の構成を動的に変換することを可能にする一つまたは複数のコンポーネントを含む。
【００１２】
システム・ホスト102は、ある実施形態によれば、一つまたは複数のコア112A〜N、一つまたは複数のキャッシュ回路114A〜N、および共有キャッシュ回路116を含むプロセッサ110と；システム・エージェント回路118と；通信チャネル106のためのメモリ・コントローラ回路120と；通信チャネル108のためのメモリ・コントローラ回路122と；直接メモリ・アクセス（DMA）回路124と；電力制御回路126と；システム・ホスト102のコンポーネントを物理的および通信的に相互接続する相互接続回路125とを含む。前記一つまたは複数のコア112A〜Nは、データに対して計算動作を実行する。前記一つまたは複数のキャッシュ回路114A〜Nおよび共有キャッシュ回路116は、前記一つまたは複数のコア112A〜Nによる計算動作をサポートするためにデータを格納する低遅延メモリの異なるレベルを表わす。システム・エージェント回路118は、プロセッサ110への電力を管理し、メインメモリ104の自己リフレッシュおよびクロック有効化を管理してもよい。メモリ・コントローラ回路120は、通信チャネル106に接続されたメモリ回路への読み出しおよび書き込みアクセスを制御する。メモリ・コントローラ回路122は、通信チャネル108に接続されたメモリ回路への読み出しおよび書き込みアクセスを制御する。メモリ・コントローラ120、122はまた、電力制御ユニット・ポリシーに基づいて、メインメモリ104のための自己リフレッシュおよびクロック有効化動作を実行する。DMA回路124は、チャネル統合動作を実行する。DMA回路124は、空きメモリ・セグメントおよび占有メモリ・セグメントの指示を受領し、電力制御回路126（たとえば、電力制御ユニット）から、メモリ・セグメントを統合または統合解除するためのコマンドを受領する。電力制御回路126からの、統合または統合解除するためのコマンドに応答して、DMA回路124は、ソース・チャネルをオフにできるようにするために、「ソース」チャネル内の占有セグメントから「ターゲット」チャネル内の空きセグメントにメモリをコピーすることによってチャネル統合を実行する。DMA回路124は、統合解除中は逆の動作を実行する。電力制御回路126および／またはDMA回路124は、ある実施形態によれば、動的に（たとえば、コンピューティング・システム100が動作している間に）メインメモリ104をデュアルチャネル（またはマルチチャネル、たとえば、LPDDR4およびLPDDR5における8チャネル）動作から単一チャネル動作（または、半分のチャネル、たとえば、LPDDR4およびLPDDR5における4チャネル）に変換する動作をメインメモリ104に実行させ、メインメモリ104、メモリ・コントローラ回路122、およびコンピューティング・システム100による電力消費を低減させる。
【００１３】
メインメモリ104は、通信チャネル106および通信チャネル108を通じてシステム・ホスト102に結合される。2つの通信チャネルが示され、説明されているが、システム・ホスト102とメインメモリ104との間の情報転送を容易にするために、ずっと多くの通信チャネル（たとえば、4つ、6つなど）が使用されてもよい。メインメモリ104は、ある実施形態によれば、第1のメモリ回路128、第2のメモリ回路130、第3のメモリ回路132、および第4のメモリ回路134を含む。メインメモリ104は、さまざまな実装によれば、より多くの、またはより少ないメモリ回路を含んでいてもよい。ある実施形態によれば、第1のメモリ回路128は第1のデュアルインラインメモリモジュール（DIMM）であり、第2のメモリ回路130は第2のDIMMであり、第3のメモリ回路132は第3のDIMMであり、第4のメモリ回路134は第4のDIMMである。第1のメモリ回路128、第2のメモリ回路130、第3のメモリ回路132、および第4のメモリ回路134のそれぞれは、ある実施形態では、DIMMの第1の側（すなわち、ランク1）に配置されたある数のランダムアクセスメモリ（RAM）ダイと、DIMMの第2の側（すなわち、ランク2）に配置されたある数のRAMダイとを含む。RAMダイは、本明細書ではメモリ・パッケージまたはメモリ・ダイ・パッケージと称されることがある。メモリ・ダイ・パッケージの例は、ボール・グリッド・アレイ（BGA）・メモリ・ダイ・パッケージである。複数のメモリ・パッケージが、少なくとも部分的にDIMMを構成することができる。本明細書ではDIMMが記載され、図示されているが、開示されるコンピューティング・システムにおいてSIMMおよび／またはRIMMが使用されてもよい。通信チャネル106は、第1のメモリ回路128および第3のメモリ回路132に接続されてもよい。通信チャネル108は、第2のメモリ回路130および第4のメモリ回路134に接続されてもよい。
【００１４】
図1Aおよび図1Bは、本開示の実施形態と整合する、メインメモリ104の電力消費を低減するために、コンピューティング・システム100が動作を継続している間に、メインメモリ104をマルチチャネル構成から単一チャネル構成に動的に変換するためのマルチステップ・プロセスの簡略化されたブロック図を示している。最初に、DMA回路124および／または電力制御回路126は、メモリ動作をメインメモリ104の減少した数のセグメントまたは部分に動的に統合するために、プロセッサ110から一つまたは複数のコマンドを受領する。DMA回路124および／または電力制御回路126は、プロセッサ110によって（たとえば、オペレーティング・システムによって）更新／変更されうるレジスタ127からの構成ビットを読み出すことによって、一つまたは複数のコマンドを受領しうる。メモリ・コントローラ回路120、122がメインメモリ104にキャッシュラインを書き込むとき、メモリ・コントローラ回路120、122は、帯域幅を最大にするために、物理ページが全チャネルにわたって分配されるように、細かい粒度で両方のチャネルにわたってトラフィックを分配するようにする。物理ページは、論理的に、全使用可能メモリの諸セグメント（または諸部分）として編成され、複数のチャネル、DIMM、および／またはランクにわたって分散される。ある実施形態では、各セグメントは、メインメモリ104の物理ページの1/8を表わす。メモリの単一の物理ページは、ある実施形態では、4キロバイトを表わす。メモリの単一の物理ページは、メインメモリ104の全ダイの各RAMダイの一つのバンクの単一行を表わしうる。
【００１５】
DMA回路124および／または電力制御回路126は、メモリ・セグメントを、減少した数のセグメントに、次いで、減少した数のチャネルに統合するよう、メモリ・コントローラ回路120およびメモリ・コントローラ回路122を制御する。セグメントの数を減らすことは、オペレーティング・システム（OS）がメモリのページをページアウトすることによって実行される。チャネルの数を減らす（たとえば、2から1へ）ことは、電力制御回路126、DMA回路124、およびメモリ・コントローラ120、122によって実行される。メモリ・コントローラ122、第2のメモリ回路130、および第4のメモリ回路134は、その後、電源をオフにされてもよい。
【００１６】
ある実施形態では、OSは、メインメモリ104内のメモリの、最長未使用の（least  recently  used、LRU）ページを識別する。メモリのLRUページは、BIOS動作、OS動作、および進行中の計算のために必要とされないメモリのページ（たとえば、データのページ）を含む。ある実施形態では、OSは、バス142を介して、メモリのLRUページを永続的記憶装置140に転送する（たとえばページアウトする）。メモリのLRUページを永続的記憶装置140上の一つまたは複数のファイルに転送した後、OSはメインメモリ104をデフラグし、メモリの残りのページを、メモリの連続するページのグループに統合する。メモリの連続するページのグループはセグメントと称されてもよく、メインメモリ104は論理的に8つ以上のセグメントに分離されうる。OSは、セグメント136（たとえば、セグメント5〜8を表わす）内のデータを、その後の動作に備えて、メモリ・セグメント138（たとえば、セグメント1〜4を表わす）に移動させてもよい。結果として、各通信チャネル106および108に接続されたメモリ回路は、メモリの占有ページ（たとえば、セグメント1〜4によって表わされる）およびメモリの空きページ（たとえば、セグメント5〜8によって表わされる）を有することになる。換言すれば、チャネル0は、チャネル0のセグメント1〜8からチャネル0のセグメント1〜4に統合された、チャネル0のデータ（ch0データ）をもつ。さらに、チャネル1は、チャネル1のセグメント1〜8からチャネル1のセグメント1〜4に統合された、チャネル1のデータ（ch1データ）をもつ。
【００１７】
図1Bを参照すると、メインメモリ104をマルチチャネル構成から単一チャネル構成に動的に変換するプロセスの第2の動作において、DMA回路124および／または電力制御回路126は、あるチャネルの（たとえば、メモリ回路130および134の）メモリの占有セグメント（チャネル1のセグメント1〜4からのch1データによって表わされる）を、別のチャネル上のメモリの空きセグメント（チャネル0のセグメント5〜8によって表わされる）に（たとえば、メモリ回路128および132に）コピーする。通信チャネル108上のメモリ・セグメント138に記憶されたデータ（ch1データ）は、ある実施形態によれば、（たとえば、第1のメモリ回路128への）通信チャネル106上のセグメント136および／または第1のメモリ回路128のためのメモリ・ダイの第1のランクに移動される。同時に、ある実施形態によれば、通信チャネル106上のメモリ・セグメント138に記憶されるデータ（ch0データ）は、第1のメモリ回路128（および／または第3のメモリ回路132）上に維持される。そのような仕方でメインメモリ104を統合することにより、電力制御回路126、および／またはシステム・ホスト102の一つまたは複数のコンポーネントは、メモリ・コントローラ122、第2のメモリ回路130、および第4のメモリ回路134のうちの一つまたは複数をパワーダウンすることができる。メモリ・コントローラ122、第2のメモリ回路130、および／または第4のメモリ回路134をパワーダウンすることは、さまざまな実施形態によれば、メモリ・ダイのリフレッシュを止めること、クロック信号の送信を無効にすること、電力を無効にすること、メモリ・コントローラ回路122から電力を少なくとも部分的に除去すること、および／またはチャネル1の動作をサポートする追加的な回路をパワーダウンすることを含んでいてもよい。
【００１８】
別の言葉で要約すると、OSは物理アドレス空間内でページを移動し、メモリ・セグメントはいくつかのページを含むメモリ領域（たとえば、1GBのメモリ＝2億5600万の4Kページ）である。メモリ・セグメントの一つのタイプは、DRAMセグメントであり、これは、諸ページの諸部分を含むDRAM空間内のメモリ領域である（たとえば、ページが2つのチャネルに分割される上記の例では、各DRAMセグメントは、2億5600万の半ページを含む0.5GBのメモリである）。OSはページを移動し、約4セグメントまたは半分のメモリ空間に集約する。開示される技術は（たとえば、DMA回路124、電力制御回路126、およびメモリ・コントローラ回路122を使って）、少なくとも一つのチャネルをパワーダウンすることを可能にするために、占有されたセグメントを一つのチャネルから別のチャネルの空いたセグメントにコピーするために、ハードウェア・コンポーネントを使用する。
【００１９】
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてもよい。本開示の実施形態は、少なくとも一つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも一つの入力装置、および少なくとも一つの出力装置を含むプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
【００２０】
図2は、本開示の実施形態と整合する、メインメモリ104（図1Aおよび1Bに示される）のメモリ・セグメントのメモリ・ページを動的に統合するためのプロセス200のメモリ図を示す。このプロセスは、メインメモリ104をデュアルチャネルまたはマルチチャネル構成から単一チャネル構成または半分のチャネルの構成に変換するための準備において、メインメモリ104の一部（たとえば諸セグメント）を解放するいくつかの動作を含む。
【００２１】
動作202では、プロセス200は、ある実施形態によれば、最長未使用（LRU）ページをページアウトすることを含む。LRUページのページアウトは、LRUページからのデータを永続的記憶装置上の一つまたは複数のファイルに転送することを含むことができる。
【００２２】
動作204では、プロセス200は、ある実施形態によれば、ページング不可能ページ（non-pageable  page、NPP）およびホット（hot）ページ（たとえばアクティブに使用されるページ）を移動させることを含む。ページング不可能なページは、基本入力出力システム（BIOS）のためのデータおよび／またはOSおよびドライバ・ファームウェア／ソフトウェアのためのデータを格納するメモリのページを含んでいてもよい。ホットページは、現在、プロセッサまたはOSによって実行されているまたは走らされているアプリケーションのためのデータを含むページを含んでいてもよい。
【００２３】
動作206では、プロセス200は、ある実施形態によれば、使用されていないページをリフレッシュするのを止めることを含む。リフレッシュを止めることは、メモリ回路のための自己リフレッシュ・モードを無効にすることを含んでいてもよい。使用されていないページをリフレッシュすることを停止すれば、メインメモリ104によって消費される電力が削減される。
【００２４】
動作208では、使用されていないページはリフレッシュされず、電力消費を低減する。図示されるように、動作208において、メモリ・セグメント138（たとえば、メモリ・セグメント1〜4）は占有メモリ・ページを含み、メモリ・セグメント136（たとえば、メモリ・セグメント5〜8）は空きメモリ・ページを含む。メモリ・セグメント136および138は、通信チャネル106および通信チャネル108の両方からのメモリのインターリーブされた諸ページを含むことを注意しておくべきである。
【００２５】
図3は、本開示の実施形態と整合する、デュアルチャネルまたはマルチチャネル構成から単一チャネル構成またはチャネルの半分の構成に、メインメモリ104（図1Aおよび1Bに示される）を変換するためのプロセス300のメモリ図である。プロセス300は、ある実施形態によれば、メインメモリ104の諸部分をマルチチャネル構成304から半分チャネル構成306に変換するチャネル統合動作302を実行する。統合されたメモリ・セグメント310の各部分308は、チャネル310aおよび310bの統合されたメモリ空間におけるセグメントを表わす。統合されたメモリ・セグメント310の部分308は、メモリ内のOSページよりも小さい粒度で諸チャネルにわたって分割されるので、オペレーティング・システム（「OS」）は、チャネル間で（たとえば、チャネル1からチャネル0に）データを転送することができないことがある。たとえば、SOC（たとえば、システム・ホスト102）は、典型的には、仮想ページまたは物理ページ（たとえば、4キロバイトのページ）を書き込む、または読み出すとき、一度に64のキャッシュ・ライン（4096バイト）を転送するように構成される。
【００２６】
マルチチャネル構成304では、統合されたメモリ・セグメントのチャネル0  310aは、不使用のまたは空のメモリ・ページUU（たとえば、セグメント5〜8）および占有されたメモリ・ページ（たとえば、セグメント1〜4）を含み、CH0は、チャネル0に記憶されるデータを表わす。統合されたメモリ・セグメントのチャネル1  310bは、不使用のメモリUU（たとえば、セグメント5〜8）および占有されたメモリ・ページ（たとえば、セグメント1〜4）を含み、データCH1は、チャネル1に記憶されるデータを表わす。統合されたメモリ・セグメント310では、ある実施形態によれば、データCH0およびデータCH1は、第1のチャネルと第2のチャネルとの間でインターリーブされる。ある実施形態では、データは、2つより多くのチャネル間でインターリーブされてもよい。チャネル統合動作302の後、ある実施形態によれば、メインメモリ104は単一チャネル構成306に変換される。変換後、統合されたメモリ・セグメント312は、ある実施形態によれば、占有されたメモリ・ページ（たとえば、チャネル0のセグメント1〜4）をすべてチャネル0上に含む。さらに、変換後、統合されたメモリ・セグメントのチャネル0  312aは、少なくとも部分的に、その不使用のメモリUU（たとえば、セグメント5〜8）を、統合されたメモリ・セグメントのチャネル1  312bとして以前、チャネル1に記憶されていたデータCH1で満たす。2つ以上のチャネルからのデータを単一のチャネルに統合することによって、コンピューティング・システムは、チャネル（たとえば、チャネル1）、チャネルのためのメモリ・コントローラ、およびチャネルによってサポートされるメモリ回路（たとえば、DIMM）をパワーダウンする能力を受け取る。
【００２７】
特に、単一チャネル構成への変換後、OSおよびアプリケーションは、仮想ページに書き込むことによって、あたかもメインメモリがマルチチャネル構成にあるかのように動作し続ける。これらの仮想ページは、電力制御回路および／またはシステム・エージェント回路によって、単一チャネル内の物理ページに変換される。この点からの注目すべき相違は、OSは、マルチチャネル状態に復帰するまで、UUセグメントを使用できないということである。310aおよび310bにおける不使用スペースにマッピングするこのUUスペースは、今や、312aにおけるチャネル0上のCH1セグメントおよび312bにおける電源オフされたアクセス不能セグメントによって占められるからである。OSは、これらのUUセグメント内にページを割り当てず、システム・エージェント118（図1Aに示される）は、そのような不正なトランザクションをブロックする。
【００２８】
チャネル統合動作302は、本開示の実施形態と整合する、図4のプロセス400および図5のプロセス500で記述される。チャネル統合動作302は、第1のチャネル内の不使用スペースを識別すること、第2のチャネルの一部を第1のチャネルにマッピングすること、第2のチャネルからのデータを第1のチャネル内の不使用スペースにコピーすること、第1のチャネルおよび第2のチャネルに向けられる動作（たとえば、読み出しおよび書き込み）に応答するために第1のチャネルを使用し、オペレーション・システムおよびソフトウェア・アプリケーションが、あたかも第2のチャネルまたは複数のチャネルがアクティブであるかのように仮想メモリ・マッピングを使用できるようにすること、および第2のチャネル（たとえば、チャネル1）をパワーダウンすることを含むが、これらに限定されない。
【００２９】
構成変換は動的である（たとえば、図1Aおよび図1Bのコンピューティング・システム100が動作している間に発生する）ので、電力制御回路は、読み出しおよび書き込み要求を受信し続けながら、単一チャネル構成への変換を扱うように構成できる。第2のチャネル（チャネル1）から第1のチャネル（たとえば、チャネル0）への部分308の実際のコピーの間に新たな読み出しまたは書き込み要求が受信される場合、電力制御回路は、読み出しまたは書き込み要求を満たすために、古いまたは以前のメモリ・アドレスを使用するように構成されてもよい。あるメモリ部分が第1のチャネルにコピーされた後、電力制御回路は、読み出しまたは書き込み要求を（たとえば、チャネル0の）該新しいアドレスに差し向けるように構成されてもよい。変換がすでに行なわれたかどうかを判定し、読み出しまたは書き込み要求を古いアドレスに送るか新しいアドレスに送るかを決定するために単純な比較器が使用できるよう、変換は、より高いアドレスから始まり、より低位のアドレスに続いていくのでもよい。ある実施形態では、OSは、変換の途中で変換を停止してもよい。変換を逆にするために、ある実施形態では、OSは、電力制御回路のためのレジスタ内の構成ビットを変更してもよく、これにより、電力制御回路は、パワーダウンされたチャネルに再び電力を供給し、チャネル1のデータをチャネル0からチャネル1に復元する。
【００３０】
図4は、本開示のさまざまな実施形態による、メインメモリをデュアルチャネルまたはマルチチャネル構成から単一チャネル構成またはチャネルの半分の構成に動的に変換するためのプロセス400のフローチャートである。
【００３１】
動作402では、ある実施形態によれば、オペレーティング・システム（OS）は、メインメモリを半分メモリ・チャネル構成に変換する動作を開始し、OSは、メモリの半分以下が占有されるよう、LRUページをページアウトし、諸ページをセグメント数の半分以下に統合する。一例として、OSは、OSが低帯域幅動作（たとえば、ビデオ再生、ワードプロセッサ・アプリケーションの実行など）を実行するときに、メインメモリを単一チャネル構成に変換することを決定してもよい。
【００３２】
動作404において、ある実施形態によれば、OSは半分メモリ・チャネル構成への変換の開始を要求する。OSは、ある実施形態によれば、プログラムコードにおいて一つまたは複数の要求を送信することにより、前記構成の開始を要求してもよい。OSは、メインメモリのマルチチャネル構成から半分メモリ・チャネル構成への変換を管理するように構成された電力制御回路用のレジスタの一つまたは複数のビットを変更することにより、半分メモリ・チャネル構成の開始を要求してもよい。
【００３３】
動作406では、ある実施形態によれば、電力制御回路および／またはシステム・エージェント回路が、OSからの要求が受け容れ可能であるかどうかを決定する。要求が受け入れ可能でない場合、ある実施形態によれば、動作406は、エラーが報告される動作408に進む。要求が受け入れ可能である場合、ある実施形態によれば、動作406は動作410に進む。
【００３４】
動作410では、ある実施形態によれば、電力制御回路は、半分メモリ・チャネル構成への変換が進行中であることの指標を提供し、電力制御回路は、直接メモリ・アクセス（DMA）回路を通じて変換を開始する。変換は、DMAに変換を開始するコマンドを提供することによって、およびDMAにデータ転送のためのソース（たとえば、チャネル1における占有セグメント）および宛先（たとえば、チャネル0における空きセグメント）アドレスを提供することによって、DMAを通じて開始された。
【００３５】
動作412では、ある実施形態によれば、DMAは、ソース・チャネルの占有セグメント（ソース・アドレス）からのデータをターゲット・チャネルの空きセグメント（宛先アドレス）にコピーし、ソース・チャネルへのトランザクションは、ターゲット・チャネルの再マッピングされたセグメントにルーティングされる。ある実施形態では、DMAは、最も最近に読み出されたソース・アドレスのアドレスでステータス・レジスタを更新する。ある実施形態では、DMAは、最も最近に書き込まれた宛先アドレスのアドレスでステータス・レジスタを更新する。ある実施形態では、DMAまたはルータ論理は、データがすでに旧アドレスから転送されたかどうかに基づいて、読み出しアクセス要求または書き込みアクセス要求が旧（ソース）メモリ・アドレスに向けられるべきか、または新しい（ターゲット）メモリ・アドレスに向けられるべきかを決定する。
【００３６】
動作414では、ある実施形態によれば、DMAは、電力制御回路に変換の完了を報告する。
【００３７】
動作416では、ある実施形態によれば、電力制御回路は、半分チャネル構成への変換が進行中であることの指標をクリアし、電力制御回路は、ソース・チャネルをパワーダウンする。ソース・チャネルのパワーダウンは、ある実施形態によれば、ソース・チャネルのためのメモリ・コントローラ回路への電力を無効にすること、ソース・チャネルのためのメモリ回路へのクロックを無効にすること、ドライバおよび／またはソース・チャネルの動作をサポートする他の物理層コンポーネントへの電力を無効にすることを含むことができる。
【００３８】
ある実施形態では、半数のチャネルまたは単一チャネル構成への変換の代わりに、コンピューティング・システムは、メインメモリを単一ランク構成に変換する（たとえば、データおよび動作をDIMMのランク1またはランク2へ移動させる）ように構成されてもよい。
【００３９】
ある実施形態では、DMAは、単一チャネル構成の電力低減を改善しうる場合には、各OSページ（たとえば、4キロバイトのデータ）を単一のDRAMページ（たとえば、チャネル0上のすべてのメモリ・ダイについての同一バンク内の単一行）に書き込む。
【００４０】
図5は、本開示のさまざまな実施形態による、半数チャネル構成からネイティブ（デュアルチャネルまたはマルチチャネル）構成へとメインメモリを動的に変換解除するためのプロセス500のフローチャートである。
【００４１】
動作502では、ある実施形態によれば、オペレーティング・システム（OS）は、半数チャネル構成からメインメモリを変換解除することを決定する。
【００４２】
動作504では、ある実施形態によれば、OSは、半数チャネル構成からネイティブ・メモリ構成への変換解除の開始を要求する。OSは、ある実施形態によれば、プログラムコードにおいて一つまたは複数の要求を送信することにより、半数チャネル構成からの変換解除の開始を要求してもよい。OSは、メインメモリのマルチチャネル構成から半数チャネル構成への変換を管理するように構成された電力制御回路用のレジスタの一つまたは複数のビットを変更することにより、半数チャネル構成からの変換解除の開始を要求してもよい。
【００４３】
動作506では、ある実施形態によれば、電力制御回路および／またはシステム・エージェント回路が、OSからの要求が受け容れ可能であるかどうかを決定する。要求が受け入れ可能でない場合、ある実施形態によれば、動作506は、エラーが報告される動作508に進む。要求が受け入れ可能である場合、ある実施形態によれば、動作506は動作510に進む。
【００４４】
動作510では、ある実施形態によれば、電力制御回路が、半数チャネル構成からの変換解除が進行中であることを示す指標を提供し、電力制御回路は、SoC内のメモリ・チャネルおよび回路に再び電力を供給し、直接メモリ・アクセス（DMA）回路を通じて変換解除を開始する。変換は、変換解除を開始するためのコマンドをDMAに提供することによって、およびデータ転送のためのソースおよび宛先アドレスをDMAに提供することによって、DMAを通じて開始された。
【００４５】
動作512では、ある実施形態によれば、DMAは、ターゲット・チャネルの占有された（再マップされた）セグメントからのソース・チャネル・データを、ソース・チャネルのセグメントに戻るようにコピーし、ソース・チャネルへのトランザクションは、それらのもとの宛先にルーティングされる。ある実施形態では、DMAは、最も最近に読み出されたソース・アドレスのアドレスでステータス・レジスタを更新する。ある実施形態では、DMAは、最も最近に書き込まれた宛先アドレスのアドレスでステータス・レジスタを更新する。ある実施形態では、DMAまたはルータ論理は、データがすでに古いアドレスから転送されたかどうかに基づいて、追加的な読み出しまたは書き込みアクセス要求が古いメモリ・アドレス（たとえば、チャネル0）に向けられるべきか、または新しいメモリ・アドレス（たとえば、チャネル1）に向けられるべきかを決定する。
【００４６】
動作514では、ある実施形態によれば、DMAは、変換解除の完了を電力制御回路に報告する。
【００４７】
動作516では、電力制御回路は、ネイティブ構成への変換が進行中であることの指標をクリアし、第2のチャネル動作をサポートするためのサポート回路およびコンポーネントは電源が投入されている。
【００４８】
レジスタ127（図1に示される）のレジスタおよびビットの一例は、下記の表1に含まれる。本明細書で使用されるところでは「Pcode」は、電力制御回路を指すか、または機械コードとOSコードの間にある中間コンパイル言語であるプログラムコードを指しうる。
【表１】
2021528712.tif 000003
ある実施形態では、レジスタは16ビットの長さである。レジスタの8ビットは、メモリのどのセグメントまたは部分が空いているか、または占有されているかを示しうる。レジスタの3ビットは、実行する変換のタイプ（たとえば、64ビット単一チャネル、32ビット単一チャネル、単一ランクの変換、またはネイティブ構成への復帰）を示してもよい。1ビットは、変換または変換解除が進行中であるかどうかを示すために使用されうる。どの変換が行なわれているかを示すために3ビットが使用されてもよく、OSに送信されてもよい。エラーが存在し、変換が実行できないかどうかを示すために1ビットが使用されてもよい。
【００４９】
図1A、図1B、図2、図3、図4、および図5の図は、さまざまな実施形態による動作を示すが、図1A、図1B、図2、図3、図4、および図5に示される動作のすべてが他の実施形態のために必要であるわけではないことが理解される。さらに、本開示の他の実施形態では、図1A、図1B、図2、図3、図4、および図5に描かれた動作および／または本明細書に記載された他の動作は、図面のいずれにも特に示されていない仕方で組み合わされてもよく、かかる実施形態は、図1A、図1B、図2、図3、図4、および図5に示されているよりも少数のまたは多数の動作を含んでいてもよいことが、本明細書では十分に考えられている。このように、一つの図面に正確に示されていない特徴および／または動作に向けられたクレームが、本開示の範囲および内容内にあるとみなされる。以下の図は、上記の実施形態を実装するための例示的なアーキテクチャおよびシステムを詳述する。いくつかの実施形態では、上述の一つまたは複数のハードウェア・コンポーネントおよび／または命令は、以下で詳細に説明するようにエミュレートされるか、またはソフトウェアモジュールとして実装される。
【００５０】
上記に詳述した命令の実施形態は、以下に詳述する「一般的ベクトル・フレンドリー命令フォーマット（generic  vector  friendly  instruction  format）」において具現されてもよい。他の実施形態では、そのようなフォーマットは利用されず、別の命令フォーマットが使用されるが、書き込みマスク・レジスタ、さまざまなデータ変換（スウィズル（swizzle）、ブロードキャストなど）、アドレッシングなどの以下の記述は、一般に、上記の命令の実施形態の記述に適用可能である。さらに、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。上記命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、詳述されるものに限定されない。
【００５１】
命令セットは、一つまたは複数の命令フォーマットを含んでいてもよい。所与の命令フォーマットは、とりわけ、実行されるべき動作（たとえば、オペコード）およびその動作が実行されるべきオペランド（単数または複数）および／または他のデータ・フィールド（単数または複数）（たとえば、マスク）を指定する、さまざまなフィールド（たとえば、ビットの数、ビットの位置）を定義しうる。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義を通じてさらに細分化される。たとえば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてもよく（含まれるフィールドは典型的には同じ順序であるが、少なくともいくつかのフィールドは、含まれるフィールドがより少ないので、異なるビット位置を有する）、および／または所与のフィールドが異なる仕方で解釈されるように定義されてもよい。よって、ISAの各命令は、所与の命令フォーマットを使用して、（および、もし定義されていれば、その命令フォーマットの命令テンプレートの与えられた一つで）表現され、動作およびオペランドを指定するためのフィールドを含む。たとえば、例示的なADD命令は、特定のオペコードと命令フォーマットとを有し、命令フォーマットは、そのオペコードを指定するオペコード・フィールドと、オペランド（source1〔ソース1〕/destination〔宛先〕およびsource2〔ソース2〕）を選択するためのオペランド・フィールドとを含む；命令ストリームにおけるこのADD命令の出現は、特定のオペランドを選択するオペランド・フィールド内の特定の内容を有する。アドバンストベクトル拡張（Advanced  Vector  Extensions、AVX）（AVX1およびAVX2）と呼ばれ、ベクトル拡張（Vector  Extensions、VEX）符号化方式を使用するSIMD拡張のセットがリリースおよび／または公開されている（たとえば、非特許文献１、非特許文献２を参照）。
【非特許文献１】Intel（登録商標）  64  and  IA-32  Architectures  Software  Developer's  Manual、September  2014
【非特許文献２】Intel（登録商標）  Advanced  Vector  Extensions  Programming  Reference、October  2014
【００５２】
例示的な命令フォーマット
本明細書に記載される命令（単数または複数）は、異なるフォーマットで具現されうる。さらに、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令（単数または複数）の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてもよいが、これらに限定されない。
【００５３】
一般的ベクトル・フレンドリー命令フォーマット（Generic  Vector  Friendly  Instruction  Format）
ベクトル・フレンドリー命令フォーマットは、ベクトル命令に好適な命令フォーマットである（たとえば、ベクトル演算に特有のある種のフィールドがある）。ベクトル・フレンドリー命令フォーマットを通じてベクトル演算およびスカラー演算の両方がサポートされる実施形態が記載されているが、代替実施形態はベクトル演算、ベクトル・フレンドリー命令フォーマットのみを使用する。
【００５４】
図6A〜6Bは、本開示の実施形態による、一般的ベクトル・フレンドリー命令フォーマットおよびその命令テンプレートを示すブロック図である。図6Aは、本開示の実施形態による一般的ベクトル・フレンドリー命令フォーマットおよびそのクラスA命令テンプレートを示すブロック図であり、図6Bは、本開示の実施形態による一般的ベクトル・フレンドリー命令フォーマットおよびそのクラスB命令テンプレートを示すブロック図である。具体的には、一般的ベクトル・フレンドリー命令フォーマット600のためにクラスAおよびクラスB命令テンプレートが定義されており、その両方とも、メモリ・アクセスなし605命令テンプレートおよびメモリ・アクセス620命令テンプレートを含む。ベクトル・フレンドリー命令フォーマットのコンテキストにおける一般的（generic）という用語は、その命令フォーマットが、いかなる特定の命令セットにも拘束されないことをいう。
【００５５】
記載される本開示の実施形態では、ベクトル・フレンドリー命令フォーマットは、32ビット（4バイト）または64ビット（8バイト）のデータ要素幅（またはサイズ）をもつ64バイトのベクトル・オペランド長（またはサイズ）（よって、64バイトのベクトルは、16個の倍長語サイズの要素または代替的に、8個の四倍長語サイズの要素からなる）と；16ビット（2バイト）または8ビット（1バイト）のデータ要素幅（またはサイズ）をもつ64バイトのベクトル・オペランド長（またはサイズ）と；32ビット（4バイト）、64ビット（8バイト）、16ビット（2バイト）または8ビット（1バイト）のデータ要素幅（またはサイズ）をもつ32バイトのベクトル・オペランド長（またはサイズ）と；32ビット（4バイト）、64ビット（8バイト）、16ビット（2バイト）または8ビット（1バイト）のデータ要素幅（またはサイズ）をもつ16バイトのベクトル・オペランド長（またはサイズ）をサポートするが、代替的な実施形態は、より多くの、より少ない、または異なるデータ要素幅（たとえば、128ビット（16バイト）のデータ要素幅）をもつ、より多くの、より少ない、および／または異なるベクトル・オペランド・サイズ（たとえば、256バイトのベクトル・オペランド）をサポートしてもよい。
【００５６】
図6AにおけるクラスA命令テンプレートは、下記を含む：1）メモリ・アクセスなし605命令テンプレート内には、メモリ・アクセスなしのフル丸め制御タイプ動作610命令テンプレートおよびメモリ・アクセスなしのデータ変換タイプ動作615命令テンプレートが示されている；2）メモリ・アクセス620命令テンプレート内には、メモリ・アクセス時間的625命令テンプレートおよびメモリ・アクセス非時間的630命令テンプレートが示されている。図6BにおけるクラスB命令テンプレートは、下記を含む：1）メモリ・アクセスなし605命令テンプレート内には、メモリ・アクセスなしの書き込みマスク制御、部分的丸め制御タイプ動作612命令テンプレートおよびメモリ・アクセスなしの書き込みマスク制御、vsizeタイプ動作617命令テンプレートが示されている；2）メモリ・アクセス620命令テンプレート内には、メモリ・アクセス、書き込みマスク制御627命令テンプレートが示されている。
【００５７】
一般的ベクトル・フレンドリー命令フォーマット600は、図6A〜6Bに示される順序で下記でリストされる以下のフィールドを含む。
【００５８】
フォーマット・フィールド640――このフィールド内の特定の値（命令フォーマット識別子値）は、ベクトル・フレンドリー命令フォーマットを一意的に識別し、よって、命令ストリーム内のベクトル・フレンドリー命令フォーマットにおける命令の出現を識別する。よって、このフィールドは、一般的ベクトル・フレンドリー命令フォーマットのみを有する命令セットについては必要とされないという意味で、任意的である。
【００５９】
基本動作フィールド642――その内容は、異なる基本動作を区別する。
【００６０】
レジスタ・インデックス・フィールド644――その内容は、直接的に、またはアドレス生成を通じて、レジスタ内であれメモリ内であれ、ソース・オペランドおよび宛先オペランドの位置を指定する。これらは、PxQ（たとえば、32x512、16x128、32x1024、64x1024）レジスタ・ファイルからN個のレジスタを選択するために十分な数のビットを含む。ある実施形態では、Nは、3つまでのソース・レジスタおよび1つの宛先レジスタであってもよいが、代替的な実施形態は、より多数またはより少数のソース・レジスタおよび宛先レジスタをサポートしてもよい（たとえば、2つまでのソースをサポートしてもよく、これらのソースのうちの一つが宛先としても機能する、3つまでのソースをサポートしてもよく、これらのソースのうちの一つが宛先としても機能する、2つまでのソースおよび1つの宛先をサポートしてもよい）。
【００６１】
修正子フィールド646――その内容は、メモリ・アクセスを指定する一般的ベクトル命令フォーマットの命令の出現を、メモリ・アクセスを指定しないものの出現から区別する。つまり、メモリ・アクセスなし605命令テンプレートとメモリ・アクセス620命令テンプレートの間の区別をする。メモリ・アクセス動作は、メモリ階層に対して読み出しおよび／または書き込みを行なう（いくつかの場合には、レジスタ内の値を使用して、ソースおよび／または宛先アドレスを指定する）が、非メモリ・アクセス動作は行なわない（たとえば、ソースおよび宛先がレジスタである）。ある実施形態では、このフィールドはまた、メモリ・アドレス計算を実行するための3つの異なる方法の間で選択もするが、代替的な実施形態は、メモリ・アドレス計算を実行するためのより多数の、より少数の、または異なる方法をサポートしてもよい。
【００６２】
増強動作（augmentation  operation）フィールド650――その内容は、多様な異なる動作のうちのどれが基本動作に加えて実行されるべきかを区別する。このフィールドは、コンテキスト固有である。本開示のある実施形態では、このフィールドは、クラス・フィールド668、アルファ・フィールド652、およびベータ・フィールド654に分割される。増強動作フィールド650は、一般的な一群の動作を、2、3、または4個の命令ではなく、単一命令で実行できるようにする。
【００６３】
スケール・フィールド660――その内容は、メモリ・アドレス生成（たとえば、2scale*インデックス＋ベースを使用するアドレス生成）のためのインデックス・フィールドの内容のスケーリングを許容する。
【００６４】
変位フィールド662A――その内容は、メモリ・アドレス生成の一部として（たとえば、2scale*インデックス＋ベース＋変位を使用するアドレス生成のために）使用される。
【００６５】
変位因子フィールド662B（変位フィールド662Aが変位因子フィールド662Bのすぐ上に隣接していることは、一方または他方が使用されることを示すことに注意）――その内容は、アドレス生成の一部として使用され、メモリ・アクセスのサイズ（N）によってスケールされる変位因子を指定する。ここで、Nはメモリ・アクセスにおけるバイト数である。（たとえば、2scale*インデックス＋ベース＋スケールされた変位を使用するアドレス生成のために使用される。）冗長な下位ビットは無視され、よって、有効アドレスの計算において使用される最終的な変位を生成するために、変位因子フィールドの内容は、メモリ・オペランドの合計サイズ（N）を乗算される。Nの値は、完全なオペコード・フィールド674（本明細書で後述）およびデータ操作フィールド654Cに基づいて、ランタイムにおいて、プロセッサ・ハードウェアによって決定される。変位フィールド662Aおよび変位因子フィールド662Bは、それらがメモリ・アクセスなし605命令テンプレートについては使用されないという意味で任意的であり、および／または異なる実施形態は、それら2つのうちの一つのみを実装してもよく、あるいはどちらも実装しなくてもよい。
【００６６】
データ要素幅フィールド664――その内容は、いくつかのデータ要素幅のうちのどの一つが（いくつかの実施形態では、すべての命令について；他の実施形態では、命令のいくついかについてのみ）使用されるべきであるかを区別する。このフィールドは、一つのデータ要素幅のみがサポートされる、および／またはデータ要素幅がオペコードの何らかの側面を使用してサポートされる場合には必要とされないという意味で任意的である。
【００６７】
書き込みマスク・フィールド670――その内容は、データ要素位置ごとに、宛先ベクトル・オペランド内のそのデータ要素位置が基本動作および増強動作の結果を反映するかどうかを制御する。クラスA命令テンプレートはmerging-writemasking〔マージ‐書き込みマスク〕をサポートし、クラスB命令テンプレートはmerging-writemaskingとzeroing-writemasking〔ゼロ化‐書き込みマスク〕の両方をサポートする。マージの際には、ベクトル・マスクにより、宛先内の要素の任意の集合が、任意の動作（基本動作および増強動作によって指定される）の実行中に更新から保護されることができ；他の一つの実施形態では、対応するマスク・ビットが0を有する宛先の各要素の古い値を保持する。対照的に、ゼロ化の際には、ベクトル・マスクにより、宛先内の要素の任意の集合が、任意の動作（基本動作および増強動作によって指定される）の実行中にゼロにされることができ；ある実施形態では、対応するマスク・ビットが0値を有するとき、宛先の要素が0に設定される。この機能のサブセットは、実行されている動作のベクトル長（すなわち、最初から最後までの、修正されている要素の範囲）を制御する能力であるが、修正される諸要素が連続的である必要はない。よって、書き込みマスク・フィールド670は、ロード、ストア、算術、論理等を含む部分的なベクトル動作を許容する。記載される本開示の実施形態では、書き込みマスク・フィールド670の内容は、使用される書き込みマスクを含むいくつかの書き込みマスク・レジスタのうちの一つを選択するが（よって、書き込みマスク・フィールド670の内容が、実行されるべきマスキングを間接的に同定する）、代替的な実施形態または追加的な実施形態は、マスク書き込みフィールド670の内容が実行されるべきマスキングを直接指定することを許容する。
【００６８】
即値フィールド（immediate  field）672――その内容は、即値（immediate）の指定を許容する。このフィールドは、即値をサポートしない一般的ベクトル・フレンドリー・フォーマットの実装では存在せず、即値を使用しない命令では存在しないという意味で任意的である。
【００６９】
クラス・フィールド668――その内容は、異なるクラスの命令を区別する。図6A〜図6Bを参照すると、このフィールドの内容は、クラスA命令とクラスB命令の間で選択する。図6A〜図6Bでは、角丸の四角形が、特定の値がフィールド内に存在することを示すために使用される（たとえば、図6A〜図6Bのクラス・フィールド668について、それぞれ、クラスA  668AおよびクラスB  668B）。
【００７０】
クラスAの命令テンプレート
クラスAの非メモリ・アクセス605命令テンプレートの場合、アルファ・フィールド652は、RSフィールド652Aとして解釈され、その内容は、種々の増強動作タイプのうちのどれが実行されるかを区別する（たとえば、丸め652A.1およびデータ変換652A.2は、メモリ・アクセスなし、丸めタイプ動作610およびメモリ・アクセスなし、データ変換タイプ動作615命令テンプレートのために指定される）。一方、ベータ・フィールド654は、指定されたタイプの動作のうちのどれが実行されるべきかを区別する。メモリ・アクセスなし605命令テンプレートでは、スケール・フィールド660、変位フィールド662A、および変位スケール・フィールド662Bは存在しない。
【００７１】
メモリ・アクセスなし命令テンプレート――フル丸め制御タイプ動作
メモリ・アクセスなしフル丸め制御タイプ動作610命令テンプレートでは、ベータ・フィールド654は丸め制御フィールド654Aとして解釈され、その内容は静的な丸め（static  rounding）を提供する。本開示の記載された実施形態では、丸め制御フィールド654Aは、全浮動小数点例外抑制（suppress  all  floating  point  exceptions、SAE）フィールド656および丸め動作制御フィールド658を含むが、代替的な実施形態は、これらの概念を両方とも同じフィールドにエンコードしてもよく、またはこれらの概念／フィールドのうちの一方または他方のみを有することをサポートしてもよい（たとえば、丸め動作制御フィールド658のみを有していてもよい）。
【００７２】
SAEフィールド656――その内容は、例外イベント報告を無効にするか否かを区別する。SAEフィールド656の内容が抑制が有効であることを示すときは、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも持ち上げない。
【００７３】
丸め動作制御フィールド658――その内容は、一群の丸め動作（たとえば、切り上げ、切り捨て、0への丸め、最も近いものへの丸め）のうちのどれを実行するかを区別する。よって、丸め動作制御フィールド658は、命令ごとに丸めモードの変更を許容する。プロセッサが丸めモードを指定するための制御レジスタを含む本開示のある実施形態では、丸め動作制御フィールド650の内容が、そのレジスタ値をオーバーライドする。
【００７４】
メモリ・アクセスなし命令テンプレート――データ変換タイプ動作
メモリ・アクセスなしデータ変換タイプ動作615命令テンプレートでは、ベータ・フィールド654は、データ変換フィールド654Bとして解釈され、その内容は、いくつかのデータ変換のうちのどれが実行されるべきか（たとえば、データ変換なし、スウィズル（swizzle）、ブロードキャスト）を区別する。
【００７５】
クラスAのメモリ・アクセス620命令テンプレートの場合、アルファ・フィールド652は、放逐ヒント（eviction  hint）フィールド652Bとして解釈され、その内容は、放逐ヒントのうちのどれが使用されるべきかを区別する（図6Aでは、時間的652B.1および非時間的652B.2がそれぞれ、メモリ・アクセス時間的625命令テンプレートおよびメモリ・アクセス非時間的630命令テンプレートについて指定される）。一方、ベータ・フィールド654は、データ操作フィールド654Cとして解釈され、その内容は、いくつかのデータ操作操作動作（プリミティブとしても知られる）のうちのどれが実行されるべきかを区別する（たとえば、操作なし、ブロードキャスト、ソースのアップコンバート、および宛先のダウンコンバート）。メモリ・アクセス620命令テンプレートは、スケール・フィールド660、および任意的に変位フィールド662Aまたは変位スケール・フィールド662Bを含む。
【００７６】
ベクトル・メモリ命令は、メモリからのベクトル・ロードおよびメモリへのベクトル・ストアを実行し、変換サポートがある。通常のベクトル命令と同様に、ベクトル・メモリ命令は、データ要素毎に、データをメモリから／メモリへ転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトル・マスクの内容によって指定される。
【００７７】
メモリ・アクセス命令テンプレート――時間的
時間的データは、キャッシュから恩恵を得るために十分早く再利用される可能性が高いデータである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法で、ヒントを実装することがある。
【００７８】
メモリ・アクセス命令テンプレート――非時間的
非時間的データは、第一レベル・キャッシュ内のキャッシュから恩恵を得るために十分早く再利用されそうにないデータであり、放逐のために優先されるべきである。しかし、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む、異なる方法で、ヒントを実装することがある。
【００７９】
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファ・フィールド652は、書き込みマスク制御（Z）フィールド652Cとして解釈され、その内容は、書き込みマスク・フィールド670によって制御される書き込みマスキングがマージングであるべきか、ゼロ化であるべきかを区別する。
【００８０】
クラスBの非メモリ・アクセス605命令テンプレートの場合、ベータ・フィールド654の一部は、RLフィールド657Aとして解釈され、その内容は、異なる増強動作タイプのうちのどれが実行されるべきかを区別する（たとえば、丸め657A.1およびベクトル長（VSIZE）657A.2は、それぞれ、メモリ・アクセスなし、書き込みマスク制御、部分的丸め制御タイプ動作612命令テンプレートおよびメモリ・アクセスなし、書き込みマスク制御、VSIZEタイプ動作617命令テンプレートについて指定される）。一方、ベータ・フィールド654の残りの部分は、指定されたタイプの動作のうちのどれが実行されるべきかを区別する。メモリ・アクセスなし605命令テンプレートでは、スケール・フィールド660、変位フィールド662A、および変位スケール・フィールド662Bは存在しない。
【００８１】
メモリ・アクセスなし、書き込みマスク制御、部分的丸め制御タイプ動作610命令テンプレートでは、ベータ・フィールド654の残りの部分は、丸め動作フィールド659Aとして解釈され、例外イベント報告は無効にされる（所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、いかなる浮動小数点例外ハンドラも発生させない）。
【００８２】
丸め動作制御フィールド659A――ちょうど丸め動作制御フィールド658と同様に、その内容は、一群の丸め動作のうちのどれを実行するかを区別する（たとえば、切り上げ、切り下げ、ゼロへの丸め、最も近いものへの丸め）。よって、丸め動作制御フィールド659Aは、命令ごとに丸めモードの変更を許容する。プロセッサが丸めモードを指定するための制御レジスタを含む本開示のある実施形態では、丸め動作制御フィールド650の内容は、そのレジスタ値をオーバーライドする。
【００８３】
メモリ・アクセスなし、書き込みマスク制御、VSIZEタイプ動作617命令テンプレートでは、ベータ・フィールド654の残りの部分は、ベクトル長フィールド659Bとして解釈され、その内容は、いくつかのデータ・ベクトル長のうちのどれが実行対象とされるべきか（たとえば、128、256、または512バイト）を区別する。クラスBのメモリ・アクセス620命令テンプレートの場合、ベータ・フィールド654の一部は、ブロードキャスト・フィールド657Bとして解釈され、その内容は、ブロードキャスト・タイプ・データ操作動作が実行されるべきか否かを区別し、ベータ・フィールド654の残りの部分は、ベクトル長フィールド659Bとして解釈される。メモリ・アクセス620命令テンプレートは、スケール・フィールド660および任意的に、変位フィールド662Aまたは変位スケール・フィールド662Bを含む。
【００８４】
一般的ベクトル・フレンドリー命令フォーマット600に関し、フォーマット・フィールド640、基本動作フィールド642、およびデータ要素幅フィールド664を含む完全なオペコード・フィールド674が示されている。完全なオペコード・フィールド674がこれらのフィールドのすべてを含む一実施形態が示されているが、完全なオペコード・フィールド674は、これらのフィールドのすべてはサポートしない実施形態においては、これらのフィールドの全部よりも少ないものを含む。完全なオペコード・フィールド674は、動作コード（オペコード）を提供する。
【００８５】
増強動作フィールド650、データ要素幅フィールド664、および書き込みマスク・フィールド670は、一般的ベクトル・フレンドリー命令フォーマットにおいて、これらの特徴が命令ごとに指定されることを許容する。
【００８６】
書き込みマスク・フィールドとデータ要素幅フィールドの組み合わせは、それらが異なるデータ要素幅に基づいてマスクを適用することを許容するという点で、タイプ付きの命令（typed  instructions）を生成する。
【００８７】
クラスAおよびクラスB内に見出されるさまざまな命令テンプレートは、種々の状況において有益である。本開示のいくつかの実施形態において、プロセッサ内の異なるプロセッサまたは異なるコアは、クラスAのみ、クラスBのみ、または両方のクラスをサポートしてもよい。たとえば、汎用コンピューティングのために意図されている高性能汎用順序外コアは、クラスBのみをサポートしてもよく、主としてグラフィックスおよび／または科学的（スループット）コンピューティングのために意図されているコアは、クラスAのみをサポートしてもよく、両方のために意図されているコアは両方をサポートしてもよい（もちろん、両方のクラスからのテンプレートおよび命令の何らかの混合を有するが、両方のクラスからのテンプレートおよび命令のすべては有さないコアも本開示の範囲内である）。また、単一のプロセッサが複数のコアを含んでいてもよく、それらのコアはすべて同じクラスをサポートする、または異なるコアは異なるクラスをサポートする。たとえば、別個のグラフィックスおよび汎用コアを有するプロセッサでは、主としてグラフィックスおよび／または科学的コンピューティングのために意図されたグラフィックス・コアの一つはクラスAのみをサポートしてもよく、一方、汎用コアの一つまたは複数は、クラスBのみをサポートする汎用コンピューティングのために意図された順序外実行およびレジスタ名称変更を有する高性能汎用コアであってもよい。別個のグラフィックス・コアを有しない別のプロセッサは、クラスAおよびクラスBの両方をサポートする一つまたは複数の汎用順序内または順序外コアを含んでいてもよい。もちろん、一方のクラスからの特徴は、本開示の異なる実施形態においては他方のクラスでも実装されてもよい。高レベル言語で書かれたプログラムは、多様な異なる実行可能形式にされる（たとえば、ジャストインタイム・コンパイルされるまたは静的にコンパイルされる）。実行可能形式は：1）実行のためにターゲット・プロセッサによってサポートされるクラス（単数または複数）の命令のみを有する形式；または、2）すべてのクラスの命令の異なる組み合わせを使用して書かれた代替的な諸ルーチンを有しており、現在コードを実行しているプロセッサによってサポートされている命令に基づいて、実行すべきルーチンを選択する制御フロー・コードを有する形式を含む。
【００８８】
例示的な特定のベクトル・フレンドリー命令フォーマット
図7は、本開示の実施形態による、例示的な特定のベクトル・フレンドリー命令フォーマットを示すブロック図である。図7は、フィールドの位置、サイズ、解釈、および順序、ならびにそれらのフィールドのいくつかの値を指定するという意味で特定的である、特定のベクトル・フレンドリー命令フォーマット700を示す。特定のベクトル・フレンドリー命令フォーマット700は、x86命令セットを拡張するために使用されてもよく、よって、フィールドのいくつかは、既存のx86命令セットおよびその拡張（たとえば、AVX）において使用されるものと類似しているか、または同一である。このフォーマットは、拡張をもつ既存のx86命令セットのプレフィックス符号化フィールド、実オペコード・バイト・フィールド、MOD  R/Mフィールド、SIBフィールド、変位（displacement）フィールド、および即値フィールドと整合したままである。図7からのフィールドが対応している図6からのフィールドが示される。
【００８９】
説明の目的で、一般的ベクトル・フレンドリー命令フォーマット600の文脈において、特定のベクトル・フレンドリー命令フォーマット700を参照して本開示の実施形態を説明するが、本開示は、請求項に記載される場合を除いて、特定のベクトル・フレンドリー命令フォーマット700に限定されないことが理解されるべきである。たとえば、一般的ベクトル・フレンドリー命令フォーマット600は、さまざまなフィールドについて多様な可能なサイズを考えているが、特定のベクトル・フレンドリー命令フォーマット700は、特定のサイズのフィールドを有するものとして示されている。具体例として、データ要素幅フィールド664は、特定のベクトル・フレンドリー命令フォーマット700においては1ビット・フィールドとして示されているが、本開示はそれに限定されない（すなわち、一般的ベクトル・フレンドリー命令フォーマット600は、データ要素幅フィールド664の他のサイズを考えている）。
【００９０】
一般的ベクトル・フレンドリー命令フォーマット600は、図7Aに示される順序で以下に挙げるフィールドを含む。
【００９１】
EVEXプレフィックス（バイト0〜3）702――4バイト形式でエンコードされる。
【００９２】
フォーマット・フィールド640（EVEXバイト0、ビット[7:0]）――最初のバイト（EVEXバイト0）はフォーマット・フィールド640であり、それは0x62（本開示の一実施形態においてベクトル・フレンドリー命令フォーマットを区別するために使用される一意的な値）を含む。
【００９３】
第2〜第4バイト（EVEXバイト1〜3）は、特定の機能を提供するいくつかのビット・フィールドを含む。
【００９４】
REXフィールド705（EVEXバイト1、ビット[7-5]）――EVEX.Rビット・フィールド（EVEXバイト1、ビット[7]-R）、EVEX.Xビット・フィールド（EVEXバイト1、ビット[6]-X）、および657BEXバイト1、ビット[5]-B）から構成される。EVEX.R、EVEX.X、およびEVEX.Bビット・フィールドは対応するVEXビット・フィールドと同じ機能を提供し、1の補数形式を用いてエンコードされる。すなわち、ZMM0は1111Bとしてエンコードされ、ZMM15は0000Bとしてエンコードされる。命令の他のフィールドは、当技術分野で知られているように、レジスタ・インデックスの下位3ビット（rrr、xxx、およびbbb）をエンコードし、よって、Rrrr、Xxxx、およびBbbbは、EVEX.R、EVEX.X、およびEVEX.Bを加えることによって形成されうる。
【００９５】
REX'フィールド610――これはREX'フィールド610の最初の部分であり、拡張された32レジスタ・セットの上位16または下位16のいずれかをエンコードするために使用されるEVEX.R'ビット・フィールド（EVEXバイト1、ビット[4]-R'）である。本開示のある実施形態では、このビットは、以下に示す他のビットとともに、実オペコード・バイトは62であるBOUND命令から（周知のx86  32ビット・モードで）区別するためにビット反転フォーマットで格納されるが、MOD  R/Mフィールド（後述）において、MODフィールドにおける11という値を受け入れない；本開示の代替的な実施形態は、このビットおよび下記の他のビットは反転フォーマットで格納されない。下位16レジスタをエンコードするために値1が使用される。換言すれば、R'RrrrはEVEX.R'、EVEX.R、および他のフィールドからの他のRRRを組み合わせることによって形成される。
【００９６】
オペコード・マップ・フィールド715（EVEXバイト1、ビット[3:0]-mmmm）――その内容は、含意される先頭オペコード・バイト（0F、0F  38、または0F  3）をエンコードする。
【００９７】
データ要素幅フィールド664（EVEXバイト2、ビット[7]-W）――これは、記法EVEX.Wで表わされる。EVEX.Wは、データ・タイプ（32ビットデータ要素または64ビットデータ要素のいずれか）の粒度（サイズ）を定義するために使用される。
【００９８】
EVEX.vvvv  720（EVEXバイト2、ビット[6:3]-vvvv）  EVEX.vvvvの役割は次のものを含んでいてもよい：1）EVEX.vvvvは、反転した（1の補数）形式で指定され第1のソース・レジスタ・オペランドをエンコードし、2つ以上のソース・オペランドをもつ命令について有効である；2）EVEX.vvvvは、ある種のベクトル・シフトについて1の補数形式で指定された宛先レジスタ・オペランドをエンコードする；3）EVEX.vvvvは、いかなるオペランドもエンコードせず、そのフィールドはリザーブされ、1111bを含むべきである。よって、EVEX.vvvvフィールド720は、反転した（1の補数）形式で格納された最初のソース・レジスタ指定子の下位4ビットをエンコードする。命令に依存して、指定子サイズを32個のレジスタに拡張するために、余分な異なるEVEXビット・フィールドが使用される。
【００９９】
EVEX.U  668クラス・フィールド（EVEXバイト2、ビット[2]-U）-EVEX.U＝0の場合、そのことは、クラスAまたはEVEX.U0を示し、EVEX.U＝1の場合、そのことはクラスBまたはEVEX.U1を示す。
【０１００】
プレフィックス・エンコード・フィールド725（EVEXバイト2、ビット[1:0]-pp）――基本動作フィールドのための追加ビットを提供する。EVEXプレフィックス・フォーマットでレガシーSSE命令のサポートを提供することに加え、これは、SIMDプレフィックスをコンパクト化する恩恵も有する（SIMDプレフィックスを表現するために1バイトを必要とするのではなく、EVEXプレフィックスは2ビットしか必要としない）。ある実施形態では、レガシー・フォーマットとEVEXプレフィックス・フォーマットの両方でSIMDプレフィックス（66H、F2H、F3H）を使用するレガシーSSE命令をサポートするために、これらのレガシーSIMDプレフィックスは、SIMDプレフィックス・エンコード・フィールド中にエンコードされ、ランタイムにおいて、デコーダのPLAに提供される前に、レガシーSIMDプレフィックスに展開される（よって、PLAは、これらのレガシー命令のレガシー・フォーマットとEVEXフォーマットの両方を、修正なしに実行することができる）。より新しい命令はオペコード拡張としてEVEXプレフィックス・エンコード・フィールドの内容を直接使うことができるが、ある種の実施形態は、整合性のために同様の仕方で展開するものの、これらのレガシーSIMDプレフィックスによって異なる意味が指定されることを許容する。代替的な実施形態は、2ビットのSIMDプレフィックス・エンコードをサポートし、よって展開を必要としないよう、PLAを再設計してもよい。
【０１０１】
アルファ・フィールド652（EVEXバイト3、ビット[7]-EH；EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write  mask  control、およびEVEX.Nとしても知られる；αでも示される）――前述のように、このフィールドはコンテキスト固有である。
【０１０２】
ベータ・フィールド654（EVEXバイト3、ビット[6:4]-SSS；EVEX.s2-0、EVEX.r2-0、EVEX.rr1、EVEX.LL0、EVEX.LLBとしても知られる;βββでも示される）――前述のように、このフィールドはコンテキスト固有である。
【０１０３】
REX'フィールド610――これはREX'フィールドの残りの部分であり、拡張された32レジスタ・セットの上位16または下位16のいずれかをエンコードするために使用されうるEVEX.V'ビット・フィールド（EVEXバイト3、ビット[3]-V'）である。このビットはビット反転形式で格納される。値1は、下位16レジスタをエンコードするために使用される。換言すれば、V'VVVVは、EVEX.V'とEVEX.vvvvを組み合わせることによって形成される。
【０１０４】
書き込みマスク・フィールド670（EVEXバイト3、ビット[2:0]-kkk）――その内容は、前述したように、諸書き込みマスク・レジスタのうちのあるレジスタのインデックスを指定する。本開示のある実施形態では、特定の値EVEX.kkk＝000は、その特定の命令について書き込みマスクが使用されないことを含意する特別な挙動を有する（これは、すべて1に固定構成にされた書き込みマスクまたはマスキング・ハードウェアをバイパスするハードウェアの使用を含む多様な仕方で実装されうる）。
【０１０５】
実オペコード・フィールド730（バイト4）は、オペコード・バイトとしても知られる。オペコードの一部はこのフィールドで指定される。
【０１０６】
MOD  R/Mフィールド740（バイト5）は、MODフィールド742、Regフィールド744、およびR/Mフィールド746を含む。前述のように、MODフィールド742の内容は、メモリ・アクセス動作と非メモリ・アクセス動作を区別する。Regフィールド744の役割は、2つの状況に要約できる：宛先レジスタ・オペランドまたはソース・レジスタ・オペランドのいずれかをエンコードすること、またはオペコード拡張として扱われ、いかなる命令オペランドをエンコードするためにも使用されないことである。R/Mフィールド746の役割は、次を含んでいてもよい：メモリ・アドレスを参照する命令オペランドをエンコードすること、または宛先レジスタ・オペランドまたはソース・レジスタ・オペランドのいずれかをエンコードすること。
【０１０７】
スケール、インデックス、ベース（Scale,  Index,  Base、SIB）バイト（バイト6）――前述のように、スケール・フィールド650の内容はメモリ・アドレス生成のために使用される。SIB.xxx  754およびSIB.bbb  756――これらのフィールドの内容は、レジスタ・インデックスXxxxおよびBbbbに関して以前に言及されている。
【０１０８】
変位フィールド662A（バイト7〜10）――MODフィールド742が10を含む場合、バイト7〜10は変位フィールド662Aであり、これはレガシーの32ビット変位（disps32）と同じように機能し、バイト粒度で機能する。
【０１０９】
変位因子フィールド662B（バイト7）――MODフィールド742が01を含む場合、バイト7は変位因子フィールド662Bである。このフィールドの位置は、レガシーx86命令セット8ビット変位（disp8）と同じである。これはバイト粒度で機能する。disp8は符号拡張されているため、−128〜127バイトのオフセットしかアドレッシングできない。64バイトのキャッシュラインに関しては、disp8は8ビットを使用するが、該8ビットは、4つの実際に有用な値−128、−64、0、および64のみに設定できる。しばしばより広い範囲が必要とされるため、disp32が使用されるが、disp32は4バイトを必要とする。disp8およびdisp32とは対照的に、変位因子フィールド662Bは、disp8の再解釈であり、変位因子フィールド662Bを使用するときは、実際の変位は、変位因子フィールドの内容にメモリ・オペランド・アクセスのサイズ（N）を乗算したものによって決定される。このタイプの変位はdisp8*Nと呼ばれる。これは、平均命令長を減少させる（変位のために単一バイトが使用されるが、レンジがはるかに大きい）。そのような圧縮された変位は、有効変位がメモリ・アクセスの粒度の倍数であるという仮定に基づいており、よって、アドレス・オフセットの冗長な下位ビットはエンコードされる必要はない。換言すれば、変位因子フィールド662Bは、レガシーのx86命令セットの8ビット変位を置き換える。よって、変位因子フィールド662Bは、disp8がdisp8*Nにオーバーロードされる点を唯一の例外として、x86命令セットの8ビット変位と同じ方法でエンコードされる（よって、ModRM/SIBエンコード規則に変更はない）。換言すれば、エンコード規則やエンコード長に変更はなく、ハードウェアによる変位値の解釈においてのみ変更がある（バイトごとのアドレス・オフセットを得るためにメモリ・オペランドのサイズによって変位をスケーリングする必要がある）。即値フィールド672は、前述のように動作する。
【０１１０】
完全なオペコード・フィールド
図7Bは、本開示のある実施形態による、完全なオペコード・フィールド674を構成する、特定のベクトル・フレンドリー命令フォーマット700の諸フィールドを示すブロック図である。具体的には、完全なオペコード・フィールド674は、フォーマット・フィールド640、基本動作フィールド642、およびデータ要素幅（W）フィールド664を含む。基本動作フィールド642は、プレフィックス・エンコード・フィールド725、オペコード・マップ・フィールド715、および実オペコード・フィールド730を含む。
【０１１１】
レジスタ・インデックス・フィールド
図7Cは、本開示のある実施形態による、レジスタ・インデックス・フィールド644を構成する、特定のベクトル・フレンドリー命令フォーマット700の諸フィールドを示すブロック図である。具体的には、レジスタ・インデックス・フィールド644は、REXフィールド705、REX'フィールド710、MODR/M.regフィールド744、MODR/M.r/mフィールド746、VVVVフィールド720、xxxフィールド754、およびbbbフィールド756を含む。
【０１１２】
増強動作フィールド
図7Dは、本開示のある実施形態による、増強動作フィールド650を構成する、特定のベクトル・フレンドリー命令フォーマット700の諸フィールドを示すブロック図である。クラス（U）フィールド668が0を含むとき、それはEVEX.U0（クラスA  668A）を示し、1を含むとき、それはEVEX.U1（クラスB  668B）を示す。U＝0でありMODフィールド742が11（メモリ・アクセス動作なしを意味する）を含むときは、アルファ・フィールド652（EVEXバイト3、ビット[7]-EH）は、rsフィールド652Aとして解釈される。rsフィールド652Aが1（丸め652A.1）を含むときは、ベータ・フィールド654（EVEXバイト3、ビット[6:4]SSS）は、丸め制御フィールド654Aとして解釈される。丸め制御フィールド654Aは、1ビットのSAEフィールド656および2ビットの丸め動作フィールド658を含む。rsフィールド652Aが0（データ変換652A.2）を含むとき、ベータ・フィールド654（EVEXバイト3、ビット[6:4]SSS）は、3ビットのデータ変換フィールド654Bとして解釈される。U=0でありMODフィールド742が00、01、または10（メモリ・アクセス動作を意味する）を含むときは、アルファ・フィールド652（EVEXバイト3、ビット[7]-EH）は、放逐ヒント（EH）・フィールド652Bとして解釈され、ベータ・フィールド654（EVEXバイト3、ビット[6:4]SSS）は、3ビットのデータ操作フィールド654Cとして解釈される。
【０１１３】
U＝1であるときは、アルファ・フィールド652（EVEXバイト3、ビット[7]-EH）は、書き込みマスク制御（Z）フィールド652Cとして解釈される。U＝1でありMODフィールド742が11（メモリ・アクセス動作なしを意味する）を含むときは、ベータ・フィールド654（EVEXバイト3、ビット[4]S0）の一部は、RLフィールド657Aとして解釈され；1（丸め657A.1）を含むときは、ベータ・フィールド654の残り（EVEXバイト3、ビット[6-5]S2-1）は、丸め動作フィールド659Aとして解釈され、一方、RLフィールド657Aが0（VSIZE  657.A2）を含むときは、ベータ・フィールド654の残り（EVEXバイト3、ビット[6-5]S2-1）は、ベクトル長フィールド659B（EVEXバイト3、ビット[6-5]L1-0）として解釈される。U＝1でありMODフィールド742が00、01、または10（メモリ・アクセス動作を意味する）を含むときは、ベータ・フィールド654（EVEXバイト3、ビット[6:4]SSS）は、ベクトル長フィールド659B（EVEXバイト3、ビット[6-5]L1-0）およびブロードキャスト・フィールド657B（EVEXバイト3、ビット[4]B）として解釈される。
【０１１４】
例示的なレジスタ・アーキテクチャ
図8は、本開示のある実施形態によるレジスタ・アーキテクチャ800のブロック図である。図示した実施形態では、幅512ビットの32個のベクトル・レジスタ810があり、これらのレジスタは、zmm0〜zmm31として参照される。下位の16個のzmmレジスタの下位256ビットは、レジスタymm  0〜16上にオーバーレイされる。下位の16個のzmmレジスタの下位128ビット（ymmレジスタの下位128ビット）は、レジスタxmm  0〜15上にオーバーレイされる。特定のベクトル・フレンドリー命令フォーマット700は、以下の表に示されるように、これらのオーバーレイされたレジスタ・ファイル上で動作する。
【表２】
2021528712.tif 000004
【０１１５】
換言すれば、ベクトル長フィールド659Bが、最大長と、一つまたは複数の他のより短い長さとの間で選択し、それぞれのかかるより短い長さは、前の長さの半分の長さであり、ベクトル長フィールド659Bのない命令テンプレートは、最大ベクトル長で機能する。さらに、ある実施形態では、特定のベクトル・フレンドリー命令フォーマット700のクラスB命令テンプレートは、パックされたまたはスカラーの単精度／倍精度浮動小数点データおよびパックされたまたはスカラーの整数データに対して機能する。スカラー動作は、zmm/ymm/xmmレジスタ内の最下位のデータ要素位置に対して実行される動作であり、より高位のデータ要素位置は、実施形態に依存して、命令の前と同じままにされるか、ゼロにされる。
【０１１６】
書き込みマスク・レジスタ815――図示した実施形態では、それぞれ64ビットのサイズの8つの書き込みマスク・レジスタ（k0〜k7）がある。代替的な実施形態では、書き込みマスク・レジスタ815は、サイズが16ビットである。前述のように、本開示のある実施形態では、ベクトル・マスク・レジスタk0は、書き込みマスクとして使用されることができず；通常k0を示すエンコードが書き込みマスクのために使用されるとき、それは0xFFFFの固定構成の書き込みマスクを選択し、事実上、その命令についての書き込みマスクを無効にする。
【０１１７】
汎用レジスタ825――図示した実施形態では、16個の64ビット汎用レジスタがあり、メモリ・オペランドをアドレス指定するために既存のx86アドレス指定モードとともに使用される。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15の名前で参照される。
【０１１８】
スカラー浮動小数点スタック・レジスタ・ファイル（x87スタック）845上には、MMXパックされた整数フラット・レジスタ・ファイル850がエイリアスされる――図示した実施形態では、x87スタックは、x87命令セット拡張を使用して32/64/80ビット浮動小数点データに対してスカラー浮動小数点演算を実行するために使用される8要素のスタックであり、一方、MMXレジスタは、64ビットのパックされた整数データに対して演算を実行するために使用されるとともに、MMXレジスタとXMMレジスタとの間で実行されるいくつかの動作のためにオペランドを保持するために使用される。
【０１１９】
本開示の代替的な実施形態は、より広いまたはより狭いレジスタを使用してもよい。さらに、本開示の代替的な実施形態は、より多くの、より少ない、または異なるレジスタ・ファイルおよびレジスタを使用してもよい。
【０１２０】
代表的なコア・アーキテクチャ、プロセッサ、およびコンピュータ・アーキテクチャ
プロセッサ・コアは、異なる方法、異なる目的、および異なるプロセッサで実装されうる。たとえば、そのようなコアの実装は、1）汎用コンピューティングのために意図された汎用順序内コア、2）汎用コンピューティングのために意図された高性能汎用順序外コア、3）主にグラフィックスおよび／または科学的（スループット）コンピューティングのために意図された専用コアを含みうる。異なるプロセッサの実装は：1）汎用コンピューティングのために意図された一つまたは複数の汎用順序内コアおよび／または汎用コンピューティングのために意図された一つまたは複数の汎用順序外コアを含むCPUと、2）主にグラフィックスおよび／または科学用（スループット）のために意図された一つまたは複数の特殊目的コアを含むコプロセッサとを含んでいてもよい。そのような異なるプロセッサは、異なるコンピュータ・システム・アーキテクチャをもたらし、このアーキテクチャは、1）CPUとは別個のチップ上のコプロセッサ；2）CPUと同じパッケージ内の別個のダイ上のコプロセッサ；3）CPUと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは時に、統合グラフィックスおよび／または科学的（スループット）論理などの特殊目的論理として、または特殊目的コアとして称される）、4）同じダイ上に、記述されたCPU（時にアプリケーション・コアまたはアプリケーション・プロセッサと称される）、上述されたコプロセッサ、および追加的な機能を含んでいてもよいシステムオンチップを含みうる。次に、例示的なコア・アーキテクチャが記述され、その後、例示的なプロセッサおよびコンピュータ・アーキテクチャを記述する。
【０１２１】
例示的なコア・アーキテクチャ
順序内および順序外のコア・ブロック図
図9Aは、本開示の実施形態による、例示的な順序内（in-order［インオーダー］）パイプラインおよび例示的なレジスタ名称変更（register  renaming）、順序外（out-of-order［アウトオブオーダー］）発行／実行パイプラインの両方を示すブロック図である。図9Bは、本開示の実施形態によるプロセッサに含まれるべき、順序内アーキテクチャ・コアの例示的な実施形態および例示的なレジスタ名称変更、順序外発行／実行アーキテクチャ・コアの両方を示すブロック図である。図9A〜図9Bの実線のボックスは、順序内パイプラインおよび順序内コアを示し、一方、破線のボックスの任意的な追加は、レジスタ名称変更、順序外発行／実行パイプラインおよびコアを示している。順序内側面が順序外側面のサブセットであることを考え、順序外側面が記述される。
【０１２２】
図9Aでは、プロセッサ・パイプライン900は、フェッチ段902、長さデコード段904、デコード段906、割り当て段908、名称変更段910、スケジューリング（ディスパッチまたは発行としても知られる）段912、レジスタ読み出し／メモリ読み出し段914、実行段916、書き戻し／メモリ書き込み段918、例外処理段922、およびコミット段924を含む。
【０１２３】
図9Bは、実行エンジン・ユニット950に結合されたフロントエンド・ユニット930を含むプロセッサ・コア990を示し、両者はメモリ・ユニット970に結合されている。コア990は、縮小命令セット・コンピューティング（RISC）コア、複雑命令セット・コンピューティング（CISC）コア、超長命令語（VLIW）コア、またはハイブリッドまたは代替コア・タイプであってもよい。さらに別のオプションとして、コア990は、たとえば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサ・コア、汎用コンピューティング・グラフィックス処理ユニット（GPGPU）コア、グラフィックス・コア等のような特殊目的コアであってもよい。
【０１２４】
フロントエンド・ユニット930は、命令キャッシュ・ユニット934に結合された分岐予測ユニット932を含み、この分岐予測ユニットは、命令トランスレーションルックアサイドバッファ（TLB）936に結合され、この命令TLBは命令フェッチ・ユニット938に結合され、命令フェッチ・ユニットはデコード・ユニット940に結合される。デコード・ユニット940（またはデコーダ）は、命令をデコードし、出力として、一つまたは複数のマイクロオペレーション、マイクロコードのエントリーポイント、マイクロ命令、他の命令、または他の制御信号を生成することができ、これらは、もとの命令からデコードされるか、または他の仕方でもとの命令を反映するか、またはもとの命令から導出される。デコード・ユニット940は、さまざまな異なる機構を使用して実装されてもよい。好適な機構の例は、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ（PLA）、マイクロコード読み出し専用メモリ（ROM）などを含むが、これらに限定されない。ある実施形態では、コア990は、（たとえば、デコード・ユニット940内、またはさもなくばフロントエンド・ユニット930内に）ある種のマクロ命令のためのマイクロコードを格納する、マイクロコードROMまたは他の媒体を含む。デコード・ユニット940は、実行エンジン・ユニット950内の名称変更／アロケータ・ユニット952に結合される。
【０１２５】
実行エンジン・ユニット950は、退役（retirement［リタイアメント］）ユニット954に結合された名称変更／アロケータ・ユニット952と、一つまたは複数のスケジューラ・ユニット956のセットとを含む。スケジューラ・ユニット956は、予約ステーション、中央命令ウインドウなどを含む、任意の数の異なるスケジューラを表わす。スケジューラ・ユニット956は、物理レジスタ・ファイル・ユニット958に結合される。物理レジスタ・ファイル・ユニット958のそれぞれは、一つまたは複数の物理レジスタ・ファイルを表わし、そのうちの異なるものが、スカラー整数、スカラー浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（たとえば、実行されるべき次の命令のアドレスである命令ポインタ）などといった一つまたは複数の異なるデータ・タイプを記憶する。ある実施形態では、物理レジスタ・ファイル・ユニット958は、ベクトル・レジスタ・ユニット、書き込みマスク・レジスタ・ユニット、およびスカラー・レジスタ・ユニットを含む。これらのレジスタ・ユニットは、アーキテクチャ・ベクトル・レジスタ、ベクトル・マスク・レジスタ、および汎用レジスタを提供することができる。物理レジスタ・ファイル（複数可）ユニット958は、レジスタ名称変更および順序外実行が実装されうるさまざまな仕方（たとえば、並べ替えバッファ（単数または複数）および退役レジスタ・ファイルを使用すること；将来のファイル（単数または複数）、履歴バッファ（単数または複数）、および退役レジスタ・ファイル（単数または複数）を使用すること；レジスタ・マップおよびレジスタ・プールを使用することなど）を示すために、退役ユニット954とオーバーラップしている。退役ユニット954および物理レジスタ・ファイル・ユニット958は、実行クラスター（単数または複数）960に結合される。実行クラスター（単数または複数）960は、一つまたは複数の実行ユニット962のセットと、一つまたは複数のメモリ・アクセス・ユニット964のセットとを含む。実行ユニット962は、さまざまな動作（たとえば、シフト、加算、減算、乗算）およびさまざまなタイプのデータ（たとえば、スカラー浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して実行しうる。いくつかの実施形態は、特定の機能または機能のセットに専用のいくつかの実行ユニットを含んでいてもよいが、他の実施形態は、すべての機能を実行する一つだけの実行ユニットまたは複数の実行ユニットを含んでいてもよい。スケジューラ・ユニット（単数または複数）956、物理レジスタ・ファイル・ユニット（単数または複数）958、および実行クラスター（単数または複数）960は、複数である可能性があるとして示されている。これは、ある種の実施形態はある種のタイプのデータ／動作のための別々のパイプラインを生成するためである（たとえば、スカラー整数パイプライン、スカラー浮動小数点／パックされた整数／パックされた浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／または、メモリ・アクセス・パイプライン；そのそれぞれがそれら自身のスケジューラ・ユニット、物理レジスタ・ファイル・ユニット、および／または実行クラス��ーを有する――そして別個のメモリ・アクセス・パイプラインの場合、このパイプラインの実行クラスターだけがメモリ・アクセス・ユニット（単数または複数）964を有するある種の実施形態が実装される）。また、別々のパイプラインが使用される場合には、これらのパイプラインのうちの一つまたは複数は、順序外発行／実行であってもよく、残りは順序内であってもよいことも理解しておくべきである。
【０１２６】
メモリ・アクセス・ユニット964のセットは、メモリ・ユニット970に結合される。メモリ・ユニット970は、レベル2（L2）キャッシュ・ユニット976に結合されたデータ・キャッシュ・ユニット974に結合されたデータTLBユニット972を含む。ある例示的実施形態では、メモリ・アクセス・ユニット964は、ロード・ユニット、記憶アドレス・ユニット、および記憶データ・ユニットを含んでいてもよく、これらのそれぞれは、メモリ・ユニット970内のデータTLBユニット972に結合される。命令キャッシュ・ユニット934は、メモリ・ユニット970内のレベル2（L2）キャッシュ・ユニット976にさらに結合される。L2キャッシュ・ユニット976は、一つまたは複数の他のレベルのキャッシュに結合され、最終的にはメインメモリに結合される。
【０１２７】
例として、例示的なレジスタ名称変更、順序外発行／実行コア・アーキテクチャは、次のようにパイプライン900を実装してもよい：1）命令フェッチ938が、フェッチおよび長さデコード段902および904を実行し；2）デコード・ユニット940が、デコード段906を実行し；3）名称変更／アロケータ・ユニット952が、割り当て段908および名称変更段910を実行し；4）スケジューラ・ユニット956が、スケジュール段912を実行し；5）物理レジスタ・ファイル・ユニット958およびメモリ・ユニット970が、レジスタ読み出し／メモリ読み出し段914を実行し；6）メモリ・ユニット970および物理レジスタ・ファイル・ユニット958が、書き戻し／メモリ書き込み段918を実行し；7）さまざまなユニットが、例外処理段922に関与し；8）退役ユニット954および物理レジスタ・ファイル・ユニット958が、コミット段924を実行する。
【０１２８】
コア990は、本明細書に記載される命令を含む、一つまたは複数の命令セット（たとえば、x86命令セット（より新しいバージョンで追加されたいくつかの拡張を含む））；カリフォルニア州サニーベールのMIPS  TechnologiesのMIPS命令セット；カリフォルニア州サニーベールのARM  HoldingsのARM命令セット（NEONのような任意的な追加的拡張を含む）をサポートすることができる。ある実施形態では、コア990は、パックされたデータ命令セット拡張（たとえば、AVX1、AVX2）をサポートする論理を含み、それにより、多くのマルチメディア・アプリケーションによって使用される動作が、パックされたデータを使用して実行されることを許容する。
【０１２９】
コアが、マルチスレッド（動作またはスレッドの2つ以上の並列セットを実行すること）をサポートしてもよく、時間スライスされたマルチスレッド、同時マルチスレッド（単一の物理コアが、その物理コアが同時にマルチスレッドしている各スレッドのための論理コアを提供する）、またはそれらの組み合わせ（たとえば、インテル（登録商標）Hyperthreading技術におけるように、時間スライスされたフェッチおよびデコードならびにその後の同時マルチスレッド）を含む多様な仕方でそうしうることを理解しておくべきである。
【０１３０】
レジスタ名称変更（register  renaming［レジスタ・リネーミング］）は、順序外実行のコンテキストで記述されているが、レジスタ名称変更は、順序内アーキテクチャにおいて使用されてもよいことを理解しておくべきである。プロセッサの図示された実施形態は、別個の命令およびデータ・キャッシュ・ユニット934/974および共有されるL2キャッシュ・ユニット976をも含んでいるが、代替的な実施形態は、命令およびデータの両方のための単一の内部キャッシュ、たとえば、レベル1（L1）の内部キャッシュまたは複数レベルの内部キャッシュを有していてもよい。いくつかの実施形態において、システムは、コアおよび／またはプロセッサの外部にある内部キャッシュおよび外部キャッシュの組み合わせを含んでいてもよい。あるいはまた、キャッシュのすべてがコアおよび／またはプロセッサの外部にあってもよい。
【０１３１】
特定の例示的順序内コア・アーキテクチャ
図10A〜図10Bは、チップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの一つであろう、より特定的な例示的な順序内コア・アーキテクチャのブロック図を示す。これらの論理ブロックは、アプリケーションに依存して、いくらかの固定機能論理、メモリI/Oインターフェース、および他の必要なI/O論理と、高帯域幅相互接続ネットワーク（たとえばリング・ネットワーク）を通じて通信する。
【０１３２】
図10Aは、本開示の実施形態による、ダイ上相互接続ネットワーク1002への接続、およびレベル2（L2）キャッシュのローカル・サブセット1004とともに、単一プロセッサ・コアのブロック図である。ある実施形態では、命令デコーダ1000は、パックされたデータの命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ1006は、スカラーおよびベクトル・ユニットへのキャッシュ・メモリへの低遅延アクセスを許容する。ある実施形態では（設計を簡略化するため）、スカラー・ユニット1008およびベクトル・ユニット1010は、別個のレジスタ・セット（それぞれスカラー・レジスタ1012およびベクトル・レジスタ1014）を使用し、それらの間で転送されるデータは、メモリに書き込まれ、次いでレベル1（L1）キャッシュ1006から読み戻されるが、本開示の代替的な実施形態は、異なるアプローチ（たとえば、単一のレジスタ・セットを使用するか、または書き込んで読み戻されることなく、2つのレジスタ・ファイルの間でデータが転送されることを許容する通信経路を含む）を使用してもよい。
【０１３３】
L2キャッシュのローカル・サブセット1004は、プロセッサ・コア毎に一つの別々のローカル・サブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサ・コアは、L2キャッシュの自分自身のローカル・サブセット1004への直接アクセス経路を有する。プロセッサ・コアによって読み出されたデータは、そのL2キャッシュ・サブセット1004に記憶され、他のプロセッサ・コアが自身のローカルL2キャッシュ・サブセットにアクセスするのと並列に、迅速にアクセスされることができる。プロセッサ・コアによって書き込まれたデータは、自分自身のL2キャッシュ・サブセット1004に記憶され、必要ならば、他のサブセットからフラッシュされる。リング・ネットワークは、共有されるデータのコヒーレンシーを保証する。リング・ネットワークは、プロセッサ・コア、L2キャッシュ、および他の論理ブロックのようなエージェントがチップ内で互いに通信することを許容するために双方向である。各リング・データ経路は、1方向につき1012ビット幅である。
【０１３４】
図10Bは、本開示の実施形態による、図10Aにおけるプロセッサ・コアの一部の拡大図である。図10Bは、L1キャッシュ1004のL1データ・キャッシュ1006A部分と、ベクトル・ユニット1010およびベクトル・レジスタ1014に関するさらなる詳細とを含む。具体的には、ベクトル・ユニット1010は、整数、単精度フロート、倍精度フロート命令のうちの一つまたは複数を実行する16幅のベクトル処理ユニット（vector  processing  unit、VPU）である（16幅のALU  1028を参照）。VPUは、メモリ入力に対し、スウィズル（swizzling）・ユニット1020によるレジスタ入力のスウィズル、数値変換ユニット1022A〜Bによる数値変換、および複製ユニット1024による複製をサポートする。書き込みマスク・レジスタ1026が、結果として生じるベクトル書き込みの叙述（predicating）を許容する。
【０１３５】
図11は、本開示の実施形態による、2つ以上のコアを有してもよく、統合メモリ・コントローラを有してもよく、統合グラフィックスを有してもよいプロセッサ1100のブロック図である。図11の実線で囲まれたボックスは、単一コア1102A、システム・エージェント1110、一つまたは複数のバス・コントローラ・ユニット1116のセットを有するプロセッサ1100を示し、一方、破線で囲まれたボックスの任意的な追加は、複数コア1102A〜N、システム・エージェント・ユニット1110内の一つまたは複数の統合メモリ・コントローラ・ユニット1114のセット、および特殊目的論理1108を有する代替的なプロセッサ1100を示す。
【０１３６】
このように、プロセッサ1100の異なる実装は：1）CPUであって、特殊目的論理1108は統合されたグラフィックスおよび／または科学的（スループット）論理（これは一つまたは複数のコアを含んでいてもよい）であり、コア1102A〜1102Nは一つまたは複数の汎用コア（たとえば、汎用順序内コア、汎用順序外コア、両者の組み合わせ）である、CPU；2）コプロセッサであっって、コア1102A〜Nは、主にグラフィックスおよび／または科学的（スループット）のために意図されている多数の特殊目的コアである、コプロセッサ；および3）コプロセッサであって、コア1102A〜Nは、多数の汎用順序内コアである、コプロセッサを含みうる。よって、プロセッサ1100は、汎用プロセッサ、コプロセッサ、または、特殊目的プロセッサ、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU（汎用グラフィックス処理ユニット）、高スループットの多集積コア（many  integrated  core、MIC）コプロセッサ（30個以上のコアを含む）、埋め込みプロセッサなどであってもよい。プロセッサは、一つまたは複数のチップ上に実装されてもよい。プロセッサ1100は、たとえば、BiCMOS、CMOS、またはNMOSなどの多くのプロセス技術のいずれかを使用して、一つまたは複数の基板の一部であってもよく、および／または一つまたは複数の基板上に実装されてもよい。
【０１３７】
メモリ階層は、コア内の一つまたは複数のレベルのキャッシュと、セットまたは一つまたは複数の共有されるキャッシュ・ユニット1106と、統合メモリ・コントローラ・ユニット1114のセットに結合された外部メモリ（図示せず）とを含む。共有されるキャッシュ・ユニット1106のセットは、レベル2（L2）、レベル3（L3）、レベル4（L4）、または他のレベルのキャッシュ、最終レベル・キャッシュ（LLC）、および／またはそれらの組み合わせのような、一つまたは複数の中間レベル・キャッシュを含んでいてもよい。ある実施形態では、リング・ベースの相互接続ユニット1112は、統合グラフィックス論理1108、共有されるキャッシュ・ユニットのセット1106、およびシステム・エージェント・ユニット1110／統合メモリ・コントローラ・ユニット（単数または複数）1114を相互接続するが、代替的な実施形態は、そのようなユニットを相互接続するために、いくつもある周知の技術を使用してもよい。ある実施形態では、一つまたは複数のキャッシュ・ユニット1106とコア1102-A〜Nとの間でコヒーレンシーが維持される。
【０１３８】
いくつかの実施形態では、コア1102A〜Nのうちの一つまたは複数は、マルチスレッド可能である。システム・エージェント1110は、コア1102A〜Nを協調させ、動作させるコンポーネントを含む。システム・エージェント・ユニット1110は、たとえば、電力制御ユニット（PCU）および表示ユニットを含んでいてもよい。PCUは、コア1102A〜Nおよび統合グラフィックス論理1108の電力状態を制御するために必要とされる論理および構成要素であってもよいし、それらを含んでいてもよい。表示ユニットは、一つまたは複数の外部接続されたディスプレイを駆動するためのものである。
【０１３９】
コア1102A〜Nは、アーキテクチャ命令セットに関して均一または不均一であってもよく、すなわち、コア1102A〜Nのうちの2つ以上が同じ命令セットを実行することができてもよく、他のコアは、その命令セットのサブセットのみを、または異なる命令セットを実行することができてもよい。
【０１４０】
例示的なコンピュータ・アーキテクチャ
図12〜図15は、例示的なコンピュータ・アーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナル・デジタル・アシスタント、エンジニアリング・ワークステーション、サーバー、ネットワーク装置、ネットワーク・ハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ（DSP）、グラフィックス装置、ビデオ・ゲーム装置、セットトップボックス、マイクロコントローラ、携帯電話、ポータブル・メディア・プレーヤー、ハンドヘルド装置、およびさまざまな他の電子装置のための、当技術分野で知られている他のシステム設計および構成も好適である。一般に、本明細書に開示されているプロセッサおよび／または他の実行論理を組み込むことができる非常に多様なシステムまたは電子装置が、一般に好適である。
【０１４１】
ここで図12を参照すると、本開示のある実施形態によるシステム1200のブロック図が示されている。システム1200は、コントローラ・ハブ1220に結合された一つまたは複数のプロセッサ1210、1215を含んでいてもよい。ある実施形態では、コントローラ・ハブ1220は、グラフィックス・メモリ・コントローラ・ハブ（GMCH）1290および入出力ハブ（IOH）1250（これは別個のチップ上にあってもよい）を含み、GMCH  1290は、メモリおよびグラフィックス・コントローラを含み、それにメモリ1240およびコプロセッサ1245が結合されている；IOH  1250は、入出力（I/O）装置1260をGMCH  1290に結合する。あるいはまた、メモリ・コントローラおよびグラフィックス・コントローラの一方または両方が、（本明細書に記載されるような）プロセッサ内に統合され、メモリ1240およびコプロセッサ1245は、プロセッサ1210に直接結合され、コントローラ・ハブ1220は、IOH  1250と単一のチップ内にある。
【０１４２】
追加的なプロセッサ1215の任意的な性質は、図12では破線で示されている。各プロセッサ1210、1215は、本明細書に記載される処理コアの一つまたは複数を含んでいてもよく、プロセッサ1100の何らかのバージョンであってもよい。
【０１４３】
メモリ1240は、たとえば、動的ランダムアクセスメモリ（DRAM）、相変化メモリ（PCM）、またはこれら2つの組み合わせであってもよい。少なくとも一つの実施形態については、コントローラ・ハブ1220は、フロントサイド・バス（FSB）のようなマルチドロップ・バス、QuickPath  Interconnect（QPI）のようなポイントツーポイント・インターフェース／相互接続、または同様の接続1295を介して、プロセッサ1210、1215と通信する。
【０１４４】
ある実施形態では、コプロセッサ1245は、たとえば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU、埋め込みプロセッサ等のような特殊目的プロセッサである。ある実施形態では、コントローラ・ハブ1220は、統合グラフィック・アクセラレータを含んでいてもよい。
【０１４５】
アーキテクチャ、マイクロアーキテクチャ、熱、電力消費特性などを含む性能指標のスペクトルに関して、物理資源1210、1215間には、多様な相違がありうる。
【０１４６】
ある実施形態では、プロセッサ1210は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令内に埋め込まれるのは、コプロセッサ命令であってもよい。プロセッサ1210は、これらのコプロセッサ命令を、取り付けられたコプロセッサ1245によって実行されるべきタイプであると認識する。よって、プロセッサ1210は、これらのコプロセッサ命令（またはコプロセッサ命令を表わす制御信号）を、コプロセッサ・バスまたは他の相互接続上でコプロセッサ1245に対して発行する。コプロセッサ1245は、受信されたコプロセッサ命令を受け入れ、実行する。
【０１４７】
ここで図13を参照すると、本開示のある実施形態による、第1のより具体的な例示的なシステム1300のブロック図が示される。図13に示されるように、マルチプロセッサ・システム1300は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1350を介して結合された第1のプロセッサ1370および第2のプロセッサ1380を含む。プロセッサ1370および1380のそれぞれは、プロセッサ1100の何らかのバージョンであってもよい。本開示のある実施形態では、プロセッサ1370および1380は、それぞれ、プロセッサ1210および1215であり、コプロセッサ1338は、コプロセッサ1245である。別の実施形態では、プロセッサ1370および1380はそれぞれ、プロセッサ1210コプロセッサ1245である。
【０１４８】
プロセッサ1370および1380は、それぞれ、統合メモリ・コントローラ（integrated  memory  controller、IMC）ユニット1372および1382を含むように示されている。プロセッサ1370はまた、そのバス・コントローラ・ユニットの一部として、ポイントツーポイント（P-P）インターフェース1376および1378を含み、同様に、第2のプロセッサ1380は、P-Pインターフェース1386および1388を含む。プロセッサ1370、1380は、P-Pインターフェース回路1378、1388を使用して、ポイントツーポイント（P-P）インターフェース1350を介して情報を交換してもよい。図13に示されるように、IMC  1372および1382は、プロセッサをそれぞれのメモリ、すなわち、メモリ1332およびメモリ1334に結合するが、これらは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってもよい。
【０１４９】
プロセッサ1370、1380は、それぞれ、ポイントツーポイント・インターフェース回路1376、1394、1386、1398を使用して、個々のP-Pインターフェース1352、1354を介してチップセット1390と情報を交換してもよい。チップセット1390は、任意的に、高性能インターフェース1339を介してコプロセッサ1338と情報を交換してもよい。ある実施形態では、コプロセッサ1338は、たとえば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックス・プロセッサ、GPGPU、埋め込みプロセッサ等のような特殊目的プロセッサである。
共有されたキャッシュ（図示せず）が、いずれかのプロセッサ内に、または両方のプロセッサの外部に含まれ、それでいてP-P相互接続を介して両プロセッサに接続されてもよく、あるプロセッサが低電力モードにされる場合、いずれかまたは両方のプロセッサのローカル・キャッシュ情報が共有されるキャッシュに記憶されてもよい。
【０１５０】
チップセット1390は、インターフェース1396を介して第1のバス1316に結合されてもよい。ある実施形態では、第1のバス1316は、周辺コンポーネント相互接続（PCI）バス、または、PCI  Expressバスまたは別の第3世代I/O相互接続バスのようなバス、または、ポイントツーポイント・インターフェースであってもよいが、本開示の範囲はそれに限定されない。
【０１５１】
図13に示されるように、さまざまなI/O装置1314が、第1のバス1316を第2のバス1320に結合するバスブリッジ1318とともに、第1のバス1316に結合されてもよい。ある実施形態では、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ（たとえば、グラフィックス・アクセラレータまたはデジタル信号処理（DSP）ユニット）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの一つまたは複数の追加的なプロセッサ1315が、第1のバス1316に結合される。ある実施形態では、第2のバス1320は、低ピン数（low  pin  count、LPC）バスであってもよい。ある実施形態では、たとえば、キーボードおよび／またはマウス1322、通信装置1327、および命令／コードおよびデータ1330を含みうる記憶ユニット1328、たとえばディスクドライブまたは他の大容量記憶装置を含む、さまざまな装置が、第2のバス1320に結合されうる。さらに、オーディオI/O  1324が、第2のバス1320に結合されてもよい。他のアーキテクチャも可能であることに注意されたい。たとえば、図13のポイントツーポイント・アーキテクチャの代わりに、システムはマルチドロップ・バスまたは他のそのようなアーキテクチャを実装してもよい。
【０１５２】
ここで図14を参照すると、本開示のある実施形態による、第2の、より具体的な例示的なシステム1400のブロック図が示される。図13および図14における同様の要素は、同様の参照番号を帯びており、図13のある種の側面は、図14の他の側面を埋没させるのを避けるため、図14から省略されている。
【０１５３】
図14は、プロセッサ1370、1380が、統合されたメモリおよびI/O制御論理（「CL」）1372、1382をそれぞれ含みうることを示す。よって、CL  1372、1382は、統合されたメモリ・コントローラ・ユニットを含み、I/O制御論理を含む。図14は、メモリ1332、1334がCL  1372、1382に結合されるだけでなく、I/O装置1414も制御論理1372、1382に結合されることを示している。レガシーI/O装置1415が、チップセット1390に結合される。
【０１５４】
ここで図15を参照すると、本開示のある実施形態によるSoC  1500のブロック図が示されている。図11における同様の要素は、同様の参照番号を帯びている。また、破線のボックスは、より高度なSoCでの任意的な機能である。図15において、相互接続ユニット（単数または複数）1502は：一つまたは複数のコア202A〜Nのセットおよび共有されるキャッシュ・ユニット（単数または複数）1106を含むアプリケーション・プロセッサ1510と；システム・エージェント・ユニット1110と；バス・コントローラ・ユニット（単数または複数）1116と；統合されたメモリ・コントローラ・ユニット（単数または複数）1114と；統合されたグラフィックス論理、画像プロセッサ、オーディオ・プロセッサ、およびビデオ・プロセッサを含みうるセットまたは一つまたは複数のコプロセッサ1520と；静的ランダムアクセスメモリ（SRAM）ユニット1530と；直接メモリ・アクセス（DMA）ユニット1532と；一つまたは複数の外部ディスプレイに結合するための表示ユニット1540とに結合される。ある実施形態では、コプロセッサ（単数または複数）1520は、たとえば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサなどの特殊目的プロセッサを含む。
【０１５５】
本明細書に開示される機構の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせで実装されてもよい。本開示の実施形態は、少なくとも一つのプロセッサ、記憶システム（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも一つの入力装置、および少なくとも一つの出力装置を有するプログラマブルシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてもよい。
【０１５６】
図13に示されるコード1330のようなプログラムコードは、本明細書に記載される機能を実行し、出力情報を生成するために、入力命令に適用されうる。出力情報は、公知の仕方で、一つまたは複数の出力装置に適用されうる。本出願の目的のためには、処理システムは、たとえば、デジタル信号プロセッサ（DSP）、マイクロコントローラ、特定用途向け集積回路（ASIC）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０１５７】
プログラムコードは、処理システムと通信するために、高レベルの手続き型またはオブジェクト指向型のプログラミング言語で実装されてもよい。プログラムコードはまた、所望であれば、アセンブリ言語または機械語で実装されてもよい。実際、本明細書に記載の機構は、いかなる特定のプログラミング言語に限定されるものでもない。いずれの場合においても、言語は、コンパイルされる言語またはインタープリットされる言語でありうる。
【０１５８】
少なくとも一つの実施形態の一つまたは複数の側面は、プロセッサ内のさまざまな論理を表わす機械読み取り可能媒体上に記憶された代表的な命令によって実装されてもよく、該命令は、機械によって読み取られたときに、機械に、本明細書に記載された技術を実行するために論理を製造させる。「IPコア」として知られるそのような表現は、有体の機械可読媒体上に記憶され、さまざまな顧客または製造施設に供給されて、実際に論理またはプロセッサを作る製造機械にロードされてもよい。
【０１５９】
そのような機械可読記憶媒体は、限定なしに、機械または装置によって製造または形成される物品の非一時的な有体な構成を含んでいてもよく、かかる構成は、記憶媒体、たとえばハードディスク、フロッピーディスク、光ディスク、コンパクトディスク読み出し専用メモリ（CD-ROM）、書き換え可能コンパクトディスク（CD-RW）、磁気光学ディスクを含む他の任意の型のディスク、半導体デバイス、たとえば読み出し専用メモリ（ROM）、ランダムアクセスメモリ（RAM）、たとえば動的ランダムアクセスメモリ（DRAM）、静的ランダムアクセスメモリ（SRAM）、消去可能なプログラマブル読み出し専用メモリ（EPROM）、フラッシュメモリ、電気的に消去可能なプログラマブル読み出し専用メモリ（EEPROM）、位相変化メモリ（PCM）、磁気カードまたは光学カード、または電子的な命令を記憶するのに好適な他の任意のタイプの媒体を含む。
【０１６０】
よって、本開示の実施形態は、本明細書に記載される構造、回路、装置、プロセッサ、および／またはシステム特徴を定義する、ハードウェア記述言語（HDL）のような、命令を含む、または設計データを含む、非一時的な、有体の機械可読媒体をも含む。そのような実施形態は、プログラム製品と称されることもある。
【０１６１】
エミュレーション（バイナリー変換、コード・モーフィングなど）
いくつかの場合には、ソース命令セットからの命令をターゲット命令セットに変換するために命令変換器が使用されてもよい。命令を、コアによって処理されるべき一つまたは複数の他の命令に翻訳（たとえば、静的なバイナリー変換、動的コンパイルを含む動的なバイナリー変換を使用して）、モーフィング、エミュレートまたは他の仕方で変換してもよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア、またはそれらの組み合わせで実装されうる。命令変換器は、オンプロセッサ、オフプロセッサ、または部分的にオンプロセッサ、部分的にオフプロセッサであってもよい。
【０１６２】
図16は、本開示の実施形態による、ソース命令セットにおけるバイナリー命令を、ターゲット命令セットにおけるバイナリー命令に変換するためのソフトウェア命令変換器の使用を対照するブロック図である。図示した実施形態では、命令変換器はソフトウェア命令変換器であるが、代替的に、命令変換器はソフトウェア、ファームウェア、ハードウェア、またはそれらのさまざまな組み合わせで実装されてもよい。図16は、高レベル言語1602におけるプログラムがx86コンパイラ1604を用いてコンパイルされて、少なくとも一つのx86命令セット・コア1616をもつプロセッサによってネイティブに実行されうるx86バイナリー・コード1606を生成しうることを示している。少なくとも一つのx86命令セット・コア1616をもつプロセッサは、少なくとも一つのx86命令セット・コアをもつインテル・プロセッサと実質的に同じ結果を達成するために、少なくとも一つのx86命令セット・コアをもつインテル・プロセッサと実質的に同じ機能を実行できる任意のプロセッサを表わす。それは、（1）インテルx86命令セット・コアの命令セットの実質的な部分または（2）少なくとも一つのx86命令セット・コアをもつインテル・プロセッサ上で動作するようにターゲットされたアプリケーションまたは他のソフトウェアのオブジェクト・コード・バージョンを、互換的に実行するまたは他の仕方で処理することによる。x86コンパイラ1604は、追加的なリンケージ処理を用いてまたは用いずに、少なくとも一つのx86命令セット・コア1616をもつプロセッサ上で実行できるx86バイナリー・コード1606（たとえば、オブジェクトコード）を生成するように動作可能なコンパイラを表わす。同様に、図16は、高レベル言語1602におけるプログラムが、代替的な命令セット・コンパイラ1608を用いてコンパイルされて、少なくとも一つのx86命令セット・コア1614のないプロセッサ（たとえば、カリフォルニア州サニーベールのMIPS  TechnologiesのMIPS命令セットを実行する、および／またはカリフォルニア州サニーベールのARM  HoldingsのARM命令セットを実行するコアをもつプロセッサ）によってネイティブに実行されうる代替的な命令セット・バイナリー・コード1610を生成しうることを示す。命令変換器1612は、x86のバイナリー・コード1606を、x86の命令セット・コア1614のないプロセッサによってネイティブに実行されうるコードに変換するために使用される。この変換されたコードは、代替命令セット・バイナリー・コード1610と同じである可能性は高くない。なぜなら、これができる命令変換器は作成することが困難であるからである。しかしながら、変換されたコードは、一般的な動作を達成し、代替命令セットからの命令で構成される。よって、命令変換器1612は、エミュレーション、シミュレーションまたは他の何らかのプロセスを通じて、x86命令セット・プロセッサもしくはコアをもたないプロセッサもしくは他の電子装置が、x86バイナリー・コード1606を実行することを許容するソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表わす。
【０１６３】
本明細書の任意の実施形態において使用されるところでは、用語「論理」は、上記動作のいずれかを実行するように構成されたアプリケーション、ソフトウェア、ファームウェア、および／または回路を指してもよい。ソフトウェアは、非一時的コンピュータ可読記憶媒体に記録されたソフトウェア・パッケージ、コード、命令、命令セット、および／またはデータとして具現されてもよい。ファームウェアは、メモリ・デバイスにおけるハードコードされた（たとえば不揮発性の）コード、命令または命令セット、および／またはデータとして具体化されうる。
【０１６４】
本明細書の任意の実施形態において使用されるところの「回路」は、たとえば、単独でまたは任意の組み合わせで、固定結線された回路、プログラマブル回路、状態機械回路、論理および／またはプログラマブル回路によって実行される命令を記憶するファームウェアを含んでいてもよい。回路は、集積回路チップのような集積回路として具現されてもよい。いくつかの実施形態において、回路は、少なくとも部分的に、本明細書に記載される機能に対応し、よって、汎用プロセッサを、本明細書に記載される動作の一つまたは複数を実行する特定目的処理環境に変容させるコードおよび／または命令セット（たとえば、ソフトウェア、ファームウェアなど）を実行するプロセッサ110によって形成されてもよい。いくつかの実施形態では、メモリ・コントローラ回路または他のシステムのさまざまな構成要素および回路は、システムオンチップ（SoC）アーキテクチャで組み合わされてもよい。
【０１６５】
本明細書に記載される動作の実施形態は、一つまたは複数のプロセッサによって実行されたときに前記諸方法を実行する命令が記憶されている、コンピュータ可読記憶デバイスにおいて実装されてもよい。プロセッサは、たとえば、処理ユニットおよび／またはプログラマブル回路を含んでいてもよい。記憶デバイスは、たとえば、任意のタイプの有体な非一時的記憶デバイスを含む機械可読記憶デバイスを含んでいてもよい。たとえば、フロッピーディスク、光ディスク、コンパクトディスクリードオンリーメモリ（CD-ROM）、コンパクトディスクリライタブル（CD-RW）、光磁気ディスクを含む任意のタイプのディスク、リードオンリーメモリ（ROM）、ランダムアクセスメモリ（RAM）、たとえば動的RAMおよび静的RAM、消去可能なプログラマブルリードオンリーメモリ（EPROM）、電気的に消去可能なプログラマブルリードオンリーメモリ（EEPROM）、フラッシュメモリのような半導体デバイス、磁気カードまたは光学カード、または電子的な命令を記憶するのに好適な任意のタイプの記憶デバイスである。
【０１６６】
いくつかの実施形態では、本明細書に記載されるさまざまな論理および／または回路のための回路および／または論理実装を指定するために、ハードウェア記述言語（HDL）が使用されてもよい。たとえば、ある実施形態では、ハードウェア記述言語は、本明細書に記載される一つまたは複数の回路および／または論理の半導体製造を可能にしうる超高速集積回路（very  high  speed  integrated  circuit、VHSIC）ハードウェア記述言語（VHDL）に準拠するか、またはそれと互換性があってもよい。VHDLは、IEEE規格1076-1987、IEEE規格1076.2、IEEE1076.1、VHDL-2006のIEEEドラフト3.0、VHDL-2008のIEEEドラフト4.0、および／またはIEEE  VHDL規格の他のバージョンおよび／または他のハードウェア記述規格に準拠するか、またはそれと互換性があってもよい。
【０１６７】
いくつかの実施形態では、本明細書に記載されるさまざまな論理および／または回路のための回路および／または論理実装を指定するために、Verilogハードウェア記述言語（HDL）が使用されてもよい。
【０１６８】
たとえば、ある実施形態では、HDLは、2011年7月7日付のIEEE規格62530-2011：SystemVerilog  -  Unified  Hardware  Design,  Specification,  and  Verification  Language；2013年2月21日付のIEEE  Std  1800TM-2012：IEEE  Standard  for  SystemVerilog  -  Unified  Hardware  Design,  Specification,  and  Verification  Language；2006年4月18日付のIEEE規格1364-2005：IEEE  Standard  for  Verilog  Hardware  Description  Languageおよび／またはVerilog  HDLおよび／またはSystemVerilog規格の他のバージョンに準拠するか、またはそれと互換性があってもよい。
【０１６９】
実施例
本開示の例は、以下に論じるように、スタイラス使用のユーザー意図の予測的検出に関連する方法、デバイス、装置、またはシステムのような主題事項を含む。
〔実施例１〕この実施例によれば、装置が提供される。本装置は、第1の伝導性バスを介した第1のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第1のメモリ・コントローラ回路と；第2の伝導性バスを介した第2のメモリ回路への読み出しおよび／または書き込みアクセスを制御する第2のメモリ・コントローラ回路と；前記第1のメモリ・コントローラ回路および前記第2のメモリ・コントローラ回路に結合された電力制御回路であって、前記電力制御回路は、前記第2の伝導性バスを介した前記第2のメモリ・コントローラ回路を用いる前記第2のメモリ回路からのデータを、前記第1の伝導性バスを介した前記第1のメモリ・コントローラ回路を用いる前記第1のメモリ回路に転送するとともに、前記電力制御回路は、前記第2のメモリ回路から前記第1のメモリ回路への前記データの転送後に、前記第2のメモリ回路をパワーダウンする、電力制御回路とを有する。本願で使われるところでは、伝導性バスは、フロントサイド・バス（FSB）のようなマルチドロップ・バス；QuickPath  Interconnect（QPI）のようなポイントツーポイント・インターフェース；または同様の接続を含みうる。
〔実施例２〕この実施例は実施例１の要素を含み、前記第1のメモリ・コントローラ回路は、第1の複数のメモリ・コントローラを含み、前記第1のメモリ回路は、第1の複数のメモリ・パッケージを含み、前記第1の伝導性バスは、前記第1の複数のメモリ・コントローラを前記第1の複数のメモリ・パッケージに結合する第1の複数のチャネルを含み、前記第2のメモリ・コントローラ回路は、第2の複数のメモリ・コントローラを含み、前記第2のメモリ回路は、第2の複数のメモリ・パッケージを含み、前記第2の伝導性バスは、前記第2の複数のメモリ・コントローラを前記第2の複数のメモリ・パッケージに結合する第2の複数のチャネルを含む。
〔実施例３〕この実施例は実施例２の要素を含み、前記第1の複数のメモリ・コントローラは第1の一つまたは複数のメモリ・コントローラを含み、前記第1の複数のチャネルは第1の一つまたは複数のチャネルを含み、前記第2の複数のメモリ・コントローラは第2の一つまたは複数のメモリ・コントローラを含み、前記第2の複数のチャネルは第2の一つまたは複数のチャネルを含み、前記電力制御回路は、前記第2の一つまたは複数のメモリ・コントローラおよび前記第2の複数のメモリ・パッケージをパワーダウンすることによって、前記第2のメモリ回路をパワーダウンする。
〔実施例４〕この実施例は実施例１の要素を含み、オペレーティング・システムを実行するプロセッサ・コアをさらに有しており、前記オペレーティング・システムは、前記第1のメモリ回路および前記第2のメモリ回路のデータの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送し、前記オペレーティング・システムは、前記第1のメモリ回路および前記第2のメモリ回路のデータの残りのページを、前記第1のメモリ回路および前記第2のメモリ回路内の連続するメモリ・ページのグループに移動する。
〔実施例５〕この実施例は実施例４の要素を含み、前記第1のメモリ回路および前記第2のメモリ回路のデータの前記残りのページを、前記第1のメモリ回路および前記第2のメモリ回路内の連続するメモリ・ページのグループにコピーすることにより、前記第1のメモリ回路内のメモリの空きページおよび前記第2のメモリ回路内のメモリの占有ページが生じる。
〔実施例６〕この実施例は実施例５の要素を含み、前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送することが：前記第2のメモリ回路内のメモリの前記占有ページの前記データを前記第1のメモリ回路内のメモリの前記空きページ内の位置に転送することを含む。
〔実施例７〕この実施例は実施例５の要素を含み、前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送することが：前記第2のメモリ回路内のメモリの動的ランダムアクセスメモリ（「DRAM」）・ページを前記第1のメモリ回路内のメモリのDRAMページに転送することを含む。
〔実施例８〕この実施例は実施例１の要素を含み、前記第2のメモリ回路がパワーダウンされている間、新しいトラフィックが前記第2のメモリ回路内の位置にマッピングされる場合、前記電力制御回路は、前記新しいトラフィックを、前記第1のメモリ回路内の位置にルーティングする。
〔実施例９〕この実施例は実施例１の要素を含み、前記電力制御回路が、前記第2のメモリ回路をパワーアップするコマンドの受領に応答して、前記第2のメモリ回路をパワーアップし、前記電力制御回路が、前記転送されたデータを、前記第1のメモリ回路から前記第2のメモリ回路に戻す。
〔実施例１０〕この実施例は実施例１の要素を含み、前記第2のメモリ回路をパワーダウンすることが：前記第2の伝導性バスを通じた前記第2のメモリ回路へのクロック信号送信を停止すること；前記第2のメモリ回路への電力を除去すること；前記第2のメモリ回路のための自動化された自己リフレッシュ動作を無効にすること；または前記第2のメモリ・コントローラ回路への電力を少なくとも部分的に除去すること、のうちの一つまたは複数を含む。
〔実施例１１〕この実施例は実施例１の要素を含み、前記電力制御回路が前記第2のメモリ回路をパワーダウンすることが、前記第1のメモリ回路および前記第2のメモリ回路の組み合わせの少なくとも半分をパワーダウンすることを含む。
〔実施例１２〕この実施例は実施例１の要素を含み、前記電力制御回路が、電力制御レジスタの構成ビットに応答して、前記第2のメモリ回路からの前記データを前記第1のメモリ回路に転送する。
〔実施例１３〕この実施例は実施例１１の要素を含み、前記電力制御レジスタは、プロセッサによって実行されるオペレーティング・システムによってアクセス可能である。
〔実施例１４〕この実施例によれば、方法が提供される。本方法は、電力制御回路により、第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領する段階と；前記第1のメモリ回路に記憶されている、および前記第2のメモリ回路に記憶されているデータの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送する段階であって、転送されないデータは残りのデータである、段階と；前記残りのデータを前記第1のメモリ回路内および前記第2のメモリ回路内の連続するページのグループにコピーして、前記第2のメモリ回路内の占有メモリ・ページおよび前記第1のメモリ回路内の空きメモリ・ページを提供する段階と；前記第2のメモリ回路内の前記占有メモリ・ページから前記第1のメモリ回路内の前記空きメモリ・ページ内のメモリ位置へデータを転送する段階と；前記第2のメモリ回路に加えられる電力を減少させる段階とを含む。
〔実施例１５〕この実施例は実施例１４の要素を含み、前記第2のメモリ回路に加えられる電力を減少させることは：前記第2のチャネルを通じた前記第2のメモリ回路へのクロック信号送信を停止すること；前記第2のメモリ回路への電力を除去すること；前記第2のメモリ回路のための自動化された自己リフレッシュ動作を無効にすること；または前記第2のメモリ・コントローラ回路への電力を少なくとも部分的に除去すること、
のうちの一つまたは複数を含む。
〔実施例１６〕この実施例は実施例１４の要素を含み、前記第2のメモリ回路をパワーアップするコマンドの受領に応答して、前記第2のメモリ回路に電力を再び加える段階と；前記第2のメモリ回路から前記第1のメモリ回路に転送された前記データを、前記第1のメモリ回路から前記第2のメモリ回路にコピーする段階とをさらに含む。
〔実施例１７〕この実施例は実施例１４の要素を含み、前記第2のチャネルを介した第2のメモリ回路から第1のチャネルを介した第1のメモリ回路にデータを転送する命令を受領することが：前記第1のメモリ回路および前記第2のメモリ回路についての構成設定を格納する電力制御レジスタからのビットを読むことを含む。
〔実施例１８〕この実施例によれば、システムが提供される。本システムは、プロセッサと；少なくとも一つの第1のチャネルを介した第1の複数のメモリ・パッケージおよび少なくとも一つの第2のチャネルを介した第2の複数のメモリ・パッケージへの読み出しおよび／または書き込みアクセスを制御する少なくとも一つのメモリ・コントローラ回路と；前記少なくとも一つのメモリ・コントローラに結合された電力制御回路であって、前記電力制御回路は、前記第2の複数のメモリ・パッケージから前記第1の複数のメモリ・パッケージにデータを転送し、前記電力制御回路は、前記少なくとも一つの第1のチャネルおよび前記少なくとも一つの第2のチャネルの少なくとも半分をパワーダウンし、前記電力制御回路は、前記第2の複数のメモリ・パッケージから前記第1の複数のメモリ・パッケージへの前記データの転送後に、前記第2の複数のメモリ・パッケージをパワーダウンする。
〔実施例１９〕この実施例は実施例１８の要素を含み、さらに：前記プロセッサの電力特徴を制御するシステム・エージェント回路であって、前記システム・エージェント回路は前記電力制御回路を含む、システム・エージェント回路と；前記プロセッサを前記システム・エージェント回路および前記少なくとも一つのメモリ・コントローラに結合する相互接続回路とを有する。
〔実施例２０〕この実施例は、実施例１８の要素を含み、前記電力制御回路は、前記第1の複数のメモリ・パッケージおよび前記第2の複数のメモリ・パッケージのデータの諸ページの少なくとも半分を、永続的記憶装置内の一つまたは複数のファイルに転送し、前記電力制御回路は、前記第1の複数のメモリ・パッケージおよび前記第2の複数のメモリ・パッケージのデータの残りのページを、前記第1のメモリ・パッケージおよび前記第2のメモリ・パッケージ内の連続するメモリ・ページのグループにコピーする。
〔実施例２１〕この実施例は、実施例２０の要素を含み、連続するメモリ・ページのグループは、メモリ・ページの複数のセグメントを含む。
〔実施例２２〕この実施例は、実施例２０の要素を含み、前記第1の複数のメモリ・パッケージおよび前記第2の複数のメモリ・パッケージのデータの残りのページを、前記第1の複数のメモリ・パッケージおよび前記第2の複数のメモリ・パッケージ内の連続するメモリ・ページのグループにコピーすることにより、前記第1の複数のメモリ・パッケージ内のメモリの空きページおよび前記第2の複数のメモリ・パッケージ内のメモリの占有ページが生じる。
〔実施例２３〕この実施例は、実施例22の要素を含み、前記データを前記第2の複数のメモリ・モジュールから前記第1の複数のメモリ・モジュールに転送することは、前記第2の複数のメモリ・パッケージ内のメモリの占有ページのデータを、前記第1の複数のメモリ・パッケージ内のメモリの空ページ内のメモリ位置に転送することを含む。
〔実施例２４〕この実施例は、実施例１８の要素を含み、前記第2の複数のメモリ・パッケージがパワーダウンされている間、前記電力制御回路は、新しいトラフィックが前記第2の複数のメモリ・パッケージ内の位置にマップされる場合、前記新しいトラフィックを、前記第1の複数のメモリ・パッケージ内の位置にルーティングする。
〔実施例２５〕この実施例は、実施例１８の要素を含み、前記電力制御回路は、前記第2の複数のメモリ・パッケージをパワーアップするためのコマンドの受領に応答して、前記第2の複数のメモリ・パッケージをパワーアップし、前記電力制御回路は、前記転送された前記第1の複数のメモリ・パッケージから前記第2の複数のメモリ・パッケージにデータを返す。
〔実施例２６〕この実施例によれば、一つまたは複数のプロセッサによって実行される場合に実施例14ないし17のうちいずれか一項の方法を実行する命令を記憶しているコンピュータ可読デバイスが提供される。
〔実施例２７〕この実施例によれば、実施例14ないし17のうちいずれか一項の方法を実行する手段を有する装置が提供される。
【０１７０】
本明細書で使用された用語および表現は、限定ではなく、記述のために使用されており、かかる用語および表現の使用には、図示および記述されている特徴（またはその一部）のいかなる均等物も除外する意図はなく、請求項の範囲内でさまざまな修正が可能であることが認識されている。よって、特許請求の範囲は、そのような均等物のすべてをカバーすることが意図されている。
【０１７１】
さまざまな特徴、側面、および実施形態が本明細書に記載されてきた。それらの特徴、側面、および実施形態は、当業者によって理解されるように、互いに組み合せたり、変形や修正を加えたりしてもよい。よって、本開示は、そのような組み合わせ、変形および修正を包含すると考えられるべきである。
【図１Ａ】
2021528712.tif 000005
【図１Ｂ】
2021528712.tif 000006
【図２】
2021528712.tif 000007
【図３】
2021528712.tif 000008
【図４】
2021528712.tif 000009
【図５】
2021528712.tif 000010
【図６Ａ】
2021528712.tif 000011
【図６Ｂ】
2021528712.tif 000012
【図７】
2021528712.tif 000013
【図７Ｄ】
2021528712.tif 000014
【図８】
2021528712.tif 000015
【図９】
2021528712.tif 000016
【図１０】
2021528712.tif 000017
【図１１】
2021528712.tif 000018
【図１２】
2021528712.tif 000019
【図１３】
2021528712.tif 000020
【図１４】
2021528712.tif 000021
【図１５】
2021528712.tif 000022
【図１６】
2021528712.tif 000023
【国際調査報告】
2021528712.tif 000024
2021528712.tif 000025
2021528712.tif 000026
2021528712.tif 000027
2021528712.tif 000028
2021528712.tif 000029
2021528712.tif 000030