(57)【特許請求の範囲】
【請求項１】
命令をフェッチするためのフロントエンドと、
前記命令をデコードするためのデコーダと、
コアと、を備え、
前記命令は、複数のデータポイントを用いて多次元ソースデータ内の特定のデータポイントにおいて計算を実行するためのものであり、前記複数のデータポイントは、前記計算の入力として前記多次元ソースデータ内の前記特定のデータポイントに複数の次元において隣接しており、
前記コアは、前記デコードされた命令に基づいて、
複数の表形式ベクトル読み取り演算を実行し、前記複数の表形式ベクトル読み取り演算のそれぞれは、予め定められた多次元表形式ベクトルフォーマットに従って、前記多次元ソースデータの複数のデータポイントをそれぞれのベクトルレジスタに読み取るためのものであり、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは集合的に多次元形状を有し、前記多次元ソースデータ内の前記複数のデータポイントの前記集合的な形状、および、それぞれの表形式ベクトル読み取り演算によって読み取られるデータポイントの数は、前記多次元表形式ベクトルフォーマットに依存し、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは、前記多次元ソースデータ内の前記特定のデータポイントに隣接し、前記計算の入力として用いられる前記複数のデータポイントのうちの少なくとも１つを含み、
前記命令を実行するために、前記複数の表形式ベクトル読み取り演算の実行結果に基づく表形式ベクトル計算を実行し、
前記表形式ベクトル計算の結果を書き込む、プロセッサ。
【請求項２】
前記命令は、前記多次元表形式ベクトルフォーマットに従って線形ベクトルから表形式ベクトルまでのベクトル読み取りを実行するためにフォーマットされた有限差分関数である、請求項１に記載のプロセッサ。
【請求項３】
前記コアはさらに、
前記複数の表形式ベクトル読み取り演算のうちの第１の表形式ベクトル読み取り演算の結果を第１のベクトルレジスタに格納し、
前記複数の表形式ベクトル読み取り演算のうちの第２の表形式ベクトル読み取り演算の結果を第２のベクトルレジスタに格納し、前記第２のベクトルレジスタおよび前記第１のベクトルレジスタは同一のサイズを有しており、
前記第１のベクトルレジスタの結果および前記第２のベクトルレジスタの結果に基づいて、前記表形式ベクトル計算を実行し、
前記表形式ベクトル計算は、複数の計算を並列で行うことを含み、
前記計算の数は、前記第１のベクトルレジスタおよび前記第２のベクトルレジスタのサイズと同一である、請求項１または２に記載のプロセッサ。
【請求項４】
前記コアはさらに、
前記複数の表形式ベクトル読み取り演算のうちの第１の表形式ベクトル読み取り演算の結果を第１のベクトルレジスタに格納し、
前記複数の表形式ベクトル読み取り演算のうちの第２の表形式ベクトル読み取り演算の結果を第２のベクトルレジスタに格納し、
前記第１のベクトルレジスタの一部および前記第２のベクトルレジスタの一部を結合し、前記結合された部分は表形式ベクトル計算のサイズと等しく、
前記第１のベクトルレジスタおよび前記第２のベクトルレジスタの前記結合された部分に基づいて、前記表形式ベクトル計算を実行する、請求項１または２に記載のプロセッサ。
【請求項５】
前記コアはさらに、
前記複数の表形式ベクトル読み取り演算のうちの第１の表形式ベクトル読み取り演算の結果を転置して第１のベクトルレジスタに格納し、
前記複数の表形式ベクトル読み取り演算のうちの第２の表形式ベクトル読み取り演算の結果を転置して第２のベクトルレジスタに格納し、
前記第１のベクトルレジスタおよび前記第２のベクトルレジスタに基づいて、前記表形式ベクトル計算を実行する、請求項１または２に記載のプロセッサ。
【請求項６】
前記複数の表形式ベクトル読み取り演算を実行するために、前記コアは、複数のデータ入力で構成されるステンシルをカバーする十分な数の表形式読み取り演算をさらにマッピングし、前記ステンシルは、前記データポイントを計算するための前記隣接するソースデータの多次元形状であり、前記複数の表形式ベクトル読み取り演算のうちの少なくとも１つは２次元または２より大きい次元において互いに隣接するデータ入力を読み取る、請求項１から５のいずれか一項に記載のプロセッサ。
【請求項７】
前記複数の表形式ベクトル読み取り演算を実行するために、前記コアは、複数のデータ入力で構成されるステンシルをカバーするのに十分な最小数の表形式読み取り演算をさらにマッピングし、前記ステンシルは、前記データポイントを計算するための前記隣接するソースデータの多次元形状である、請求項１から６のいずれか一項に記載のプロセッサ。
【請求項８】
多次元ソースデータ内の特定のデータポイントを決定することであって、前記特定のデータポイントにおいて、複数のデータポイントを用いて計算を実行し、前記複数のデータポイントは、前記計算の入力として前記多次元ソースデータ内の前記特定のデータポイントに複数の次元において隣接している、決定することと、
複数の表形式ベクトル読み取り演算を実行することであって、前記複数の表形式ベクトル読み取り演算のそれぞれは、予め定められた多次元表形式ベクトルフォーマットに従って、前記多次元ソースデータの複数のデータポイントをそれぞれのベクトルレジスタに読み取るためのものであり、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは集合的に多次元形状を有し、前記多次元ソースデータ内の前記複数のデータポイントの前記集合的な形状、および、それぞれの表形式ベクトル読み取り演算によって読み取られるデータポイントの数は、前記多次元表形式ベクトルフォーマットに依存し、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは、前記多次元ソースデータ内の前記特定のデータポイントに隣接し、前記計算の入力として用いられる前記複数のデータポイントのうちの少なくとも１つを含む、実行することと、
前記データポイントを計算するために、前記複数の表形式ベクトル読み取り演算の実行結果に基づく表形式ベクトル計算を実行することと、を含む、プロセッサによって実行される方法。
【請求項９】
命令をフェッチするためのフロントエンドと、
前記命令をデコードするためのデコーダと、
コアと、を備え、
前記命令は、複数のデータポイントを用いて多次元ソースデータ内の特定のデータポイントにおいて計算を実行するためのものであり、前記複数のデータポイントは、前記計算の入力として前記多次元ソースデータ内の前記特定のデータポイントに複数の次元において隣接しており、
前記コアは、前記デコードされた命令に基づいて、
複数の表形式ベクトル読み取り演算を実行し、前記複数の表形式ベクトル読み取り演算のそれぞれは、予め定められた多次元表形式ベクトルフォーマットに従って、前記多次元ソースデータの複数のデータポイントをそれぞれのベクトルレジスタに読み取るためのものであり、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは集合的に多次元形状を有し、前記多次元ソースデータ内の前記複数のデータポイントの前記集合的な形状、および、それぞれの表形式ベクトル読み取り演算によって読み取られるデータポイントの数は、前記多次元表形式ベクトルフォーマットに依存し、それぞれの表形式ベクトル読み取り演算によって読み取られる前記複数のデータポイントは、前記多次元ソースデータ内の前記特定のデータポイントに隣接し、前記計算の入力として用いられる前記複数のデータポイントのうちの少なくとも１つを含み、
前記命令を実行するために、前記複数の表形式ベクトル読み取り演算の実行結果に基づく表形式ベクトル計算を実行し、
前記表形式ベクトル計算の結果を書き込む、命令を実行するためのシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、プロセッサまたは他の処理ロジックによる実行時、論理演算、数学演算、または他の関数演算を実行する処理ロジック、マイクロプロセッサ、および関連付けられた命令セットアーキテクチャの分野に関する。
【背景技術】
【０００２】
マルチプロセッサシステムがますます一般的になってきている。マルチプロセッサシステムの用途としては、動的ドメインパーティション化からデスクトップコンピューティングまで幅広く含まれる。マルチプロセッサシステムを活用すべく、実行されるべきコードは、様々な処理エンティティによる実行のために複数のスレッドに分割可能である。各スレッドは、互いに並列に実行され得る。さらに、処理エンティティの有用性を上げるべく、アウトオブオーダ実行が採用され得る。アウトオブオーダ実行は、このような命令への入力が利用可能にされるとき、命令を実行可能である。故に、コードシーケンスで後に現れる命令は、コードシーケンスで先に現れる命令よりも前に実行され得る。
【図面の簡単な説明】
【０００３】
実施形態は例として示されており、添付図面の図に限定されない。
【０００４】
【図１Ａ】本開示の実施形態による、プロセッサと共に形成される例示的なコンピュータシステムのブロック図であり、プロセッサは命令を実行するための実行ユニットを含んでよい。
【０００５】
【図１Ｂ】本開示の実施形態による、データ処理システムを示す。
【０００６】
【図１Ｃ】文字列比較演算を実行するためのデータ処理システムの他の実施形態を示す。
【０００７】
【図２】本開示の実施形態による、プロセッサのためのマイクロアーキテクチャのブロック図であり、プロセッサは命令を実行するためのロジック回路を含んでよい。
【０００８】
【図３Ａ】本開示の実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。
【０００９】
【図３Ｂ】本開示の実施形態による、考え得るレジスタ内データストレージフォーマットを示す。
【００１０】
【図３Ｃ】本開示の実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。
【００１１】
【図３Ｄ】演算エンコーディングフォーマットの一実施形態を示す。
【００１２】
【図３Ｅ】本開示の実施形態による、４０または４０より多くのビットを有する別の考え得る演算エンコーディングフォーマットを示す。
【００１３】
【図３Ｆ】本開示の実施形態による、さらなる別の考え得る演算エンコーディングフォーマットを示す。
【００１４】
【図４Ａ】本開示の実施形態による、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。
【００１５】
【図４Ｂ】本開示の実施形態による、プロセッサ内に含まれるべきインオーダアーキテクチャコアおよびレジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックを示すブロック図である。
【００１６】
【図５Ａ】本開示の実施形態による、プロセッサのブロック図である。
【００１７】
【図５Ｂ】本開示の実施形態による、コアの例示的な実装のブロック図である。
【００１８】
【図６】本開示の実施形態による、システムのブロック図である。
【００１９】
【図７】本開示の実施形態による、第２のシステムのブロック図である。
【００２０】
【図８】本開示の実施形態による、第３のシステムのブロック図である。
【００２１】
【図９】本開示の実施形態による、システムオンチップのブロック図である。
【００２２】
【図１０】本開示の実施形態による、少なくとも１つの命令を実行可能な中央処理装置およびグラフィック処理装置を含むプロセッサを示す。
【００２３】
【図１１】本開示の実施形態による、ＩＰコアの開発を示すブロック図である。
【００２４】
【図１２】本開示の実施形態による、第１のタイプの命令が異なるタイプのプロセッサによりエミュレートされ得る方法を示す。
【００２５】
【図１３】本開示の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図を示す。
【００２６】
【図１４】本開示の実施形態による、プロセッサの命令セットアーキテクチャのブロック図である。
【００２７】
【図１５】本開示の実施形態による、プロセッサの命令セットアーキテクチャのより詳細なブロック図である。
【００２８】
【図１６】本開示の実施形態による、プロセッサの命令セットアーキテクチャのための実行パイプラインのブロック図である。
【００２９】
【図１７】本開示の実施形態による、プロセッサを利用する電子デバイスのブロック図である。
【００３０】
【図１８】本開示の実施形態による、計算処理用のベクトルフォーマットのためのシステム１８００の一例示的な実施形態のブロック図である。
【００３１】
【図１９】本開示の実施形態による、有限差分関数の一例示の図である。
【００３２】
【図２０】本開示の実施形態による、有限差分関数の例示的な演算の図である。
【図２０−１】本開示の実施形態による、有限差分関数の例示的な演算の図である。
【図２０−２】本開示の実施形態による、有限差分関数の例示的な演算の図である。
【図２０−３】本開示の実施形態による、有限差分関数の例示的な演算の図である。
【００３３】
【図２１】本開示の実施形態による、異方性関数の例示的な演算の図である。
【図２１−１】本開示の実施形態による、異方性関数の例示的な演算の図である。
【００３４】
【図２２】本開示の実施形態による、表形式ベクトル読み取りに基づいて、計算を行うシステムの例示的な演算の図である。
【図２２−１】本開示の実施形態による、表形式ベクトル読み取りに基づいて、計算を行うシステムの例示的な演算の図である。
【図２２−２】本開示の実施形態による、表形式ベクトル読み取りに基づいて、計算を行うシステムの例示的な演算の図である。
【００３５】
【図２３】本開示の実施形態による、計算処理用のベクトルフォーマットを適用するための方法に係る例示的な一実施形態のフローチャートである。
【発明を実施するための形態】
【００３６】
以下、計算処理用のベクトルフォーマットのための命令および処理ロジックについて説明する。一実施形態において、このようなフォーマットは表形式フォーマットを含んでよい。別の実施形態において、このような計算は有限差分計算を含んでよい。例えば、当該計算としては、微分方程式の計算または推定、多次元の等方性関数または異方性関数が含まれてよい。しかしながら、当業者によれば、実施形態はこのような具体的詳細がなくても実施可能であることを理解されたい。また、本開示の実施形態を不必要に不明瞭にするのを回避すべく、いくつかの周知の構造、回路等は詳しく図示されていない。
【００３７】
以下の実施形態はプロセッサに関して記載されているが、他の実施形態が他のタイプの集積回路およびロジックデバイスに適用可能である。本開示の実施形態と類似の技術および教示が他のタイプの回路または半導体デバイスに適用されてよく、当該回路または半導体デバイスは、より高いパイプラインスループットおよび性能向上から利益を享受してよい。本開示の実施形態に係る教示は、データ操作を行う任意のプロセッサまたは機械に適用可能である。しかしながら、実施形態は、５１２ビット、２５６ビット、１２８ビット、６４ビット、３２ビットまたは１６ビットのデータ操作を実行するプロセッサまたは機械に限定されず、データ操作またはデータ管理が実行可能な任意のプロセッサおよび機械に適用されてよい。また、以下の詳細な説明は例示を提供しており、添付図面は例示目的で様々な例を示している。しかしながら、これらの例示は、本開示の実施形態の考え得るすべての実装を網羅的に列挙するのではなく、本開示の例示的な実施形態を提供することを目的とするにすぎず、限定的な意味に解釈されるべきではない。
【００３８】
以下の例示は、実行ユニットおよびロジック回路の文脈において、命令の処理および配信について記載しているものの、本開示の他の実施形態は、有形の機械可読媒体上に格納されたデータまたは命令によって実現されてよい。当該データまたは命令は機械による実行時に、機械に、本開示の少なくとも１つの実施形態に整合する複数の機能を実行させる。一実施形態において、本開示の実施形態に関連付けられた機能は、機械により実行可能な命令に具現化される。当該命令を使用して、当該命令でプログラム可能な汎用プロセッサまたは特定用途向けプロセッサに、本開示の複数の段階を実行させてよい。本開示の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供されてよく、当該コンピュータプログラム製品またはソフトウェアは、自身に格納された命令を有する機械またはコンピュータ可読媒体を含んでよく、当該命令を使用して、本開示の実施形態による１または複数の演算を実行するようにコンピュータ（または他の電子デバイス）をプログラムしてよい。さらに、本開示の実施形態の複数の段階は、当該段階を実行するための固定機能ロジックを含む特別なハードウェアコンポーネント、またはプログラムされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
【００３９】
本開示の実施形態を実行するためのロジックをプログラムするために使用される命令は、ＤＲＡＭ、キャッシュ、フラッシュメモリまたは他のストレージ等のシステム内のメモリに格納されてよい。さらに、命令はネットワークを介してまたは他のコンピュータ可読媒体を通して配信されてよい。故に、機械可読媒体としては、特に限定されないが、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスク、リードオンリメモリ（ＣＤ‐ＲＯＭ）、および光磁気ディスク、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、磁気若しくは光カード、フラッシュメモリ、または電気、光、音波または他の形態の伝搬信号（例えば、搬送波、赤外線信号、デジタル信号等）を介したインターネット経由での情報送信に使用される有形の機械可読ストレージ等、機械（例えばコンピュータ）によって読み取り可能な形態で情報を格納または送信するための任意のメカニズムが含まれてよい。従って、コンピュータ可読媒体としては、機械（例えばコンピュータ）によって読み取り可能な形態で電子的命令または情報を格納または送信するために好適な任意のタイプの有形の機械可読媒体が含まれてよい。
【００４０】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表わすデータは、多数の方法で設計を表わしてよい。まず、シミュレーションで有用であるように、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表わされてよい。また、ロジックおよび／またはトランジスタゲートを用いる回路レベルモデルが、設計プロセスのどこかのステージで生成されてよい。さらに、設計はどこかのステージにおいて、ハードウェアモデルの様々なデバイスの物理的配置を表わすデータレベルに到達してよい。いくつかの半導体製造技術が使用される場合、ハードウェアモデルを表わすデータは、集積回路の生成に使用されるマスクのための異なるマスク層における様々な特徴部の存在または不存在を指定するデータであってよい。設計のあらゆる表現において、データは任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスク等の磁気若しくは光ストレージは、このような情報を送信するために変調または変調以外の方法で生成された光波または電波を介して送信される情報を格納する機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信が実行される限度において、新しいコピーが作成されてよい。故に、通信プロバイダまたはネットワークプロバイダは、搬送波にエンコードされた情報等の項目を有形の機械可読媒体上に少なくとも一時的に格納し、本開示の実施形態の技術を具現化してよい。
【００４１】
現在のプロセッサの中で、多数の異なる実行ユニットを使用し、様々なコードおよび命令が処理および実行されてよい。いくつかの命令はより迅速に終了してよい一方、他の命令は完了までに複数のクロックサイクルを必要としてよい。命令のスループットがより高速なほど、プロセッサの性能全体はより良好になる。故に、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、浮動小数点命令、ロード／ストア操作、データ移動等のより複雑で、実行時間およびプロセッサリソースの観点からより多くのものを要求するような特定の命令が存在し得る。
【００４２】
より多くのコンピュータシステムがインターネット、テキストおよびマルチメディアアプリケーションで使用されるにつれ、追加のプロセッササポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理および例外処理、並びに外部入力および出力（Ｉ／Ｏ）を含む１または複数のコンピュータアーキテクチャに関連付けられてよい。
【００４３】
一実施形態において、命令セットアーキテクチャ（ＩＳＡ）は、１または複数のマイクロアーキテクチャによって実装されてよく、当該マイクロアーキテクチャは１または複数の命令セットを実装するために使用されるプロセッサロジックおよび回路を含んでよい。従って、異なるマイクロアーキテクチャを備えるプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル（登録商標）Ｐｅｎｔｉｕｍ（登録商標）４プロセッサ、インテル（登録商標）Ｃｏｒｅ（商標）プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するもののｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張機能を持つ）のバージョンとほぼ同一のものを実装する。同様に、ＡＲＭ  Ｈｏｌｄｉｎｇｓ、ＭＩＰＳ、またはそれらのライセンシ若しくは採用者等の他のプロセッサの開発企業によって設計されたプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、異なるプロセッサ設計を含んでよい。例えば、ＩＳＡの同一レジスタアーキテクチャは、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズム（例えばレジスタエイリアステーブル（ＲＡＴの使用）、リオーダバッファ（ＲＯＢ）およびリタイアメントレジスタファイルを使用して動的に割り当てられた１または複数の物理レジスタが含まれる。一実施形態において、レジスタは、１または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよい他のレジスタセットを含んでよい。
【００４４】
命令は、１または複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべき演算およびその演算が実行されるオペランドをとりわけ指定するための様々なフィールド（ビット数、ビットの場所等）を示してよい。さらなる実施形態において、いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）によってさらに定義されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく、および／または、異なって解釈される特定のフィールドを有するように定義されてよい。一実施形態において、命令は命令フォーマット（および、定義されている場合は、その命令フォーマットの複数の命令テンプレートのうちの特定の１つにおいて）を使用して表わされてよく、命令は演算およびその演算が行われるオペランドを指定または示す。
【００４５】
科学的アプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、ＲＭＳ（Ｒｅｃｏｇｎｉｔｉｏｎ（認識）、ｍｉｎｉｎｇ（マイニング）、およびｓｙｎｔｈｅｓｉｓ（合成））アプリケーション、並びにビジュアルおよびマルチメディアアプリケーション（例えば、２Ｄ／３Ｄグラフィックス、画像処理、ビデオ圧縮／圧縮解除、音声認識アルゴリズムおよびオーディオ操作）は、多数のデータアイテム上に同一の演算が実行されることを要求してよい。一実施形態において、単一命令複数データ（ＳＩＭＤ）とは、プロセッサに、複数のデータ要素への演算を実行させるタイプの命令を指す。ＳＩＭＤ技術は、レジスタ内のビットを複数の固定サイズまたは可変サイズのデータ要素に論理的に分割可能なプロセッサにおいて使用されてよく、データ要素の各々は別箇の値を表わす。例えば、一実施形態において、６４ビットレジスタ内のビットは、４つの別箇の１６ビットデータ要素を含むソースオペランドとして編成されてよく、当該データ要素の各々は別箇の１６ビット値を表わす。このタイプのデータは、「パックされた」データタイプまたは「ベクトル」データタイプと称されてよく、このデータタイプのオペランドは、パックされたデータオペランドまたはベクトルオペランドと称されてよい。一実施形態において、パックされたデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックされたデータ要素のシーケンスであってよく、パックされたデータオペランドまたはベクトルオペランドは、ＳＩＭＤ命令（または「パックされたデータ命令または「ベクトル命令」）のソースまたはデスティネーションオペランドであってよい。一実施形態において、ＳＩＭＤ命令は、同一または異なるサイズのデスティネーションベクトルオペランド（結果のベクトルオペランドとも称される）を同一または異なる数のデータ要素を備える状態で同一または異なるデータ要素順序において生成すべく、単一のベクトル演算が２つのソースベクトルオペランドに行われることを指定する。
【００４６】
ｘ８６命令、ＭＭＸ（商標）命令、ストリーミングＳＩＭＤ拡張（ＳＳＥ）命令、ＳＳＥ２命令、ＳＳＥ３命令、ＳＳＥ４．１命令およびＳＳＥ４．２命令を含む命令セットを有するＩｎｔｅｌ（登録商標）Ｃｏｒｅ（商標）プロセッサ、ベクトル浮動小数点（ＶＦＰ）命令および／またはＮＥＯＮ命令を含む命令セットを有するＡＲＭ  Ｃｏｒｔｅｘ（登録商標）ファミリのプロセッサ等のＡＲＭプロセッサ、中国科学アカデミーのコンピューティング技術協会（ＩＣＴ）によって開発されたＬｏｏｎｇｓｏｎファミリのプロセッサ等のＭＩＰＳプロセッサによって採用されるようなＳＩＭＤ技術がアプリケーション性能の大きな改善を可能にした（Ｃｏｒｅ（商標）およびＭＭＸ（商標）は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である）。
【００４７】
一実施形態において、デスティネーションおよびソースのレジスタ／データとは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語であってよい。いくつかの実施形態において、それらはレジスタ、メモリ、または本明細書に記載されたものではない他の名前または機能を有する他のストレージ領域によって実装されてよい。例えば、一実施形態において、「ＤＥＳＴ１」が一時的なストレージレジスタまたは他のストレージ領域であってよい一方で、「ＳＲＣ１」および「ＳＲＣ２」は、第１のソースストレージレジスタおよび第２のソースストレージレジスタまたは他のストレージ領域等であってよい、などである。他の実施形態において、ＳＲＣおよびＤＥＳＴストレージ領域のうちの２または２より多いものが、同一のストレージ領域（例えばＳＩＭＤレジスタ）内の複数の異なるデータストレージ要素に対応してよい。一実施形態において、複数のソースレジスタのうちの１つは、例えば、第１のソースデータおよび第２のソースデータで行われた演算結果をデスティネーションレジスタとして機能する２つのソースレジスタのうちの１つにライトバックすることによって、デスティネーションレジスタとして動作してもよい。
【００４８】
図１Ａは、本開示の実施形態によるプロセッサと共に形成された例示的なコンピュータシステムのブロック図であり、プロセッサは命令を実行するための実行ユニットを含んでよい。システム１００は、本明細書に記載の実施形態等、本開示による、処理データに対するアルゴリズムを実行するためのロジックを含む実行ユニットを採用するプロセッサ１０２等のコンポーネントを含んでよい。システム１００は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なＰＥＮＴＩＵＭ（登録商標）ＩＩＩ、ＰＥＮＴＩＵＭ（登録商標）４、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（登録商標）、ＸＳｃａｌｅ（商標）および／またはＳｔｒｏｎｇＡＲＭ（商標）マイクロプロセッサに基づく処理システムの典型的なものであってよいが、他のシステム（他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するＰＣを含む）も使用されてよい。一実施形態において、サンプルシステム１００は、ワシントン州レドモンドのマイクロソフト社から入手可能なＷＩＮＤＯＷＳ（登録商標）オペレーティングシステムのバージョンを実行してよいが、他のオペレーティングシステム（例えばＵＮＩＸ（登録商標）およびＬｉｎｕｘ（登録商標））、埋め込みソフトウェアおよび／またはグラフィックユーザインタフェースも使用されてよい。故に、本開示の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【００４９】
実施形態はコンピュータシステムに限定されない。本開示の実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーション等の他のデバイスにおいて使用されてよい。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、パーソナルデジタルアシスタント（ＰＤＡ）およびハンドヘルドＰＣが含まれる。埋め込みアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、システムオンチップ、ネットワークコンピュータ（ＮｅｔＰＣ）、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク（ＷＡＮ）スイッチ、または少なくとも１つの実施形態に係る１または複数の命令を実行し得る任意の他のシステムが含まれてよい。
【００５０】
コンピュータシステム１００は、本開示の一実施形態による少なくとも１つの命令を実行するためのアルゴリズムを実行する１または複数の実行ユニット１０８を含み得るプロセッサ１０２を含んでよい。一実施形態は、単一プロセッサのデスクトップまたはサーバシステムの文脈で記載され得るが、他の実施形態がマルチプロセッサシステム内に含まれてよい。システム１００は、「ハブ」システムアーキテクチャの一例であってよい。システム１００は、データ信号を処理するためのプロセッサ１０２を含んでよい。プロセッサ１０２は、複合命令セットコンピュータ（ＣＩＳＣ）マイクロプロセッサ、縮小命令セットコンピューティング（ＲＩＳＣ）マイクロプロセッサ、超長命令語（ＶＬＩＷ）マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサ等の任意の他のプロセッサデバイスを含んでよい。一実施形態において、プロセッサ１０２はプロセッサバス１１０に連結されてよく、プロセッサバス１１０は、プロセッサ１０２とシステム１００内の他のコンポーネントとの間でデータ信号を送信してよい。システム１００の複数の要素は、当該技術分野に習熟した者にとって周知である従来の機能を実行してよい。
【００５１】
一実施形態において、プロセッサ１０２はレベル１（Ｌ１）内部キャッシュメモリ１０４を含んでよい。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。別の実施形態において、キャッシュメモリは、プロセッサ１０２の外部に存在してよい。他の実施形態はまた、特定の実装およびニーズに応じて、内部および外部の両方のキャッシュの組み合わせを含んでよい。レジスタファイル１０６は、異なるタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタに格納してよい。
【００５２】
整数演算および浮動小数点演算を実行するためのロジックを含む実行ユニット１０８も、プロセッサ１０２内に存在する。プロセッサ１０２はまた、特定のマクロ命令のためのマイクロコードを格納するマイクロコード（μコード）ＲＯＭを含んでよい。一実施形態において、実行ユニット１０８は、パックされた命令セット１０９を処理するためのロジックを含んでよい。命令を実行するための関連回路と共に、汎用プロセッサ１０２の命令セット内にパックされた命令セット１０９を含めることによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ１０２内のパックされたデータを使用して実行されてよい。故に、多くのマルチメディアアプリケーションはパックされたデータに演算を実行するために、プロセッサのデータバスの全幅を使用することによって、加速化され、より効率的に実行されてよい。これにより、１データ要素に１または複数の演算を一度に実行すべく、データのより小さな単位をプロセッサのデータバスにわたり転送する必要性をなくしてよい。
【００５３】
実行ユニット１０８の実施形態はマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、ＤＳＰ、および他のタイプのロジック回路内で使用されてもよい。システム１００は、メモリ１２０を含んでよい。メモリ１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、または他のメモリデバイスとして実装されてよい。メモリ１２０は、プロセッサ１０２によって実行可能な、データ信号によって表現される命令および／またはデータを格納してよい。
【００５４】
システムロジックチップ１１６は、プロセッサバス１１０およびメモリ１２０に連結されてよい。システムロジックチップ１１６は、メモリコントローラハブ（ＭＣＨ）を含んでよい。プロセッサ１０２は、ＭＣＨ１１６とプロセッサバス１１０を介して通信してよい。ＭＣＨ１１６は、命令およびデータの格納およびグラフィックコマンド、データおよびテクスチャの格納のためにメモリ１２０への高帯域幅メモリパス１１８を提供してよい。ＭＣＨ１１６は、システム１００内のプロセッサ１０２、メモリ１２０、および他のコンポーネント間にわたり、データ信号を送信してよく、データ信号をプロセッサバス１１０、メモリ１２０、およびシステムＩ／Ｏ１２２間にわたり橋渡ししてよい。いくつかの実施形態において、システムロジックチップ１１６は、グラフィックコントローラ１１２に連結するためのグラフィックポートを提供してよい。ＭＣＨ１１６は、メモリインタフェース１１８を介してメモリ１２０に連結されてよい。グラフィックカード１１２が、アクセラレーテッドグラフィックポート（ＡＧＰ）相互接続１１４を介してＭＣＨ１１６に連結されてよい。
【００５５】
システム１００は、ＭＣＨ１１６をＩ／Ｏコントローラハブ（ＩＣＨ）１３０に連結するための独自のハブインタフェースバス１２２を使用してよい。一実施形態において、ＩＣＨ１３０は、ローカルＩ／Ｏバスを介していくつかのＩ／Ｏデバイスへの直接的な接続を提供してよい。ローカルＩ／Ｏバスは、周辺機器をメモリ１２０、チップセットおよびプロセッサ１０２に接続するための高速Ｉ／Ｏバスを含んでよい。これらの例としては、オーディオコントローラ、ファームウェアハブ（フラッシュＢＩＯＳ）１２８、無線送受信器１２６、データストレージ１２４、ユーザ入力およびキーボードインタフェースを含むレガシＩ／Ｏコントローラ、ユニバーサルシリアルバス（ＵＳＢ）等のシリアル拡張ポート、およびネットワークコントローラ１３４が含まれてよい。データストレージデバイス１２４は、ハードディスクドライブ、フロッピー（登録商標）ディスクドライブ、ＣＤ‐ＲＯＭデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含んでよい。
【００５６】
システムの別の実施形態について、一実施形態による命令はシステムオンチップと共に使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。このような１システムのためのメモリとしてはフラッシュメモリが含まれてよい。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同一ダイ上に配置されてよい。また、メモリコントローラまたはグラフィックコントローラ等の他のロジックブロックもシステムオンチップ上に配置されてよい。
【００５７】
図１Ｂは、本開示の実施形態に係る原理を実装するデータ処理システム１４０を示す。本明細書に記載の実施形態は、本開示の実施形態の範囲から逸脱することなく、代替の処理システムと共に動作し得ることを当業者は容易に理解するであろう。
【００５８】
コンピュータシステム１４０は、一実施形態による少なくとも１つの命令を実行するための処理コア１５９を備える。一実施形態において、処理コア１５９は、特に限定されないが、ＣＩＳＣ、ＲＩＳＣ、またはＶＬＩＷタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表わす。処理コア１５９はまた、１または複数の処理技術における製造に好適であってよく、また機械可読媒体に対し十分詳細に表現されることによって、当該製造を容易にするために好適であってよい。
【００５９】
処理コア１５９は、実行ユニット１４２、レジスタファイルのセット１４５、およびデコーダ１４４を備える。処理コア１５９はまた、本開示の実施形態の理解には不要であるかもしれない追加の回路（不図示）を含んでよい。実行ユニット１４２は処理コア１５９によって受信される命令を実行してよい。典型的なプロセッサ命令の実行に加え、実行ユニット１４２は、パックされたデータフォーマットに演算を実行するために、パックされた命令セット１４３内の命令を実行してよい。パックされた命令セット１４３は、本開示の実施形態を実行するための命令および他のパックされた命令を含んでよい。実行ユニット１４２は、内部バスによってレジスタファイル１４５に連結されてよい。レジスタファイル１４５は、データを含む情報を格納するための処理コア１５９上のストレージ領域を表わしてよい。上記の通り、パックされたデータを格納可能なストレージ領域は、重要ではない可能性があることを理解されたい。実行ユニット１４２はデコーダ１４４に連結されてよい。デコーダ１４４は、処理コア１５９によって受信される命令を、制御信号および／またはマイクロコードエントリポイントにデコードしてよい。これらの制御信号および／またはマイクロコードエントリポイントに応答して、実行ユニット１４２は適切な演算を実行する。一実施形態において、デコーダは命令のオペコードを解釈してよく、当該オペコードは、命令内で指定される該当データに対しどのような演算を実行すべきかを示すであろう。
【００６０】
処理コア１５９は、様々な他のシステムデバイスとの通信のためにバス１４１に連結されてよく、当該システムデバイスとしては特に限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントロール１４６、スタティックランダムアクセスメモリ（ＳＲＡＭ）コントロール１４７、バーストフラッシュメモリインタフェース１４８、ＰＣメモリカード国際協会（ＰＣＭＣＩＡ）／コンパクトフラッシュ（登録商標）（ＣＦ）カードコントロール１４９、液晶ディスプレイ（ＬＣＤ）コントロール１５０、ダイレクトメモリアクセス（ＤＭＡ）コントローラ１５１、および代替のバスマスタインタフェース１５２が含まれてよい。一実施形態において、データ処理システム１４０はまたＩ／Ｏバス１５３を介して様々なＩ／Ｏデバイスと通信するためのＩ／Ｏブリッジ１５４を含んでよい。このようなＩ／Ｏデバイスとしては特に限定されないが、例えば、汎用非同期送受信回路（ＵＡＲＴ）１５５、ユニバーサルシリアルバス（ＵＳＢ）１５６、Ｂｌｕｅｔｏｏｔｈ（登録商標）無線ＵＡＲＴ１５７およびＩ／Ｏ拡張インタフェース１５８が含まれてよい。
【００６１】
データ処理システム１４０の一実施形態は、モバイル、ネットワークおよび／または無線通信、並びに文字列比較演算を含むＳＩＭＤ演算を実行可能な処理コア１５９を提供する。処理コア１５９は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージ処理アルゴリズムおよび通信アルゴリズムでプログラムされてよく、当該アルゴリズムにはウォルシュアダマール変換、高速フーリエ変換（ＦＦＴ）、離散コサイン変換（ＤＣＴ）、およびそれらそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコードモーション推定またはビデオデコードモーション補償等の圧縮／圧縮解除技法と、パルス符号変調（ＰＣＭ）等の変調／復調（ＭＯＤＥＭ）機能とが含まれる。
【００６２】
図１Ｃは、ＳＩＭＤ文字列比較演算を実行するデータ処理システムの他の実施形態を示す。一実施形態において、データ処理システム１６０は、メインプロセッサ１６６、ＳＩＭＤコプロセッサ１６１、キャッシュメモリ１６７、および入／出力システム１６８を含んでよい。随意で、入／出力システム１６８は、無線インタフェース１６９に連結されてよい。ＳＩＭＤコプロセッサ１６１は、一実施形態による命令を含む演算を実行してよい。一実施形態において、処理コア１７０は１または複数の処理技術における製造に好適であってよく、また機械可読媒体上で十分詳細に表現されることによって、処理コア１７０を含むデータ処理システム１６０のうちの全部または一部の製造を容易にするために好適であってよい。
【００６３】
一実施形態において、ＳＩＭＤコプロセッサ１６１は実行ユニット１６２およびレジスタファイルのセット１６４を備える。メインプロセッサ１６５の一実施形態は、実行ユニット１６２による実行のための一実施形態による命令を含む命令セット１６３のうちの命令を認識するためのデコーダ１６５を備える。他の実施形態において、ＳＩＭＤコプロセッサ１６１はまた、命令セット１６３のうちの命令をデコードするためのデコーダ１６５のうちの少なくとも一部を備える。処理コア１７０はまた、本開示の実施形態の理解には不要であるかもしれない追加の回路（不図示）を含んでよい。
【００６４】
演算時、メインプロセッサ１６６は、キャッシュメモリ１６７および入／出力システム１６８とのやり取りを含む一般的なタイプのデータ処理操作を制御するデータ処理命令ストリームを実行する。ＳＩＭＤコプロセッサ命令がデータ処理命令ストリーム内に埋め込まれてよい。メインプロセッサ１６６のデコーダ１６５は、これらのＳＩＭＤコプロセッサ命令を付属のＳＩＭＤコプロセッサ１６１によって実行される必要があるタイプのものであると認識する。従って、メインプロセッサ１６６は、これらのＳＩＭＤコプロセッサ命令（または、ＳＩＭＤコプロセッサ命令を表わす制御信号）をコプロセッサバス１６６に対し発行する。コプロセッサバス１６６からのこれらの命令は、任意の付属のＳＩＭＤコプロセッサによって受信されてよい。この場合、ＳＩＭＤコプロセッサ１６１は、自身を宛先とするあらゆる受信されたＳＩＭＤコプロセッサ命令を受け付けおよび実行してよい。
【００６５】
データは、ＳＩＭＤコプロセッサ命令による処理のために、無線インタフェース１６９を介して受信されてよい。一例として、音声通信がデジタル信号の形態で受信されてよく、当該デジタル信号はＳＩＭＤコプロセッサ命令によって処理され、当該音声通信を表わすデジタルオーディオサンプルを再生成してよい。別の例として、圧縮されたオーディオおよび／またはビデオがデジタルビットストリームの形態で受信されてよく、当該デジタルビットストリームはＳＩＭＤコプロセッサ命令によって処理され、デジタルオーディオサンプルおよび／またはモーションビデオフレームを再生成してよい。処理コア１７０の一実施形態において、メインプロセッサ１６６およびＳＩＭＤコプロセッサ１６１は、単一の処理コア１７０に統合されてよく、当該単一の処理コア１７０は実行ユニット１６２、レジスタファイルのセット１６４および一実施形態による命令を含む命令セット１６３のうちの命令を認識するためのデコーダ１６５を備える。
【００６６】
図２は、本開示の実施形態による命令を実行するためのロジック回路を含んでよいプロセッサ２００のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズに加え、単精度整数データタイプおよび倍精度整数データタイプおよび単精度浮動小数点データタイプおよび倍精度浮動小数点データタイプのようなデータタイプを有するデータ要素に演算を行うように実装されてよい。一実施形態において、インオーダフロントエンド２０１が、実行されるべき命令をフェッチ可能なプロセッサ２００の一部を実装してよく、当該命令をプロセッサパイプラインにおいて後で使用されるように準備する。フロントエンド２０１はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ２２６は、メモリから命令をフェッチし、当該命令を命令デコーダ２２８にフィードすると、命令デコーダ２２８が今度は当該命令をデコードまたは解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」（マイクロｏｐまたはμｏｐとも称される）と称される１または複数の演算にデコードする。他の実施形態において、デコーダは命令を、オペコード並びに対応するデータおよび制御フィールドに解析する。オペコード並びに対応するデータおよび制御フィールドは、マイクロアーキテクチャによって使用され、一実施形態による演算を実行してよい。一実施形態において、トレースキャッシュ２３０は、実行のために、デコードされたμｏｐをプログラムにより順序付けられたシーケンスまたはμｏｐキュー２３４内のトレースに組み立ててよい。トレースキャッシュ２３０が複雑な命令に遭遇する場合、マイクロコードＲＯＭ２３２は演算の完了に必要なμｏｐを提供する。
【００６７】
いくつかの命令が単一のマイクロｏｐに変換されてよい一方、他の命令は完全な演算を完了させるためのいくつかのマイクロｏｐを必要とする。一実施形態において、命令の完了に４つより多いマイクロｏｐが必要な場合、デコーダ２２８はマイクロコードＲＯＭ２３２にアクセスし、命令を実行してよい。一実施形態において、命令は、命令デコーダ２２８で処理するための少数のマイクロｏｐにデコードされてよい。別の実施形態において、演算を遂行するために多数のマイクロｏｐが必要な場合、命令はマイクロコードＲＯＭ２３２内に格納されてよい。トレースキャッシュ２３０とは、一実施形態によるマイクロコードＲＯＭ２３２からの１または複数の命令を完了すべく、マイクロコードシーケンスを読み取るための正しいマイクロ命令ポインタを判断するためのエントリポイントプログラマブルロジックアレイ（ＰＬＡ）を指す。マイクロコードＲＯＭ２３２が命令のためのマイクロｏｐのシーケンス処理を完了した後、機械のフロントエンド２０１は、トレースキャッシュ２３０からのマイクロｏｐのフェッチを再開してよい。
【００６８】
アウトオブオーダ実行エンジン２０３は、命令を実行のために準備してよい。アウトオブオーダ実行ロジックは、命令フローがパイプラインに行き、実行のためにスケジュールされる際、性能を最適化するために、命令フローを円滑化し、並べ替えるための複数のバッファを有する。アロケータロジックは、各μｏｐが実行のために必要とする機械のバッファおよびリソースを割り当てる。レジスタリネーミングロジックはロジックレジスタをレジスタファイル内のエントリにリネーム（名前変更）する。アロケータはまた、命令スケジューラの前にある２つのμｏｐキューのうちの一方にある各μｏｐのためにエントリを割り当てる。当該μｏｐキューのうちの１つはメモリ操作用、もう１つは非メモリ操作用のものであり、当該命令スケジューラはメモリスケジューラ、高速スケジューラ２０２、低速／全般浮動小数点スケジューラ２０４、および簡易浮動小数点スケジューラ２０６で構成される。μｏｐスケジューラ２０２、２０４、２０６は、それらの従属入力レジスタオペランドソースの準備状態およびμｏｐがそれらの演算の完了に必要とする実行リソースの利用可能性に基づいて、μｏｐが、いつ実行準備が整うかを判断する。一実施形態の高速スケジューラ２０２は、メインクロックサイクルの各半分においてスケジューリングしてよい一方、他のスケジューラはメインプロセッサクロックサイクルごとに一回のみスケジューリングしてよい。スケジューラは、μｏｐの実行をスケジューリングするためのディスパッチポートを調整する。
【００６９】
レジスタファイル２０８、２１０は、スケジューラ２０２、２０４、２０６および実行ブロック２１１内の実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４間に配置されてよい。レジスタファイル２０８、２１０の各々は、整数演算および浮動小数点演算をそれぞれ実行する。各レジスタファイル２０８、２１０は、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、新しい従属μｏｐにバイパスまたは転送し得るバイパスネットワークを含んでよい。整数レジスタファイル２０８および浮動小数点レジスタファイル２１０は、それら同士でデータを通信してよい。一実施形態において、整数レジスタファイル２０８は２つの別個のレジスタファイルに分割されてよく、１つのレジスタファイルは低次の３２ビットデータ用、第２のレジスタファイルは高次の３２ビットデータ用である。浮動小数点レジスタファイル２１０は、１２８ビット幅エントリを含んでよい。というのは、浮動小数点命令は通常、６４〜１２８ビット幅のオペランドを有するからである。
【００７０】
実行ブロック２１１は、実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４を含んでよい。実行ユニット２１２、２１４、２１６、２１８、２２０、２２２、２２４は命令を実行してよい。実行ブロック２１１は、マイクロ命令が実行に必要とする整数データオペラント値および浮動小数点データオペランド値を格納するレジスタファイル２０８、２１０を含んでよい。一実施形態において、プロセッサ２００は多数の実行ユニット、すなわちアドレス生成ユニット（ＡＧＵ）２１２、ＡＧＵ２１４、高速ＡＬＵ２１６、高速ＡＬＵ２１８、低速ＡＬＵ２２０、浮動小数点ＡＬＵ２２２、浮動小数点移動ユニット２２４を備えてよい。別の実施形態において、浮動小数点実行ブロック２２２、２２４は、浮動小数点演算、ＭＭＸ演算、ＳＩＭＤ演算およびＳＳＥ演算または他の演算を実行してよい。さらなる別の実施形態において、浮動小数点ＡＬＵ２２２は、マイクロｏｐの除算、平方根および剰余を実行するための６４ビット単位の浮動小数点除算器を含んでよい。様々な実施形態において、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、ＡＬＵ演算が高速ＡＬＵ実行ユニット２１６、２１８に渡されてよい。高速ＡＬＵ２１６、２１８は、高速演算をクロックサイクルの半分の有効なレイテンシで実行してよい。一実施形態において、複素整数演算の大半は低速ＡＬＵ２２０に移動される。というのは、低速ＡＬＵ２２０は、乗算、シフト、フラグロジック、および分岐処理等の長レイテンシタイプの演算のための整数実行ハードウェアを含んでよいからである。メモリロード／ストア操作は、ＡＧＵ２１２、２１４によって実行されてよい。一実施形態において、整数ＡＬＵ２１６、２１８、２２０は、６４ビットデータオペランドに整数演算を実行してよい。他の実施形態において、ＡＬＵ２１６、２１８、２２０は、１６、３２、１２８、２５６等の様々なデータビットサイズをサポートするように実装されてよい。同様に、浮動小数点ユニット２２２、２２４は、様々なビット幅を有するオペランドの範囲をサポートするように実装されてよい。一実施形態において、浮動小数点ユニット２２２、２２４は、ＳＩＭＤ命令およびマルチメディア命令と連携して、１２８ビット幅のパックされたデータオペランドに演算を行ってよい。
【００７１】
一実施形態において、μｏｐスケジューラ２０２、２０４、２０６は、親ロードが実行を終了する前に、従属する演算をディスパッチする。μｏｐはプロセッサ２００内で予測的にスケジュールされ、実行されてよく、プロセッサ２００はまたメモリミスを処理するためのロジックを含んでよい。データロードがデータキャッシュ内で失敗する場合、従属する演算がパイプライン内にインフライトで存在する可能性があり、これにより、スケジューラは一時的に誤ったデータが残された状態になっている。再生メカニズムは、誤ったデータを使用する命令を追跡および再実行する。従属する演算のみが再生の必要がある可能性があり、独立した演算は完了を許可されてよい。プロセッサの一実施形態に係るスケジューラおよび再生メカニズムは、文字列比較演算のための命令シーケンスをキャッチするように設計されてもよい。
【００７２】
「レジスタ」という用語は、オペランドを識別するための命令の一部として使用され得るオンボードプロセッサのストレージ場所を指してよい。換言すると、レジスタとは、プロセッサの外部（プログラマの視点から）から使用可能であってよいレジスタであってよい。しかしながら、いくつかの実施形態において、レジスタは特定のタイプの回路に限定されなくてよい。レジスタは、データの格納、データの供給を行ってよく、また本明細書に記載の機能を実行してよい。本明細書に記載のレジスタは、プロセッサ内の回路によって、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等、任意の数の異なる技術を使用して実装されてよい。一実施形態において、整数レジスタは３２ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックされたデータのための８個のマルチメディアＳＩＭＤレジスタを含む。後述の通り、レジスタはパックされたデータを保持するように設計されたデータレジスタであると理解されてよく、当該データレジスタとしては、カリフォルニア州サンタクララのインテルコーポレーションのＭＭＸ技術で有効にされるマイクロプロセッサ内の６４ビット幅ＭＭＸ（商標）レジスタ（いくつかの例において「ｍｍ」レジスタとも称される）といったものが挙げられる。整数および浮動小数点の両方の形態で利用可能なこれらのＭＭＸレジスタは、ＳＩＭＤ命令およびＳＳＥ命令に伴うパックされたデータ要素と共に動作してよい。同様に、ＳＳＥ２、ＳＳＥ３、ＳＳＥ４、またはそれ以降（概して「ＳＳＥｘ」と称される）に関する１２８ビット幅ＸＭＭレジスタ技術は、このようなパックされたデータオペランドを保持してよい。一実施形態において、パックされたデータおよび整数データを格納する際、レジスタは当該２つのデータタイプ間を区別する必要はない。一実施形態において、整数および浮動小数点は同一のレジスタファイル内または異なるレジスタファイル内に含まれてよい。さらに、一実施形態において、浮動小数点および整数データは異なるレジスタ内または同一のレジスタ内に格納されてよい。
【００７３】
以下の図中の例示において、多数のデータオペランドについて説明される可能性がある。図３Ａは、本開示の実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。図３Ａは、１２８ビット幅オペランドのパックされたバイト３１０、パックされたワード３２０、およびパックされたダブルワード（ｄｗｏｒｄ）３３０のデータタイプを示す。この例のパックされたバイトフォーマット３１０は１２８ビット長であってよく、１６個のパックされたバイトデータ要素を含む。１バイトは、例えば、８ビットのデータとして定義されてよい。各バイトデータ要素の情報は、０ビットから７ビットまではバイト０、８ビットから１５ビットまではバイト１、１６ビットから２３ビットまではバイト２、および最終の１２０ビットから１２７ビットまではバイト１５内に格納されてよい。故に、すべての利用可能なビットがレジスタ内で使用されてよい。このストレージ構成によって、プロセッサのストレージ効率が向上する。なお、１６個のデータ要素にアクセスされるので、１６個のデータ要素に対し１つの操作が並列に実行されてよい。
【００７４】
概して、一データ要素は、同一の長さを持つ他のデータ要素と共に、単一のレジスタまたはメモリ場所に格納される個々のデータを含んでよい。ＳＳＥｘ技術に関するパックされたデータシーケンスにおいては、ＸＭＭレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された１２８ビットであってよい。同様に、ＭＭＸおよびＳＳＥ技術に関するパックされたデータシーケンスにおいては、ＭＭＸレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された６４ビットであってよい。図３Ａに示すデータタイプは１２８ビット長であるが、本開示の実施形態は、６４ビット幅のオペランドまたは他のサイズのオペランドと共に動作してもよい。この例のパックされたワードフォーマット３２０は１２８ビット長であってよく、８個のパックされたワードデータ要素を含む。各パックされたワードは、１６ビットの情報を含む。図３Ａのパックされたダブルワードフォーマット３３０は１２８ビット長であってよく、４個のパックされたダブルワードデータ要素を含む。各パックされたダブルワードデータ要素は、３２ビットの情報を含む。パックされたクワッドワードは１２８ビット長であってよく、２個のパックされたクワッドワードデータ要素を含む。
【００７５】
図３Ｂは、本開示の実施形態による考え得るレジスタ内データストレージフォーマットを示す。各パックされたデータは、１より多い独立データ要素を含んでよい。パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３の３つのパックされたデータフォーマットが図示されている。パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３の一実施形態は、固定小数点データ要素を含む。別の実施形態については、パックされたハーフ３４１、パックされたシングル３４２およびパックされたダブル３４３のうちの１または複数は、浮動小数点データ要素を含んでよい。パックされたハーフ３４１の一実施形態は、８個の１６ビットデータ要素を含む１２８ビット長であってよい。パックされたシングル３４２の一実施形態は１２８ビット長であってよく、４個の３２ビットデータ要素を含む。パックされたダブル３４３の一実施形態は１２８ビット長であってよく、２個の６４ビットデータ要素を含む。このようなパックされたデータフォーマットは、例えば、９６ビット、１６０ビット、１９２ビット、２２４ビット、２５６ビットまたはそれ以上といった他のレジスタ長にさらに拡張されてよいことを理解されたい。
【００７６】
図３Ｃは、本開示の実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。符号なしのパックされたバイト表現３４４は、ＳＩＭＤレジスタ内の符号なしのパックされたバイトの格納状態を示す。各バイトデータ要素の情報は、０ビットから７ビットまではバイト０、８ビットから１５ビットまではバイト１、１６ビットから２３ビットまではバイト２、および最終の１２０ビットから１２７ビットまではバイト１５内に格納されてよい。故に、すべての利用可能なビットがレジスタ内で使用されてよい。このストレージ構成によって、プロセッサのストレージ効率が向上されてよい。なお、１６個のデータ要素にアクセスされるので、１６個のデータ要素に対し１つの操作が並列に実行されてよい。符号付きのパックされたバイト表現３４５は、符号付きのパックされたバイトの格納状態を示す。各バイトデータ要素の第８番目のビットは、符号インジケータであってよいことに留意されたい。符号なしのパックされたワード表現３４６は、ワード０からワード７がＳＩＭＤレジスタ内にどのように格納され得るかを示す。符号付きのパックされたワード表現３４７は、符号なしのパックされたワードのレジスタ内表現３４６と類似してよい。各ワードデータ要素の第１６番目のビットが符号インジケータであってよいことに留意されたい。符号なしのパックされたダブルワード表現３４８は、ダブルワードデータ要素の格納方法を示す。符号付きパックされたダブルワード表現３４９は、符号なしのパックされたダブルワードのレジスタ内表現３４８と類似してよい。必要な符号ビットは、各ダブルワードデータ要素の第３２番目のビットであってよいことに留意されたい。
【００７７】
図３Ｄは、演算エンコーディング（オペコード）の一実施形態を示す。さらに、フォーマット３６０は、カリフォルニア州サンタクララのインテルコーポレーションのｗｏｒｌｄ  ｗｉｄｅ  ｗｅｂ（ｗｗｗ）(intel.com/design/litcentr)から入手可能な「ＩＡ‐３２インテルアーキテクチャソフトウェア開発者のマニュアル第２巻：命令セットリファレンス」に記載のタイプのオペコードフォーマットと一致するレジスタ／メモリオペランドアドレス指定モードを含んでよい。一実施形態において、命令はフィールド３６１および３６２のうちの１または複数によってエンコードされてよい。１命令ごとに、最大２つのソースオペランド識別子３６４および３６５を含む、最大２つのオペランド位置が識別されてよい。一実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６４と同一であってよい一方、他の実施形態においては、それらは異なってよい。別の実施形態において、デスティネーションオペランド識別子３６６は、ソースオペランド識別子３６５と同一であってよい一方、他の実施形態においては、それらは異なってよい。一実施形態において、ソースオペランド識別子３６４および３６５によって識別される複数のソースオペランドのうちの１つは、文字列比較演算の結果によって上書きされてよい一方、他の実施形態においては、識別子３６４はソースレジスタ要素に対応し、識別子３６５はデスティネーションレジスタ要素に対応する。一実施形態において、オペランド識別子３６４および３６５は、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。
【００７８】
図３Ｅは、本開示の実施形態による、４０または４０より多くのビットを有する別の考え得る演算エンコーディング（オペコード）フォーマット３７０を示す。オペコードフォーマット３７０は、オペコードフォーマット３６０と対応し、オプションのプレフィックスバイト３７８を含む。一実施形態による命令は、フィールド３７８、３７１および３７２のうちの１または複数によってエンコードされてよい。１命令ごとに最大２つのオペランド位置が、ソースオペランド識別子３７４および３７５並びにプレフィックスバイト３７８によって識別されてよい。一実施形態において、プレフィックスバイト３７８が使用され、３２ビットまたは６４ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。一実施形態において、デスティネーションオペランド識別子３７６はソースオペランド識別子３７４と同一であってよい一方、他の実施形態においては、それらは異なってよい。別の実施形態において、デスティネーションオペランド識別子３７６は、ソースオペランド識別子３７５と同一であってよい一方、他の実施形態においては、それらは異なってよい。一実施形態において、命令はオペランド識別子３７４および３７５によって識別されるオペランドのうちの１または複数に対し演算を行い、オペランド識別子３７４および３７５によって識別される１または複数のオペランドは命令の結果で上書きされてよい一方、他の実施形態においては、識別子３７４および３７５によって識別されるオペランドは別のレジスタ内の別のデータ要素に書き込まれてよい。オペコードフォーマット３６０および３７０は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、ＭＯＤフィールド３６３および３７３によって並びにオプションのスケールインデックスベースおよび変位バイトによって部分的に指定されることを可能にする。
【００７９】
図３Ｆは、本開示の実施形態による、さらなる別の考え得る演算エンコーディング（オペコード）フォーマットを示す。６４ビットの単一命令複数データ（ＳＩＭＤ）算術演算は、コプロセッサデータ処理（ＣＤＰ）命令を介して実行されてよい。演算エンコーディング（オペコード）フォーマット３８０は、ＣＤＰオペコードフィールド３８２および３８９を有する１つのそのようなＣＤＰ命令を表示する。別の実施形態における、当該タイプのＣＤＰ命令演算は、フィールド３８３、３８４、３８７および３８８のうちの１または複数によってエンコードされてよい。１命令ごとに、最大２つのソースオペランド識別子３８５および３９０並びに１つのデスティネーションオペランド識別子３８６を含む、最大３つのオペランド位置が識別されてよい。コプロセッサの一実施形態は、８ビット、１６ビット、３２ビット、および６４ビットの値に演算を行ってよい。一実施形態において、命令は整数データ要素に対し実行されてよい。いくつかの実施形態においては、命令は条件フィールド３８１を使用して条件的に実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド３８３によってエンコードされてよい。いくつかの実施形態において、ゼロ（Ｚ）、負（Ｎ）、キャリー（Ｃ）およびオーバーフロー（Ｖ）検出がＳＩＭＤフィールドでなされてよい。いくつかの命令については、飽和タイプがフィールド３８４によってエンコードされてよい。
【００８０】
図４Ａは、本開示の実施形態による、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行／実行パイプラインを示すブロック図である。図４Ｂは、本開示の実施形態による、プロセッサ内に含まれるべきインオーダアーキテクチャコアおよびレジスタリネーミングロジック、アウトオブオーダ発行／実行ロジックを示すブロック図である。図４Ａ中の実線ボックスはインオーダパイプラインを示す一方、破線ボックスはレジスタリネーミング、アウトオブオーダ発行／実行パイプラインを示す。同様に、図４Ｂ中の実線ボックスはインオーダアーキテクチャロジックを示す一方、破線ボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行／実行ロジックを示す。
【００８１】
図４Ａ中、プロセッサパイプライン４００はフェッチステージ４０２、長さデコードステージ４０４、デコードステージ４０６、割り当てステージ４０８、リネーミングステージ４１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ４１２、レジスタ読み取り／メモリ読み取りステージ４１４、実行ステージ４１６、ライトバック／メモリ書き込みステージ４１８、例外処理ステージ４２２、およびコミットステージ４２４を含んでよい。
【００８２】
図４Ｂ中、矢印は２または２より多いユニット間の連結を示し、矢印の方向はそれらのユニット間のデータフロー方向を示す。図４Ｂは、実行エンジンユニット４５０に連結されたフロントエンドユニット４３０を含むプロセッサコア４９０を示し、これら両方はメモリユニット４７０に連結されてよい。
【００８３】
コア４９０は縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド若しくは代替的なコアタイプであってよい。一実施形態において、コア４９０は、例えば、ネットワークコアまたは通信コア、圧縮エンジンコア、グラフィックコア等の特定用途のコアであってよい。
【００８４】
フロントエンドユニット４３０は、命令キャッシュユニット４３４に連結された分岐予測ユニット４３２を含んでよい。命令キャッシュユニット４３４は、命令変換ルックアサイドバッファ（ＴＬＢ）４３６に連結されてよい。ＴＬＢ４３６は命令フェッチユニット４３８に連結されてよく、命令フェッチユニット４３８はデコードユニット４４０に連結される。デコードユニット４４０は命令をデコードしてよく、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは元の命令からデコードされてよく、あるいは元の命令を反映してよく、あるいは元の命令から導かれてよい。デコーダは、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては特に限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が含まれる。一実施形態において、命令キャッシュユニット４３４はさらにメモリユニット４７０内のレベル２（Ｌ２）キャッシュユニット４７６に連結されてよい。デコードユニット４４０は、実行エンジンユニット４５０内のリネーミング／アロケータユニット４５２に連結されてよい。
【００８５】
実行エンジンユニット４５０は、リタイアメントユニット４５４に連結されたリネーミング／アロケータユニット４５２および１または複数のスケジューラユニット４５６のセットを含んでよい。スケジューラユニット４５６は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表わす。スケジューラユニット４５６は物理レジスタファイルユニット４５８に連結されてよい。複数の物理レジスタファイルユニット４５８の各々は１または複数の物理レジスタファイルを表わしており、それぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等の１または複数の異なるデータタイプを格納する。物理レジスタファイルユニット４５８にリタイアメントユニット４５４を重複させ、レジスタリネーミングおよびアウトオブオーダ実行を実装可能な様々な方法を示してよい（例えば、１または複数のリオーダバッファおよび１または複数のリタイアメントレジスタファイルを使用して、１または複数の将来のファイル、１または複数の履歴バッファおよび１または複数のリタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタプールを使用して等）。概して、アーキテクチャレジスタは、プロセッサの外部から、またはプログラマの視点から可視であってよい。レジスタは、任意の既知の特定のタイプの回路に限定されなくてよい。様々な異なるタイプのレジスタが、それらが本明細書に記載のデータを格納し、提供する限り、好適であってよい。好適なレジスタの例としては特に限定されないが、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等が含まれる。リタイアメントユニット４５４および物理レジスタファイルユニット４５８は、実行クラスタ４６０に連結されてよい。実行クラスタ４６０は、１または複数の実行ユニット１６２のセット、１または複数のメモリアクセスユニット４６４のセットを含んでよい。実行ユニット４６２は、様々な演算（例えば、シフト、加算、減算、乗算）を様々なタイプのデータ（例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点）に行ってよい。いくつかの実施形態は、特定の関数または複数の関数セットに専用の多数の実行ユニットを含んでよく、他の実施形態は、１つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット４５６、物理レジスタファイルユニット４５８、実行クラスタ４６０は可能性として複数形で図示されているのは、特定の実施形態が特定タイプのデータ／演算のために別個の複数のパイプライン（例えば、スカラ整数のパイプライン、スカラ浮動小数点／パックされた整数／パックされた浮動小数点／ベクトル整数／ベクトル浮動小数点のパイプラインおよび／またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット４６４を有する特定の実施形態が実装されてよい）を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの１または複数はアウトオブオーダ発行／実行であってよく、残りはインオーダであってよいことも理解されたい。
【００８６】
メモリアクセスユニット４６４のセットがメモリユニット４７０に連結されてよく、当該メモリユニット４７０はレベル２（Ｌ２）キャッシュユニット４７６に連結されたデータキャッシュユニット４７４に連結されたデータＴＬＢユニット４７２を含んでよい。一例示的な実施形態において、メモリアクセスユニット４６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット４７０内のデータＴＬＢユニット４７２に連結されてよい。Ｌ２キャッシュユニット４７６は、１または複数の他のレベルのキャッシュに連結され、最終的にメインメモリに連結されてよい。
【００８７】
例を挙げると、例示的なレジスタリネーミング、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン４００を以下のように実装してよい。すなわち、（１）命令フェッチ４３８がフェッチステージ４０２および長さデコーディングステージ４０４を実行してよい。（２）デコードユニット４４０がデコードステージ４０６を実行してよい。（３）リネーミング／アロケータユニット４５２が割り当てステージ４０８およびリネーミングステージ４１０を実行してよい。（４）スケジューラユニット４５６がスケジューリングステージ４１２を実行してよい。（５）物理レジスタファイルユニット４５８およびメモリユニット４７０がレジスタ読み取り／メモリ読み取りステージ４１４を実行してよい。実行クラスタ４６０がステージ４１６を実行してよい。（６）メモリユニット４７０および物理レジスタファイルユニット４５８がライトバック／メモリ書き込みステージ４１８を実行してよい。（７）様々なユニットが例外処理ステージ４２２の実行に使用されてよい。（８）リタイアメントユニット４５４および物理レジスタファイルユニット４５８がコミットステージ４２４を実行してよい。
【００８８】
コア４９０は、１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンに追加されたいくつかの拡張機能を持つ）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等のオプションの追加拡張機能を持つ）をサポートしてよい。
【００８９】
コアは、様々な方法でマルチスレッディング（演算またはスレッドの２または２より多い並列セットの実行）をサポートしてよいことを理解されたい。マルチスレッディングサポートは、特に限定されないが、例えば、時分割マルチスレッディング、同時マルチスレッディング（この場合、単一の物理コアは、物理コアが同時にマルチスレッディングをする複数のスレッドの各々に対する論理コアを提供する）、またはこれらの組み合わせを含むことによって行われてよい。このような組み合わせとしては、特に限定されないが、例えば、時分割フェッチおよび時分割デコード並びにインテル（登録商標）ハイパースレッド技術等のそれら以降の同時マルチスレッディングが含まれてよい。
【００９０】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明される可能性があるが、レジスタリネーミングはインオーダアーキテクチャにおいて使用されてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令キャッシュユニット４３４／データキャッシュユニット４７４および共有Ｌ２キャッシュユニット４７６を含んでもよく、他の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュまたは複数のレベルの内部キャッシュ等、命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュおよび外部キャッシュの組み合わせを含んでよく、外部キャッシュはコアおよび／またはプロセッサの外部に存在してよい。他の実施形態において、すべてのキャッシュは、コアおよび／またはプロセッサの外部に存在してよい。
【００９１】
図５Ａは、本開示の実施形態によるプロセッサ５００のブロック図である。一実施形態において、プロセッサ５００は、マルチコアプロセッサを含んでよい。プロセッサ５００は、１または複数のコア５０２に通信可能に連結されたシステムエージェント５１０を含んでよい。さらに、コア５０２およびシステムエージェント５１０は１または複数のキャッシュ５０６に通信可能に連結されてよい。コア５０２、システムエージェント５１０およびキャッシュ５０６は、１または複数のメモリ制御ユニット５５２を介して通信可能に連結されてよい。さらに、コア５０２、システムエージェント５１０およびキャッシュ５０６は、メモリ制御ユニット５５２を介してグラフィックモジュール５６０に通信可能に連結されてよい。
【００９２】
プロセッサ５００は、複数のコア５０２、システムエージェント５１０、および複数のキャッシュ５０６およびグラフィックモジュール５６０を相互接続するための任意の好適なメカニズムを含んでよい。一実施形態において、プロセッサ５００は、複数のコア５０２、システムエージェント５１０、および複数のキャッシュ５０６、およびグラフィックモジュール５６０を相互接続するためのリングベースの相互接続ユニット５０８を含んでよい。他の実施形態において、プロセッサ５００は、このような複数のユニットを相互接続するための任意の数の周知技術を含んでよい。リングベースの相互接続ユニット５０８はメモリ制御ユニット５５２を利用して、相互接続を容易化してよい。
【００９３】
プロセッサ５００は、複数のコア内の１または複数のレベルのキャッシュ、キャッシュ５０６等の１または複数の共有キャッシュユニット、または統合メモリコントローラユニット５５２のセットに連結された外部メモリ（不図示）を含むメモリ階層を含んでよい。キャッシュ５０６は任意の好適なキャッシュを含んでよい。一実施形態において、キャッシュ５０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）等の１または複数の中レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ（ＬＬＣ）、および／またはこれらの組み合わせを含んでよい。
【００９４】
様々な実施形態において、コア５０２の１または複数は、マルチスレッディングを実行してよい。システムエージェント５１０は、コア５０２を調整し、コアを操作するためのコンポーネントを含んでよい。システムエージェントユニット５１０は、例えば、電力制御ユニット（ＰＣＵ）を含んでよい。ＰＣＵは、コア５０２の電力状態を調整するために必要なロジックおよびコンポーネントであってよく、または当該ロジックおよび当該コンポーネントを含んでよい。システムエージェント５１０は、１または複数の外部接続されたディスプレイまたはグラフィックモジュール５６０を駆動するためのディスプレイエンジン５１２を含んでよい。システムエージェント５１０は、グラフィックのための通信バスのためのインタフェース１２１４を含んでよい。一実施形態において、インタフェース１２１４は、ＰＣＩエクスプレス（ＰＣＩｅ）によって実装されてよい。さらなる実施形態において、インタフェース１２１４はＰＣＩエクスプレスグラフィック（ＰＥＧ）によって実装されてよい。システムエージェント５１０は、ダイレクトメディアインタフェース（ＤＭＩ）５１６を含んでよい。ＤＭＩ  ５１６は、マザーボード上またはコンピュータシステムの他の部分にある異なるブリッジ間にリンクを提供してよい。システムエージェント５１０は、コンピューティングシステムの他の要素にＰＣＩｅリンクを提供するためのＰＣＩｅブリッジ１２１８を含んでよい。ＰＣＩｅブリッジ１２１８は、メモリコントローラ１２２０およびコヒーレンシロジック１２２２を使用して実装されてよい。
【００９５】
コア５０２は任意の好適な態様で実装されてよい。コア５０２は、アーキテクチャおよび／または命令セットの観点から、同種または異種であってよい。一実施形態において、コア５０２のうちのいくつかはインオーダであってよい一方、他のものはアウトオブオーダであってよい。別の実施形態において、コア５０２のうちの２または２より多いものは同一の命令セットを実行してよい一方、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行してよい。
【００９６】
プロセッサ５００は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能であり得るＣｏｒｅ（商標）ｉ３、ｉ５、ｉ７、２ＤｕｏおよびＱｕａｄ、Ｘｅｏｎ（商標）、Ｉｔａｎｉｕｍ（商標）、ＸＳｃａｌｅ（商標）またはＳｔｒｏｎｇＡＲＭ（商標）プロセッサ等の汎用プロセッサを含んでよい。プロセッサ５００は、ＡＲＭ  Ｈｏｌｄｉｎｇｓ社、ＭＩＰＳ等の別の会社から供給されてもよい。プロセッサ５００は、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンプロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサ５００は、１または複数のチップ上に実装されてよい。プロセッサ５００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳ等の多数のプロセス技術のうちの任意のものを使用する１または複数の基板での一部であってよく、および／または当該基板上に実装されてよい。
【００９７】
一実施形態において、キャッシュ５０６のうちの特定の１つがコア５０２のうちの複数のものによって共有されてよい。別の実施形態において、キャッシュ５０６のうちの特定の１つがコア５０２のうちの１つに専用とされてよい。キャッシュ５０６のコア５０２への割り当ては、キャッシュコントローラまたは他の好適なメカニズムによって処理されてよい。キャッシュ５０６のうちの特定の１つは、特定のキャッシュ５０６の時分割を実装することによって、２または２より多いコア５０２によって共有されてよい。
【００９８】
グラフィックモジュール５６０は統合グラフィック処理サブシステムを実装してよい。一実施形態において、グラフィックモジュール５６０は、グラフィックプロセッサを含んでよい。さらに、グラフィックモジュール５６０はメディアエンジン５６５を含んでよい。メディアエンジン５６５は、メディアエンコーディングおよびビデオデコーディングを提供してよい。
【００９９】
図５Ｂは、本開示の実施形態によるコア５０２の例示的な実装のブロック図である。コア５０２は、アウトオブオーダエンジン５８０に通信可能に連結されたフロントエンド５７０を含んでよい。コア５０２は、キャッシュ階層５０３を介してプロセッサ５００の他の部分に通信可能に連結されてよい。
【０１００】
フロントエンド５７０は、上記の通りフロントエンド２０１によって完全にまたは部分的にといったように、任意の好適な態様で実装されてよい。一実施形態において、フロントエンド５７０は、キャッシュ階層５０３を介してプロセッサ５００の他の部分と通信してよい。さらなる実施形態において、フロントエンド５７０は、プロセッサ５００の部分から命令をフェッチしてよく、当該命令がアウトオブオーダ実行エンジン５８０に渡される際、プロセッサパイプラインで後から使用されるように準備してよい。
【０１０１】
アウトオブオーダ実行エンジン５８０は、上記の通りアウトオブオーダ実行エンジン２０３によって完全にまたは部分的にといったように、任意の好適な態様で実装されてよい。アウトオブオーダ実行エンジン５８０は、フロントエンド５７０から受信された命令を実行のために準備してよい。アウトオブオーダ実行エンジン５８０は、割り当てモジュール１２８２を含んでよい。一実施形態において、割り当てモジュール１２８２は、特定の命令を実行するために、プロセッサ５００のリソース、またはレジスタ若しくはバッファ等の他のリソースを割り当ててよい。割り当てモジュール１２８２は、メモリスケジューラ、高速スケジューラまたは浮動小数点スケジューラ等のスケジューラ内で割り当てを行ってよい。このようなスケジューラは、図５Ｂ中のリソーススケジューラ５８４によって表わされてよい。割り当てモジュール１２８２は、図２に関し記載の割り当てロジックによって完全にまたは部分的に実装されてよい。リソーススケジューラ５８４は、特定のリソースソースの準備状態および命令を実行するために必要とされる実行リソースの利用可能性に基づいて、命令が、いつ実行準備が整うかを判断してよい。リソーススケジューラ５８４は、例えば、上記の通りスケジューラ２０２、２０４、２０６によって実装されてよい。リソーススケジューラ５８４は、１または複数のリソースに対する命令の実行をスケジュールしてよい。一実施形態において、このようなリソースはコア５０２の内部に存在してよく、例えばリソース５８６として図示されてよい。別の実施形態において、このようなリソースはコア５０２の外部に存在してよく、例えばキャッシュ階層５０３によってアクセス可能であってよい。リソースは、例えば、メモリ、キャッシュ、レジスタファイルまたはレジスタを含んでよい。コア５０２の内部に存在するリソースは、図５Ｂ中のリソース５８６によって表されてよい。必要に応じて、リソース５８６に書き込まれた値またはリソース５８６から読み取られた値は、例えばキャッシュ階層５０３を介してプロセッサ５００の他の部分と調整されてよい。命令がリソースに割り当てられると、それらはリオーダバッファ５８８に置かれてよい。リオーダバッファ５８８は、命令が実行されるとき命令を追跡してよく、プロセッサ５００の任意の好適な基準に基づいてそれらの実行を選択的に並べ替えてよい。一実施形態において、リオーダバッファ５８８は独立して実行可能な命令または一連の命令を識別してよい。このような命令または一連の命令は、他のこのような命令と並列に実行されてよい。コア５０２内の並列実行は、任意の好適な数の別個の実行ブロックまたは仮想プロセッサによって実行されてよい。一実施形態において、メモリ、レジスタ、およびキャッシュ等の共有リソースは、特定のコア５０２内の複数の仮想プロセッサにアクセス可能であってよい。他の実施形態において、共有リソースは、プロセッサ５００内の複数の処理エンティティにアクセス可能であってよい。
【０１０２】
キャッシュ階層５０３は、任意の好適な態様で実装されてよい。例えば、キャッシュ階層５０３は、キャッシュ５７２、５７４等の１または複数の下位レベルのキャッシュまたは中位レベルのキャッシュを含んでよい。一実施形態において、キャッシュ階層５０３は、キャッシュ５７２、５７４に通信可能に連結されたＬＬＣ５９５を含んでよい。別の実施形態において、ＬＬＣ５９５は、プロセッサ５００のすべての処理エンティティにアクセス可能なモジュール５９０内に実装されてよい。さらなる実施形態において、モジュール５９０は、インテル社のプロセッサのアンコアモジュールで実装されてよい。モジュール５９０は、コア５０２の実行のために必要なプロセッサ５００の部分またはサブシステムを含んでよいが、コア５０２内に実装されなくてもよい。ＬＬＣ５９５に加え、モジュール５９０は、例えば、ハードウェアインタフェース、メモリコヒーレンシコーディネータ、インタープロセッサ相互接続、命令パイプライン、またはメモリコントローラを含んでよい。プロセッサ５００に利用可能なＲＡＭ５９９へのアクセスは、モジュール５９０、より具体的にはＬＬＣ５９５を介してなされてよい。さらに、コア５０２の他のインスタンスは、モジュール５９０に同様にアクセスしてよい。コア５０２の当該他のインスタンスの調整は、モジュール５９０を介して部分的に容易化されてよい。
【０１０３】
図６〜８は、プロセッサ５００を含めるために好適な例示的なシステムを示してよい一方で、図９は、コア５０２の１または複数を含み得る例示的なシステムオンチップ（ＳｏＣ）を示してよい。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および実装も好適であってよい。一般的に、本明細書に開示のプロセッサおよび／または他の実行ロジックを組み込む非常に多種多様なシステムまたは電子デバイスが概して好適であってよい。
【０１０４】
図６は、本開示の実施形態による、システム６００のブロック図を示す。システム６００は、１または複数のプロセッサ６１０、６１５を含んでよく、当該１または複数のプロセッサ６１０、６１５は、グラフィックメモリコントローラハブ（ＧＭＣＨ）６２０に連結されてよい。図６中、追加のプロセッサ６１５のオプションとしての性質は、破線で示されている。
【０１０５】
各プロセッサ６１０、６１５はプロセッサ５００の何らかのバージョンであってよい。しかしながら、統合グラフィックロジックおよび統合メモリ制御ユニットは、プロセッサ６１０、６１５内に存在しなくてもよいことに留意されたい。図６は、ＧＭＣＨ６２０はメモリ６４０に連結されてよく、メモリ６４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）であってよいことを示す。少なくとも１つの実施形態で、ＤＲＡＭは不揮発性キャッシュに関連付けられてよい。
【０１０６】
ＧＭＣＨ６２０は、チップセットまたはチップセットの一部であってよい。ＧＭＣＨ６２０はプロセッサ６１０、６１５と通信し、プロセッサ６１０、６１５とメモリ６４０との間のやり取りを制御してよい。また、ＧＭＣＨ６２０は、プロセッサ６１０、６１５と、システム６００の他の要素と、の間の加速バスインタフェースとして動作してもよい。一実施形態において、ＧＭＣＨ６２０は、プロセッサ６１０、６１５とフロントサイドバス（ＦＳＢ）６９５等のマルチドロップバスを介して通信する。
【０１０７】
さらに、ＧＭＣＨ６２０はディスプレイ６４５（フラットパネルディスプレイ等）に連結されてよい。一実施形態において、ＧＭＣＨ６２０は統合グラフィックアクセラレータを含んでよい。さらにＧＭＣＨ６２０は、入／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０に連結されてよく、当該入／出力（Ｉ／Ｏ）コントローラハブ（ＩＣＨ）６５０は、様々な周辺デバイスをシステム６００に連結するために使用されてよい。外部グラフィックデバイス６６０は、別の周辺デバイス６７０と共にＩＣＨ６５０に連結された個別のグラフィックデバイスを含んでよい。
【０１０８】
また他の実施形態においては、追加のまたは異なるプロセッサがシステム６００内に存在してもよい。例えば、追加のプロセッサ６１０、６１５は、プロセッサ６１０と同一であってよい追加のプロセッサ、プロセッサ６１０と異種または非対称であってよい追加のプロセッサ、アクセラレータ（例えば、グラフィックアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニット等）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。物理リソース６１０と６１５の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む利点の指標範囲から見て様々な差異があってよい。これらの差異は、プロセッサ６１０、６１５間の非対称性および異質性として差異自体が効果的に表われてよい。少なくとも１つの実施形態について、様々なプロセッサ６１０、６１５が同一のダイパッケージ内に存在してよい。
【０１０９】
図７は、本開示の実施形態による第２のシステム７００のブロック図を示す。図７に図示の通り、マルチプロセッサシステム７００は、ポイントツーポイント相互接続システムを含んでよく、ポイントツーポイント相互接続７５０を介して連結された第１のプロセッサ７７０および第２のプロセッサ７８０を含んでよい。プロセッサ７７０および７８０の各々は、プロセッサ６１０、６１５のうちの１または複数と同様、プロセッサ５００の何らかのバージョンであってよい。
【０１１０】
図７は２つのプロセッサ７７０、７８０を図示する可能性があるものの、本開示の範囲はそのようには限定されないことを理解されたい。他の実施形態においては、１または複数の追加のプロセッサが特定のプロセッサ内に存在してよい。
【０１１１】
プロセッサ７７０および７８０は、統合メモリコントローラユニット７７２および７８２をそれぞれ含むものとして図示されている。プロセッサ７７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース７７６および７７８を含んでよく、同様に第２のプロセッサ７８０はＰ−Ｐインタフェース７８６および７８８を含んでよい。プロセッサ７７０、７８０は、Ｐ−Ｐインタフェース回路７７８、７８８を使用してポイントツーポイント（Ｐ−Ｐ）インタフェース７５０を介して情報を交換してよい。図７に図示の通り、ＩＭＣ  ７７２および７８２は当該プロセッサをそれぞれのメモリ、すなわちメモリ７３２とメモリ７３４とに連結してよく、当該メモリは一実施形態において、それぞれのプロセッサに局所的に取り付けられたメインメモリの一部であってよい。
【０１１２】
プロセッサ７７０、７８０はそれぞれ、ポイントツーポイントインタフェース回路７７６、７９４、７８６、７９８を使用して、個々のＰ−Ｐインタフェース７５２、７５４を介してチップセット７９０と情報を交換してよい。一実施形態において、チップセット７９０はまた、高性能グラフィックスインタフェース７３９を介して高性能グラフィックス回路７３８と情報を交換してもよい。
【０１１３】
共有キャッシュ（不図示）がいずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとＰ−Ｐ相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
【０１１４】
チップセット７９０はインタフェース７９６を介して第１のバス７１６に連結されてよい。一実施形態において、第１のバス７１６はペリフェラルコンポーネントインターコネクト（ＰＣＩ）バスであってよく、またはＰＣＩエクスプレスバス若しくは別の第３世代Ｉ／Ｏ相互接続バス等のバスであってよいが、本開示の範囲はそのようには限定されない。
【０１１５】
図７に図示の通り、様々なＩ／Ｏデバイス７１４が、バスブリッジ７１８と共に第１のバス７１６に連結されてよく、当該バスブリッジ７１８は第１のバス７１６を第２のバス７２０に連結する。一実施形態において、第２のバス７２０はローピンカウント（ＬＰＣ）バスであってよい。一実施形態において、様々なデバイスが第２のバス７２０に連結されてよく、これらとしては、例えば、キーボードおよび／またはマウス７２２、通信デバイス７２７、並びに命令／コードおよびデータ７３０を含み得るディスクドライブ若しくは他の大容量ストレージデバイス等のストレージユニット７２８が含まれる。さらに、オーディオＩ／Ｏ７２４が第２のバス７２０に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【０１１６】
図８は、本開示の実施形態による第３のシステム８００のブロック図を示す。図７および図８中で同様の要素は同様の参照符号が付されており、図８の他の態様を不明瞭にするのを回避すべく、図７の特定の態様は図８で省略されている。
【０１１７】
図８は、プロセッサ８７０、８８０が統合メモリおよびＩ／Ｏ制御ロジック（ＣＬ）８７２、８８２をそれぞれ含んでよいことを示す。少なくとも１つの実施形態について、ＣＬ  ８７２、８８２は、図５および図７に関し上記したもののような統合メモリコントローラユニットを含んでよい。また、ＣＬ８７２、８８２はＩ／Ｏ制御ロジックも含んでよい。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結されてよいだけでなく、Ｉ／Ｏデバイス８１４が制御ロジック８７２、８８２に連結されてよいことも示している。レガシＩ／Ｏデバイス８１５がチップセット８９０に連結されてよい。
【０１１８】
図９は、本開示の実施形態によるＳｏＣ９００のブロック図を示す。図５中と同様の要素は同様の参照番号が付されている。また、破線は、より高度なＳｏＣ上でのオプションの機能を表わしてよい。相互接続ユニット９０２は、アプリケーションプロセッサ９１０、システムエージェントユニット９１０、バスコントローラユニット９１６、統合メモリコントローラユニット９１４、メディアプロセッサのセットまたは１または複数のメディアプロセッサ９２０、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット９３０、ダイレクトメモリアクセス（ＤＭＡ）ユニット９３２、および１または複数の外部ディスプレイに連結するためのディスプレイユニット９４０に連結されてよい。ここで、当該アプリケーションプロセッサ９１０は１または複数のコア９０２Ａ〜Ｎのセットおよび共有キャッシュユニット９０６を含んでよい。当該メディアプロセッサのセットまたは１または複数のメディアプロセッサ９２０は統合グラフィックロジック９０８、静止および／またはビデオカメラ機能を提供するためのイメージプロセッサ９２４、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ９２６、およびビデオエンコード／デコードアクセラレーションを提供するためのビデオプロセッサ９２８を含んでよい。
【０１１９】
図１０は、中央処理装置（ＣＰＵ）およびグラフィック処理ユニット（ＧＰＵ）を含むプロセッサを示し、これらは本開示の実施形態による少なくとも１つの命令を実行してよい。一実施形態において、少なくとも１つの実施形態による演算を実行するための命令は、ＣＰＵによって実行され得る。別の実施形態においては、命令はＧＰＵによって実行され得る。さらなる別の実施形態においては、命令はＧＰＵおよびＣＰＵによって実行される演算ンの組み合わせを通して実行されてよい。例えば、一実施形態においては、一実施形態による命令は、ＧＰＵでの実行のために受信およびデコードされてよい。しかしながら、デコードされた命令内の１または複数の演算はＣＰＵによって実行されてよく、命令の最終的なリタイアのために結果がＧＰＵに返される。逆に、いくつかの実施形態においては、ＣＰＵがプライマリプロセッサとして、ＧＰＵがコプロセッサとして動作してよい。
【０１２０】
いくつかの実施形態においては、高度に並列化されたスループットの高いプロセッサから利益享受する命令はＧＰＵによって実行されてよい一方で、深くパイプライン化されたアーキテクチャから利益享受するプロセッサの性能から利益享受する命令はＣＰＵによって実行されてよい。例えば、グラフィック、科学アプリケーション、金融アプリケーションおよび他の並列ワークロードは、ＧＰＵの性能から利益享受してよく、そのように実行可能であるのに対して、オペレーティングシステムのカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、ＣＰＵにより好適であってよい。
【０１２１】
図１０中、プロセッサ１０００は、ＣＰＵ１００５、ＧＰＵ１０１０、イメージプロセッサ１０１５、ビデオプロセッサ１０２０、ＵＳＢコントローラ１０２５、ＵＡＲＴコントローラ１０３０、ＳＰＩ／ＳＤＩＯコントローラ１０３５、ディスプレイデバイス１０４０、メモリインタフェースコントローラ１０４５、ＭＩＰＩコントローラ１０５０、フラッシュメモリコントローラ１０５５、デュアルデータレート（ＤＤＲ）コントローラ１０６０、セキュリティエンジン１０６５、およびＩ２Ｓ／Ｉ２Ｃコントローラ１０７０を含む。図１０中のプロセッサ内に、より多くのＣＰＵまたはＧＰＵおよび他の周辺インタフェースコントローラを含む、他のロジックおよび回路が含まれてもよい。
【０１２２】
少なくとも１つの実施形態に係る１または複数の態様は、機械可読媒体上に格納された、プロセッサ内の様々なロジックを表わす典型的データによって実装されてよく、当該データは機械による読み取り時に、機械に対し本明細書に記載の技術を実行するためのロジックを生成させる。このような「ＩＰコア」として知られる典型的なものが有形の機械可読媒体（「テープ」）上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。例えば、ＡＲＭ  Ｈｏｌｄｉｎｇｓによって開発されたＣｏｒｔｅｘ（商標）プロセッサファミリおよび中国科学院のコンピューティング技術協会（ＩＣＴ）により開発された龍芯（Ｌｏｏｎｇｓｏｎ）ＩＰコア等のＩＰコアが、テキサスインスツルメンツ、クアルコム、アップルまたはサムスン等の様々な顧客またはライセンシにライセンスまたは販売されてよく、またこれらの顧客またはライセンシによって生産されるプロセッサに実装されてよい。
【０１２３】
図１１は、本開示の実施形態によるＩＰコアの開発を示すブロック図を示す。ストレージ１１３０は、シミュレーションソフトウェア１１２０および／またはハードウェア若しくはソフトウェアモデル１１１０を含んでよい。一実施形態において、ＩＰコア設計を表わすデータがメモリ１１４０（例えばハードディスク）、有線接続（例えばインターネット）１１５０または無線接続１１６０を介してストレージ１１３０に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されるＩＰコア情報が製造施設に転送されてよく、製造施設において、少なくとも一実施形態による少なくとも１つの命令を実行するためのＩＰコア情報がサードパーティによって製造されてよい。
【０１２４】
いくつかの実施形態において、１または複数の命令は第１のタイプまたはアーキテクチャ（例えばｘ８６）に対応してよく、１または複数の命令は異なるタイプまたはアーキテクチャ（例えばＡＲＭ）のプロセッサで変換またはエミュレートされてよい。従って、一実施形態による命令は、ＡＲＭ、ｘ８６、ＭＩＰＳ、ＧＰＵを含む任意のプロセッサ若しくはプロセッサタイプまたは他のプロセッサタイプ若しくはアーキテクチャで実行されてよい。
【０１２５】
図１２は、本開示の実施形態による第１のタイプの命令が異なるタイプのプロセッサによってエミュレートされ得る方法を示す。図１２中、プログラム１２０５は、一実施形態による命令と同一または実質的に同一の機能を実行してよいいくつかの命令を含む。しかしながら、プログラム１２０５の命令はプロセッサ１２１５と異なるまたはプロセッサ１２１５と互換性のないタイプおよび／またはフォーマットであってよく、つまりプログラム１２０５内の命令タイプはプロセッサ１２１５によってネイティブに実行可能でなくてよいことを意味する。しかしながら、エミュレーションロジック１２１０の補助を用いて、プログラム１２０５の命令は、プロセッサ１２１５によってネイティブに実行可能な命令に変換されてよい。一実施形態において、エミュレーションロジックはハードウェアで具現化されてよい。別の実施形態においては、エミュレーションロジックは、プログラム１２０５内の命令タイプを、プロセッサ１２１５でネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化されてよい。他の実施形態においては、エミュレーションロジックは、固定機能のハードウェアまたはプログラム可能なハードウェアと、有形の機械可読媒体上に格納されたプログラムとの組み合わせであってよい。一実施形態において、プロセッサはエミュレーションロジックを含む一方で、他の実施形態においては、エミュレーションロジックはプロセッサの外部に存在し、サードパーティによって供給されてよい。一実施形態において、プロセッサは、プロセッサ内に含まれる、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを有する有形の機械可読媒体に具現化されたエミュレーションロジックをロードしてよい。
【０１２６】
図１３は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。図１３は、高水準言語１３０２のプログラムが、ｘ８６バイナリコード１３０６を生成するｘ８６コンパイラ１３０４を使用してコンパイルされ得ることを示しており、当該ｘ８６バイナリコード１３０６は、少なくとも１つのｘ８６命令セットコアを持つプロセッサ１３１６によってネイティブに実行されてよい。少なくとも１つのｘ８６命令セットコアを持つプロセッサ１３１６は、少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、（１）インテルｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを持つインテルのプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。ｘ８６コンパイラ１３０４は、ｘ８６バイナリコード１３０６（例えばオブジェクトコード）を生成するよう動作可能なコンパイラを表わし、当該ｘ８６バイナリコード１３０６は、追加のリンク処理と共に、または追加のリンク処理なく、少なくとも１つのｘ８６命令セットコアを持つプロセッサ１３１６上で実行可能である。同様に、図１３は、高水準言語１３０２のプログラムが、代替の命令セットバイナリコード１３１０を生成する代替の命令セットコンパイラ１３０８を使用してコンパイルされ得ることを示しており、当該代替の命令セットバイナリコード１３１０は、少なくとも１つのｘ８６命令セットコアを持たないプロセッサ１３１４（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／または、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを持つプロセッサ）によってネイティブに実行されてよい。
【０１２７】
命令コンバータ１３１２は、ｘ８６バイナリコード１３０６を代替的な命令セットバイナリコード１３１１に変換するために使用され、当該代替的な命令セットバイナリコード１３１１は、ｘ８６命令セットコアを持たないプロセッサ１３１４によってネイティブに実行されてよい。この変換されたコードは、代替的な命令セットコンパイラ１３０８からもたらされる代替的な命令セットバイナリコード１３１０と同一であっても、なくてもよい。しかしながら、変換されたコードは同一の全般的な演算を実現し、代替的な命令セットの命令で構成されるであろう。故に、命令コンバータ１３１２は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わし、それらは、エミュレーション、シミュレーションまたは任意の他の処理を介して、ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスが、ｘ８６バイナリコード１３０６を実行できるようにする。
【０１２８】
図１４は、本開示の実施形態によるプロセッサの命令セットアーキテクチャ１４００のブロック図である。命令セットアーキテクチャ１４００は、任意の好適な数または種類のコンポーネントを含んでよい。
【０１２９】
例えば、命令セットアーキテクチャ１４００は、１または複数のコア１４０６、１４０７およびグラフィック処理装置１４１５等の処理エンティティを含んでよい。コア１４０６、１４０７は、バスまたはキャッシュ等の任意の好適なメカニズムを介して命令セットアーキテクチャ１４００の残りの部分に通信可能に連結されてよい。一実施形態において、コア１４０６、１４０７は、バスインタフェースユニット１４０９およびＬ２キャッシュ１４１０を含み得るＬ２キャッシュ制御１４０８を介して通信可能に連結されてよい。コア１４０６、１４０７およびグラフィック処理装置１４１５は、相互接続１４１０を介して、互いにおよび命令セットアーキテクチャ１４００の残りの部分に通信可能に連結されてよい。一実施形態において、グラフィック処理装置１４１５はビデオコード１４２０を使用し、特定のビデオ信号が出力のために、エンコードおよびデコードされる方法を定義してよい。
【０１３０】
また、命令セットアーキテクチャ１４００は、任意の数または種類のインタフェース、コントローラ、または電子デバイス若しくはシステムの他の部分とやり取りする若しくはそれと通信するための他のメカニズムを含んでもよい。このようなメカニズムは、例えば、周辺機器、通信デバイス、他のプロセッサ、またはメモリとのやり取りを容易にしてよい。図１４の例において、命令セットアーキテクチャ１４００は、液晶ディスプレイ（ＬＣＤ）ビデオインタフェース１４２５、加入者インタフェースモジュール（ＳＩＭ）インタフェース１４３０、ブートＲＯＭインタフェース１４３５、シンクロナスダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）コントローラ１４４０、フラッシュコントローラ１４４５、およびシリアル周辺インタフェース（ＳＰＩ）マスタユニット１４５０を含んでよい。ＬＣＤビデオインタフェース１４２５は、例えば、ＧＰＵ１４１５からのビデオ信号の出力を、例えば、ｍｏｂｉｌｅ  ｉｎｄｕｓｔｒｙ  ｐｒｏｃｅｓｓｏｒ  ｉｎｔｅｒｆａｃｅ（ＭＩＰＩ）１４９０または高精細度マルチメディアインタフェース（ＨＤＭＩ（登録商標））１４９５を介して、ディスプレイに提供してよい。このようなディスプレイとしては、例えばＬＣＤが含まれてよい。ＳＩＭインタフェース１４３０は、ＳＩＭカードまたはデバイスへの、または、ＳＩＭカードまたはデバイスからのアクセスを提供してよい。ＳＤＲＡＭコントローラ１４４０は、ＳＤＲＡＭチップまたはモジュール等のメモリへの、または、当該メモリからのアクセスを提供してよい。フラッシュコントローラ１４４５は、フラッシュメモリまたはＲＡＭの他のインスタンス等のメモリへの、または当該メモリからのアクセスを提供してよい。ＳＰＩマスタユニット１４５０は、Ｂｌｕｅｔｏｏｔｈ（登録商標）モジュール１４７０、高速３Ｇモデム１４７５、全地球測位システムモジュール１４８０、または８０２．１１等の通信規格を実装する無線モジュール１４８５等の通信モジュールへの、または、当該通信モジュールからのアクセスを提供してよい。
【０１３１】
図１５は、本開示の実施形態による、プロセッサの命令セットアーキテクチャ１５００のより詳細なブロック図である。命令アーキテクチャ１５００は命令セットアーキテクチャ１４００の１または複数の態様を実装してよい。さらに、命令セットアーキテクチャ１５００はプロセッサ内の命令を実行するためのモジュールおよびメカニズムを示してよい。
【０１３２】
命令アーキテクチャ１５００は、１または複数の実行エンティティ１５６５に通信可能に連結されたメモリシステム１５４０を含んでよい。さらに、命令アーキテクチャ１５００は、実行エンティティ１５６５およびメモリシステム１５４０に通信可能に連結されたユニット１５１０のようなキャッシュおよびバスインタフェースユニットを含んでよい。一実施形態において、命令の実行エンティティ１５６４へのロードは、実行の１または複数のステージによって行われてよい。このようなステージとしては、例えば、命令プリフェッチステージ１５３０、デュアル命令デコードステージ１５５０、レジスタリネームステージ１５５、発行ステージ１５６０、およびライトバックステージ１５７０を含んでよい。
【０１３３】
別の実施形態において、メモリシステム１５４０はリタイアメントポインタ１５８２を含んでよい。リタイアメントポインタ１５８２は、最後にリタイアされた命令のプログラム順序（ＰＯ）を識別する値を格納してよい。リタイアメントポインタ１５８２は、例えば、リタイアメントユニット４５４によって設定されてよい。命令がまだリタイアされていない場合、リタイアメントポインタ１５８２はヌル値を含んでよい。
【０１３４】
実行エンティティ１５６５は、任意の好適な数および種類のメカニズムを含んでよく、当該メカニズムによって、プロセッサは命令を実行してよい。図１５の例において、実行エンティティ１５６５は、ＡＬＵ／乗算ユニット（ＭＵＬ）１５６６、ＡＬＵ１５６７、および浮動小数点ユニット（ＦＰＵ）１５６８を含んでよい。一実施形態において、このようなエンティティは、特定のアドレス１５６９内に含まれる情報を活用してよい。実行エンティティ１５６５はステージ１５３０、１５５０、１５５５、１５６０、１５７０と組み合わせて、実行ユニットを集約的に形成してよい。
【０１３５】
ユニット１５１０は、任意の好適な態様で実装されてよい。一実施形態において、ユニット１５１０はキャッシュ制御を実行してよい。故に、このような実施形態において、ユニット１５１０はキャッシュ１５２５を含んでよい。さらなる実施形態においては、キャッシュ１５２５は、ゼロ、１２８ｋ、２５６ｋ、５１２ｋ、１Ｍまたは２Ｍバイトのメモリ等の任意の好適なサイズを持つＬ２統一キャッシュとして実装されてよい。別のさらなる実施形態において、キャッシュ１５２５はエラー訂正コードメモリに実装されてよい。別の実施形態において、ユニット１５１０はプロセッサまたは電子デバイスの他の部分とのバスインタフェースを実行してよい。故に、このような実施形態においては、ユニット１５１０は相互接続を経由して、イントラプロセッサバス、インタープロセッサバス、または他の通信バス、ポート、またはラインと通信するためのバスインタフェースユニット１５２０を含んでよい。バスインタフェースユニット１５２０は、例えば、実行エンティティ１５６５と命令アーキテクチャ１５００の外部にあるシステムの部分との間のデータ転送のためのメモリおよび入／出力アドレスの生成を行うべく、インタフェースを提供してよい。
【０１３６】
その機能をさらに容易化するために、バスインタフェースユニット１５２０は、割り込みおよびプロセッサまたは電子デバイスの他の部分との他の通信を生成するための割り込み制御および分散ユニット１５１１を含んでよい。一実施形態において、バスインタフェースユニット１５２０は、複数の処理コアのためのキャッシュアクセスおよびコヒーレンシを処理するスヌープ制御ユニット１５１２を含んでよい。さらなる実施形態においては、このような機能を提供すべく、スヌープ制御ユニット１５１２は、異なるキャッシュ間での情報交換を処理するキャッシュ対キャッシュ転送ユニットを含んでよい。別のさらなる実施形態においては、スヌープ制御ユニット１５１２は、ユニット１５１０等のキャッシュコントローラがこのようなモニタリングを直接実行する必要がないように、他のキャッシュ（不図示）のコヒーレンシをモニタリングする１または複数のフィルタ１５１４を含んでよい。ユニット１５１０は、命令アーキテクチャ１５００のアクションを同期するための任意の好適な数のタイマ１５１５を含んでよい。また、ユニット１５１０は、ＡＣポート１５１６を含んでよい。
【０１３７】
メモリシステム１５４０は、命令アーキテクチャ１５００の処理ニーズのための情報を格納するための任意の好適な数および種類のメカニズムを含んでよい。一実施形態において、メモリシステム１５０４は、メモリまたはレジスタに書き込まれる、またはメモリまたはレジスタからリードバックされるバッファ等の情報を格納するためのロードストアユニット１５３０を含んでよい。別の実施形態において、メモリシステム１５０４は、物理アドレスおよび仮想アドレス間のアドレス値のルックアップを提供するトランスレーションルックアサイドバッファ（ＴＬＢ）１５４５を含んでよい。さらなる別の実施形態において、バスインタフェースユニット１５２０は、仮想メモリへのアクセスを容易にするためのメモリ管理ユニット（ＭＭＵ）１５４４を含んでよい。さらなる別の実施形態において、メモリシステム１５０４は、レイテンシを低減すべく、命令が実際に実行される必要がある前に、メモリに対しこのような命令を要求するためのプリフェッチャ１５４３を含んでよい。
【０１３８】
命令を実行するための命令アーキテクチャ１５００の演算は、異なるステージを介して実行されてよい。例えば、ユニット１５１０を使用して、命令プリフェッチステージ１５３０は、プリフェッチャ１５４３を介して命令にアクセスしてよい。取得された命令は、命令キャッシュ１５３２に格納されてよい。プリフェッチステージ１５３０は、高速ループモードのためのオプション１５３１を有効にしてよく、この場合、特定のキャッシュに収まるだけ十分小さいループを形成する一連の命令が実行される。一実施形態において、このような実行は、例えば、命令キャッシュ１５３２からの追加の命令にアクセスする必要なく実行されてよい。どの命令をプリフェッチするかという判断は、例えば、分岐予測ユニット１５３５によってなされてよく、当該分岐予測ユニット１５３５は、グローバル履歴１５３６の実行指標、ターゲットアドレス１５３７の指標、または戻りスタック１５３８の内容にアクセスして、次にコードのどの分岐１５５７が実行されるかを判断してよい。このような分岐は、場合によっては結果としてプリフェッチされてよい。分岐１５５７は、後述の通り、演算の他のステージを介して生成されてよい。命令プリフェッチステージ１５３０は命令に加え、将来の命令に関する予測をデュアル命令デコードステージに提供してよい。
【０１３９】
デュアル命令デコードステージ１５５０は、受信された命令を実行可能なマイクロコードベースの命令に変換してよい。デュアル命令デコードステージ１５５０は、１クロックサイクルごとに２つの命令を同時にデコードしてよい。さらに、デュアル命令デコードステージ１５５０は、その結果をレジスタリネームステージ１５５５に渡してよい。また、デュアル命令デコードステージ１５５０は、そのデコーディングおよびマイクロコードの最終的な実行からもたらされるあらゆる分岐を判断してよい。当該結果は、分岐１５５７に入力されてよい。
【０１４０】
レジスタリネームステージ１５５５は、仮想レジスタまたは他のリソースへの参照を、物理レジスタまたはリソースへの参照に変換してよい。レジスタリネームステージ１５５５は、このようなマッピングの指標をレジスタプール１５５６に含んでよい。レジスタリネームステージ１５５５は、受信される命令を変更し、その結果を発行ステージ１５６０に送信してよい。
【０１４１】
発行ステージ１５６０は、実行エンティティ１５６５にコマンドを発行またはディスパッチしてよい。このような発行は、アウトオブオーダ方式で行われてよい。一実施形態において、複数の命令が実行前に発行ステージ１５６０に保持されてよい。発行ステージ１５６０は、このような複数のコマンドを保持するための命令キュー１５６１を含んでよい。命令は、特定の命令の実行のためのリソースの利用可能性または適合性等の任意の許容可能な基準に基づいて、発行ステージ１５６０によって、特定の処理エンティティ１５６５に発行されてよい。一実施形態において、発行ステージ１５６０は、受信された第１の命令が実行される第１の命令でなくてもよいように、命令キュー１５６１内で命令を並べ替えてよい。命令キュー１５６１の順序に基づいて、追加の分岐情報が分岐１５５７に提供されてよい。発行ステージ１５６０は、命令を実行エンティティ１５６５に実行のために渡してよい。
【０１４２】
実行時、ライトバックステージ１５７０は、特定のコマンドの完了を通信すべく、データをレジスタ、キュー、または命令セットアーキテクチャ１５００の他の構造に書き込んでよい。発行ステージ１５６０内に配置される命令の順序に応じて、ライトバックステージ１５７０の操作が、追加の命令が実行されることを可能にしてよい。命令セットアーキテクチャ１５００の性能は、トレースユニット１５７５によってモニタリングまたはデバッグされてよい。
【０１４３】
図１６は、本開示の実施形態によるプロセッサの命令セットアーキテクチャのための実行パイプライン１６００のブロック図である。実行パイプライン１６００は、例えば、図１５の命令アーキテクチャ１５００の操作を示してよい。
【０１４４】
実行パイプライン１６００は、段階または操作の任意の好適な組み合わせを含んでよい。１６０５において、次に実行されるべき分岐の予測がなされてよい。一実施形態において、このような予測は、命令の前の実行およびこれらの結果に基づいてよい。１６１０において、実行の予測された分岐に対応する命令が命令キャッシュにロードされてよい。１６１５において、命令キャッシュ内の１または複数のこのような命令が実行のためにフェッチされてよい。１６２０において、フェッチ済みの命令が、マイクロコードまたはより具体的な機械言語にデコードされてよい。一実施形態において、複数の命令が同時にデコードされてよい。１６２５において、デコードされた命令内のレジスタまたは他のリソースへの参照が再割り当てされてよい。例えば、仮想レジスタへの参照が、対応する物理レジスタへの参照と置換されてよい。１６３０において、命令は実行のためにキューにディスパッチされてよい。１６４０において、命令は実行されてよい。このような実行は任意の好適な態様で実行されてよい。１６５０において、命令は好適な実行エンティティに発行されてよい。命令が実行される態様は、命令を実行する特定のエンティティに依存してよい。例えば、１６５５で、ＡＬＵは算術機能を実行してよい。ＡＬＵは、その演算のために単一のクロックサイクルおよび２つのシフタを利用してよい。一実施形態において、２つのＡＬＵが用いられてよく、故に、１６５５において２つの命令が実行されてよい。１６６０において、もたらされる分岐の判断がなされてよい。プログラムカウンタが使用され、分岐がなされるデスティネーションを指定してよい。１６６０は、単一のクロックサイクル内で実行されてよい。１６６５において、浮動小数点演算が１または複数のＦＰＵによって行われてよい。浮動小数点演算は、２から１０サイクル等、実行すべき複数のクロックサイクルを必要としてよい。１６７０において、乗算演算および除算演算が行われてよい。このような演算は４つのクロックサイクルで行われてよい。１６７５において、レジスタまたはパイプライン１６００の他の部分へのロードおよびスト操作が行われてよい。当該操作は、アドレスのロードおよびストアを含んでよい。このような操作は４つのクロックサイクルで行われてよい。１６８０において、１６５５〜１６７５の演算結果によって要求される通り、ライトバック操作が行われてよい。
【０１４５】
図１７は、本開示の実施形態によるプロセッサ１７１０を利用するための電子デバイス１７００のブロック図である。電子デバイス１７００としては、例えば、ノートブック、ウルトラブック、コンピュータ、タワーサーバ、ラックサーバ、ブレードサーバ、ラップトップ、デスクトップ、タブレット、モバイルデバイス、電話、埋め込みコンピュータ、または任意の他の好適な電子デバイスが含まれてよい。 
【０１４６】
電子デバイス１７００は、任意の好適な数または種類のコンポーネント、周辺機器、モジュール、またはデバイスに通信可能に連結されたプロセッサ１７１０を含んでよい。このような連結は、任意の好適な種類のバスまたはインタフェースによって実現されてよく、このようなものとしては、Ｉ２Ｃバス、システムマネージメントバス（ＳＭＢｕｓ）、ローピンカウント（ＬＰＣ）バス、ＳＰＩ、高解像度オーディオ（ＨＤＡ）バス、シリアルアドバンステクノロジアタッチメント（ＳＡＴＡ）バス、ＵＳＢバス（バージョン１、２、３）、または汎用非同期送受信回路（ＵＡＲＴ）バス等が挙げられる。 
【０１４７】
このようなコンポーネントとしては、例えば、ディスプレイ１７２４、タッチスクリーン１７２５、タッチパッド１７３０、近距離通信（ＮＦＣ）ユニット１７４５、センサハブ１７４０、熱センサ１７４６、エクスプレスチップセット（ＥＣ）１７３５、トラステッドプラットフォームモジュール（ＴＰＭ）１７３８、ＢＩＯＳ／ファームウェア／フラッシュメモリ１７２２、デジタル信号プロセッサ１７６０、ソリッドステートディスク（ＳＳＤ）またはハードディスクドライブ（ＨＤＤ）等のドライブ１７２０、無線ローカルエリアネットワーク（ＷＬＡＮ）ユニット１７５０、Ｂｌｕｅｔｏｏｔｈ（登録商標）ユニット１７５２、無線ワイドエリアネットワーク（ＷＷＷＡＮ）ユニット１７５６、全地球測位システム（ＧＰＳ）、ＵＳＢ３．０カメラ等のカメラ１７５４、または、例えばＬＰＤＤＲ３規格で実装された低消費電力ダブルデータレート（ＬＰＤＤＲ）メモリユニット１７１５が含まれてよい。これらのコンポーネントはそれぞれ、任意の好適な態様で実装されてよい。
【０１４８】
さらに、様々な実施形態において、他のコンポーネントは上記のコンポーネントを介してプロセッサ１７１０に通信可能に連結されてよい。例えば、加速度計１７４１、周辺光センサ（ＡＬＳ）１７４２、コンパス１７４３、およびジャイロスコープ１７４４が、センサハブ１７４０に通信可能に連結されてよい。熱センサ１７３９、ファン１７３７、キーボード１７４６およびタッチパッド１７３０がＥＣ１７３５に通信可能に連結されてよい。スピーカ１７６３、ヘッドフォン１７６４およびマイクロフォン１７６５がオーディオユニット１７６４に通信可能に連結されてよく、当該オーディオユニット１７６４は次にＤＳＰ１７６０に通信可能に連結されてよい。オーディオユニット１７６４は、例えば、オーディオコーデックおよびクラスＤ増幅器を含んでよい。ＳＩＭカード１７５７が、ＷＷＡＮユニット１７５６に通信可能に連結されてよい。ＷＬＡＮユニット１７５０およびＢｌｕｅｔｏｏｔｈ（登録商標）ユニット１７５２等のコンポーネントに加え、ＷＷＡＮユニット１７５６が次世代フォームファクタ（ＮＧＦＦ）で実装されてよい。
【０１４９】
本開示の実施形態は、計算処理用のベクトルフォーマットのための命令およびロジックを使用する。一実施形態において、このような計算は有限差分計算を含んでよい。例えば、このような計算としては、多次元の微分方程式の計算または推定、等方性計算または異方性計算が含まれてよい。別の実施形態において、このようなベクトルフォーマットは、表形式ベクトルフォーマットを含んでよい。さらなる別の実施形態において、計算は、複数の重複するデータポイントからの入力を要求する計算を含んでよく、当該データポイントは複数の次元において互いに隣接する。図１８は、本開示の実施形態による計算処理用のベクトルフォーマットのためのシステム１８００の一例示的な実施形態のブロック図である。計算は、例えば、プロセッサ１８０４によって処理されてよい。システム１８００は、本明細書に記載の機能を実行するための任意の好適な数および種類の要素を含んでよい。さらに、システム１８００の特定の要素が特定の機能を実行するように本明細書に記載される可能性があるものの、システム１８００の任意の好適な部分が本明細書に記載の機能を実行してよい。
【０１５０】
一実施形態において、計算処理用のベクトルフォーマットが、プロセッサ１８０４によって受信された命令に適用されてよい。プロセッサ１８０４によって受信された命令は、命令ストリーム１８０２内の命令を含んでよく、当該命令ストリーム１８０２は、コンパイラ、トランスレータ、または他の好適なソースによって生成されてよい。命令ストリーム１８０４は、有限差分（ＦＤ）の計算、またはｎ次元の等方性、異方性若しくは微分方程式の関数等の関数のためのコマンドを含んでよい。命令ストリーム１８０４は、特定のデータポイントに対し、複数のデータポイントからの入力を要求する関数のためのコマンドを含んでよく、当該データポイントは線形的に且つ複数の次元において互いに隣接する。様々な実施形態において、「複数の次元」とは、物理的な現実またはソースデータによって表わされる問題空間の領域を表わしてよい。複数の領域がプロセッサ１８０４内で操作および処理される場合、コンピュータの演算を実行すべく、当該複数の領域は必要に応じて実データ構造に平坦化されてよい。当該コマンドは、ＦＤ関数１８０３として言及されてよい。このような実施形態において、プロセッサ１８０４は、ベクトルフォーマット演算を追加することによって、ＦＤ関数１８０３をデコーディング、解釈、またはそれ以外の方法で実行することによって、ＦＤ関数１８０３の実行を行ってよい。このようなベクトルフォーマット演算は、プロセッサ１８０４の任意の好適な部分によって行われてよく、そのようなものとして、フロントエンド１８０６、デコーダ１８０８、またはダイナミックバイナリトランスレータ１８１０、またはＪＩＴコンパイラ若しくはトランスレータ、オプティマイザ、または特殊コプロセッサ若しくは実行ユニット等の図示されない他の要素によるものが挙げられる。別の実施形態においては、計算処理用のベクトルフォーマットは、命令がプロセッサ１８０４に到達する前にＦＤ関数１８０３に適用されてよい。ベクトルフォーマットは、コンパイラ、トランスレータ、オプティマイザ、または他の好適なエンティティによって適用済みであってよい。
【０１５１】
プロセッサ１８０２は、ＦＤ関数１８０３、そのベクトルフォーマット演算に加え、他の命令の処理を実行してよい。プロセッサ１８０４は、任意のプロセッサコア、論理プロセッサ、プロセッサ、または図１〜図１７に示すような他の処理エンティティによって部分的に実装されてよい。様々な実施形態において、プロセッサ１８０４は、キャッシュ、メモリまたは他のソースから命令をフェッチするフェッチユニットを含むフロントエンド１８０６および命令をデコードするデコーダ１８０８を含んでよい。また、プロセッサ１８０４は命令のタイミング、命令の順序、および命令のコア１８１４または実行ユニット１８２０への割り当てを判断するためのスケジューラを含んでよい。また、プロセッサ１８０４は、命令を実行するための多くのタイプおよび種類の実行ユニット１８２０またはコア１８１４を含んでもよい。このような実行ユニットとしては、例えば、分岐実行ユニット、整数算術実行ユニット（例えばＡＬＵ）、浮動小数点算術実行ユニット（例えばＦＰＵ）およびメモリアクセス実行ユニットが含まれてよい。さらに、プロセッサ１８０４は、成功した実行結果を例えばレジスタ、キャッシュ、またはメモリ１８１８にコミットするリタイアメントユニット１８１６を含んでよい。プロセッサ１８０４は、エイリアスリソースを予約するための割り当てユニット等、図示されていない任意の他の好適なコンポーネントを含んでよい。様々な実施形態において、プロセッサ１８０４は、プロセッサ１８０２のダイ内の不揮発性機械可読媒体（リードオンリメモリ等）上に格納されたマイクロオペレーションを利用して実行するマイクロコードを利用して、実行ユニット１８２０に対し、命令のうちの所望の演算を実行させてよい。
【０１５２】
上記の通り、ＦＤ関数１８０３は、命令ストリーム１８０２内のＦＤ関数１８０３を実装するために、またはプロセッサ１８０４でのＦＤ関数１８０３の解釈、デコーディング、あるいは評価の結果として、ベクトルフォーマット演算を含んでよい。任意の好適なベクトルフォーマット演算、読み取り若しくは他の命令が命令ストリーム１８０２に追加されてよく、または、ＦＤ関数１８０３がプロセッサ１８０４で実行されるとき、任意の好適なベクトルフォーマット演算、読み取り若しくは他の命令がデコードされ且つＦＤ関数１８０３に追加されてよい。特定のＦＤ関数１８０３およびその特定のパラメータの実行を行うために、フォーマット演算、読み取りまたは他の命令に関する特定の選択および順序付けがなされてよい。一実施形態において、このようなフォーマット演算は、データを表形式ベクトルに読み込むための関数を含んでよい。別の実施形態において、このようなフォーマット演算は、特定のＦＤ関数１８０３およびそのパラメータのニーズに従い実行するための表形式ベクトルをアラインメントするための関数を含んでよい。さらなる別の実施形態において、このようなフォーマット演算は、特定のＦＤ関数１８０３およびそのパラメータのニーズに従い実行するための表形式ベクトルを転置するための関数を含んでよい。
【０１５３】
一実施形態において、ＦＤ関数１８０３がプロセッサ１８０４に到達するとき、ＦＤ関数１８０３はその実行を具体的に行うためのこのようなフォーマット演算を含んでいなくてもよい。別の実施形態において、ＦＤ関数１８０３はコンパイル済みであってよく、命令ストリーム１８０２内に配置される前にこのようなフォーマット演算がＦＤ関数１８０３に追加済みであってよい。
【０１５４】
上記の通り、ＦＤ関数１８０３に係る関数は、例えば、ｎ次元のＦＤ、等方性、異方性、または微分方程式の近似関数を含んでよい。ＦＤ関数は、微分方程式の解のための数値スキームを含んでよい。別の実施形態において、一点の計算のために、複数の次元で互いに隣接するデータポイントからの入力を要求する関数が使用されてよい。これらの関数のうちの任意のものがデータの大きなセットのシミュレーションで使用されてよい。このような関数は、例えば、エネルギー探査で地層をシミュレーションするための高性能コンピューティング計算または任意の他の好適な適用において使用されてよい。これらの関数の実装は、非常に大量の浮動小数点計算および高いメモリ帯域幅を要求してよい。ＦＤ関数は、データを表わす、大きなメモリ空間にわたる数値ステンシルの適用を要求してよい。このようなデータはリアルワールドデータを含んでよい。故に、ＦＤ関数での一点の計算は、各次元の複数のデータへのアクセスを要求してよい。ＦＤ関数１８０３の各次元のために、ＦＤ関数は、一点におけるその結果を計算するために必要な入力値の範囲を含んでよい。このような範囲は、連続でなくてよい。例えば、１６次の２次元ステンシルは、単一のタイムステップで新しい各値を計算するために、３３個の入力値を要求してよい。ＦＤベース問題全体の解は、計算されるべき数十億もの点を要求してよい。プロセッサ１８０４でのＳＩＭＤベクトル化は、複数の点が並列に計算されることを可能にしてよい。しかしながら、以下に示す通り、ＳＩＭＤベクトル化は、読み取られる必要のあるデータを低減せず、単独ではＦＤ関数の実行を行うためになされる必要のある読み取り量にも同様に影響しない可能性がある。様々な実施形態において、ＦＤ関数１８０３に適用されるベクトルフォーマットは、ＦＤ関数１８０３による実行のためのデータの収集に必要な読み取りの数を低減してよい。
【０１５５】
図１８は、３次元ソースデータ１８２２の一例を示す。このようなデータ１８２２は、メモリまたはプロセッサ１８０４によってアクセス可能な別の場所を含む任意の好適な場所に存在してよい。データ１８２２は大きすぎて、完全に読み取られプロセッサ１８０４のキャッシュ内に格納できない可能性がある。ＦＤ関数１８０３は、目的の関数の結果を判断するためにデータ１８２２を処理してよい。上記の通り、特定の場所（ｘ０、ｙ０、ｚ０）におけるＦＤ関数１８０３の計算は、ソースデータ１８２２の範囲（連続的またはそれ以外）に属するｘ次元、ｙ次元およびｚ次元の各々からの入力を必要とし得る。このような入力を取得すべく、（Ａ）において、このような各値がソースデータ１８２２から読み取られる必要がある。（Ｂ）において、このような値は、ＦＤ関数１８０３の合成値を計算するために使用されてよい。一実施形態において、ＦＤ関数１８０３の複数の値が、ＳＩＭＤベクトル化演算を使用して並列に計算されてよい。
【０１５６】
図１９は、本開示の実施形態による例示的なＦＤ関数の一例の図である。ステンシル１９０２は、例示的なＦＤ関数を表現するものであり、当該ＦＤ関数は特定の点１９０３について、ｘ方向の次の４つの値および前の４つの値、ｙ方向の次の４つの値および前の４つの値、およびｚ方向の次の４つの値および前の４つの値の判断を要求する。ＦＤ関数の特定の点１８０３を計算するために必要な値のマップは、マスクまたはステンシルと称されてよい。また、等方性関数のための例示的な式１９０４が図１９に指定されている。
【０１５７】
図２０、図２０‐１、図２０‐２および図２０−３は、本開示の実施形態による、ＦＤ関数の例示的な演算の図である。グラフ２００２は、ＦＤ関数１８０３の実行がなされてよい一点（５，５）を示す。当該一点は、ＦＤ関数１８０３による計算がなされるべき数百万を超える点のうちの唯一のものであってよい。
【０１５８】
グラフ２００４は、２次元の８次等方性ＦＤ関数を計算すべく読み取られる必要のある値を示すステンシル２００６を示す。３次元関数、またはより高次（１６次等）の関数には、より大きなステンシルが必要であろう。図２０で検討する２次元の８次等方性ＦＤ関数については、ソースデータ内の特定の点、特定の点より上の４つの値、特定の点より下の４つの値、特定の点より右の４つの値および特定の点より左の４つの値が、ＦＤ関数の結果を見つけるために考慮されてよい。
【０１５９】
ステンシル２００６のこれらの値を読み取るべく、（Ａ）では、個々のデータポイントの読み取り２００３がなされてよく、ＦＤ関数の（５，５）の計算に必要な複数の値を判断するために、合計１７個の読み取りが要求される。（Ｂ）でＳＩＭＤベクトル読み取り２００５を使用し、一度に２個以上の値が、値のベクトルに読み込まれてよい。このようなＳＩＭＤベクトルは、プロセッサ１８０４のアーキテクチャおよび機能によって定義されてよい。例えば、１６の長さのＳＩＭＤベクトル読み取りが利用可能であってよく、各々はｘ方向の連続的なインデックスを持つ。読み取られた値は指定された場所に対応してよく、それに加え、指定された場所の後に１５個の値が当該ベクトルの方向に続く。ＳＩＭＤベクトル読み取り２００５を使用し、ソースデータ内のステンシル２００６に対応する値が１１個のベクトル読み取りで読み取られてよい。例示的なＦＤ関数が３次元の場合、当該ページから突出する（ｚ方向）値に対しさらに４個の読み取りがなされ、また当該ページに入り込む方向にさらなる４個の読み取りがなされるであろう。さらに、ベクトルの並列での同時実行が容易になるように、これらの読み取りにより、さらに多くのデータが収集されてよい。このような最初の９個の読み取りがグラフ２００６内に示されており、グラフ２００８に第１０番目の読み取りが示され、グラフ２０１０に第１１番目の読み取りが示されている。１６次等方性２‐Ｄ  ＦＤ関数については、３３個の入力データ値が必要であってよい。ＳＩＭＤベクトル読み取り２００５の１９個の異なる実行が使用され、このようなデータを入力してよい。ベクトル化が単一方向になされるとき、効率性が当該ベクトル化の方向（グラフ２００６、２００８、２０１０の例におけるｘ方向）に得られてよいが、他の方向に複数の読み取りがなされる必要がある。
【０１６０】
ＳＩＭＤベクトル読み取り２００５は、並列での考えられ得る１６個の値の読み取りを含んでよいものの、ＳＩＭＤベクトル読み取り２００５は、一度に１６個の値の任意の考え得るセットを読み取り可能でなくてよい。ＳＩＭＤベクトル読み取り２００５は、単一のキャッシュライン内でアラインメントされた並列な１６個の要素を読み取り可能であってよい。グラフ２００６の例において、１つのアラインメントは、列５にあってよい一方、次のアラインメントは、列２１にあってよい。ＳＩＭＤベクトル読み取り２００５は、このような範囲を１チャンクで読み取ってよい。従って、ここでグラフ２００６の左「アーム」の読み取りは、プロセッサによって実際に用いられる完全なアラインメントを図示してよい。このような読み取りは実際、マイナス１１列でなされ、列４へと進む。その結果、ステンシルを十分カバーするために１９個の異なる読み取りが必要であってよい。
【０１６１】
一実施形態において、ベクトルフォーマットは、ＦＤ関数の実行のためのデータの読み取りに適用されてよく、その結果、データは２次元または３次元等、１次元より多い次元でベクトル化される。このようなフォーマットは、（Ｃ）に図示されるような表形式ベクトル読み取り２０１１フォーマットを含んでよい。別の実施形態において、ベクトルフォーマットは１次元より多い次元に適用されてよく、その結果、データは１次元より多い次元で読み取られる。
【０１６２】
表形式ベクトル読み取り２０１１フォーマットがソースデータおよびステンシル２００６に任意の好適な態様で適用されてよい。一実施形態において、表形式ベクトル読み取り２０１１は特定の点に適用されてよく、その場合ｘ方向の次の４個の値およびｙ方向の次の４個の値が読み取られてよい。表形式ベクトル読み取り２０１１のサイズは、プロセッサ１８０４のＳＩＭＤベクトル読み取り２００５の利用可能なサイズに関連してよい。例えば、表形式ベクトル読み取り２０１１は１６個の値であってよい。６４個の値のベクトル読み取りがサポートされる場合、表形式ベクトル読み取り２０１１は８×８の２次元読み取りを含んでよい。非完全平方（例えば３２個の値）ベクトル読み取りがサポートされる場合、表形式ベクトル読み取り２０１１は、例えば、８×４の２次元読み取りによって実装されてよい。表形式ベクトル読み取り２０１１の任意の好適なレイアウトが使用されてよい。例えば、図２０に図示する４×４のレイアウトの代わりに、２×８のレイアウトが使用されてよい。別の例において、１６個の要素のＳＩＭＤが使用され、３次元読み取りでの４×２×２の部分空間を表わしてよい。ソースデータに適用するために選択されるレイアウトは、ＦＤ関数の実行に必要なソースデータの形状に依存してよい。
【０１６３】
別の実施形態において、表形式ベクトル読み取り２０１１の次元を考慮し、ステンシル２００６のすべての値を完全に読み取りつつ、読み取りの数を最小化すべく、表形式ベクトル読み取り２０１１が、ステンシル２００６（または当該ＦＤ関数のための任意の他のステンシル）内の点に適用されてよい。ベクトル読み取りの適用方法は、例えば、ＦＤ関数１８０３のデコーディングおよび変換の際にプロセッサ１８０４により判断されてよく、またはＦＤ関数１８０３と共に含まれてよい。
【０１６４】
例えば、グラフ２０１２は例示的なＦＤ関数を表わすステンシル２００６への表形式ベクトル読み取り２０１１の適用を示す。ＦＤ関数のための命令はプロセッサ１８０４によって受信されてよく、プロセッサ１８０４はＦＤ関数の計算を実行すべく、ステンシル２００６の値が読み取られる必要があるかを判断してよい。さらに、プロセッサ１８０４は、ステンシル２００６の値を効率的に読み取るべく、表形式ベクトル読み取り２０１１の５つのインスタンスが作成されるかを判断してよい。グラフ２０１２に図示される読み取りを生成すべく、５つのインスタンスにおける表形式ベクトル読み取り２０１１のパラメータが選択されてよい。例えば、（５，６）に対するＦＤ関数の結果を計算するために、表形式ベクトル読み取り２０１１がソースデータ内の（５，２）、（１，６）、（５，６）、（５，１０）および（９，６）の各々でなされてよい。ベクトル読み取りの特定の数は、選択された特定の点、ＦＤ関数、ＦＤ関数の次数、ＦＤ関数の次元の数に依存してよい。このような読み取りが行われてよい場所とＦＤ関数のこのようなバリエーションとの間の関係性のマッピングが格納されてよく、その結果、特定のＦＤ関数について、当該特定のＦＤ関数の読み取りを実装すべく、表形式ベクトル読み取り２０１１の特定の数および場所が指定されてよい。さらに、このようなマッピングは、表形式ベクトル読み取り２０１１の様々な利用可能なレイアウトを指定してよい。
【０１６５】
故に、図２０−１の例において、８次の２Ｄ  ＦＤ関数およびそのステンシル２００６について、すべての値を読み取るためには、５個の読み取りが必要とされてよい。３次元関数については、ページから突出するｚ方向の値には追加の４個の読み取りにおよびページに入り込むｚ方向の値には追加の４個の読み取りが必要とされるであろう。１６次の２Ｄ  ＦＤ関数の場合、表形式ベクトル読み取り２０１１の数は９個であってよい。従って、様々な実施形態において、線形ベクトルから表形式ベクトルまでのベクトル読み取りのフォーマットは、ＦＤ関数１８０３を計算するために必要なソースデータの読み取りの数を低減してよい。
【０１６６】
図２１および図２１−１は、本開示の実施形態による異方性関数２１０２の例示的な演算の図である。異方性関数２１０２が図２２中の一例として使用されるものの、任意の好適な異方性関数が使用されてよい。異方性関数２１０２は、２次元の異方性関数であってよい。
【０１６７】
グラフ２１０４は、異方性関数２１０２の実行がなされてよい一点（５，５）を示す。当該一点は、異方性関数２１０２による計算がなされるべき数百万を超える点のうちの唯一のものであってよい。グラフ２１０４は、異方性関数２１０２を使用して特定の点の値を計算すべく読み取られる必要のある値を示すステンシル２１０６を示す。３次元関数、またはより高次（１６次等）の関数には、より大きなステンシルが必要であろう。図２１で検討する２次元の８次等方性関数については、ソースデータ内の特定の点、特定の点より上の４つの値、特定の点より下の４つの値、特定の点より右の４つの値および特定の点より左の４つの値が、その特定の点のための異方性関数２１０２の結果を見つけるために考慮されてよい。また、対角線上の右上にある４個の値、対角線上の左上にある４個の値、対角線上の右下にある４個の値、対角線上の左下にある４個の値が、特定の点に対する異方性関数２１０２の結果を見つけるために考慮されてよい。
【０１６８】
ステンシル２１０６のこれらの値を読み取るべく、線形的ＳＩＭＤベクトル読み取り（図２０−１の１×１６のＳＩＭＤベクトル読み取り２００５等）が使用され、計算をするために値が読み取られる場合、合計２７個の読み取りがなされる必要があってよい。この合計には、図２０に図示のものと同じものに加え、４つの対角線領域の各４個が含まれてよい。
【０１６９】
一実施形態において、ベクトルフォーマットが異方性関数２１０２の実行のためのデータの読み取りに適用されてよく、その結果、データは２次元または３次元等、１次元より多い次元でベクトル化される。このようなフォーマットは、図２０‐３に図示されるような表形式ベクトル読み取り２０１１フォーマットを含んでよい。別の実施形態において、ベクトルフォーマットが１次元より多い次元に適用されてよく、その結果、データは１次元より多い次元で読み取られる。
【０１７０】
表形式ベクトル読み取り２０１１フォーマットがソースデータおよびステンシル２１０６に任意の好適な態様で適用されてよい。ステンシル２２０６のすべての値を完全に読み取りつつ、読み取りの数を最小化するために、表形式ベクトル読み取り２０１１がステンシル２１０６内の点に適用されてよい。ベクトル読み取りの適用方法は、例えば、異方性関数２１０２のデコーディングおよび変換の際にプロセッサ１８０４により判断されてよく、または異方性関数２１０２Ｆと共に含まれてよい。
【０１７１】
例えば、グラフ２１０８は異方性関数２１０２を表わすステンシル２１０６への表形式ベクトル読み取り２０１１の適用を示す。一実施形態において、表形式ベクトル読み取り２０１１は、グラフ２１０８に図示の通り、点（１，２）、（５，２）、（９，２）、（１，６）、（５，６）、（９，１０）、（１，１０）、（５，１０）および（９，１０）に適用されてよい。従って、９個の読み取りがなされてよい。３次元関数については、ページから突出するｚ方向の値には追加の４個の読み取りにおよびページに入り込むｚ方向の値には追加の４個の読み取りが必要とされるであろう。１６次数の２Ｄ  ＦＤ関数の場合、表形式ベクトル読み取り２０１１の数は９個であってよい。従って、様々な実施形態において、線形ベクトルから表形式ベクトルまでのベクトル読み取りのフォーマットは、ＦＤ関数１８０３を計算するために必要なソースデータの読み取りの数を低減してよい。
【０１７２】
図２２、図２２−１および図２２−２は、本開示の実施形態による、表形式ベクトル読み取りに基づいて、計算を行うシステム１８００の例示的な演算の図である。ＦＤ関数１８０３の計算の実行は、ＳＩＭＤベクトル化を使用して並列に実行されてよい。図２２中のベクトルデータは、例えば、ベクトルレジスタ内に格納されてよい。図２０に示す読み取りに使用される同一の表形式ベクトルレイアウトを使用して、計算を行うことによって、計算の並列化がなされてよい。故に、図２２のベクトル計算を使用して並列に行われる計算の数は、図２０の表形式ベクトル読み取り演算のサイズと同一であってよい。さらに、ベクトル計算を使用して並列に行われる計算の数は、表形式ベクトルの結果を格納するレジスタと同一サイズであってよく、表形式ベクトルの結果は表形式ベクトル読み取り演算の結果を格納する。
【０１７３】
しかしながら、データの読み取りに使用される表形式ベクトルレイアウトを使用する特定の点を考慮すると、２つの異なる表形式ベクトル読み取り中に取得されるデータへのアクセスが要求されてよい。ベクトル計算が単一の表形式ベクトル読み取りのデータを格納するレジスタと同一サイズの場合、ベクトル計算は両方の表形式ベクトル読み取りのすべてを読み取り可能でなくてよい。いくつかの実施形態において、複数のベクトルからの情報を正しく収集するために、フォーマット命令が適用されてよく、その結果、表形式ベクトルレイアウト２２０６により計算がなされてよい。レイアウト２２０６は、図２０に示す表形式ベクトル読み取りのレイアウトに対応してよい。
【０１７４】
例えば、グラフ２２０２は、表形式ベクトル読み取りから生成された第１のベクトル（ベクトル１）データおよび第２のベクトル（ベクトル２）データから受信されたデータを示してよい。グラフ２２０４、例えば、場所（５，５）にベクトル全体の計算を行うべく、ベクトル１およびベクトル２の両方のデータにアクセスされる必要があってよく、当該場所は、ステンシル２２０６の中央の点からｙ方向に移動された１つの場所である。従って、場所（５，５）にベクトル全体の計算が行われてよいように、データはフォーマットされる必要があってよい。特に、このような計算には追加の情報が要求されてよい。
【０１７５】
一実施形態において、複数の表形式ベクトルからの情報にアクセスすべく、特殊なベクトル読み取り関数が使用されてよい。図２２の例において、このような関数はＶＡＬＩＧＮという名称で表されてよい。一実施形態において、ＶＡＬＩＧＮは、単一の命令として実装されてよい。ＶＡＬＩＧＮは、２つのベクトルからの２つの部分が結合される必要があることを指定する任意の好適なパラメータを使用してよい。例えば、ＶＡＬＩＧＮは、第１のベクトル、および第１のベクトルから取得される必要のある要素、第２のベクトル、および第２のベクトルから取得される必要のある要素を指定するパラメータを含んでよい。ＶＡＬＩＧＮは、他の好適なパラメータスキームで実装されてよい。グラフ２２０４の例において、ＶＡＬＩＧＮは、ベクトル１の最後の４個の要素（マイナス４と指定）がベクトル２の最初の１２個の要素（１２と指定）に追加されるべきであることを指定するために呼び出されてよい。すなわち、ＶＡＬＩＧＮ（ベクトル１，−４，ベクトル２，１２）となる。別の例において、マイナスの値が示唆されてよい。別の例において、ベクトル１とベクトル２との間の関係性が推測されてよく、ベクトル１の最後の値がいくつ使用されることになるかを示す単一の数のみが渡されてよい。残りの値は、ベクトル２の第１の部分からのものであると想定されてよい。
【０１７６】
グラフ２２０４の例において、レイアウト２２０６が（５，３）（１つ上の位置）にシフトされるための追加の計算を完了するには、ＶＡＬＩＧＮ（ベクトル１，−８，ベクトル２，８）を使用してＶＡＬＩＧＮを呼び出し、ベクトル１の最後の８個の値がベクトル２の最初の８個の値と結合されるようにしてよい。代わりに、レイアウト２２０６が（５，２）（もう１つ上の位置）に配置されるための追加の計算については、ＶＡＬＩＧＮ（ベクトル１、−１２，ベクトル２，４）を使用してＶＡＬＩＧＮを呼び出し、ベクトル１の最後の１２個の値がベクトル２の最初の４個の値と結合されるようにしてよい。しかしながら、代わりに、レイアウト２２０６が（５，１）（もう１つ上の位置）に配置されるための追加の計算には、レイアウト２２０６はベクトル１データをターゲットに完了されてよい。このような場合、ＶＡＬＩＧＮの使用は必要なくてよく、ベクトル１データは単に読み取られたまま通りに使用されてよい。
【０１７７】
一実施形態において、ベクトル２より下のベクトルでの計算については、同一の手順をＶＡＬＩＧＮの異なるパラメータを使用して繰り返して、このようなベクトルの要素をベクトル２と結合させてよい。合計で６個のＶＡＬＩＧＮ呼び出しを使用して、レイアウト２２０６によってｙ方向に適用する表形式ベクトルデータのすべての計算が行われてよい。６個のＶＡＬＩＧＮ呼び出しは、グラフ２２０２の「トップ」「アーム」およびミドルベクトルの合成のための３個、および「ボトム」アームおよびミドルベクトルの合成のための３個を含んでよい。ベクトル１のトップにあるアーム全体へのアクセスは、ＶＡＬＩＧＮ呼び出しを要求しなくてよい。ベクトル２のミドル全体へのアクセスは、ＶＡＬＩＧＮ呼び出しを要求しなくてよい。別のベクトルに対応する「ボトム」アーム全体へのアクセスは、ＶＡＬＩＧＮ呼び出しを要求しなくてよい。１６次ステンシルにおいては、２つの追加の入力ベクトルおよびさらなる６個のＶＡＬＩＧＮ呼び出しが必要であってよい。
【０１７８】
特定のレイアウトが読み取られると、１６の結果が、表形式でのＳＩＭＤベクトル計算を使用して並列で計算されてよい。
【０１７９】
グラフ２２１０は、「左」アームのベクトル３およびベクトル２の、表形式ベクトルの結果データを示す。ｙ方向に行われた上記の計算と同様の計算をｘ方向に行うために、レイアウト２２０６はベクトル２からｘ方向に左にシフトされ、そこでの成分が計算されてよい。ベクトル３およびベクトル２の両方のデータにアクセスすべく、ＶＡＬＩＧＮは上記と同様の態様で使用されてよい。一実施形態において、レイアウト２２０６が表形式ベクトル読み取り２０１１のフォーマットに示される値を示すと仮定し、表形式ベクトル計算およびＶＡＬＩＧＮが行われてよい。別の実施形態において、ｘ方向にレイアウト２２０６の場所をシフトするための計算は、まずレイアウト２２０６の内容を入れ替えまたは転置することによってなされてよく、その結果、計算およびＶＡＬＩＧＮ演算は、あたかもそれらがｙ方向の視点からなされたかのように、なされる。従って、ベクトル３およびベクトル２は転置または入れ替えられてよい。別の実施形態において、次にＶＡＬＩＧＮ演算はベクトル３およびベクトル２の要素を結合するために適用されてよく、それに対し、計算がなされてよい。メモリに書き込まれる前に、最終的な結果が入れ替えられる必要がある。転置演算が演算２２１２に図示されてよい。
【０１８０】
ベクトル３およびベクトル２が転置された後、ＶＡＬＩＧＮ呼び出しがなされて、ベクトル３の最後の４個の要素とベクトル２の最初の１２個の要素を結合し、ベクトル３の最後の８個の要素とベクトル２の最初の８個の要素を結合し、ベクトル３の最後の１２個の要素とベクトル２の最初の４個の要素を結合してよい。ＶＡＬＩＧＮは、左アームにアクセスするために必要でなくてよい。処理は「右」アームに、そこでの表形式ベクトルの転置も含め、繰り返されてよい。各レイアウトのデータの組み立てにおいて、ＳＩＭＤ表形式ベクトル計算が行われてよい。
【０１８１】
８次ステンシルでは、複数のアームと中央の合成をカバーするための合計６個のＶＡＬＩＧＮ呼び出しに加え、３個の転置演算（１つはｘ方向の各表形式ベクトル）が必要であってよい。１６次のステンシルについては、さらなる２個の転置およびさらなる６個のＶＡＬＩＧＮ呼び出しに加え、２つの追加の入力ベクトルが必要であってよい。
【０１８２】
図２３は、本開示の実施形態による、計算処理用のベクトルフォーマットを適用するための方法２３００に係る例示的な一実施形態のフローチャートである。方法２３００は、例えば、プロセッサ１８０４によって実行される演算を示してよい。方法２３００のいくつか部分は命令ストリーム１８０２の作成によって行われてよく、例えば、ライブラリ、コンパイラ、またはインタプリタによって行われる。方法２３００は任意の好適なポイントで開始してよく、任意の好適な順序で実行されてよい。一実施形態において、方法２３００は２３０５で開始してよい。
【０１８３】
２３０５において、命令がプロセッサ１８０４で実行されるべくフェッチされてよい。このような命令は、ＦＤ命令の形式を含んでよい。２３１０において、命令がデコードされてよい。特定のタイプのＦＤ命令およびそのパラメータが判断されてよい。
【０１８４】
一実施形態において、２３１５において、表形式ベクトルフォーマットがＦＤ命令に適用されるかが判断されてよい。ＦＤ命令、その次数、その次元、または他の識別態様に基づいて、入力データの特定の形状が使用され、ＦＤ命令の特定のデータポイントを計算してよい。入力データの形状に基づいて、表形式ベクトルの形式およびサポートする命令が選択されてよい。
【０１８５】
２３２０で、一実施形態において、ＦＤ命令の計算における特定の点のための入力データの形状を反映する入力のステンシルが判断されてよい。形状は２次元または３次元であってよい。
【０１８６】
２３２５において、表形式ベクトル読み取り命令が、ＦＤ命令をサポートするコードに挿入されてよい。一実施形態において、入力のステンシルが表形式ベクトル読み取り命令の範囲によってカバーされるように、表形式ベクトル読み取り命令は当該ステンシルにマッピングされてよい。別の実施形態において、表形式ベクトル読み取りの数が最小化されてよい。表形式ベクトル読み取りの特定の数およびそれらのパラメータ（ステンシルの各部によるそれぞれのカバー範囲を反映）は、ステンシルおよびＦＤ命令自体に依存してよい。
【０１８７】
２３３０において、計算命令が、得られる表形式ベクトルの各要素のために挿入されてよい。このような計算命令は、表形式ベクトルの実行であってよい。一実施形態において、２３３５において、特定のベクトル計算をサポートするアラインメント命令および転置命令が必要に応じて挿入されてよい。単一のレジスタまたは表形式ベクトルのデータを使用してなされるベクトル計算（読み取り命令の実行からの結果）は、アラインメントを要求しなくてよい。しかしながら、複数のこのようなレジスタまたは表形式ベクトルのデータを使用してなされるベクトル計算は、複数のこのようなベクトルの要素を結合するためのアラインメントを要求してよい。アラインメント命令の具体的な使用は、読み取り命令からもたらされるデータの形状により行われてよい。さらに、追加の方向（ｘ方向またはｚ方向等）のベクトル計算を行うために、転置命令が挿入されてよい。転置命令は、元の方向で行われた計算と同一の態様で、計算がこれらの方向で進められることを可能にしてよい。転置命令の具体的な使用は、読み取り命令からもたらされるデータの形状により行われてよい。
【０１８８】
２３４０で、一実施形態において、命令はディスパッチされ、実行されてよい。一実施形態において、表形式ベクトル読み取りは、上記の通り実行されてよい。２３４５において、アラインメントが必要に応じてなされてよく、ベクトル計算がなされてよい。出力データがメモリ、キャッシュ、レジスタ、または他の好適な場所に戻されてよい。２３５０において、必要に応じて、他の方向に対し、転置およびアラインメントがなされてよい。ベクトル計算が実行されてよい。出力データが戻されてよい。２３５０は、複数の方向に対し実行されてよい。
【０１８９】
２３５５において、ＦＤ命令の実行において、追加のデータポイントが計算されるべきかが判断されてよい。はいの場合、方法２３００は２３２０に戻ってよい。いいえの場合、方法２３００は２３６０に進んでよい。
【０１９０】
２３６０において、コミットされていない、または書き込まれていないデータがキャッシュ、メモリ、レジスタ、または他の場所に発行されてよい。２３６５において、命令はリタイアされてよい。随意で方法２３００を繰り返してもよいし、または必要に応じて終了してもよい。
【０１９１】
方法２３００は、任意の好適な基準によって開始されてよい。さらに、方法２３００は特定の要素の演算について説明するものの、方法２３００は複数の要素の任意の好適な組み合わせまたは任意の好適なタイプの要素によって実行されてよい。例えば、方法２３００は図１〜図２２に示す要素によって、または方法２３００を実装するように動作可能な任意の他のシステムによって実装されてよい。このように、方法２３００の好ましい初期化ポイントおよび方法２３００を備える複数の要素の順序は、選択された実装によって異なってよい。いくつかの実施形態においては、随意でいくつかの要素は省略、再編成、反復または組み合わされてよい。
【０１９２】
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実装アプローチの組み合わせで実装されてよい。本開示の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイスおよび少なくとも１つの出力デバイスを備えたプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０１９３】
プログラムコードは、本明細書に記載の関数を実行し、出力情報を生成するための入力命令に適用されてよい。出力情報は、既知の方法で、１または複数の出力デバイスに適用されてよい。本願の意図する処理システムには、例えば、デジタル信号プロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれてよい。
【０１９４】
プログラムコードは、処理システムと通信するために、高水準の手順型言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは特定のプログラミング言語には一切範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
【０１９５】
少なくとも１つの実施形態に係る１または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「ＩＰコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。
【０１９６】
このような機械可読ストレージ媒体としては特に限定されないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ‐ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ‐ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）等のランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）等の半導体デバイス、磁気カード若しくは光カードといった記憶媒体、または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【０１９７】
従って、また、本開示の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび／またはシステム機能を定義するハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的な有形の機械可読媒体を含んでよい。また、このような実施形態はプログラム製品としても称されてよい。
【０１９８】
いくつかの場合において、命令コンバータを使用し、命令をソース命令セットからターゲット命令セットへ変換されてよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき１または複数の他の命令へと、トランスレート（例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して）、モーフィング、エミュレーション、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
【０１９９】
故に、少なくとも１つの実施形態による１または複数の命令を実行するための技術が開示されている。具体的な例示的実施形態が記載され、添付図面に図示されているものの、このような実施形態は専ら例示にすぎず、他の実施形態に対し限定となるものではなく、本開示に接する当業者には様々な他の変形例が想起され得るので、このような実施形態は図示および記載された具体的な構造および構成に限定されないことを理解されたい。本技術分野等、成長が速く、さらなる進歩が容易に予測できない技術分野においては、当該開示の実施形態は、技術の進展を可能にすることで容易となるように、本開示の原理または添付の特許請求の範囲から逸脱することなく構成および詳細において容易に変更可能である。
【図１Ａ】
0006415698.tif 000002
【図１Ｂ】
0006415698.tif 000003
【図１Ｃ】
0006415698.tif 000004
【図２】
0006415698.tif 000005
【図３Ａ】
0006415698.tif 000006
【図３Ｂ】
0006415698.tif 000007
【図３Ｃ】
0006415698.tif 000008
【図３Ｄ】
0006415698.tif 000009
【図３Ｅ】
0006415698.tif 000010
【図３Ｆ】
0006415698.tif 000011
【図４Ａ】
0006415698.tif 000012
【図４Ｂ】
0006415698.tif 000013
【図５Ａ】
0006415698.tif 000014
【図５Ｂ】
0006415698.tif 000015
【図６】
0006415698.tif 000016
【図７】
0006415698.tif 000017
【図８】
0006415698.tif 000018
【図９】
0006415698.tif 000019
【図１０】
0006415698.tif 000020
【図１１】
0006415698.tif 000021
【図１２】
0006415698.tif 000022
【図１３】
0006415698.tif 000023
【図１４】
0006415698.tif 000024
【図１５】
0006415698.tif 000025
【図１６】
0006415698.tif 000026
【図１７】
0006415698.tif 000027
【図１８】
0006415698.tif 000028
【図１９】
0006415698.tif 000029
【図２０】
0006415698.tif 000030
【図２０−１】
0006415698.tif 000031
【図２０−２】
0006415698.tif 000032
【図２０−３】
0006415698.tif 000033
【図２１】
0006415698.tif 000034
【図２１−１】
0006415698.tif 000035
【図２２】
0006415698.tif 000036
【図２２−１】
0006415698.tif 000037
【図２２−２】
0006415698.tif 000038
【図２３】
0006415698.tif 000039