JP3855077B2 - データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 - Google Patents
データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 Download PDFInfo
- Publication number
- JP3855077B2 JP3855077B2 JP2003153221A JP2003153221A JP3855077B2 JP 3855077 B2 JP3855077 B2 JP 3855077B2 JP 2003153221 A JP2003153221 A JP 2003153221A JP 2003153221 A JP2003153221 A JP 2003153221A JP 3855077 B2 JP3855077 B2 JP 3855077B2
- Authority
- JP
- Japan
- Prior art keywords
- main memory
- address
- registered
- input
- value
- 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)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
【発明の属する技術分野】
本発明は、主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置に関するものである。
【0002】
【従来の技術】
従来、CPU(Central Processing Unit)を始めとするマイクロプロセッサにおいて、演算速度の高速化技術に関する研究開発が盛んに行われている。高速化技術としては、例えばパイプライン、スーパースケーラ、アウトオブオーダー実行、および、レジスタリネーミングなどが挙げられる。
【0003】
パイプラインは、命令の実行処理を数段階に分解し、複数の命令を流れ作業的に同時処理を行う技術である。スーパースケーラは、命令の実行回路を2組以上用意し、複数の命令を同時に並行して実行する技術である。アウトオブオーダー実行は、命令の記述順序を無視して、いくつかの連続する命令の中から先に実行可能なものを探して先行処理を行う技術である。レジスタリネーミングは、例えばCISC(Complex Instruction Set Computer)タイプのプロセッサにおいて、従来のプロセッサにおける命令の互換性を保ちながら、汎用レジスタの数を増やすことによって並行処理が行われる確率を増大させる技術である。
【0004】
このように、マイクロプロセッサにおける演算速度の高速化を図る際には、命令の実行を並行して行うことが重要となっている。しかしながら、プログラム中には、ある命令の結果に応じて異なる命令が行われるような依存関係、言い換えれば分岐が含まれている場合がほとんどである。このような分岐が含まれている場合、並行処理によって先行して処理を行っていると、分岐の結果によって先行処理した内容が無駄になるという状況が発生することになり、演算速度の高速化の効果が小さくなるという問題がある。
【0005】
そこで、プログラム中に分岐がある場合に、分岐先を予測することによって先行処理が無駄になる確率を低減し、並行処理の効果を向上させる技術、いわゆる分岐予測に関する研究が数多く行われている。
【0006】
しかしながら、分岐予測に基づいて投機的先行処理を行う場合には、一般的に次のような問題がある。第1の問題としては、予測の正当性を常に検証する必要があるので、先行命令列の実行時間そのものを削減することはできない、という点である。第2の問題としては、誤った予測に基づく一連の先行演算結果を全て無効化する必要があるので、一度に投機的先行処理できる命令数を多くするには、相応のハードウェアコストを要する、という点である。第3の問題としては、命令間の依存関係が多いほど、多重に投機的先行処理をする必要が生じ、予測の正当性の検証処理、および誤った予測に基づく処理の無効化処理が極めて複雑になる、という点である。
【0007】
一方、分岐予測とは異なる高速化技術として、値再利用という技術も提案されている。この値再利用とは、プログラムの一部分に関する入力値および出力値を再利用表に登録しておき、同じ箇所を再度実行する際に、入力値が再利用表に登録されているものである場合には、登録されている出力値を出力する、という技術である。この値再利用による効果としては次のようなものが挙げられる。(1)入力値が、再利用表に登録されている入力値と一致すれば、実行結果を検証する必要がない。(2)入力値および出力値の総数によってのみハードウェアコストが決定され、省略可能な命令列の長さが制約されない。(3)命令間の依存関係の多少は、再利用機構の複雑さに影響を与えない。(4)冗長なロード/ストア命令を削減することができるとともに、これに伴う消費電力の削減も実現される。
【0008】
後記する非特許文献1には、プログラムにおける関数に関して値再利用を行う技術が示されている。この従来技術では、一般的にロードモジュールがABI(Application Binary Interface)に従って作られることを利用しており、特に、SPARC(Scalable Processor ARChitecture) ABIを利用している。そして、このABIにおいて関数の入出力を特定することによって値再利用を実現している。すなわち、値再利用のためのコンパイラによる専用命令の埋め込みが不要となっており、既存ロードモジュールへの適用が可能となっている。
【0009】
また、関数の多重構造を動的に把握することにより、関数内局所レジスタやスタック上の局所変数を値再利用における入出力値から除外するようにしており、これによって効率を向上させている。特に関数については、関数の複雑さに拘わらず、最大6のレジスタ入力、最大4のレジスタ出力、および、局所変数を含まない最小限の主記憶値の登録による再利用および事前実行が可能となっている。この従来技術について以下に詳細に説明する。
【0010】
まず、単一の関数を対象として、何が入力で何が出力であるかを明らかにし、1レベルの再利用を行うために必要な機構について説明する。プログラムにおいては、一般的に関数は多重構造を形成している。関数A(Function-A)が関数B(Function-B)を呼び出す構造を図9(a)に示す。
【0011】
大域変数(Globals)は、関数Aの入出力(Ain/Aout)および関数Bの入出力(Bin/Bout)になりうるものである。関数Aの局所変数(Locals-A)は、関数Aの入出力ではないが、ポインタを通じてBの入出力になりうるものである。また、関数Aから関数Bへの引数(Args)は、関数Bへの入力となりうるものであり、関数Bから関数Aの返り値(Ret.Val.)は、関数Bからの出力となりうるものである。なお、関数Bの局所変数(Locals-B)は、関数Aおよび関数Bの入出力には含まれない。
【0012】
コンテクストに依存せずに関数Bを再利用するには、関数Bの実行時に、関数Bの入出力Bin/Boutのみを入出力として登録しなければならない。ここで、図9(a)に示すプログラム構造を実行する際の主記憶におけるメモリマップを図9(b)に示す。このメモリマップにおいて、Bin/Boutを含まない領域はLocals-Bのみとなっている。よって、Bin/Boutを識別するには、GlobalsとLocals-Bとの境界、および、Locals-BとLocals-Aとの境界をそれぞれ確定しなければならない。前者については、一般的にOS(Operating System)が実行時のデータサイズおよびスタックサイズの上限を決めることを利用し、OSが設定する境界(LIMIT)に基づいてGlobalsとLocals-Bとの境界を確定することができる。後者については、Bが呼び出される直前のスタックポインタの値(SP in A)を用いることによって、Locals-BとLocals-Aとの境界を確定することができる。
【0013】
次に、与えられた主記憶アドレスが、大域変数であるか、または、どの関数の局所変数であるかを識別する方法について説明する。ロードモジュールは、SPARC ABIに規定されている以下の条件を満たすと仮定する。なお、%fpはフレームポインタ、%spはスタックポインタを意味するものとする。
▲1▼%sp以上の領域のうち、%sp+0〜63はレジスタ退避領域、%sp+68〜91は引数退避領域であり、いずれも関数の入出力ではない。
▲2▼構造体を返す場合の暗黙的引数(Implicit Arg.)は%sp+64〜67に格納される。
▲3▼明示的引数(Explicit Arg.)はレジスタ%o0〜5、%sp+92以上の領域に置かれる。
【0014】
まず、大域変数と局所変数とを区別するために、一般的に、OSが実行時のデータサイズおよびスタックサイズの上限を決めることを利用し、次の事項を仮定する。
▲1▼大域変数はLIMIT未満の領域に置かれる。
▲2▼%spは、LIMIT以下になることはなく、LIMIT〜%spの領域は無効である。
【0015】
以上の条件を満たしながら、関数Aが関数Bを呼び出す場合の、メモリマップにおける引数およびフレームの概要を図10に示す。同図を参照しながら、以下にAの局所変数およびBの局所変数を区別する方法について説明する。
【0016】
同図において、(a)はA実行中の状態を示している。LIMIT未満の太枠部分に命令(Instructions)および大域変数(Global Vars.)が格納され、%sp以上に有効な値が格納されている。%sp+64には、Bが構造体を返り値とする場合の暗黙的引数として、構造体の先頭アドレスが格納される。Bに対する明示的引数の先頭6ワードはレジスタ%o0〜5、第7ワード以降は%sp+92以上に格納される。ベースレジスタを%spとするオペランド%sp+92が出現した場合、この領域は引数の第7ワードすなわちBの局所変数である。一方、オペランド%sp+92が出現しない場合、この領域はAの局所変数である。このように、(a)の状態では、オペランドを検証することによってAの局所変数とB局所変数とを区別することができる。
【0017】
一方、(b)はB実行中の状態を示している。引数が入力、返り値が出力、大域変数およびAの局所変数が入出力となりうる。ただし、Bは可変長引数を受け入れる場合があるので、一般に%fp+92以上の領域がAの局所変数の領域となるかBの局所変数の領域となるかは判断できない。
【0018】
局所変数を区別するには、まず、(a)の時点において引数の第7ワード以降を検出した関数呼び出しは再利用の対象外とし、第7ワード以降を検出しない関数呼び出しに関して、直前に%sp+92の値を記録しておくようにする。なお、第7ワード以降を使用する関数呼び出しの出現頻度が低いと予想されることから、第7ワード以降を使用する関数を再利用の対象外とする制限による性能低下は軽微なものと考える。
【0019】
以上の準備により、(b)における主記憶参照アドレスが、予め記録した%sp+92の値以上の場合はAの局所変数、小さい場合はBの局所変数であることがわかる。B実行時には、Bの局所変数を除外しながら、大域変数およびAの局所変数を再利用表へ登録する。
【0020】
再利用の際は、Bの局所変数は入出力から除外されるので、Bの局所変数のアドレスが一致している必要がない。このため、いかなるコンテクストであっても、入力さえ一致すれば、再利用することが可能である。ただし、Bが参照する大域変数やAの局所変数については、アドレスおよびデータの両方が再利用表の内容と完全に一致する必要がある。すなわち、Bを実行する前に、どのようにして比較すべき主記憶アドレスを網羅するかがポイントになる。
【0021】
Bが参照する大域変数やAの局所変数のアドレスは、そもそもBにおいて生成されるアドレス定数や、大域変数/引数を起源とするポインタに基づいているものである。よって、まず引数が完全に一致する再利用表中のエントリを選択した後に、関連する主記憶アドレスをすべて参照して一致比較を行うことにより、Bが参照すべき主記憶アドレスを網羅することができる。そして、全ての入力が一致した場合にのみ、登録済の出力(返り値、大域変数、およびAの局所変数)を再利用することができる。
【0022】
関数再利用を実現するために、再利用表として、関数管理表(RF)および入出力記録表(RB)を設けることにする。1つの関数を再利用するために必要なハードウェア構成を図11に示す。複数の関数を再利用可能とするには、この構成を複数組用意することになる。
【0023】
この表において、RFおよびRBに保持されるVは、エントリが有効であるか否かを示すフラグであり、LRU(least recently used)は、エントリ入れ替えのヒントを示している。RFは、上記のVおよびLRUの他に、関数の先頭アドレス(Start)、および参照すべき主記憶アドレス(Read/Write)を保持する。RBは、上記のVおよびLRUの他に、関数呼び出し直前の%sp(SP)、引数(Args.)(V:有効エントリ、Val.:値)、主記憶値(Mask:Read/Writeアドレスの有効バイト、Value:値)、および、返り値(Return Values)(V:有効エントリ、Val.:値)を保持する。
【0024】
返り値は、%i0〜1(リーフ関数では%o0〜1に読み替える)または%f0〜1に格納され、%f2〜3を使用する返り値(拡張倍精度浮動小数点数)は対象プログラムには存在しないものと仮定する。ReadアドレスはRFが一括管理し、MaskおよびValueはRBが管理することにより、Readアドレスの内容とRBの複数エントリをCAM(content-addressable memory)により一度に比較する構成を可能としている。
【0025】
単一の関数を再利用するには、まず、関数実行時に、局所変数を除外しながら、引数、返り値、大域変数および上位関数の局所変数に関する入出力情報を再利用表に登録していく。ここで、読み出しが先行した引数レジスタは関数の入出力として、また、返り値レジスタへの書き込みは関数の出力として登録する。その他のレジスタ参照は登録する必要がない。主記憶参照も同様に、読み出しが先行したアドレスについては入力、書き込みは出力として登録する。
【0026】
関数から復帰するまでに次の関数を呼び出した場合、または、登録すべき入出力が再利用表の容量を超える、引数の第7ワードを検出する、途中でシステムコールや割り込みが発生する、などの擾乱が発生しなかった場合、復帰命令を実行した時点で、登録中の入出力表エントリを有効にする。
【0027】
以降、図11を参照しながら説明すると、関数を呼び出す前に、▲1▼関数先頭アドレスを検索し、▲2▼引数が完全に一致するエントリを選択し、▲3▼関連する主記憶アドレスすなわち少なくとも1つのMaskが有効であるReadアドレスをすべて参照して、▲4▼一致比較を行う。全ての入力が一致した場合に、▲5▼登録済の出力(返り値、大域変数、およびAの局所変数)を書き戻すことによって、関数の実行を省略することができる。
【0028】
【非特許文献1】
情報処理学会論文誌:ハイパフォーマンスコンピューティングシステム,HPS5,pp.1-12,Sep.(2002),"関数値再利用および並列事前実行による高速化技術"(中島康彦、緒方勝也、正西申悟、五島正裕、森眞一郎、北村俊明、富田眞治)(発行日2002年9月15日)
【0029】
【発明が解決しようとする課題】
上記の従来技術では、次のようにして値再利用が行われる。まず、関数が呼び出された際に、その時点でのレジスタ値である引数と、再利用表に登録されている各エントリの引数とを比較し、全てが一致するエントリがあるか否かが確認される。引数が一致するエントリがあると、その全てのエントリに登録されている全ての主記憶入力アドレスから主記憶データを読み出し、各エントリに登録されている主記憶入力値との比較を行う。すなわち、再利用が可能か否かを判定する際には、必ず主記憶に対するアクセスが必要となっており、この判定処理にかかる時間によって高速化が抑制されるという問題点があった。
【0030】
本発明は上記の問題点を解決するためになされたもので、その目的は、値再利用を行う際に、主記憶へのアクセスを減少させることによって処理の高速化をより促進することが可能なデータ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体を提供することにある。
【0031】
【課題を解決するための手段】
上記の課題を解決するために、本発明に係るデータ処理装置は、主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置において、上記主記憶手段から読み出した命令区間に基づく演算を行う第1の演算手段と、上記第1の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、1つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、上記第1の演算手段が、命令区間を実行する際に、レジスタ入力値を取得する第1のステップと、上記命令区間記憶手段に記憶されているエントリの中から、上記第1のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第2のステップと、上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第3のステップと、上記第3ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第4のステップとを行うことを特徴としている。
【0032】
上記の構成では、主記憶から読み出された命令区間が第1の演算手段によって演算され、演算結果が主記憶に書き込まれるようになっている。一方、命令区間記憶手段には、1つ以上の命令区間に関する情報が、エントリとして記憶されている。ここで、命令区間に関する情報としては、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、およびレジスタ出力値が登録されている。
【0033】
そして、ある命令区間を実行する際には、まず、その命令区間におけるレジスタ入力値と一致するレジスタ入力値が登録されているエントリが抽出される。そして、参照すべき主記憶入力アドレスに対応する比較要否フラグが「否」と設定されている場合には、主記憶入力値の比較を行うことなしに、該当エントリの主記憶出力値およびレジスタ出力値を、処理対象の命令区間の出力として出力するようになっている。
【0034】
ここで、従来では、ある命令区間を実行する際に、レジスタ入力値および主記憶入力値の両方に関して命令区間記憶手段に登録されている内容と一致した場合に、命令区間記憶手段に登録されている主記憶出力値およびレジスタ出力値を出力する、という方法がとられていた。この場合、命令区間の再利用を行う際には、必ず主記憶入力値の比較が行われることになる。一般に、主記憶手段に対する読み出し動作に要する時間は、レジスタに対する読み出し動作に要する時間よりもかなり長いものとなっている。すなわち、再利用の度に主記憶読み出しが行われると、処理の高速化の効果が制限されることになる。
【0035】
これに対して、上記の構成によれば、命令区間記憶手段における各エントリに比較要否フラグが設定されており、この比較要否フラグが「否」と設定されていれば、主記憶入力値の比較を省略することが可能となっている。したがって、再利用による高速化の効果を促進することが可能となる。
【0036】
また、本発明に係るデータ処理装置は、上記の構成において、上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、上記第1の演算手段が、上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第5のステップをさらに行い、上記第3ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第5ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較する構成としてもよい。
【0037】
上記の構成によれば、比較要否フラグに比較が必要であることを示すフラグがセットされており、かつ、有効フラグに有効な主記憶入力値が登録されているものがあることを示すフラグがセットされている場合にのみ、主記憶入力値の比較が行われることになる。すなわち、有効な主記憶入力値が登録されていないにも拘らず、主記憶手段に対するアクセスが行われることを防止することが可能となるので、処理の高速化の効果をさらに促進することができる。
【0038】
また、本発明に係るデータ処理装置は、上記の構成において、上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされる構成としてもよい。
【0039】
命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合には、命令区間記憶手段に登録されている主記憶入力値と、主記憶手段における該当主記憶値とが異なる状態となる。このような状態となった場合には、主記憶入力値の比較を行わないで命令区間の再利用を行うと、誤った演算結果を出力してしまうおそれがある。これに対して上記の構成によれば、上記のような状態となった際には、該主記憶入力アドレスに対応する比較要否フラグが、主記憶入力値の比較が必要であることを示す状態にセットされることになる。よって、主記憶入力値の比較を必要時にのみ的確に行うことが可能となる。
【0040】
また、本発明に係るデータ処理装置は、上記の構成において、上記第1の演算手段が、主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第6のステップと、上記第1の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第7のステップとをさらに行う構成としてもよい。
【0041】
上記の構成によれば、命令区間記憶手段にエントリとして記憶されていない命令区間を実行する際には、第1の演算手段によって通常の演算処理が行われるとともに、この演算処理時における入出力に関する情報が、命令区間記憶手段に登録されることになる。すなわち、新たな命令区間が実行される度に、命令区間記憶手段に記憶されているエントリが追加されることになり、再利用可能なエントリを増やすことができる。
【0042】
また、本発明に係るデータ処理装置は、上記の構成において、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第8のステップと、上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第9のステップとをさらに行う構成としてもよい。
【0043】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶出力アドレスが登録されている場合に、登録作業中の命令区間における主記憶入力アドレスに対応する比較要否フラグを、比較要として設定することになる。よって、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となる。
【0044】
また、本発明に係るデータ処理装置は、上記の構成において、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第10のステップと、上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第11のステップとをさらに行う構成としてもよい。
【0045】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶入力アドレスが登録されている場合に、登録作業中の命令区間における主記憶入力アドレスに対応する比較要否フラグを、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグとして設定することになる。よって、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となる。
【0046】
また、本発明に係るデータ処理装置は、上記の構成において、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第12のステップと、上記第12のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第13のステップとをさらに行う構成としてもよい。
【0047】
上記の構成によれば、新たな命令区間の登録作業中に主記憶読み出しが行われた際に、命令区間記憶手段に、同じ主記憶アドレスとなる主記憶入力アドレスが登録されている場合に、その主記憶入力アドレスに対応する比較要否フラグを、比較要として設定することになる。よって、既に命令区間記憶手段に登録されている主記憶入力アドレスに対しても、主記憶入力値の比較を行う必要のあるものに対して的確に比較要否フラグを設定することが可能となる。
【0048】
また、本発明に係るデータ処理装置は、上記の構成において、少なくとも1つの第2の演算手段をさらに備え、上記第2の演算手段が、上記第1の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録する構成としてもよい。
【0049】
上記の構成によれば、第2の演算手段によって、その時点で第1の演算手段によって処理が行われている命令列に関して、予測入力値に基づく演算が行われ、その結果が命令区間記憶手段に記憶されることになる。よって、次に、同じ命令区間が出現し、予測入力値と同じ入力が行われた場合には、命令区間記憶手段に記憶されている値を再利用することが可能となる。例えば、入力値が単調に変化するような命令区間の場合には、予測入力値が的中する可能性が高いので、上記の構成による効果は高くなる。
【0050】
また、本発明に係るデータ処理装置は、上記の構成において、上記第1の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第2の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、上記第2の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第2の演算手段に設けられたローカルメモリを用いるとともに、上記第1の演算手段が主記憶手段へ書き込みを行う場合には、対応する第2の演算手段のキャッシュラインが無効化される構成としてもよい。
【0051】
上記の構成によれば、第2の演算手段は、主記憶手段に対しては読み出しのみを行い、書き込みはできないようになっている。そして、第2の演算手段は、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第2の演算手段に設けられたローカルメモリを用いるようになっている。これにより、第1の演算手段と、第2の演算手段とで、主記憶手段に対して異なる値を書き込むことによる不具合を防止することができる。
【0052】
また、第1の演算手段が主記憶手段へ書き込みを行う場合には、対応する第2の演算手段のキャッシュラインが無効化されるので、第1の演算手段によって主記憶手段が書き換えられた場合にも、第2の演算手段が、新たに主記憶手段から値を読み出すことによって、主記憶一貫性を保つことができる。
【0053】
【発明の実施の形態】
本発明の実施の一形態について図1ないし図8に基づいて説明すれば、以下のとおりである。
【0054】
(データ処理装置の構成)
本実施形態に係るデータ処理装置の概略構成を図5に示す。同図に示すように、該データ処理装置は、MSP(Main Stream Processor)1A、SSP(Shadow Stream Processor)1B、再利用表としてのRF/RB(命令区間記憶手段)2、および主記憶(主記憶手段)3を備えた構成となっており、主記憶3に記憶されているプログラムデータなどを読み出して各種演算処理を行い、演算結果を主記憶3に書き込む処理を行うものである。なお、同図に示す構成では、SSP1Bを1つ備えた構成となっているが、2つ以上備えた構成となっていてもよい。また、同図に示す構成では、SSP1Bを備えた構成となっているが、SSP1Bを備えていない構成としてもかまわない。SSP1Bを備えた場合の作用・効果については、後述する。
【0055】
RF/RB2は、プログラムにおける関数やループなどの命令区間を再利用するためのデータを格納するメモリ手段である。このRF/RB2の詳細については後述する。
【0056】
主記憶3は、MSP1AおよびSSP1Bの作業領域としてのメモリであり、例えばRAM(Random Access Memory)などによって構成されるものである。例えばハードディスクなどの外部記憶手段や、外部のI/O(input/output)装置などの外部装置からプログラムやデータなどが主記憶3に読み出され、MSP1AおよびSSP1Bは、主記憶3に読み出されたデータに基づいて演算を行うことになる。また、MSP1Aによる演算結果が主記憶3に書き込まれ、この演算結果が上記外部装置に送出されることになる。
【0057】
MSP1Aは、再利用記憶手段としてのRW4A、演算器(第1の演算手段)5A、レジスタ6A、およびCache7Aを備えた構成となっている。また、SSP1Bは、同様に、再利用記憶手段としてのRW4B、演算器(第2の演算手段)5B、レジスタ6B、およびCache/Local7Bを備えた構成となっている。
【0058】
RW4A・4Bは、再利用ウィンドウであり、現在実行中かつ登録中であるRFおよびRB(後述する)の各エントリをリング構造のスタックとして保持するものである。このRW4A・4Bは、実際のハードウェア構造としては、RF/RB2における特定のエントリをアクティブにする制御線の集合によって構成される。
【0059】
演算器5A・5Bは、レジスタ6A・6Bに保持されているデータに基づいて演算処理を行うものであり、ALU(arithmetic and logical unit)と呼ばれるものである。レジスタ6A・6Bは、演算器5A・5Bによって演算を行うためのデータを保持する記憶手段である。なお、本実施形態では、演算器5A・5B、およびレジスタ6A・6Bは、SPARC(商標)アーキテクチャに準じたものとする。Cache7A・7Bは、主記憶3と、MSP1AおよびSSP1Bとの間でのキャッシュメモリとして機能するものである。なお、SSP1Bでは、Cache7Bには、局所メモリとしてのLocal7Bが含まれているものとする。
【0060】
(RF/RBの構成)
図1は、本実施形態におけるRF/RB2によって実現される再利用表を示している。同図に示すように、RFは、エントリが有効であるか否かを示す状態表示フラグV、エントリ入れ替えのヒントを示すLRU、関数とループとを区別するF/L、命令区間の先頭アドレスを示すStart、命令区間の終了アドレスを示すEnd、参照すべき主記憶入力アドレスに関する情報を示すRead、および、参照すべき主記憶出力アドレスに関する情報を示すWriteを保持している。
【0061】
RFにおけるReadには、#1〜#nまでの複数の列が設けられており、各列ごとに、主記憶入力アドレスRA、有効フラグR1、および、比較要否フラグCが記録されている。また、RFにおけるWriteには、#1〜#nまでの複数の列が設けられており、各列ごとに、主記憶出力アドレスWA、および有効フラグW1が記録されている。
【0062】
また、RBは、エントリが有効であるか否かを示す状態表示フラグV、エントリ入れ替えのヒントを示すLRU、命令区間を呼び出す際の直前のスタックポイント%spを示すSP、ループの終了アドレス(End)、ループ終了時の分岐方向を示すtaken/not、レジスタ入力値としての引数(Args.)(V:有効エントリ、Val.:値)および引数以外のレジスタ入力値および条件コード(Regs.,CC)、主記憶入力有効バイトRM、主記憶入力値RV、主記憶出力有効バイトWM、主記憶出力値WV、および、レジスタ出力値としての返り値Return Valuesおよび返り値以外のレジスタ出力値および条件コードRegs.,CC(V:有効エントリ、Val.:値)を保持している。
【0063】
上記のRFおよびRBにおける各項目についてより詳細に説明する。上記状態表示フラグVは、上記のようにエントリが有効であるか否かを示すものであるが、具体的には、未登録時には「0」、登録中である場合には「2」、登録済である場合には「1」の値が格納されるようになっている。例えば、RFまたはRBを確保する際に、未登録エントリ(V=0)があれば、これを使用し、未登録エントリがなければ、登録済エントリ(V=1)の中からLRUが最小のものを選択して上書きすることになる。登録中エントリ(V=2)は使用中であるので上書きすることはできない。
【0064】
上記LRUは、一定時間間隔で右へシフトされていくシフトレジスタの中の「1」の個数を示したものである。RFの場合、このシフトレジスタは、該当エントリに関して、再利用のための登録を行ったか、もしくは再利用を試みた場合に、左端に「1」が書き込まれるようになっている。したがって、該当エントリが頻繁に使用されれば、LRUは大きな値となり、一定期間使用されなければ、LRUの値は0となる。一方、RBの場合、シフトレジスタには、該当エントリが再利用された場合に「1」が書き込まれるようになっている。したがって、該当エントリが頻繁に使用されれば、LRUは大きな値となり、一定期間使用されなければ、LRUの値は0となる。
【0065】
上記RBにおける主記憶入力有効バイトRMおよび主記憶出力有効バイトWMについて説明する。一般に、アドレスとデータとを1バイトずつ管理することにすれば管理が可能であるが、実際には、4バイト単位でデータを管理する方がキャッシュ参照を高速に行うことができる。そこで、RFでは、主記憶アドレスを4の倍数で記憶するようになっている。一方、管理単位を4バイトとする場合、1バイト分だけをロードすることに対応できるようにするために、4バイトのうちでどのバイトが有効であるかを示す必要がある。すなわち、主記憶入力有効バイトRMおよび主記憶出力有効バイトWMは、4バイトのうちでどのバイトが有効であるかを示す4ビットのデータとなっている。例えば、C001番地から1バイト分をロードした結果、値がE8であった場合、RFにおける主記憶入力アドレスRAにアドレスC000が登録され、RBの主記憶入力有効バイトRMに「0100」、主記憶入力値RVに「00E80000」が登録されることになる。
【0066】
以上のように、RF/RB2において、主記憶入力アドレスRAおよび主記憶出力アドレスRBはRFが一括管理し、主記憶入力有効バイトRM、主記憶入力値RV、ならびに、主記憶出力有効バイトWM、主記憶出力値WVはRBが管理している。これにより、Readアドレスの内容とRBの複数エントリをCAM(content-addressable memory)によって一度に比較する構成を可能としている。このことについて、以下により詳しく説明する。
【0067】
一般的に、アドレスが与えられると、そのアドレスに格納された値を参照することができるメモリは、RAMと呼ばれるメモリである。一方、上記のCAMとは、連想メモリと呼ばれるメモリであり、検索すべき内容が与えられると、そのエントリに対応する信号がONとなるように動作するようになっている。通常は、CAMはRAMとセットにして用いられる。
【0068】
ここで、CAMとRAMとの連携動作について、具体例を挙げて説明する。CAMに、「5,5,5,5,5」、「1,3,1,1,1」、「1,3,3,5,2」、「6,6,6,6,6」というデータ列がエントリとして登録されており、RAMに、CAMにおける各データ列に対応して、「5,5」、「1,1」、「1,2」、「6,6」というデータが登録されているとする。ここで、検索すべきデータ列として、「1,3,3,5,2」をCAMに入力すると、一致するエントリがONとなり、RAMに登録されている該当するデータ「1,2」が出力されることになる。この具体例と同様の構成および動作によって、上記RF/RB2が実現されることになる。
【0069】
次に、RFのReadにおける有効フラグR1、比較要否フラグC、ならびにWriteにおける有効フラグW1について説明する。有効フラグR1は、その列の主記憶入力アドレスRAに対応する、RBにおける主記憶入力有効バイトRMの中に、有効バイトがセットされているものがあるか否かを示すフラグである。同様に、有効フラグW1は、その列の主記憶出力アドレスWAに対応する、RBにおける主記憶出力有効バイトWMの中に、有効バイトがセットされているものがあるか否かを示すフラグである。この有効フラグR1・W1は、有効バイトがセットされているものがある場合には「1」、ない場合には「0」の値がセットされる。
【0070】
比較要否フラグCは、ある命令区間に対して再利用を行う際に、その列の主記憶入力アドレスRAに対応する主記憶入力値RVと、該命令区間における主記憶入力アドレスから読み出した主記憶値とを比較する必要があるか否かを示すフラグである。この比較要否フラグCは、比較の必要がある場合には「1」、ない場合には「0」の値がセットされる。なお、比較要否フラグCの設定基準については後述する。
【0071】
次に、上記の引数や返り値以外のレジスタおよび条件コード(Regs.,CC)について説明する。本実施形態では、SPARCアーキテクチャレジスタのうち、汎用レジスタ%g0-7、%o0-7、%l0-7、%i0-7、浮動小数点レジスタ%f0-31、条件コードレジスタICC、浮動小数点条件コードレジスタFCCを用いるようになっている(詳細は後述する)。このうち、リーフ関数の入力は汎用レジスタ%o0-5、出力は汎用レジスタ%o0-1、また、非リーフ関数の入力は汎用レジスタ%i0-5、出力は汎用レジスタ%i0-1、になり、入力は、arg[0-5]、出力は、rti[0-1]に登録される。SPARC−ABIの規定では、これら以外のレジスタは関数の入出力にはならないので、関数に関してはRBにおける引数(Args.)の項で十分である。
【0072】
一方、SPARC−ABIの規定では、ループの入出力に関しては、用いられるレジスタの種類を特定することはできないので、ループの入出力を特定するには、全ての種類のレジスタに関してRBに登録する必要がある。よって、RBにおけるRegs.,CCには、%g0-7、%o0-7、%l0-7、%i0-7、%f0-31、ICC、FCCが登録されるようになっている。
【0073】
(再利用処理の概略)
次に、命令区間としての関数およびループのそれぞれの場合について、再利用処理の概略について説明する。
【0074】
まず、関数の場合について説明する。関数から復帰するまでに次の関数を呼び出した場合、または、登録すべき入出力が再利用表の容量を超える、引数の第7ワードを検出する、途中でシステムコールや割り込みが発生する、などの擾乱が発生しなかった場合、復帰命令を実行した時点で、登録中の入出力表エントリを有効にする。
【0075】
以降、図1を参照しながら説明すると、関数を呼び出す前に、▲1▼RFに登録されている関数のエントリの先頭アドレスStartに、該当関数の先頭アドレスと一致するものがあるかを検索する。一致するものがある場合には、▲2▼RBに登録されている該当エントリのうち、有効エントリを示す状態表示フラグVが登録済状態にセットされているエントリであって、かつ、該エントリにおける引数args.が、呼び出す関数の引数と完全に一致するエントリを選択する。そして、選択したエントリにおいて、▲3▼有効フラグR1が「1」にセットされており、かつ、比較要否フラグCが「0」にセットされている場合には、主記憶入力値の比較を行うことなく、▲5▼RBに記憶されているReturn Valuesをレジスタに書き込み、主記憶出力アドレスWAに対して、順次、各有効フラグWMがセットされている主記憶出力値WVを書き込む。
【0076】
一方、選択したエントリにおいて、▲3▼有効フラグR1が「1」にセットされており、かつ、比較要否フラグCが「1」にセットされている場合には、▲4▼該当関数の主記憶入力値と、RBに登録されている主記憶入力値RVとの比較を行い、これらが一致する場合に、▲5▼RBに記憶されているReturn Valuesをレジスタに書き込み、主記憶出力アドレスWAに対して、順次、各有効フラグWMがセットされている主記憶出力値WVを書き込む。以上により、関数の再利用が実現されることになる。
【0077】
次に、ループの場合について説明する。ループが完了する以前に関数から復帰したり、前記した擾乱が発生したりするなど、ループの入出力登録が中止されなければ、登録中のループに対応する後方分岐命令を検出した時点で、登録中の入出力表エントリを有効にし、そのループの登録を完了する。
【0078】
さらに、後方分岐命令が成立する場合は、次のループが再利用可能かどうかを判断する。すなわち、図1を参照しながら説明すると、後方分岐する前に、▲1▼RFに登録されているループのエントリの先頭アドレスStartに、該当ループの先頭アドレスと一致するものがあるかを検索する。一致するものがある場合には、▲2▼RBに登録されている該当エントリのうち、有効エントリを示す状態表示フラグVが登録済状態にセットされているエントリであって、かつ、該エントリにおけるレジスタ入力値が、呼び出すループのレジスタ入力値と完全に一致するエントリを選択する。そして、選択したエントリにおいて、▲3▼有効フラグR1が「1」にセットされており、かつ、比較要否フラグCが「0」にセットされている場合には、主記憶入力値の比較を行うことなく、▲5▼RBに記憶されているReturn Valuesをレジスタに書き込み、主記憶出力アドレスWAに対して、順次、各有効フラグWMがセットされている主記憶出力値WVを書き込む。
【0079】
一方、選択したエントリにおいて、▲3▼有効フラグR1が「1」にセットされており、かつ、比較要否フラグCが「1」にセットされている場合には、▲4▼該当ループの主記憶入力値と、RBに登録されている主記憶入力値RVとの比較を行い、これらが一致する場合に、▲5▼RBに記憶されているReturn Valuesをレジスタに書き込み、主記憶出力アドレスWAに対して、順次、各有効フラグWMがセットされている主記憶出力値WVを書き込む。以上により、ループの再利用が実現されることになる。
【0080】
なお、ループの再利用が行われた場合、RBに登録されている分岐方向に基づいて、さらに次のループに関して同様の処理を繰り返す。一方、次のループが再利用不可能であれば、次のループを通常に実行し、RFおよびRBへの登録を開始する。
【0081】
(ループを含む多重再利用)
1レベルで上記のような再利用機構を用いた場合、図9(a)に示した例で言えば、リーフ関数としての関数Bや、関数Bの内部にあるループCなどをそれぞれ再利用することが可能となる。これに対して、ある関数を一度実行しただけで、その関数の内部に含まれる関数やループを含む全ての命令区間が再利用可能となるように登録を行う仕組みが多重再利用である。例えば上記の例で言えば、多重再利用によれば、関数Aを一度実行しただけで、入れ子関係にあるA,B,Cの全ての命令区間が再利用可能となる。以下に、多重再利用を実現する上で必要とされる機能拡張について説明する。
【0082】
図8に、一例として、関数Aおよび関数Dの概念的な構造を示す。同図に示す例では、関数Aの内部にループBが存在しており、ループBの内部にループCが存在しており、ループCにおいて関数Dが呼び出されるようになっている。そして、関数Dの内部にループEが存在しており、ループEの内部にループFが存在している。
【0083】
図3は、図8に示す関数A,DおよびループB,C,E,Fの入れ子構造において、内側の構造のレジスタ入出力(太枠セル領域)が、外側の構造のレジスタ入出力となる影響範囲(矢印)について示している。例えば、ループFの内部において入力として参照された%i0〜5は、ループEおよび関数Dに対する入力でもあり、さらに、関数Dを呼び出したループCおよびループBに対する入力(ただし%o0〜5に読み替える)でもある。一方、関数Aにとって%o0〜5は局所変数に相当するので、%i0〜5(%o0〜5)は、関数Aに対してのレジスタ入力とはならない。すなわち、%i0〜5(%o0〜5)の影響範囲はループBまでとなる。別の見方をすれば、関数Dの内部で%i0〜5が参照された場合には、ループBが直接的に%o0〜5を参照しなくても、%o0〜5をループBの入力値として登録する必要がある。ループF内部において出力された%i0〜1についても同様である。
【0084】
浮動小数点レジスタはレジスタウィンドウに含まれないので、出力された%f0〜1は、関数Aを含む全階層の出力となる。一方、その他のレジスタ入出力は、関数を超えて影響がおよぶことはない。すなわち、ループF内部における入出力、すなわち、レジスタ入力としての%i6〜7、%g,l,o、%f0〜31、%icc、%fcc、およびレジスタ出力としての%I2〜7、%g,l,o、%f2〜31、%icc、%fccの影響範囲はループEまでとなる。主記憶に対する入出力については、前述した、関数呼び出し直前の%sp(SP)と比較する方法を入れ子の全階層に対して適用することにより、影響範囲を特定することができる。
【0085】
以上のことから、多重再利用を実現するには、前述したRFおよびRBを関数やループの入れ子構造と関連づける機構が必要である。図4に示すように、再利用ウィンドウ(RW)を装備することによって、現在実行中かつ登録中であるRFおよびRBの各エントリ(図中ではA、B、Cと示す)をスタック構造として保持する。関数やループの実行中は、RWに登録されている全てのエントリについて、これまでに述べた方法に基づいて、レジスタおよび主記憶参照を登録していく。
【0086】
この際に、あるエントリに関して、(1)登録可能項目数の超過、(2)引数の第7ワードの検出、(3)システムコールの検出、によって再利用不可能であると判断した場合には、RWを用いて、そのエントリに対応するRBおよび上位のRBを特定し、登録を中止することができる。
【0087】
なお、RWの深さは有限であるものの、一度に登録可能な多重度を超えて関数やループを検出した場合には、外側の命令区間から順次登録を中止し、より内側の命令区間を登録対象に加えることによって、入れ子関係の動的変化に追随することができる。また、実行および登録中(例えばA)に、再利用可能な命令区間(例えばD)に遭遇した場合には、登録済の入出力をそのまま登録中エントリに追加することによって、RWの深さを超えるAの多重再利用も可能となる。
【0088】
(並列事前実行)
以上に述べた、関数やループの多重再利用では、RBエントリの生存時間よりも同一パラメータが出現する間隔が長い場合や、パラメータが単調に変化し続ける場合には全く効果がないことになる。すなわち、RBエントリの生存時間よりも同一パラメータが出現する間隔が長い場合には、ある関数またはループがRBに登録されたとしても、その登録された関数またはループに関して同一パラメータが次に出現した際には、すでにその関数またはループがRBエントリから消えていることになり、再利用できないことになる。また、パラメータが単調に変化し続ける場合には、該当する関数やループがRBに登録されていても、パラメータが異なることによって再利用できないことになる。
【0089】
これに対して、多重再利用を行うプロセッサとしてのMSP1Aとは別に、命令区間の事前実行によってRBエントリを有効にするプロセッサとしてのSSP1Bを複数個設けることによって、さらなる高速化を図ることができる。
【0090】
並列事前実行機構を行うためのハードウェア構成は、前記した図5に示すような構成となる。同図に示すように、RW4A・4B、演算器5A・5B、レジスタ6A・6B、キャッシュ7A・7Bは、各プロセッサごとに独立して設けられている一方、RF/RB2、および主記憶3は全てのプロセッサが共有するようになっている。同図において、破線は、MSP1AおよびSSP1BがRF/RB2に対して入出力を登録するパスを示している。
【0091】
ここで、並列事前実行を実現する上での課題は、(1)どのように主記憶一貫性を保つか、(2)どのように入力を予測するか、(3)どのようにRBエントリを入れ替えるか、(4)どの命令区間を実行するか、の4点が挙げられる。以下に、これらの課題に対する解決手法について説明する。
【0092】
(主記憶一貫性に関する課題の解決方法)
まず、上記の課題(1)どのように主記憶一貫性を保つかについて説明する。特に予測した入力パラメータに基づいて命令区間を実行する場合、主記憶に書き込む値がMSP1AとSSP1Bとで異なることになる。これを解決するために、図5に示すように、SSP1Bは、RBへの登録対象となる主記憶参照にはRF/RB2、また、その他の局所的な参照にはSSP1Bごとに設けた局所メモリとしてのLocal7Bを使用することとし、Cache7Bおよび主記憶3への書き込みを不要としている。なお、MSP1Aが主記憶3に対して書き込みを行った場合には、対応するSSP1Bのキャッシュラインが無効化される。
【0093】
具体的には、RBへの登録対象のうち、読み出しが先行するアドレスについては主記憶3を参照し、MSP1Aと同様にアドレスおよび値をRBへ登録する。以後、主記憶3ではなくRBを参照することによって、他のプロセッサからの上書きによる矛盾の発生を避けることができる。局所的な参照については、読み出しが先行するということは、変数を初期化せずに使うことに相当し、値は不定でよいことになるので、主記憶3を参照する必要はない。
【0094】
なお、局所メモリとしてのLocal7Bの容量は有限であり、関数フレームの大きさがLocal7Bの容量を超えた場合など、実行を継続できない場合は、事前実行を打ち切るようにする。また、事前実行の結果は主記憶3に書き込まれないので、事前実行結果を使って、さらに次の事前実行を行うことはできない。
【0095】
(入力の予測方法)
次に、上記の課題(2)どのように入力を予測するかについて説明する。事前実行に際しては、RBの使用履歴に基づいて将来の入力を予測し、SSP1Bへ渡す必要がある。このために、RFの各エントリごとに小さなプロセッサを設け、MSP1AやSSP1Bとは独立して入力予測値を求めるようにする。
【0096】
具体的には、最後に出現した引数(B)および最近出現した2組の引数の差分(D)に基づいて、ストライド予測を行う。なお、B+Dに基づく命令区間の実行はMSP1Aがすでに開始していると考える。SSP1BがN台の場合には、用意する入力予測値は、B+D×2からB+D×(N+1)までの範囲とする。
【0097】
以上のように入力予測を行えば、上記した入力パラメータが単調に変化し続けるような場合に、事前に予測しておいた結果に基づいて効果的に再利用を行うことが可能となる。
【0098】
(RBエントリ入れ替え方法)
次に、上記の課題(3)どのようにRBエントリを入れ替えるかについて説明する。各RFエントリが1つの命令区間に対応し、入力と出力との対応関係がRBに登録される際に、MSP1AとSSP1BとがRBエントリをどのように使い分けるかが課題となる。命令区間は、大きく分けると、MSP1Aのみでも再利用の効果があるものと、配列を扱うループのようにMSP1Aのみでは効果がないものとに分けられると考えられる。前者であれば、LRU(least recently used)による入れ替え、後者であれば、FIFO(First In First Out)による入れ替えが有効である。
【0099】
しかしながら、ある命令区間の性質がいずれであるかを動的かつ直ちに判断することは難しいので、個々のRFに属するRBエントリをMSP1A用とSSP1B用とに分割し、MSP1A用のRBエントリをLRUによって、SSP1B用のRBエントリをFIFOによって入れ替えるようにする。前述したように、入力予測値はN組であり、SSPが登録後、MSPが直ちに利用することを想定して、SSP用に割り当てるエントリ数はN×2としておく。この様子を図6に示す。
【0100】
(命令区間の選択)
次に、上記の課題(4)どの命令区間を実行するかについて説明する。事前実行は、前記したように、同一パラメータが出現する間隔が長い命令区間や、パラメータが単調に変化し続ける命令区間に対して効果があることが予想される。しかしながら、それぞれの命令区間の性質や実際の効果の有無は、事前に認識することはできない。そこで、RFに新規に登録された命令区間については、直ちにSSP1Bによる数回分の事前実行を試みるようにする。そして、数回の試行の結果、MSP1Aによる登録頻度が高く、かつ、SSP1Bが登録したエントリの再利用頻度も高いRFを継続してSSP1Bの実行対象とする。
【0101】
具体的には、動的に変化する登録頻度や再利用頻度を把握するために、RFにおける各エントリごとに、一定期間における登録および再利用の状況をシフトレジスタに記録する。RFごとに付加した小さなプロセッサが、E=(過去の削減ステップ数)×(登録回数)×(再利用回数)を計算し、各SSPが、Eが最大となるRFを選択する。この様子を図7に示す。以下に、このことについてより詳しく説明する。
【0102】
事前実行するかどうかを判断する際に利用できる統計情報としては、(a)再利用によって削減可能なステップ数、(b)MSP1Aが、やむをえず実行し登録した頻度、(c)MSP1Aが、SSP1Bの登録結果を再利用できた頻度、(d)MSP1Aが、MSP1Aの登録結果を再利用できた頻度、が挙げられる。これらから、次にどの命令区間を事前実行すれば最大の効果が期待できるかを考える。
【0103】
まず、上記(d)MSP1Aが、MSP1Aの登録結果を再利用できた頻度に関しては、SSP1Bによる事前実行とは無関係であるので、考慮する必要はないことがわかる。
【0104】
上記(a)、(b)および(c)に関しては、自項目以外の項目が同じであるならば、それぞれ値が大きいほど効果を期待できることになる。また、それぞれの項目において、値が0であれば、効果を期待できないことになる。以上より、前記した式E=(過去の削減ステップ数)×(登録回数)×(再利用回数)によって期待値を算出している。
【0105】
(比較要否フラグの設定処理の概要)
次に、上記した比較要否フラグCの設定をどのような判断で行うかについて説明する。まず、データ処理装置が、SSP1Bを備えずに、MSP1Aのみを備えた構成である場合について説明する。この構成の場合、ある命令区間に関して主記憶からの読み出しを再利用表に登録した後に、該読み出しアドレスの内容が変更されなければ、該命令区間の再利用を行う際に主記憶入力値の比較を行う必要はないことになる。一方、該読み出しアドレスの内容が変更された場合には、該命令区間の再利用を行う際に主記憶入力値の比較を行う必要があることになる。
【0106】
したがって、比較要否フラグCは、主記憶入力アドレスに対して書き込みが行われるまでの間は、比較の必要がないことを示す「0」の値をセットする一方、該主記憶入力アドレスに対して書き込みが行われた後は、比較の必要があることを示す「1」の値をセットすればよいことになる。なお、主記憶入力アドレスに対して書き込みが行われる場合の具体例については後述する。
【0107】
一方、MSP1AとSSP1Bとを備えたデータ処理装置の場合は次のようになる。SSP1Bは、上記したように、命令区間のレジスタ入力値を予測し、予測した入力に基づいて該命令区間のみを実行する。SSP1Bは予測した入力に対する出力を計算し、この事前に予測した入出力をRF/RB2に登録する。MSP1Aは、命令区間を実行する際に、該命令区間がSSP1Bによって予測されたものである場合には、SSP1Bによって登録された入出力を用いて再利用を行う。
【0108】
ここで、MSP1Aは、主記憶3に対する読み出しおよび書き込みが可能なCache7Aを備える一方、SSP1Bは、主記憶3からの読み出しのみ可能なCache/Local7Bを備えている。そして、SSP1Bは、入出力登録対象となる主記憶参照をする際にはRF/RB2そのものを用い、その他の局所的な参照をする際には、SSP1Bごとに設けられたCache/Local7Bを用いる。一方、MSP1Aによって主記憶3への書き込みが行われた場合には、対応するSSP1Bのキャッシュラインが無効化される。
【0109】
この場合、SSP1Bが生成した入出力記録における、主記憶入力アドレスRAのうち、MSP1Aが比較を行う必要のない主記憶入力アドレスRAに付随する比較要否フラグCを、比較の必要がないことを示す「0」の値をセットする一方、MSP1Aが比較を行う必要がある場合には、比較の必要があることを示す「1」の値をセットすればよいことになる。
【0110】
ここで、MSP1Aが比較を行う必要がある主記憶入力アドレスRAとは、SSP1Bが主記憶3や、MSP1AにおけるCache7Aの内容と異なる値を主記憶入力値として使用し、RF/RB2に登録を行ったものとなる。
【0111】
このような主記憶入力アドレスRAには、次の3つのパターンがある。▲1▼第1のパターンとしては、SSP1BがRF/RB2に主記憶出力アドレスWAおよび主記憶出力値WVを書き込んだ後に、SSP1Bが、入れ子関係にある別の命令区間に対応するRF/RB2に対して該主記憶出力アドレスWAと同じ主記憶入力アドレスRAを登録するに至った場合の該主記憶入力アドレスRAである。▲2▼第2のパターンとしては、SSP1BがRF/RB2に主記憶入力アドレスRAおよび主記憶入力値RVを登録した後に、SSP1Bが、入れ子関係にある別の命令区間に対応するRF/RB2に対して、同じ主記憶入力アドレスRAを登録するに至った場合の該主記憶入力アドレスRAである。▲3▼第3のパターンとしては、SSP1BがCacheから読み出してRF/RB2に主記憶入力アドレスRAとして登録した後に、MSP1Aまたはその他の装置によって主記憶3の内容が変更された場合の該主記憶入力アドレスRAである。
【0112】
上記▲1▼のパターンは次のようにして検出することができる。すなわち、ある命令区間に対応するRF/RB2に対して主記憶入力アドレスRAおよび主記憶入力値RVを登録する際に、入れ子関係にある別の命令区間に対応するRF/RB2に、該主記憶入力アドレスRAと同じ主記憶出力アドレスWAが登録されているか否かを検査すればよい。ここで登録されていると判定された場合に、該主記憶入力アドレスRAに付随する比較要否フラグCを「1」にセットする。
【0113】
上記▲2▼のパターンは次のようにして検出することができる。すなわち、ある命令区間に対応するRF/RB2に対して主記憶入力アドレスRAおよび主記憶入力値RVを登録する際に、入れ子関係にある別の命令区間に対応するRF/RB2に、同じ主記憶入力アドレスRAが登録されているか否かを検査すればよい。ここで登録されていると判定された場合に、該主記憶入力アドレスRAに付随する比較要否フラグCを、既に登録されている主記憶入力アドレスRAに対応する比較要否フラグと同じフラグをセットする。
【0114】
なお、上記▲1▼のパターンおよび▲2▼のパターンに対しての処理の詳細および具体例については、後述する(複数の命令区間を並行して登録する際の処理)において説明する。
【0115】
上記▲3▼のパターンは次のようにして検出することができる。すなわち、MSP1Aまたはその他の装置によって主記憶3の内容が変更された際には、対応するSSP1Bのキャッシュラインが無効化されるとともに、RF/RB2に登録されている全ての命令区間に対応する主記憶入力アドレスRAに付随する比較要否フラグCを「1」にセットする。なお、この処理の詳細および具体例については、後述する(主記憶変更時の処理)において説明する。
【0116】
(複数の命令区間を並行して登録する際の処理)
次に、図2(a)および図2(b)を参照しながら、ある命令区間をRF/RB2に登録している最中に、別の命令区間のRF/RB2に対する登録処理を行う場合の処理について説明する。このように、複数の命令区間を並行してRF/RB2に登録する際には、それぞれの命令区間に対応させて複数のRBを設けるようにする。図2(a)は、既に登録作業中に設定されている命令区間に対応するRFおよびRB001の状態を示しており、図2(b)は、新たに登録作業を行う命令区間に対応するRFおよびRB002の状態を示している。
【0117】
新たな命令区間の登録作業を開始する際には、該命令区間を登録するRFおよびRBにおいて、まず、該命令区間を登録するRFおよびRBにおける状態表示フラグVを登録作業中状態にセットする。そして、各列の主記憶入力アドレスRAに対応する有効フラグR1、および比較要否フラグCをそれぞれ「0」にセットする。また、各列の主記憶出力アドレスWAに対応する有効フラグW1を「0」にセットする。このようなイニシャライズ処理により、以前に登録されていた内容の影響をリセットすることができる。なお、このイニシャライズ処理は、複数の命令区間を並行して登録する場合に限らず、単一の命令区間を登録する際にも行われるものである。
【0118】
次に、新たな命令区間の登録作業中に、該命令区間の主記憶読み出しを行う際の処理について説明する。ここで、新たな命令区間を、図2(b)に示すRB002のエントリである行のL002に登録するものとし、このL002における状態表示フラグVが登録作業中状態にセットされているものとする。
【0119】
まず、再利用表に登録されている全てのエントリにおいて、状態表示フラグVが登録作業中状態となっているエントリが抽出される。抽出されたエントリにおいて、主記憶出力アドレスWA001が、上記命令区間の主記憶読み出しアドレスと一致し、かつ、対応する有効バイトを示すマスクWM001に値がセットされているものがあるか否かが判定される。
【0120】
ここで、主記憶読み出しアドレスが一致し、WM001に値がセットされていると判定された場合、対応する主記憶出力値WV001が取り出されるとともに、該エントリに対する比較必要フラグWH001が「1」の値にセットされる。一方、主記憶読み出しアドレスが一致しない、または、WM001に値がセットされていないと判定された場合、該エントリに対する比較必要フラグWH001が「0」の値にセットされる。
【0121】
すなわち、比較必要フラグWH001が「1」の値にセットされるということは、SSP1BがRF/RB2に主記憶出力アドレスWAおよび主記憶出力値WVを書き込んだ後に、SSP1Bが、入れ子関係にある別の命令区間に対応するRF/RB2に対して該主記憶出力アドレスWAと同じ主記憶入力アドレスRAを登録するに至った場合の該主記憶入力アドレスRAを検出した、ということになる。
【0122】
次に、登録作業中状態となっているエントリにおいて、主記憶入力アドレスRA001が、上記命令区間の主記憶読み出しアドレスと一致し、かつ、対応する有効バイトを示すマスクRM001に値がセットされているものがあるか否かが判定される。
【0123】
ここで、主記憶読み出しアドレスが一致し、RM001に値がセットされていると判定された場合、対応する主記憶入力値RV001が取り出されるとともに、対応する比較要否フラグC001の値が比較必要フラグRH001として設定される。一方、主記憶読み出しアドレスが一致しない、または、RM001に値がセットされていないと判定された場合、該エントリに対する比較必要フラグRH001が「0」の値にセットされる。
【0124】
すなわち、比較必要フラグRH001が「1」の値にセットされるということは、SSP1BがRF/RB2に主記憶入力アドレスRAおよび主記憶入力値RVを登録した後に、SSP1Bが、入れ子関係にある別の命令区間に対応するRF/RB2に対して、同じ主記憶入力アドレスRAを登録するに至った場合の該主記憶入力アドレスRAを検出した、ということになる。
【0125】
次に、上記命令区間の主記憶読み出しアドレスから主記憶データMV001が読み出される。そして、このMV001に基づいて、次のような処理によって、上記命令区間の主記憶読み出し値としてのREAD1が設定される。
【0126】
まず、WV001の値に対して、WM001によってマスクされた値を、WS001として設定する。例えば、WM001が「0100」であり、WV001が「001200F4」である場合には、WS001には「00120000」という値が設定される。
【0127】
次に、RM001からWM001を除いた値をHM001として設定する。そして、RV001の値に対して、HM001によってマスクされた値を、RS001として設定する。なお、RM001からWM001を除いた値というのは、実際には、RM001において「1」が立っている箇所のうち、WM001において「1」が立っている箇所と同じものについては、これを「0」に設定する、ということになる。例えばRM001が「0110」であり、WM001が「0100」であり、RV001が「521E1005」である場合には、HM001が「0010」となり、RS001は「00001000」となる。
【0128】
次に、全ての箇所が「1」に設定されているマスクとしてのALL1から、RM001およびWM001を除いた値をMM001として設定する。そして、上記命令区間の主記憶読み出しアドレスから読み出された主記憶データMV001の値に対して、MM001によってマスクされた値を、MS001として設定する。例えば、RM001が「0110」であり、WM001が「0100」であり、MV001が「88155217」である場合には、MM001が「1001」となり、MS001は「88000017」となる。
【0129】
以上の準備の後、主記憶読み出し値READ1は、WS001、RS001、およびMS001の論理和によって設定される。すなわち、上記の例で言えば、WS001が「00120000」であり、RS001が「00001000」であり、MS001が「88000017」であるので、READ1は、「88121017」となる。
【0130】
以上のようにしてREAD1が求められると、このREAD1の値が、上記命令区間の主記憶入力値RV002として登録される。一方、上記命令区間の主記憶入力有効バイトRM002には、上記のMM001の値が登録される。
【0131】
また、上記命令区間が登録されたRB002における列に対応する比較要否フラグC002は、上記WH001と上記RH001との論理和によって設定される。すなわち、WH001とRH001との少なくともどちらか一方が「1」に設定されている場合には、C002は「1」に設定されることになる。
【0132】
(主記憶変更時の処理)
次に、RF/RB2に1つ以上の命令区間に関する内容が登録されている状態で、データ処理装置が何らかの処理を行った結果、主記憶3の内容を変更するような書き込み処理が行われた場合の処理について説明する。
【0133】
まず、ある命令区間をRF/RB2に登録中に、主記憶書き込みが行われる場合の処理について説明する。まず、再利用表に登録されている全てのエントリの中から、主記憶書き込みが行われる主記憶書き込みアドレスと一致する主記憶入力アドレスRAが設定されているエントリが抽出される。そして、抽出されたエントリにおいて、該当する主記憶入力アドレスRAに対応する比較要否フラグCの値を「1」にセットする。その後、上記の主記憶書き込み内容に応じて、登録中の命令区間に対応する主記憶出力値WVと主記憶出力有効バイトWMとが設定されることになる。
【0134】
次に、MSP1Aによって演算処理が行われた結果、主記憶3に対する書き込みが行われる場合、および、上記した外部記憶手段やI/O装置などの外部装置によって、主記憶3に対する書き込みが行われる場合の処理について説明する。まず、再利用表に登録されている全てのエントリの中から、主記憶書き込みが行われる主記憶書き込みアドレスと一致する主記憶入力アドレスRAが設定されているエントリが抽出される。そして、抽出されたエントリにおいて、該当する主記憶入力アドレスRAに対応する比較要否フラグCの値を「1」にセットする。
【0135】
【発明の効果】
以上のように、本発明に係るデータ処理装置は、上記主記憶手段から読み出した命令区間に基づく演算を行う第1の演算手段と、上記第1の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、1つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、上記第1の演算手段が、命令区間を実行する際に、レジスタ入力値を取得する第1のステップと、上記命令区間記憶手段に記憶されているエントリの中から、上記第1のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第2のステップと、上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第3のステップと、上記第3ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第4のステップとを行う構成である。
【0136】
これにより、命令区間記憶手段における各エントリに比較要否フラグが設定されており、この比較要否フラグが「否」と設定されていれば、主記憶入力値の比較を省略することが可能となっている。したがって、再利用による高速化の効果を促進することが可能となるという効果を奏する。
【0137】
また、本発明に係るデータ処理装置は、上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、上記第1の演算手段が、上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第5のステップをさらに行い、上記第3ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第5ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較する構成としてもよい。
【0138】
これにより、上記の構成による効果に加えて、有効な主記憶入力値が登録されていないにも拘らず、主記憶手段に対するアクセスが行われることを防止することが可能となるので、処理の高速化の効果をさらに促進することができるという効果を奏する。
【0139】
また、本発明に係るデータ処理装置は、上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされる構成としてもよい。
【0140】
これにより、上記の構成による効果に加えて、命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合には、該主記憶入力アドレスに対応する比較要否フラグが、主記憶入力値の比較が必要であることを示す状態にセットされることになる。よって、主記憶入力値の比較を必要時にのみ的確に行うことが可能となるという効果を奏する。
【0141】
また、本発明に係るデータ処理装置は、上記第1の演算手段が、主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第6のステップと、上記第1の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第7のステップとをさらに行う構成としてもよい。
【0142】
これにより、上記の構成による効果に加えて、新たな命令区間が実行される度に、命令区間記憶手段に記憶されているエントリが追加されることになり、再利用可能なエントリを増やすことができるという効果を奏する。
【0143】
また、本発明に係るデータ処理装置は、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第8のステップと、上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第9のステップとをさらに行う構成としてもよい。
【0144】
これにより、上記の構成による効果に加えて、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となるという効果を奏する。
【0145】
また、本発明に係るデータ処理装置は、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第10のステップと、上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第11のステップとをさらに行う構成としてもよい。
【0146】
これにより、上記の構成による効果に加えて、主記憶入力値の比較を行う必要のある主記憶入力アドレスを的確に設定することが可能となるという効果を奏する。
【0147】
また、本発明に係るデータ処理装置は、上記第1の演算手段が、上記第7のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第12のステップと、上記第12のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第13のステップとをさらに行う構成としてもよい。
【0148】
これにより、上記の構成による効果に加えて、既に命令区間記憶手段に登録されている主記憶入力アドレスに対しても、主記憶入力値の比較を行う必要のあるものに対して的確に比較要否フラグを設定することが可能となるという効果を奏する。
【0149】
また、本発明に係るデータ処理装置は、少なくとも1つの第2の演算手段をさらに備え、上記第2の演算手段が、上記第1の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録する構成としてもよい。
【0150】
これにより、上記の構成による効果に加えて、次に、同じ命令区間が出現し、予測入力値と同じ入力が行われた場合には、命令区間記憶手段に記憶されている値を再利用することが可能となるという効果を奏する。
【0151】
また、本発明に係るデータ処理装置は、上記第1の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第2の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、上記第2の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第2の演算手段に設けられたローカルメモリを用いるとともに、上記第1の演算手段が主記憶手段へ書き込みを行う場合には、対応する第2の演算手段のキャッシュラインが無効化される構成としてもよい。
【0152】
これにより、上記の構成による効果に加えて、第1の演算手段と、第2の演算手段とで、主記憶手段に対して異なる値を書き込むことによる不具合を防止することができるという効果を奏する。
【0153】
また、第1の演算手段が主記憶手段へ書き込みを行う場合には、対応する第2の演算手段のキャッシュラインが無効化されるので、第1の演算手段によって主記憶手段が書き換えられた場合にも、第2の演算手段が、新たに主記憶手段から値を読み出すことによって、主記憶一貫性を保つことができるという効果を奏する。
【図面の簡単な説明】
【図1】本発明の一実施形態に係るデータ処理装置が備えるRF/RBによって実現される再利用表を示す図である。
【図2】同図(a)および同図(b)は、図1に示す再利用表の具体例を示す図である。
【図3】関数の入れ子構造において、内側の構造のレジスタ入出力が、外側の構造のレジスタ入出力となる影響範囲を示す図である。
【図4】RWと、RF・RBとの関係を示す図である。
【図5】上記データ処理装置の概略構成を示すブロック図である。
【図6】RBエントリを分割する状態を示す図である。
【図7】RFにおける各エントリごとに、一定期間における登録および再利用の状況をシフトレジスタに記録する様子を示す図である。
【図8】関数およびループが入れ子構造となっている状態の一例を示す図である。
【図9】同図(a)は、関数Aが関数Bを呼び出す構造を概念的に示す概念図であり、同図(b)は、同図(a)に示すプログラム構造を実行する際の主記憶におけるメモリマップを示す図である。
【図10】関数Aが関数Bを呼び出す場合の、メモリマップにおける引数およびフレームの概要を示す図である。
【図11】1つの関数を再利用するための従来の再利用表を示す図である。
【符号の説明】
1A MSP
1B SSP
2 RF/RB(命令区間記憶手段)
3 主記憶(主記憶手段)
4A・4B RW
5A・5B 演算器(第1・第2の演算手段)
6A・6B レジスタ
7A・7B Cache
Claims (11)
- 主記憶手段から命令区間を読み出し、演算処理を行った結果を主記憶手段に書き込む処理を行うデータ処理装置において、
上記主記憶手段から読み出した命令区間に基づく演算を行う第1の演算手段と、上記第1の演算手段による上記主記憶手段に対する読み出しおよび書き込み時に用いられるレジスタと、1つ以上の命令区間に関する情報をそれぞれエントリとして記憶する命令区間記憶手段とを備え、
上記命令区間記憶手段に、各エントリに対応して、レジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値が登録されているとともに、上記主記憶入力アドレスに対応して比較要否フラグが登録されており、
上記第1の演算手段が、
命令区間を実行する際に、レジスタ入力値を取得する第1のステップと、
上記命令区間記憶手段に記憶されているエントリの中から、上記第1のステップで取得したレジスタ入力値と一致するレジスタ入力値が登録されているエントリを抽出する第2のステップと、
上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされているか否かを判定する第3のステップと、
上記第3ステップで、比較が必要であることを示すフラグがセットされていないと判定された場合に、主記憶入力値の比較を行うことなしに、該当エントリに登録されている主記憶出力値を、該当エントリに登録されている主記憶出力アドレスに出力するとともに、該当エントリに登録されているレジスタ出力値を上記レジスタに出力する第4のステップとを行うことを特徴とするデータ処理装置。 - 上記命令区間記憶手段に、上記主記憶入力アドレスに対応して有効フラグが登録されており、
上記有効フラグが、主記憶入力アドレスに対応して登録されているエントリの中に、有効な主記憶入力値が登録されているものがあるか否かを示しており、
上記第1の演算手段が、
上記第2のステップで抽出されたエントリに対応する主記憶入力アドレスを抽出し、該主記憶入力アドレスに対応する有効フラグに、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされているか否かを判定する第5のステップをさらに行い、
上記第3ステップで、比較が必要であることを示すフラグがセットされていると判定され、かつ、上記第5ステップで、有効な主記憶入力値が登録されているものがあることを示すフラグがセットされていると判定された場合に、該主記憶入力アドレスの内容と、上記命令区間記憶手段に記憶されている主記憶入力値とを比較することを特徴とする請求項1記載のデータ処理装置。 - 上記命令区間記憶手段に登録されている主記憶入力アドレスに関して、上記主記憶手段における該当主記憶アドレスに記録されている内容に変更が行われた場合に、上記主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグがセットされることを特徴とする請求項1または2記載のデータ処理装置。
- 上記第1の演算手段が、
主記憶手段から読み出した命令区間に関して、上記命令区間記憶手段に記憶されているエントリの内容を利用できなかった場合に、該当命令区間に関するエントリを確保し、該エントリに対して登録作業中状態を示す状態表示フラグをセットする第6のステップと、
上記第1の演算手段が該当命令区間に関する演算処理を行うとともに、該演算処理時におけるレジスタ入力値、主記憶入力アドレス、主記憶入力値、主記憶出力アドレス、主記憶出力値、および、レジスタ出力値を上記命令区間記憶手段に登録する第7のステップとをさらに行うことを特徴とする請求項1記載のデータ処理装置。 - 上記第1の演算手段が、
上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されているか否かを判定する第8のステップと、
上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶出力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第9のステップとをさらに行うことを特徴とする請求項4記載のデータ処理装置。 - 上記第1の演算手段が、
上記第7のステップにおける演算処理時に、上記主記憶手段からの主記憶読み出しが行われた場合、上記命令区間記憶手段に、該主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第10のステップと、
上記第8のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、上記第7のステップにおいて登録される主記憶入力アドレスに対応する比較要否フラグに、上記一致する主記憶入力アドレスに対応する比較要否フラグと同じフラグをセットする第11のステップとをさらに行うことを特徴とする請求項4または5記載のデータ処理装置。 - 上記第1の演算手段が、
上記第7のステップにおける演算処理時に、上記主記憶手段に対する主記憶書き込みが行われた場合、上記命令区間記憶手段に、該主記憶書き込みにおける主記憶アドレスと一致する主記憶入力アドレスが登録されているか否かを判定する第12のステップと、
上記第12のステップにおいて、上記主記憶読み出しにおける主記憶アドレスと一致する主記憶入力アドレスが登録されていると判定された場合に、該主記憶入力アドレスに対応する比較要否フラグに、主記憶入力値の比較が必要であることを示すフラグをセットする第13のステップとをさらに行うことを特徴とする請求項4、5、または6記載のデータ処理装置。 - 少なくとも1つの第2の演算手段をさらに備え、
上記第2の演算手段が、上記第1の演算手段によって処理が行われている命令区間に関して、今後入力が予想される予測入力値に基づいて該命令区間の演算を行い、その結果を上記命令区間記憶手段に対して登録することを特徴とする請求項1ないし7のいずれか一項に記載のデータ処理装置。 - 上記第1の演算手段に対して、主記憶手段に対して読み出しおよび書き込みが可能なキャッシュメモリが設けられているとともに、上記第2の演算手段に対して、主記憶手段に対して読み出しのみ可能なキャッシュメモリが設けられており、
上記第2の演算手段が、命令区間記憶手段に対する入出力記録対象となる主記憶参照には命令区間記憶手段に記録されている入出力記録そのものを用い、その他の局所的な参照には、上記第2の演算手段に設けられたローカルメモリを用いるとともに、
上記第1の演算手段が主記憶手段へ書き込みを行う場合には、対応する第2の演算手段のキャッシュラインが無効化されることを特徴とする請求項8記載のデータ処理装置。 - 請求項1ないし9のいずれか一項に記載のデータ処理装置が備える第1の演算手段が行う処理をコンピュータに実行させることを特徴とするデータ処理プログラム。
- 請求項1ないし9のいずれか一項に記載のデータ処理装置が備える第1の演算手段が行う処理をコンピュータに実行させることを特徴とするデータ処理プログラムを記録した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003153221A JP3855077B2 (ja) | 2003-05-29 | 2003-05-29 | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003153221A JP3855077B2 (ja) | 2003-05-29 | 2003-05-29 | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004355397A JP2004355397A (ja) | 2004-12-16 |
JP3855077B2 true JP3855077B2 (ja) | 2006-12-06 |
Family
ID=34048234
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003153221A Expired - Fee Related JP3855077B2 (ja) | 2003-05-29 | 2003-05-29 | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP3855077B2 (ja) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2006215672A (ja) * | 2005-02-02 | 2006-08-17 | Nec Corp | 情報処理装置及びその方法並びにプログラム |
US10922020B2 (en) * | 2019-04-12 | 2021-02-16 | Micron Technology, Inc. | Writing and querying operations in content addressable memory systems with content addressable memory buffers |
-
2003
- 2003-05-29 JP JP2003153221A patent/JP3855077B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP2004355397A (ja) | 2004-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8055885B2 (en) | Data processing device for implementing instruction reuse, and digital data storage medium for storing a data processing program for implementing instruction reuse | |
US5758051A (en) | Method and apparatus for reordering memory operations in a processor | |
US5918005A (en) | Apparatus region-based detection of interference among reordered memory operations in a processor | |
US9513905B2 (en) | Vector instructions to enable efficient synchronization and parallel reduction operations | |
KR100341431B1 (ko) | 다수의 예측 분기 명령을 통한 명령 페치의 정렬 명령캐시 제어 | |
CN102841865B (zh) | 高性能缓存系统和方法 | |
US20150186293A1 (en) | High-performance cache system and method | |
JPH11212788A (ja) | プロセッサのデータ供給装置 | |
US9753855B2 (en) | High-performance instruction cache system and method | |
JP2000148472A (ja) | マイクロプロセッサ装置及びそのソフトウェア命令高速化方法並びにその制御プログラムを記録した記録媒体 | |
TWI758319B (zh) | 用於處置針對向量指令的元素間位址危害的裝置及資料處理方法 | |
US6381691B1 (en) | Method and apparatus for reordering memory operations along multiple execution paths in a processor | |
JP3855076B2 (ja) | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 | |
JPH06242951A (ja) | キャッシュメモリシステム | |
US20030088636A1 (en) | Multiprocessor system having distributed shared memory and instruction scheduling method used in the same system | |
JP4254954B2 (ja) | データ処理装置 | |
US6629314B1 (en) | Management of reuse invalidation buffer for computation reuse | |
JP3855077B2 (ja) | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 | |
US7383543B2 (en) | Management of reuse invalidation buffer for computation reuse | |
US7600102B2 (en) | Condition bits for controlling branch processing | |
JP3895314B2 (ja) | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 | |
WO1998011484A1 (fr) | Processeur de commande a memoire d'historique | |
JP4654433B2 (ja) | データ処理装置、データ処理プログラム、およびデータ処理プログラムを記録した記録媒体 | |
JP3765111B2 (ja) | 分岐登録命令を有するプロセッサ | |
JP4660747B2 (ja) | データ処理装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20060210 |
|
RD02 | Notification of acceptance of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7422 Effective date: 20060210 |
|
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: 20060822 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20060823 |
|
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: 20100922 Year of fee payment: 4 |
|
LAPS | Cancellation because of no payment of annual fees |