(57)【要約】  プロセッサは、レジスタフィールドの現在値のコンテキスト内で処理される命令を記憶するための待ち行列を含み、いくつかの実施形態では、命令は、処理の時におけるレジスタフィールドに依存して、未定義または定義済みである。書込み命令(レジスタフィールドに書き込む命令)の後、待ち行列は、実行された書込み命令に依存する命令を含む任意のエントリを求めて検索される。そのような各エントリは、エントリ中の命令が処理された時におけるレジスタフィールドの値を記憶する。そのようなエントリが待ち行列中に見出され、その記憶されたレジスタフィールドの値が、書込み命令がレジスタフィールドに書き込んだ値と一致しない場合、プロセッサは、命令を正しく実行するために、パイプラインをフラッシュし、リスタートする。
2016512908.tif 000002
【特許請求の範囲】
【請求項１】
レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するステップであって、前記命令が書込み命令に依存し、前記書込み命令が前記レジスタフィールドに設定値を書き込むためのものであり、前記書込み命令を実行する前に前記命令が処理される、ステップと、
前記命令を待ち行列の中のエントリに記憶するステップと、
前記レジスタフィールドの前記現在値を前記エントリに記憶するステップと、
前記書込み命令を実行した後で、前記エントリを求めて前記待ち行列を検索するステップと、
前記書込み命令を実行した後で、前記エントリに記憶された前記現在値を前記設定値と比較するステップと
を含む、方法。
【請求項２】
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、すべてのインフライト命令のパイプラインをフラッシュするステップと、プログラムカウンタを、プログラムの順番で前記書込み命令後の次の命令のアドレスに設定するステップと
をさらに含む、請求項1に記載の方法。
【請求項３】
前記命令を処理するステップが
前記現在値が第1の値である場合、前記命令を定義済みとして処理するステップと、
前記現在値が前記第1の値でない場合、前記命令を未定義として処理するステップと
をさらに含む、請求項2に記載の方法。
【請求項４】
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、前記命令およびプログラムの順番で前記命令に続くすべてのインフライト命令のパイプラインをフラッシュするステップと、プログラムカウンタを前記命令のアドレスに設定するステップと
をさらに含む、請求項1に記載の方法。
【請求項５】
プロセッサの状態情報を前記エントリに記憶するステップであって、前記状態情報が前記命令が処理される時点のものである、ステップと、
前記エントリに記憶される前記現在値が前記設定値と一致しない場合、前記エントリから前記状態情報を取り出して、前記状態情報により示される状態に前記プロセッサを回復するステップと
をさらに含む、請求項4に記載の方法。
【請求項６】
前記命令がベクトル命令である、請求項1に記載の方法。
【請求項７】
前記レジスタフィールドが1つまたは複数のフィールドを含む、請求項1に記載の方法。
【請求項８】
前記命令を処理するステップが
前記現在値が第1の値である場合、前記命令を定義済みとして処理するステップと、
前記現在値が前記第1の値でない場合、前記命令を未定義として処理するステップと
をさらに含む、請求項1に記載の方法。
【請求項９】
前記命令がコミットするとき、前記エントリを前記待ち行列から除去するステップ
をさらに含む、請求項1に記載の方法。
【請求項１０】
フィールドを有するレジスタと、
待ち行列と、
パイプラインと、
前記パイプラインに、前記パイプラインが書込み命令を実行する前に、レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理させることであって、前記命令が前記書込み命令に依存し、前記書込み命令が前記レジスタフィールドに設定値を書き込むためのものである、処理させることと、
前記命令を前記待ち行列中のエントリに記憶することと、
前記レジスタフィールドの前記現在値を前記エントリに記憶することと、
前記パイプラインが前記書込み命令を実行した後で、前記エントリを求めて前記待ち行列を検索することと、
前記パイプラインが前記書込み命令を実行した後で、前記エントリに記憶された前記現在値を前記設定値と比較することと
を行うようにに構成されるコントローラと
を備える、プロセッサ。
【請求項１１】
プログラムカウンタをさらに備え、
前記コントローラが、前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、
すべてのインフライト命令の前記パイプラインをフラッシュし、
前記プログラムカウンタを、プログラムの順番で前記書込み命令後の次の命令のアドレスに設定する
ようにさらに構成される、請求項10に記載のプロセッサ。
【請求項１２】
前記コントローラが、前記パイプラインに
前記現在値が第1の値である場合、前記命令を定義済みとして実行し、
前記現在値が前記第1の値でない場合、前記命令を未定義として実行する
ようにさらに構成される、請求項11に記載のプロセッサ。
【請求項１３】
プログラムカウンタをさらに備え、前記コントローラが、前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、
前記命令およびプログラムの順番で前記命令に続くすべてのインフライト命令の前記パイプラインをフラッシュし、
前記プログラムカウンタを前記命令のアドレスに設定する
ように構成される、請求項10に記載のプロセッサ。
【請求項１４】
前記コントローラが、
プロセッサの状態情報を前記エントリに記憶することであって、前記状態情報が前記パイプラインが前記命令を処理する時点のものである、記憶することと、
前記エントリに記憶される前記現在値が前記設定値と一致しない場合、前記エントリから前記状態情報を取り出して、前記状態情報により示される状態に前記プロセッサを回復することとを行うように構成される、請求項13に記載のプロセッサ。
【請求項１５】
前記コントローラが、前記パイプラインに
前記現在値が第1の値である場合、前記命令を定義済みとして実行させ、
前記現在値が前記第1の値でない場合、前記命令を未定義として実行させる
ように構成される、請求項13に記載のプロセッサ。
【請求項１６】
前記コントローラが、前記パイプラインに
前記現在値が第1の値である場合、前記命令を定義済みとして実行させ、
前記現在値が前記第1の値でない場合、前記命令を未定義として実行させる
ように構成される、請求項10に記載のプロセッサ。
【請求項１７】
前記パイプラインが前記命令をコミットするとき、前記エントリを前記待ち行列から除去するように前記コントローラが構成される、請求項10に記載のプロセッサ。
【請求項１８】
前記命令がベクトル命令である、請求項10に記載のプロセッサ。
【請求項１９】
前記レジスタフィールドが1つまたは複数のフィールドを含む、請求項10に記載のプロセッサ。
【請求項２０】
レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するための手段であって、前記命令が書込み命令に依存し、前記書込み命令が前記レジスタフィールドに設定値を書き込むためのものであり、前記書込み命令を実行する前に前記命令が処理される手段と、
前記命令を待ち行列の中のエントリに記憶するための手段と、
前記レジスタフィールドの前記現在値を前記エントリに記憶するための手段と、
前記書込み命令を実行した後で、前記エントリを求めて前記待ち行列を検索するための手段と、
前記書込み命令を実行した後で、前記エントリに記憶された前記現在値を前記設定値と比較するための手段と
を備える、方法。
【請求項２１】
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、すべてのインフライト命令のパイプラインをフラッシュするための手段と、プログラムカウンタを、プログラムの順番で前記書込み命令後の次の命令のアドレスに設定するための手段と
をさらに備える、請求項20に記載の方法。
【請求項２２】
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、前記命令およびプログラムの順番で前記命令に続くすべてのインフライト命令のパイプラインをフラッシュするための手段と、プログラムカウンタを前記命令のアドレスに設定するための手段と
をさらに備える、請求項20に記載の方法。
【請求項２３】
プロセッサの状態情報を前記エントリに記憶するための手段であって、前記状態情報が前記命令が処理される時点のものである、手段と、
前記エントリに記憶される前記現在値が前記設定値と一致しない場合、前記エントリから前記状態情報を取り出すための手段と、前記状態情報により示される状態に前記プロセッサを回復するための手段と
をさらに備える、請求項22に記載の方法。
【請求項２４】
前記命令を処理するための前記手段が
前記現在値が第1の値である場合、前記命令を定義済みとして処理するための手段と、
前記現在値が前記第1の値でない場合、前記命令を未定義として処理するための手段と
をさらに備える、請求項20に記載の方法。
【請求項２５】
前記命令がコミットするとき、前記エントリを前記待ち行列から除去するための手段
をさらに備える、請求項20に記載の方法。
【請求項２６】
前記レジスタフィールドが1つまたは複数のフィールドを含む、請求項20に記載の方法。
【請求項２７】
前記命令がベクトル命令である、請求項20に記載の方法。
【請求項２８】
コントローラに以下の方法を実施させる命令を記憶した非一時的なコンピュータ可読記録媒体であって、前記方法が、
レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するステップであって、前記命令が書込み命令に依存し、前記書込み命令が前記レジスタフィールドに設定値を書き込むためのものであり、前記書込み命令を実行する前に前記命令が処理される、ステップと、
前記命令を待ち行列の中のエントリに記憶するステップと、
前記レジスタフィールドの前記現在値を前記エントリに記憶するステップと、
前記書込み命令を実行した後で、前記エントリを求めて前記待ち行列を検索するステップと、
前記書込み命令を実行した後で、前記エントリに記憶された前記現在値を前記設定値と比較するステップと
を含む、非一時的なコンピュータ可読記録媒体。
【請求項２９】
前記方法が、
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、すべてのインフライト命令のパイプラインをフラッシュするステップと、プログラムカウンタを、プログラムの順番で前記書込み命令後の次の命令のアドレスに設定するステップと
をさらに含む、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【請求項３０】
前記処理が、
前記エントリに記憶された前記現在値が前記設定値と一致しない場合に、前記命令およびプログラムの順番で前記命令に続くすべてのインフライト命令のパイプラインをフラッシュするステップと、プログラムカウンタを前記命令のアドレスに設定するステップと
をさらに含む、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【請求項３１】
前記方法が、
プロセッサの状態情報を前記エントリに記憶するステップであって、前記状態情報が前記命令が処理される時点のものである、ステップと、
前記エントリに記憶される前記現在値が前記設定値と一致しない場合、前記エントリから前記状態情報を取り出すステップと、前記状態情報により示される状態に前記プロセッサを回復するステップと
をさらに含む、請求項30に記載の非一時的なコンピュータ可読記録媒体。
【請求項３２】
前記命令を処理するステップが、
前記現在値が第1の値である場合、前記命令を定義済みとして処理するステップと、
前記現在値が前記第1の値でない場合、前記命令を未定義として処理するステップと
をさらに含む、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【請求項３３】
前記方法が、
前記命令がコミットするとき、前記エントリを前記待ち行列から除去するステップ
をさらに含む、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【請求項３４】
前記レジスタフィールドが1つまたは複数のフィールドを含む、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【請求項３５】
前記命令がベクトル命令である、請求項28に記載の非一時的なコンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマイクロプロセッサに関し、より詳細には、その挙動がコンテキスト依存性である命令を処理するときの、マイクロプロセッサの性能を最適化することに関する。
【背景技術】
【０００２】
いくつかの現代のマイクロプロセッサアーキテクチャのための命令の組は、その挙動がコンテキスト依存性である命令(たとえば、浮動小数点ベクトル命令)を含む。ベクトル命令(または演算)は、1つまたは複数のデータベクトルに作用して結果をもたらし、結果がやはりベクトルである場合がある。ベクトル命令は、SIMD(Single Instruction Multiple Data)演算と呼ぶ場合もある。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
パイプライン化され、アウトオブオーダ実行アーキテクチャを有するマイクロプロセッサが、コンテキスト依存性命令を高性能で実装することが望ましい。
【課題を解決するための手段】
【０００４】
本発明の実施形態は、ベクトル化された浮動小数点命令の性能最適化、より一般的には、1つまたは複数のレジスタフィールドへの書込み命令に依存する命令の性能を最適化するシステムおよび方法を対象とし、ここで、1つまたは複数のレジスタフィールドが、命令についてのコンテキストを決定する。
【０００５】
実施形態では、方法は、レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するステップであって、命令が書込み命令に依存し、書込み命令がレジスタフィールドに設定値を書き込むためのものであり、書込み命令を実行する前に命令が処理される、ステップと、命令を待ち行列の中のエントリに記憶するステップと、レジスタフィールドの現在値をエントリに記憶するステップと、書込み命令を実行した後で、エントリを求めて待ち行列を検索するステップと、書込み命令を実行した後で、エントリに記憶された現在値を設定値と比較するステップとを含む。
【０００６】
別の実施形態では、プロセッサは、フィールドを有するレジスタ、待ち行列、パイプライン、およびコントローラを含む。コントローラは、パイプラインに、レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理することであって、命令は書込み命令に依存し、書込み命令はレジスタフィールドに設定値を書き込むためのものである、処理することと、ベクトル命令を待ち行列中のエントリに記憶することと、レジスタフィールドの現在値をエントリに記憶することと、パイプラインが書込み命令を実行した後で、エントリを求めて待ち行列を検索することと、パイプラインが書込み命令を実行した後で、エントリに記憶された現在値を設定値と比較することとを行わせるように構成される。
【０００７】
別の実施形態では、方法は、レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するための手段であって、書込み命令がレジスタフィールドに設定値を書き込むためのものであり、書込み命令を実行する前に命令が処理される、手段と、命令を待ち行列の中のエントリに記憶するための手段と、レジスタフィールドの現在値をエントリに記憶するための手段と、書込み命令を実行した後で、エントリを求めて待ち行列を検索するための手段と、書込み命令を実行した後で、エントリに記憶された現在値を設定値と比較するための手段とを含む。
【０００８】
別の実施形態では、非一時的なコンピュータ可読媒体が命令を記憶しており、命令を実行すると、命令は、コントローラに、レジスタフィールドの現在値により決定されるコンテキスト内で命令を処理するステップであって、命令が書込み命令に依存し、書込み命令がレジスタフィールドに設定値を書き込むためのものであり、書込み命令を実行する前に命令が処理される、ステップと、命令を待ち行列の中のエントリに記憶するステップと、レジスタフィールドの現在値をエントリに記憶するステップと、書込み命令を実行した後で、エントリを求めて待ち行列を検索するステップと、書込み命令を実行した後で、エントリに記憶された現在値を設定値と比較するステップと含む方法を実施させる。
【０００９】
添付図面は、本発明の実施形態の記載を支援するために提示され、実施形態の例示のためにのみ提供されており、それを制限するものではない。
【図面の簡単な説明】
【００１０】
【図１】実施形態に従うプロセッサの抽象概念図である。
【図２Ａ】実施形態に従う、コンテキストを検査し、修復する方法を図示する図である。
【図２Ｂ】別の実施形態に従う、コンテキストを検査し、修復する方法を図示する図である。
【図３】実施形態が応用され得る、通信システムを図示する図である。
【発明を実施するための形態】
【００１１】
本発明の態様は、本発明の特定の実施形態を対象とする以下の記載および関連する図に開示される。代替実施形態は、本発明の範囲から逸脱することなく考案することができる。加えて、本発明のよく知られる要素は、本発明の関連する詳細を不明瞭にしないように、詳細には記載しない、または省略することとする。
【００１２】
「例示的な」という用語は、本明細書では、「例、事例、または説明として働く」ということを意味するように使用される。本明細書で「例示的な」と記載される任意の実施形態は、必ずしも、他の実施形態よりも好ましいまたは有利であると解釈されるべきでない。同様に、「本発明の実施形態」という用語は、本発明のすべての実施形態が議論される特徴、利点または動作モードを含むことを必要としない。
【００１３】
本明細書で使用される用語法は、特定の実施形態を記載することのみのためであり、本発明の実施形態を制限することを意図していない。本明細書で使用するとき、単数形「a」、「an」、および「the」は、文脈がそうでないと明らかに示さない限り、複数形を同様に含むことを意図している。「備える、含む(comprises)」、「備えている、含んでいる(comprising)」、「含む(includes)」および/または「含んでいる(including)」という用語は、本明細書で使用するとき、明記される特徴、整数、ステップ、動作、要素、および/または構成要素の存在を指定するが、1つまたは複数の他の特徴、整数、ステップ、動作、要素、構成要素、および/またはそれらのグループの存在または追加を排除しないことをさらに理解されよう。
【００１４】
さらに、多くの実施形態は、たとえばコンピューティングデバイスの要素によって実施されるアクションのシーケンスの観点から記載される。本明細書で記載される様々なアクションは、専用回路(たとえば、特定用途向け集積回路(ASIC))、1つまたは複数のプロセッサにより実行されるプログラム命令、または両方の組合せにより実施できることが認識されよう。加えて、本明細書に記載されるこれらのアクションのシーケンスは、実行の際に関連するプロセッサに本明細書に記載される機能性を実施させることになる、コンピュータ命令の対応する組をその中に記憶させた、コンピュータ可読記憶媒体の任意の形式で完全に具現化されると考えることができる。したがって、本発明の様々な態様は、そのすべてが特許請求される主題の範囲内であることが企図された、いくつかの異なる形式で具現化することができる。加えて、本明細書に記載される実施形態の各々について、任意のそのような実施形態の対応する形式は、たとえば、記載されるアクションを実施する「ように構成されるロジック」として本明細書に記載することができる。
【００１５】
実施形態を記載することを容易にするため、図1に図示されるプロセッサ100の抽象概念図が最初に参照され、そこでは、簡潔にするため、プロセッサ中に従来見出される機能ユニットすべては示されない。実施形態が応用されるプロセッサ100は、スーパースカラ、アウトオブオーダアーキテクチャを有する場合があるが、これは必要条件ではない。しかし、図1に図示されるプロセッサ100が、命令を投機的に実行または処理し、投機的な実行または処理が正しくないことが見出された場合に適切に回復する能力を有することが仮定される。たとえば、多くのプロセッサは、分岐命令の目標アドレスを予測することにより分岐命令を投機的に実行し、予測した目標アドレスが正しくないことが後に見出された場合に、正しい命令フローを適切に回復および実行する能力を有する。
【００１６】
命令フェッチステージ104、命令デコードステージ106、レジスタリネームステージ108、および命令待ち行列およびディスパッチステージ110を含むパイプライン102が図1に示される。実際には、たとえば、命令がコミット(リタイア)するときに、メモリ位置またはアーキテクチャ上のレジスタに結果を書き込むための様々なステージなど、より多くのステージがパイプライン中に存在してよいが、簡単のために4つのステージのみがパイプライン102に図示される。コントローラ112が、パイプライン102中のアクションを制御する。(ここで、コミットおよびリタイアという用語は同義語として使用され、いわば、命令がコミットすることとは、命令がリタイアすることを意味するとも受け取ることができる。)
【００１７】
命令およびデータは、メモリ階層の部分と考えることができる、様々なキャッシュおよびオフチップメモリを備えるメモリ記憶装置から取り出され、また、メモリ記憶装置に書き込まれる。114と標示される機能ブロックは、このメモリ階層を要約しており、議論しやすくするため、1つまたは複数のメモリ機能ユニットは、簡単に、メモリ階層114と呼ぶ場合がある。メモリ階層114を作るメモリのうちのいくつかは、コントローラ112または他の機能ユニットと一体化してよく、非一時的なコンピュータ可読記憶媒体と呼ぶ場合がある。いくつかの実施形態では、メモリ階層114は、コントローラ112または他の機能ユニットが本明細書に記載されるような様々なアクションを実行できる、記憶された命令を含むことができる。
【００１８】
図1に図示される他の機能ユニットは、物理的なレジスタファイル116、実行ユニット118の組、およびリオーダバッファ120である。リオーダバッファ120は、アウトオブオーダ実行を容易にし、いくつかの実施形態ではサーキュラバッファとして実装することができる。そこでは、命令が命令待ち行列およびディスパッチステージ110に入ると、命令がバッファに入り、命令がコミット(リタイア)すると、リオーダバッファ120を出る。命令は、命令がリオーダバッファ120に入る順番でコミットする。
【００１９】
投機的命令情報待ち行列(SIIQ: speculative instruction information queue)122と標示される別のバッファが使用されて、投機的に予測されるコンテキスト内のパイプライン102中で早期に処理される命令、ならびに、投機的に処理されたインフライト(in-flight)命令が正しい命令フローの部分でないことが後に見出され、したがってコミットするべきでない場合、プロセッサ100の状態を復元するために必要な可能性がある、様々なレジスタ値および場合によっては状態情報を記憶する。このバッファは、投機的命令情報待ち行列と呼ばれ、後でより詳細に議論される。
【００２０】
ベクトル処理は、音声または画像処理など、多くの信号処理用途で重要な能力である。ベクトル処理命令は、時々、SIMD(Single Instruction Multiple Data、単一命令複数データ)命令と呼ばれ、ここで、単一の命令が複数のデータに作用する。ベクトルは、連続する要素間に一定の刻み幅を有するメモリ位置の範囲と考えることができる。別の観点では、ベクトルは、連続する要素間に一定の刻み幅を有するレジスタ位置の範囲と考えることができる。たとえば、物理的なレジスタの配列{Ri、i=0, 1, 2, …, 15}について、ベクトルは、刻み幅が2である、レジスタ位置R{(i)、i=0, 2, 4, …, 14}からなってよい。
【００２１】
ロード-ストアアーキテクチャのプロセッサでは、ベクトルの要素は、ロード命令でレジスタの中にロードされ、その後、ベクトル命令に従って操作される。たとえば、ベクトル加算命令は、第1の組のソースレジスタ中の値を、第2の組のソースレジスタ中の値に加算し、結果を宛先レジスタの組に書き込むことができる。具体的な例として、第1の組のソースレジスタ中の値{RX(i) i=0, 1, 2, 3}が、第2の組のソースレジスタ中の値{RY(i) i=0, 1, 2, 3}に加算され、結果が、宛先レジスタの組{RZ(i) i=0, 1, 2, 3}の中に書き込まれる場合があり、各i=0, 1, 2, 3について、レジスタRZ(i)の値は、レジスタRX(i)およびRY(i)中の値の合計である。この具体例では、ベクトルの長さは4であり、刻み幅は1である。
【００２２】
ベクトル処理で利用されるソースレジスタおよび宛先レジスタのファイルは、機能ユニット116により包含される物理的なレジスタとして、または図1に明示的には示されない他の物理的なレジスタファイルとして考えることができる。
【００２３】
ベクトル命令により消費されるベクトル長、刻み幅、および様々な他のパラメータは、1つまたは複数の制御レジスタ中に記憶される。そのような制御レジスタの例は、図1で124と標示され、FPSCR(Floating Point Status and Control Register、浮動小数点状態制御レジスタ)124と呼ばれる。パラメータをFPSCR124に書き込む(コピーする)命令は、(プログラムの順番で)必要なパラメータに依存するベクトル命令の前に、コードのブロックに挿入される。この場合、FPSCR124への書込み命令に対し、これらのベクトル命令の依存性が存在する。
【００２４】
具体的には、ベクトル対応プロセッサ用のいくつかの命令の組は、FPSCR124中の1つまたは複数のフィールドへ書き込む書込み命令であって、これらのフィールド中の値に基づいてベクトル命令の挙動を設定する書込み命令を含む。刻み幅または長さフィールドは、FPSCR124中に含まれ得る例示的なフィールドであるが、他のフィールドも含まれ得る。これら1つまたは複数のフィールドは、図1で125と標示される。議論しやすくし、普遍性を失わないため、125をフィールドと呼ぶが、FPSCR124の、2つ以上のビット、また2つ以上のフィールドに及んでよい。
【００２５】
たとえば、フィールド125に書き込まれる非ゼロ値は、ベクトル命令実行が未定義の命令であり、その結果ベクトル命令実行が試みられる場合にプロセッサ100が割込ハンドラを実行するコンテキストを規定することができる。いくつかの実施形態では、フィールド125が非ゼロ値に設定される場合、ベクトル命令の組の適切なサブセットのみが未定義となる。すなわち、いくつかの実施形態では、FPSCR124中のフィールド125を無視するいくつかのベクトル命令が存在する場合がある。
【００２６】
議論しやすくするため、書込み命令とは、FPSCR124中のフィールド125に書き込む命令のことを言うことにし、フィールド125は、設定フィールドまたは設定値と呼ばれる。
【００２７】
書込み命令およびベクトル命令などの依存性命令が両方ともパイプライン102中にあるとき、書込み命令が設定フィールド125に書き込むことができる前に、ベクトル命令のためのオペランドが利用可能であることが生じ得る。たとえば、書込み命令が設定フィールド125に書き込むべき値は、依存性ベクトル命令が実行する準備ができたときに、実行がまだ完了していない別の命令の結果である可能性がある。依存性障害を回避するため、いくつかの従来技術のプロセッサはコンテキスト同期を実装する場合があり、これにより、(プログラムの順番で)書込み命令に続くすべてのベクトル命令は、書込み命令がコミットするまで実行されない。いくつかの他の従来技術のプロセッサは、ベクトル命令をデコードするとき、(プログラムの順番で)すべての前の書込み命令がコミットされるまで、ホールドを導入する場合がある。しかし、そのような方法は、性能を劣化させ、パイプラインをあふれさせる可能性がある。
【００２８】
性能を改善するため、実施形態は、依存性命令の投機的な処理および実行を実施する。この実施形態では、依存性命令はベクトル命令であるが、当業者なら、限定するものではないが、設定可能特権またはセキュリティ依存性を有する命令、または特定アーキテクチャのレジスタにアクセスする命令を含む、他のタイプの依存性命令が本開示の範囲内であることを理解するであろう。より具体的には、実施形態は、FPSCR124の現在値により決定されるコンテキスト内でベクトル命令を処理することを開始する。書込み命令がまだコミットされておらずin-flight状態であるが、(プログラムの順番で)後の依存性ベクトル命令が処理を開始することが可能である場合、その依存性ベクトル命令は、その処理の時におけるFPSCR124の現在の状態に基づいて処理される。
【００２９】
書込み命令に依存するベクトル命令が処理されると、ベクトル命令を処理する時におけるFPSCR124の提示するコンテキスト(すなわち、設定フィールド125の値)が正しいコンテキストでないことが生じ得る。たとえば、提示するコンテキストはベクトル命令が未定義として処理されるようなものであるが、実際には、現在のコンテキストが正しかった場合に定義済みとしてベクトル命令が処理されなければならない場合があり得る。代替的に、ベクトル命令を処理する時におけるFPSCR124の提示するコンテキストは、ベクトル命令が定義済みであるようなものであるが、それにもかかわらず、正しいコンテキストで処理されるときにベクトル命令が未定義であるべき場合が生じ得る。
【００３０】
したがって、ベクトル命令が正しくないコンテキストで処理されたことが決定される場合(ここで、コンテキストは、パイプライン102がベクトル命令を処理することを開始するときの設定フィールド125の値のことを言う)、実施形態は、最終的にベクトル命令が正しいコンテキストで処理および実行されるように回復手順を実施するべきである。
【００３１】
回復プロセスを容易にするため、実施形態は、投機的命令情報待ち行列122を使用する。この待ち行列は、分岐命令待ち行列(BIQ: branch instruction queue)と同じ構造を有してよく、いくつかの実施形態では、投機的命令情報待ち行列122は、BIQ自体であってよいが、分岐命令に加えてベクトル命令がやはり待ち行列に入れられる。いくつかの実施形態では、限定するものではないが、命令のアドレスVopp127、および所望のフェッチアドレスにおける実行を再開するために必要な、任意の他のコンテキスト非依存性情報を含む状態情報も含まれて、回復プロセス期間にプロセッサ100が正しい状態にすることを助けることができる。実施形態は、機能ユニット122をBIQと呼ぶことで記載することができたが、構造をBIQに制限しないように異なる用語を使用することが有用であり、したがって、待ち行列は、投機的命令情報待ち行列と呼ばれる。
【００３２】
図1に図示される例示的な実施形態では、リオーダバッファ120中の126と標示される命令VMSRは、FPSCR124中の設定フィールド125に値を書き込む命令を示す。(VMSRという用語法は、ARM命令の組から取られており、そこでは、VMSRは、システムレジスタからFPSCRに内容を伝達するための命令を表すことができる。この用語法は、単に便宜上借用され、本実施形態は、多くの異なるアーキテクチャおよび命令の組において応用され得る。)127と標示される、リオーダバッファ120中の後続の命令Voppは、命令VMSR126に依存するベクトル命令を示す。128と標示される矢印は、この依存性を表す。
【００３３】
パイプライン102が命令Vopp127を処理することを開始すると、命令Vopp127は、投機的命令情報待ち行列122中に配置される。130と標示される矢印は、132と標示されるエントリとして示される、投機的命令情報待ち行列122中への配置を示す。エントリ132は、2つの部分を含み、132aと標示される部分は、ベクトル命令およびコンテキストフィールド133を含み、132bと標示される部分は、状態情報を含む。いくつかの実施形態は、状態情報を含まない場合がある。たとえばエントリ132などのエントリ中に状態情報を記憶するいくつかの実施形態では、状態情報は、ベクトル命令が正しくないコンテキストで処理されたと決定されるとき、回復プロセス期間にプロセッサ100を正しい状態に戻すために使用される。エントリ132中のコンテキストフィールド133は、エントリ132について関連する命令Vopp127が処理されたコンテキストを示す。エントリに関連するベクトル命令がコミットする、またはフラッシュされると、そのエントリは、投機的命令情報待ち行列122から除外される。
【００３４】
書込み命令(「書込み」とはFPSCR124への書込みのことを言う)がin-flight状態である時間のいくつかの時点において、何らかの依存性ベクトル命令が正しくないコンテキストで処理されたかどうかについて、決定される。たとえば、命令VMSR126と命令Vopp127との間に介在する書込み命令がない場合、命令Vopp127は、命令VMSR126に依存する場合があり、命令Vopp127がリタイアする前に命令Vopp127が正しいコンテキストで処理されたことを確認するための配慮をするべきである。
【００３５】
いくつかの実施形態では、正しいコンテキストについての決定は、書込み命令がコミットするときに行われる。図1に図示される例で続けると、命令VMSR126がリオーダバッファ120のトップ(または先頭)であり、コミットする用意ができているとき、命令VMSR126が設定フィールド125に書き込んだ値は、依存性のin-flightなベクトル命令を有する投機的命令情報待ち行列122中の各エントリについてのコンテキストフィールドと比較される。たとえば、コンテキストフィールド133の値が、命令VMSR126からの結果である設定フィールド125についての値と比較され、エントリ132中の命令Vopp127が正しいコンテキストで処理されたかどうかを決定する。投機的命令情報待ち行列122中のベクトル命令は、介在する書込み命令がない場合、命令VMSR126に依存する。
【００３６】
いくつかの実施形態では、命令VMSR126がコミットする用意ができているが、投機的命令情報待ち行列122中の依存性ベクトル命令が正しくないコンテキストで処理されたことが見出された場合、命令VMSR126がリタイアされ(これは、命令VMSR126の前のすべての命令もリタイアされたことを暗示する)、すべての命令がパイプラインおよびリオーダバッファ120からフラッシュされ、プログラムカウンタ134は、プログラムの順番で命令VMSR126に対して直後の命令のアドレスでロードされる。この場合、状態情報は、投機的命令情報待ち行列122中に記憶する必要がない。というのは、命令VMSR126がリタイアするときアーキテクチャレジスタのすべてが正しい状態であり、プログラム制御が次の順番の命令で開始するからである。
【００３７】
いくつかの実施形態は、正しくないコンテキストで処理された可能性がある依存性ベクトル命令を求めて投機的命令情報待ち行列122を検索する前に、命令VMSR126がリオーダバッファ120のトップに到達するのを待たない場合がある。たとえば、いくつかの実施形態では、命令VMSR126が実行する(ここで、命令VMSR126の実行とは、FPSCR124へ書き込むべき値が知られていることを意味する)と、命令VMSR126がコミットする用意ができていない可能性がある場合でさえ、投機的命令情報待ち行列122が、不正に処理された依存性ベクトル命令を求めて検索される。
【００３８】
別の実施形態では、命令Vopp127などのSIIQ122中の命令がリタイアする用意ができている(たとえば、コミットする用意ができている、または未定義割込をする用意ができているのいずれかである)とき、命令Vopp127はコンテキストフィールド133を、設定フィールド125中のアーキテクチャコンテキストに対して比較する。コンテキストフィールド133と設定フィールド125が一致する場合、命令Vopp127は、従来のやり方でリタイアする。しかし、コンテキストフィールド133と設定フィールド125が一致しない場合、回復手順が実施される。たとえば、パイプラインおよびリオーダバッファが依存性命令Vopp127および依存性命令に続くすべての命令の両方をフラッシュし、プログラムカウンタ134が依存性命令Vopp127をフェッチするように設定され、状態情報132bが正しい状態を復元するために使用される。
【００３９】
いくつかの実施形態では、記載される検査を実施するため、命令Vopp127がリタイアする用意ができるまで待つ必要がない場合がある。命令Vopp127がリタイアする用意ができる前に(命令VMSR126などの命令によろうとその他によろうと)設定フィールド125への未解決の可能な更新がない場合、命令Vopp127は、設定フィールド125をコンテキストフィールド133と比較して、必要な場合、命令Vopp127がリタイアする用意ができるまで待つことなく回復手順を実施することができる。
【００４０】
投機的命令情報待ち行列122は、プロセッサ100が不正に実行された分岐命令から回復することができるように、分岐命令および関連する状態情報を記憶するためにも使用することができる。これが、図1にエントリ136を含む理由である。(エントリ136は、状態情報以外の情報を含み得るが、議論しやすくするためエントリ136を、詳細には記載しない。というのは、当技術分野でよく知られているからである。)この場合、投機的命令情報待ち行列122は、前に議論したように、BIQの機能性を含む。しかし、実施形態は、投機的命令情報待ち行列122中にBIQの機能性を含まない場合があるが、投機的命令情報待ち行列122を実装するために使用される物理的バッファとは別個の、BIQのための別の物理的バッファを採用することができる。
【００４１】
図2Aは、上で議論した1つまたは複数の実施形態により採用される方法を図示する。ボックス202で示されるように、コンテキスト依存性命令(ベクトル命令など)が処理され、投機的命令情報待ち行列122中に配置される。コンテキスト依存性命令は、(プログラムの順番で)前の書込み命令が実行していないにもかかわらず処理される。ここで、書込み命令は、設定フィールド125に値を書き込む命令である。命令は、命令が処理される時に、設定フィールド125の値により決定されるコンテキスト内で処理される。
【００４２】
命令は、エントリの部分として、投機的命令情報待ち行列122中に記憶される。ここで、エントリは、命令が処理されたときの設定フィールド125の値に等しい値を有するコンテキストフィールドも含む。
【００４３】
設定フィールド125に書き込む書込み命令の実行後(ボックス204)、投機的命令情報待ち行列122は、その書込み命令に依存する命令を有するエントリを求めて検索される(ボックス206)。この検索は、書込み命令がリオーダバッファ120の先頭となる前に実施することができ、または書込み命令は、書込み命令がリオーダバッファ120の先頭に到達してコミットするときに実施することができる。
【００４４】
そのようなエントリが見出されない場合、特殊なアクションは行わず、図2A中の決定208および楕円210に示されるように、パイプラインは従来のやり方で進む。しかし、書込み命令に依存する命令を含むエントリが見出される場合、決定211において、命令が正しいコンテキストで処理されたかどうかを決定するために、コンテキストフィールド133の値が、書込み命令に関連する設定フィールド値と比較される。命令が正しいコンテキストで処理された場合、プロセスフローは楕円210に戻り、特殊なアクションを行わないことを示す。
【００４５】
しかし、命令が正しくないコンテキストで処理された場合、ボックス212に示されるように、正しくないコンテキスト中で命令を処理したことからプロセッサ100を適切に回復するため、様々なアクションを行う。ボックス212では、すべてのインフライト命令は、パイプライン102およびリオーダバッファ120からフラッシュされ、プログラムカウンタ134は、書込み命令の(プログラムの順番で)直後の命令がフェッチされるように設定される。
【００４６】
図2Bは、上で議論した実施形態と別の実施形態により採用される方法を図示する。ボックス202で示されるように、コンテキスト依存性命令(ベクトル命令など)が処理され、投機的命令情報待ち行列122中に配置される。コンテキスト依存性命令は、(プログラムの順番で)前の書込み命令が実行していないにもかかわらず処理される。ここで、書込み命令は、設定フィールド125に値を書き込む命令である。命令は、命令が処理される時に、設定フィールド125の値により決定されるコンテキスト内で処理される。
【００４７】
命令は、エントリの部分として、投機的命令情報待ち行列122中に記憶される。ここで、エントリは、命令が処理されたときの設定フィールド125の値に等しい値を有するコンテキストフィールドも含む。
【００４８】
コンテキスト依存性命令が実行されたコンテキストが正しいかどうかの検査は、2つの異なるやり方で実施することができる。一実施形態では、ボックス224において、コンテキスト依存性命令がリタイアする用意ができているとき、方法は、ボックス211へ進み、検査を実施する。別の実施形態では、ボックス226において、コンテキスト依存性命令は、(命令VMSR126などの命令によろうとその他によろうと)設定値125に何らかの可能な未解決の更新があるかどうかを検査して決定する。未解決の可能な更新がある場合、方法は、ボックス226に戻って待機する。未解決の可能な更新がない場合、方法は、ボックス211に進み、検査を実施する。
【００４９】
ボックス211では、命令が正しいコンテキストで処理されたかどうかを決定するために、コンテキストフィールド133の値が、書込み命令に関連する設定フィールド値と比較される。命令が正しいコンテキストで処理された場合、プロセスフローは楕円210に戻り、特殊なアクションを行わないことを示す。
【００５０】
しかし、命令が正しくないコンテキストで処理された場合、ボックス214に示されるように、正しくないコンテキスト中で命令を処理したことからプロセッサ100を適切に回復するため、様々なアクションを行う。ボックス214では、命令および(プログラムの順番で)命令の直後のすべてのインフライト命令は、パイプライン102およびリオーダバッファ120からフラッシュされ、プログラムカウンタ134は、命令がフェッチされるべき次の命令であり、命令でエントリに記憶される状態情報が、命令を処理するためプロセッサ100の状態を正しい状態に回復させるために使用されるように設定される。
【００５１】
いくつかの実施形態では、コントローラ112は、ファームウェア、またはメモリ階層114などの非一時的なコンピュータ可読媒体に記憶される命令を実行することにより、図2Aまたは図2Bの方法を実行することができる。
【００５２】
図3は、実施形態が応用され得る、ワイヤレス通信システムを図示する。図3は、基地局304A、304B、および304Cを備えるワイヤレス通信ネットワーク302を図示する。図3は、306と標示される通信デバイスを示し、通信デバイスは、いわゆるスマートフォン、タブレット、またはコンピュータもしくはコンピュータシステムなどのセルラーフォンネットワークに好適な何らかの他の種類の通信デバイスなどのモバイルセルラー通信デバイスであってよい。通信デバイス306はモバイルである必要はない。図3の特定の例では、通信デバイス306は、基地局304Cと関連するセル内に配置される。矢印308および310は、それぞれアップリンクチャネルおよびダウンリンクチャネルを図式的に表し、それにより、通信デバイス306が基地局304Cと通信する。
【００５３】
実施形態は、たとえば、通信デバイス306と、または基地局304Cと、または両方と関連するデータ処理システム中で使用することができる。図3は、本明細書に記載される実施形態が採用され得る多数の応用例の中の単に1つの応用例を図示する。
【００５４】
実施形態は、ベクトル命令、およびFPSCR124中の1つまたは複数のフィールドへのベクトル命令の依存性の文脈で記載されてきた。しかし、実施形態は、ベクトル命令に限定されず、それらの文脈について、レジスタ中の1つまたは複数のフィールドに依存する、他のタイプの命令において応用され得る。たとえば、実施形態は、リソースの生成とリソースに依存する消費との間のパイプラインに大きい広がりがあり、依存性が生成する状態へ比較的まれに更新があり、依存性を消費する命令について高い性能需要がある可能性がある、プロセッサアーキテクチャにおいて応用され得る。そのため、記載される実施形態は、予測方式のタイプとして見ることができ、ここで、依存性命令のコンテキストを規定する状態は、依存性命令により消費される状態である時と依存性命令がコミットする時との間で変化しないと予測される。ここで、状態の変化は、誤った予測をもたらす。これは、依存性が条件制限または目標のいずれかを含まず、非分岐命令を含む点で、分岐予測技法と類似しているが別個である。
【００５５】
様々な異なる技術および技法をいずれかを使用して、情報および信号を表すことができることを、当業者は了解するであろう。たとえば、上の記載を通して参照され得る、データ、命令、コマンド、情報、信号、ビット、シンボル、およびチップは、電圧、電流、電磁波、磁場もしくは粒子、光場もしくは粒子、またはそれらの任意の組合せにより表すことができる。
【００５６】
さらに、本明細書に開示される実施形態に関して記載される、様々な例示の論理的ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェアまたは両方の組合せとして実装できることを、当業者は了解するであろう。ハードウェアとソフトウェアのこの互換性を明確に示すため、様々な例示の構成要素、ブロック、モジュール、回路、およびステップが、一般的にそれらの機能性の点で上に記載されてきた。そのような機能性がハードウェアまたはソフトウェアとして実装されるかどうかは、特定の用途および全体的なシステムに課せられる設計制約に依存する。当業者は、各特定の用途について様々な様式で記載された機能性を実装することができるが、そのような実装判断は、本発明の範囲からの逸脱を引き起こすと解釈するべきでない。
【００５７】
本明細書に開示される実施形態に関して記載される方法、シーケンス、および/またはアルゴリズムは、ハードウェア中で直接、プロセッサにより実行されるソフトウェアモジュール中で、または2つの組合せで具現化することができる。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD-ROM、または当技術分野で知られている記憶媒体の任意の他の形で常駐することができる。例示的な記憶媒体は、プロセッサが記憶媒体から情報を読み込み、記憶媒体へ情報を書き込むことができるように、プロセッサと結合される。代替として、記憶媒体は、プロセッサと一体であってよい。
【００５８】
したがって、本発明の実施形態は、上に記載されたような方法を具現化するコンピュータ可読媒体を含むことができる。したがって、本発明は例示の例に制限されず、本明細書に記載される機能性を実施するための任意の手段は、本発明の実施形態に含まれる。
【００５９】
上記の開示が本発明の例示の実施形態を示す一方で、添付される請求項により規定されるような、本発明の範囲から逸脱することなく、本明細書に様々な変形および変更を行うことができることに留意されたい。本明細書に記載される本発明の実施形態に従う方法クレームの機能、ステップ、および/またはアクションは、任意の特定の順序で実施される必要はない。さらに、本発明の要素は、単数形で記載され、特許請求される場合があるが、単数形への制限が明示的に言及されない限り、複数形が意図される。
【符号の説明】
【００６０】
100  プロセッサ
102  パイプライン
104  命令フェッチステージ
106  命令デコードステージ
108  レジスタリネームステージ
110  命令待ち行列およびディスパッチステージ
112  コントローラ
114  メモリ階層
116  物理的なレジスタファイル、機能ユニット
118  実行ユニット
120  リオーダバッファ
122  投機的命令情報待ち行列、SIIQ
124  FPSCR
125  フィールド、設定フィールド
126  命令VMSR
127  命令Vopp
128  矢印
130  矢印
132  エントリ
133  コンテキストフィールド
134  プログラムカウンタ
136  エントリ
302  ワイヤレス通信ネットワーク
304A  基地局
304B  基地局
304C  基地局
306  通信デバイス
308  矢印
310  矢印
【図１】
2016512908.tif 000003
【図２Ａ】
2016512908.tif 000004
【図２Ｂ】
2016512908.tif 000005
【図３】
2016512908.tif 000006
【国際調査報告】
2016512908.tif 000007
2016512908.tif 000008