JP3741945B2 - 命令フェッチ制御装置 - Google Patents
命令フェッチ制御装置 Download PDFInfo
- Publication number
- JP3741945B2 JP3741945B2 JP2000298837A JP2000298837A JP3741945B2 JP 3741945 B2 JP3741945 B2 JP 3741945B2 JP 2000298837 A JP2000298837 A JP 2000298837A JP 2000298837 A JP2000298837 A JP 2000298837A JP 3741945 B2 JP3741945 B2 JP 3741945B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- branch
- prefetch
- fetch
- request
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
本発明は、パイプライン処理方式(スーパースカラ処理方式、あるいは、アウトオブオーダ処理方式を含む)を採用した情報処理装置に係り、特に、見かけ上のフェッチ時間を減少させ命令処理を高速化させるためのプリフェッチ処理に関する。
【0002】
【従来の技術】
パイプライン処理方式などを採用した情報処理装置においては、一つの命令の実行の終了を待たずに、次々と後続命令列をフェッチして命令パイプラインに投入している。また、主記憶装置の動作が遅いため、キャッシュ機構を採用して後続命令列のフェッチを高速化している。
【0003】
図40は、分岐命令を複数含む命令列の例を示す図である。
同図において、(a)の行のDRは除算命令であり、(b)の行のBCRは条件分岐命令、(c)の行のBCRは無条件分岐命令であり、(d)の行が分岐先命令である。
【0004】
図41は、従来の手法を用いた場合のマシンサイクルの遅延を説明する図である。
まず、(a)の行の命令が実行される。(a)の行の命令実行がAステージであるとき、次の命令である(b)の行が実行される。このように、パイプライン方式をはじめとする投機実行方式では、前の命令の実行完了を待つことなく次の命令をフェッチし、実行する。しかし、(b)の行の命令は条件分岐命令であるので、Aステージの後、Uステージまでの間、条件確定待ちしている。そして、その間に(c)の行の命令が実行される。これも分岐命令(無条件分岐命令)であり、(b)の行の分岐結果に影響を受けるので、Uステージの実行は、(b)の行の命令の非分岐が確定するまで待ちの状態にある。(b)の行の条件分岐命令の非分岐が決定すると、(c)の行の無条件分岐命令が実行されることが確定するので、(c)の行の無条件分岐命令のUステージの実行が行われる。これを受けて、(d)の行の分岐先命令(NOP)のフェッチ指令が出され、該分岐先命令のフェッチ及び実行が行われる。
【0005】
同図から明らかなように、(d)行の分岐先命令のフェッチが遅れているため、(a)行から(c)行までの命令は、順調にパイプライン処理が行われているが、(d)行の命令になって処理の待ち状態が生じ、パイプライン処理が遅延を生じている。
【0006】
【発明が解決しようとする課題】
まず、従来の手法の場合、第1の問題点として、キャッシュ機構の欠点、すなわちフェッチ要求を出した命令列がキャッシュにヒットしなかった場合に、そのペナルティ(遅延時間)が大きいということがある。この場合、命令フェッチ要求が真に必要なことが確定してから該命令フェッチ要求を出すと、キャッシュミスヒットの場合には、このペナルティがそのまま性能差に跳ね返ることになる。
【0007】
しかしながら、第2の問題点として、先行する命令の実行結果が後続の命令の実行に影響を与える場合は、先行する命令の実行結果が後続命令の実行に影響しないことが判断できるまで、正しい後続の命令フェッチ要求を出して実行することができない。
【0008】
従来技術では、該分岐命令の分岐先アドレスが計算されていても、該分岐命令よりも前に実行される分岐命令の処理が確定し、該分岐命令が実行されることが決定されるまで、該分岐命令の分岐先命令フェッチを行っていなかった。すなわち、該分岐命令の直前に存在する分岐命令の分岐条件が確定して(分岐予測の成功が判明して)から、該分岐命令が分岐予測失敗した場合に実行される命令列をフェッチするため、この命令フェッチ開始が待たされる分、命令実行にロスが生じていた。
【0009】
本発明の課題は、パイプライン処理方式等を採用した情報処理装置において、命令処理の遅延時間を削減することのできる装置を提供することである。
【0010】
【課題を解決するための手段】
本発明の第1の側面における装置は、キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段とを備えることを特徴とする。
【0011】
本発明の第2の側面における装置は、キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるアドレス生成手段と、該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、前記キャッシュメモリ手段に該分岐先命令の命令フェッチを要求する分岐先命令プリフェッチを行う分岐先命令プリフェッチ手段とを備えることを特徴とする。
【0012】
本発明の方法は、キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置と、該キャッシュメモリに格納された命令列を処理する命令制御装置とを備える装置における命令制御方法であって、(a)続いてフェッチ要求を予定している命令列が、該キャッシュメモリに存在しない場合には、該キャッシュメモリに、該下位メモリから該予定命令列を事前に転送しておく命令プリフェッチを行うステップを備えることを特徴とする。
【0013】
本発明においては、フェッチ予定の命令列をプリフェッチするようにしたことにより、例えば、キャッシュミスヒットした場合、新たに、フェッチするために必要な命令列を下位メモリから転送しなくても良くなり、命令実行の遅延時間を抑制することが出来る。
【0014】
また、分岐命令の場合、分岐予測を行って、予測された分岐先命令をフェッチしておくが、従来では、分岐予測がはずれると、分岐予測がはずれたことが判明した時点で命令列をフェッチし直さなくてはならなかったので、処理遅延が生じていた。しかし、本発明によれば、分岐予測されなかった方の分岐先の命令列を分岐命令プリフェッチすることにより、あらかじめ命令一時バッファに格納するようにする。従って、分岐予測がはずれたとしても、すぐにキャッシュメモリから必要な命令列をフェッチして実行することができるので、処理遅延をより抑制することが出来る。
【0015】
また、他の側面においては、前に実行している命令が命令プリフェッチしようとしているアドレスの内容を書き換える可能性がある場合には、命令プリフェッチを取り下げるようにする。従って、ストア命令のような命令によって、アドレスの内容が書き換えられる場合にも、整合性のある命令プリフェッチを行うことが出来る。
【0016】
【発明の実施の形態】
本発明の実施形態の概念を以下に述べる。
第1の問題を解決するための方法としては、事前に、命令実行される可能性の高いアドレス域をキャッシュ機構に伝達し、キャッシュ機構に該アドレスの命令列が登録されていなければ、実命令フェッチが行われるよりも前に、主記憶装置あるいは下位のキャッシュメモリ(キャッシュメモリが多段からなる場合)から出来る限り事前に命令列を登録し始めることを特徴とした命令プリフェッチ機構を用いる。
【0017】
こうすることにより、キャッシュのミスヒット率を低下させることができ、性能向上に貢献することが可能となる。仮に実命令フェッチまでにキャッシュの登録作業が間に合わなかったとしても、実命令フェッチと、本発明の実施形態によるプリフェッチ要求との時間差だけ、従来技術よりも遅延時間(ミスヒットペナルティ)を減らすことが出来る。
【0018】
更に、同じタイミングで複数のフェッチ・命令プリフェッチ要求を出すことが出来ないような装置においては、命令プリフェッチの優先順位を設定し、それに従って要求を出すようにする。
【0019】
また、このような構成の場合、同じアドレスで複数回のプリフェッチ要求を出すのは無駄であるから、フラグを準備して、同じアドレスで複数回のプリフェッチ要求を出さないように抑制する。また、キャッシュ機構の形式によっては、フェッチするバイト長よりも大きなデータ単位を一つのまとまり(キャッシュブロック)として管理する形式のものもある。このときは、同一キャッシュブロックへの命令プリフェッチ要求を抑制する。すなわち、プリフェッチするアドレスが異なっていても、前回のプリフェッチでキャッシュメモリに格納されたキャッシュブロックの中に既に、そのアドレスの命令が含まれている場合には、再び命令プリフェッチを行って、主記憶からキャッシュメモリに命令を読み込むことは無駄となる。従って、このような場合には、プリフェッチ要求を出力しないようにする。
【0020】
第2の問題点を解決するための方法としては、特に、命令フェッチ制御部に命令フェッチの要求をするが、命令フェッチ結果を命令デコード部に受け渡すか否かを保留することを可能とする、あるいは、命令フェッチ動作の途中で一時中断することを可能とすることを特徴とした、分岐命令プリフェッチ機構を用いる。
【0021】
通常、該分岐命令が分岐する場合の分岐先アドレスは、条件コードの確定、すなわち、分岐するか否かが確定するよりも前に求めることが可能である。
例えば、演算命令と直後の条件分岐命令がパイプライン処理方式によって流れる場合、演算命令の実行(Xステージ)の結果、条件コードが決定し分岐するか否かが確定するタイミング(演算命令のUステージ)よりも前に、後続の分岐命令の分岐先命令アドレスをAステージで求めている。
【0022】
しかしながら、図40のように、(a)演算命令、(b)条件分岐命令、(c)無条件分岐命令と続く命令列の場合、従来技術では図41のように(c)無条件分岐命令が実行されることが確定されるまで、すなわち、(b)条件分岐命令の非分岐が確定するまで、(c)無条件分岐命令の分岐先命令を、命令フェッチすることが出来なかった。
【0023】
ところが、図1に示すように、本発明の実施形態を適用することにより、(c)行の無条件分岐命令の分岐先アドレスが確定した時点で、このアドレスで命令プリフェッチ(分岐命令プリフェッチ)を行うことができる。この後、(a)行の演算命令の実行により条件コードが確定し、(b)行の条件分岐命令が非分岐であれば、(c)行の無条件分岐命令は実行されるのだから、無条件分岐命令の後続でデコード、実行、あるいは、フェッチされている命令列はすべて棄却し、すでに始まっている分岐命令プリフェッチを実命令フェッチとして継続実行すれば良い。図1のケースでは、従来技術よりも3クロックの性能向上が達成できる。この際、もし他の分岐命令プリフェッチが行われていれば、これも不要であるから、棄却すればよい。逆に(b)行の条件分岐命令の分岐が確定し、(c)行の無条件分岐命令が実行されないことが分かったならば、この時点で、すでに始まっている分岐命令プリフェッチを中止、棄却すれば良い。
【0024】
後者の(c)行の無条件分岐命令が条件分岐命令であっても本発明の実施形態を適用可能であり、もちろん、上記命令列の(b)行の条件分岐命令に対しても本発明の実施形態を適用可能である。また、二つの分岐命令の間に何らかの命令列が存在しても本発明の実施形態を適用可能であることは、当業者には容易に理解されよう。更に、ブランチヒストリに代表される分岐予測機構を併用した場合でも、条件分岐命令が分岐予測された場合には、後続命令(非分岐である場合の命令列)を分岐命令プリフェッチするようにすることで、同様の手法を適用可能である。すなわち、分岐予測された結果、分岐先と予測されたアドレスとは逆に、分岐しなかった場合の次の命令のアドレスを分岐命令プリフェッチによってプリフェッチするようにしておくことも可能である。
【0025】
また、例えば、NOP(No Operation)命令の代用として用いられるような、必ず非分岐となる分岐命令においては、分岐先アドレスと称するアドレスへは分岐しないのだから、これを分岐命令プリフェッチするのは不利である。従って、このプリフェッチを抑止すれば、無駄な動作が抑止され、性能劣化しないことになる。同様に無条件分岐命令のように、絶対に分岐命令の後続命令が実行されない分岐命令においては、後続命令を分岐命令プリフェッチするのは不利である。従って、このプリフェッチを抑止することで、無駄な動作を抑止し、性能劣化を防ぐことができる。
【0026】
第1の問題の解決法でも述べたように、同じタイミングで複数のフェッチ・分岐命令プリフェッチ要求を出すことが出来ないような装置においては、プリフェッチする命令間に優先順位を設定し、それに従って要求を出すことも可能である。
【0027】
このようにして出される分岐命令プリフェッチは、必ずしも実行されるわけではないので、実行されることが分かっていなければならない。ここで、デコードされるより手前のステージで分岐命令プリフェッチされた命令列を一時保存しておく一時命令バッファを設ける。また、一時命令バッファを設ける代わりに、命令プリフェッチ動作の途中でインタロックをかけることも出来る。いずれの場合にも、所定の条件でインタロックを解除し、フェッチの続きあるいはデコード以降の処理を行えば良い。
【0028】
特に、スーパースカラ処理方式などを採用した場合には、複数の分岐命令が時間的に近接して処理されることになるので、本発明の実施形態の手法を用いれば、連続あるいは、同時に複数の分岐命令プリフェッチを行う場合も考えられる。更に、これら複数の分岐命令プリフェッチに対応した一時命令バッファを設けることで、複数の分岐命令プリフェッチ要求に対応することも可能である。
【0029】
特に、この場合には、それぞれの分岐命令プリフェッチを区別する方法を用いることができる。
主記憶にキャッシュメモリ機構がある場合、そのキャッシュメモリ機構の特性に応じて分岐命令プリフェッチ要求に工夫を加えると、更に性能向上する可能性がある。
【0030】
キャッシュメモリが小さいなど性能が劣る場合、この分岐命令プリフェッチによって本来使われる頻度が高いはずの命令列がキャッシュメモリから消去される危険性が高くなる。特に、分岐性能が高くないので、この危険性は特に高くなる。このような危険性を回避するために、分岐命令プリフェッチの場合には、そのプリフェッチ命令がキャッシュに存在しない場合、主記憶から命令列を取り出してキャッシュメモリを更新することを抑制し、性能劣化を防ぐことができる。
【0031】
逆に、キャッシュ機構の性能が良い場合でも、制御回路を設置しづらい場合もあり得る。このような場合には、キャッシュ機能の性能の良さを利用し、キャッシュにヒットしなかった場合にあらかじめ主記憶から命令列を読み込むようにして、実際に、これらの命令列が必要になった場合に、キャッシュミスヒットによるペナルティを最小限に抑えることが可能となる。すなわち、前述の第1の問題点の解決法を利用することができる。
【0032】
ところで、命令セットの中には、メモリにデータを書き込む動作を含む命令(以下、ストア命令と呼ぶ)が存在する。ストア命令が、このような分岐命令プリフェッチデータ列を書き換える可能性が常に存在する。従って、分岐命令プリフェッチの場合でも、この可能性を検出する手段、及び、実際に該ストア命令が分岐命令プリフェッチデータ列を書き換えた場合には、その結果をこれらの命令列に反映するなどの対応をとる必要がある。
【0033】
実際に分岐命令プリフェッチした命令列を書き換える手法の他に、該ストア命令によって実際に書き換えられる、あるいは書き換えられる可能性がある場合には、分岐命令プリフェッチを取りやめることもできる。分岐命令プリフェッチ要求によって得られる命令列は常に命令実行されるわけではない。従って、このような方法をとれば、回路構成が簡便になるメリットの方が大きくなる。
【0034】
以下に、図面に基づいて各回路構成について詳細に説明する。ここで、図面に示された<、及び、>でくくられた数字は、ビット番号を示し、小さい番号のビットが上位ビットであり、大きい番号のビットが下位ビットである。従って、<1>がMSBであり、<31>がLSBである。
【0035】
図2は、本実施形態の装置の全体の概略構成(要部)を示す図である。
本実施形態においては、命令フェッチポートをA、Bの二つ持っており、いずれか一方が現在命令実行処理中のポートになり、もう一方が分岐予測機構(ブランチヒストリ)によって分岐予測された分岐先命令列を保持するようになっている。これらのポートの役割は動的に変更される。
【0036】
以下は、同図及び後述の図における信号の対応を示す表である。
(1)命令フェッチ要求(+IFCH REQUEST VALID)
(2)命令プリフェッチ要求(+IF PREFCH REQUEST VALID)
(3)データ
(4)フェッチ命令列
(5)デコードする命令列
(6)命令デコードした情報
(7)ストアデータ
(8)オペランドデータ
(9)再命令フェッチ要求(+RE IFETCH REQUEST)
(10)分岐命令プリフェッチ要求(+BR PREFCH REQ VALID)
(11)分岐履歴情報
(12)分岐予測情報
(13)ストア命令によるフェッチ命令列の上書き可能性検出信号
(14)ムーブイン(主記憶装置からキャッシュへのデータ複写)要求(+MOVE IN REQUEST)
(15)命令フェッチアドレス
(16)フェッチ出来ない状態であることを示す信号(+SU BUSY)
(17)命令プリフェッチ出来ない状態であることを示す信号(+SU PREFCH BUSY)
(18)再命令フェッチアドレス
(19)分岐予測先アドレス
(20)分岐予測信号(+BRHIS HIT)
(21)分岐命令プリフェッチアドレス
(22)分岐予測失敗信号(CANCEL ALL PORT)
図2においては、主記憶装置1から命令データ(3)が命令キャッシュ2にフェッチされて送られ、次に、フェッチ命令列(4)が命令一時バッファ3に格納される。それから、デコードすべき命令列(5)が命令デコード部4に入力される。そして、命令デコード部4におけるデコードの結果に基づいて、各制御部(分岐命令制御部5、ストア命令制御部6、その他の命令の制御部7)に当該デコード情報が入力される。このとき、命令データと一緒にオペランドのデータがデータキャッシュ8に入力され、各制御部における処理に使用するために、デコードされた命令とともに、ストア命令制御部6やその他の命令の制御部7に入力される(8)。また、ストア命令制御部6は、処理の結果データをストアする場合には、ストアデータ(7)をデータキャッシュ8に書き込むとともに、データキャッシュ8から命令キャッシュ2には、命令列の書き換えデータが送られる。命令列が命令一時バッファ3に格納されている場合には、命令一時バッファ3にストアデータ(7)が送られる。また、書き換えられるべき命令列やオペランドが主記憶装置1に記憶されている場合には、ストアデータ(3)を主記憶装置1に送る。
【0037】
また、命令フェッチ制御部9は、命令キャッシュ2に命令フェッチ要求(1)を出力して、命令列を命令一時バッファ3へフェッチさせるとともに、命令プリフェッチ要求(2)を出して、命令列を主記憶装置1から命令キャッシュ2にプリフェッチさせる。
【0038】
分岐命令制御部5は、分岐命令を処理した結果、新しく命令のフェッチが必要になった場合には、再命令フェッチ要求(9)を命令フェッチ制御部9に出すとともに、分岐予測されなかった方の分岐のアドレスの命令をプリフェッチさせるために分岐命令プリフェッチ要求(10)を命令フェッチ制御部9に出力する。また、分岐命令制御部5の分岐命令処理結果は、分岐履歴情報(11)として、ブランチヒストリ9’に送られ、ブランチヒストリ9’において分岐予測情報(12)を生成するために使用される。分岐予測情報(12)は、命令フェッチ制御部9に送られ、分岐命令の分岐先アドレスの命令のフェッチに使用される。更に、分岐命令制御部5は、分岐予測に失敗したと判断した場合には、分岐予測失敗信号(22)を命令キャッシュ2に送り、命令キャッシュ2にフェッチされた分岐先命令が格納されているポートをキャンセルさせる。
【0039】
図3は、命令プリフェッチ機構の構成例を示す図である。
本実施形態においては、1クロックで1つの命令フェッチ要求を行うことができる。命令フェッチ要求には、シーケンシャルフェッチ(後続命令のフェッチ)、分岐ターゲットフェッチ(分岐予測先の命令のフェッチ)、再命令フェッチ(分岐予測失敗や割り込み発生などのフェッチ)、及び本実施形態による分岐ターゲットの並びにシーケンシャルの命令プリフェッチの5つがある。
【0040】
これら5つの要求の優先順位が、再命令フェッチ、分岐ターゲットフェッチ、分岐ターゲットの命令プリフェッチ、シーケンシャルフェッチ、シーケンシャルの命令プリフェッチの順であるとすれば、優先順位決定回路9−3は、この優先順位で命令キャッシュ2に要求を出すようにする。
【0041】
フェッチアドレス生成部9−1では、フェッチすべき命令のアドレスを生成し、セレクタ9−4に入力する。▲1▼の信号は、フェッチ要求を出したが、割り込みなどの要因で受け入れられなかった場合に、同じアドレスを出力するために設けられている。▲2▼の信号は、16バイトの加算器から演算されて出力される、シーケンシャルフェッチに使用されるアドレスである。また、▲3▼の信号は、再命令フェッチ要求(9)に対応して入力される再命令フェッチアドレス(18)を示す信号である。更に、▲4▼の信号は、前に出力されたフェッチアドレスからブランチヒストリ9−2が処理した結果得られた分岐予測先アドレス(19)である。優先順位決定回路9−3は、ブランチヒストリ9−2から分岐予測信号20を受け取ると、命令フェッチや命令プリフェッチの優先順位を勘案して、適切な場合に、フェッチアドレス選択信号aを出力して、分岐予測先アドレス(19)をセレクタ9−4に選択させて、命令フェッチアドレス(15)として命令キャッシュ2に入力させる。このとき、優先順位決定回路9−3は、命令フェッチアドレス(15)のアドレスの命令をフェッチさせたい場合には、命令フェッチ要求(1)を命令キャッシュに入力し、命令プリフェッチをさせたい場合には、命令プリフェッチ要求(2)を命令キャッシュ2に入力する。
【0042】
命令キャッシュ2によって命令フェッチ要求(1)が受け入れられると、命令キャッシュ2から命令(4)が命令一時バッファ3に送られる。このとき、命令フェッチする命令が命令キャッシュ2に存在しない場合には、主記憶装置1から命令データ(3)が呼び込まれ、続いて命令一時バッファ3に命令(4)がフェッチされる。
【0043】
命令キャッシュ2によって命令プリフェッチ要求(2)が受け入れられると、命令キャッシュは、ムーブイン要求(14)を主記憶装置1に入力し、主記憶装置1の信号(15)で入力されるアドレスから命令キャッシュへ命令をプリフェッチする。
【0044】
命令キャッシュ2が命令フェッチ出来ない場合には、信号(16)を、命令プリフェッチ出来ない場合には、信号(17)を優先順位決定回路9−3に入力し、命令フェッチ制御部9に命令フェッチ、命令プリフェッチの再試行などを行わせる。
【0045】
図4は、図3の優先順位決定回路の構成例を示す図である。
すなわち、本実施形態においては、再命令フェッチ許可信号(+IF REQ REIFCH GO)は、再命令フェッチ要求(+RE IFETCH REQUEST)が入力されたら、そのまま、再命令フェッチとして出力されるので、最優先で行われる。再命令フェッチ要求がない場合は、分岐ターゲットフェッチ信号(+IF REQ BRHIS GO)は、分岐成立予測がされていて、(+BRHIT HITが“H”)かつ、ターゲットフェッチ格納先となるフェッチポートが空いている(−FCH PORT ALL BUSYが“H”)場合にのみ行われる。すなわち、再命令フェッチ要求(+RE IFETCH REQUEST)の論理をインバータ10で反転した信号と、命令キャッシュ2からの信号である、フェッチポートがすべて埋まっていることを示す信号の論理が反転した信号(−FCH PORT ALL BUSY)及び、分岐予測信号(+BRHIS HIT)がAND回路14に入力され、これらの信号のAND結果が、AND回路14から分岐ターゲットフェッチ許可信号(+IF REQ BRHIS GO)となる構成となっている。
【0046】
それ以外の場合には、後続の命令のフェッチ信号(+IF REQ SEQUENTIAL GO)(シーケンシャルフェッチ)が従来行われていたところを、それより優先順位が高いところに、分岐ターゲットの命令プリフェッチ許可信号(+IF REQ PREFCH BRHIS GO)の優先順位を設定している。もちろん、再命令フェッチが行われておらず、かつ、分岐予測が成立していなければ分岐ターゲットの命令プリフェッチは、行われないので、+RE IFETCH REQUESTの論理反転信号と、+BRHIS HIT信号と、分岐ターゲットの命令プリフェッチがまだ行われていないことを示す信号(−BRHIS TGT PREFECH DONE)の論理積をAND回路15でとって+IF REQ PREFCH BRHIS GO信号を生成している。
【0047】
同図の回路図だけでは、同時に+IF REQ BRHIS GOと+IF REQ PREFCH BRHIS GOが出てしまうが、アドレス選択の際には同じアドレスが用いられること、及び、キャッシュ機構への要求信号は、後述する図8の回路に示される通り実フェッチが優先されるので、これで問題は生じない。
【0048】
シーケンシャルフェッチの許可信号(+IF REQ SEQUENTIAL GO)は、+RE IFETCH REQUEST信号のインバータ10による論理反転信号と、+BRHIS HIT信号の論理をインバータ11によって反転したものと、−BRHIS TGT PREFCH DONE信号の論理をインバータ12で反転したものと−I BUFF FULL信号の論理積をAND回路16でとったものとなっている。これは、再命令フェッチ要求がなく、分岐予測信号が出力されておらず、分岐ターゲットの命令プリフェッチが行われており、命令キャッシュの命令バッファが一杯でない(−I BUFF FULL信号が“H”)時に、シーケンシャルフェッチの要求が命令キャッシュ2に出力されることを意味する。
【0049】
更に、シーケンシャル命令の命令プリフェッチ許可信号(+IF REQ PREFECH SEQ GO)は、シーケンシャルフェッチの条件の内、再命令フェッチ、分岐予測信号、及び分岐ターゲットの命令プリフェッチについては、同じであり、更に、命令キャッシュの命令バッファが一杯である場合であって、次のシーケンシャル命令の命令プリフェッチが行われていない(−NEXT SEQ PREFCH DONE信号が“H”)場合に、AND回路17から出力される。
【0050】
このように、最下位にはシーケンシャル(後続)の命令プリフェッチ(+IF REQ PREFCH SEQ GO)を設定している。もちろん、一般的にはこれ以外の優先順位の設定も考えられる。それぞれのGO信号(図4の右へ出ていく信号)は、図3におけるフェッチアドレス選択信号aとして用いられる。
【0051】
また、特に同じアドレス、あるいは、キャッシュ上の同じページへの要求を連続して出すことは無意味であるから、これを抑えてやることによって無駄なプリフェッチ要求が減り、従って、更に下位キャッシュあるいは主記憶装置1へフェッチ要求が出せるようになる。
【0052】
図5は、同じアドレスの命令へのプリフェッチ要求を連続して出さないようにするためのフラグ生成回路(シーケンシャルプリフェッチの場合)の構成例を示す図である。
【0053】
フラグは各フェッチポート(命令フェッチポート)毎に設けられ、フラグのON、OFFはそれぞれ独立して行われる。
優先順位決定回路9−3から出力されるシーケンシャル命令の命令プリフェッチ許可信号(+IF REQ PREFCH SEQ GO)、命令プリフェッチ要求(+IF PREFCH REQUEST VALID)、及び、フェッチポート選択信号(+PORT x SEL;ここで、xは、ポートの識別子あるいは番号であって、同図の回路が担当するフェッチポートの選択信号が入力された場合に、フラグを立てるために用いられる)がAND回路18に入力され、すべてが“H”の場合、SR−FF(フリップフロップ)19のSET端子に論理“H”の信号が入力される。また、FF19のRESET端子には、命令キャッシュ2の命令バッファが一杯であることを示す信号(+I BUFF FULL)が入力される。SET端子に論理“H”の信号が入力されると、次のシーケンシャル命令のプリフェッチが行われたので、出力端子Qからは、同一アドレスにはプリフェッチ要求を出さないように指示する信号(フラグ;+NEXT SEQ PREFCH DONE)が“H”となって(ONとなって)出力される。一方、+I BUFF FULL信号が論理“H”でRESET端子に入力されると、命令キャッシュ2のバッファが一杯になっていることを示すので、同一のアドレスの命令は既にフェッチされたことを意味し、従って、次の命令プリフェッチ要求は同じアドレスに対しては行われないはずであることになる。従って、+NEXT SEQ PREFCH DONE信号の出力フラグは“L”(OFF)となる。このような仕組みにより、命令キャッシュ2の同じアドレスに連続して要求を出さないようにすることが出来る。
【0054】
図6は、同じキャッシュブロックに含まれている命令を繰り返してプリフェッチ要求を行わせないようにするためのフラグを生成する回路例である。
同図の回路も図5と同様に、フェッチポート毎に設けられる。
【0055】
優先順位決定回路9−3から+IF REQ PREFCH SEQ GO信号が入力されると、命令プリフェッチ要求信号(+IF PREFCH REQUEST VALID)とフェッチポート選択信号(+PORT x SEL)とのANDを取り、フリップフロップのSET端子に入力され、プリフェッチ抑制信号(+NEXT SEQ PREFCH DONE)が出力される。また、命令フェッチ要求(+IFCH REQUEST VALID)信号が入力されると、キャッシュブロックの最終ビット信号(+IF EAG<26>と+IF EAG<27>)が“11”となっているか否か(ここでは、64バイトのキャッシュブロックを想定しており、最終の2ビットは“11”が設定されている)がAND回路21によって判断され、その結果が命令フェッチ要求とともにAND回路22に入力される。更に、ポート選択信号(+PORT x SEL)が入力され、AND回路22でANDがとられて、OR回路に入力される。OR回路には、ポートを強制的にクリアする信号(+CLEAR IF PORT x)も入力され、命令フェッチ要求がキャッシュブロックの最終アドレスに来た場合か、ポートを強制的にクリアする場合に、フリップフロップをRESETして、フラグの出力を“L”(OFF)に設定する。
【0056】
図7は、同一プリフェッチ要求抑制フラグ(分岐予測先プリフェッチの場合)の回路構成例を示す図である。
優先順位決定回路9−3から+IF REQ PREFCH BRHIS GO信号が入力されると、命令プリフェッチ要求信号(+IF PREFCH REQUEST VALID)との論理積をAND回路25で取り、フリップフロップのSET端子に入力する。これにより、該論理積が“H”のとき、同じアドレスへの分岐予測先プリフェッチ要求を抑制するフラグ(+BRHIS TGT PREFCH DONE)がONとなって出力される。そして、強制的なポートクリア信号(+CLEAR IF PORT)がRESET端子に入力されると、+BRHIS TGT PREFCH DONE信号の出力が抑制される。
【0057】
前述の優先順位決定回路9−3に基づき、命令プリフェッチ要求を出すことになった場合には、命令プリフェッチ要求は、他のフェッチ要求とは指令内容が異なるので、その区別をする必要がある。
【0058】
図8は、フェッチ・プリフェッチ区別回路の構成例を示す図である。
優先順位決定回路から出力される命令フェッチ要求は、+IF REQ REIFCH GO、+IF REQ BRHIS GO、及び、+IF REQ SEQUENTIAL GOの3つの信号であるので、これらのORを取り、フェッチ出来る状態であることを示す信号(−SU BUSY)とのANDをとって、現在、命令フェッチ要求(+IFCH REQUEST VALID)を生成する。
【0059】
また、優先順位決定回路9−3から出力される命令プリフェッチ要求は、+IF REQ PREFCH BRHIS GOと+IF REQ PREFCH SEQ GOの2つの信号であるので、これらのORを取り、命令フェッチ要求が行われていないことを示す信号(−IFCH REQUEST VALID)と、命令プリフェッチが出来る状態であることを示す信号(−SU PREFCH BUSY)とのANDを取って、命令プリフェッチ要求(+IF PREFCH REQUEST VALID)を出力する。
【0060】
キャッシュ機構においては、キャッシュミスヒットしたときは通常、下位のキャッシュ機構もしくは主記憶装置からデータ転送を行う。従って、命令プリフェッチ要求を識別する信号(前述)に応じて、キャッシュヒット/ミスしたときの処理を変更すれば良い。すなわち、キャッシュミスヒットのときには、通常の命令フェッチでキャッシュミスヒットしたときと同じように、下位キャッシュもしくは主記憶装置へデータ要求すれば良い。
【0061】
図9は、下位メモリへのデータ要求信号を生成する回路の構成例を示す図である。
命令プリフェッチ要求信号に1段ラッチをかませて得た信号(+IF PREFCH REQUEST VALID LCH)あるいは、命令フェッチ要求信号に1段ラッチをかませて得た信号(+IFCH REQUEST VALID LCH)のいずれかが“H”となって入力されると、OR回路47の出力が“H”になる。そして、命令キャッシュ2から得られるキャッシュミスヒットを示す信号(+CACHE NOT FOUND DATA)とのANDを取る。これにより、キャッシュミスヒットが起きた場合に下位メモリへのデータ要求(ムーブイン;+MOVE IN REQUEST)が“H”となって出力される。このデータ要求信号は命令キャッシュ2に入力される。
【0062】
また、下位キャッシュあるいは主記憶装置などの下位メモリにデータ要求する場合、いずれの場合にも、キャッシュデータを命令制御装置に送らないので、そのための抑制回路が必要である。本実施形態においては、フェッチリクエストのキャンセル信号を利用している。
【0063】
図10は、プリフェッチ要求時のキャッシュから命令制御装置へのデータ転送抑制信号を生成する回路例を示す図である。
命令プリフェッチ要求に1段ラッチをかませた信号(+IF PREFCH REQUEST VALID LCH)あるいは、分岐命令制御部から入力される分岐予測失敗を示す信号(+CANCEL ALL PORT)(22)が入力されると、命令制御装置へのデータ転送抑制信号である+CANCEL PORT PREFCHが出力される。
【0064】
図11は、第2の命令プリフェッチ機構の構成例を示す図である。
本実施形態においては、命令フェッチ制御部9は、分岐命令プリフェッチポートを二つ持っている。すなわち、最大二つの分岐命令プリフェッチ要求を出すことが可能である。また、1回の命令フェッチもしくは分岐命令プリフェッチで、主記憶部(もしくはキャッシュ)1’から16バイトの命令列を確保することができるものとする。
【0065】
分岐命令処理部5においては、4つの分岐命令リザベーションステーション5−1を持っており、最大4つの分岐命令の管理(処理)が可能である。
また、同図において、括弧付き番号で示される各信号は、図2で説明したとおりである。
【0066】
キャッシュ/主記憶装置1’からフェッチ命令列(4)が命令フェッチ制御部9に送られ、フェッチポートAあるいはBに格納される。そして、フェッチされた命令列は、デコードする命令列(5)として、命令デコード部4に送られて、デコードされる。命令デコードした情報(6)は、それが分岐命令である場合には、分岐命令処理部5に入力され、分岐命令リザベーションステーション5−1に登録される。そして、アウトポインタ(OUT−PTR)5−2によって指示されるリザベーションステーション5−1を参照して、分岐命令プリフェッチ要求(10)がキャッシュ/主記憶装置1’に送られるとともに、命令フェッチ制御部9の分岐命令プリフェッチポートAあるいはBに格納される。分岐命令プリフェッチアドレス(21)がキャッシュ/主記憶装置1/2に送られる。また、命令フェッチが失敗した場合には、分岐命令処理部5から命令フェッチ制御部9に再命令フェッチ要求(9)が送られる。
【0067】
分岐命令リザベーションステーション5−1は、図12(a)のようなエントリを持っている。本実施形態においては、分岐命令の完了は最大1命令行えるものとし、次に完了させるべき分岐命令をポインタ5−2で管理しているものとする。図12の各エントリの信号は、後述の回路で使用される。
【0068】
図13は、分岐命令の処理の流れを説明する図である。
まず、Dステージで、命令のデコードが行われ、Aステージで分岐先命令アドレスの計算が行われる。それから、Xステージにおいて分岐・非分岐の確定するのを待つ。このXステージにおいて、条件コード及び前分岐命令の確定が行われる。そして、次のUステージで、分岐実行が行われ、Wステージで分岐命令が完了する。
【0069】
すなわち、命令デコード部4でデコードされ分岐命令と判断された命令は、分岐命令リザベーションステーション5−1に登録されると同時に、アドレス生成部(不図示)において該命令が分岐する場合の分岐先アドレスを計算する。そして、該命令の直前に行われている演算命令の終了により条件コードが確定することによって、該分岐命令の動作が確定する。ここで、該分岐命令が、分岐予測による分岐判断と実際の動作が異なる場合、従来技術ではこの動作の確定時点で初めて(Uステージで)再命令フェッチを行うことになる。
【0070】
図14は、分岐命令リザベーションステーションの実行順序回路の構成例を示す図である。
図11のアウトポインタ5−2から出力される、どの分岐命令リザベーションステーションにエントリされている分岐命令を処理するかを示す信号(RSBR OUT PTR<0>、<1>)に従って、各分岐命令リザベーションステーションの優先順位を決定する。アウトポインタ5−2から出力される信号は、2ビットからなっており、「00」の時は、0番目のリザベーションステーションRSBR0が最も優先順位が高い。「10」の時は、1番目のリザベーションステーションRSBR1、「01」の時は、2番目のリザベーションステーションRSBR2、「11」の時は、3番目のリザベーションステーションRSBR3が最も高い優先順位を有するようになっている。最も高い優先順位より低い優先順位のリザベーションステーションは、サイクリックに優先順位が割り当てられる。
【0071】
図15は、分岐命令リザベーションステーションの実行順序別信号生成回路の例である。
同図の回路は、優先順位が最優先のものを1つ記載しているが、実際には、各優先順位毎に同様の回路が設けられている。
【0072】
図14の回路から入力される各信号▲1▼−0〜▲1▼−3と、分岐命令リザベーションステーションRSBR0〜RSBR3のエントリである有効フラグ▲2▼−0〜▲2▼−3がそれぞれのAND回路50〜53に入力され、信号▲1▼と信号▲2▼とがともに“H”となった時点で、その優先順位の分岐命令リザベーションステーションに対応する分岐命令を処理すべき旨を示す信号(同図の場合、+RSBR TOQ VALID)がそれらのAND回路50〜53の出力が入力されるOR回路54を介して出力される。
【0073】
図16は、分岐命令プリフェッチアドレスの生成回路の構成例を示す図である。
同図の回路も、各分岐先リザベーションステーションRSBR0〜RSBR3に対応してそれぞれ設けられる。
【0074】
同図のセレクタ61には、分岐命令リザベーションステーションRSBRx(x=0〜3)のエントリである分岐命令アドレスと分岐命令長とを加算したアドレス信号(+RSBRx IAR+ILC<1:31>)と、分岐先命令アドレス(+RSBR TIAR<1:31>)が入力される。これらは、それぞれプログラムの分岐命令の次の行に記述されている命令列のアドレスと、分岐先命令アドレスを示しており、分岐命令リザベーションステーションRSBRxのエントリである分岐予測フラグ(+RSBRx BRHIS HIT)によってセレクタ61が制御され、いずれかのアドレスが分岐命令プリフェッチアドレス(+RSBRx PREFCH IAR<1:31>)として出力される。分岐予測フラグは、ブランチヒストリ9−2において、非分岐予測がなされた場合には、“0”、分岐予測がなされた場合には“1”となる。セレクタ61は、分岐予測フラグが“0”のときは、分岐先命令アドレスを、“1”のときは分岐命令アドレスに分岐命令長を加算して得られる信号を、分岐命令プリフェッチアドレスとして選択出力する。
【0075】
図17は、分岐命令プリフェッチ可能信号の生成回路の構成例である。
なお、同図の回路は、各分岐命令リザベーションステーションRSBRxのそれぞれに対応して設けられるものである。
【0076】
同図の回路では、各分岐命令リザベーションステーションRSBRxのエントリである分岐先アドレス確定フラグ(+RSBRx TIAR VALID)と分岐予測フラグの論理反転した信号(−RSBRx BRHIS HIT)とのANDが取られる。すなわち、分岐先アドレスが確定し、分岐予測が成立していない場合に、AND回路71の出力が“1”となる。この信号は、分岐予測フラグ(+RSBR BRHIS HIT)とともに、OR回路72に入力され、更に、AND回路73に入力される。そして、分岐命令リザベーションステーションRSBRxのエントリである分岐条件コード確定フラグ(−RSBRx RESOLVED)とのANDが取られ、分岐命令プリフェッチ可能信号(+RSBRx PREFCH REQ VALID)が出力される。
【0077】
図18は、図19に入力する信号を生成する中間回路の構成例である。
なお、同図の回路は、分岐命令リザベーションステーションRSBR0〜RSBR3の優先順位の数だけ、すなわち、本実施形態の場合は、同図の回路も含めて3つが設けられる。
【0078】
図14及び図17の回路からの出力信号をそれぞれAND回路80〜83に入力し、分岐命令リザベーションステーションの実行順序が与えられ、分岐命令プリフェッチが可能となった時点で、該分岐命令プリフェッチに対応する分岐命令リザベーションステーションRSBRxに格納される分岐命令のプリフェッチを要求するための信号を生成するための中間信号(1ST(TOQ) RSBR PREFCH REQ VALID、この他に、優先順位が2ND、3RDの信号も平行して生成される)を出力する。
【0079】
図19は、分岐命令プリフェッチ要求有効信号と選択信号を生成する回路の構成例である。
同図の回路は、図18の出力を入力とし、優先順位最上位(1ST)の分岐命令リザベーションステーションRSBRxのプリフェッチを最優先にし、順次2ND、3RDと分岐命令プリフェッチ選択信号(+1ST RSBR PREFCH SEL、+2ND RSBR PREFCH SEL、+3RD RSBR PREFCH SEL)を出力するものである。この選択信号により、どの分岐命令リザベーションステーションRSBRxに登録されている分岐命令に対応する分岐先命令をプリフェッチするかが決定される。
【0080】
また、いずれかの選択信号が出力された場合には、分岐命令プリフェッチ要求が生成されたものとして、分岐命令プリフェッチ要求(+BR PREFCH REQ VALID)が出力される。
【0081】
本実施形態では、図16〜図19の回路構成のようにすることで、非分岐予測された場合には、分岐先アドレス計算がすんだ時点で分岐先命令プリフェッチの動作を、分岐予測された場合には命令が分岐リザベーションステーションに登録された時点で非分岐の場合の後続の分岐命令プリフェッチの動作を、直ちに開始することができる。この際、分岐命令プリフェッチ動作を行ったことを示すフラグ(RSBRx PREFCH DONE)を分岐命令リザベーションステーションRSBRxにセットし、同時に、使用した分岐命令プリフェッチポートが使用中であることを示すフラグを、同じく分岐命令リザベーションステーションRSBRxにセットする。
【0082】
図20は、分岐命令プリフェッチポートの使用中を示すフラグを生成する回路の構成例である。
図11で説明したように、分岐命令プリフェッチポートはAとBの2つが設けられているので、同図の回路もポートA用とポートB用の2つが設けられる。ただし、分岐命令プリフェッチポートが2以外の数だけ設けられている場合には、その数に対応して、同図の回路も設ける。
【0083】
同図の回路は、分岐命令リザベーションステーションのエントリである+RSBR PREFCH PORT xを入力し、フリップフロップ101を介して、プリフェッチに使用しているポートが使用中であることを示すフラグ+PREFCH PORTx BUSYを出力する。また、図11の(9)の信号である再命令フェッチ要求(図20では、+REIFCHと記載されている+RE IFETCH REQUEST信号のことである)、あるいは、後述する図23のプリフェッチポートのキャンセル信号+PFCH PORT x CANCEL、あるいは、命令キャッシュから入力されるプリフェッチをキャンセルする旨の信号+CANCEL PREFCH PORTx FROM SUのいずれかがOR回路102に入力された場合に、フリップフロップ101をRESETし、分岐命令プリフェッチポートの使用中フラグ(+PREFCH PORTx BUSY)をリセットする。
【0084】
そして、RSBRx PREFCH DONEフラグがセットされている場合は、条件コードが確定し(すなわち、分岐命令リザベーションステーションRSBRxにRSBRx RESOLVEDフラグがセットされ)、かつ前の分岐命令が確定して(すなわち自分自身が優先順位第1位の分岐命令となって)いれば、該プリフェッチ要求を、条件コードに応じて棄却するか、実命令フェッチに切り替えるかすれば良い。
【0085】
逆に、分岐命令プリフェッチが不要になれば該プリフェッチポートをキャンセルすれば良い。
図21及び図22は、分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図である。
【0086】
図21の回路では、リザベーションステーションRSBRxから、分岐成立/不成立フラグ(+RSBRx TAKEN)と、分岐予測フラグ(+RSBR BRHIS HIT)をEXOR回路111、112に入力し、排他論理和を取る。分岐成立/不成立フラグ(+RSBRx TAKEN)と分岐予測フラグ(+RSBRx BRHIS HIT)の一方が“0”、すなわち、分岐が成立しており、分岐不成立を予測している場合、あるいは、分岐が不成立で、分岐成立を予測している場合には、“1”の分岐予測失敗フラグ(+RSBRx PREDICT FAILURE)をEXOR回路111から出力する。逆に、分岐が成立しており、分岐成立を予測している場合、あるいは、分岐が不成立で、分岐不成立を予測している場合には、“0”の分岐予測成功フラグ(+RSBRx PREDICT SUCCESS)を出力する。
【0087】
図22では、図22(a)において、図21の回路からの分岐予測成功/失敗フラグをAND回路122−1〜122−3に入力するとともに、分岐命令リザベーションステーションRSBRxから、プリフェッチ要求済みフラグ(+RSBRx PREFCH DONE)、分岐条件コード確定フラグ(+RSBRx RESOLVED)をインバータ121、及び、AND回路122−1〜122−3に入力する。そして、プリフェッチ要求済みフラグ(+RSBRx PREFCH DONE)は、AND回路122−2、122−3に入力されるとともに、AND回路122−1に論理反転されて入力される。また、分岐条件コード確定フラグ(+RSBRx RESOLVED)は、AND回路122−1〜122−3にそのまま入力される。また、分岐予測失敗フラグ(+RSBRx PREDICT FAILURE)は、AND回路122−1と122−2に入力され、分岐予測成功フラグ(+RSBRx PREDICT SUCCESS)は、AND回路122−3に入力される。プリフェッチ要求が完了しておらず、分岐条件コードが確定し、分岐予測が失敗した場合には、AND回路122−1から分岐命令リザベーションステーションRSBRxの命令の再フェッチリクエスト(+RSBRx REIFCH REQUEST)が出力される。プリフェッチ要求が完了しており、分岐条件コードが確定し、分岐予測が失敗した場合には、AND回路122−2から分岐命令リザベーションステーションRSBRxのプリフェッチを実フェッチに変更する信号(+RSBRx PREFCH TO REAL)が出力される。また、プリフェッチ要求が完了しており、分岐条件コードが確定し、分岐予測が成功した場合には、命令プリフェッチせずに、命令を直接フェッチすればよいので、命令プリフェッチをキャンセルする信号(+RSBRx PREFCH CANCEL)がAND回路122−3から出力される。
【0088】
図22(b)の回路は、再命令フェッチ要求を行うための信号を生成する回路例である。
図22(a)の回路から分岐命令リザベーションステーションRSBR0〜RSBR3の再フェッチリクエスト信号(+RSBR0〜3 REIFCH REQUEST)がそれぞれ入力され、図14の分岐命令リザベーションステーションRSBR0〜RSBR3の実行順序を示す信号(+RSBR TOQ EQ 0〜3)とのANDをAND回路125−0〜125−3で取り、更に、これらのORをOR回路126で取ることにより、再命令フェッチ要求(+RE IFETCH REQUEST)が生成される。従って、再フェッチリクエスト信号がいずれかの分岐命令リザベーションステーションRSBRxに来ており、その分岐命令リザベーションステーションRSBRxの実行順序に来ていたら、再命令フェッチ要求を出すことになる。
【0089】
図23は、分岐命令プリフェッチのポート毎のキャンセルを行う信号を生成する回路例である。
同図の回路は、図22(b)の回路から出力される再命令フェッチ要求(+RE IFETCH REQUEST)をOR回路130−1、130−2に入力するとともに、各分岐命令リザベーションステーションRSBR0〜3に対応して設けられるAND回路131−1〜131−4・・・からの入力を受けて、図11に示される分岐命令プリフェッチポートA、Bのキャンセル信号を生成し、命令フェッチ制御部9に入力する。各分岐命令リザベーションステーションRSBR0〜RSBR3については、それぞれ同様な回路構成となっているので、分岐命令リザベーションステーションRSBR0について説明する。
【0090】
まず、AND回路131−1には、図22(a)の回路から命令プリフェッチキャンセル信号(+RSBR0 PREFCH CANCEL)と分岐命令リザベーションステーションRSBR0に格納されているプリフェッチポート番号の反対論理信号(−RSBR0 PREFCH PORT)が入力され、これらの信号のANDがAND回路131−1により取られる。これにより、今、命令プリフェッチポートはAとBの二つなので、たとえば、“0”をポートAに“1”をポートBに割り当てていることを想定している。すると、AND回路131−1には、命令プリフェッチキャンセル信号が入力され、そのプリフェッチポートがAの場合には、AND回路131−1はOR回路130−1に論理“1”の信号を入力する。従って、OR回路130−1からポートAのキャンセル信号(PFCH PORT A CANCEL)が出力される。また、ポートBの場合には、AND回路131−2に命令プリフェッチキャンセル信号が入力され、ポートBが指定されていた場合には、ポートBのキャンセル信号(PFCH PORT B CANCEL)が出力される。再命令フェッチ要求(+RE IFETCH REQUEST)の場合には、ポートAとBの両方をキャンセルする。
【0091】
このようにして、分岐命令リザベーションステーションRSBR0〜3について、信号を処理し、1つでもキャンセルの条件がそろえば、OR回路130−1からはポートAのキャンセル信号(PFCH PORT A CANCEL)が、OR回路130−2からはポートBのキャンセル信号(PFCH PORT B CANCEL)が出力される。
【0092】
次に、ストア命令が実行命令列に存在した場合の制御について説明する。
ストア命令による書き込みアドレスとフェッチ要求された命令列のアドレスとの比較により該ストア命令がフェッチ命令列を書き換える可能性があることを検出する必要がある。これは通常の命令フェッチだけでなく、本発明の実施形態による分岐命令プリフェッチにおいても考慮すべき事項である。
【0093】
主記憶装置(あるいは、キャッシュ機構)においては、要求された命令フェッチに対して、結果の命令列を命令制御部に返すまでにストア命令による書き込み指示があった場合には、該ストア命令による書き込みを反映した結果を返すことが出来るものが多い。この場合、結果を命令制御装置側で管理する方法、すなわちストア命令の書き込み管理がキャッシュ機構(あるいは主記憶装置)によって行われない回路を持つ場合のみに、該ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出し、対策をとれば良い。もちろん、主記憶装置(あるいは、キャッシュ機構)にそのような機構が備わっていない場合は常にこの可能性を検出し、対策をとる必要がある。
【0094】
分岐命令プリフェッチされる命令列は合計16バイトであり、またストア系命令によってストアされるデータ列長が常に16バイト以内であるとすれば、1つのアドレスに1バイトの書き込みが可能であることを考えると、ストア先アドレス値とプリフェッチアドレス値の差が以下の条件を満たす必要がある。すなわち、
−16<ストア先アドレス−プリフェッチアドレス<16
であるとき、前述の上書き可能性があることになる。
【0095】
図24は、ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出する回路例を示す図である。
同図において、+STORE ADRはストア先アドレス、+RSBRx PREFCH IARは、分岐命令リザベーションステーションxのプリフェッチアドレス(すなわち、図16の出力)、+ST MN Px IARは、この二つのアドレスの引き算の結果であり、分岐命令リザベーションステーションx上の分岐命令によって要求された分岐命令プリフェッチ命令列がストア命令によって書き換えられる可能性があることを検出したことを示す信号が、+ST IN PREFCH xである。
【0096】
従って、本実施形態の場合、特に、この検出回路に必要なプリフェッチアドレスとして、分岐命令リザベーションステーションRSBRxに記録されている、分岐命令自身の次の命令のアドレスもしくは分岐先アドレスを選択して与える回路は図16となる。
【0097】
ストア命令が該分岐命令プリフェッチ命令列を書き換える可能性があると判断された場合に、分岐命令プリフェッチ要求を棄却する場合には、該可能性判断信号を、その他の要求棄却要因との論理和をとって、命令キャッシュあるいは主記憶装置に送出すれば良い。
【0098】
同図において、ストア先アドレス(+STORE ADR)とプリフェッチアドレス(+RSBRx PREFCH IAR)の差を減算器150で求め、差信号(+ST MN Px IAR)を生成する。次に、AND回路151−1では、+ST MN Px IARのビットの内、下位4ビットを無視し、上位27ビットを入力する。ストア先アドレスとプリフェッチアドレスの差が正で16より小さい場合には、差信号の下位4ビットを除いた上位27ビットはすべて“0”となる。従って、AND回路151−1の出力は“0”となる。一方、AND回路151−2には、+ST MN Px IARをインバータ154により論理反転した信号の下位4ビットを除いた、上位27ビットが入力される。上記アドレスの差が正で16より小さい場合には、AND回路151−2に入力されるビットはすべて“1”となるので、AND回路151−2の出力は、“1”となる。これをOR回路152で論理和を取り、AND回路53に入力する。AND回路153には、分岐命令リザベーションステーションからプリフェッチ要求済みフラグ(+RSBR PREFCH DONE)が入力されており、プリフェッチが要求済みの場合のみ、上書きされる危険性があることを示す信号(+ST IN PREFCH x)を“H”にして出力する。
【0099】
上記アドレスの差が負で−16より大きいときは、上記処理において、ST MN Px IARの論理が反転するので、AND回路51−1が“1”を出力し、AND回路151−2が“0”を出力する。この場合も、プリフェッチが要求済みである場合のみ、信号(+ST IN PREFCH x)が出力される。そして、この信号(+ST IN PREFCH x)を主記憶装置などに入力し、プリフェッチをキャンセルするようにすれば、上書きによる障害を回避することができる。
【0100】
なお、上記実施形態において、RSBRxやPORTxなどの「x」は、分岐命令リザベーションステーションの番号やポートの番号などを示しており、図面に「x」を用いた信号を使って記載されている回路は、分岐命令リザベーションステーションの数、あるいは、ポートの数に対応した数だけ、それぞれが対応して設けられていることを意味している。
【0101】
また、上記実施形態では、プリフェッチアドレスの具体的計算方法を説明しなかったが、これは、本発明の実施形態に係る命令プリフェッチ機構を有効に利用できる場合に、当業者が必要に応じて適切なプリフェッチアドレスを算出させ、使用するようにする。このプリフェッチアドレスの演算の一実施形態としては、条件分岐命令の実行において、分岐予測された分岐先アドレスとは逆の、分岐予測されなかった先のアドレスを命令プリフェッチするようにすることが考えられる。これによれば、分岐予測に失敗しても、もう一つの分岐先である、分岐予測されなかった先のアドレスの命令がすでにプリフェッチされているので、命令処理速度の向上に非常に有効である。
【0102】
また、上記実施形態では、別々に説明したが、第1の問題点を解決する構成と第2の問題を解決する構成とをともに情報装置に組み込めば、より有効なことは、当業者によれば、容易に認識され、実現されるであろう。
【0103】
上記実施形態においては、命令プリフェッチを実命令フェッチに対して1回のみ行う構成を示したが、以下には、命令プリフェッチに対する更に次の命令のプリフェッチを行う実施形態について説明する。
【0104】
図25は、前述の実施形態における命令実行の様子を説明する概念図である。
図25において、実線の枠は、実命令フェッチを表している。すなわち、まず、現在フェッチされた命令列に対し、命令のデコードを行い、処理を行うと共に、分岐予測を行い、分岐先命令列をフェッチする。そして、この分岐先命令ののフェッチに伴って、分岐予測が発生し、更に先の分岐先命令列がフェッチされる。そして、この分岐先命令列の次の命令に対し、命令プリフェッチ(後続命令プリフェッチを行うか分岐予測を行って分岐先命令のプリフェッチを行う。
【0105】
しかしながら、前述の実施形態においては、命令プリフェッチ対象は「続いて命令フェッチ要求を予定している命令列」のみであった。これは命令プリフェッチの効果を自ら制限するものであった。前述の実施形態においては、命令デコードのための一時命令バッファは、
・アドレスが連続する、連続した命令列の長さ
・分岐予測により、アドレスは連続しないが実行経路として連続する(と予測される)命令列の、不連続点(分岐すると予測された分岐命令)の数
の2点で物理的に制限される。図25に示されるように、この命令フェッチの物理制約の直後の後続命令あるいは分岐先命令に対して命令プリフェッチを行うこと、(あるいは、それぞれ分岐予測が失敗した場合に備えての、それぞれ非分岐側の後続の命令プリフェッチ)のみが可能であった。
【0106】
以下の実施形態では、これを更に一般化し、その更に先までトレースすることが可能なようにする。特に、「続いて命令プリフェッチ要求を予定している命令列」へ適用できるように拡張する。すなわち、命令フェッチの一時バッファの大きさなどの物理制約によって命令プリフェッチ要求が制限されなくなるようにする。
【0107】
図26は、本実施形態の概念図である。
すなわち、図26の上段に現在の命令列が実フェッチされ、命令のレコードが行われる処理が示されているが、このとき、分岐予測を行い、分岐先命令列の実命令フェッチが行われる。更に、分岐先命令列の分岐予測を行い、次の分岐先命令列の実フェッチを行う。そして、次の段において、分岐予測がなされ、後続命令のプリフェッチあるいは、分岐先命令のプリフェッチが行われる。本実施形態では、この命令プリフェッチされた分岐先命令列に基づいて、更に分岐予測を行い次の分岐先命令列の命令プリフェッチを行う。このようにして、1つ前に命令プリフェッチされた命令列に基づいて、更に次の命令列の命令プリフェッチを行う点が本実施形態の特徴である。
【0108】
この拡張により、トレースキャッシュ方式を採用していない一般のキャッシュメモリと、ブランチヒストリなどの分岐予測手段を組み合わせることで、少ないコストで簡単にトレースキャッシュと同程度の機能を構築することができる。
【0109】
図27は、本実施形態の処理の基本的な流れを示すフローチャートである。
まず、最初ステップS1において、再命令フェッチが生じたとすると、ステップS2において、命令一時バッファが満杯か否かを判断する。命令一時バッファが満杯でない場合には、ステップS3において、命令フェッチ動作を行い、ステップS2に戻る。ステップS2において、命令一時バッファが満杯であるときには、分岐成立を予測したが分岐先フェッチが出来なかったか、分岐成立が予測されずに後続フェッチができなかったのかによって、ステップS4あるいはステップS5に進む。
【0110】
ステップS4においては、分岐予測成立を予測したが分岐先フェッチが出来なかった場合なので、分岐予測先命令プリフェッチ機構を起動し、命令プリフェッチアドレスを設定し、命令プリフェッチアドレスを有効化する。ステップS5においては、分岐成立が予測されずに後続フェッチができなかった場合なので、後続命令プリフェッチ機構を起動し、命令プリフェッチアドレスを設定し、命令プリフェッチアドレスを有効化する。
【0111】
ステップS6においては、再び再命令フェッチ要求が生じたか否かを判断する。再命令フェッチ要求が発生した場合には、ステップS7に進んで、命令一時バッファのクリアなどを行い、ステップS8において、命令プリフェッチアドレスを無効化してステップS1に戻る。
【0112】
ステップS6において、再命令フェッチ要求が生じていない場合には、ステップS9に進み、命令一時バッファが満杯か否かを判断する。命令一時バッファが満杯でない場合には、命令フェッチ動作を行い(ステップS10)、ステップS6に戻る。
【0113】
ステップS9において、命令一時バッファが満杯であると判断されると、ステップS11に進み、前回の命令プリフェッチで分岐予測がされたか否かが判断される。分岐予測された場合には、ステップS12に進んで、分岐予測先命令プリフェッチ機構を起動し、命令プリフェッチアドレスを更新して、ステップS6に戻る。分岐予測されない場合には、ステップS13において、後続命令プリフェッチ機構を起動し、命令プリフェッチアドレスを更新して、ステップS6に戻る。
【0114】
すなわち、後続の処理方向へのデマンドフェッチ(実命令フェッチ)が行える間は、そのデマンドフェッチを優先すべきで、従って、デマンドフェッチを行う。
【0115】
デマンドフェッチを行えない状況になった場合(ヘッジフェッチ(分岐予測された分岐先とは反対の予測されなかった方の命令列のフェッチ)を行うかどうかは実装により可変)、その後続処理(分岐予測を含む)命令列の命令プリフェッチを要求し、要求した命令プリフェッチアドレスを格納し、また、そのアドレスによって分岐予測機構を参照する。
【0116】
また、デマンドフェッチが行える場合には、それを優先するし、あるいは命令の実行系列が予測と異なった場合の再命令フェッチの要求が出された場合は命令プリフェッチのアドレスを無効化する。どれにも当てはまらなければ命令プリフェッチを起動し、前回登録したアドレスの次の実行系列(分岐予測がされたら、その分岐先、されなければ後続命令列)を命令プリフェッチし、そのアドレスを登録する。
【0117】
他にオルタネイトパス(実行予測されている方向以外の分岐方向の命令列など)の命令フェッチ(ヘッジフェッチ等)を持つ機構も存在するが、それはデマンドフェッチとプリフェッチの間で行えばよく、本質的な考え方は前述の通りである。
【0118】
ここで、命令プリフェッチ手段も通常の命令フェッチ要求と同様LBS(Local Buffer Storage:一次キャッシュ)を動作させるので、命令プリフェッチによって、その後続の命令フェッチ要求(もしくは命令プリフェッチ要求)は阻害されうる。
【0119】
すなわち、命令プリフェッチ要求を大量に発行すると、最悪の場合、その命令プリフェッチによってLBSと下位メモリ間のメモリ転送処理を行うために、その後本当に必要となった通常の命令フェッチ要求でさえ、かなり待たされる。
【0120】
図28は、命令プリフェッチ要求の影響で命令フェッチ要求が遅延する場合を説明する図である。
図28上段に記載されているように、分岐命令であるBCによって、分岐予測され、分岐先としてXXXが予測されたとすると、図28下段に記載されているように、BCの処理がサイクルIA、IT、IB、IRと進行する間に、分岐先命令プリフェッチ(XXXのプリフェッチ)がサイクルPA、PT、PBと進む。ここで、分岐先命令プリフェッチがPBまで進むと、下位メモリから分岐先命令のプリフェッチを行うためデータの転送処理時間が必要となる。すると、BCの次の命令であるNOPの実行が始まっても、下位メモリにアクセスできないため、サイクルIA、ITと進んだ、NOPの実行は分岐先命令プリフェッチの転送処理の終了を待たなくてはならず、サイクルIB、IRの実行が非常に遅延してしまう。
【0121】
あるいは、命令フェッチ及び命令プリフェッチの優先順位の制御構成によっては、通常の命令フェッチ要求を出せなくなる可能性がある。
図29は、命令プリフェッチ要求を制約なしに出せてしまうと問題となる場合について説明する図である。
【0122】
この例では、図29上段に示されているように、計数分岐命令BCTにより一定回数だけXXXとBCTが繰り返し実行される命令列を示している。分岐予測により、BCTはXXXに分岐することが予測されるので、図29下段に示されるように、実行予測命令列は順に、・・・、NOP、XXX、BCT、XXX、BCT、XXX、BCT、・・・となる。このうち、XXX、BCTの命令列は、2回目以降は直前のBCTの分岐先命令であるので、分岐先命令プリフェッチによるプリフェッチ要求が出続ける。すると、NOPの後続命令である1回目のXXX、BCT命令列が最初に後続命令プリフェッチとして発行されていると、この分岐先命令プリフェッチの方が後続命令フェッチより優先順位が高い場合には、図29のようになってしまい。このデマンドフェッチ(後続命令フェッチ)は発行できなくなる。
【0123】
したがって、命令プリフェッチ要求の頻度をある程度制限する手法が有効(あるいは実施方法によって必須)となる。
図30は、命令プリフェッチ抑制回路の構成例を示す図である。
【0124】
前述の実施形態においては、命令フェッチポート毎に命令プリフェッチ完了のフラグを設置し、命令プリフェッチ要求の制御を行っていた。本実施形態においては、命令プリフェッチ先の命令プリフェッチのための制御が必要となる。
【0125】
本実施形態の第1の構成例として、簡易的な再帰的命令プリフェッチ手段を備える例を示す。
前述の実施形態のような優先順位回路を備える場合、分岐予測先命令プリフェッチ要求は、後続命令デマンドフェッチよりも優先順位が高いので、前述のように「はまる」(後続命令フェッチが分岐先命令プリフェッチの連続発行により、行えなくなる状態になる)可能性はある。したがって、例えば、分岐先命令プリフェッチ要求(+IF REQ PREFCH BRHIS GO)が一定回数発行された場合には、デマンドフェッチが行われるまで命令プリフェッチ要求を抑制(+SUPRESS BRHIS TGT PREFCH)する論理を構成する。これが、図30の構成である。図30の構成においては、計数回路によって分岐先命令プリフェッチ要求が発行された回数を計数する構成となっている。この際、デマンドフェッチが行われれば、「はまり」状態からは回避できていることになるので、(命令プリフェッチではない)命令フェッチ要求を出したことを示す+IFCH REQUEST VALIDを計数回路のリセット信号としている。
【0126】
図31は、命令プリフェッチとデマンドフェッチとを切り替えるために必要となるフェッチポート選択回路の構成例を示す図である。
図31の命令フェッチポート選択回路は、命令フェッチを行う場合にどのポートを使うかを演算して、指示信号を出力する回路であり、詳細な構成は公知の技術と同様であるので説明を省略する。
【0127】
図31の構成では、命令フェッチを行うポートは、A、B、Cの3つがあるとしている。そして、これら3つの全てのセレクト信号が出力された場合に、命令フェッチポートが満杯である旨の信号+IBUFF FULLが出力される構成となっている。
【0128】
図32は、図30、図31の構成を反映した優先順位決定回路の構成例を示す図である。
図32の構成においては、前述の+SUPRESS BRHIS TGT PREFECHによって制限されない限りは、優先順位に従い、その以前の要求がプリフェッチであるかデマンドフェッチであるかに関わらず、その要求に対応する分岐先命令プリフェッチ(あるいは後続命令プリフェッチ)を要求することが可能となる。すなわち、図32の出力+IF REQ PREFCH BRHIS GOが図30の計数回路に入力され、分岐先命令プリフェッチが生じた回数を計数し、所定回数になったら分岐先命令プリフェッチを抑制する−SUPRESS BRHIS TGT PREFECHが図32の優先順位決定回路に入力され、+IF REQ PREFCH BRHIS GOの出力が抑制される。
【0129】
このような構成を取ることで、前述の「はまり」状態を回避しつつ、深い命令プリフェッチを発行することが可能である。
図33は、前述の実施形態の命令プリフェッチによるブランチヒストリ検索回路を示す図である。
【0130】
アドレス演算器からのアドレス+IF EAGがブランチヒストリに入力されると、対応するデータとTAGが出力される。出力されたTAGを用いてヒット検出を行い、出力されたデータの選択を行う。データの選択を行うのは、図33がセットアソシエイティブ方式を採用していることを前提にしているからであり、採用する方式によっては、データ選択は行う必要がない場合がある。出力されたデータとヒット検出信号はFFを介して、+IB BRHIS DATA、及び、+IB BRHIS HITとして出力される。ここで、パイプラインにおいてインターロックが生じたことを示す信号+PIPELINE INTERLOCKは、データ用及びヒット信号用FFに入力され、インターロックが生じた場合には、その直前に検出されたブランチヒストリのヒットデータ及びヒット信号を保持するように構成されている。
【0131】
ここでは、ブランチヒストリの検索結果を得るのに2τ(τはマシンサイクル)かかるものとする。前述の実施形態では、キャッシュミスなどにより命令フェッチデータを待つ場合(パイプラインインタロックが発生する場合)にはブランチヒストリの検索結果をパイプラインに同期させるためにその間、+PIPELINE INTERLOCK信号によりホールドさせているが、命令プリフェッチはパイプラインインタロックとは無関係に動作するようにするために、別途制御する必要がある。
【0132】
図34は、本実施形態を図33のブランチヒストリ検索回路に適用した構成例を示す図である。
なお、ここにおいて、ブランチヒストリ、ヒット検出、データ選択、データ用及びヒット信号用FFの動作は、図33と同じなので説明を省略する。
【0133】
ここでは、IA、IT、IB、IRの4段パイプラインによる命令フェッチを仮定している。検索の要求に関し、ITサイクルでパイプラインインタロックが発生した場合の最初のIBサイクル、IBサイクルでパイプラインインタロックが発生している場合、いずれでもパイプラインインタロックが発生しなかった場合の最初のIBサイクル、の3つで場合分けして、前述の実施形態の+IB BRHIS HITと全く同じ信号を生成することができる。
【0134】
すなわち、図34の+1ST IB EQ IT 1T VALID信号は、パイプラインインタロックが発生していない場合に、+IT BRHIS HIT 1T(ヒット信号)をそのまま+IB BRHIS HITとして出力させる信号である。
【0135】
また、ITサイクルでロックが生じた場合には、FF200に−IFCH REQUEST VALID 2Tが入力され、ロックしたために繰り返されるITサイクルの内、2番目のITサイクルにおいて生じたブランチヒストリヒット信号と、ITサイクルのロックが解けて後の最初のIBサイクルにおいて生じたブランチヒストリヒット信号とがFF200に保持される。また、最初のIBサイクルにおいて生じたヒット信号は、パイプラインインタロックが生じた場合には、FF201にも保持される。そして、ITサイクルがロックした場合に、+1ST IB VALID IT PENDEDがFF200からの+IT BRHIS HIT 2T HOLDを+IB BRHIS HITとして出力させる。
【0136】
パイプラインインタロックが生じて、IBサイクルで処理がロックした場合には、+PIPELINE INTERLOCKEDがFF201に入力され、IBサイクルの2番目以降において生じたヒット信号がFF201に保持される。そして、+IB PENDINGによって、FF201から出力される+IB BRHIS HIT PENDINGが+IB BRHIS HITとして出力される。
【0137】
図35は、図34の動作を説明するタイミングチャートである。
図35においては、ITサイクルとIBサイクルの両方でインターロックが起こった場合を示している。
【0138】
まず、マシンサイクルがIA、IT、IT、IT、IB、IB、IB、IB、IRとなったとする。ブランチヒストリの検索結果を得るには、2τかかるので、IAでブランチヒストリを検索した結果は、2番目のITにおいて得られる。このとき、▲1▼−1で示されるように、+IFCH REQUEST VALID 2Tが立ち上がり、この時点のヒット信号がFF200に取り込まれる。+PIPELINE INTERLOCKは、2番目と3番目のITサイクルで立ち上がっているとする。すると、+IT BRHIS HIT 1Tが▲1▼−2に示すように立ち上がり、同じ信号がFF200にセットされている結果、▲1▼−3に示すように、+IT BRHIS HIT 2T HOLDが立ち上がる。
【0139】
そして、インタロックが解けて、ITサイクルからIBサイクルに変わり、IBサイクルの2番目から再びインタロックが生じたとすると、+IB BRHIS HIT PENDINGの信号が立つ(▲2▼−2)。また、+IT BRHIS HIT 2T HOLDは、次回の+IFCH REQUEST VALID 2Tが立つまで同じ信号を保持している(▲2▼−1)。セレクタ202において、ITサイクルでロックしたが、IBサイクルではロックしなかった場合には、+1ST IB VALID IT PENDEDによって、+IT BRHIS HIT 2T HOLDが+IB BRHIS HITとして出力され、IBサイクルにおいてインタロックが生じた場合には、+IB BRHIS HIT PENDINGが+IB PENDINGによって+IB BRHIS HITとして出力される(▲2▼−3)。
【0140】
以上の構成により、命令プリフェッチの命令プリフェッチがどのタイミングで出てもブランチヒストリにヒットしたことを検出することが出来る。また、データの方は、出力される度に、メモリに格納しておき、必要に応じて読み出す。
【0141】
本実施形態の第2の構成例として、本格的な再帰的命令プリフェッチ手段を備える例を示す。ここで、再帰的とは、プリフェッチに基づいて順次次のプリフェッチを行うことを示す。
【0142】
ここでは、命令プリフェッチアドレスを保持するレジスタを準備することで、トレース(再帰的に命令プリフェッチを行うためにアドレスを順次生成すること)を可能とする。
【0143】
命令プリフェッチアドレスは、実行予測命令列のアドレスをトレース出来れば良いので、そのアドレスの更新条件は、命令プリフェッチ要求が成立することである。
【0144】
また、再命令フェッチや割り込みなどにより命令実行をやり直す場合、先読みしていた命令プリフェッチ、すなわち予測されていた実行系列と実際の実行系列が変わるので、命令プリフェッチをトレースし直すための制御が必要になる。
【0145】
図36は、命令フェッチ及びプリフェッチアドレスの生成回路の構成例を示す図である。
ここで、図中の命令フェッチ制御回路には、優先順位決定回路や図31の命令フェッチポート選択回路などが含まれる。プリフェッチの機能を除いては前述の実施形態通りである。
【0146】
すなわち、ブランチヒストリの分岐予測結果は、BRHIS−TGT−IARとして、セレクタ210に入力される。また、命令実行制御機構からの再命令フェッチ要求は、IARXとして、セレクタ210に入力される。セレクタ210の出力は、フェッチポートIAR−A〜IAR−C及び、プリフェッチ用ポートPF−IARの何れかに入力される。どのポートにセレクタ210の出力である命令フェッチアドレスあるいは命令プリフェッチアドレスを入力するかは、命令フェッチ制御回路の命令フェッチポート選択回路によって決定される。命令フェッチポート選択回路から+IBUFF FULLが出力された場合には、プリフェッチ用ポートPF IARが選択される。これら命令フェッチポートから出力されたアドレスは、所定の数値(ここでは、16)が加算されて、後続の命令アドレスとしてセレクタ210から出力される。
【0147】
図37は、プリフェッチアドレス生成回路の構成例を示す図である。
後述の優先順位決定回路により分岐予測先命令プリフェッチが行われた時、最初にその命令プリフェッチアドレスがセットされ、図37の回路が有効となる。更に、図37の回路が有効で有れば、優先順位決定回路により、再帰的命令プリフェッチが発行されたときに命令プリフェッチアドレスが更新される。また、再命令フェッチなどが発生した場合には、+CLEAR PIPELINEが発行され、この回路が無効化される。
【0148】
すなわち、プリフェッチ要求が有効の場合には、+IF PREFCH REQUEST VALID信号が立ち上がり、SR−FFを介して、命令プリフェッチのイネーブル信号+ENABLE PREFCH TRACEが出力されると共に、+IF PREFCH REQUEST VALID信号の立ち上がりのタイミングで入力される命令プリフェッチアドレスIF EAGがPF−IARに取り込まれ、+IF PREFCH TRACE ADRSとして出力される。+CLEAR PIPELINEがSR−FFに入力される場合には、命令プリフェッチイネーブル信号+ENABLE PREFCH TRACEがリセットされるので、PF−IARから出力される命令プリフェッチアドレスは無視される。
【0149】
図38は、本構成例における優先順位決定回路の構成例を示す図である。
ここでは、命令実行系列が分岐予測と異なった場合や割り込み発生などによる再命令フェッチ(+IF REQ REIFCH GO)が最も優先度が高く、続いて、分岐予測がなされたときの分岐先命令フェッチ(+IF REQ BRHIS GO)、そして、その次の優先順位では、命令フェッチポートが全て埋まっていた場合で分岐予測がなされた場合には、命令プリフェッチの起動を兼ねて分岐先命令プリフェッチを行う(+IF REQ PREFCH BRHIS GO)。その下に、分岐予測が行われなかった時の後続命令フェッチ(+IF REQ SEQUENTIAL GO)、更に下に、命令プリフェッチの先の(トレースの)再帰命令プリフェッチ(分岐予測がされた場合(+IF REQ PREFCH TRACE BRHIS GO)とされなかった場合(+IF REQ PREFCH TRACE SEQ GO))がある。
【0150】
図39は、キャッシュに対するフェッチ・プリフェッチ要求信号の出力回路の構成例を示す図である。
なお、図39の回路は、前述の図8の回路に置き換えられるべき回路であり、図8と同じ部分の説明は省略する。
【0151】
+IFCH REQUEST VALIDが出力されるときは、デマンド命令フェッチ(実命令フェッチ)であり、+IF PREFCH REQUEST VALIDが出力されるときは、命令プリフェッチ要求である。
【0152】
+IFCH REQUEST VALIDは、図30のリセット信号としても使用される。また、図39では、OR回路215の入力として、分岐先命令プリフェッチのイネーブル信号+IF REQ PREFCH BRHIS GOの他に、再帰的分岐先命令プリフェッチイネーブル及び、再帰的後続命令プリフェッチのイネーブル(+IF REQ PREFCH TRACE BRHIS GO及び+IF REQ PREFCH TRACE SEQ GO)が設けられている。
【0153】
図8と比較すると、再帰的命令プリフェッチのためのイネーブルが追加されると共に、再帰的でない後続命令プリフェッチのイネーブル(+IF REQ PREFCH SEQ GO)が無くなっている。これは、再帰的でない後続命令プリフェッチのイネーブルと再帰的後続命令プリフェッチのイネーブルを共用する構成としたからである。
【0154】
以上の本実施形態によれば、ハードウェアコストを少なくして、トレースキャッシュ方式のキャッシュメモリと同程度のプリフェッチ効果を期待できる。
したがって、命令キャッシュに対してトレースキャッシュを採用する必要が無くなり、ハードウェア量に対する性能効果が大きい。
本発明は以下の形態で実施が可能である。
(付記1)キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段と、
を備えることを特徴とする装置。
(付記2)更に、
分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段と、
フェッチした命令列を格納するための1つ以上のバッファ手段とを備え、
前記命令プリフェッチ手段は、
該分岐予測手段によって分岐すると予測されたにも関わらず、該バッファ手段が空いておらず、かつ、前記キャッシュメモリ手段内に、フェッチ要求を予定している分岐予測先命令列が存在しない場合には、前記キャッシュメモリ手段に前記下位メモリ手段から該予測命令列を事前に転送しておくことを特徴とする付記1に記載の装置。
(付記3)前記命令プリフェッチ手段は、インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、前記キャッシュメモリ手段に対して前記命令プリフェッチを行うことを特徴とする付記1に記載の装置。
(付記4)更に、前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチを、前記命令フェッチ手段あるいは命令プリフェッチ手段に行わせる優先順位決定手段を備えることを特徴とする付記1に記載の装置。
(付記5)更に、前記命令プリフェッチによる前記キャッシュメモリ手段への命令列転送中に、当該命令列の命令フェッチが行われる場合、該命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリ手段へ転送中の命令列を前記バッファ手段へバイパスする制御手段を備えることを特徴とする付記1に記載の装置。
(付記6)前記命令プリフェッチ手段は、同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする付記1に記載の装置。
(付記7)前記命令プリフェッチ手段は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする付記1に記載の装置。
(付記8)前記命令プリフェッチの要求が際限なく発行されるのを抑制する抑制手段を更に備えたことを特徴とする付記7に記載の装置。
(付記9)前記命令プリフェッチのためのアドレスレジスタを更に備えることを特徴とする付記7に記載の装置。
(付記10)前記アドレスレジスタの値が有効か否かを示すフラグを保持することを特徴とする付記9に記載の装置。
(付記11)現実に実行されるべき命令列の再実行が必要になった場合、前記アドレスレジスタを無効化することを特徴とする付記9に記載の装置。
(付記12)前記命令プリフェッチされた命令列に対する命令プリフェッチを行う場合に、分岐予測機構を使用することを特徴とする付記7に記載の装置。
(付記13)キャッシュメモリ手段と、それよりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるアドレス生成手段と、
該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、前記キャッシュメモリ手段に該分岐先命令の命令フェッチを要求する分岐先命令プリフェッチを行う分岐先命令プリフェッチ手段と、
を備えることを特徴とする装置。
(付記14)更に、
前記分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段を備え、
前記分岐命令プリフェッチ手段は、
該分岐予測手段により分岐予測された分岐命令の実行に際し、分岐しない場合の命令アドレスの命令フェッチを前記キャッシュメモリ手段に対して要求することを特徴とする付記13に記載の装置。
(付記15)更に、
1つ以上の実行中の分岐命令により、分岐命令プリフェッチを要求することが可能とされたそれぞれの分岐命令に優先順位を設定し、その優先順位に従って、前記分岐命令プリフェッチ手段に分岐命令プリフェッチを要求させる優先順位決定手段を備えることを特徴とする付記14に記載の装置。
(付記16)更に、
1つ以上の分岐命令プリフェッチ要求による命令列の保留のための1つ以上の命令バッファ手段を備えることを特徴とする付記13に記載の装置。
(付記17)前記分岐命令の実行及び分岐先が確定した時点で、該分岐命令の後続命令のフェッチ及び実行を中止棄却し、該分岐命令に対応する分岐命令プリフェッチを実命令フェッチへと変更して、該分岐命令フェッチを継続実行あるいは中断解除し、該分岐命令の分岐先命令を実行させることを特徴とする付記13に記載の装置。
(付記18).前記分岐予測手段によって分岐することが予測された該分岐命令が、実行され、かつ、分岐しないことが確定した時点、あるいは、予測された分岐先と異なる分岐先へ分岐することが確定した時点で、該分岐命令の予測分岐先命令の命令フェッチおよび命令実行を中止棄却し、該分岐命令に対応する後続命令の分岐命令プリフェッチを実命令フェッチへと変更して、後続命令フェッチを継続実行あるいは中断解除し、上記後続命令を実行させることを特徴とする付記14に記載の装置。
(付記19)該分岐命令が条件分岐命令である場合に、該分岐命令が実行されること、あるいは、分岐せず後続命令を実行することが確定した時点、あるいは、該分岐命令が実行されないことが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記13に記載の装置。
(付記20)前記分岐予測手段において分岐予測が成立している前記分岐命令が実行されること、あるいは、予測された該分岐命令の分岐先命令を実行することが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記14に記載の装置。
(付記21)更に、
命令の実行の結果、分岐命令プリフェッチされるべき命令列を書き換える可能性があることを検出する検出手段を備えることを特徴とする付記13に記載の装置。
(付記22)前記検出手段は、
ストア命令のアドレス及び分岐命令プリフェッチ要求を出した分岐命令自身のアドレス、もしくは、該分岐命令の分岐先命令のアドレスを用いて、命令列の書き換えの可能性を検出することを特徴とする付記21に記載の装置。
(付記23)前記命令が実行された場合、前記分岐命令プリフェッチされるべき命令列が書き換えられることが判明した場合、該分岐命令プリフェッチ要求を棄却することを特徴とする付記21に記載の装置。
(付記24)前記分岐命令の分岐先命令のアドレスが求められた時点で、前記キャッシュメモリ手段に該アドレスに対応する命令が確保されていない場合に、前記下位メモリ手段から該キャッシュメモリ手段へ該分岐先命令を転送することを要求することを特徴とする付記13に記載の装置。
(付記25)前記分岐予測手段により分岐予測された分岐命令の実行に際し、前記キャッシュメモリ手段に、分岐しない場合の命令アドレスに対応する後続命令列が確保されていないと判明した場合には、前記下位メモリ手段から該キャッシュメモリ手段へ該後続命令列を転送することを要求することを特徴とする付記14に記載の装置。
(付記26)前記分岐先命令プリフェッチ手段は、前記分岐先命令プリフェッチを行った命令列に対して命令プリフェッチを行うことを特徴とする付記13に記載の装置。
(付記27)前記命令プリフェッチの要求が際限なく発行されるのを抑制する抑制手段を更に備えたことを特徴とする付記26に記載の装置。
(付記28)前記命令プリフェッチのためのアドレスレジスタを更に備えることを特徴とする付記26に記載の装置。
(付記29)前記アドレスレジスタの値が有効か否かを示すフラグを保持することを特徴とする付記28に記載の装置。
(付記30)現実に実行されるべき命令列の再実行が必要になった場合、前記アドレスレジスタを無効化することを特徴とする付記28に記載の装置。
(付記31)前記命令プリフェッチされた命令列に対する命令プリフェッチを行う場合に、分岐予測機構を使用することを特徴とする付記26に記載の装置。
(付記32)キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置と、該キャッシュメモリに格納された命令列を処理する命令制御装置とを備える装置における命令制御方法であって、
(a)続いてフェッチ要求を予定している命令列が、該キャッシュメモリに存在しない場合には、該キャッシュメモリに、該下位メモリから該予定命令列を事前に転送しておく命令プリフェッチを行うステップを備えることを特徴とする方法。
(付記33)更に、
(b)分岐命令の分岐先命令を予測するステップと、
(c)フェッチした命令列を格納するステップとを備え、
前記ステップ(a)では、
該ステップ(b)によって分岐すると予測されたにも関わらず、該ステップ(c)に命令列を格納できない場合に、前記キャッシュメモリへ、フェッチ要求を予定している分岐予測先命令列が存在しない場合にはキャッシュメモリに前記下位メモリから該予測命令列を事前に転送しておくことを特徴とする付記32に記載の方法。
(付記34)インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、命令プリフェッチ要求を行うことを特徴とする付記32に記載の方法。
(付記35)更に、(d)前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチ要求を行うステップを備えることを特徴とする付記32に記載の方法。
(付記36)同じアドレスでの実命令フェッチが行われる際に、該命令プリフェッチによる前記キャッシュメモリへの命令列転送作業が間に合わなかった場合、該実命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリへ転送中の命令列を前記命令制御装置へバイパスすることを特徴とする付記32に記載の方法。
(付記37)同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする付記32に記載の方法。
(付記38)前記ステップ(a)は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする付記32に記載の方法。
(付記39)キャッシュメモリと、下位メモリと、該キャッシュメモリに命令フェッチ要求を出す命令フェッチ装置とを備える装置における命令制御方法であって、
(a)条件分岐命令もしくは無条件分岐命令を実行する際に、分岐成立する場合の分岐先命令アドレスを求めるステップと、
(b)該分岐命令の分岐する場合の分岐先命令アドレスが求められた時点で、該分岐命令の命令フェッチを要求する分岐命令プリフェッチを行うステップと、を備えることを特徴とする方法。
(付記40)更に、
(c)前記分岐命令の分岐先命令を予測するステップを備え、
前記ステップ(b)では、
該ステップ(a)により分岐予測された分岐命令の実行に際し、分岐しない場合の命令アドレスの命令フェッチを要求することを特徴とする付記39に記載の方法。
(付記41)更に、
(d)1つ以上の実行中の分岐命令により、それぞれの分岐命令の分岐命令プリフェッチを要求することが可能とされたものに優先順位を設定し、その優先順位に従って、前記分岐命令プリフェッチ手段に分岐命令プリフェッチを要求させるステップを備えることを特徴とする40に記載の方法。
(付記42)更に、
1つ以上の分岐命令プリフェッチ要求による命令列の保留するステップを備えることを特徴とする付記39に記載の方法。
(付記43)前記分岐命令の実行及び分岐先が確定した時点で、該分岐命令の後続命令フェッチ及び命令実行を中止棄却し、該分岐命令に対応する分岐命令プリフェッチを実命令フェッチへと変更して、分岐先命令フェッチを継続実行あるいは中断解除し、分岐先命令を実行することを特徴とする付記39に記載の方法。
(付記44)前記ステップ(a)によって分岐することが予測された該分岐命令が、実行され、かつ、分岐しないことが確定した時点、あるいは、予測された分岐先と異なる分岐先へ分岐することが確定した時点で、該分岐命令の予測分岐先命令の命令フェッチおよび命令実行を中止棄却し、該分岐命令に対応する後続命令の分岐命令プリフェッチを実命令フェッチへと変更して、後続命令フェッチを継続実行あるいは中断解除し、後続命令を実行することを特徴とする付記40に記載の方法。
(付記45)該分岐命令が条件分岐命令である場合に、該命令が実行されること、及び、分岐せず後続命令を実行することが確定した時点、あるいは、該命令が実行されないことが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記39に記載の方法。
(付記46)前記ステップ(a)において分岐予測が成立している前記分岐命令が実行されること、及び、予測された該分岐命令の分岐先命令を実行することが確定した時点で、それまで行っていた該分岐命令プリフェッチを棄却することを特徴とする付記40に記載の方法。
(付記47)更に、
(e)命令の実行の結果、分岐命令プリフェッチされるべき命令列を書き換える可能性があることを検出するステップを備えることを特徴とする付記39に記載の方法。
(付記48)前記ステップ(e)では、
分岐命令プリフェッチ要求を出した分岐命令自身のアドレス、及び、分岐先命令アドレスを用いて、命令列の書き換えの可能性を検出することを特徴とする付記47に記載の方法。
(付記49)命令が実行された結果、前記分岐命令プリフェッチされるべき命令列を書き換えることが判明した場合、該分岐命令プリフェッチ要求を棄却することを特徴とする付記47に記載の方法。
(付記50)前記分岐命令の分岐先命令のアドレスが求められた時点で、前記キャッシュメモリに該アドレスに対応する命令が確保されていない場合に、該キャッシュメモリへの前記下位メモリからの該分岐先命令の転送を要求することを特徴とする付記39に記載の方法。
(付記51)前記ステップ(a)により分岐予測された分岐命令の実行に際し、前記キャッシュメモリに、分岐しない場合の命令アドレスに対応する後続命令列が確保されていないと判明した場合には、該キャッシュメモリへの前記下位メモリからの該後続命令列の転送を要求することを特徴とする付記40に記載の方法。
(付記52)前記ステップ(a)、(b)は、前記分岐先命令プリフェッチを行った命令列に対して命令プリフェッチを行うことを特徴とする付記39に記載の方法。
【0155】
【発明の効果】
本発明によれば、条件分岐命令などの遅延を生じさせる命令をプリフェッチすることにより、命令処理の遅延時間を縮小することが出来る。
【図面の簡単な説明】
【図1】本発明を適用した場合の命令列の実行の様子を示す図である。
【図2】本実施形態の装置の全体の概略構成を示す図である。
【図3】命令プリフェッチ機構の構成例を示す図である。
【図4】図3の優先順位決定回路の構成例を示す図である。
【図5】同じアドレスの命令へのプリフェッチ要求を連続して出さないようにするためのフラグ生成回路(シーケンシャルプリフェッチの場合)の構成例を示す図である。
【図6】同じキャッシュブロックに含まれている命令を繰り返してプリフェッチ要求を行わせないようにするためのフラグを生成する回路例である。
【図7】同一プリフェッチ要求抑制フラグ(分岐予測先プリフェッチの場合)の回路構成例を示す図である。
【図8】フェッチ・プリフェッチ区別回路の構成例を示す図である。
【図9】下位メモリへのデータ要求信号を生成する回路の構成例を示す図である。
【図10】プリフェッチ要求時のキャッシュから命令制御装置へのデータ転送抑制信号を生成する回路例を示す図である。
【図11】第2の命令プリフェッチ機構の構成例を示す図である。
【図12】分岐命令リザベーションステーションのエントリ内容を例示する図である。
【図13】分岐命令の処理の流れを説明する図である。
【図14】分岐命令リザベーションステーションの実行順序回路の構成例を示す図である。
【図15】分岐命令リザベーションステーションの実行順序別信号生成回路の例である。
【図16】分岐命令プリフェッチアドレスの生成回路の構成例を示す図である。
【図17】分岐命令プリフェッチ可能信号の生成回路の構成例を示す図である。
【図18】図19に入力する信号を生成する中間回路の構成例である。
【図19】分岐命令プリフェッチ要求有効信号と選択信号を生成する回路の構成例である。
【図20】分岐命令プリフェッチポートの使用中を示すフラグを生成する回路の構成例である。
【図21】分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図(その1)である。
【図22】分岐命令プリフェッチの実フェッチ化及びキャンセルのための回路例を示す図(その2)である。
【図23】分岐命令プリフェッチのポート毎のキャンセルを行う信号を生成する回路例である。
【図24】ストア命令が分岐命令プリフェッチ命令列を書き換える可能性があることを検出する回路例を示す図である。
【図25】前述の実施形態における命令実行の様子を説明する概念図である。
【図26】本実施形態の概念図である。
【図27】本実施形態の処理の基本的な流れを示すフローチャートである。
【図28】命令プリフェッチ要求の影響で命令フェッチ要求が遅延する場合を説明する図である。
【図29】命令プリフェッチ要求を制約なしに出せてしまうと問題となる場合について説明する図である。
【図30】命令プリフェッチ抑制回路の構成例を示す図である。
【図31】命令プリフェッチとデマンドフェッチとを切り替えるために必要となるフェッチポート選択回路の構成例を示す図である。
【図32】図30、図31の構成を反映した優先順位決定回路の構成例を示す図である。
【図33】前述の実施形態の命令プリフェッチによるブランチヒストリ検索回路を示す図である。
【図34】本実施形態を図33のブランチヒストリ検索回路に適用した構成例を示す図である。
【図35】図34の動作を説明するタイミングチャートである。
【図36】命令フェッチ及びプリフェッチアドレスの生成回路の構成例を示す図である。
【図37】プリフェッチアドレス生成回路の構成例を示す図である。
【図38】本構成例における優先順位決定回路の構成例を示す図である。
【図39】キャッシュに対するフェッチ・プリフェッチ要求信号の出力回路の構成例を示す図である。
【図40】分岐を複数含む命令列の例を示す図である。
【図41】従来の手法を用いた場合のマシンサイクルの遅延を説明する図である。
【符号の説明】
1 主記憶装置
1’ キャッシュ/主記憶装置
2 命令キャッシュ
3 命令一時バッファ
4 命令デコード
5 分岐命令制御部
5−1 分岐命令リザベーションステーション
5−2 アウトポインタ
6 ストア命令制御部
7 その他の命令の制御部
8 データキャッシュ
9 命令フェッチ制御部
9−1 フェッチアドレス生成部
9−2 ブランチヒストリ
9−3 優先順位決定回路
9−4、61、202 セレクタ
9’ ブランチヒストリ
10〜13、82、93、121、154 インバータ
14〜17、20〜22、25、30−1〜30−3、32、36、41−1〜41−4・・・、42、50、51−1、51−2、52、53、71、73、80〜83、94、95、122−1〜122−3、125−0〜125−3、131ー1〜131−4。151−1、151−2、153 AND回路
18、24、31、35、40−1、40−2、41、45、52、54、72、84、96、102、126、130−1、130−2、152、215OR回路
19、23、26、101、200、201 フリップフロップ
111、112 EXOR回路
150 減算器
Claims (6)
- キャッシュメモリ手段と、該キャッシュメモリ手段よりも下位のメモリ手段と、該キャッシュメモリ手段に格納された命令列を投機的に実行する手段を備えた命令制御装置における命令のフェッチを制御する命令フェッチ制御装置であって、
該キャッシュメモリ手段に命令フェッチ要求を出す命令フェッチ手段と、
続いてフェッチ要求を予定している命令列が、該キャッシュメモリ手段に存在しない場合には、該キャッシュメモリ手段に、該下位メモリ手段から該予定命令列を事前に転送しておく命令プリフェッチを行う命令プリフェッチ手段と、
分岐命令の成立の可否、及び成立の際の分岐先アドレスを予測する分岐予測手段と、
フェッチした命令列を格納するための1つ以上のバッファ手段をと、
を備え、
前記分岐予測手段によって分岐すると予測され、命令プリフェッチを行う際に、前記バッファ手段に空きがない状態であって、かつ、前記キャッシュメモリ手段内にフェッチ要求を予定している分岐予測先命令が存在しない場合には、前記キャッシュメモリ手段に、前記下位のメモリ手段から前記予測命令列を事前に転送しておくことを特徴とする装置。 - 前記命令プリフェッチ手段は、インタロック要因によって、通常行われるべき命令フェッチ要求が出せない場合に、前記キャッシュメモリ手段に対して前記命令プリフェッチを行うことを特徴とする請求項1に記載の装置。
- 更に、前記命令プリフェッチを含む命令フェッチの種別に応じた優先順位を設定し、該優先順位に従って前記キャッシュメモリ手段に対する命令フェッチあるいは命令プリフェッチを、前記命令フェッチ手段あるいは命令プリフェッチ手段に行わせる優先順位決定手段を備えることを特徴とする請求項1記載の装置。
- 更に、前記命令プリフェッチによる前記キャッシュメモリ手段への命令列転送中に、当該命令列の命令フェッチが行われる場合、該命令フェッチが該命令プリフェッチを受け継ぐ、あるいは、該キャッシュメモリ手段への転送中の命令列を前記バッファ手段へバイパスする制御手段を備えることを特徴とする請求項1に記載の装置。
- 前記命令プリフェッチ手段は、同じアドレスもしくは同じキャッシュブロックに対する前記命令プリフェッチを連続して行わないことを特徴とする請求項1に記載の装置。
- 前記命令プリフェッチ手段は、前記命令プリフェッチされた命令列に対する命令プリフェッチを行うことを特徴とする請求項1に記載の装置。
Priority Applications (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP2000298837A JP3741945B2 (ja) | 1999-09-30 | 2000-09-29 | 命令フェッチ制御装置 |
| US09/793,559 US6912650B2 (en) | 2000-03-21 | 2001-02-27 | Pre-prefetching target of following branch instruction based on past history |
| US11/125,212 US20050198480A1 (en) | 1999-09-30 | 2005-05-10 | Apparatus and method of controlling instruction fetch |
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP11-277991 | 1999-09-30 | ||
| JP27799199 | 1999-09-30 | ||
| JP2000298837A JP3741945B2 (ja) | 1999-09-30 | 2000-09-29 | 命令フェッチ制御装置 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001166934A JP2001166934A (ja) | 2001-06-22 |
| JP3741945B2 true JP3741945B2 (ja) | 2006-02-01 |
Family
ID=26552666
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2000298837A Expired - Fee Related JP3741945B2 (ja) | 1999-09-30 | 2000-09-29 | 命令フェッチ制御装置 |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JP3741945B2 (ja) |
Families Citing this family (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3845043B2 (ja) | 2002-06-28 | 2006-11-15 | 富士通株式会社 | 命令フェッチ制御装置 |
| US20050102474A1 (en) * | 2003-11-06 | 2005-05-12 | Sridhar Lakshmanamurthy | Dynamically caching engine instructions |
| KR100987832B1 (ko) * | 2004-08-17 | 2010-10-13 | 엔비디아 코포레이션 | 캐시 메모리에 연결된 메모리로의 다양한 액세스 유형의예측을 관리하는 시스템, 장치 및 방법 |
| JP5444889B2 (ja) * | 2009-06-30 | 2014-03-19 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
| WO2012161059A1 (en) * | 2011-05-20 | 2012-11-29 | Semiconductor Energy Laboratory Co., Ltd. | Semiconductor device and method for driving the same |
| JP6252348B2 (ja) * | 2014-05-14 | 2017-12-27 | 富士通株式会社 | 演算処理装置および演算処理装置の制御方法 |
-
2000
- 2000-09-29 JP JP2000298837A patent/JP3741945B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| JP2001166934A (ja) | 2001-06-22 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US8069336B2 (en) | Transitioning from instruction cache to trace cache on label boundaries | |
| US7159103B2 (en) | Zero-overhead loop operation in microprocessor having instruction buffer | |
| US7165168B2 (en) | Microprocessor with branch target address cache update queue | |
| US6912650B2 (en) | Pre-prefetching target of following branch instruction based on past history | |
| JP4027620B2 (ja) | 分岐予測装置、プロセッサ、及び分岐予測方法 | |
| US5930832A (en) | Apparatus to guarantee TLB inclusion for store operations | |
| JP2839075B2 (ja) | 処理システムを動作させる方法及び処理システム | |
| JPS62221036A (ja) | 計算装置 | |
| JP2002525742A (ja) | 記憶からロードへの転送のための機構 | |
| JP2007536626A (ja) | ロードオペレーションの投機的な結果をレジスタ値にリンクするメモリファイルを検証するためのシステムおよび方法 | |
| JP3678443B2 (ja) | スーパーパイプライン式スーパースカラーマイクロプロセッサ用の書き込みバッファ | |
| JP2003519832A (ja) | アントレーニングを備えるストア−ロード転送プレディクタ | |
| US7185186B2 (en) | Apparatus and method for resolving deadlock fetch conditions involving branch target address cache | |
| JP3919802B2 (ja) | プロセッサ、およびプロセッサにおいて命令演算をスケジューリングするための方法 | |
| JP2006520964A5 (ja) | ||
| JP2596712B2 (ja) | 近接した分岐命令を含む命令の実行を管理するシステム及び方法 | |
| JP3741945B2 (ja) | 命令フェッチ制御装置 | |
| US6920549B1 (en) | Branch history information writing delay using counter to avoid conflict with instruction fetching | |
| JP3800533B2 (ja) | プログラムカウンタ制御方法及びプロセッサ | |
| JP7020304B2 (ja) | 演算処理装置及び演算処理装置の制御方法 | |
| US6807624B1 (en) | Instruction control device and method therefor | |
| JP2001060152A (ja) | 分岐予測を抑止する情報処理装置および方法 | |
| EP0912927B1 (en) | A load/store unit with multiple pointers for completing store and load-miss instructions | |
| WO2000008551A1 (en) | Software directed target address cache and target address register | |
| JP4111645B2 (ja) | キャッシュミスした後のメモリバスアクセス制御方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050517 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050524 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050725 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050816 |
|
| A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051013 |
|
| TRDD | Decision of grant or rejection written | ||
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20051108 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051109 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20081118 Year of fee payment: 3 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091118 Year of fee payment: 4 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101118 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101118 Year of fee payment: 5 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111118 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111118 Year of fee payment: 6 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121118 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121118 Year of fee payment: 7 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131118 Year of fee payment: 8 |
|
| LAPS | Cancellation because of no payment of annual fees |