(57)【特許請求の範囲】
【請求項１】
コンピュータによって実行可能な命令からなるソフトウエアプログラムを組み入れ、コンピュータによって読出し可能なコンピュータプログラム記憶媒体であって、前記コンピュータが、命令をプリフェッチするための方法を実行するためのマイクロプロセッサを含み、前記命令をプリフェッチするための方法が、
シフトレジスタ内の予め選択されたビット位置が予め選択された論理値に設定され、かつ前記マイクロプロセッサが、プリフェッチ命令アドレスの受け入れ準備ができているとき、
前記プリフェッチ命令アドレスをアドレスレジスタへ書き込むステップと、
プリフェッチが命令キャッシュに発行されるステップと、
前記プリフェッチ命令アドレスを、次のプリフェッチ命令アドレスのアドレスの値にインクリメントするステップと、
前記命令キャッシュが前記プリフェッチを実行したとき、
前記シフトレジスタが左側入力と右側入力とを有し、各入力が前記シフトレジスタ内に論理値をシフトする能力を有していて、前記予め選択された論理値の補数を前記左側入力において前記シフトレジスタ内にシフトするステップと、
前記マイクロプロセッサが前記命令キャッシュ内のキャッシュラインからの最後の命令をフェッチするとき、前記予め選択された論理値に等しい値を、前記右側入力において前記シフトレジスタ内にシフトするステップとを含む、コンピュータプログラム記憶媒体。
【請求項２】
命令をプリフェッチするためのコンピュータが使用可能な方法であって、
シフトレジスタ内の予め選択されたビット位置が予め選択された論理値に設定され、マイクロプロセッサが、プリフェッチ命令アドレスを受け入れる準備ができているとき、
前記プリフェッチ命令アドレスをアドレスレジスタへ書き込むステップと、
プリフェッチが命令キャッシュに発行されるステップと、
前記プリフェッチ命令アドレスを、次のプリフェッチ命令アドレスのアドレスの値にインクリメントするステップと、
前記命令キャッシュがプリフェッチを実行したとき、
前記シフトレジスタが左側入力と右側入力とを有し、各入力が前記シフトレジスタ内に前記論理値をシフトする能力を有していて、前記予め選択された論理値の補数を前記左側入力において前記シフトレジスタ内にシフトするステップと、
前記マイクロプロセッサが前記命令キャッシュ内のキャッシュラインからの最後の命令をフェッチするとき、前記予め選択された論理値に等しい値を、前記右側入力において前記シフトレジスタ内にシフトするステップとを含む、コンピュータが使用可能な方法。
【請求項３】
命令をプリフェッチするための装置であって、
入力および出力を有するインクリメンタと、
ＳＥＴ  ＡおよびＳＥＴ  Ｂ制御ポートと、入力ＩＮＰＵＴ  ＡおよびＩＮＰＵＴ  Ｂと、出力とを有するアドレスレジスタであって、そのアドレスレジスタの前記出力は、前記インクリメンタの前記入力に接続され、前記インクリメンタの前記出力は前記ＩＮＰＵＴ  Ｂに接続される、アドレスレジスタと、
左側入力と、右側入力と、２つ以上のビット位置とを含むシフトレジスタであって、そのシフトレジスタは、ＳＥＴ  Ｂを介して前記アドレスレジスタに接続され、各入力が、論理値を前記シフトレジスタ内にシフトする能力を有し、プロセッサ制御回路によってプリフェッチ条件が検出されたとき、前記アドレスレジスタは前記ＩＮＰＵＴ  Ａを介して、前記プリフェッチ条件に関連するターゲット命令アドレスを受け入れる能力を有しており、前記シフトレジスタが、前記左側入力に接続されるビット位置を前記予め選択された論理値の補数に、かつ前記シフトレジスタの全ての他のビット位置を前記予め選択された論理値に初期化されることができ、前記シフトレジスタ内の予め選択されたビット位置が前記予め選択された論理値に設定され、かつマイクロプロセッサが前記プリフェッチ命令アドレスを受け入れる準備ができているとき、前記ＳＥＴ  Ｂが前記アドレスレジスタに格納されたアドレスの前記インクリメンタによるインクリメントをイネーブルにし、命令キャッシュがプリフェッチを実行したとき、前記シフトレジスタは前記予め選択された論理値の前記補数を前記左側入力において前記シフトレジスタ内にシフトする能力を有し、前記マイクロプロセッサが前記命令キャッシュのキャッシュラインからの最後の命令をフェッチするとき、前記シフトレジスタは、前記予め選択された論理値に等しい値を、前記右側入力において前記シフトレジスタ内にシフトする能力を有する、シフトレジスタとを含む、命令をプリフェッチするための装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はマイクロプロセッサに関し、より詳細にはプリフェッチ性能を最適化するための方法および装置に関する。
【０００２】
【従来の技術】
最近のマイクロプロセッサは典型的には命令プリフェッチ処理を実施する。プリフェッチ処理は、プロセッサハードウエアがキャッシュのうちのより高いレベルから、あるいはメモリから命令を命令キャッシュにロードあるいはプリフェッチ（先取り）することを試みるための機構である。命令キャッシュへのロードが、プロセッサが命令をフェッチする時点より前に行われる場合には、キャッシュミスおよび関連する性能の犠牲は生じないであろう。これらの各プリフェッチ動作は、多数の命令を命令キャッシュへロードしようとするであろう。そのようにロードされる命令の数は典型的には、キャッシュライン内の命令の数に等しい。キャッシュラインは、キャッシュに対して読み出し、または書き込みされることができる基本的なデータの量と定義される。
【０００３】
命令プリフェッチは、プリフェッチ命令を介してプログラムによって、ハードウエアによって、またはその両方の組み合わせによって開始される。プリフェッチは、ほんのいくつかの命令をロードしようとする場合もあれば、長いシーケンスの命令をロードしようとする場合もある。問題は、長いシーケンスの命令をプリフェッチする際に生じる可能性がある。具体的には、制御流れの変化または分岐に起因して実行されることのない命令がプリフェッチされる場合がある。この状況では、２つの理由によって性能が劣化する可能性がある。第一に、各プリフェッチは、プロセッサおよびシステムリソース、例えばより高いレベルのキャッシュ、システムバスおよびメモリユニットを用いる必要がある。プリフェッチによって、これらのリソースが用いられる場合には、例えばロードあるいはストア動作のような他の動作がそれらのリソースを利用できなくなる。第二に、命令が命令キャッシュへプリフェッチされるとき、既存の命令を上書きすることによって、それらの命令のためのメモリ空間が作られなければならない。これらの既存の命令はワーキングセットの一部を形成する場合がある、すなわちそれらの命令は、近いうちにプロセッサによって必要とされる可能性がある。従って、多数の命令が命令キャッシュへプリフェッチされているが、まだプロセッサによってフェッチされていない場合に生じる過剰なプリフェッチ処理によって、リソースは無駄にされ、命令キャッシュ内の有用な命令は、一度も用いられることのない命令によって置き換えられる可能性がある。
【０００４】
従って、プロセッサが現在の命令ポインタから命令をフェッチしている場所より前にプリフェッチされる命令の数を制限する必要がある。命令ポインタより前のある一定の距離で、プロセッサがプリフェッチすることができる機構を設けることが望ましく、かつ大きな利点になるであろう。
【０００５】
【発明が解決しようとする課題】
かかるプリフェッチ処理が、フェッチングプロセスのレイテンシーを隠すことに役立つとともに、あまりにも前方でプリフェッチを行って、メモリバンド幅のようなリソースを無駄にし、命令キャッシュ内の有用な命令を置き換えてしまうようなことなしに、命令フェッチにおけるキャッシュミスを防ぐことである。
【０００６】
【課題を解決するための手段】
代表的な実施形態では、本発明は、マイクロプロセッサによる命令アドレスプリフェッチの比率を制御するための方法および装置を提供する。以前のプリフェッチ処理のための方法は、プロセッサが現在の命令ポインタから命令をフェッチしている場所より前にプリフェッチされる命令の数を制限することに注力しておらず、メモリバンド幅を無駄にし、命令キャッシュ内の有用な命令を置き換えてしまう可能性を生じていた。
【０００７】
代表的な実施形態では、シフトレジスタ内のビットを用いて、プリフェッチされている命令アドレスの数をカウントする。命令プリフェッチアドレスがプロセッサに発行されるとき、プリフェッチされたアドレスはレジスタに追加され、左側から論理「１」がシフトレジスタ内にシフトされる。プロセッサに各プリフェッチを発行することによって、命令のキャッシュラインは、命令キャッシュに書き込まれるようになる。キャッシュライン上の最後のプリフェッチされた命令がフェッチされるとき、右側から論理「０」がシフトレジスタ内にシフトされる。論理１が、シフトレジスタ内の予め選択されたビットにシフトされているとき、キャッシュライン上の最後の命令がプロセッサによってフェッチされ、シフトレジスタ内の予め選択されたビットに論理０がシフトされて戻されるまで、プリフェッチ処理は一時的に中断される。要するに、プリフェッチ時にはシフトレジスタに左側から論理１がシフトされ、命令ポインタが新しいキャッシュラインを横切るとき、シフトレジスタに右側から論理０がシフトされる。この機構は、プリフェッチされているが、まだプロセッサによってフェッチされていないキャッシュラインが、多くても「ｎ」個しかないことを確実にするであろう。言い換えると、左から「ｎ」番目のビットを検査することによって、プリフェッチは、命令ポインタの前の「ｎ」個のキャッシュラインに保持されることができる。
【０００８】
本特許明細書に記載される、従来のマイクロプロセッサプリフェッチ処理技術より優れた実施形態の主な利点は、過剰なプリフェッチ処理が排除されることである。プロセッサによってフェッチされているものよりも、必要以上に多くの命令を命令キャッシュにプリフェッチすることにより、メモリバンド幅のようなリソースが無駄にされ、命令キャッシュ内の有用な命令が、一度も用いられることのない可能性がある命令によって置き換えられる可能性がある。現在の命令ポインタの前のプリフェッチの数は厳密に制御される。それにより、本発明の実施形態は、貴重なシステムリソースを節約する。
【０００９】
【発明の実施の形態】
本発明の他の態様および利点は、例を用いて本発明の原理を示している添付図面とともに取り上げられる以下の詳細な説明から明らかになるであろう。
【００１０】
添付図面は、本発明をより十分に記載するために用いられ、当業者が本発明およびその固有の利点をより十分に理解するために用いることができる視覚的な表現を与える。これらの図面では、同様の参照番号は、対応する構成要素を同一視する。
【００１１】
例示のために図面に示されるように、本特許明細書は、マイクロプロセッサによる命令アドレスプリフェッチの比率を制御するための新規の方法に関連する。以前のプリフェッチ処理のための方法は、プロセッサが現在の命令ポインタから命令をフェッチしている場所より前にプリフェッチされる命令の数を制限することに注力しておらず、メモリバンド幅を無駄にし、命令キャッシュ内の有用な命令を置き換えてしまう可能性を生じていた。以下の詳細な説明およびいくつかの図面では、同様の構成要素は同様の参照番号で特定される。
【００１２】
代表的な実施形態では、シフトレジスタ内のビットを用いて、プリフェッチされているが、まだプロセッサによってフェッチされていない命令アドレスの数をカウントする。命令プリフェッチアドレスがプロセッサに発行されるとき、左側から論理「１」がシフトレジスタ内にシフトされる。プロセッサに各プリフェッチを発行することによって、命令のキャッシュラインは、命令キャッシュに書き込まれるようになる。キャッシュライン上の最後の命令がフェッチされるとき、右側から論理「０」がシフトレジスタ内にシフトされる。論理１が、シフトレジスタ内の予め選択されたビットへシフトされているとき、キャッシュライン上の最後の命令がプロセッサによってフェッチされ、シフトレジスタ内の予め選択されたビットへ論理０がシフトされて戻されるまで、プリフェッチ処理は一時的に中断される。要するに、プリフェッチ時にはシフトレジスタへ左側から論理１がシフトされ、命令ポインタが新しいキャッシュラインを横切るとき、シフトレジスタへ右側から論理０がシフトされる。この機構は、プリフェッチされているが、まだプロセッサによってフェッチされていないキャッシュラインが、多くても「ｎ」個しかないことを確実にするであろう。言い換えると、左から「ｎ」番目のビットを検査することによって、プリフェッチは、命令ポインタの前の「ｎ」個のキャッシュラインに保持されることができる。
【００１３】
図１Ａは、本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタ１００の図である。代表的な実施形態では、プリフェッチイネーブルシフトレジスタ１００は、例えば８ビットシフトレジスタとすることができる双方向シフトレジスタ１００であり、ここではシフトレジスタ１００と呼ぶことにする。シフトレジスタ１００は、多数のビット位置１１５を含み、図１Ａでは明瞭に示すために、左側の第１のビットのみが識別番号を付されている。プリフェッチイネーブル検出ビット１２０は、ここでは予め選択されたビット１２０とも呼ばれ、代表的な実施例では、シフトレジスタ１００の左から４番目のビット位置１１５である。より一般的には、プリフェッチイネーブル検出位置１２０は、シフトレジスタ１００のｎ番目のビット位置である。プリフェッチ許可条件１２５は、図１Ａに示されるように、論理０がプリフェッチイネーブル検出ビット１２０に格納されている限り活性化されている。
【００１４】
図１Ｂは、本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタ１００の別の図である。図１Ａに示される状況は、命令アドレスのプリフェッチ後に図１Ｂの状態になる。図１Ｂでは、論理１（１３０）が、左側入力１５０からプリフェッチイネーブルシフトレジスタ１００内にシフトされている。ここでは、論理１がプリフェッチイネーブル検出ビット１２０に格納されている。図１Ｂに示されるように、プリフェッチイネーブル検出ビット１２０に論理１が格納されている限り、プリフェッチ非許可条件１３５が活性化されている。さらに、プリフェッチイネーブル検出ビット１２０に論理０が再び格納されるまで、命令アドレスのプリフェッチは防止される。
【００１５】
図１Ｃは、本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタ１００のさらに別の図である。図１Ｂに示される状況は、キャッシュライン上の最後の命令の実行後に図１Ｃの状態になる。図１Ｃでは、論理０（１４０）が、右側入力１５５からプリフェッチイネーブルシフトレジスタ１００内にシフトされている。ここでは、プリフェッチイネーブル検出ビット１２０に論理０が格納されている。図１Ｃに示されるように、プリフェッチイネーブル検出ビット１２０に論理０が格納されている限り、プリフェッチ許可条件１２５が再び活性化され、かつそのまま保持される。さらに、論理１がプリフェッチイネーブル検出ビット１２０に再び格納されるまで、命令アドレスのプリフェッチ処理はイネーブルにされている。プリフェッチ許可条件１２５をイネーブルにするために、プリフェッチイネーブル検出ビット１２０において論理０を選択することは典型的ではあるが、任意である。論理０の補数である論理１を選択することもできる。この場合には、命令アドレスのプリフェッチ後に、論理０がプリフェッチイネーブルシフトレジスタ１００内にシフトされ、キャッシュライン上での最後の命令の実行後に、論理１がプリフェッチイネーブルシフトレジスタ１００内にシフトされる。種々の代表的な実施形態において、左側および右側入力１５０および１５５は入れ替えられることに留意されたい。
【００１６】
図２は、本特許明細書の種々の代表的な実施形態に記載されるような命令アドレスをプリフェッチするための装置２００の図である。装置２００は、プリフェッチ命令アドレスレジスタ２０５と、インクリメンタ（incrementor）２１５と、プリフェッチイネーブルシフトレジスタ１００を含むプロセッサ制御回路２１０とを備える。また図２には、ターゲット命令アドレス２２０と、プリフェッチ命令アドレス２２５と、命令キャッシュ２７０と、プロセッサ２５０と、メモリ２８０と、プログラム記憶媒体２９０と、プリフェッチ受入信号２５５と、新規プリフェッチ条件信号２６０と、キャッシュライン２７２上の最後の命令がフェッチされたことを示す、キャッシュライン上でフェッチされた最後命令の信号２６５とが示される。プロセッサ２５０はここでは、マイクロプロセッサ２５０とも呼ばれる。命令キャッシュ２７０は典型的には２つ以上のキャッシュライン２７２を含み、図２にはそのうちの１つのみが示されており、また各キャッシュライン２７２は、少なくとも１つの命令のアドレスを含むが、一般的には多数の命令アドレスを含む。別個に示されているが、実際には、プロセッサ２５０は典型的には、限定はしないが、メモリ２８０、命令キャッシュ２７０およびプロセッサ制御回路２１０を含む、図２に示されるいくつかの構成要素を含んでいる。メモリ２８０は、プロセッサ２５０によって実行されるべき命令用の記憶装置、並びにその機能を実行する際にプロセッサ２５０によって必要とされる他のメモリを含む。プログラム記憶媒体２９０は、図には示されないが、プリフェッチを実行し、かつ制御するためのソフトウエアプログラム用のメモリ記憶装置を含む。プログラム記憶媒体２９０は例えば、ハードディスク、フロッピーディスク、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）あるいは任意の他のコンピュータアクセス可能記憶媒体とすることができる。またプリフェッチ命令アドレスレジスタ２０５は、アドレスレジスタ２０５とも呼ばれる。
【００１７】
図２では、ＳＥＴ  Ａ（２３０）が論理的に真になる場合、ターゲット命令アドレス２２０が、プリフェッチ命令アドレスレジスタ２０５へ書き込まれる。このアドレスを用いて、プリフェッチ処理を開始するための開始メモリ位置を生成する。プリフェッチ条件が新規プリフェッチ条件信号２６０を介して検出される場合、ＳＥＴ  Ａ（２３０）は論理的に真になる。代表的な実施形態では、プリフェッチ条件は典型的には、プリフェッチ動作を開始するためにプロセッサ制御回路２１０に命令するソフトウエアにコード化される。この条件が図２に示されており、新規プリフェッチ条件信号２６０が、プロセッサ２５０からプロセッサ制御回路２１０に流れることが示されている。その後、この条件に対応するターゲット命令アドレス２２０が準備され、プリフェッチ命令アドレスレジスタ２０５へ書き込まれる。
【００１８】
プリフェッチイネーブルシフトレジスタ１００のプリフェッチイネーブル検出ビット１２０に論理０が格納され、かつプリフェッチが、命令キャッシュ２７０に発行される、または命令キャッシュ２７０により受け取られる場合、このようなことはプリフェッチ受入信号２５５によって示されるが、このときＳＥＴ  Ｂ（２３５）が論理的に真になる。その後命令アドレスのプリフェッチ処理は以下のように進む。（１）信号２６０を介して示される、新しいプリフェッチ条件がプロセッサ２５０によって検出される場合、開始ターゲット命令アドレス２２０が、ＩＮＰＵＴ  Ａ（２４０）を介してプリフェッチ命令アドレスレジスタ２０５へ書き込まれ、（２）ターゲット命令アドレス２２０がインクリメンタ２１５に送出され、（３）インクリメンタ２１５がその命令アドレスを次の順番のアドレスの値にインクリメントし、（４）信号２５５を介して示されるプリフェッチが、命令キャッシュ２７０によって受け入れられる場合、ＩＮＰＵＴ  Ｂ（２４５）を介して、インクリメントされた命令アドレスがプリフェッチ命令アドレスレジスタ２０５へ書き込まれる。その後、命令アドレスのプリフェッチ処理は、停止プリフェッチ条件と出会うまで、あるいは論理１（１３０）がプリフェッチイネーブルシフトレジスタ１００のプリフェッチイネーブル検出ビット１２０へ書き込まれるまで、以下のステップを通してループを進み続ける。（１）インクリメントされた命令アドレスがインクリメンタ２１５に送出され、（２）インクリメンタ２１５がそのアドレスを次の順番のアドレスの値にインクリメントし、（３）信号２５５を介して示されるプリフェッチが、命令キャッシュ２７０によって受け入れられる場合、インクリメントされた命令アドレスが、ＩＮＰＵＴ  Ｂ（２４５）を介してプリフェッチ命令アドレスレジスタ２０５へ書き込まれる。必要に応じて、プリフェッチ命令アドレス２２５は、命令キャッシュ２７０に転送される。プロセッサ２５０が、信号２６５を介して示され、命令キャッシュ２７０においてプロセッサ２５０によって読み出される、キャッシュライン２７２上の最後の命令をフェッチした後、右側から論理０（１４０）が、プリフェッチイネーブルシフトレジスタ１００へ書き込まれる。またプロセッサ２５０は、図２には示されない停止プリフェッチ標識をプロセッサ制御回路２１０に発行し、プロセッサ制御回路２１０はプリフェッチ動作を停止する。代表的な実施形態では、命令アドレス２２５のプリフェッチは順次処理されているが、他の命令アドレスの方式も可能であり、本発明は順次命令アドレスに限定されない。
【００１９】
図３は、本特許明細書の種々の代表的な実施形態に記載されるような、命令アドレス３００をプリフェッチするための方法の流れ図である。プリフェッチ条件が検出される場合、ブロック３０５は制御をブロック３１０に渡す。プリフェッチ条件は、例えば、プリフェッチ処理が分岐ターゲットにおいて開始することを示す特別に符号化された分岐命令を実行することである。実行されるべき命令を生成するソフトウエアは、ターゲットアドレスで開始する命令のブロックがプリフェッチ処理から恩恵を受けるものと決定する場合、分岐に特別な符号化（「hints」のようなＩＡ６４アーキテクチャにおいて知られている）を加える。そうでない場合には、ブロック３０５が繰り返される。
【００２０】
ブロック３１０は、ＳＥＴ  Ａ（２３０）を真に設定することによって、プリフェッチ条件に関連するターゲット命令アドレス２２０を、プリフェッチ命令アドレスレジスタ２０５へ書き込む。その後、ブロック３１０は制御をブロック３１５に渡す。
【００２１】
ブロック３１５は、プリフェッチイネーブルシフトレジスタ１００を初期化する。その例の実施形態では、シフトレジスタ１００は８ビット位置を含み、シフトレジスタ１００のビット位置１１５は「１０００００００」に設定される。その後、ブロック３１５は制御をブロック３２０に渡す。
【００２２】
プリフェッチイネーブルシフトレジスタ１００内のプリフェッチイネーブル検出ビット１２０（ｎ番目のビット位置１２０）が論理０に等しく、かつ命令キャッシュ２７０がプリフェッチの受け入れ準備ができている場合、ブロック３２０は制御をブロック３２５に渡す。そうでない場合には、ブロック３２０は制御をブロック３３５に渡す。
【００２３】
ブロック３２５は、次の命令アドレスをプリフェッチ命令アドレスレジスタ２０５へ書き込む。この時点で、ＳＥＴ  Ｂ（２３５）は、論理的に真に設定されている。その後ブロック３２５は制御をブロック３３０に渡す。
【００２４】
ブロック３３０は、論理１（１３０）を左側からプリフェッチイネーブルシフトレジスタ１００内にシフトする。その後ブロック３３０は制御をブロック３３３に渡す。
【００２５】
ブロック３３３は、プリフェッチ命令アドレス２２５を命令キャッシュ２７０へ書き込む。その後ブロック３３３は制御をブロック３３５に渡す。
【００２６】
プロセッサが、命令キャッシュ２７０のキャッシュライン２７２上の最後の命令をフェッチする場合、ブロック３３５は制御をブロック３４０に渡す。そうでない場合には、ブロック３３５は制御をブロック３４５に渡す。
【００２７】
ブロック３４０は、右側から論理０（１４０）をプリフェッチイネーブルシフトレジスタ１００内にシフトする。その後ブロック３４０は制御をブロック３４５に渡す。
【００２８】
停止プリフェッチ条件が発生するとき、ブロック３４５は制御をブロック３０５に渡す。停止プリフェッチ条件は、例えば、分岐を実行して、プリフェッチされていない新しい命令のシーケンスから実行し始めるために、プロセッサを向け直すことである。代表的な実施形態では、ソフトウエアプログラムが行うあらゆる分岐によって、停止プリフェッチ条件が生じるであろう。そうでない場合には、ブロック３４５は制御をブロック３２０に渡す。
【００２９】
従来のマイクロプロセッサプリフェッチ処理技術より優れた、本特許明細書に記載されるような実施形態の主な利点は、過剰なプリフェッチ処理を排除することである。プロセッサによってフェッチされている命令よりも、必要以上に多くの命令を命令キャッシュ内にプリフェッチすることによって、メモリは無駄にされ、命令キャッシュ内の有用な命令が、一度も使用される可能性のない命令に置き換えられる可能性がある。現在の命令ポインタの前のプリフェッチの数は厳密に制御される。それにより本発明の実施形態は、貴重なシステムリソースを節約する。
【００３０】
本発明は好ましい実施形態に関連して詳細に記載されてきたが、記載された実施形態は例示のために示されており、限定するためではない。記載された実施形態の形態および細部に種々の変更を行って、請求の範囲内において等価な実施形態を実現できることは当業者には理解されよう。
【００３１】
本発明を要約すると次のようになる。プリフェッチ性能を最適化するための装置（200）と方法である。論理１（130）が左側からシフトレジスタ（100）のビット内へ、プリフェッチされる各命令アドレス（225）毎にシフトされる。命令アドレス（225）がプロセッサによりフェッチされ、論理０（140）が右側からシフトレジスタ（100）のビット位置（115）へシフトされる。一旦、開始されれば、シフトレジスタ（100）のｎ番目のビット（120）に論理１が格納されるまで、プリフェッチは続行する。ｎ番目のビット（120）の論理１を検出することにより、またプリフェッチされた命令アドレス（225）がプリフェッチ命令アドレスレジスタ（205）から除去され、論理０がシフトレジスタ（100）のｎ番目のビット（120）へシフトされて戻されるまで、プリフェッチは中断する。従って、自立的なプリフェッチエージェントにより現在の命令ポインタのあまりにも前方でのプリフェッチが防止され、結果として、無駄なメモリバンド幅、及び命令キャッシュ（270）の有用な命令の置換が防止される。
【００３２】
以下においては、本発明の種々の構成要件の組み合わせからなる例示的な実施態様を示す。
１．コンピュータによって実行可能な命令からなるソフトウエアプログラムを具体的に組み入れ、コンピュータによって読出し可能なコンピュータプログラム記憶媒体（290）であって、前記コンピュータが、命令アドレス（225）をプリフェッチするための方法を実行するためのマイクロプロセッサ（250）を含み、前記命令アドレスをプリフェッチするための方法が、
シフトレジスタ（100）内の予め選択されたビット位置（120）が予め選択された論理値（140）に設定され、かつ前記マイクロプロセッサ（250）が、プリフェッチ命令アドレス（225）の受け入れ準備ができているとき、
前記プリフェッチ命令アドレス（225）をアドレスレジスタ（205）へ書き込むステップと、
前記プリフェッチ命令アドレス（225）を命令キャッシュ（270）へ書き込むステップと、
前記プリフェッチ命令アドレス（225）を、次のプリフェッチ命令アドレス（225）のアドレスの値にインクリメントするステップと、
前記命令キャッシュ（270）が前記プリフェッチ命令アドレス（225）を受け入れたとき、
前記シフトレジスタ（100）が左側入力（150）と右側入力（155）とを有し、各入力（150、155）が前記シフトレジスタ（100）内に論理値（130、140）をシフトする能力を有していて、前記予め選択された論理値（140）の補数（130）を前記左側入力（150）において前記シフトレジスタ（100）内にシフトするステップと、
前記マイクロプロセッサ（250）が前記命令キャッシュ（270）内のキャッシュライン（272）からの最後の命令をフェッチするとき、前記予め選択された論理値（140）に等しい値を、前記右側入力（155）において前記シフトレジスタ（100）内にシフトするステップとを含む、コンピュータプログラム記憶媒体（290）。
２．前記方法が、
上記１に記載のステップの前に、かつプリフェッチ条件（260）がプロセッサ制御回路（210）によって検出されたときに、
前記プリフェッチ条件（260）に関連するターゲット命令アドレス（220）を、前記アドレスレジスタ（205）へ書き込むステップと、及び
前記左側入力（150）に接続されたビット位置（115）において前記予め選択された論理値（140）の補数に、かつ前記シフトレジスタ（100）の他の全てのビット位置（115）において前記予め選択された論理値（140）に、前記シフトレジスタ（100）を初期化するステップとをさらに含む、上記１に記載のコンピュータプログラム記憶媒体（290）。
３．前記方法が、
停止プリフェッチ条件（345）が発生するとき、命令アドレス（225）のプリフェッチ処理を終了するステップをさらに含む、上記２に記載のコンピュータプログラム記憶媒体（290）。
４．前記予め選択された論理値（140）が論理０であり、前記予め選択された論理値（140）の補数（130）が論理１である、上記２に記載のコンピュータプログラム記憶媒体（290）。
５．前記予め選択された論理値（140）が論理１であり、前記予め選択された論理値（140）の補数（130）が論理０である、上記２に記載のコンピュータプログラム記憶媒体（290）。
６．命令アドレス（225）をプリフェッチするためのコンピュータが使用可能な方法であって、
シフトレジスタ（100）内の予め選択されたビット位置（120）が予め選択された論理値（140）に設定され、マイクロプロセッサ（250）が、前記プリフェッチ命令アドレス（225）を受け入れる準備ができているとき、
前記プリフェッチ命令アドレス（225）をアドレスレジスタ（205）へ書き込むステップと、
前記プリフェッチ命令アドレス（225）を命令キャッシュ（270）へ書き込むステップと、
前記プリフェッチ命令アドレス（225）を、次のプリフェッチ命令アドレス（225）のアドレスの値にインクリメントするステップと、
前記命令キャッシュ（270）が前記プリフェッチ命令アドレス（225）を受け入れたとき、
前記シフトレジスタ（100）が左側入力（150）と右側入力（155）とを有し、各入力（150、155）が前記シフトレジスタ（100）内に前記論理値（130、140）をシフトする能力を有していて、前記予め選択された論理値（140）の補数（130）を前記左側入力（150）において前記シフトレジスタ（100）内にシフトするステップと、
前記マイクロプロセッサ（250）が前記命令キャッシュ（270）内のキャッシュライン（272）からの最後の命令をフェッチするとき、前記予め選択された論理値（140）に等しい値を、前記右側入力（155）において前記シフトレジスタ（100）内にシフトするステップとを含む、コンピュータが使用可能な方法。
７．前記方法が、
上記６に記載のステップの前に、かつプリフェッチ条件（260）がプロセッサ制御回路（210）によって検出されたとき、
前記プリフェッチ条件（260）に関連するターゲット命令アドレス（220）を、前記アドレスレジスタ（205）へ書き込むステップと、
前記左側入力（150）に接続されたビット位置（115）において前記予め選択された論理値（140）の補数に、かつ前記シフトレジスタ（100）の他の全てのビット位置（115）において前記予め選択された論理値（140）に、前記シフトレジスタ（100）を初期化するステップとをさらに含む、上記６に記載のコンピュータが使用可能な方法。
８．前記方法が、
停止プリフェッチ条件（345）が発生するとき、命令アドレス（225）のプリフェッチ処理を終了するステップをさらに含む、上記７に記載のコンピュータが使用可能な方法。
９．前記予め選択された論理値（140）が論理０であり、前記予め選択された論理値（140）の補数（130）が論理１である、上記７に記載のコンピュータが使用可能な方法。
１０．命令アドレス（225）をプリフェッチするための装置（200）であって、
入力および出力を有するインクリメンタ（215）と、
ＳＥＴ  Ａ（230）およびＳＥＴ  Ｂ（235）制御ポートと、入力ＩＮＰＵＴ  Ａ（240）およびＩＮＰＵＴ  Ｂ（245）と、出力とを有するアドレスレジスタ（205）であって、そのアドレスレジスタ（205）の前記出力は、前記インクリメンタ（215）の前記入力に接続され、前記インクリメンタ（215）の前記出力は前記ＩＮＰＵＴ  Ｂ（245）に接続される、アドレスレジスタ（205）と、
左側入力（150）と、右側入力（155）と、２つ以上のビット位置（115）とを含むシフトレジスタ（100）であって、そのシフトレジスタ（100）は、ＳＥＴ  Ｂ（235）を介して前記アドレスレジスタ（205）に接続され、各入力（150、155）が、論理値（130、140）を前記シフトレジスタ（100）内にシフトする能力を有し、プロセッサ制御回路（210）によってプリフェッチ条件（260）が検出されたとき、前記アドレスレジスタ（205）は前記ＩＮＰＵＴ  Ａ（240）を介して、前記プリフェッチ条件（260）に関連するターゲット命令アドレス（220）を受け入れる能力を有しており、前記シフトレジスタ（100）が、前記左側入力（150）に接続されるビット位置（115）を前記予め選択された論理値（140）の補数（130）に、かつ前記シフトレジスタ（100）の全ての他のビット位置（115）を前記予め選択された論理値（140）に初期化されることができ、前記シフトレジスタ（100）内の予め選択されたビット位置（120）が前記予め選択された論理値（140）に設定され、かつマイクロプロセッサ（250）が前記プリフェッチ命令アドレス（225）を受け入れる準備ができているとき、前記ＳＥＴ  Ｂ（235）が前記アドレスレジスタ（205）に格納されたアドレスの前記インクリメンタ（215）によるインクリメントをイネーブルにし、命令キャッシュ（270）が前記プリフェッチ命令アドレス（225）を受け入れたとき、前記シフトレジスタ（100）は前記予め選択された論理値（140）の前記補数（130）を前記左側入力（150）において前記シフトレジスタ（100）内にシフトする能力を有し、前記マイクロプロセッサ（250）が前記命令キャッシュ（270）のキャッシュライン（272）からの最後の命令をフェッチするとき、前記シフトレジスタ（100）は、前記予め選択された論理値（140）に等しい値を、前記右側入力（155）において前記シフトレジスタ（100）内にシフトする能力を有する、シフトレジスタ（100）とを含む、装置（200）。
【００３３】
【発明の効果】
本発明によれば、プリフェッチ処理を最適化することによりメモリバンド幅のようなリソースを無駄にし、命令キャッシュ内の有用な命令を置き換えてしまうことなく、命令フェッチにおけるキャッシュミスを防ぐことができる。
【図面の簡単な説明】
【図１Ａ】本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタの図である。
【図１Ｂ】本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタの別の図である。
【図１Ｃ】本特許明細書の種々の代表的な実施形態に記載されるようなプリフェッチイネーブルシフトレジスタのさらに別の図である。
【図２】本特許明細書の種々の代表的な実施形態に記載されるような命令アドレスプリフェッチのための装置の図である。
【図３】本特許明細書の種々の代表的な実施形態に記載されるような命令アドレスをプリフェッチするための方法を示す流れ図である。
【符号の説明】
100  プリフェッチイネーブルシフトレジスタ
115  ビット位置
120  プリフェッチイネーブル検出ビット
130  補数
140  論理０
150  左側入力
155  右側入力
200  装置
205  プリフェッチ命令アドレスレジスタ
210  プロセッサ制御回路
220  ターゲット命令アドレス
225  プリフェッチ命令アドレス
230  ＳＥＴ  Ａ
235  ＳＥＴ  Ｂ
240  ＩＮＰＵＴ  Ａ
245  ＩＮＰＵＴ  Ｂ
250  マイクロプロセッサ
260  プリフェッチ条件信号
270  命令キャッシュ
272  キャッシュライン
290  コンピュータプログラム記憶媒体
【図１Ａ】
0004195778.tif 000002
【図１Ｂ】
0004195778.tif 000003
【図１Ｃ】
0004195778.tif 000004
【図２】
0004195778.tif 000005
【図３】
0004195778.tif 000006