(57)【要約】【課題】値再利用を行う際に、主記憶へのアクセスを減少させることによって処理の高速化をより促進することが可能なデータ処理装置を提供する。【解決手段】ＲＦに、再利用すべき命令区間の主記憶入力アドレスＲＡ、該主記憶入力アドレスに対応する有効フラグＲ１、および比較要否フラグＣ、主記憶出力アドレスＷＡ、上記主記憶出力アドレスに対応する有効フラグＷ１を登録し、ＲＢに、該命令区間の主記憶入力値、主記憶出力値、および、レジスタ出力値を登録しておく。再利用を行う際には、比較要否フラグＣに、主記憶入力値の比較が必要ないことを示すフラグがセットされている場合には、主記憶入力値の比較を行うことなく、登録されている主記憶出力値およびレジスタ出力値を出力する。【選択図】  図１
2004355397.tif 000002
【特許請求の範囲】
【請求項１】
主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置において、
上記主記憶手段から読み出した命令区間に基づく演算を行う第１の演算手段と、上記第１の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、１つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、
上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、
上記第１の演算手段が、
命令区間を実行する際に、レジスタ入力値を取得する第１のステップと、
上記命令区間記憶手段に記憶されているエントリの中から、上記第１のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第２のステップと、
上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第３のステップと、
上記第３ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第４のステップとを行うことを特徴とするデータ処理装置。
【請求項２】
上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、
上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、
上記第１の演算手段が、
上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第５のステップをさらに行い、
上記第３ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第５ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較することを特徴とする請求項１記載のデータ処理装置。
【請求項３】
上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされることを特徴とする請求項１または２記載のデータ処理装置。
【請求項４】
上記第１の演算手段が、
主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第６のステップと、
上記第１の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第７のステップとをさらに行うことを特徴とする請求項１記載のデータ処理装置。
【請求項５】
上記第１の演算手段が、
上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第８のステップと、
上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第９のステップとをさらに行うことを特徴とする請求項４記載のデータ処理装置。
【請求項６】
上記第１の演算手段が、
上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１０のステップと、
上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第１１のステップとをさらに行うことを特徴とする請求項４または５記載のデータ処理装置。
【請求項７】
上記第１の演算手段が、
上記第７のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１２のステップと、
上記第１２のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第１３のステップとをさらに行うことを特徴とする請求項４、５、または６記載のデータ処理装置。
【請求項８】
少なくとも１つの第２の演算手段をさらに備え、
上記第２の演算手段が、上記第１の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録することを特徴とする請求項１ないし７のいずれか一項に記載のデータ処理装置。
【請求項９】
上記第１の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第２の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、
上記第２の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第２の演算手段に設けられたローカルメモリを用いるとともに、
上記第１の演算手段が主記憶手段へ書き込みを行う場合には、対応する第２の演算手段のキャッシュラインが無効化されることを特徴とする請求項８記載のデータ処理装置。
【請求項１０】
請求項１ないし９のいずれか一項に記載のデータ処理装置が備える第１の演算手段が行う処理をコンピュータに実行させることを特徴とするデータ処理プログラム。
【請求項１１】
請求項１ないし９のいずれか一項に記載のデータ処理装置が備える第１の演算手段が行う処理をコンピュータに実行させることを特徴とするデータ処理プログラムを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置に関するものである。
【０００２】
【従来の技術】
従来、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）を始めとするマイクロプロセッサにおいて、演算速度の高速化技術に関する研究開発が盛んに行われている。高速化技術としては、例えばパイプライン、スーパースケーラ、アウトオブオーダー実行、および、レジスタリネーミングなどが挙げられる。
【０００３】
パイプラインは、命令の実行処理を数段階に分解し、複数の命令を流れ作業的に同時処理を行う技術である。スーパースケーラは、命令の実行回路を２組以上用意し、複数の命令を同時に並行して実行する技術である。アウトオブオーダー実行は、命令の記述順序を無視して、いくつかの連続する命令の中から先に実行可能なものを探して先行処理を行う技術である。レジスタリネーミングは、例えばＣＩＳＣ（Ｃｏｍｐｌｅｘ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｓｅｔ  Ｃｏｍｐｕｔｅｒ）タイプのプロセッサにおいて、従来のプロセッサにおける命令の互換性を保ちながら、汎用レジスタの数を増やすことによって並行処理が行われる確率を増大させる技術である。
【０００４】
このように、マイクロプロセッサにおける演算速度の高速化を図る際には、命令の実行を並行して行うことが重要となっている。しかしながら、プログラム中には、ある命令の結果に応じて異なる命令が行われるような依存関係、言い換えれば分岐が含まれている場合がほとんどである。このような分岐が含まれている場合、並行処理によって先行して処理を行っていると、分岐の結果によって先行処理した内容が無駄になるという状況が発生することになり、演算速度の高速化の効果が小さくなるという問題がある。
【０００５】
そこで、プログラム中に分岐がある場合に、分岐先を予測することによって先行処理が無駄になる確率を低減し、並行処理の効果を向上させる技術、いわゆる分岐予測に関する研究が数多く行われている。
【０００６】
しかしながら、分岐予測に基づいて投機的先行処理を行う場合には、一般的に次のような問題がある。第１の問題としては、予測の正当性を常に検証する必要があるので、先行命令列の実行時間そのものを削減することはできない、という点である。第２の問題としては、誤った予測に基づく一連の先行演算結果を全て無効化する必要があるので、一度に投機的先行処理できる命令数を多くするには、相応のハードウェアコストを要する、という点である。第３の問題としては、命令間の依存関係が多いほど、多重に投機的先行処理をする必要が生じ、予測の正当性の検証処理、および誤った予測に基づく処理の無効化処理が極めて複雑になる、という点である。
【０００７】
一方、分岐予測とは異なる高速化技術として、値再利用という技術も提案されている。この値再利用とは、プログラムの一部分に関する入力値および出力値を再利用表に登録しておき、同じ箇所を再度実行する際に、入力値が再利用表に登録されているものである場合には、登録されている出力値を出力する、という技術である。この値再利用による効果としては次のようなものが挙げられる。（１）入力値が、再利用表に登録されている入力値と一致すれば、実行結果を検証する必要がない。（２）入力値および出力値の総数によってのみハードウェアコストが決定され、省略可能な命令列の長さが制約されない。（３）命令間の依存関係の多少は、再利用機構の複雑さに影響を与えない。（４）冗長なロード／ストア命令を削減することができるとともに、これに伴う消費電力の削減も実現される。
【０００８】
後記する非特許文献１には、プログラムにおける関数に関して値再利用を行う技術が示されている。この従来技術では、一般的にロードモジュールがＡＢＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｂｉｎａｒｙ  Ｉｎｔｅｒｆａｃｅ）に従って作られることを利用しており、特に、ＳＰＡＲＣ（Ｓｃａｌａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ  ＡＲＣｈｉｔｅｃｔｕｒｅ）    ＡＢＩを利用している。そして、このＡＢＩにおいて関数の入出力を特定することによって値再利用を実現している。すなわち、値再利用のためのコンパイラによる専用命令の埋め込みが不要となっており、既存ロードモジュールへの適用が可能となっている。
【０００９】
また、関数の多重構造を動的に把握することにより、関数内局所レジスタやスタック上の局所変数を値再利用における入出力値から除外するようにしており、これによって効率を向上させている。特に関数については、関数の複雑さに拘わらず、最大６のレジスタ入力、最大４のレジスタ出力、および、局所変数を含まない最小限の主記憶値の登録による再利用および事前実行が可能となっている。この従来技術について以下に詳細に説明する。
【００１０】
まず、単一の関数を対象として、何が入力で何が出力であるかを明らかにし、１レベルの再利用を行うために必要な機構について説明する。プログラムにおいては、一般的に関数は多重構造を形成している。関数Ａ（Ｆｕｎｃｔｉｏｎ−Ａ）が関数Ｂ（Ｆｕｎｃｔｉｏｎ−Ｂ）を呼び出す構造を図９（ａ）に示す。
【００１１】
大域変数（Ｇｌｏｂａｌｓ）は、関数Ａの入出力（Ａｉｎ／Ａｏｕｔ）および関数Ｂの入出力（Ｂｉｎ／Ｂｏｕｔ）になりうるものである。関数Ａの局所変数（Ｌｏｃａｌｓ−Ａ）は、関数Ａの入出力ではないが、ポインタを通じてＢの入出力になりうるものである。また、関数Ａから関数Ｂへの引数（Ａｒｇｓ）は、関数Ｂへの入力となりうるものであり、関数Ｂから関数Ａの返り値（Ｒｅｔ．Ｖａｌ．）は、関数Ｂからの出力となりうるものである。なお、関数Ｂの局所変数（Ｌｏｃａｌｓ−Ｂ）は、関数Ａおよび関数Ｂの入出力には含まれない。
【００１２】
コンテクストに依存せずに関数Ｂを再利用するには、関数Ｂの実行時に、関数Ｂの入出力Ｂｉｎ／Ｂｏｕｔのみを入出力として登録しなければならない。ここで、図９（ａ）に示すプログラム構造を実行する際の主記憶におけるメモリマップを図９（ｂ）に示す。このメモリマップにおいて、Ｂｉｎ／Ｂｏｕｔを含まない領域はＬｏｃａｌｓ−Ｂのみとなっている。よって、Ｂｉｎ／Ｂｏｕｔを識別するには、ＧｌｏｂａｌｓとＬｏｃａｌｓ−Ｂとの境界、および、Ｌｏｃａｌｓ−ＢとＬｏｃａｌｓ−Ａとの境界をそれぞれ確定しなければならない。前者については、一般的にＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）が実行時のデータサイズおよびスタックサイズの上限を決めることを利用し、ＯＳが設定する境界（ＬＩＭＩＴ）に基づいてＧｌｏｂａｌｓとＬｏｃａｌｓ−Ｂとの境界を確定することができる。後者については、Ｂが呼び出される直前のスタックポインタの値（ＳＰ  ｉｎ  Ａ）を用いることによって、Ｌｏｃａｌｓ−ＢとＬｏｃａｌｓ−Ａとの境界を確定することができる。
【００１３】
次に、与えられた主記憶アドレスが、大域変数であるか、または、どの関数の局所変数であるかを識別する方法について説明する。ロードモジュールは、ＳＰＡＲＣ  ＡＢＩに規定されている以下の条件を満たすと仮定する。なお、％ｆｐはフレームポインタ、％ｓｐはスタックポインタを意味するものとする。
▲１▼％ｓｐ以上の領域のうち、％ｓｐ＋０〜６３はレジスタ退避領域、％ｓｐ＋６８〜９１は引数退避領域であり、いずれも関数の入出力ではない。
▲２▼構造体を返す場合の暗黙的引数（Ｉｍｐｌｉｃｉｔ  Ａｒｇ．）は％ｓｐ＋６４〜６７に格納される。
▲３▼明示的引数（Ｅｘｐｌｉｃｉｔ  Ａｒｇ．）はレジスタ％ｏ０〜５、％ｓｐ＋９２以上の領域に置かれる。
【００１４】
まず、大域変数と局所変数とを区別するために、一般的に、ＯＳが実行時のデータサイズおよびスタックサイズの上限を決めることを利用し、次の事項を仮定する。
▲１▼大域変数はＬＩＭＩＴ未満の領域に置かれる。
▲２▼％ｓｐは、ＬＩＭＩＴ以下になることはなく、ＬＩＭＩＴ〜％ｓｐの領域は無効である。
【００１５】
以上の条件を満たしながら、関数Ａが関数Ｂを呼び出す場合の、メモリマップにおける引数およびフレームの概要を図１０に示す。同図を参照しながら、以下にＡの局所変数およびＢの局所変数を区別する方法について説明する。
【００１６】
同図において、（ａ）はＡ実行中の状態を示している。ＬＩＭＩＴ未満の太枠部分に命令（Ｉｎｓｔｒｕｃｔｉｏｎｓ）および大域変数（Ｇｌｏｂａｌ  Ｖａｒｓ．）が格納され、％ｓｐ以上に有効な値が格納されている。％ｓｐ＋６４には、Ｂが構造体を返り値とする場合の暗黙的引数として、構造体の先頭アドレスが格納される。Ｂに対する明示的引数の先頭６ワードはレジスタ％ｏ０〜５、第７ワード以降は％ｓｐ＋９２以上に格納される。ベースレジスタを％ｓｐとするオペランド％ｓｐ＋９２が出現した場合、この領域は引数の第７ワードすなわちＢの局所変数である。一方、オペランド％ｓｐ＋９２が出現しない場合、この領域はＡの局所変数である。このように、（ａ）の状態では、オペランドを検証することによってＡの局所変数とＢ局所変数とを区別することができる。
【００１７】
一方、（ｂ）はＢ実行中の状態を示している。引数が入力、返り値が出力、大域変数およびＡの局所変数が入出力となりうる。ただし、Ｂは可変長引数を受け入れる場合があるので、一般に％ｆｐ＋９２以上の領域がＡの局所変数の領域となるかＢの局所変数の領域となるかは判断できない。
【００１８】
局所変数を区別するには、まず、（ａ）の時点において引数の第７ワード以降を検出した関数呼び出しは再利用の対象外とし、第７ワード以降を検出しない関数呼び出しに関して、直前に％ｓｐ＋９２の値を記録しておくようにする。なお、第７ワード以降を使用する関数呼び出しの出現頻度が低いと予想されることから、第７ワード以降を使用する関数を再利用の対象外とする制限による性能低下は軽微なものと考える。
【００１９】
以上の準備により、（ｂ）における主記憶参照アドレスが、予め記録した％ｓｐ＋９２の値以上の場合はＡの局所変数、小さい場合はＢの局所変数であることがわかる。Ｂ実行時には、Ｂの局所変数を除外しながら、大域変数およびＡの局所変数を再利用表へ登録する。
【００２０】
再利用の際は、Ｂの局所変数は入出力から除外されるので、Ｂの局所変数のアドレスが一致している必要がない。このため、いかなるコンテクストであっても、入力さえ一致すれば、再利用することが可能である。ただし、Ｂが参照する大域変数やＡの局所変数については、アドレスおよびデータの両方が再利用表の内容と完全に一致する必要がある。すなわち、Ｂを実行する前に、どのようにして比較すべき主記憶アドレスを網羅するかがポイントになる。
【００２１】
Ｂが参照する大域変数やＡの局所変数のアドレスは、そもそもＢにおいて生成されるアドレス定数や、大域変数／引数を起源とするポインタに基づいているものである。よって、まず引数が完全に一致する再利用表中のエントリを選択した後に、関連する主記憶アドレスをすべて参照して一致比較を行うことにより、Ｂが参照すべき主記憶アドレスを網羅することができる。そして、全ての入力が一致した場合にのみ、登録済の出力（返り値、大域変数、およびＡの局所変数）を再利用することができる。
【００２２】
関数再利用を実現するために、再利用表として、関数管理表（ＲＦ）および入出力記録表（ＲＢ）を設けることにする。１つの関数を再利用するために必要なハードウェア構成を図１１に示す。複数の関数を再利用可能とするには、この構成を複数組用意することになる。
【００２３】
この表において、ＲＦおよびＲＢに保持されるＶは、エントリが有効であるか否かを示すフラグであり、ＬＲＵ（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）は、エントリ入れ替えのヒントを示している。ＲＦは、上記のＶおよびＬＲＵの他に、関数の先頭アドレス（Ｓｔａｒｔ）、および参照すべき主記憶アドレス（Ｒｅａｄ／Ｗｒｉｔｅ）を保持する。ＲＢは、上記のＶおよびＬＲＵの他に、関数呼び出し直前の％ｓｐ（ＳＰ）、引数（Ａｒｇｓ．）（Ｖ：有効エントリ、Ｖａｌ．：値）、主記憶値（Ｍａｓｋ：Ｒｅａｄ／Ｗｒｉｔｅアドレスの有効バイト、Ｖａｌｕｅ：値）、および、返り値（Ｒｅｔｕｒｎ  Ｖａｌｕｅｓ）（Ｖ：有効エントリ、Ｖａｌ．：値）を保持する。
【００２４】
返り値は、％ｉ０〜１（リーフ関数では％ｏ０〜１に読み替える）または％ｆ０〜１に格納され、％ｆ２〜３を使用する返り値（拡張倍精度浮動小数点数）は対象プログラムには存在しないものと仮定する。ＲｅａｄアドレスはＲＦが一括管理し、ＭａｓｋおよびＶａｌｕｅはＲＢが管理することにより、Ｒｅａｄアドレスの内容とＲＢの複数エントリをＣＡＭ（ｃｏｎｔｅｎｔ−ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）により一度に比較する構成を可能としている。
【００２５】
単一の関数を再利用するには、まず、関数実行時に、局所変数を除外しながら、引数、返り値、大域変数および上位関数の局所変数に関する入出力情報を再利用表に登録していく。ここで、読み出しが先行した引数レジスタは関数の入出力として、また、返り値レジスタへの書き込みは関数の出力として登録する。その他のレジスタ参照は登録する必要がない。主記憶参照も同様に、読み出しが先行したアドレスについては入力、書き込みは出力として登録する。
【００２６】
関数から復帰するまでに次の関数を呼び出した場合、または、登録すべき入出力が再利用表の容量を超える、引数の第７ワードを検出する、途中でシステムコールや割り込みが発生する、などの擾乱が発生しなかった場合、復帰命令を実行した時点で、登録中の入出力表エントリを有効にする。
【００２７】
以降、図１１を参照しながら説明すると、関数を呼び出す前に、▲１▼関数先頭アドレスを検索し、▲２▼引数が完全に一致するエントリを選択し、▲３▼関連する主記憶アドレスすなわち少なくとも１つのＭａｓｋが有効であるＲｅａｄアドレスをすべて参照して、▲４▼一致比較を行う。全ての入力が一致した場合に、▲５▼登録済の出力（返り値、大域変数、およびＡの局所変数）を書き戻すことによって、関数の実行を省略することができる。
【００２８】
【非特許文献１】
情報処理学会論文誌：ハイパフォーマンスコンピューティングシステム，ＨＰＳ５，ｐｐ．１−１２，Ｓｅｐ．（２００２），”関数値再利用および並列事前実行による高速化技術”（中島康彦、緒方勝也、正西申悟、五島正裕、森眞一郎、北村俊明、富田眞治）（発行日２００２年９月１５日）
【００２９】
【発明が解決しようとする課題】
上記の従来技術では、次のようにして値再利用が行われる。まず、関数が呼び出された際に、その時点でのレジスタ値である引数と、再利用表に登録されている各エントリの引数とを比較し、全てが一致するエントリがあるか否かが確認される。引数が一致するエントリがあると、その全てのエントリに登録されている全ての主記憶入力アドレスから主記憶データを読み出し、各エントリに登録されている主記憶入力値との比較を行う。すなわち、再利用が可能か否かを判定する際には、必ず主記憶に対するアクセスが必要となっており、この判定処理にかかる時間によって高速化が抑制されるという問題点があった。
【００３０】
本発明は上記の問題点を解決するためになされたもので、その目的は、値再利用を行う際に、主記憶へのアクセスを減少させることによって処理の高速化をより促進することが可能なデータ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体を提供することにある。
【００３１】
【課題を解決するための手段】
上記の課題を解決するために、本発明に係るデータ処理装置は、主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置において、上記主記憶手段から読み出した命令区間に基づく演算を行う第１の演算手段と、上記第１の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、１つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、上記第１の演算手段が、命令区間を実行する際に、レジスタ入力値を取得する第１のステップと、上記命令区間記憶手段に記憶されているエントリの中から、上記第１のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第２のステップと、上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第３のステップと、上記第３ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第４のステップとを行うことを特徴としている。
【００３２】
上記の構成では、主記憶から読み出された命令区間が第１の演算手段によって演算され、演算結果が主記憶に書き込まれるようになっている。一方、命令区間記憶手段には、１つ以上の命令区間に関する情報が、エントリとして記憶されている。ここで、命令区間に関する情報としては、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、およびレジスタ出力値が登録されている。
【００３３】
そして、ある命令区間を実行する際には、まず、その命令区間におけるレジスタ入力値と一致するレジスタ入力値が登録されているエントリが抽出される。そして、参照すべき主記憶入力アドレスに対応する比較要否フラグが「否」と設定されている場合には、主記憶入力値の比較を行うことなしに、該当エントリの主記憶出力値およびレジスタ出力値を、処理対象の命令区間の出力として出力するようになっている。
【００３４】
ここで、従来では、ある命令区間を実行する際に、レジスタ入力値および主記憶入力値の両方に関して命令区間記憶手段に登録されている内容と一致した場合に、命令区間記憶手段に登録されている主記憶出力値およびレジスタ出力値を出力する、という方法がとられていた。この場合、命令区間の再利用を行う際には、必ず主記憶入力値の比較が行われることになる。一般に、主記憶手段に対する読み出し動作に要する時間は、レジスタに対する読み出し動作に要する時間よりもかなり長いものとなっている。すなわち、再利用の度に主記憶読み出しが行われると、処理の高速化の効果が制限されることになる。
【００３５】
これに対して、上記の構成によれば、命令区間記憶手段における各エントリに比較要否フラグが設定されており、この比較要否フラグが「否」と設定されていれば、主記憶入力値の比較を省略することが可能となっている。したがって、再利用による高速化の効果を促進することが可能となる。
【００３６】
また、本発明に係るデータ処理装置は、上記の構成において、上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、上記第１の演算手段が、上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第５のステップをさらに行い、上記第３ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第５ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較する構成としてもよい。
【００３７】
上記の構成によれば、比較要否フラグに比較が必要であることを示すフラグがセットされており、かつ、有効フラグに有効な主記憶入力値が登録されているものがあることを示すフラグがセットされている場合にのみ、主記憶入力値の比較が行われることになる。すなわち、有効な主記憶入力値が登録されていないにも拘らず、主記憶手段に対するアクセスが行われることを防止することが可能となるので、処理の高速化の効果をさらに促進することができる。
【００３８】
また、本発明に係るデータ処理装置は、上記の構成において、上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされる構成としてもよい。
【００３９】
命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合には、命令区間記憶手段に登録されている主記憶入力値と、主記憶手段における該当主記憶値とが異なる状態となる。このような状態となった場合には、主記憶入力値の比較を行わないで命令区間の再利用を行うと、誤った演算結果を出力してしまうおそれがある。これに対して上記の構成によれば、上記のような状態となった際には、該主記憶入力アドレスに対応する比較要否フラグが、主記憶入力値の比較が必要であることを示す状態にセットされることになる。よって、主記憶入力値の比較を必要時にのみ的確に行うことが可能となる。
【００４０】
また、本発明に係るデータ処理装置は、上記の構成において、上記第１の演算手段が、主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第６のステップと、上記第１の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第７のステップとをさらに行う構成としてもよい。
【００４１】
上記の構成によれば、命令区間記憶手段にエントリとして記憶されていない命令区間を実行する際には、第１の演算手段によって通常の演算処理が行われるとともに、この演算処理時における入出力に関する情報が、命令区間記憶手段に登録されることになる。すなわち、新たな命令区間が実行される度に、命令区間記憶手段に記憶されているエントリが追加されることになり、再利用可能なエントリを増やすことができる。
【００４２】
また、本発明に係るデータ処理装置は、上記の構成において、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第８のステップと、上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第９のステップとをさらに行う構成としてもよい。
【００４３】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶出力アドレスが登録されている場合に、登録作業中の命令区間における主記憶入力アドレスに対応する比較要否フラグを、比較要として設定することになる。よって、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となる。
【００４４】
また、本発明に係るデータ処理装置は、上記の構成において、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１０のステップと、上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第１１のステップとをさらに行う構成としてもよい。
【００４５】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶入力アドレスが登録されている場合に、登録作業中の命令区間における主記憶入力アドレスに対応する比較要否フラグを、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグとして設定することになる。よって、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となる。
【００４６】
また、本発明に係るデータ処理装置は、上記の構成において、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１２のステップと、上記第１２のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第１３のステップとをさらに行う構成としてもよい。
【００４７】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶入力アドレスが登録されている場合に、その主記憶入力アドレスに対応する比較要否フラグを、比較要として設定することになる。よって、既に命令区間記憶手段に登録されている主記憶入力アドレスに対しても、主記憶入力値の比較を行う必要のあるものに対して的確に比較要否フラグを設定することが可能となる。
【００４８】
また、本発明に係るデータ処理装置は、上記の構成において、少なくとも１つの第２の演算手段をさらに備え、上記第２の演算手段が、上記第１の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録する構成としてもよい。
【００４９】
上記の構成によれば、第２の演算手段によって、その時点で第１の演算手段によって処理が行われている命令列に関して、予測入力値に基づく演算が行われ、その結果が命令区間記憶手段に記憶されることになる。よって、次に、同じ命令区間が出現し、予測入力値と同じ入力が行われた場合には、命令区間記憶手段に記憶されている値を再利用することが可能となる。例えば、入力値が単調に変化するような命令区間の場合には、予測入力値が的中する可能性が高いので、上記の構成による効果は高くなる。
【００５０】
また、本発明に係るデータ処理装置は、上記の構成において、上記第１の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第２の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、上記第２の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第２の演算手段に設けられたローカルメモリを用いるとともに、上記第１の演算手段が主記憶手段へ書き込みを行う場合には、対応する第２の演算手段のキャッシュラインが無効化される構成としてもよい。
【００５１】
上記の構成によれば、第２の演算手段は、主記憶手段に対しては読み出しのみを行い、書き込みはできないようになっている。そして、第２の演算手段は、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第２の演算手段に設けられたローカルメモリを用いるようになっている。これにより、第１の演算手段と、第２の演算手段とで、主記憶手段に対して異なる値を書き込むことによる不具合を防止することができる。
【００５２】
また、第１の演算手段が主記憶手段へ書き込みを行う場合には、対応する第２の演算手段のキャッシュラインが無効化されるので、第１の演算手段によって主記憶手段が書き換えられた場合にも、第２の演算手段が、新たに主記憶手段から値を読み出すことによって、主記憶一貫性を保つことができる。
【００５３】
【発明の実施の形態】
本発明の実施の一形態について図１ないし図８に基づいて説明すれば、以下のとおりである。
【００５４】
（データ処理装置の構成）
本実施形態に係るデータ処理装置の概略構成を図５に示す。同図に示すように、該データ処理装置は、ＭＳＰ（Ｍａｉｎ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｏｒ）１Ａ、ＳＳＰ（Ｓｈａｄｏｗ  Ｓｔｒｅａｍ  Ｐｒｏｃｅｓｓｏｒ）１Ｂ、再利用表としてのＲＦ／ＲＢ（命令区間記憶手段）２、および主記憶（主記憶手段）３を備えた構成となっており、主記憶３に記憶されているプログラムデータなどを読み出して各種演算処理を行い、演算結果を主記憶３に書き込む処理を行うものである。なお、同図に示す構成では、ＳＳＰ１Ｂを１つ備えた構成となっているが、２つ以上備えた構成となっていてもよい。また、同図に示す構成では、ＳＳＰ１Ｂを備えた構成となっているが、ＳＳＰ１Ｂを備えていない構成としてもかまわない。ＳＳＰ１Ｂを備えた場合の作用・効果については、後述する。
【００５５】
ＲＦ／ＲＢ２は、プログラムにおける関数やループなどの命令区間を再利用するためのデータを格納するメモリ手段である。このＲＦ／ＲＢ２の詳細については後述する。
【００５６】
主記憶３は、ＭＳＰ１ＡおよびＳＳＰ１Ｂの作業領域としてのメモリであり、例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などによって構成されるものである。例えばハードディスクなどの外部記憶手段や、外部のＩ／Ｏ（ｉｎｐｕｔ／ｏｕｔｐｕｔ）装置などの外部装置からプログラムやデータなどが主記憶３に読み出され、ＭＳＰ１ＡおよびＳＳＰ１Ｂは、主記憶３に読み出されたデータに基づいて演算を行うことになる。また、ＭＳＰ１Ａによる演算結果が主記憶３に書き込まれ、この演算結果が上記外部装置に送出されることになる。
【００５７】
ＭＳＰ１Ａは、再利用記憶手段としてのＲＷ４Ａ、演算器（第１の演算手段）５Ａ、レジスタ６Ａ、およびＣａｃｈｅ７Ａを備えた構成となっている。また、ＳＳＰ１Ｂは、同様に、再利用記憶手段としてのＲＷ４Ｂ、演算器（第２の演算手段）５Ｂ、レジスタ６Ｂ、およびＣａｃｈｅ／Ｌｏｃａｌ７Ｂを備えた構成となっている。
【００５８】
ＲＷ４Ａ・４Ｂは、再利用ウィンドウであり、現在実行中かつ登録中であるＲＦおよびＲＢ（後述する）の各エントリをリング構造のスタックとして保持するものである。このＲＷ４Ａ・４Ｂは、実際のハードウェア構造としては、ＲＦ／ＲＢ２における特定のエントリをアクティブにする制御線の集合によって構成される。
【００５９】
演算器５Ａ・５Ｂは、レジスタ６Ａ・６Ｂに保持されているデータに基づいて演算処理を行うものであり、ＡＬＵ（ａｒｉｔｈｍｅｔｉｃ  ａｎｄ  ｌｏｇｉｃａｌ  ｕｎｉｔ）と呼ばれるものである。レジスタ６Ａ・６Ｂは、演算器５Ａ・５Ｂによって演算を行うためのデータを保持する記憶手段である。なお、本実施形態では、演算器５Ａ・５Ｂ、およびレジスタ６Ａ・６Ｂは、ＳＰＡＲＣアーキテクチャに準じたものとする。Ｃａｃｈｅ７Ａ・７Ｂは、主記憶３と、ＭＳＰ１ＡおよびＳＳＰ１Ｂとの間でのキャッシュメモリとして機能するものである。なお、ＳＳＰ１Ｂでは、Ｃａｃｈｅ７Ｂには、局所メモリとしてのＬｏｃａｌ７Ｂが含まれているものとする。
【００６０】
（ＲＦ／ＲＢの構成）
図１は、本実施形態におけるＲＦ／ＲＢ２によって実現される再利用表を示している。同図に示すように、ＲＦは、エントリが有効であるか否かを示す状態表示フラグＶ、エントリ入れ替えのヒントを示すＬＲＵ、関数とループとを区別するＦ／Ｌ、命令区間の先頭アドレスを示すＳｔａｒｔ、命令区間の終了アドレスを示すＥｎｄ、参照すべき主記憶入力アドレスに関する情報を示すＲｅａｄ、および、参照すべき主記憶出力アドレスに関する情報を示すＷｒｉｔｅを保持している。
【００６１】
ＲＦにおけるＲｅａｄには、＃１〜＃ｎまでの複数の列が設けられており、各列ごとに、主記憶入力アドレスＲＡ、有効フラグＲ１、および、比較要否フラグＣが記録されている。また、ＲＦにおけるＷｒｉｔｅには、＃１〜＃ｎまでの複数の列が設けられており、各列ごとに、主記憶出力アドレスＷＡ、および有効フラグＷ１が記録されている。
【００６２】
また、ＲＢは、エントリが有効であるか否かを示す状態表示フラグＶ、エントリ入れ替えのヒントを示すＬＲＵ、命令区間を呼び出す際の直前のスタックポイント％ｓｐを示すＳＰ、ループの終了アドレス（Ｅｎｄ）、ループ終了時の分岐方向を示すｔａｋｅｎ／ｎｏｔ、レジスタ入力値としての引数（Ａｒｇｓ．）（Ｖ：有効エントリ、Ｖａｌ．：値）および引数以外のレジスタ入力値および条件コード（Ｒｅｇｓ．，ＣＣ）、主記憶入力有効バイトＲＭ、主記憶入力値ＲＶ、主記憶出力有効バイトＷＭ、主記憶出力値ＷＶ、および、レジスタ出力値としての返り値Ｒｅｔｕｒｎ  Ｖａｌｕｅｓおよび返り値以外のレジスタ出力値および条件コードＲｅｇｓ．，ＣＣ（Ｖ：有効エントリ、Ｖａｌ．：値）を保持している。
【００６３】
上記のＲＦおよびＲＢにおける各項目についてより詳細に説明する。上記状態表示フラグＶは、上記のようにエントリが有効であるか否かを示すものであるが、具体的には、未登録時には「０」、登録中である場合には「２」、登録済である場合には「１」の値が格納されるようになっている。例えば、ＲＦまたはＲＢを確保する際に、未登録エントリ（Ｖ＝０）があれば、これを使用し、未登録エントリがなければ、登録済エントリ（Ｖ＝１）の中からＬＲＵが最小のものを選択して上書きすることになる。登録中エントリ（Ｖ＝２）は使用中であるので上書きすることはできない。
【００６４】
上記ＬＲＵは、一定時間間隔で右へシフトされていくシフトレジスタの中の「１」の個数を示したものである。ＲＦの場合、このシフトレジスタは、該当エントリに関して、再利用のための登録を行ったか、もしくは再利用を試みた場合に、左端に「１」が書き込まれるようになっている。したがって、該当エントリが頻繁に使用されれば、ＬＲＵは大きな値となり、一定期間使用されなければ、ＬＲＵの値は０となる。一方、ＲＢの場合、シフトレジスタには、該当エントリが再利用された場合に「１」が書き込まれるようになっている。したがって、該当エントリが頻繁に使用されれば、ＬＲＵは大きな値となり、一定期間使用されなければ、ＬＲＵの値は０となる。
【００６５】
上記ＲＢにおける主記憶入力有効バイトＲＭおよび主記憶出力有効バイトＷＭについて説明する。一般に、アドレスとデータとを１バイトずつ管理することにすれば管理が可能であるが、実際には、４バイト単位でデータを管理する方がキャッシュ参照を高速に行うことができる。そこで、ＲＦでは、主記憶アドレスを４の倍数で記憶するようになっている。一方、管理単位を４バイトとする場合、１バイト分だけをロードすることに対応できるようにするために、４バイトのうちでどのバイトが有効であるかを示す必要がある。すなわち、主記憶入力有効バイトＲＭおよび主記憶出力有効バイトＷＭは、４バイトのうちでどのバイトが有効であるかを示す４ビットのデータとなっている。例えば、Ｃ００１番地から１バイト分をロードした結果、値がＥ８であった場合、ＲＦにおける主記憶入力アドレスＲＡにアドレスＣ０００が登録され、ＲＢの主記憶入力有効バイトＲＭに「０１００」、主記憶入力値ＲＶに「００Ｅ８００００」が登録されることになる。
【００６６】
以上のように、ＲＦ／ＲＢ２において、主記憶入力アドレスＲＡおよび主記憶出力アドレスＲＢはＲＦが一括管理し、主記憶入力有効バイトＲＭ、主記憶入力値ＲＶ、ならびに、主記憶出力有効バイトＷＭ、主記憶出力値ＷＶはＲＢが管理している。これにより、Ｒｅａｄアドレスの内容とＲＢの複数エントリをＣＡＭ（ｃｏｎｔｅｎｔ−ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）によって一度に比較する構成を可能としている。このことについて、以下により詳しく説明する。
【００６７】
一般的に、アドレスが与えられると、そのアドレスに格納された値を参照することができるメモリは、ＲＡＭと呼ばれるメモリである。一方、上記のＣＡＭとは、連想メモリと呼ばれるメモリであり、検索すべき内容が与えられると、そのエントリに対応する信号がＯＮとなるように動作するようになっている。通常は、ＣＡＭはＲＡＭとセットにして用いられる。
【００６８】
ここで、ＣＡＭとＲＡＭとの連携動作について、具体例を挙げて説明する。ＣＡＭに、「５，５，５，５，５」、「１，３，１，１，１」、「１，３，３，５，２」、「６，６，６，６，６」というデータ列がエントリとして登録されており、ＲＡＭに、ＣＡＭにおける各データ列に対応して、「５，５」、「１，１」、「１，２」、「６，６」というデータが登録されているとする。ここで、検索すべきデータ列として、「１，３，３，５，２」をＣＡＭに入力すると、一致するエントリがＯＮとなり、ＲＡＭに登録されている該当するデータ「１，２」が出力されることになる。この具体例と同様の構成および動作によって、上記ＲＦ／ＲＢ２が実現されることになる。
【００６９】
次に、ＲＦのＲｅａｄにおける有効フラグＲ１、比較要否フラグＣ、ならびにＷｒｉｔｅにおける有効フラグＷ１について説明する。有効フラグＲ１は、その列の主記憶入力アドレスＲＡに対応する、ＲＢにおける主記憶入力有効バイトＲＭの中に、有効バイトがセットされているものがあるか否かを示すフラグである。同様に、有効フラグＷ１は、その列の主記憶出力アドレスＷＡに対応する、ＲＢにおける主記憶出力有効バイトＷＭの中に、有効バイトがセットされているものがあるか否かを示すフラグである。この有効フラグＲ１・Ｗ１は、有効バイトがセットされているものがある場合には「１」、ない場合には「０」の値がセットされる。
【００７０】
比較要否フラグＣは、ある命令区間に対して再利用を行う際に、その列の主記憶入力アドレスＲＡに対応する主記憶入力値ＲＶと、該命令区間における主記憶入力アドレスから読み出した主記憶値とを比較する必要があるか否かを示すフラグである。この比較要否フラグＣは、比較の必要がある場合には「１」、ない場合には「０」の値がセットされる。なお、比較要否フラグＣの設定基準については後述する。
【００７１】
次に、上記の引数や返り値以外のレジスタおよび条件コード（Ｒｅｇｓ．，ＣＣ）について説明する。本実施形態では、ＳＰＡＲＣアーキテクチャレジスタのうち、汎用レジスタ％ｇ０−７、％ｏ０−７、％ｌ０−７、％ｉ０−７、浮動小数点レジスタ％ｆ０−３１、条件コードレジスタＩＣＣ、浮動小数点条件コードレジスタＦＣＣを用いるようになっている（詳細は後述する）。このうち、リーフ関数の入力は汎用レジスタ％ｏ０−５、出力は汎用レジスタ％ｏ０−１、また、非リーフ関数の入力は汎用レジスタ％ｉ０−５、出力は汎用レジスタ％ｉ０−１、になり、入力は、ａｒｇ［０−５］、出力は、ｒｔｉ［０−１］に登録される。ＳＰＡＲＣ−ＡＢＩの規定では、これら以外のレジスタは関数の入出力にはならないので、関数に関してはＲＢにおける引数（Ａｒｇｓ．）の項で十分である。
【００７２】
一方、ＳＰＡＲＣ−ＡＢＩの規定では、ループの入出力に関しては、用いられるレジスタの種類を特定することはできないので、ループの入出力を特定するには、全ての種類のレジスタに関してＲＢに登録する必要がある。よって、ＲＢにおけるＲｅｇｓ．，ＣＣには、％ｇ０−７、％ｏ０−７、％ｌ０−７、％ｉ０−７、％ｆ０−３１、ＩＣＣ、ＦＣＣが登録されるようになっている。
【００７３】
（再利用処理の概略）
次に、命令区間としての関数およびループのそれぞれの場合について、再利用処理の概略について説明する。
【００７４】
まず、関数の場合について説明する。関数から復帰するまでに次の関数を呼び出した場合、または、登録すべき入出力が再利用表の容量を超える、引数の第７ワードを検出する、途中でシステムコールや割り込みが発生する、などの擾乱が発生しなかった場合、復帰命令を実行した時点で、登録中の入出力表エントリを有効にする。
【００７５】
以降、図１を参照しながら説明すると、関数を呼び出す前に、▲１▼ＲＦに登録されている関数のエントリの先頭アドレスＳｔａｒｔに、該当関数の先頭アドレスと一致するものがあるかを検索する。一致するものがある場合には、▲２▼ＲＢに登録されている該当エントリのうち、有効エントリを示す状態表示フラグＶが登録済状態にセットされているエントリであって、かつ、該エントリにおける引数ａｒｇｓ．が、呼び出す関数の引数と完全に一致するエントリを選択する。そして、選択したエントリにおいて、▲３▼有効フラグＲ１が「１」にセットされており、かつ、比較要否フラグＣが「０」にセットされている場合には、主記憶入力値の比較を行うことなく、▲５▼ＲＢに記憶されているＲｅｔｕｒｎ  Ｖａｌｕｅｓをレジスタに書き込み、主記憶出力アドレスＷＡに対して、順次、各有効フラグＷＭがセットされている主記憶出力値ＷＶを書き込む。
【００７６】
一方、選択したエントリにおいて、▲３▼有効フラグＲ１が「１」にセットされており、かつ、比較要否フラグＣが「１」にセットされている場合には、▲４▼該当関数の主記憶入力値と、ＲＢに登録されている主記憶入力値ＲＶとの比較を行い、これらが一致する場合に、▲５▼ＲＢに記憶されているＲｅｔｕｒｎ  Ｖａｌｕｅｓをレジスタに書き込み、主記憶出力アドレスＷＡに対して、順次、各有効フラグＷＭがセットされている主記憶出力値ＷＶを書き込む。以上により、関数の再利用が実現されることになる。
【００７７】
次に、ループの場合について説明する。ループが完了する以前に関数から復帰したり、前記した擾乱が発生したりするなど、ループの入出力登録が中止されなければ、登録中のループに対応する後方分岐命令を検出した時点で、登録中の入出力表エントリを有効にし、そのループの登録を完了する。
【００７８】
さらに、後方分岐命令が成立する場合は、次のループが再利用可能かどうかを判断する。すなわち、図１を参照しながら説明すると、後方分岐する前に、▲１▼ＲＦに登録されているループのエントリの先頭アドレスＳｔａｒｔに、該当ループの先頭アドレスと一致するものがあるかを検索する。一致するものがある場合には、▲２▼ＲＢに登録されている該当エントリのうち、有効エントリを示す状態表示フラグＶが登録済状態にセットされているエントリであって、かつ、該エントリにおけるレジスタ入力値が、呼び出すループのレジスタ入力値と完全に一致するエントリを選択する。そして、選択したエントリにおいて、▲３▼有効フラグＲ１が「１」にセットされており、かつ、比較要否フラグＣが「０」にセットされている場合には、主記憶入力値の比較を行うことなく、▲５▼ＲＢに記憶されているＲｅｔｕｒｎ  Ｖａｌｕｅｓをレジスタに書き込み、主記憶出力アドレスＷＡに対して、順次、各有効フラグＷＭがセットされている主記憶出力値ＷＶを書き込む。
【００７９】
一方、選択したエントリにおいて、▲３▼有効フラグＲ１が「１」にセットされており、かつ、比較要否フラグＣが「１」にセットされている場合には、▲４▼該当ループの主記憶入力値と、ＲＢに登録されている主記憶入力値ＲＶとの比較を行い、これらが一致する場合に、▲５▼ＲＢに記憶されているＲｅｔｕｒｎ  Ｖａｌｕｅｓをレジスタに書き込み、主記憶出力アドレスＷＡに対して、順次、各有効フラグＷＭがセットされている主記憶出力値ＷＶを書き込む。以上により、ループの再利用が実現されることになる。
【００８０】
なお、ループの再利用が行われた場合、ＲＢに登録されている分岐方向に基づいて、さらに次のループに関して同様の処理を繰り返す。一方、次のループが再利用不可能であれば、次のループを通常に実行し、ＲＦおよびＲＢへの登録を開始する。
【００８１】
（ループを含む多重再利用）
１レベルで上記のような再利用機構を用いた場合、図９（ａ）に示した例で言えば、リーフ関数としての関数Ｂや、関数Ｂの内部にあるループＣなどをそれぞれ再利用することが可能となる。これに対して、ある関数を一度実行しただけで、その関数の内部に含まれる関数やループを含む全ての命令区間が再利用可能となるように登録を行う仕組みが多重再利用である。例えば上記の例で言えば、多重再利用によれば、関数Ａを一度実行しただけで、入れ子関係にあるＡ，Ｂ，Ｃの全ての命令区間が再利用可能となる。以下に、多重再利用を実現する上で必要とされる機能拡張について説明する。
【００８２】
図８に、一例として、関数Ａおよび関数Ｄの概念的な構造を示す。同図に示す例では、関数Ａの内部にループＢが存在しており、ループＢの内部にループＣが存在しており、ループＣにおいて関数Ｄが呼び出されるようになっている。そして、関数Ｄの内部にループＥが存在しており、ループＥの内部にループＦが存在している。
【００８３】
図３は、図８に示す関数Ａ，ＤおよびループＢ，Ｃ，Ｅ，Ｆの入れ子構造において、内側の構造のレジスタ入出力（太枠セル領域）が、外側の構造のレジスタ入出力となる影響範囲（矢印）について示している。例えば、ループＦの内部において入力として参照された％ｉ０〜５は、ループＥおよび関数Ｄに対する入力でもあり、さらに、関数Ｄを呼び出したループＣおよびループＢに対する入力（ただし％ｏ０〜５に読み替える）でもある。一方、関数Ａにとって％ｏ０〜５は局所変数に相当するので、％ｉ０〜５（％ｏ０〜５）は、関数Ａに対してのレジスタ入力とはならない。すなわち、％ｉ０〜５（％ｏ０〜５）の影響範囲はループＢまでとなる。別の見方をすれば、関数Ｄの内部で％ｉ０〜５が参照された場合には、ループＢが直接的に％ｏ０〜５を参照しなくても、％ｏ０〜５をループＢの入力値として登録する必要がある。ループＦ内部において出力された％ｉ０〜１についても同様である。
【００８４】
浮動小数点レジスタはレジスタウィンドウに含まれないので、出力された％ｆ０〜１は、関数Ａを含む全階層の出力となる。一方、その他のレジスタ入出力は、関数を超えて影響がおよぶことはない。すなわち、ループＦ内部における入出力、すなわち、レジスタ入力としての％ｉ６〜７、％ｇ，ｌ，ｏ、％ｆ０〜３１、％ｉｃｃ、％ｆｃｃ、およびレジスタ出力としての％Ｉ２〜７、％ｇ，ｌ，ｏ、％ｆ２〜３１、％ｉｃｃ、％ｆｃｃの影響範囲はループＥまでとなる。主記憶に対する入出力については、前述した、関数呼び出し直前の％ｓｐ（ＳＰ）と比較する方法を入れ子の全階層に対して適用することにより、影響範囲を特定することができる。
【００８５】
以上のことから、多重再利用を実現するには、前述したＲＦおよびＲＢを関数やループの入れ子構造と関連づける機構が必要である。図４に示すように、再利用ウィンドウ（ＲＷ）を装備することによって、現在実行中かつ登録中であるＲＦおよびＲＢの各エントリ（図中ではＡ、Ｂ、Ｃと示す）をスタック構造として保持する。関数やループの実行中は、ＲＷに登録されている全てのエントリについて、これまでに述べた方法に基づいて、レジスタおよび主記憶参照を登録していく。
【００８６】
この際に、あるエントリに関して、（１）登録可能項目数の超過、（２）引数の第７ワードの検出、（３）システムコールの検出、によって再利用不可能であると判断した場合には、ＲＷを用いて、そのエントリに対応するＲＢおよび上位のＲＢを特定し、登録を中止することができる。
【００８７】
なお、ＲＷの深さは有限であるものの、一度に登録可能な多重度を超えて関数やループを検出した場合には、外側の命令区間から順次登録を中止し、より内側の命令区間を登録対象に加えることによって、入れ子関係の動的変化に追随することができる。また、実行および登録中（例えばＡ）に、再利用可能な命令区間（例えばＤ）に遭遇した場合には、登録済の入出力をそのまま登録中エントリに追加することによって、ＲＷの深さを超えるＡの多重再利用も可能となる。
【００８８】
（並列事前実行）
以上に述べた、関数やループの多重再利用では、ＲＢエントリの生存時間よりも同一パラメータが出現する間隔が長い場合や、パラメータが単調に変化し続ける場合には全く効果がないことになる。すなわち、ＲＢエントリの生存時間よりも同一パラメータが出現する間隔が長い場合には、ある関数またはループがＲＢに登録されたとしても、その登録された関数またはループに関して同一パラメータが次に出現した際には、すでにその関数またはループがＲＢエントリから消えていることになり、再利用できないことになる。また、パラメータが単調に変化し続ける場合には、該当する関数やループがＲＢに登録されていても、パラメータが異なることによって再利用できないことになる。
【００８９】
これに対して、多重再利用を行うプロセッサとしてのＭＳＰ１Ａとは別に、命令区間の事前実行によってＲＢエントリを有効にするプロセッサとしてのＳＳＰ１Ｂを複数個設けることによって、さらなる高速化を図ることができる。
【００９０】
並列事前実行機構を行うためのハードウェア構成は、前記した図５に示すような構成となる。同図に示すように、ＲＷ４Ａ・４Ｂ、演算器５Ａ・５Ｂ、レジスタ６Ａ・６Ｂ、キャッシュ７Ａ・７Ｂは、各プロセッサごとに独立して設けられている一方、ＲＦ／ＲＢ２、および主記憶３は全てのプロセッサが共有するようになっている。同図において、破線は、ＭＳＰ１ＡおよびＳＳＰ１ＢがＲＦ／ＲＢ２に対して入出力を登録するパスを示している。
【００９１】
ここで、並列事前実行を実現する上での課題は、（１）どのように主記憶一貫性を保つか、（２）どのように入力を予測するか、（３）どのようにＲＢエントリを入れ替えるか、（４）どの命令区間を実行するか、の４点が挙げられる。以下に、これらの課題に対する解決手法について説明する。
【００９２】
（主記憶一貫性に関する課題の解決方法）
まず、上記の課題（１）どのように主記憶一貫性を保つかについて説明する。特に予測した入力パラメータに基づいて命令区間を実行する場合、主記憶に書き込む値がＭＳＰ１ＡとＳＳＰ１Ｂとで異なることになる。これを解決するために、図５に示すように、ＳＳＰ１Ｂは、ＲＢへの登録対象となる主記憶参照にはＲＦ／ＲＢ２、また、その他の局所的な参照にはＳＳＰ１Ｂごとに設けた局所メモリとしてのＬｏｃａｌ７Ｂを使用することとし、Ｃａｃｈｅ７Ｂおよび主記憶３への書き込みを不要としている。なお、ＭＳＰ１Ａが主記憶３に対して書き込みを行った場合には、対応するＳＳＰ１Ｂのキャッシュラインが無効化される。
【００９３】
具体的には、ＲＢへの登録対象のうち、読み出しが先行するアドレスについては主記憶３を参照し、ＭＳＰ１Ａと同様にアドレスおよび値をＲＢへ登録する。以後、主記憶３ではなくＲＢを参照することによって、他のプロセッサからの上書きによる矛盾の発生を避けることができる。局所的な参照については、読み出しが先行するということは、変数を初期化せずに使うことに相当し、値は不定でよいことになるので、主記憶３を参照する必要はない。
【００９４】
なお、局所メモリとしてのＬｏｃａｌ７Ｂの容量は有限であり、関数フレームの大きさがＬｏｃａｌ７Ｂの容量を超えた場合など、実行を継続できない場合は、事前実行を打ち切るようにする。また、事前実行の結果は主記憶３に書き込まれないので、事前実行結果を使って、さらに次の事前実行を行うことはできない。
【００９５】
（入力の予測方法）
次に、上記の課題（２）どのように入力を予測するかについて説明する。事前実行に際しては、ＲＢの使用履歴に基づいて将来の入力を予測し、ＳＳＰ１Ｂへ渡す必要がある。このために、ＲＦの各エントリごとに小さなプロセッサを設け、ＭＳＰ１ＡやＳＳＰ１Ｂとは独立して入力予測値を求めるようにする。
【００９６】
具体的には、最後に出現した引数（Ｂ）および最近出現した２組の引数の差分（Ｄ）に基づいて、ストライド予測を行う。なお、Ｂ＋Ｄに基づく命令区間の実行はＭＳＰ１Ａがすでに開始していると考える。ＳＳＰ１ＢがＮ台の場合には、用意する入力予測値は、Ｂ＋Ｄ×２からＢ＋Ｄ×（Ｎ＋１）までの範囲とする。
【００９７】
以上のように入力予測を行えば、上記した入力パラメータが単調に変化し続けるような場合に、事前に予測しておいた結果に基づいて効果的に再利用を行うことが可能となる。
【００９８】
（ＲＢエントリ入れ替え方法）
次に、上記の課題（３）どのようにＲＢエントリを入れ替えるかについて説明する。各ＲＦエントリが１つの命令区間に対応し、入力と出力との対応関係がＲＢに登録される際に、ＭＳＰ１ＡとＳＳＰ１ＢとがＲＢエントリをどのように使い分けるかが課題となる。命令区間は、大きく分けると、ＭＳＰ１Ａのみでも再利用の効果があるものと、配列を扱うループのようにＭＳＰ１Ａのみでは効果がないものとに分けられると考えられる。前者であれば、ＬＲＵ（ｌｅａｓｔ  ｒｅｃｅｎｔｌｙ  ｕｓｅｄ）による入れ替え、後者であれば、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）による入れ替えが有効である。
【００９９】
しかしながら、ある命令区間の性質がいずれであるかを動的かつ直ちに判断することは難しいので、個々のＲＦに属するＲＢエントリをＭＳＰ１Ａ用とＳＳＰ１Ｂ用とに分割し、ＭＳＰ１Ａ用のＲＢエントリをＬＲＵによって、ＳＳＰ１Ｂ用のＲＢエントリをＦＩＦＯによって入れ替えるようにする。前述したように、入力予測値はＮ組であり、ＳＳＰが登録後、ＭＳＰが直ちに利用することを想定して、ＳＳＰ用に割り当てるエントリ数はＮ×２としておく。この様子を図６に示す。
【０１００】
（命令区間の選択）
次に、上記の課題（４）どの命令区間を実行するかについて説明する。事前実行は、前記したように、同一パラメータが出現する間隔が長い命令区間や、パラメータが単調に変化し続ける命令区間に対して効果があることが予想される。しかしながら、それぞれの命令区間の性質や実際の効果の有無は、事前に認識することはできない。そこで、ＲＦに新規に登録された命令区間については、直ちにＳＳＰ１Ｂによる数回分の事前実行を試みるようにする。そして、数回の試行の結果、ＭＳＰ１Ａによる登録頻度が高く、かつ、ＳＳＰ１Ｂが登録したエントリの再利用頻度も高いＲＦを継続してＳＳＰ１Ｂの実行対象とする。
【０１０１】
具体的には、動的に変化する登録頻度や再利用頻度を把握するために、ＲＦにおける各エントリごとに、一定期間における登録および再利用の状況をシフトレジスタに記録する。ＲＦごとに付加した小さなプロセッサが、Ｅ＝（過去の削減ステップ数）×（登録回数）×（再利用回数）を計算し、各ＳＳＰが、Ｅが最大となるＲＦを選択する。この様子を図７に示す。以下に、このことについてより詳しく説明する。
【０１０２】
事前実行するかどうかを判断する際に利用できる統計情報としては、（ａ）再利用によって削減可能なステップ数、（ｂ）ＭＳＰ１Ａが、やむをえず実行し登録した頻度、（ｃ）ＭＳＰ１Ａが、ＳＳＰ１Ｂの登録結果を再利用できた頻度、（ｄ）ＭＳＰ１Ａが、ＭＳＰ１Ａの登録結果を再利用できた頻度、が挙げられる。これらから、次にどの命令区間を事前実行すれば最大の効果が期待できるかを考える。
【０１０３】
まず、上記（ｄ）ＭＳＰ１Ａが、ＭＳＰ１Ａの登録結果を再利用できた頻度に関しては、ＳＳＰ１Ｂによる事前実行とは無関係であるので、考慮する必要はないことがわかる。
【０１０４】
上記（ａ）、（ｂ）および（ｃ）に関しては、自項目以外の項目が同じであるならば、それぞれ値が大きいほど効果を期待できることになる。また、それぞれの項目において、値が０であれば、効果を期待できないことになる。以上より、前記した式Ｅ＝（過去の削減ステップ数）×（登録回数）×（再利用回数）によって期待値を算出している。
【０１０５】
（比較要否フラグの設定処理の概要）
次に、上記した比較要否フラグＣの設定をどのような判断で行うかについて説明する。まず、データ処理装置が、ＳＳＰ１Ｂを備えずに、ＭＳＰ１Ａのみを備えた構成である場合について説明する。この構成の場合、ある命令区間に関して主記憶からの読み出しを再利用表に登録した後に、該読み出しアドレスの内容が変更されなければ、該命令区間の再利用を行う際に主記憶入力値の比較を行う必要はないことになる。一方、該読み出しアドレスの内容が変更された場合には、該命令区間の再利用を行う際に主記憶入力値の比較を行う必要があることになる。
【０１０６】
したがって、比較要否フラグＣは、主記憶入力アドレスに対して書き込みが行われるまでの間は、比較の必要がないことを示す「０」の値をセットする一方、該主記憶入力アドレスに対して書き込みが行われた後は、比較の必要があることを示す「１」の値をセットすればよいことになる。なお、主記憶入力アドレスに対して書き込みが行われる場合の具体例については後述する。
【０１０７】
一方、ＭＳＰ１ＡとＳＳＰ１Ｂとを備えたデータ処理装置の場合は次のようになる。ＳＳＰ１Ｂは、上記したように、命令区間のレジスタ入力値を予測し、予測した入力に基づいて該命令区間のみを実行する。ＳＳＰ１Ｂは予測した入力に対する出力を計算し、この事前に予測した入出力をＲＦ／ＲＢ２に登録する。ＭＳＰ１Ａは、命令区間を実行する際に、該命令区間がＳＳＰ１Ｂによって予測されたものである場合には、ＳＳＰ１Ｂによって登録された入出力を用いて再利用を行う。
【０１０８】
ここで、ＭＳＰ１Ａは、主記憶３に対する読み出しおよび書き込みが可能なＣａｃｈｅ７Ａを備える一方、ＳＳＰ１Ｂは、主記憶３からの読み出しのみ可能なＣａｃｈｅ／Ｌｏｃａｌ７Ｂを備えている。そして、ＳＳＰ１Ｂは、入出力登録対象となる主記憶参照をする際にはＲＦ／ＲＢ２そのものを用い、その他の局所的な参照をする際には、ＳＳＰ１Ｂごとに設けられたＣａｃｈｅ／Ｌｏｃａｌ７Ｂを用いる。一方、ＭＳＰ１Ａによって主記憶３への書き込みが行われた場合には、対応するＳＳＰ１Ｂのキャッシュラインが無効化される。
【０１０９】
この場合、ＳＳＰ１Ｂが生成した入出力記録における、主記憶入力アドレスＲＡのうち、ＭＳＰ１Ａが比較を行う必要のない主記憶入力アドレスＲＡに付随する比較要否フラグＣを、比較の必要がないことを示す「０」の値をセットする一方、ＭＳＰ１Ａが比較を行う必要がある場合には、比較の必要があることを示す「１」の値をセットすればよいことになる。
【０１１０】
ここで、ＭＳＰ１Ａが比較を行う必要がある主記憶入力アドレスＲＡとは、ＳＳＰ１Ｂが主記憶３や、ＭＳＰ１ＡにおけるＣａｃｈｅ７Ａの内容と異なる値を主記憶入力値として使用し、ＲＦ／ＲＢ２に登録を行ったものとなる。
【０１１１】
このような主記憶入力アドレスＲＡには、次の３つのパターンがある。▲１▼第１のパターンとしては、ＳＳＰ１ＢがＲＦ／ＲＢ２に主記憶出力アドレスＷＡおよび主記憶出力値ＷＶを書き込んだ後に、ＳＳＰ１Ｂが、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に対して該主記憶出力アドレスＷＡと同じ主記憶入力アドレスＲＡを登録するに至った場合の該主記憶入力アドレスＲＡである。
▲２▼第２のパターンとしては、ＳＳＰ１ＢがＲＦ／ＲＢ２に主記憶入力アドレスＲＡおよび主記憶入力値ＲＶを登録した後に、ＳＳＰ１Ｂが、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に対して、同じ主記憶入力アドレスＲＡを登録するに至った場合の該主記憶入力アドレスＲＡである。▲３▼第３のパターンとしては、ＳＳＰ１ＢがＣａｃｈｅから読み出してＲＦ／ＲＢ２に主記憶入力アドレスＲＡとして登録した後に、ＭＳＰ１Ａまたはその他の装置によって主記憶３の内容が変更された場合の該主記憶入力アドレスＲＡである。
【０１１２】
上記▲１▼のパターンは次のようにして検出することができる。すなわち、ある命令区間に対応するＲＦ／ＲＢ２に対して主記憶入力アドレスＲＡおよび主記憶入力値ＲＶを登録する際に、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に、該主記憶入力アドレスＲＡと同じ主記憶出力アドレスＷＡが登録されているか否かを検査すればよい。ここで登録されていると判定された場合に、該主記憶入力アドレスＲＡに付随する比較要否フラグＣを「１」にセットする。
【０１１３】
上記▲２▼のパターンは次のようにして検出することができる。すなわち、ある命令区間に対応するＲＦ／ＲＢ２に対して主記憶入力アドレスＲＡおよび主記憶入力値ＲＶを登録する際に、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に、同じ主記憶入力アドレスＲＡが登録されているか否かを検査すればよい。ここで登録されていると判定された場合に、該主記憶入力アドレスＲＡに付随する比較要否フラグＣを、既に登録されている主記憶入力アドレスＲＡに対応する比較要否フラグと同じフラグをセットする。
【０１１４】
なお、上記▲１▼のパターンおよび▲２▼のパターンに対しての処理の詳細および具体例については、後述する（複数の命令区間を並行して登録する際の処理）において説明する。
【０１１５】
上記▲３▼のパターンは次のようにして検出することができる。すなわち、ＭＳＰ１Ａまたはその他の装置によって主記憶３の内容が変更された際には、対応するＳＳＰ１Ｂのキャッシュラインが無効化されるとともに、ＲＦ／ＲＢ２に登録されている全ての命令区間に対応する主記憶入力アドレスＲＡに付随する比較要否フラグＣを「１」にセットする。なお、この処理の詳細および具体例については、後述する（主記憶変更時の処理）において説明する。
【０１１６】
（複数の命令区間を並行して登録する際の処理）
次に、図２（ａ）および図２（ｂ）を参照しながら、ある命令区間をＲＦ／ＲＢ２に登録している最中に、別の命令区間のＲＦ／ＲＢ２に対する登録処理を行う場合の処理について説明する。このように、複数の命令区間を並行してＲＦ／ＲＢ２に登録する際には、それぞれの命令区間に対応させて複数のＲＢを設けるようにする。図２（ａ）は、既に登録作業中に設定されている命令区間に対応するＲＦおよびＲＢ００１の状態を示しており、図２（ｂ）は、新たに登録作業を行う命令区間に対応するＲＦおよびＲＢ００２の状態を示している。
【０１１７】
新たな命令区間の登録作業を開始する際には、該命令区間を登録するＲＦおよびＲＢにおいて、まず、該命令区間を登録するＲＦおよびＲＢにおける状態表示フラグＶを登録作業中状態にセットする。そして、各列の主記憶入力アドレスＲＡに対応する有効フラグＲ１、および比較要否フラグＣをそれぞれ「０」にセットする。また、各列の主記憶出力アドレスＷＡに対応する有効フラグＷ１を「０」にセットする。このようなイニシャライズ処理により、以前に登録されていた内容の影響をリセットすることができる。なお、このイニシャライズ処理は、複数の命令区間を並行して登録する場合に限らず、単一の命令区間を登録する際にも行われるものである。
【０１１８】
次に、新たな命令区間の登録作業中に、該命令区間の主記憶読み出しを行う際の処理について説明する。ここで、新たな命令区間を、図２（ｂ）に示すＲＢ００２のエントリである行のＬ００２に登録するものとし、このＬ００２における状態表示フラグＶが登録作業中状態にセットされているものとする。
【０１１９】
まず、再利用表に登録されている全てのエントリにおいて、状態表示フラグＶが登録作業中状態となっているエントリが抽出される。抽出されたエントリにおいて、主記憶出力アドレスＷＡ００１が、上記命令区間の主記憶読み出しアドレスと一致し、かつ、対応する有効バイトを示すマスクＷＭ００１に値がセットされているものがあるか否かが判定される。
【０１２０】
ここで、主記憶読み出しアドレスが一致し、ＷＭ００１に値がセットされていると判定された場合、対応する主記憶出力値ＷＶ００１が取り出されるとともに、該エントリに対する比較必要フラグＷＨ００１が「１」の値にセットされる。一方、主記憶読み出しアドレスが一致しない、または、ＷＭ００１に値がセットされていないと判定された場合、該エントリに対する比較必要フラグＷＨ００１が「０」の値にセットされる。
【０１２１】
すなわち、比較必要フラグＷＨ００１が「１」の値にセットされるということは、ＳＳＰ１ＢがＲＦ／ＲＢ２に主記憶出力アドレスＷＡおよび主記憶出力値ＷＶを書き込んだ後に、ＳＳＰ１Ｂが、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に対して該主記憶出力アドレスＷＡと同じ主記憶入力アドレスＲＡを登録するに至った場合の該主記憶入力アドレスＲＡを検出した、ということになる。
【０１２２】
次に、登録作業中状態となっているエントリにおいて、主記憶入力アドレスＲＡ００１が、上記命令区間の主記憶読み出しアドレスと一致し、かつ、対応する有効バイトを示すマスクＲＭ００１に値がセットされているものがあるか否かが判定される。
【０１２３】
ここで、主記憶読み出しアドレスが一致し、ＲＭ００１に値がセットされていると判定された場合、対応する主記憶入力値ＲＶ００１が取り出されるとともに、対応する比較要否フラグＣ００１の値が比較必要フラグＲＨ００１として設定される。一方、主記憶読み出しアドレスが一致しない、または、ＲＭ００１に値がセットされていないと判定された場合、該エントリに対する比較必要フラグＲＨ００１が「０」の値にセットされる。
【０１２４】
すなわち、比較必要フラグＲＨ００１が「１」の値にセットされるということは、ＳＳＰ１ＢがＲＦ／ＲＢ２に主記憶入力アドレスＲＡおよび主記憶入力値ＲＶを登録した後に、ＳＳＰ１Ｂが、入れ子関係にある別の命令区間に対応するＲＦ／ＲＢ２に対して、同じ主記憶入力アドレスＲＡを登録するに至った場合の該主記憶入力アドレスＲＡを検出した、ということになる。
【０１２５】
次に、上記命令区間の主記憶読み出しアドレスから主記憶データＭＶ００１が読み出される。そして、このＭＶ００１に基づいて、次のような処理によって、上記命令区間の主記憶読み出し値としてのＲＥＡＤ１が設定される。
【０１２６】
まず、ＷＶ００１の値に対して、ＷＭ００１によってマスクされた値を、ＷＳ００１として設定する。例えば、ＷＭ００１が「０１００」であり、ＷＶ００１が「００１２００Ｆ４」である場合には、ＷＳ００１には「００１２００００」という値が設定される。
【０１２７】
次に、ＲＭ００１からＷＭ００１を除いた値をＨＭ００１として設定する。そして、ＲＶ００１の値に対して、ＨＭ００１によってマスクされた値を、ＲＳ００１として設定する。なお、ＲＭ００１からＷＭ００１を除いた値というのは、実際には、ＲＭ００１において「１」が立っている箇所のうち、ＷＭ００１において「１」が立っている箇所と同じものについては、これを「０」に設定する、ということになる。例えばＲＭ００１が「０１１０」であり、ＷＭ００１が「０１００」であり、ＲＶ００１が「５２１Ｅ１００５」である場合には、ＨＭ００１が「００１０」となり、ＲＳ００１は「００００１０００」となる。
【０１２８】
次に、全ての箇所が「１」に設定されているマスクとしてのＡＬＬ１から、ＲＭ００１およびＷＭ００１を除いた値をＭＭ００１として設定する。そして、上記命令区間の主記憶読み出しアドレスから読み出された主記憶データＭＶ００１の値に対して、ＭＭ００１によってマスクされた値を、ＭＳ００１として設定する。例えば、ＲＭ００１が「０１１０」であり、ＷＭ００１が「０１００」であり、ＭＶ００１が「８８１５５２１７」である場合には、ＭＭ００１が「１００１」となり、ＭＳ００１は「８８００００１７」となる。
【０１２９】
以上の準備の後、主記憶読み出し値ＲＥＡＤ１は、ＷＳ００１、ＲＳ００１、およびＭＳ００１の論理和によって設定される。すなわち、上記の例で言えば、ＷＳ００１が「００１２００００」であり、ＲＳ００１が「００００１０００」であり、ＭＳ００１が「８８００００１７」であるので、ＲＥＡＤ１は、「８８１２１０１７」となる。
【０１３０】
以上のようにしてＲＥＡＤ１が求められると、このＲＥＡＤ１の値が、上記命令区間の主記憶入力値ＲＶ００２として登録される。一方、上記命令区間の主記憶入力有効バイトＲＭ００２には、上記のＭＭ００１の値が登録される。
【０１３１】
また、上記命令区間が登録されたＲＢ００２における列に対応する比較要否フラグＣ００２は、上記ＷＨ００１と上記ＲＨ００１との論理和によって設定される。すなわち、ＷＨ００１とＲＨ００１との少なくともどちらか一方が「１」に設定されている場合には、Ｃ００２は「１」に設定されることになる。
【０１３２】
（主記憶変更時の処理）
次に、ＲＦ／ＲＢ２に１つ以上の命令区間に関する内容が登録されている状態で、データ処理装置が何らかの処理を行った結果、主記憶３の内容を変更するような書き込み処理が行われた場合の処理について説明する。
【０１３３】
まず、ある命令区間をＲＦ／ＲＢ２に登録中に、主記憶書き込みが行われる場合の処理について説明する。まず、再利用表に登録されている全てのエントリの中から、主記憶書き込みが行われる主記憶書き込みアドレスと一致する主記憶入力アドレスＲＡが設定されているエントリが抽出される。そして、抽出されたエントリにおいて、該当する主記憶入力アドレスＲＡに対応する比較要否フラグＣの値を「１」にセットする。その後、上記の主記憶書き込み内容に応じて、登録中の命令区間に対応する主記憶出力値ＷＶと主記憶出力有効バイトＷＭとが設定されることになる。
【０１３４】
次に、ＭＳＰ１Ａによって演算処理が行われた結果、主記憶３に対する書き込みが行われる場合、および、上記した外部記憶手段やＩ／Ｏ装置などの外部装置によって、主記憶３に対する書き込みが行われる場合の処理について説明する。まず、再利用表に登録されている全てのエントリの中から、主記憶書き込みが行われる主記憶書き込みアドレスと一致する主記憶入力アドレスＲＡが設定されているエントリが抽出される。そして、抽出されたエントリにおいて、該当する主記憶入力アドレスＲＡに対応する比較要否フラグＣの値を「１」にセットする。
【０１３５】
【発明の効果】
以上のように、本発明に係るデータ処理装置は、上記主記憶手段から読み出した命令区間に基づく演算を行う第１の演算手段と、上記第１の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、１つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、上記第１の演算手段が、命令区間を実行する際に、レジスタ入力値を取得する第１のステップと、上記命令区間記憶手段に記憶されているエントリの中から、上記第１のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第２のステップと、上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第３のステップと、上記第３ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第４のステップとを行う構成である。
【０１３６】
これにより、命令区間記憶手段における各エントリに比較要否フラグが設定されており、この比較要否フラグが「否」と設定されていれば、主記憶入力値の比較を省略することが可能となっている。したがって、再利用による高速化の効果を促進することが可能となるという効果を奏する。
【０１３７】
また、本発明に係るデータ処理装置は、上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、上記第１の演算手段が、上記第２のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第５のステップをさらに行い、上記第３ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第５ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較する構成としてもよい。
【０１３８】
これにより、上記の構成による効果に加えて、有効な主記憶入力値が登録されていないにも拘らず、主記憶手段に対するアクセスが行われることを防止することが可能となるので、処理の高速化の効果をさらに促進することができるという効果を奏する。
【０１３９】
また、本発明に係るデータ処理装置は、上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされる構成としてもよい。
【０１４０】
これにより、上記の構成による効果に加えて、命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合には、該主記憶入力アドレスに対応する比較要否フラグが、主記憶入力値の比較が必要であることを示す状態にセットされることになる。よって、主記憶入力値の比較を必要時にのみ的確に行うことが可能となるという効果を奏する。
【０１４１】
また、本発明に係るデータ処理装置は、上記第１の演算手段が、主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第６のステップと、上記第１の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第７のステップとをさらに行う構成としてもよい。
【０１４２】
これにより、上記の構成による効果に加えて、新たな命令区間が実行される度に、命令区間記憶手段に記憶されているエントリが追加されることになり、再利用可能なエントリを増やすことができるという効果を奏する。
【０１４３】
また、本発明に係るデータ処理装置は、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第８のステップと、上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第９のステップとをさらに行う構成としてもよい。
【０１４４】
これにより、上記の構成による効果に加えて、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となるという効果を奏する。
【０１４５】
また、本発明に係るデータ処理装置は、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１０のステップと、上記第８のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第７のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第１１のステップとをさらに行う構成としてもよい。
【０１４６】
これにより、上記の構成による効果に加えて、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となるという効果を奏する。
【０１４７】
また、本発明に係るデータ処理装置は、上記第１の演算手段が、上記第７のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第１２のステップと、上記第１２のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第１３のステップとをさらに行う構成としてもよい。
【０１４８】
これにより、上記の構成による効果に加えて、既に命令区間記憶手段に登録されている主記憶入力アドレスに対しても、主記憶入力値の比較を行う必要のあるものに対して的確に比較要否フラグを設定することが可能となるという効果を奏する。
【０１４９】
また、本発明に係るデータ処理装置は、少なくとも１つの第２の演算手段をさらに備え、上記第２の演算手段が、上記第１の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録する構成としてもよい。
【０１５０】
これにより、上記の構成による効果に加えて、次に、同じ命令区間が出現し、予測入力値と同じ入力が行われた場合には、命令区間記憶手段に記憶されている値を再利用することが可能となるという効果を奏する。
【０１５１】
また、本発明に係るデータ処理装置は、上記第１の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第２の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、上記第２の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第２の演算手段に設けられたローカルメモリを用いるとともに、上記第１の演算手段が主記憶手段へ書き込みを行う場合には、対応する第２の演算手段のキャッシュラインが無効化される構成としてもよい。
【０１５２】
これにより、上記の構成による効果に加えて、第１の演算手段と、第２の演算手段とで、主記憶手段に対して異なる値を書き込むことによる不具合を防止することができるという効果を奏する。
【０１５３】
また、第１の演算手段が主記憶手段へ書き込みを行う場合には、対応する第２の演算手段のキャッシュラインが無効化されるので、第１の演算手段によって主記憶手段が書き換えられた場合にも、第２の演算手段が、新たに主記憶手段から値を読み出すことによって、主記憶一貫性を保つことができるという効果を奏する。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るデータ処理装置が備えるＲＦ／ＲＢによって実現される再利用表を示す図である。
【図２】同図（ａ）および同図（ｂ）は、図１に示す再利用表の具体例を示す図である。
【図３】関数の入れ子構造において、内側の構造のレジスタ入出力が、外側の構造のレジスタ入出力となる影響範囲を示す図である。
【図４】ＲＷと、ＲＦ・ＲＢとの関係を示す図である。
【図５】上記データ処理装置の概略構成を示すブロック図である。
【図６】ＲＢエントリを分割する状態を示す図である。
【図７】ＲＦにおける各エントリごとに、一定期間における登録および再利用の状況をシフトレジスタに記録する様子を示す図である。
【図８】関数およびループが入れ子構造となっている状態の一例を示す図である。
【図９】同図（ａ）は、関数Ａが関数Ｂを呼び出す構造を概念的に示す概念図であり、同図（ｂ）は、同図（ａ）に示すプログラム構造を実行する際の主記憶におけるメモリマップを示す図である。
【図１０】関数Ａが関数Ｂを呼び出す場合の、メモリマップにおける引数およびフレームの概要を示す図である。
【図１１】１つの関数を再利用するための従来の再利用表を示す図である。
【符号の説明】
１Ａ    ＭＳＰ
１Ｂ    ＳＳＰ
２    ＲＦ／ＲＢ（命令区間記憶手段）
３    主記憶（主記憶手段）
４Ａ・４Ｂ    ＲＷ
５Ａ・５Ｂ    演算器（第１・第２の演算手段）
６Ａ・６Ｂ    レジスタ
７Ａ・７Ｂ    Ｃａｃｈｅ
【図１】
2004355397.tif 000003
【図２】
2004355397.tif 000004
【図３】
2004355397.tif 000005
【図４】
2004355397.tif 000006
【図５】
2004355397.tif 000007
【図６】
2004355397.tif 000008
【図７】
2004355397.tif 000009
【図８】
2004355397.tif 000010
【図９】
2004355397.tif 000011
【図１０】
2004355397.tif 000012
【図１１】
2004355397.tif 000013