JP3701203B2 - 計算機システム - Google Patents
計算機システム Download PDFInfo
- Publication number
- JP3701203B2 JP3701203B2 JP2000614114A JP2000614114A JP3701203B2 JP 3701203 B2 JP3701203 B2 JP 3701203B2 JP 2000614114 A JP2000614114 A JP 2000614114A JP 2000614114 A JP2000614114 A JP 2000614114A JP 3701203 B2 JP3701203 B2 JP 3701203B2
- Authority
- JP
- Japan
- Prior art keywords
- entry
- instruction
- written
- data
- register file
- 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
- 238000000034 method Methods 0.000 claims description 13
- 238000012545 processing Methods 0.000 claims description 13
- 230000008569 process Effects 0.000 claims description 7
- 230000006870 function Effects 0.000 claims description 5
- 230000010354 integration Effects 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 12
- 238000012546 transfer Methods 0.000 description 6
- 238000006243 chemical reaction Methods 0.000 description 5
- 238000013507 mapping Methods 0.000 description 4
- 101100273030 Schizosaccharomyces pombe (strain 972 / ATCC 24843) caf1 gene Proteins 0.000 description 3
- 230000008859 change Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- HNPWTDUZIXAJSA-UHFFFAOYSA-N 5,5-dimethyl-2-(3-methylbutanoyl)cyclohexane-1,3-dione Chemical compound CC(C)CC(=O)C1C(=O)CC(C)(C)CC1=O HNPWTDUZIXAJSA-UHFFFAOYSA-N 0.000 description 1
- 101150020532 CPS4 gene Proteins 0.000 description 1
- 101150071111 FADD gene Proteins 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- -1 lrem Chemical compound 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3814—Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Advance Control (AREA)
Description
技術分野
本発明は、スタックマシンの機械語で記述されたプログラムを高速で処理する新規な構成の計算機システムに関するものである。
背景技術
従来、スタックマシンにおいては、命令の実行は、基本的にプログラム上の順序通り(in-order)に行われるものであった。すなわち、スタックマシンにおける演算命令は、オペランド・スタックからソース・データをポップし、演算を実行し、その演算結果をオペランド・スタックにプッシュするというような動作を指示するものであるが、このような命令の連鎖として書かれたプログラムを逐次的に実行するのである。
このような従来のスタックマシンにおいては、命令をプログラム上の順序通り(in-order)に実行するので、制御構造が単純なもので済むという利点があるが、処理速度が制約を受けるという問題点があった。
そこで、スタックマシンの機械語で記述されたプログラムをout-of-orderで処理するような計算機方式が考案された。例えば、日本特公平2−260082号、米国特許第5522051号や、米国特許第5333320号及び米国特許第5765014号におけるプロセッサ要素がある。これらの明細書に示されるプロセッサは、処理性能の向上という点で十分ではない上に、正確な例外処理を保証する上で問題があった。
本発明は、上記問題点を解決するため創案されたものであり、正確な例外処理を保証しつつ、スタックマシンの機械語で記述されたプログラムをout-of-orderでより効果的に処理する計算機システムを提供することを目的としている。
発明の開示
本発明による計算機システムは、データ・キャッシュと、データ・バッファと、各々のエントリにデータが書き込まれるようになっている統合レジスタ・ファイルと、各々のエントリに統合レジスタ・ファイルのエントリのアドレスが書き込まれるようになっている前進ポインタ・スタック及び完了ポインタ・スタックと、各々のエントリに個々の命令の内容が書き込まれるようになっているFIFOキューの構成となっている命令バッファと、演算を実行するようになっている演算ユニットとデータ・バッファ及びデータ・キャッシュにアクセスできるようになっているロード/ストア・ユニットを含む機能ユニット群と、統合レジスタ・ファイル及び機能ユニット群の間でデータを統合レジスタ・ファイルのエントリのアドレスと共に分配するようになっている共通データ・バスとを具備する。上記機能ユニットの各々は、適当な数のリザベーション・ステーションを備える。
従来のスタックマシンにおいて、スタックが......, word1, word2, word3, word4(右端がスタックトップ)となっている状態は、本発明による計算機システムにおいて、ポインタ・スタックが......,〈a〉,〈b〉,〈c〉,〈d〉(右端がスタックトップ)で、エントリ・アドレスが〈a〉,〈b〉,〈c〉及び〈d〉である統合レジスタ・ファイルの各エントリに、それぞれword1, word2, word3及びword4が保持されている状態に対応する。
本発明の計算機システムにおいては、命令がデコードされるごとに、命令の内容に応じて前進ポインタ・スタック及び統合レジスタ・ファイルを操作すると共に、命令の内容を命令バッファ及び、必要な場合には、適切な機能ユニットの空いているリザベーション・ステーションに書き込むようになっている。この際、命令に規定されているオペランド・スタックに対するスタック操作が、前進ポインタ・スタックに対して同様に適用される。ここで、1語のデータのオペランド・スタックへのプッシュ操作を、本発明の計算機システムにおいてエミュレートするには、そのデータを保持すべく統合レジスタ・ファイルの空いている1エントリを割り付け、そのエントリのアドレスを前進ポインタ・スタックにプッシュすればよい。
即ち、デコードされた命令においてオペランド・スタックに対するポップ操作が規定されている場合には、ポップすべき語数と同じ数だけ統合レジスタ・ファイルのエントリのアドレスを前進ポインタ・スタックからポップする。デコードされた命令においてオペランド・スタックに対するプッシュ操作が規定されている場合には、プッシュすべき語数と同じ数だけ統合レジスタ・ファイルの空いているエントリを割り付け、上記割り付けた統合レジスタ・ファイルのエントリのアドレスを前進ポインタ・スタックにプッシュする。さらに、デコードされた命令の内容を、ポップ/プッシュ操作を伴う命令の場合にはポップ/プッシュされる統合レジスタ・ファイルのエントリのアドレスと共に、命令バッファに書き込むようになっている。機能ユニットによる実行の必要な命令の場合には、命令バッファに書き込まれる命令の内容を、適切な機能ユニットの空いているリザベーション・ステーションにも書き込むようになっている。
前進ポインタ・スタックからエントリ・アドレスがポップされる統合レジスタ・ファイルのエントリの各々の内容が読み出され、データが既に書き込まれている場合には、後で、エントリ・アドレスとデータが共通データ・バスに載せられるようになっている。
リザベーション・ステーションに書き込まれた命令に関して、原則として次のような動作が順次行われる。各々のリザベーション・ステーションで、そこに書き込まれているソース・データを保持すべき統合レジスタ・ファイルのエントリのアドレスと共通データ・バスを通じて送られてくるものが比較され、一致すればデータが取り込まれる。必要なソース・データが揃った後に、その命令の実行が開始される。デコードの際前進ポインタ・スタックに統合レジスタ・ファイルのエントリのアドレスがプッシュされるような命令の場合、機能ユニットでの実行の結果得られたデータを該プッシュされた統合レジスタ・ファイルのエントリのアドレスと共に共通データ・バスに載せる。統合レジスタ・ファイルにおいては、共通データ・バスを通じて送られてくる内容に基づきデータの書き込みを行う。
命令バッファにおけるキューの先頭のエントリに保持されている命令の完了が可能である、あるいはそうなると、そのキューの先頭のエントリの内容に基づき、保持されている命令がデコードされた際の前進ポインタ・スタックの動作を再現すべく完了ポインタ・スタックを操作し、キューからその先頭のエントリを除外し、ポップ操作によって完了ポインタ・スタックにおけるアドレスの保持が無くなった統合レジスタ・ファイルのエントリの割り付けを解除するようになっている。
【図面の簡単な説明】
第1図は、本発明にかかる好ましい計算機システムの基本構成を示すブロック図、第2図は、前進ポインタ・スタック及び完了ポインタ・スタックの構成を示す図、第3図は統合レジスタ・ファイルの各々のエントリの詳細な構成を示す図、第4図は、命令バッファの構成を示す図、第5図は、命令バッファの各々のエントリの詳細な構成を示す図、第6図〜第14図は、本発明の一実施例における一動作例の、サイクル毎の前進ポインタ・スタック、完了ポインタ・スタック、命令バッファ及び統合レジスタ・ファイルの内容を具体的に示した説明図、第15図は、本発明の計算機システムが1サイクル当り2命令までデコードできるような構成をとる場合に、プログラムがどのように変換されるかを具体的に示す図表である。
発明を実施するための最良の形態
以下に、本発明にかかる好ましい計算機システムについて、図面を参照しながら説明する。なお、以下に述べる本発明による計算機システムの実施例は、Java Virtual Machine(Java VM)で規定されるスタックマシンの基本的な命令をハードウエアで実行するものである。すなわち、データ語長を32ビットとして、これを単位にロード/ストア及び算術論理演算等の演算を行う。従って、例えば、倍長語の間での算術演算は、2語づつ合せて4語のソース・データをもとに2語の演算結果を生ずる。
従来のスタックマシンにおける、語の単位でデータがプッシュ/ポップされるようになっているスタックは、後述するポインタ・スタックと区別するために、以降では、ワード・スタックと呼ぶことにする。
Java VMにおいては、ワード・スタックには、メソッドが呼び出されるごとにフレームが積まれる。各フレームで、下部はローカル変数やパラメータの格納域、上部はオペランド・スタックとなっている。
Java VMにはもともとハードウェアで実行することを想定していない複雑な命令が含まれるが、以下に述べる本発明による計算機システムの実施例は、次のような基本的な命令をハードウェアで実行するものとする。
(a)即値データのオペランド・スタックへのプッシュ命令
bipush, sipush, aconst_null, iconst_m1, iconst_<i>, fconst_<f>, lconst_<l>, dconst_<d>
(b)変数データのオペランド・スタックへのロード命令
ldc1, ldc2, iload, iload_<n>, fload, fload_<n>, aload, aload_<n>, ldc2w, lload, lload_<n>, dload, dload_<n>, iaload, laload, faload, daload, aaload, baload, caload, saload
(c)オペランド・スタック上のデータの変数へのストア命令
istore, istore_<n>, fstore, fstore_<n>, astore, astore_<n>, lstore, lstore_<n>, dstore, dstore_<n>, iastore, lastore, fastore, dastore, aastore, bastore, castore, sastore
(d)演算命令
(d−1)算術演算命令
iadd, ladd, fadd, dadd, isub, lsub, fsub, dsub, imul, lmul, fmul, dmul, idiv, ldiv, fdiv, ddiv, irem, lrem, frem, drem, ineg, lneg, fneg, dneg
(d−2)論理演算命令
ishl, ishr, iushr, lshl, lshr, lushr, iand, land, ior, lor, ixor, lxor
(d−3)変換演算命令
i2l, i2f, i2d, l2i, l2f, l2d, f2i, f2l, f2d, d2i, d2l, d2f, int2byte, int2char, int2short
(d−4)比較演算命令
lcmp, fcmpl, fcmpg, dcmpl, dcmpg
(e)オペランド・スタックの操作命令
pop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap
(f)分岐命令
ifeq, ifnull, iflt, ifle, ifne, ifnonnull, ifgt, ifge, if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge, goto, goto_w
以降、特にことわらない限り、「命令」とは上に挙げた命令のいずれかを意味するものとする。
第1図は計算機システムのブロック図であって、10は命令キャッシュ、11はデータ・キャッシュ、12はデータ・バッファ、20は命令フェッチ・ユニット、21は命令デコード・発行ユニット、3は前進ポインタ・スタック、3aは前進ポインタ・スタック履歴ファイル、4は完了ポインタ・スタック、5は命令バッファ、6は統合レジスタ・ファイル、7はフリー・リスト、8は共通データ・バス、80及び81は各々演算ユニット0及び1、82は分岐ユニット、83はロード/ストア・ユニット、801,802,811,812,821,822,831及び832はリザベーション・ステーションを表している。
次に、本発明実施例の計算機システムの各構成要素ごとにその詳細な構成を説明する。
(A)命令フェッチ・ユニット
命令フェッチ・ユニットは、図示してないプログラムカウンタ(pcレジスタ)を具備しており、命令キャッシュから命令をフェッチし、命令デコード・発行ユニットに渡すようになっている。分岐の予測や分岐の実行も担う。
(B)命令デコード・発行ユニット
命令デコード・発行ユニットは、命令フェッチ・ユニットから渡された命令のデコードを行い、プログラムに含まれる命令がout-of-orderで実行されるように、後述する前進ポインタ・スタック、命令バッファ及び統合レジスタ・ファイル等を設定するための各種信号を発生するようになっている。
(C)ポインタ・スタック
ポインタ・スタックは、各々のエントリに統合レジスタ・ファイルのエントリのアドレスが書き込まれるようになっているレジスタ・ファイルで構成されている。
従来のスタックマシンにおいて、ワード・スタックが......, word1, word2, word3, word4(右端がスタックトップ)となっている状態は、本発明による計算機システムにおいて、ポインタ・スタックが.....,〈a〉,〈b〉,〈c〉,〈d〉(右端がスタックトップ)で、エントリ・アドレスが〈a〉,〈b〉,〈c〉及び〈d〉である統合レジスタ・ファイルの各エントリに、それぞれword1, word2, word3及びword4が保持されている状態に対応する。
本発明の計算機システムは、前進ポインタ・スタック(APS;Advanced Pointer Stack)と完了ポインタ・スタック(CPS;Completed Pointer Stack)の2つのポインタ・スタックを具備する。
本発明の計算機システムにおいては、命令がデコードされるごとに、命令の内容に応じて前進ポインタ・スタック(以下ではAPSと記す)及び統合レジスタ・ファイルを操作すると共に、命令の内容を命令バッファ及び、必要な場合には、適切な機能ユニットの空いているリザベーション・ステーションに書き込むことにより、プログラムに含まれる命令がout-of-orderで実行されるべく設定される。すなわち、前進ポインタ・スタックはデコード・発行済みの全ての命令によるスタック操作を反映している。
他方、完了ポインタ・スタック(以下ではCPSと記す)は、プログラム上の順番で完了済みの全ての命令によるスタック操作を反映するものである。本発明の計算機システムはデータ駆動の原理に基づくout-of-order実行を可能とするものであるが、完了ポインタ・スタックは、正確な例外処理を保証するため、in-orderで完了済の全ての命令に基づく状態を構成するために存在するものである。
本発明実施例の計算機システムにおいては、ポインタ・スタック及び統合レジスタ・ファイルによって、ワード・スタックの一番上に積まれたフレームの上部のオペランド・スタックの内容のみが保持されるようになっている。ワード・スタックの残りの部分はデータ・バッファ及びデータ・キャッシュに格納されるようになっている。また、オペランド・スタックが成長して、その全内容をポインタ・スタック及び統合レジスタ・ファイルで保持しきれなくなると、後述するように、オペランド・スタックの下部の内容がデータ・バッファにSpillされるようになっている。
各ポインタ・スタックは循環型のバッファの構成となっており、プッシュ・ポインタとボトム・ポインタと呼ぶ2つのレジスタが各々存在する。プッシュ・ポインタは、統合レジスタ・ファイルのエントリのアドレスを保持する最上位のエントリの1つ上を示す。ボトム・ポインタは、統合レジスタ・ファイルのエントリのアドレスを保持する最下位のエントリを示す。ボトム・ポインタの値からプッシュ・ポインタの値を引くことで、ポインタ・スタックに何エントリの空きがあるかがわかる。初期状態においては、プッシュ・ポインタ及びボトム・ポインタの各々の値は共に0となっている。
第2図は、本実施例の計算機システムにおける、各ポインタ・スタックと各プッシュ・ポインタ及びボトム・ポインタの関係を示す説明図である。2つのポインタ・スタックAPS3及びCPS4は同数のエントリを有し、各ポインタ・スタックで各々のエントリに下から順に0、1、2、・・・とアドレスが付けられているものとする。縦線が施されているエントリは統合レジスタ・ファイルのエントリのアドレスを保持しているものとする。第2図に示すように、プッシュ・ポインタは、APS及びCPSの各々に対して設けられており、それぞれPP_OF_APS及びPP_OF_CPSと名付けている。他方、ボトム・ポインタは1つだけ設けられており、これがAPS及びCPSで共用される。これをBP_OF_PSと名付けている。
APSとCPSの間には、エントリの数だけ比較回路が設けられており、APS及びCPSの同じエントリ・アドレスにある(第2図において水平に並ぶ)エントリの間でその内容が比較されるようになっている。
命令のデコード・発行の際、命令に規定されているオペランド・スタックに対する1語分のプッシュ操作に対応して、割り付けられる統合レジスタ・ファイルの1エントリのアドレスをAPSのPP_OF_APSで示されるエントリに書き込み、PP_OF_APSの値に1を加えるようになっている。逆に、命令に規定されているオペランド・スタックに対する1語分のポップ操作に対応して、PP_OF_APSの値から1を引くようになっている。命令の完了の際のCPSとPP_OF_CPSの動作に関しても同様である。
BP_OF_PSで示されるエントリの内容がAPSとCPSで一致する場合には、その一致する内容で示される統合レジスタ・ファイルのエントリに書き込まれている1語分のデータをデータ・バッファにSpillすることができる。その際、BP_OF_PSの値に1を加えるようになっている。逆に、データ・バッファから統合レジスタ・ファイルに1語分のデータをFillするには、データ・バッファからFillすべき1語分のデータを取り出し、それに空いている統合レジスタ・ファイルの1エントリを割り付けてそのデータを書き込み、その統合レジスタ・ファイルのエントリのアドレスをAPS及びCPSのBP_OF_PSで示されるエントリの1つ下に各々書き込み、BP_OF_PSの値から1を引くようになっている。
本実施例の計算機システムは、分岐予測に基づく投機的実行を可能にするために、前進ポインタ・スタック履歴ファイル(以下では「APS履歴ファイル」と記す)を具備する。APS履歴ファイルの各々のエントリには、APSの全エントリ及びPP_OF_APSの内容が書き込めるようになっている。
(D)統合レジスタ・ファイル(CRF;Consolidated Resister File)
統合レジスタ・ファイル(以下ではCRFと記す)は、従来のスタックマシンにおけるオペランド・スタックの内容を、順序不同で保持するものである。
第3図は、本実施例の計算機システムにおける、CRF6の各々のエントリ6(i)の詳細な構成を示す説明図である。ここで、iはエントリのアドレスである。CRF6の各々のエントリ6(i)はデータ・フィールド61(i)、書込み完了フラグ(WCF,Write Completion Flag)フィールド62(i)、カラー(C,Colour)フィールド63(i)及びビジービット(BB)フィールド64(i)から成っている。
実際のCRFのハードウェア上の構成は、上述の各フィールド別に設けられたレジスタ・ファイルの集合体である。
CRFの各々のエントリのデータ・フィールドは、1語分のデータが書き込まれる構成となっている。
CRFの各々のエントリにおいて、WCFフィールドは、データ・フィールドにデータの書き込みが完了していれば1、完了していなければ0が書き込まれているようになっている。
CRFの各々のエントリにおいて、Cフィールドは、そのCRFのエントリが、命令に含まれるプッシュ操作に対応して割り付けられたものであるのか、データ・バッファからのFillの際に割り付けられたものであるのかの区別、前者の場合にはさらに分岐タグが書き込まれるようになっている。本実施例においては、後述するように、分岐タグはAPS履歴ファイルのエントリのアドレスと一定の関係にある。
CRFの各々のエントリにおいて、BBフィールドは、そのCRFのエントリがデータを保持すべく割り付けられている状態であれば1、割り付けられていない(空いている)状態であれば0が書き込まれているようになっている。
(E)フリー・リスト(FL)
フリー・リスト(以下ではFLと記す)は、フリーな、即ち、空いている/割り付けられていない(BBフィールドが0である)CRFのエントリのアドレスを保持するもので、本実施例においては、循環型のFIFOキューの構成となっている。
初期状態においては、CRFの全てのエントリのアドレスがFLに登録されている。空いているCRFのエントリを割り付ける必要がある場合に、FLからフリーなCRFのエントリのアドレスが取り出される。逆に、CRFのあるエントリの割り付けが解除されれば、そのエントリのアドレスがFLに登録されるようになっている。
(F)命令バッファ(IB;Instruction Buffer)
命令バッファ(以下ではIBと記す)は、未完了の発行済命令を保持するバッファであり、循環型のFIFOキューの構成となっている。
第4図は、IBの構成を示す説明図である。第4図において、IB5の各々のエントリは下から順に0、1、2、・・・とアドレスが付けられているものとし、縦線が施されているIB5のエントリは、未完了の発行済命令を保持しているものとする。IBは、ヘッダ・ポインタとトレイル・ポインタと名付けた2つのレジスタを具備する。ヘッダ・ポインタはキューの先頭のエントリを、トレイル・ポインタはキューの末尾のエントリの1つ後を示す。1サイクル当たり1命令までしか発行/完了を行わないものとすれば、トレイル・ポインタは次に発行される命令の内容を書き込むべきエントリを示し、ヘッダ・ポインタは次に完了されるべき命令の内容が書き込まれているエントリを示す。ヘッダ・ポインタの値からトレイル・ポインタの値を引くことで、IBに何エントリの空きがあるかがわかる。初期状態においては、ヘッダ・ポインタ及びトレイル・ポインタの値は共に0となっている。
第5図は、本実施例の計算機システムにおける、IB5の各々のエントリ5(i)の詳細な構成を示す説明図である。ここで、iはエントリのアドレスである。IB5の各々のエントリ5(i)はオペレーション・フィールド50(i)、オペランド・フィールド51(i)、第1ソース・フィールド52(i)、第2ソース・フィールド53(i)、第3ソース・フィールド54(i)、第4ソース・フィールド55(i)、第1デスティネーション・フィールド56(i)、第2デスティネーション・フィールド57(i)、分岐タグ(BT)フィールド58(i)、及び実行状態(S;State)フィールド59(i)から成っている。
IBの各々のエントリのオペレーション・フィールドはオペレーション・コードが書き込まれる構成となっている。
IBの各々のエントリのオペランド・フィールドは、オペレーション・コードに続いてオペランドが示されるような命令の場合に、このオペランドが書き込まれるようになっている。
IBの各々のエントリの第1〜第4ソース・フィールドの各々は、ソース・データを保持すべく割り付けられているCRFのエントリのアドレスが書き込まれるようになっている。ポップ操作を含む命令がデコードされた場合には、ポップすべき語数と同じ数だけAPSからポップされるCRFのエントリのアドレスが、その順で第1〜第4ソース・フィールドに書き込まれるようになっている。
IBの各々のエントリの第1〜第2デスティネーション・フィールドの各々は、命令のデコード・発行に伴い、新たに割り付けられるCRFのエントリのアドレスが書き込まれるようになっている。プッシュ操作を含む命令がデコードされた場合には、プッシュすべき語数と同じ数だけAPSにプッシュされるCRFのエントリのアドレスが、その順で第1〜第2デスティネーション・フィールドに書き込まれるようになっている。
IBの各々のエントリのBTフィールドは、分岐予測に基づく投機的実行に係るもので、本実施例においては、後述するように、BTフィールドに書き込まれる分岐タグはAPS履歴ファイルのエントリのアドレスと一定の関係にある。
IBの各々のエントリにおいて、Sフィールドは、そのエントリに書き込まれている命令の実行状態に応じて、未実行、実行済み、正常終了、例外事象発生等の情報が書き込まれているようになっている。
(G)共通データ・バス(CDB;Common Data Bus)
共通データ・バス(以下ではCDBと記す)は、後述する機能ユニット群及びCRFの間で、データをCRFのエントリのアドレスと共に分配する通信チャネルである。CDBは、十分なデータ通信バンド幅が確保できるように、多重化されている。
(H)機能ユニット
本実施例の計算機システムは、演算ユニット0及び1、分岐ユニット及びロード/ストア・ユニットの4つの機能ユニットを具備する。本実施例においては、各機能ユニットは、基本的に、2つのリザベーション・ステーションと割り当てられた命令を処理する実行部で構成される。リザベーション・ステーション(以下ではRSと記す)は、命令の内容を一時的に保持するバッファであるが、本実施例の計算機システムにおいては、命令のデコードの際に、同じ命令の内容が書き込まれるIBのエントリのアドレスも書き込まれるような構成となっている。
命令のデコードの際に、命令の種類に応じて、必要な場合に、適切な機能ユニットの空いているRSに書き込みが行われるようになっている。
各機能ユニットの各々のRSで、そこに書き込まれているソース・データを保持すべきCRFのエントリのアドレスとCDBで送られてくるものが比較され、一致すればデータが取り込まれるようになっている。
命令の内容を保持しているRSにおいて、必要なソース・データが揃い、機能ユニットの実行部が利用可能であれば、当該RSの内容は実行部に渡され、その実行が開始されるようになっている。
(H−1)演算ユニット
本実施例の計算機システムは、演算ユニット0及び演算ユニット1を具備しており、その各々の実行部は算術論理演算、データ・タイプの変換演算、比較演算等の演算命令を実行する機能を有し、互いに独立に並行して動作することができるようになっている。
本発明の計算機システムにおいては、各々の演算ユニットの実行部をパイプライン化したり、より多くの演算ユニットを具備したり、演算ユニットごとに実行する演算の種類を特定した構成とすることも可能である。
(H−2)分岐ユニット
分岐ユニットの実行部は、条件分岐命令を処理し、分岐の有無を確定して、分岐先アドレスと共に、命令フェッチ・ユニットに通知する機能を有する。
(H−3)ロード/ストア・ユニット(LSU;Load/Store Unit)
及びデータ・バッファ
ロード/ストア・ユニット(以下ではLSUと記す)の実行部は、アドレス計算を行う機能を有し、データ・バッファ及びデータ・キャッシュにアクセスすることができるようになっている。
データ・バッファは、各々のエントリに1語のデータが書き込まれるようになっている循環型のバッファである。本発明の計算機システムにおいては、ワード・スタックの最上位の部分の内容がポインタ・スタックとCRFによって保持されるが、その下の部分がデータ・バッファ、さらにその下の部分がデータ・キャッシュに格納されるようになっている。LSUはデータ・バッファに高速にアクセスできるので、アクセスすべき変数データがデータ・バッファに保持されている割合が大きいほど、より効率的な計算が可能となる。また、データ・バッファに適当な語数のデータを溜めておくようにすることによって、後述するCRF−データ・バッファ−データ・キャッシュの間のSpill/Fillの動作を効率的に行うことができる。
LSUは、最初のローカル変数へのポインタを保持する図示してないレジスタ(varsレジスタ)を具備する。本実施例の計算機システムにおいては、最初のローカル変数の格納域はデータ・バッファあるいはデータ・キャッシュにあるが、varsレジスタには、データ・キャッシュにおける相当するアドレス値が書き込まれているようになっている。すなわち、全てあるいは一部のローカル変数のデータが実際にはデータ・バッファに保持されていても、各々のローカル変数に、全てのローカル変数をデータ・キャッシュにSpillしたと仮定した場合のデータ・キャッシュにおけるアドレス値を対応させることができるので、ロード/ストア命令の処理において、LSUはvarsレジスタの値を用いてアドレス計算を行い、対象となるローカル変数の格納域がデータ・バッファかデータ・キャッシュかを判定し、その格納域にアクセスする。
LSUは、先行命令が全て完了するまでストア命令をプログラム上の順番で保持する、図示してないストア・バッファを具備する。即ち、ストア命令は全ての先行命令が完了してから実行されるようになっている。ストア・バッファは連想機能を備えており、LSUは先行ストア命令に対する依存性の検証を行い、ロード命令の実行をout-of-orderで行うことができるようになっている。
即ち、ロード・アドレスが先行ストア命令のストア・アドレスに一致するか、あるいは、先行ストア命令のストア・アドレスが未計算の場合(この場合、依存関係の検証はできないので、依存関係は存在するとみなす)、当該ロード命令は先行ストア命令に対して依存関係を持つことになる。依存関係が全く存在しない場合、データ・バッファ/データ・キャッシュから直ちにデータをロードする。ロード命令が先行ストア命令に対して依存関係にあると、データ・バッファ/データ・キャッシュは正しい値を持っていないので、データ・バッファ/データ・キャッシュからデータをロードすることはできない。ロード・アドレスが先行ストア命令のストア・アドレスと一致し、ストア・データが有効であれば、そのストア命令の完了を待たずに、ストア・バッファから直接データをロードする。
LSUは、プログラム中に示されるロード/ストア命令を実行すると共に、オーバーフロー/アンダーフローの回避のため、あるいは、メソッドの呼び出し/メソッドからの復帰に伴いワード・スタックの最上位においてフレームが生成/破棄されるのに対応して、CRFとデータ・バッファとの間でデータを自動的にSpill/Fillするようになっている。(ちなみに、メソッドの呼び出しにおいては、varsレジスタの値を変更した上で、スタック・トップからのストア命令も併用するのが望ましい。)
1語分のデータをCRFからデータ・バッファにSpillするには、APSとCPSで、(BP_OF_PSで示される)CRFのエントリのアドレスを保持する最下位のエントリの内容が一致していなくてはならない(そうでない場合は一致するまで待つ)。その場合、その一致する内容で示されるCRFのエントリに書き込まれている1語分のデータをデータ・バッファにSpillすることができる。その際、BP_OF_PSの値に1を加え、上記CRFのエントリのBBフィールドを0に変更し、そのエントリのアドレスをFLに登録する。
逆に、データ・バッファからCRFに1語分のデータをFillするには、データ・バッファからFillすべき1語分のデータを取り出し、それに空いているCRFの1エントリを割り付け、そのデータ・フィールドに書き込む。WCF、BBの各フィールドは1とする。さらに、その割り付けられたCRFのエントリのアドレスを、APS及びCPSの(BP_OF_PSで示される)CRFのエントリのアドレスを保持する最下位のエントリの1つ下に各々書き込み、BP_OF_PSの値から1を引く。
データ・バッファとデータ・キャッシュの間でも、データ・バッファの空きに応じて適宜Spill/Fillの動作が行われるようになっている。
CRF−データ・バッファ−データ・キャッシュの間で一度に複数語のデータをSpill/Fillできるようにするには、APSとCPSの2つのポインタ・スタック、データ・バッファ及びデータ・キャッシュをインタリーブ分割して、対応する分割部分間で上述と同様な動作を行うような構成とすればよい。この場合、Spill/Fillのために、APSとCPSの2つのポインタ・スタック、データ・バッファ及びデータ・キャッシュにおいて、バンク毎に1つのread/writeポート、さらに、CRFにおいてインタリーブ分割の数だけのread/writeポートが必要となる。
ついで、本発明実施例の計算機システムの動作を説明する。
本実施例の計算機システムは命令を、▲1▼命令フェッチ、▲2▼命令デコード・発行、▲3▼実行、▲4▼完了の4ステージで処理する。当分の間、説明を簡単にするため、1サイクルで1つの命令をデコード・発行/完了できるものとして、以下に各ステージごとに動作内容を説明する。
▲1▼命令フェッチ・ステージ
このステージでは、命令フェッチ・ユニットが命令キャッシュから命令を取り出すと共に、次にフェッチする命令のアドレスを決定する。次に命令をフェッチするのは通常次アドレス値からであるが、フェッチした命令が無条件分岐命令であるか、条件分岐命令で分岐すると予測した場合、分岐予測が外れた場合、あるいは例外が発生した場合には、フェッチするアドレス値を変更する。
▲2▼命令デコード・発行ステージ
このステージでは、命令をデコードして、命令の内容に応じて前進ポインタ・スタック(APS)及び統合レジスタ・ファイル(CRF)を操作すると共に、命令の内容を命令バッファ(IB)及び、必要な場合には、適切な機能ユニットの空いているRSに書き込むことにより、プログラムに含まれる命令がout-of-orderで実行されるべく設定する。以下に、設定動作を詳細に説明する。
本発明の計算機システムにおいては、従来のスタック・マシンにおけるワード・スタックのスタックトップ近傍の内容がポインタ・スタックとCRFによって再現されるが、命令に規定されているオペランド・スタックに対するスタック操作が、APSに対して同様に適用される。ここで、1語のデータのオペランド・スタックへのプッシュ操作をエミュレートするには、そのデータを保持すべく空いているCRFの1エントリを割り付け、そのエントリのアドレスをAPSにプッシュすればよい。
即ち、デコードされた命令においてオペランド・スタックに対するポップ操作が規定されている場合には、ポップすべき語数と同じ数だけCRFのエントリのアドレスをAPSからポップする。デコードされた命令においてオペランド・スタックに対するプッシュ操作が規定されている場合には、プッシュすべき語数と同じ数だけ空いているCRFのエントリを割り付け、上記割り付けたCRFのエントリのアドレスをAPSにプッシュする。
オペランド・スタックの操作命令(Java VMにおけるpop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap)の場合、基本的には、オペランド・スタックに対して行うべき操作をAPSに対して同様に行えばよい。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令(Java VMにおけるdup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2)の場合には、コピー・データを保持すべく空いているCRFのエントリを割り付け、そのエントリのアドレスをAPSの適切なエントリに書き込むようになっている。
命令のデコード・発行に伴い新たに割り付けられるCRFのエントリにおいては、BBフィールドに1を立て、Cフィールドには命令デコード・発行ユニットから送られてくる分岐タグを書き込む。即値データのプッシュ命令の場合には、データがすでに得られているので、データ・フィールドにそのデータを書き込み、WCFフィールドに1を立てる。それ以外の場合には、データはデコード・発行の時点では得られていないので、WCFフィールドを0としておく。
デコードされた命令の内容をプログラム上の順番でIBに保持しておくために、その命令の内容をIBのトレイル・ポインタで示されるエントリに書き込み、トレイル・ポインタの値に1を加える。すなわち、オペレーション・フィールドにオペレーション・コードを書き込み、オペレーション・コードに続いてオペランドが示されるような命令の場合には、オペランド・フィールドにこのオペランドを書き込む。BTフィールドには命令デコード・発行ユニットから送られてくる分岐タグを書き込む。Sフィールドに関しては、無条件分岐命令、即値データのオペランド・スタックへのプッシュ命令あるいはスタック上でコピーを作成することのないオペランド・スタックの操作命令(Java VMにおけるpop, pop2, swap)の場合は実行済みとし、その他の命令の場合は未実行としておく。
ポップ操作を含む命令の場合には、ポップすべき語数と同じ数だけAPSからポップされるCRFのエントリのアドレスを、その順で第1〜第4ソース・フィールドに書き込む。プッシュ操作を含む命令の場合には、プッシュすべき語数と同じ数だけAPSにプッシュされるCRFのエントリのアドレスを、その順で第1〜第2デスティネーション・フィールドに書き込む。
本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、コピー元となるデータを保持すべく割り付けられているCRFのエントリのアドレスをソース・フィールドに、コピー・データを保持すべく新たに割り付けられるCRFのエントリのアドレスをデスティネーション・フィールドに、一定の対応関係のもとに書き込む。
命令の種類に応じて、オペランド・スタックに対してポップ/プッシュすべき語数(オペランド・スタックの操作命令の場合には、作成するコピーの語数)は決まっているので、オペレーション・フィールドの内容によって、第1〜第4ソース・フィールド及び第1〜第2デスティネーション・フィールドのうちのいずれが有効であるかを知ることができる。
命令の内容を、IBに書き込むと同時に、命令の種類に応じて、必要な場合に、適切な機能ユニットの空いているRSにも、書き込みの行われるIBのエントリのアドレス(ここでは、1サイクル当たり1命令までしか発行しないとしているので、トレイル・ポインタの値と一致する)と共に書き込む。ここで、RSへの書き込みが必要でないのは、即値データのオペランド・スタックへのプッシュ命令、スタック上でコピーを作成することのないオペランド・スタックの操作命令及び無条件分岐命令の場合である。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、その内容を演算ユニット1の空いているRSに書き込むことにする。
エントリ・アドレスがIBのソース・フィールドに書き込まれる(APSからポップされる)CRFのエントリの各々のWCFフィールド及びデータ・フィールドが読み出され、WCFが1の場合、次サイクル以降にエントリ・アドレスとデータがCDBに載せられる。
▲3▼実行ステージ
命令デコード・発行ステージにおいてあるRSに書き込まれた命令に関して、原則として以下のような動作が順次行われる。
・各々のRSで、そこに書き込まれているソース・データを保持すべきCRFのエントリのアドレスとCDBを通じて送られてくるものが比較され、一致すればデータが取り込まれる。本実施例においては、RSに命令の内容が書き込まれるのと同じタイミングでCDBを通じて送られてくるデータも当該RSに取り込まれるものとする。
・必要なソース・データが揃い、機能ユニットの実行部が利用可能であれば、当該RSの内容は実行部に渡され、その実行が開始される。この時点で、当該RSにおける当該命令の保持が解除される。
・デコードの際IBのデスティネーション・フィールドに書き込みが行われる(APSにCRFのエントリのアドレスがプッシュされる)ような命令の場合、命令の実行の結果得られたデータをデスティネーションであるCRFのエントリのアドレスと共にCDBに載せる。CRFにおいては、CDBを通じて送られてくる内容に基づきデータの書き込みを行い、WCFフィールドを1に変更する。
・以上のような動作が全て正常に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該命令を保持している)IBのエントリのSフィールドを正常終了に変更する。
以上は、大部分の命令について当てはまる原則的な動作であるが、本実施例の計算機システムにおいては、命令の種類によっては、以下のような例外的な動作が行われる。
・LSUのRSにおいて、オペランド・スタック上のデータをポップしてアドレス計算を行うようなストア命令(Java VMにおけるiastore, lastore,fastore, dastore, aastore, bastore, castore, sastore)が書き込まれている場合には、ソース・データが全て揃っていなくても、アドレス計算に必要なソース・データが揃った時点でストア・アドレスを計算し、ストア・バッファに書き込む。
・LSUのRSにおいて、ストア命令が書き込まれている場合には、ストア・アドレスとストア・データのストア・バッファへの書き込みが共に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該ストア命令を保持している)IBのエントリのSフィールドをストア実行可能に変更する。前述したように、実際のストアの実行は完了ステージにおいて行う。
・演算ユニット1のRSにおいて、スタック上でコピーを作成するようなオペランド・スタックの操作命令が書き込まれている場合には、ソース・データが書き込まれると、そのデータを、デスティネーションとして一定の対応関係のもとに書き込まれているCRFのエントリのアドレスと共にCDBに載せる。それぞれのデスティネーションに関するデータ転送が全て正常に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該命令を保持している)IBのエントリのSフィールドを正常終了に変更する。
以上のように、IBに保持されている未実行の命令は、データ駆動の原理に基づき、実行可能となったものから処理されるので、命令実行順序はout-of-orderになる。また、演算ユニット0/1、分岐ユニット及びロード/ストア・ユニットの各機能ユニットは互いに独立に並行して動作する。
ある命令の処理において例外事象が発生した場合には、その情報を、その命令を保持しているIBのエントリのSフィールドに書き込むと共に、命令フェッチ・ユニットに通知する。
▲4▼完了ステージ
ある命令が完了できるためには、プログラム上の順番でその命令よりも前にある命令が全て完了していなくてはならない。
IBのヘッダ・ポインタで示されるエントリにおいて、Sフィールドが実行済み/正常終了である、あるいはそうなると、そのエントリに書き込まれている命令の内容に基づいてCPS及びCRFを操作し、ヘッダ・ポインタの値に1を加える。
CPSは、命令がデコード・発行された際のAPSの動作を再現すべく操作される。すなわち、ポップ/プッシュ操作を含む命令の場合には、有効なソース・フィールドの内容と同じものを順にCPSからポップし、有効なデスティネーション・フィールドの内容を順にCPSにプッシュする。スタック上でコピーを作成することのないオペランド・スタックの操作命令の場合には、オペランド・スタックに対して行うべき操作をCPSに対して全く同様に行えばよい。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、有効なソース・フィールド及び有効なデスティネーション・フィールドを参照して、その命令のデコード・発行の際にAPSに対して行われた操作がCPSにおいて再現される。
本実施例においては、上述のCPSに対する操作に伴い、エントリ・アドレスがCPSからポップされるCRFのエントリでは、BBフィールドを0に変更し、そのエントリ・アドレスをFLに登録する。
IBのヘッダ・ポインタで示されるエントリにおいて、ストア命令が書き込まれている場合には、Sフィールドがストア実行可能である、あるいはそうなると、LSUに実際のストアの実行を依頼する。こうすれば、データがプログラム上の順番でストアされることが保証できる。さらに、CPS及びCRFに対する操作を上と同様に行い、ヘッダ・ポインタの値に1を加える。
以上のように、ヘッダ・ポインタの値に1が加えられることによって、キューから除外されたIBのエントリに保持されていた命令は、完了したことになる。その命令よりも前に発行された命令はすべて完了しているので、命令の完了はin-orderで行われることになる。
IBのヘッダ・ポインタで示されるエントリにおいて、Sフィールドが例外事象発生である、あるいはそうなった場合には、その時点におけるCPS及びCRFによって、プログラムがin-orderで実行された場合の例外発生時点の状態が構成されるので、正確な例外処理が可能である。例外事象の発生した命令以降に発行された命令を全てキャンセルするには、キャンセルされるべき命令が書き込まれているIBのエントリの有効なデスティネーション・フィールドに示されるCRFのエントリの各々に対して、そのBBフィールドを0に戻し、そのエントリ・アドレスをFLに登録することによって、割り付けを解除し、ヘッダ・ポインタの値に1を加えたものをトレイル・ポインタに書き込むことによって、キャンセルされるべき命令を保持しているIBのエントリを全てキューから除外すればよい。
以上が、本発明実施例の計算機システムの全般的な動作である。
ついで、具体的な動作例について説明する。いま、本実施例の計算機システムで、以下のようなプログラムを実行することを考えよう。
dload[A] (変数名[A]に対応する倍精度浮動小数点データのロード)
dload[B] (変数名[B]に対応する倍精度浮動小数点データのロード)
dadd (倍精度浮動小数点データ間の加算)
d2f (倍精度浮動小数点データの単精度浮動小数点データへの変換)
fload[T] (変数名[T]に対応する単精度浮動小数点データのロード)
swap (スタック上の最上位の2語を入れ替える)
dup_x1 (スタックトップの語のコピーを作成し、先頭から3語目に割り込ませる)
fsub (単精度浮動小数点データ間の減算)
fdiv (単精度浮動小数点データ間の除算)
fstore[X] (スタックトップにある単精度浮動小数点データの変数名[X]に対応する格納域へのストア)
以上のプログラムは、X=(A+B)/{T-(A+B)}の計算を行うものであるが、AとBのデータが倍精度で与えられ、この間の加算を倍精度のまま実行して、得られた加算データを単精度に変換して、以降は単精度で計算を行う、というものである。
第6図〜第14図は、本実施例の計算機システムにおいて、上記プログラムを処理する際の動作をサイクル毎に示した説明図であり、以下ではこの図をもとに詳細な動作を説明する。第6図〜第14図において、CRF6及びIB5の各エントリの構成は、それぞれ第3図、第5図のものと同じである。第6図〜第14図で空白となっている箇所は、そのフィールドの内容に留意する必要が無いことを意味する。時系列で各構成要素の内容を示すために、各部の符号の後尾にハイフンと各サイクルに対応する数字を添えている。また、第6図〜第14図において、APS、CPS、IB及びCRFの各エントリは下から順に0、1、2、〜のようにアドレスが付けられているものとする。
CDBは3本のバスで構成されているものとする。レイテンシが2サイクル以下の演算命令は演算ユニット0で、それ以外の演算命令は演算ユニット1で実行されるものとする。
本動作例においては、説明を簡単にするため、変数データは全てデータ・バッファに保持されており、CRFとデータ・バッファの間のSpill/Fillの動作は行わないものとする。従って、BP_OF_PSの値は終始0である。
また、本動作例においては、当初、APS、CPS、IB及びCRFは初期化されており、FLにCRFの全てのエントリのアドレスが順に〈0〉,〈1〉,〈2〉,〈3〉・・・・と書き込まれていて、この順で取り出されるものとする。
以下に、各サイクルにおける動作を、(A)命令デコード・発行、(B)実行及び(C)完了の各ステージに分けて詳細に説明する。
(1−A)第1サイクルの命令デコード・発行ステージ
命令dload[A]のデコード・発行を行う。倍長語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFの2エントリ6(0)、6(1)をそのデータを保持すべく割り付け、そのエントリのアドレス〈0〉,〈1〉をAPSにプッシュし、APSは3−1のようになる。
CRFの6(0)、6(1)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込み、CRFは6−1のようになる。ここで、本動作例においては、終始分岐タグとして命令デコード・発行ユニットから0が送られてくるものとする。
トレイル・ポインタの値は0であるので、IBのエントリ5(0)に上記命令の内容を書き込み、IBは5−1のようになる。この際、APSにプッシュされるCRFのエントリのアドレス〈0〉,〈1〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え1にする。ここで、本動作例においては、IBのSフィールドには、命令が未実行であれば0、実行済み/正常終了あるいはストア命令におけるストア実行可能であれば1が書き込まれるものとする。
IBのエントリ5(0)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス0と共に、LSUの空いているRS831に書き込む。
(1−B)第1サイクルの実行ステージ
実行ステージの動作としては何も行われない。
(1−C)第1サイクルの完了ステージ
当初のIBのヘッダ・ポインタが示すエントリ5(0)において、命令はまだ書き込まれていないため、完了ステージの動作としては何も行われない。
(2−A)第2サイクルの命令デコード・発行ステージ
命令dload[B]のデコード・発行を行う。倍長語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFの2エントリ6(2)、6(3)をそのデータを保持すべく割り付け、そのエントリのアドレス〈2〉,〈3〉をAPSにプッシュし、APSは3−2のようになる。
CRFの6(2)、6(3)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込み、CRFは6−2のようになる。
トレイル・ポインタの値は1であるので、IBのエントリ5(1)に上記命令の内容を書き込み、IBは5−2のようになる。この際、APSにプッシュされるCRFのエントリのアドレス〈2〉,〈3〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え2にする。
IBのエントリ5(1)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス1と共に、LSUの空いているRS832に書き込む。
(2−B)第2サイクルの実行ステージ
LSUの実行部はRS831から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Aの2語のデータを読み出す。
(2−C)第2サイクルの完了ステージ
5−1の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(3−A)第3サイクルの命令デコード・発行ステージ
命令daddのデコード・発行を行う。オペランド・スタックから4語のソース・データをポップして演算を行い、倍長語の演算結果をプッシュする演算命令であるので、APSから〈0〉,〈1〉,〈2〉,〈3〉をポップし、FLに登録されているフリーなCRFの2エントリ6(4)、6(5)を演算結果を保持すべく割り付け、そのエントリのアドレス〈4〉,〈5〉をAPSにプッシュし、APSは3−3のようになる。
CRFの6(4)、6(5)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は2であるので、IBのエントリ5(2)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈0〉,〈1〉,〈2〉,〈3〉を各々第1〜第4ソース・フィールドに、APSにプッシュされる〈4〉,〈5〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え3にする。
IBのエントリ5(2)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス2と共に、演算ユニット0の空いているRS801に書き込む(daddの演算のレイテンシは2サイクルであるとする)。
また、6−2の状態にあるCRFの6(0)、6(1)、6(2)、6(3)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(3−B)第3サイクルの実行ステージ
LSUは、データ・バッファから読み出した変数Aのデータを構成する2語A_1、A_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈0〉,〈1〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(0)、6(1)にデータの書き込みを行い、WCFフィールドを1に変更する。また、同じタイミングでIBのエントリ5(2)に書き込まれるものと同じ内容が書き込まれる演算ユニット0のRS801においても、CRFのエントリのアドレス〈0〉,〈1〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(0)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(0)のSフィールドが正常終了を意味する1に変更される。
以上の動作と並行して、LSUの実行部はRS832から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Bの2語のデータを読み出す。
(3−C)第3サイクルの完了ステージ
5−2の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(4−A)第4サイクルの命令デコード・発行ステージ
命令d2fのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして変換演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈4〉,〈5〉をポップし、FLに登録されているフリーなCRFのエントリ6(6)を演算結果を保持すべく割り付け、そのエントリのアドレス〈6〉をAPSにプッシュし、APSは3−4のようになる。
CRFのエントリ6(6)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は3であるので、IBのエントリ5(3)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈4〉,〈5〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈6〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え4にする。
IBのエントリ5(3)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス3と共に、演算ユニット0の空いているRS802に書き込む(d2fの演算のレイテンシは2サイクルであるとする)。
また、6−3の状態にあるCRFの6(4)、6(5)の各エントリWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(4−B)第4サイクルの実行ステージ
LSUは、データ・バッファから読み出した変数Bのデータを構成する2語B_1、B_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈2〉,〈3〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(2)、6(3)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(2)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS801においても、CRFのエントリのアドレス〈2〉,〈3〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(1)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(1)のSフィールドが正常終了を意味する1に変更される。
(4−C)第4サイクルの完了ステージ
5−3の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(5−A)第5サイクルの命令デコード・発行ステージ
命令fload[T]のデコード・発行を行う。1語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFのエントリ6(7)をそのデータを保持すべく割り付け、そのエントリのアドレス〈7〉をAPSにプッシュし、APSは3−5のようになる。
CRFのエントリ6(7)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は4であるので、IBのエントリ5(4)に上記命令の内容を書き込む。この際、APSにプッシュされるCRFのエントリのアドレス〈7〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え5にする。
IBのエントリ5(4)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス4と共に、LSUの空いているRS831に書き込む。
(5−B)第5サイクルの実行ステージ
演算命令daddの内容が書き込まれているRS801において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
(5−C)第5サイクルの完了ステージ
5−4の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドが1となったので、5(0)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(0)のデスティネーション・フィールドに書き込まれている〈0〉,〈1〉をCPSにプッシュし、CPSは4−5のようになる。さらに、ヘッダ・ポインタの値に1を加え1とし、これで、5(0)の命令は完了したことになる。
(6−A)第6サイクルの命令デコード・発行ステージ
命令swapのデコード・発行を行う。オペランド・スタック上の最上位の2語を入れ替える命令であるので、同様な操作をAPSに対して行い、APSは3−6のようになる。
トレイル・ポインタの値は5であるので、IBのエントリ5(5)に上記命令の内容を書き込む。この際、命令swapは、スタック上でコピーを作成することのないオペランド・スタックの操作命令であるので、Sフィールドは実行済みを意味する1とする。さらに、トレイル・ポインタの値に1を加え6にする。
(6−B)第6サイクルの実行ステージ
LSUの実行部はRS831から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Tのデータを読み出す。
(6−C)第6サイクルの完了ステージ
5−5の状態にあるIBのヘッダ・ポインタが示すエントリ5(1)において、Sフィールドが1となったので、5(1)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(1)のデスティネーション・フィールドに書き込まれている〈2〉,〈3〉をCPSにプッシュし、CPSは4−6のようになる。さらに、ヘッダ・ポインタの値に1を加え2とし、これで、5(1)の命令は完了したことになる。
(7−A)第7サイクルの命令デコード・発行ステージ
命令dup_x1のデコード・発行を行う。命令dup_x1は、ワード・スタックが、(右方向に成長するものとして)...., word1, word2のような状態であるとき、これを...., word2, word1, word2と変えるような、スタック上で1語のコピーを作成するオペランド・スタックの操作命令であるので、FLに登録されているフリーなCRFのエントリ6(8)をコピー・データを保持すべく割り付け、3−6のように下から〈7〉,〈6〉となっている状態のAPSを3−7のように〈8〉,〈7〉,〈6〉と変える。
CRFのエントリ6(8)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は6であるので、IBのエントリ5(6)に上記命令の内容を書き込む。この際、コピー元となるデータを保持すべく割り付けられているCRFのエントリのアドレス〈6〉を第1ソース・フィールドに、コピー・データを保持すべく新たに割り付けられるCRFのエントリのアドレス〈8〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え7にする。
IBのエントリ5(6)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス6と共に、演算ユニット1の空いているRS811に書き込む。
また、6−6の状態にあるCRFのエントリ6(6)のWCFフィールド及びデータ・フィールドが読み出され、この場合、WCFが0であるので、データ転送の必要はない。
(7−B)第7サイクルの実行ステージ
演算ユニット0は、5(2)の演算命令の実行を終了しており、演算結果を構成する2語(A+B)_1、(A+B)_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈4〉,〈5〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(4)、6(5)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(3)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS802においても、CRFのエントリのアドレス〈4〉,〈5〉に対応するデータの書き込みが行われる。
LSUは、データ・バッファから読み出した変数Tのデータを、デスティネーションであるCRFのエントリのアドレス〈7〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(7)にデータの書き込みを行い、WCFフィールドを1に変更する。
以上で、IBの5(2)、5(4)の各エントリに書き込まれている命令の実行が共に正常に終了するので、次のサイクルにおいて、5(2)及び5(4)のSフィールドが正常終了を意味する1に変更される。
(7−C)第7サイクルの完了ステージ
5−6の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(8−A)第8サイクルの命令デコード・発行ステージ
命令fsubのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈7〉,〈6〉をポップし、FLに登録されているフリーなCRFのエントリ6(9)を演算結果を保持すべく割り付け、そのエントリのアドレス〈9〉をAPSにプッシュし、APSは3−8のようになる。
CRFのエントリ6(9)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は7であるので、IBのエントリ5(7)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈7〉,〈6〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈9〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え8にする。
IBのエントリ5(7)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス7と共に、演算ユニット0の空いているRS801に書き込む(fsubの演算のレイテンシは2サイクルであるとする)。
また、6−7の状態にあるCRFの6(7)、6(6)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、6(7)のWCFが1であるので、次のサイクルにおいて、エントリ・アドレス〈7〉とデータTがCDBに載せられる。
(8−B)第8サイクルの実行ステージ
演算命令d2fの内容が書き込まれているRS802において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
(8−C)第8サイクルの完了ステージ
5−7の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(9−A)第9サイクルの命令デコード・発行ステージ
命令fdivのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈8〉,〈9〉をポップし、FLに登録されているフリーなCRFのエントリ6(10)を演算結果を保持すべく割り付け、そのエントリのアドレス〈10〉をAPSにプッシュし、APSは3−9のようになる。
CRFのエントリ6(10)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は8であるので、IBのエントリ5(8)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈8〉,〈9〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈10〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え9にする。
IBのエントリ5(8)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス8と共に、演算ユニット1の空いているRS812に書き込む(fdivの演算のレイテンシは10サイクルであるとする)。
また、6−8の状態にあるCRFの6(8)、6(9)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(9−B)第9サイクルの実行ステージ
(8−A)で述べたように、エントリ・アドレス〈7〉とデータTがCDBに載せられ、これに基づき、IBのエントリ5(7)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS801においても、CRFのエントリのアドレス〈7〉に対応するデータの書き込みが行われる。
(9−C)第9サイクルの完了ステージ
5−8の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドが1となったので、5(2)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(2)のソース・フィールドに書き込まれている〈0〉,〈1〉,〈2〉,〈3〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈4〉,〈5〉をCPSにプッシュし、CPSは4−9のようになる。エントリ・アドレスがCPSからポップされるCRFの6(0)、6(1)、6(2)、6(3)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈0〉,〈1〉,〈2〉,〈3〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え3とし、これで、5(2)の命令は完了したことになる。
(10−A)第10サイクルの命令デコード・発行ステージ
命令fstore[X]のデコード・発行を行う。スタックトップにある1語のデータのストア命令であるので、APSから〈10〉をポップし、APSは3−10のようになる。
トレイル・ポインタの値は9であるので、IBのエントリ5(9)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈10〉を第1ソース・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え10にする。
IBのエントリ5(9)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス9と共に、LSUの空いているRS831に書き込む。次のサイクルにおいて、ストア・バッファに変数名[X]に対応するストア・アドレスが書き込まれる。
また、6−9の状態にあるCRFのエントリ6(10)のWCFフィールド及びデータ・フィールドが読み出され、この場合、WCFが0であるので、データ転送の必要はない。
(10−B)第10サイクルの実行ステージ
演算ユニット0は、5(3)の変換演算命令の実行を終了しており、1語の演算結果(A+B)を、デスティネーションであるCRFのエントリのアドレス〈6〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(6)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(6)、5(7)に書き込まれているものとそれぞれ同じ内容が書き込まれている演算ユニット1のRS810及び演算ユニット0のRS801においても、CRFのエントリのアドレス〈6〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(3)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(3)のSフィールドが正常終了を意味する1に変更される。
(10−C)第10サイクルの完了ステージ
5−9の状態にあるIBのヘッダ・ポインタが示すエントリ5(3)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
以下では、特に記述すべき動作内容のない場合は、実行ステージであれ完了ステージであれ項目を省くことにする。
(11−B)第11サイクルの実行ステージ
演算命令fsubの内容が書き込まれているRS801において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
スタック上でコピーを作成するようなオペランド・スタックの操作命令dup_x1の内容が書き込まれているRS811において、ソース・データが書き込まれたので、そのデータ(A+B)を、対応関係にあるデスティネーションであるCRFのエントリのアドレス〈8〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(8)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(8)に書き込まれているものと同じ内容が書き込まれている演算ユニット1のRS812においても、CRFのエントリのアドレス〈8〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(6)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(6)のSフィールドが正常終了を意味する1に変更される。
(12−C)第12サイクルの完了ステージ
5−11の状態にあるIBのヘッダ・ポインタが示すエントリ5(3)において、Sフィールドが1となったので、5(3)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(3)のソース・フィールドに書き込まれている〈4〉,〈5〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈6〉をCPSにプッシュし、CPSは4−12のようになる。エントリ・アドレスがCPSからポップされるCRFの6(4)、6(5)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈4〉,〈5〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え4とし、これで、5(3)の命令は完了したことになる。
(13−B)第13サイクルの実行ステージ
演算ユニット0は、5(7)の演算命令の実行を終了しており、1語の演算結果T-(A+B)を、デスティネーションであるCRFのエントリのアドレス〈9〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(9)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(8)に書き込まれているものと同じ内容が書き込まれている演算ユニット1のRS812においても、CRFのエントリのアドレス〈9〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(7)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(7)のSフィールドが正常終了を意味する1に変更される。
(13−C)第13サイクルの完了ステージ
5−12の状態にあるIBのヘッダ・ポインタが示すエントリ5(4)において、Sフィールドが1であるので、5(4)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(4)のデスティネーション・フィールドに書き込まれている〈7〉をCPSにプッシュし、CPSは4−13のようになる。さらに、ヘッダ・ポインタの値に1を加え5とし、これで、5(4)の命令は完了したことになる。
(14−B)第14サイクルの実行ステージ
演算命令fdivの内容が書き込まれているRS812において、必要なソース・データが全て揃ったので、その内容が演算ユニット1の実行部に渡され、演算が開始される。
(14−C)第14サイクルの完了ステージ
5−13の状態にあるIBのヘッダ・ポインタが示すエントリ5(5)において、Sフィールドが1であるので、5(5)の内容に基づいてCPS(及びCRF)を操作する。すなわち、(6−A)におけるAPSの動作が再現され、CPSは4−14のようになる。さらに、ヘッダ・ポインタの値に1を加え6とし、これで、5(5)の命令は完了したことになる。
(15−C)第15サイクルの完了ステージ
5−14の状態にあるIBのヘッダ・ポインタが示すエントリ5(6)において、Sフィールドが1であるので、5(6)の内容に基づいてCPS(及びCRF)を操作する。すなわち、(7−A)におけるAPSの動作が再現され、CPSは4−15のようになる。さらに、ヘッダ・ポインタの値に1を加え7とし、これで、5(6)の命令は完了したことになる。
(16−C)第16サイクルの完了ステージ
5−15の状態にあるIBのヘッダ・ポインタが示すエントリ5(7)において、Sフィールドが1であるので、5(7)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(7)のソース・フィールドに書き込まれている〈7〉,〈6〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈9〉をCPSにプッシュし、CPSは4−16のようになる。エントリ・アドレスがCPSからポップされるCRFの6(7)、6(6)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈7〉,〈6〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え8とし、これで、5(7)の命令は完了したことになる。
(24−B)第24サイクルの実行ステージ
演算ユニット1は、5(8)の演算命令の実行を終了しており、1語の演算結果(A+B)/{T-(A+B)}を、デスティネーションであるCRFのエントリのアドレス〈10〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(10)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(9)に書き込まれているものと同じ内容が書き込まれているLSUのRS831においても、CRFのエントリのアドレス〈10〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(8)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(8)のSフィールドが正常終了を意味する1に変更される。
(25−B)第25サイクルの実行ステージ
ストア命令fstoreの内容が書き込まれているRS831において、ストア・データが書き込まれたので、そのデータをストア・バッファに書き込む。
以上で、IBのエントリ5(9)に書き込まれているストア命令に関して、ストア・アドレスとストア・データのストア・バッファへの書き込みが共に終了するので、次のサイクルにおいて、5(9)のSフィールドがストア実行可能を意味する1に変更される。
(26−C)第26サイクルの完了ステージ
5−25の状態にあるIBのヘッダ・ポインタが示すエントリ5(8)において、Sフィールドが1となったので、5(8)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(8)のソース・フィールドに書き込まれている〈8〉,〈9〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈10〉をCPSにプッシュし、CPSは4−26のようになる。エントリ・アドレスがCPSからポップされるCRFの6(8)、6(9)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈8〉,〈9〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え9とし、これで、5(8)の命令は完了したことになる。
(27−C)第27サイクルの完了ステージ
5−26の状態にあるIBのヘッダ・ポインタが示すエントリ5(9)においては、ストア命令が書き込まれており、Sフィールドが1となったので、LSUにデータ・バッファへのストアの実行を依頼する。さらに、5(9)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(9)のソース・フィールドに書き込まれている〈10〉をCPSからポップし、CPSは4−27のようになる。エントリ・アドレスがCPSからポップされるCRFのエントリ6(10)では、BBフィールドを0に変更する。CRFのエントリのアドレス〈10〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え10とし、これで、5(9)の命令は完了したことになる。
以上で、本実施例の計算機システムにおいてX=(A+B)/{T-(A+B)}の計算が完了したことになる。
本発明の計算機システムにおいては、分岐予測に基づく投機的実行を実現することができる。APS履歴ファイルは、投機的実行を可能にするために具備されるものである。条件分岐命令がデコードされるごとに、APS履歴ファイルの1エントリにAPSの全エントリ及びPP_OF_APSの内容を書き込むようになっている。以下に、本実施例の計算機システムにおいて、分岐予測に基づく投機的実行がどのように行われるかについて説明する。
前述のように、本実施例の計算機システムにおいては、命令デコード・発行ステージにおいて、命令をデコードして、命令の内容に応じてAPS及びCRFを操作すると共に、命令の内容をIB及び、必要な場合には、適切な機能ユニットの空いているRSに書き込むようになっている。初期状態から命令が流れ始め最初の条件分岐命令がデコードされるまでの間、発行される命令に分岐タグとして0を付し、この分岐タグ0を、命令の内容が書き込まれるIBのエントリ(と機能ユニットのRS)のBTフィールド、及び、割り付けられるCRFのエントリのCフィールドに書き込む。
最初の条件分岐命令がデコードされ分岐予測が行われる際に、分岐時点の状態を保存するために、APSの全エントリ及びPP_OF_APSの内容をAPS履歴ファイルのアドレス0のエントリに書き込む。上記の分岐予測に基づいた命令の流れにおいては、分岐タグとして1を付し、IB(、機能ユニットのRS)及びCRFの設定を行う。
2つ目の条件分岐命令がデコードされた時に、最初の条件分岐命令が未確定である場合、あるいは確定して予想が当たっていた場合には、APSの全エントリ及びPP_OF_APSの内容をAPS履歴ファイルのアドレス1のエントリに書き込む。2段目の分岐予測に基づいた命令の流れにおいては、分岐タグとして2を付し、IB(、機能ユニットのRS)及びCRFの設定を行う。
分岐予測が当たり続ければ以後同様に処理が進み、APS履歴ファイルへの書き込みはアドレス順に行われる。また、APS履歴ファイルのアドレスnのエントリに書き込みが行われてから次に書き込みが行われるまでの間に発行される命令には分岐タグとしてn+1を付すものとする。
分岐予測が外れた場合には、その条件分岐命令以降に発行された命令に付された分岐タグをもとに、各機能ユニットで実行中あるいはRSに保持されている命令をキャンセルし、CRFにおいてCフィールドで分岐タグを照合してその一致する全てのエントリの割り付けを解除し(BBフィールドを0に変更し、エントリ・アドレスをFLに登録する)、IBにおいてその条件分岐命令以降にキューに加えられたエントリを除外する(トレイル・ポインタの値をその条件分岐命令が書き込まれているエントリの次のアドレスに書き換える)。さらに、同じエントリ・アドレスにあるCPSのエントリとその内容が一致しないAPSの各エントリ及びPP_OF_APSに、その条件分岐命令がデコードされた際にAPS履歴ファイルに書き込まれた内容をコピーして、正しい位置の命令からデコード・発行を再開する。
以上のように、本発明の計算機システムにおいては、APS履歴ファイルを用いることによって、条件分岐命令がデコードされ分岐予測が行われる各々の時点の状態を再構成することができるので、分岐予測に基づく投機的実行が可能である。
以上では、説明を簡単にするため、1サイクルで同時にデコード・発行/完了できる命令は高々1つまでとして説明してきた。本発明の計算機システムにおいては、同時に複数の命令をデコード・発行/完了できる構成とすることが可能である。すなわち、FLがFIFOキューの構成となっていれば、割り付けのためにフリーな(空いている)CRFのエントリのアドレスをFLから取り出す順番は決まっており、各命令における何語ポップし何語プッシュするかというようなスタック操作の内容を把握して、同時に複数の命令をデコード・発行することができる。また、命令の完了は、基本的には、IBの書き込みの内容をもとに、命令がデコード・発行された際のAPSの動作を再現すべくCPSを操作し、エントリ・アドレスがCPSからポップされるCRFのエントリの割り付けを解除すればよいので、同時に複数の命令を完了できる構成とすることも可能である。
同時にデコード・発行/完了できる命令の数を多くするほど、命令デコード・発行ユニットその他の制御回路が複雑になると共に、APS、CPS、IB、CRFやデータ・バッファを構成する各レジスタ・ファイルのポートの数や演算ユニットの数、さらにCDBを構成するバスの数などの点で、より多量のハードウェアが必要となる。
本発明の計算機システムにおいては、命令デコード・発行ステージの前段において、同時にデコード・発行する複数の命令の内容を統合した形式に変換するような構成とすることも可能である。あるいは、変換済のコードを命令キャッシュに蓄えておくような構成としてもよい。
たとえば、1サイクル当り2命令までデコード・発行できるような構成をとる場合、前述のX=(A+B)/{T-(A+B)}を計算するプログラムは第15図の図表に示されるような内容に変換される。第15図の図表の各段には、同時にデコード・発行される2つの命令に基づく、PP_OF_APSの増分、APSの操作内容及びIBの2エントリに書き込まれるべき命令の内容を示している。ここでは、命令発行前のAPSの内容を.....s2, s1, s0(右端がスタックトップ)、FIFOキューの構成となっているフリー・リストの内容を(取り出される順に)f1, f2, f3.....として記述しており、命令発行時にそれぞれ対応するCRFのエントリ・アドレスに置き換えられるようになっている。PP_OF_APSの増分の欄で示されるようにAPSのスタックトップの位置が移動するが、APSの操作内容の欄では、この移動後のスタックトップの位置が右端に対応している。また、'NC'は「変化なし(No Change)」を意味する。
本発明の計算機システムは、上述の実施例に限られるものではなく、細部の構成の異なる様々な実施例が存在する。たとえば、次のようなものをあげることができる。
▲1▼整数データ用/浮動小数点データ用、あるいは32ビット・データ用/64ビット・データ用というようにデータ型別にCRF及びフリー・リストを備え、さらに、それぞれに対応してひと揃いの実行ユニットを設けたもの。
▲2▼複数組の前進ポインタ・スタックと完了ポインタ・スタックを設けた構成とし、メソッドの呼び出し/メソッドからの復帰の際に、用いる前進ポインタ・スタックと完了ポインタ・スタックの組を変更するようにしたもの。
▲3▼複数組の前進ポインタ・スタック、完了ポインタ・スタック、命令バッファ、及びデータ・バッファを設け、複数のスレッドを並行して処理できる構成としたもの。
その他にも、レジスタ・ベースのスーパースカラ・アーキテクチャにおいて考えられる様々な変形の多くが、本発明に基づく計算機システムにおいても適用できる。
命令セットがスタック型の命令及びレジスタ型の命令を共に含むような、本発明に基づく計算機システムも実現可能である。すなわち、前進ポインタ・スタック及び完了ポインタ・スタックに加えて、各論理レジスタにそれぞれ対応して設けられた各エントリに統合レジスタ・ファイルのエントリ・アドレスが書き込まれるようになっている前進レジスタ・マッピング・テーブル及び完了レジスタ・マッピング・テーブルを具備する構成とし、スタック型の命令に関しては前進/完了ポインタ・スタックを操作し、レジスタ型の命令に関しては前進/完了レジスタ・マッピング・テーブルをアクセスするようにする。この場合、前進ポインタ・スタック履歴ファイルの代わりに、各々のエントリに前進ポインタ・スタック及び前進レジスタ・マッピング・テーブル双方の内容が書き込まれるようになっている前進履歴ファイルを具備する必要がある。
産業上の利用可能性
以上のように、本発明の計算機システムは、正確な例外処理を保証しつつ、スタックマシンの機械語で記述されたプログラムをout-of-orderで処理するものであるが、複数の機能ユニットによる並列処理やそれらのパイプライン化によって効率的な処理を行うことが可能であるという利点がある。
また、分岐予測に基づく投機的実行や、1サイクル当り複数命令のデコード・発行/完了の可能な構成とすることにより、さらなる高速化が可能である。
本発明は、スタックマシンの機械語で記述されたプログラムを高速で処理する新規な構成の計算機システムに関するものである。
背景技術
従来、スタックマシンにおいては、命令の実行は、基本的にプログラム上の順序通り(in-order)に行われるものであった。すなわち、スタックマシンにおける演算命令は、オペランド・スタックからソース・データをポップし、演算を実行し、その演算結果をオペランド・スタックにプッシュするというような動作を指示するものであるが、このような命令の連鎖として書かれたプログラムを逐次的に実行するのである。
このような従来のスタックマシンにおいては、命令をプログラム上の順序通り(in-order)に実行するので、制御構造が単純なもので済むという利点があるが、処理速度が制約を受けるという問題点があった。
そこで、スタックマシンの機械語で記述されたプログラムをout-of-orderで処理するような計算機方式が考案された。例えば、日本特公平2−260082号、米国特許第5522051号や、米国特許第5333320号及び米国特許第5765014号におけるプロセッサ要素がある。これらの明細書に示されるプロセッサは、処理性能の向上という点で十分ではない上に、正確な例外処理を保証する上で問題があった。
本発明は、上記問題点を解決するため創案されたものであり、正確な例外処理を保証しつつ、スタックマシンの機械語で記述されたプログラムをout-of-orderでより効果的に処理する計算機システムを提供することを目的としている。
発明の開示
本発明による計算機システムは、データ・キャッシュと、データ・バッファと、各々のエントリにデータが書き込まれるようになっている統合レジスタ・ファイルと、各々のエントリに統合レジスタ・ファイルのエントリのアドレスが書き込まれるようになっている前進ポインタ・スタック及び完了ポインタ・スタックと、各々のエントリに個々の命令の内容が書き込まれるようになっているFIFOキューの構成となっている命令バッファと、演算を実行するようになっている演算ユニットとデータ・バッファ及びデータ・キャッシュにアクセスできるようになっているロード/ストア・ユニットを含む機能ユニット群と、統合レジスタ・ファイル及び機能ユニット群の間でデータを統合レジスタ・ファイルのエントリのアドレスと共に分配するようになっている共通データ・バスとを具備する。上記機能ユニットの各々は、適当な数のリザベーション・ステーションを備える。
従来のスタックマシンにおいて、スタックが......, word1, word2, word3, word4(右端がスタックトップ)となっている状態は、本発明による計算機システムにおいて、ポインタ・スタックが......,〈a〉,〈b〉,〈c〉,〈d〉(右端がスタックトップ)で、エントリ・アドレスが〈a〉,〈b〉,〈c〉及び〈d〉である統合レジスタ・ファイルの各エントリに、それぞれword1, word2, word3及びword4が保持されている状態に対応する。
本発明の計算機システムにおいては、命令がデコードされるごとに、命令の内容に応じて前進ポインタ・スタック及び統合レジスタ・ファイルを操作すると共に、命令の内容を命令バッファ及び、必要な場合には、適切な機能ユニットの空いているリザベーション・ステーションに書き込むようになっている。この際、命令に規定されているオペランド・スタックに対するスタック操作が、前進ポインタ・スタックに対して同様に適用される。ここで、1語のデータのオペランド・スタックへのプッシュ操作を、本発明の計算機システムにおいてエミュレートするには、そのデータを保持すべく統合レジスタ・ファイルの空いている1エントリを割り付け、そのエントリのアドレスを前進ポインタ・スタックにプッシュすればよい。
即ち、デコードされた命令においてオペランド・スタックに対するポップ操作が規定されている場合には、ポップすべき語数と同じ数だけ統合レジスタ・ファイルのエントリのアドレスを前進ポインタ・スタックからポップする。デコードされた命令においてオペランド・スタックに対するプッシュ操作が規定されている場合には、プッシュすべき語数と同じ数だけ統合レジスタ・ファイルの空いているエントリを割り付け、上記割り付けた統合レジスタ・ファイルのエントリのアドレスを前進ポインタ・スタックにプッシュする。さらに、デコードされた命令の内容を、ポップ/プッシュ操作を伴う命令の場合にはポップ/プッシュされる統合レジスタ・ファイルのエントリのアドレスと共に、命令バッファに書き込むようになっている。機能ユニットによる実行の必要な命令の場合には、命令バッファに書き込まれる命令の内容を、適切な機能ユニットの空いているリザベーション・ステーションにも書き込むようになっている。
前進ポインタ・スタックからエントリ・アドレスがポップされる統合レジスタ・ファイルのエントリの各々の内容が読み出され、データが既に書き込まれている場合には、後で、エントリ・アドレスとデータが共通データ・バスに載せられるようになっている。
リザベーション・ステーションに書き込まれた命令に関して、原則として次のような動作が順次行われる。各々のリザベーション・ステーションで、そこに書き込まれているソース・データを保持すべき統合レジスタ・ファイルのエントリのアドレスと共通データ・バスを通じて送られてくるものが比較され、一致すればデータが取り込まれる。必要なソース・データが揃った後に、その命令の実行が開始される。デコードの際前進ポインタ・スタックに統合レジスタ・ファイルのエントリのアドレスがプッシュされるような命令の場合、機能ユニットでの実行の結果得られたデータを該プッシュされた統合レジスタ・ファイルのエントリのアドレスと共に共通データ・バスに載せる。統合レジスタ・ファイルにおいては、共通データ・バスを通じて送られてくる内容に基づきデータの書き込みを行う。
命令バッファにおけるキューの先頭のエントリに保持されている命令の完了が可能である、あるいはそうなると、そのキューの先頭のエントリの内容に基づき、保持されている命令がデコードされた際の前進ポインタ・スタックの動作を再現すべく完了ポインタ・スタックを操作し、キューからその先頭のエントリを除外し、ポップ操作によって完了ポインタ・スタックにおけるアドレスの保持が無くなった統合レジスタ・ファイルのエントリの割り付けを解除するようになっている。
【図面の簡単な説明】
第1図は、本発明にかかる好ましい計算機システムの基本構成を示すブロック図、第2図は、前進ポインタ・スタック及び完了ポインタ・スタックの構成を示す図、第3図は統合レジスタ・ファイルの各々のエントリの詳細な構成を示す図、第4図は、命令バッファの構成を示す図、第5図は、命令バッファの各々のエントリの詳細な構成を示す図、第6図〜第14図は、本発明の一実施例における一動作例の、サイクル毎の前進ポインタ・スタック、完了ポインタ・スタック、命令バッファ及び統合レジスタ・ファイルの内容を具体的に示した説明図、第15図は、本発明の計算機システムが1サイクル当り2命令までデコードできるような構成をとる場合に、プログラムがどのように変換されるかを具体的に示す図表である。
発明を実施するための最良の形態
以下に、本発明にかかる好ましい計算機システムについて、図面を参照しながら説明する。なお、以下に述べる本発明による計算機システムの実施例は、Java Virtual Machine(Java VM)で規定されるスタックマシンの基本的な命令をハードウエアで実行するものである。すなわち、データ語長を32ビットとして、これを単位にロード/ストア及び算術論理演算等の演算を行う。従って、例えば、倍長語の間での算術演算は、2語づつ合せて4語のソース・データをもとに2語の演算結果を生ずる。
従来のスタックマシンにおける、語の単位でデータがプッシュ/ポップされるようになっているスタックは、後述するポインタ・スタックと区別するために、以降では、ワード・スタックと呼ぶことにする。
Java VMにおいては、ワード・スタックには、メソッドが呼び出されるごとにフレームが積まれる。各フレームで、下部はローカル変数やパラメータの格納域、上部はオペランド・スタックとなっている。
Java VMにはもともとハードウェアで実行することを想定していない複雑な命令が含まれるが、以下に述べる本発明による計算機システムの実施例は、次のような基本的な命令をハードウェアで実行するものとする。
(a)即値データのオペランド・スタックへのプッシュ命令
bipush, sipush, aconst_null, iconst_m1, iconst_<i>, fconst_<f>, lconst_<l>, dconst_<d>
(b)変数データのオペランド・スタックへのロード命令
ldc1, ldc2, iload, iload_<n>, fload, fload_<n>, aload, aload_<n>, ldc2w, lload, lload_<n>, dload, dload_<n>, iaload, laload, faload, daload, aaload, baload, caload, saload
(c)オペランド・スタック上のデータの変数へのストア命令
istore, istore_<n>, fstore, fstore_<n>, astore, astore_<n>, lstore, lstore_<n>, dstore, dstore_<n>, iastore, lastore, fastore, dastore, aastore, bastore, castore, sastore
(d)演算命令
(d−1)算術演算命令
iadd, ladd, fadd, dadd, isub, lsub, fsub, dsub, imul, lmul, fmul, dmul, idiv, ldiv, fdiv, ddiv, irem, lrem, frem, drem, ineg, lneg, fneg, dneg
(d−2)論理演算命令
ishl, ishr, iushr, lshl, lshr, lushr, iand, land, ior, lor, ixor, lxor
(d−3)変換演算命令
i2l, i2f, i2d, l2i, l2f, l2d, f2i, f2l, f2d, d2i, d2l, d2f, int2byte, int2char, int2short
(d−4)比較演算命令
lcmp, fcmpl, fcmpg, dcmpl, dcmpg
(e)オペランド・スタックの操作命令
pop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap
(f)分岐命令
ifeq, ifnull, iflt, ifle, ifne, ifnonnull, ifgt, ifge, if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge, goto, goto_w
以降、特にことわらない限り、「命令」とは上に挙げた命令のいずれかを意味するものとする。
第1図は計算機システムのブロック図であって、10は命令キャッシュ、11はデータ・キャッシュ、12はデータ・バッファ、20は命令フェッチ・ユニット、21は命令デコード・発行ユニット、3は前進ポインタ・スタック、3aは前進ポインタ・スタック履歴ファイル、4は完了ポインタ・スタック、5は命令バッファ、6は統合レジスタ・ファイル、7はフリー・リスト、8は共通データ・バス、80及び81は各々演算ユニット0及び1、82は分岐ユニット、83はロード/ストア・ユニット、801,802,811,812,821,822,831及び832はリザベーション・ステーションを表している。
次に、本発明実施例の計算機システムの各構成要素ごとにその詳細な構成を説明する。
(A)命令フェッチ・ユニット
命令フェッチ・ユニットは、図示してないプログラムカウンタ(pcレジスタ)を具備しており、命令キャッシュから命令をフェッチし、命令デコード・発行ユニットに渡すようになっている。分岐の予測や分岐の実行も担う。
(B)命令デコード・発行ユニット
命令デコード・発行ユニットは、命令フェッチ・ユニットから渡された命令のデコードを行い、プログラムに含まれる命令がout-of-orderで実行されるように、後述する前進ポインタ・スタック、命令バッファ及び統合レジスタ・ファイル等を設定するための各種信号を発生するようになっている。
(C)ポインタ・スタック
ポインタ・スタックは、各々のエントリに統合レジスタ・ファイルのエントリのアドレスが書き込まれるようになっているレジスタ・ファイルで構成されている。
従来のスタックマシンにおいて、ワード・スタックが......, word1, word2, word3, word4(右端がスタックトップ)となっている状態は、本発明による計算機システムにおいて、ポインタ・スタックが.....,〈a〉,〈b〉,〈c〉,〈d〉(右端がスタックトップ)で、エントリ・アドレスが〈a〉,〈b〉,〈c〉及び〈d〉である統合レジスタ・ファイルの各エントリに、それぞれword1, word2, word3及びword4が保持されている状態に対応する。
本発明の計算機システムは、前進ポインタ・スタック(APS;Advanced Pointer Stack)と完了ポインタ・スタック(CPS;Completed Pointer Stack)の2つのポインタ・スタックを具備する。
本発明の計算機システムにおいては、命令がデコードされるごとに、命令の内容に応じて前進ポインタ・スタック(以下ではAPSと記す)及び統合レジスタ・ファイルを操作すると共に、命令の内容を命令バッファ及び、必要な場合には、適切な機能ユニットの空いているリザベーション・ステーションに書き込むことにより、プログラムに含まれる命令がout-of-orderで実行されるべく設定される。すなわち、前進ポインタ・スタックはデコード・発行済みの全ての命令によるスタック操作を反映している。
他方、完了ポインタ・スタック(以下ではCPSと記す)は、プログラム上の順番で完了済みの全ての命令によるスタック操作を反映するものである。本発明の計算機システムはデータ駆動の原理に基づくout-of-order実行を可能とするものであるが、完了ポインタ・スタックは、正確な例外処理を保証するため、in-orderで完了済の全ての命令に基づく状態を構成するために存在するものである。
本発明実施例の計算機システムにおいては、ポインタ・スタック及び統合レジスタ・ファイルによって、ワード・スタックの一番上に積まれたフレームの上部のオペランド・スタックの内容のみが保持されるようになっている。ワード・スタックの残りの部分はデータ・バッファ及びデータ・キャッシュに格納されるようになっている。また、オペランド・スタックが成長して、その全内容をポインタ・スタック及び統合レジスタ・ファイルで保持しきれなくなると、後述するように、オペランド・スタックの下部の内容がデータ・バッファにSpillされるようになっている。
各ポインタ・スタックは循環型のバッファの構成となっており、プッシュ・ポインタとボトム・ポインタと呼ぶ2つのレジスタが各々存在する。プッシュ・ポインタは、統合レジスタ・ファイルのエントリのアドレスを保持する最上位のエントリの1つ上を示す。ボトム・ポインタは、統合レジスタ・ファイルのエントリのアドレスを保持する最下位のエントリを示す。ボトム・ポインタの値からプッシュ・ポインタの値を引くことで、ポインタ・スタックに何エントリの空きがあるかがわかる。初期状態においては、プッシュ・ポインタ及びボトム・ポインタの各々の値は共に0となっている。
第2図は、本実施例の計算機システムにおける、各ポインタ・スタックと各プッシュ・ポインタ及びボトム・ポインタの関係を示す説明図である。2つのポインタ・スタックAPS3及びCPS4は同数のエントリを有し、各ポインタ・スタックで各々のエントリに下から順に0、1、2、・・・とアドレスが付けられているものとする。縦線が施されているエントリは統合レジスタ・ファイルのエントリのアドレスを保持しているものとする。第2図に示すように、プッシュ・ポインタは、APS及びCPSの各々に対して設けられており、それぞれPP_OF_APS及びPP_OF_CPSと名付けている。他方、ボトム・ポインタは1つだけ設けられており、これがAPS及びCPSで共用される。これをBP_OF_PSと名付けている。
APSとCPSの間には、エントリの数だけ比較回路が設けられており、APS及びCPSの同じエントリ・アドレスにある(第2図において水平に並ぶ)エントリの間でその内容が比較されるようになっている。
命令のデコード・発行の際、命令に規定されているオペランド・スタックに対する1語分のプッシュ操作に対応して、割り付けられる統合レジスタ・ファイルの1エントリのアドレスをAPSのPP_OF_APSで示されるエントリに書き込み、PP_OF_APSの値に1を加えるようになっている。逆に、命令に規定されているオペランド・スタックに対する1語分のポップ操作に対応して、PP_OF_APSの値から1を引くようになっている。命令の完了の際のCPSとPP_OF_CPSの動作に関しても同様である。
BP_OF_PSで示されるエントリの内容がAPSとCPSで一致する場合には、その一致する内容で示される統合レジスタ・ファイルのエントリに書き込まれている1語分のデータをデータ・バッファにSpillすることができる。その際、BP_OF_PSの値に1を加えるようになっている。逆に、データ・バッファから統合レジスタ・ファイルに1語分のデータをFillするには、データ・バッファからFillすべき1語分のデータを取り出し、それに空いている統合レジスタ・ファイルの1エントリを割り付けてそのデータを書き込み、その統合レジスタ・ファイルのエントリのアドレスをAPS及びCPSのBP_OF_PSで示されるエントリの1つ下に各々書き込み、BP_OF_PSの値から1を引くようになっている。
本実施例の計算機システムは、分岐予測に基づく投機的実行を可能にするために、前進ポインタ・スタック履歴ファイル(以下では「APS履歴ファイル」と記す)を具備する。APS履歴ファイルの各々のエントリには、APSの全エントリ及びPP_OF_APSの内容が書き込めるようになっている。
(D)統合レジスタ・ファイル(CRF;Consolidated Resister File)
統合レジスタ・ファイル(以下ではCRFと記す)は、従来のスタックマシンにおけるオペランド・スタックの内容を、順序不同で保持するものである。
第3図は、本実施例の計算機システムにおける、CRF6の各々のエントリ6(i)の詳細な構成を示す説明図である。ここで、iはエントリのアドレスである。CRF6の各々のエントリ6(i)はデータ・フィールド61(i)、書込み完了フラグ(WCF,Write Completion Flag)フィールド62(i)、カラー(C,Colour)フィールド63(i)及びビジービット(BB)フィールド64(i)から成っている。
実際のCRFのハードウェア上の構成は、上述の各フィールド別に設けられたレジスタ・ファイルの集合体である。
CRFの各々のエントリのデータ・フィールドは、1語分のデータが書き込まれる構成となっている。
CRFの各々のエントリにおいて、WCFフィールドは、データ・フィールドにデータの書き込みが完了していれば1、完了していなければ0が書き込まれているようになっている。
CRFの各々のエントリにおいて、Cフィールドは、そのCRFのエントリが、命令に含まれるプッシュ操作に対応して割り付けられたものであるのか、データ・バッファからのFillの際に割り付けられたものであるのかの区別、前者の場合にはさらに分岐タグが書き込まれるようになっている。本実施例においては、後述するように、分岐タグはAPS履歴ファイルのエントリのアドレスと一定の関係にある。
CRFの各々のエントリにおいて、BBフィールドは、そのCRFのエントリがデータを保持すべく割り付けられている状態であれば1、割り付けられていない(空いている)状態であれば0が書き込まれているようになっている。
(E)フリー・リスト(FL)
フリー・リスト(以下ではFLと記す)は、フリーな、即ち、空いている/割り付けられていない(BBフィールドが0である)CRFのエントリのアドレスを保持するもので、本実施例においては、循環型のFIFOキューの構成となっている。
初期状態においては、CRFの全てのエントリのアドレスがFLに登録されている。空いているCRFのエントリを割り付ける必要がある場合に、FLからフリーなCRFのエントリのアドレスが取り出される。逆に、CRFのあるエントリの割り付けが解除されれば、そのエントリのアドレスがFLに登録されるようになっている。
(F)命令バッファ(IB;Instruction Buffer)
命令バッファ(以下ではIBと記す)は、未完了の発行済命令を保持するバッファであり、循環型のFIFOキューの構成となっている。
第4図は、IBの構成を示す説明図である。第4図において、IB5の各々のエントリは下から順に0、1、2、・・・とアドレスが付けられているものとし、縦線が施されているIB5のエントリは、未完了の発行済命令を保持しているものとする。IBは、ヘッダ・ポインタとトレイル・ポインタと名付けた2つのレジスタを具備する。ヘッダ・ポインタはキューの先頭のエントリを、トレイル・ポインタはキューの末尾のエントリの1つ後を示す。1サイクル当たり1命令までしか発行/完了を行わないものとすれば、トレイル・ポインタは次に発行される命令の内容を書き込むべきエントリを示し、ヘッダ・ポインタは次に完了されるべき命令の内容が書き込まれているエントリを示す。ヘッダ・ポインタの値からトレイル・ポインタの値を引くことで、IBに何エントリの空きがあるかがわかる。初期状態においては、ヘッダ・ポインタ及びトレイル・ポインタの値は共に0となっている。
第5図は、本実施例の計算機システムにおける、IB5の各々のエントリ5(i)の詳細な構成を示す説明図である。ここで、iはエントリのアドレスである。IB5の各々のエントリ5(i)はオペレーション・フィールド50(i)、オペランド・フィールド51(i)、第1ソース・フィールド52(i)、第2ソース・フィールド53(i)、第3ソース・フィールド54(i)、第4ソース・フィールド55(i)、第1デスティネーション・フィールド56(i)、第2デスティネーション・フィールド57(i)、分岐タグ(BT)フィールド58(i)、及び実行状態(S;State)フィールド59(i)から成っている。
IBの各々のエントリのオペレーション・フィールドはオペレーション・コードが書き込まれる構成となっている。
IBの各々のエントリのオペランド・フィールドは、オペレーション・コードに続いてオペランドが示されるような命令の場合に、このオペランドが書き込まれるようになっている。
IBの各々のエントリの第1〜第4ソース・フィールドの各々は、ソース・データを保持すべく割り付けられているCRFのエントリのアドレスが書き込まれるようになっている。ポップ操作を含む命令がデコードされた場合には、ポップすべき語数と同じ数だけAPSからポップされるCRFのエントリのアドレスが、その順で第1〜第4ソース・フィールドに書き込まれるようになっている。
IBの各々のエントリの第1〜第2デスティネーション・フィールドの各々は、命令のデコード・発行に伴い、新たに割り付けられるCRFのエントリのアドレスが書き込まれるようになっている。プッシュ操作を含む命令がデコードされた場合には、プッシュすべき語数と同じ数だけAPSにプッシュされるCRFのエントリのアドレスが、その順で第1〜第2デスティネーション・フィールドに書き込まれるようになっている。
IBの各々のエントリのBTフィールドは、分岐予測に基づく投機的実行に係るもので、本実施例においては、後述するように、BTフィールドに書き込まれる分岐タグはAPS履歴ファイルのエントリのアドレスと一定の関係にある。
IBの各々のエントリにおいて、Sフィールドは、そのエントリに書き込まれている命令の実行状態に応じて、未実行、実行済み、正常終了、例外事象発生等の情報が書き込まれているようになっている。
(G)共通データ・バス(CDB;Common Data Bus)
共通データ・バス(以下ではCDBと記す)は、後述する機能ユニット群及びCRFの間で、データをCRFのエントリのアドレスと共に分配する通信チャネルである。CDBは、十分なデータ通信バンド幅が確保できるように、多重化されている。
(H)機能ユニット
本実施例の計算機システムは、演算ユニット0及び1、分岐ユニット及びロード/ストア・ユニットの4つの機能ユニットを具備する。本実施例においては、各機能ユニットは、基本的に、2つのリザベーション・ステーションと割り当てられた命令を処理する実行部で構成される。リザベーション・ステーション(以下ではRSと記す)は、命令の内容を一時的に保持するバッファであるが、本実施例の計算機システムにおいては、命令のデコードの際に、同じ命令の内容が書き込まれるIBのエントリのアドレスも書き込まれるような構成となっている。
命令のデコードの際に、命令の種類に応じて、必要な場合に、適切な機能ユニットの空いているRSに書き込みが行われるようになっている。
各機能ユニットの各々のRSで、そこに書き込まれているソース・データを保持すべきCRFのエントリのアドレスとCDBで送られてくるものが比較され、一致すればデータが取り込まれるようになっている。
命令の内容を保持しているRSにおいて、必要なソース・データが揃い、機能ユニットの実行部が利用可能であれば、当該RSの内容は実行部に渡され、その実行が開始されるようになっている。
(H−1)演算ユニット
本実施例の計算機システムは、演算ユニット0及び演算ユニット1を具備しており、その各々の実行部は算術論理演算、データ・タイプの変換演算、比較演算等の演算命令を実行する機能を有し、互いに独立に並行して動作することができるようになっている。
本発明の計算機システムにおいては、各々の演算ユニットの実行部をパイプライン化したり、より多くの演算ユニットを具備したり、演算ユニットごとに実行する演算の種類を特定した構成とすることも可能である。
(H−2)分岐ユニット
分岐ユニットの実行部は、条件分岐命令を処理し、分岐の有無を確定して、分岐先アドレスと共に、命令フェッチ・ユニットに通知する機能を有する。
(H−3)ロード/ストア・ユニット(LSU;Load/Store Unit)
及びデータ・バッファ
ロード/ストア・ユニット(以下ではLSUと記す)の実行部は、アドレス計算を行う機能を有し、データ・バッファ及びデータ・キャッシュにアクセスすることができるようになっている。
データ・バッファは、各々のエントリに1語のデータが書き込まれるようになっている循環型のバッファである。本発明の計算機システムにおいては、ワード・スタックの最上位の部分の内容がポインタ・スタックとCRFによって保持されるが、その下の部分がデータ・バッファ、さらにその下の部分がデータ・キャッシュに格納されるようになっている。LSUはデータ・バッファに高速にアクセスできるので、アクセスすべき変数データがデータ・バッファに保持されている割合が大きいほど、より効率的な計算が可能となる。また、データ・バッファに適当な語数のデータを溜めておくようにすることによって、後述するCRF−データ・バッファ−データ・キャッシュの間のSpill/Fillの動作を効率的に行うことができる。
LSUは、最初のローカル変数へのポインタを保持する図示してないレジスタ(varsレジスタ)を具備する。本実施例の計算機システムにおいては、最初のローカル変数の格納域はデータ・バッファあるいはデータ・キャッシュにあるが、varsレジスタには、データ・キャッシュにおける相当するアドレス値が書き込まれているようになっている。すなわち、全てあるいは一部のローカル変数のデータが実際にはデータ・バッファに保持されていても、各々のローカル変数に、全てのローカル変数をデータ・キャッシュにSpillしたと仮定した場合のデータ・キャッシュにおけるアドレス値を対応させることができるので、ロード/ストア命令の処理において、LSUはvarsレジスタの値を用いてアドレス計算を行い、対象となるローカル変数の格納域がデータ・バッファかデータ・キャッシュかを判定し、その格納域にアクセスする。
LSUは、先行命令が全て完了するまでストア命令をプログラム上の順番で保持する、図示してないストア・バッファを具備する。即ち、ストア命令は全ての先行命令が完了してから実行されるようになっている。ストア・バッファは連想機能を備えており、LSUは先行ストア命令に対する依存性の検証を行い、ロード命令の実行をout-of-orderで行うことができるようになっている。
即ち、ロード・アドレスが先行ストア命令のストア・アドレスに一致するか、あるいは、先行ストア命令のストア・アドレスが未計算の場合(この場合、依存関係の検証はできないので、依存関係は存在するとみなす)、当該ロード命令は先行ストア命令に対して依存関係を持つことになる。依存関係が全く存在しない場合、データ・バッファ/データ・キャッシュから直ちにデータをロードする。ロード命令が先行ストア命令に対して依存関係にあると、データ・バッファ/データ・キャッシュは正しい値を持っていないので、データ・バッファ/データ・キャッシュからデータをロードすることはできない。ロード・アドレスが先行ストア命令のストア・アドレスと一致し、ストア・データが有効であれば、そのストア命令の完了を待たずに、ストア・バッファから直接データをロードする。
LSUは、プログラム中に示されるロード/ストア命令を実行すると共に、オーバーフロー/アンダーフローの回避のため、あるいは、メソッドの呼び出し/メソッドからの復帰に伴いワード・スタックの最上位においてフレームが生成/破棄されるのに対応して、CRFとデータ・バッファとの間でデータを自動的にSpill/Fillするようになっている。(ちなみに、メソッドの呼び出しにおいては、varsレジスタの値を変更した上で、スタック・トップからのストア命令も併用するのが望ましい。)
1語分のデータをCRFからデータ・バッファにSpillするには、APSとCPSで、(BP_OF_PSで示される)CRFのエントリのアドレスを保持する最下位のエントリの内容が一致していなくてはならない(そうでない場合は一致するまで待つ)。その場合、その一致する内容で示されるCRFのエントリに書き込まれている1語分のデータをデータ・バッファにSpillすることができる。その際、BP_OF_PSの値に1を加え、上記CRFのエントリのBBフィールドを0に変更し、そのエントリのアドレスをFLに登録する。
逆に、データ・バッファからCRFに1語分のデータをFillするには、データ・バッファからFillすべき1語分のデータを取り出し、それに空いているCRFの1エントリを割り付け、そのデータ・フィールドに書き込む。WCF、BBの各フィールドは1とする。さらに、その割り付けられたCRFのエントリのアドレスを、APS及びCPSの(BP_OF_PSで示される)CRFのエントリのアドレスを保持する最下位のエントリの1つ下に各々書き込み、BP_OF_PSの値から1を引く。
データ・バッファとデータ・キャッシュの間でも、データ・バッファの空きに応じて適宜Spill/Fillの動作が行われるようになっている。
CRF−データ・バッファ−データ・キャッシュの間で一度に複数語のデータをSpill/Fillできるようにするには、APSとCPSの2つのポインタ・スタック、データ・バッファ及びデータ・キャッシュをインタリーブ分割して、対応する分割部分間で上述と同様な動作を行うような構成とすればよい。この場合、Spill/Fillのために、APSとCPSの2つのポインタ・スタック、データ・バッファ及びデータ・キャッシュにおいて、バンク毎に1つのread/writeポート、さらに、CRFにおいてインタリーブ分割の数だけのread/writeポートが必要となる。
ついで、本発明実施例の計算機システムの動作を説明する。
本実施例の計算機システムは命令を、▲1▼命令フェッチ、▲2▼命令デコード・発行、▲3▼実行、▲4▼完了の4ステージで処理する。当分の間、説明を簡単にするため、1サイクルで1つの命令をデコード・発行/完了できるものとして、以下に各ステージごとに動作内容を説明する。
▲1▼命令フェッチ・ステージ
このステージでは、命令フェッチ・ユニットが命令キャッシュから命令を取り出すと共に、次にフェッチする命令のアドレスを決定する。次に命令をフェッチするのは通常次アドレス値からであるが、フェッチした命令が無条件分岐命令であるか、条件分岐命令で分岐すると予測した場合、分岐予測が外れた場合、あるいは例外が発生した場合には、フェッチするアドレス値を変更する。
▲2▼命令デコード・発行ステージ
このステージでは、命令をデコードして、命令の内容に応じて前進ポインタ・スタック(APS)及び統合レジスタ・ファイル(CRF)を操作すると共に、命令の内容を命令バッファ(IB)及び、必要な場合には、適切な機能ユニットの空いているRSに書き込むことにより、プログラムに含まれる命令がout-of-orderで実行されるべく設定する。以下に、設定動作を詳細に説明する。
本発明の計算機システムにおいては、従来のスタック・マシンにおけるワード・スタックのスタックトップ近傍の内容がポインタ・スタックとCRFによって再現されるが、命令に規定されているオペランド・スタックに対するスタック操作が、APSに対して同様に適用される。ここで、1語のデータのオペランド・スタックへのプッシュ操作をエミュレートするには、そのデータを保持すべく空いているCRFの1エントリを割り付け、そのエントリのアドレスをAPSにプッシュすればよい。
即ち、デコードされた命令においてオペランド・スタックに対するポップ操作が規定されている場合には、ポップすべき語数と同じ数だけCRFのエントリのアドレスをAPSからポップする。デコードされた命令においてオペランド・スタックに対するプッシュ操作が規定されている場合には、プッシュすべき語数と同じ数だけ空いているCRFのエントリを割り付け、上記割り付けたCRFのエントリのアドレスをAPSにプッシュする。
オペランド・スタックの操作命令(Java VMにおけるpop, pop2, dup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2, swap)の場合、基本的には、オペランド・スタックに対して行うべき操作をAPSに対して同様に行えばよい。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令(Java VMにおけるdup, dup2, dup_x1, dup2_x1, dup_x2, dup2_x2)の場合には、コピー・データを保持すべく空いているCRFのエントリを割り付け、そのエントリのアドレスをAPSの適切なエントリに書き込むようになっている。
命令のデコード・発行に伴い新たに割り付けられるCRFのエントリにおいては、BBフィールドに1を立て、Cフィールドには命令デコード・発行ユニットから送られてくる分岐タグを書き込む。即値データのプッシュ命令の場合には、データがすでに得られているので、データ・フィールドにそのデータを書き込み、WCFフィールドに1を立てる。それ以外の場合には、データはデコード・発行の時点では得られていないので、WCFフィールドを0としておく。
デコードされた命令の内容をプログラム上の順番でIBに保持しておくために、その命令の内容をIBのトレイル・ポインタで示されるエントリに書き込み、トレイル・ポインタの値に1を加える。すなわち、オペレーション・フィールドにオペレーション・コードを書き込み、オペレーション・コードに続いてオペランドが示されるような命令の場合には、オペランド・フィールドにこのオペランドを書き込む。BTフィールドには命令デコード・発行ユニットから送られてくる分岐タグを書き込む。Sフィールドに関しては、無条件分岐命令、即値データのオペランド・スタックへのプッシュ命令あるいはスタック上でコピーを作成することのないオペランド・スタックの操作命令(Java VMにおけるpop, pop2, swap)の場合は実行済みとし、その他の命令の場合は未実行としておく。
ポップ操作を含む命令の場合には、ポップすべき語数と同じ数だけAPSからポップされるCRFのエントリのアドレスを、その順で第1〜第4ソース・フィールドに書き込む。プッシュ操作を含む命令の場合には、プッシュすべき語数と同じ数だけAPSにプッシュされるCRFのエントリのアドレスを、その順で第1〜第2デスティネーション・フィールドに書き込む。
本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、コピー元となるデータを保持すべく割り付けられているCRFのエントリのアドレスをソース・フィールドに、コピー・データを保持すべく新たに割り付けられるCRFのエントリのアドレスをデスティネーション・フィールドに、一定の対応関係のもとに書き込む。
命令の種類に応じて、オペランド・スタックに対してポップ/プッシュすべき語数(オペランド・スタックの操作命令の場合には、作成するコピーの語数)は決まっているので、オペレーション・フィールドの内容によって、第1〜第4ソース・フィールド及び第1〜第2デスティネーション・フィールドのうちのいずれが有効であるかを知ることができる。
命令の内容を、IBに書き込むと同時に、命令の種類に応じて、必要な場合に、適切な機能ユニットの空いているRSにも、書き込みの行われるIBのエントリのアドレス(ここでは、1サイクル当たり1命令までしか発行しないとしているので、トレイル・ポインタの値と一致する)と共に書き込む。ここで、RSへの書き込みが必要でないのは、即値データのオペランド・スタックへのプッシュ命令、スタック上でコピーを作成することのないオペランド・スタックの操作命令及び無条件分岐命令の場合である。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、その内容を演算ユニット1の空いているRSに書き込むことにする。
エントリ・アドレスがIBのソース・フィールドに書き込まれる(APSからポップされる)CRFのエントリの各々のWCFフィールド及びデータ・フィールドが読み出され、WCFが1の場合、次サイクル以降にエントリ・アドレスとデータがCDBに載せられる。
▲3▼実行ステージ
命令デコード・発行ステージにおいてあるRSに書き込まれた命令に関して、原則として以下のような動作が順次行われる。
・各々のRSで、そこに書き込まれているソース・データを保持すべきCRFのエントリのアドレスとCDBを通じて送られてくるものが比較され、一致すればデータが取り込まれる。本実施例においては、RSに命令の内容が書き込まれるのと同じタイミングでCDBを通じて送られてくるデータも当該RSに取り込まれるものとする。
・必要なソース・データが揃い、機能ユニットの実行部が利用可能であれば、当該RSの内容は実行部に渡され、その実行が開始される。この時点で、当該RSにおける当該命令の保持が解除される。
・デコードの際IBのデスティネーション・フィールドに書き込みが行われる(APSにCRFのエントリのアドレスがプッシュされる)ような命令の場合、命令の実行の結果得られたデータをデスティネーションであるCRFのエントリのアドレスと共にCDBに載せる。CRFにおいては、CDBを通じて送られてくる内容に基づきデータの書き込みを行い、WCFフィールドを1に変更する。
・以上のような動作が全て正常に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該命令を保持している)IBのエントリのSフィールドを正常終了に変更する。
以上は、大部分の命令について当てはまる原則的な動作であるが、本実施例の計算機システムにおいては、命令の種類によっては、以下のような例外的な動作が行われる。
・LSUのRSにおいて、オペランド・スタック上のデータをポップしてアドレス計算を行うようなストア命令(Java VMにおけるiastore, lastore,fastore, dastore, aastore, bastore, castore, sastore)が書き込まれている場合には、ソース・データが全て揃っていなくても、アドレス計算に必要なソース・データが揃った時点でストア・アドレスを計算し、ストア・バッファに書き込む。
・LSUのRSにおいて、ストア命令が書き込まれている場合には、ストア・アドレスとストア・データのストア・バッファへの書き込みが共に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該ストア命令を保持している)IBのエントリのSフィールドをストア実行可能に変更する。前述したように、実際のストアの実行は完了ステージにおいて行う。
・演算ユニット1のRSにおいて、スタック上でコピーを作成するようなオペランド・スタックの操作命令が書き込まれている場合には、ソース・データが書き込まれると、そのデータを、デスティネーションとして一定の対応関係のもとに書き込まれているCRFのエントリのアドレスと共にCDBに載せる。それぞれのデスティネーションに関するデータ転送が全て正常に終了すれば、当該RSに書き込まれていたエントリ・アドレスにある(当該命令を保持している)IBのエントリのSフィールドを正常終了に変更する。
以上のように、IBに保持されている未実行の命令は、データ駆動の原理に基づき、実行可能となったものから処理されるので、命令実行順序はout-of-orderになる。また、演算ユニット0/1、分岐ユニット及びロード/ストア・ユニットの各機能ユニットは互いに独立に並行して動作する。
ある命令の処理において例外事象が発生した場合には、その情報を、その命令を保持しているIBのエントリのSフィールドに書き込むと共に、命令フェッチ・ユニットに通知する。
▲4▼完了ステージ
ある命令が完了できるためには、プログラム上の順番でその命令よりも前にある命令が全て完了していなくてはならない。
IBのヘッダ・ポインタで示されるエントリにおいて、Sフィールドが実行済み/正常終了である、あるいはそうなると、そのエントリに書き込まれている命令の内容に基づいてCPS及びCRFを操作し、ヘッダ・ポインタの値に1を加える。
CPSは、命令がデコード・発行された際のAPSの動作を再現すべく操作される。すなわち、ポップ/プッシュ操作を含む命令の場合には、有効なソース・フィールドの内容と同じものを順にCPSからポップし、有効なデスティネーション・フィールドの内容を順にCPSにプッシュする。スタック上でコピーを作成することのないオペランド・スタックの操作命令の場合には、オペランド・スタックに対して行うべき操作をCPSに対して全く同様に行えばよい。本実施例においては、スタック上でコピーを作成するようなオペランド・スタックの操作命令の場合には、有効なソース・フィールド及び有効なデスティネーション・フィールドを参照して、その命令のデコード・発行の際にAPSに対して行われた操作がCPSにおいて再現される。
本実施例においては、上述のCPSに対する操作に伴い、エントリ・アドレスがCPSからポップされるCRFのエントリでは、BBフィールドを0に変更し、そのエントリ・アドレスをFLに登録する。
IBのヘッダ・ポインタで示されるエントリにおいて、ストア命令が書き込まれている場合には、Sフィールドがストア実行可能である、あるいはそうなると、LSUに実際のストアの実行を依頼する。こうすれば、データがプログラム上の順番でストアされることが保証できる。さらに、CPS及びCRFに対する操作を上と同様に行い、ヘッダ・ポインタの値に1を加える。
以上のように、ヘッダ・ポインタの値に1が加えられることによって、キューから除外されたIBのエントリに保持されていた命令は、完了したことになる。その命令よりも前に発行された命令はすべて完了しているので、命令の完了はin-orderで行われることになる。
IBのヘッダ・ポインタで示されるエントリにおいて、Sフィールドが例外事象発生である、あるいはそうなった場合には、その時点におけるCPS及びCRFによって、プログラムがin-orderで実行された場合の例外発生時点の状態が構成されるので、正確な例外処理が可能である。例外事象の発生した命令以降に発行された命令を全てキャンセルするには、キャンセルされるべき命令が書き込まれているIBのエントリの有効なデスティネーション・フィールドに示されるCRFのエントリの各々に対して、そのBBフィールドを0に戻し、そのエントリ・アドレスをFLに登録することによって、割り付けを解除し、ヘッダ・ポインタの値に1を加えたものをトレイル・ポインタに書き込むことによって、キャンセルされるべき命令を保持しているIBのエントリを全てキューから除外すればよい。
以上が、本発明実施例の計算機システムの全般的な動作である。
ついで、具体的な動作例について説明する。いま、本実施例の計算機システムで、以下のようなプログラムを実行することを考えよう。
dload[A] (変数名[A]に対応する倍精度浮動小数点データのロード)
dload[B] (変数名[B]に対応する倍精度浮動小数点データのロード)
dadd (倍精度浮動小数点データ間の加算)
d2f (倍精度浮動小数点データの単精度浮動小数点データへの変換)
fload[T] (変数名[T]に対応する単精度浮動小数点データのロード)
swap (スタック上の最上位の2語を入れ替える)
dup_x1 (スタックトップの語のコピーを作成し、先頭から3語目に割り込ませる)
fsub (単精度浮動小数点データ間の減算)
fdiv (単精度浮動小数点データ間の除算)
fstore[X] (スタックトップにある単精度浮動小数点データの変数名[X]に対応する格納域へのストア)
以上のプログラムは、X=(A+B)/{T-(A+B)}の計算を行うものであるが、AとBのデータが倍精度で与えられ、この間の加算を倍精度のまま実行して、得られた加算データを単精度に変換して、以降は単精度で計算を行う、というものである。
第6図〜第14図は、本実施例の計算機システムにおいて、上記プログラムを処理する際の動作をサイクル毎に示した説明図であり、以下ではこの図をもとに詳細な動作を説明する。第6図〜第14図において、CRF6及びIB5の各エントリの構成は、それぞれ第3図、第5図のものと同じである。第6図〜第14図で空白となっている箇所は、そのフィールドの内容に留意する必要が無いことを意味する。時系列で各構成要素の内容を示すために、各部の符号の後尾にハイフンと各サイクルに対応する数字を添えている。また、第6図〜第14図において、APS、CPS、IB及びCRFの各エントリは下から順に0、1、2、〜のようにアドレスが付けられているものとする。
CDBは3本のバスで構成されているものとする。レイテンシが2サイクル以下の演算命令は演算ユニット0で、それ以外の演算命令は演算ユニット1で実行されるものとする。
本動作例においては、説明を簡単にするため、変数データは全てデータ・バッファに保持されており、CRFとデータ・バッファの間のSpill/Fillの動作は行わないものとする。従って、BP_OF_PSの値は終始0である。
また、本動作例においては、当初、APS、CPS、IB及びCRFは初期化されており、FLにCRFの全てのエントリのアドレスが順に〈0〉,〈1〉,〈2〉,〈3〉・・・・と書き込まれていて、この順で取り出されるものとする。
以下に、各サイクルにおける動作を、(A)命令デコード・発行、(B)実行及び(C)完了の各ステージに分けて詳細に説明する。
(1−A)第1サイクルの命令デコード・発行ステージ
命令dload[A]のデコード・発行を行う。倍長語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFの2エントリ6(0)、6(1)をそのデータを保持すべく割り付け、そのエントリのアドレス〈0〉,〈1〉をAPSにプッシュし、APSは3−1のようになる。
CRFの6(0)、6(1)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込み、CRFは6−1のようになる。ここで、本動作例においては、終始分岐タグとして命令デコード・発行ユニットから0が送られてくるものとする。
トレイル・ポインタの値は0であるので、IBのエントリ5(0)に上記命令の内容を書き込み、IBは5−1のようになる。この際、APSにプッシュされるCRFのエントリのアドレス〈0〉,〈1〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え1にする。ここで、本動作例においては、IBのSフィールドには、命令が未実行であれば0、実行済み/正常終了あるいはストア命令におけるストア実行可能であれば1が書き込まれるものとする。
IBのエントリ5(0)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス0と共に、LSUの空いているRS831に書き込む。
(1−B)第1サイクルの実行ステージ
実行ステージの動作としては何も行われない。
(1−C)第1サイクルの完了ステージ
当初のIBのヘッダ・ポインタが示すエントリ5(0)において、命令はまだ書き込まれていないため、完了ステージの動作としては何も行われない。
(2−A)第2サイクルの命令デコード・発行ステージ
命令dload[B]のデコード・発行を行う。倍長語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFの2エントリ6(2)、6(3)をそのデータを保持すべく割り付け、そのエントリのアドレス〈2〉,〈3〉をAPSにプッシュし、APSは3−2のようになる。
CRFの6(2)、6(3)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込み、CRFは6−2のようになる。
トレイル・ポインタの値は1であるので、IBのエントリ5(1)に上記命令の内容を書き込み、IBは5−2のようになる。この際、APSにプッシュされるCRFのエントリのアドレス〈2〉,〈3〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え2にする。
IBのエントリ5(1)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス1と共に、LSUの空いているRS832に書き込む。
(2−B)第2サイクルの実行ステージ
LSUの実行部はRS831から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Aの2語のデータを読み出す。
(2−C)第2サイクルの完了ステージ
5−1の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(3−A)第3サイクルの命令デコード・発行ステージ
命令daddのデコード・発行を行う。オペランド・スタックから4語のソース・データをポップして演算を行い、倍長語の演算結果をプッシュする演算命令であるので、APSから〈0〉,〈1〉,〈2〉,〈3〉をポップし、FLに登録されているフリーなCRFの2エントリ6(4)、6(5)を演算結果を保持すべく割り付け、そのエントリのアドレス〈4〉,〈5〉をAPSにプッシュし、APSは3−3のようになる。
CRFの6(4)、6(5)の各エントリにおいては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は2であるので、IBのエントリ5(2)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈0〉,〈1〉,〈2〉,〈3〉を各々第1〜第4ソース・フィールドに、APSにプッシュされる〈4〉,〈5〉を各々第1、第2デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え3にする。
IBのエントリ5(2)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス2と共に、演算ユニット0の空いているRS801に書き込む(daddの演算のレイテンシは2サイクルであるとする)。
また、6−2の状態にあるCRFの6(0)、6(1)、6(2)、6(3)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(3−B)第3サイクルの実行ステージ
LSUは、データ・バッファから読み出した変数Aのデータを構成する2語A_1、A_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈0〉,〈1〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(0)、6(1)にデータの書き込みを行い、WCFフィールドを1に変更する。また、同じタイミングでIBのエントリ5(2)に書き込まれるものと同じ内容が書き込まれる演算ユニット0のRS801においても、CRFのエントリのアドレス〈0〉,〈1〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(0)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(0)のSフィールドが正常終了を意味する1に変更される。
以上の動作と並行して、LSUの実行部はRS832から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Bの2語のデータを読み出す。
(3−C)第3サイクルの完了ステージ
5−2の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(4−A)第4サイクルの命令デコード・発行ステージ
命令d2fのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして変換演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈4〉,〈5〉をポップし、FLに登録されているフリーなCRFのエントリ6(6)を演算結果を保持すべく割り付け、そのエントリのアドレス〈6〉をAPSにプッシュし、APSは3−4のようになる。
CRFのエントリ6(6)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は3であるので、IBのエントリ5(3)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈4〉,〈5〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈6〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え4にする。
IBのエントリ5(3)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス3と共に、演算ユニット0の空いているRS802に書き込む(d2fの演算のレイテンシは2サイクルであるとする)。
また、6−3の状態にあるCRFの6(4)、6(5)の各エントリWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(4−B)第4サイクルの実行ステージ
LSUは、データ・バッファから読み出した変数Bのデータを構成する2語B_1、B_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈2〉,〈3〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(2)、6(3)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(2)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS801においても、CRFのエントリのアドレス〈2〉,〈3〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(1)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(1)のSフィールドが正常終了を意味する1に変更される。
(4−C)第4サイクルの完了ステージ
5−3の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(5−A)第5サイクルの命令デコード・発行ステージ
命令fload[T]のデコード・発行を行う。1語の変数データのオペランド・スタックへのロード命令であるので、FLに登録されているフリーなCRFのエントリ6(7)をそのデータを保持すべく割り付け、そのエントリのアドレス〈7〉をAPSにプッシュし、APSは3−5のようになる。
CRFのエントリ6(7)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は4であるので、IBのエントリ5(4)に上記命令の内容を書き込む。この際、APSにプッシュされるCRFのエントリのアドレス〈7〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え5にする。
IBのエントリ5(4)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス4と共に、LSUの空いているRS831に書き込む。
(5−B)第5サイクルの実行ステージ
演算命令daddの内容が書き込まれているRS801において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
(5−C)第5サイクルの完了ステージ
5−4の状態にあるIBのヘッダ・ポインタが示すエントリ5(0)において、Sフィールドが1となったので、5(0)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(0)のデスティネーション・フィールドに書き込まれている〈0〉,〈1〉をCPSにプッシュし、CPSは4−5のようになる。さらに、ヘッダ・ポインタの値に1を加え1とし、これで、5(0)の命令は完了したことになる。
(6−A)第6サイクルの命令デコード・発行ステージ
命令swapのデコード・発行を行う。オペランド・スタック上の最上位の2語を入れ替える命令であるので、同様な操作をAPSに対して行い、APSは3−6のようになる。
トレイル・ポインタの値は5であるので、IBのエントリ5(5)に上記命令の内容を書き込む。この際、命令swapは、スタック上でコピーを作成することのないオペランド・スタックの操作命令であるので、Sフィールドは実行済みを意味する1とする。さらに、トレイル・ポインタの値に1を加え6にする。
(6−B)第6サイクルの実行ステージ
LSUの実行部はRS831から渡されるロード命令を実行する。即ち、データ・バッファにアクセスし、変数Tのデータを読み出す。
(6−C)第6サイクルの完了ステージ
5−5の状態にあるIBのヘッダ・ポインタが示すエントリ5(1)において、Sフィールドが1となったので、5(1)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(1)のデスティネーション・フィールドに書き込まれている〈2〉,〈3〉をCPSにプッシュし、CPSは4−6のようになる。さらに、ヘッダ・ポインタの値に1を加え2とし、これで、5(1)の命令は完了したことになる。
(7−A)第7サイクルの命令デコード・発行ステージ
命令dup_x1のデコード・発行を行う。命令dup_x1は、ワード・スタックが、(右方向に成長するものとして)...., word1, word2のような状態であるとき、これを...., word2, word1, word2と変えるような、スタック上で1語のコピーを作成するオペランド・スタックの操作命令であるので、FLに登録されているフリーなCRFのエントリ6(8)をコピー・データを保持すべく割り付け、3−6のように下から〈7〉,〈6〉となっている状態のAPSを3−7のように〈8〉,〈7〉,〈6〉と変える。
CRFのエントリ6(8)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は6であるので、IBのエントリ5(6)に上記命令の内容を書き込む。この際、コピー元となるデータを保持すべく割り付けられているCRFのエントリのアドレス〈6〉を第1ソース・フィールドに、コピー・データを保持すべく新たに割り付けられるCRFのエントリのアドレス〈8〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え7にする。
IBのエントリ5(6)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス6と共に、演算ユニット1の空いているRS811に書き込む。
また、6−6の状態にあるCRFのエントリ6(6)のWCFフィールド及びデータ・フィールドが読み出され、この場合、WCFが0であるので、データ転送の必要はない。
(7−B)第7サイクルの実行ステージ
演算ユニット0は、5(2)の演算命令の実行を終了しており、演算結果を構成する2語(A+B)_1、(A+B)_2を、それぞれデスティネーションであるCRFのエントリのアドレス〈4〉,〈5〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(4)、6(5)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(3)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS802においても、CRFのエントリのアドレス〈4〉,〈5〉に対応するデータの書き込みが行われる。
LSUは、データ・バッファから読み出した変数Tのデータを、デスティネーションであるCRFのエントリのアドレス〈7〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(7)にデータの書き込みを行い、WCFフィールドを1に変更する。
以上で、IBの5(2)、5(4)の各エントリに書き込まれている命令の実行が共に正常に終了するので、次のサイクルにおいて、5(2)及び5(4)のSフィールドが正常終了を意味する1に変更される。
(7−C)第7サイクルの完了ステージ
5−6の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(8−A)第8サイクルの命令デコード・発行ステージ
命令fsubのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈7〉,〈6〉をポップし、FLに登録されているフリーなCRFのエントリ6(9)を演算結果を保持すべく割り付け、そのエントリのアドレス〈9〉をAPSにプッシュし、APSは3−8のようになる。
CRFのエントリ6(9)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は7であるので、IBのエントリ5(7)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈7〉,〈6〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈9〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え8にする。
IBのエントリ5(7)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス7と共に、演算ユニット0の空いているRS801に書き込む(fsubの演算のレイテンシは2サイクルであるとする)。
また、6−7の状態にあるCRFの6(7)、6(6)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、6(7)のWCFが1であるので、次のサイクルにおいて、エントリ・アドレス〈7〉とデータTがCDBに載せられる。
(8−B)第8サイクルの実行ステージ
演算命令d2fの内容が書き込まれているRS802において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
(8−C)第8サイクルの完了ステージ
5−7の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
(9−A)第9サイクルの命令デコード・発行ステージ
命令fdivのデコード・発行を行う。オペランド・スタックから2語のソース・データをポップして演算を行い、1語の演算結果をプッシュする演算命令であるので、APSから〈8〉,〈9〉をポップし、FLに登録されているフリーなCRFのエントリ6(10)を演算結果を保持すべく割り付け、そのエントリのアドレス〈10〉をAPSにプッシュし、APSは3−9のようになる。
CRFのエントリ6(10)においては、BBフィールドに1を立て、WCF及びCの各フィールドには0を書き込む。
トレイル・ポインタの値は8であるので、IBのエントリ5(8)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈8〉,〈9〉を各々第1、第2ソース・フィールドに、APSにプッシュされる〈10〉を第1デスティネーション・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え9にする。
IBのエントリ5(8)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス8と共に、演算ユニット1の空いているRS812に書き込む(fdivの演算のレイテンシは10サイクルであるとする)。
また、6−8の状態にあるCRFの6(8)、6(9)の各エントリのWCFフィールド及びデータ・フィールドが読み出され、この場合、いずれのエントリもWCFが0であるので、データ転送の必要はない。
(9−B)第9サイクルの実行ステージ
(8−A)で述べたように、エントリ・アドレス〈7〉とデータTがCDBに載せられ、これに基づき、IBのエントリ5(7)に書き込まれているものと同じ内容が書き込まれている演算ユニット0のRS801においても、CRFのエントリのアドレス〈7〉に対応するデータの書き込みが行われる。
(9−C)第9サイクルの完了ステージ
5−8の状態にあるIBのヘッダ・ポインタが示すエントリ5(2)において、Sフィールドが1となったので、5(2)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(2)のソース・フィールドに書き込まれている〈0〉,〈1〉,〈2〉,〈3〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈4〉,〈5〉をCPSにプッシュし、CPSは4−9のようになる。エントリ・アドレスがCPSからポップされるCRFの6(0)、6(1)、6(2)、6(3)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈0〉,〈1〉,〈2〉,〈3〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え3とし、これで、5(2)の命令は完了したことになる。
(10−A)第10サイクルの命令デコード・発行ステージ
命令fstore[X]のデコード・発行を行う。スタックトップにある1語のデータのストア命令であるので、APSから〈10〉をポップし、APSは3−10のようになる。
トレイル・ポインタの値は9であるので、IBのエントリ5(9)に上記命令の内容を書き込む。この際、APSからポップされるCRFのエントリのアドレス〈10〉を第1ソース・フィールドに書き込んでいる。さらに、トレイル・ポインタの値に1を加え10にする。
IBのエントリ5(9)に書き込まれるものと同じ上記命令の内容を、IBのエントリのアドレス9と共に、LSUの空いているRS831に書き込む。次のサイクルにおいて、ストア・バッファに変数名[X]に対応するストア・アドレスが書き込まれる。
また、6−9の状態にあるCRFのエントリ6(10)のWCFフィールド及びデータ・フィールドが読み出され、この場合、WCFが0であるので、データ転送の必要はない。
(10−B)第10サイクルの実行ステージ
演算ユニット0は、5(3)の変換演算命令の実行を終了しており、1語の演算結果(A+B)を、デスティネーションであるCRFのエントリのアドレス〈6〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(6)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(6)、5(7)に書き込まれているものとそれぞれ同じ内容が書き込まれている演算ユニット1のRS810及び演算ユニット0のRS801においても、CRFのエントリのアドレス〈6〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(3)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(3)のSフィールドが正常終了を意味する1に変更される。
(10−C)第10サイクルの完了ステージ
5−9の状態にあるIBのヘッダ・ポインタが示すエントリ5(3)において、Sフィールドは0であるので、完了ステージの動作としては何も行われない。
以下では、特に記述すべき動作内容のない場合は、実行ステージであれ完了ステージであれ項目を省くことにする。
(11−B)第11サイクルの実行ステージ
演算命令fsubの内容が書き込まれているRS801において、必要なソース・データが全て揃ったので、その内容が演算ユニット0の実行部に渡され、演算が開始される。
スタック上でコピーを作成するようなオペランド・スタックの操作命令dup_x1の内容が書き込まれているRS811において、ソース・データが書き込まれたので、そのデータ(A+B)を、対応関係にあるデスティネーションであるCRFのエントリのアドレス〈8〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(8)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(8)に書き込まれているものと同じ内容が書き込まれている演算ユニット1のRS812においても、CRFのエントリのアドレス〈8〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(6)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(6)のSフィールドが正常終了を意味する1に変更される。
(12−C)第12サイクルの完了ステージ
5−11の状態にあるIBのヘッダ・ポインタが示すエントリ5(3)において、Sフィールドが1となったので、5(3)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(3)のソース・フィールドに書き込まれている〈4〉,〈5〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈6〉をCPSにプッシュし、CPSは4−12のようになる。エントリ・アドレスがCPSからポップされるCRFの6(4)、6(5)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈4〉,〈5〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え4とし、これで、5(3)の命令は完了したことになる。
(13−B)第13サイクルの実行ステージ
演算ユニット0は、5(7)の演算命令の実行を終了しており、1語の演算結果T-(A+B)を、デスティネーションであるCRFのエントリのアドレス〈9〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(9)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(8)に書き込まれているものと同じ内容が書き込まれている演算ユニット1のRS812においても、CRFのエントリのアドレス〈9〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(7)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(7)のSフィールドが正常終了を意味する1に変更される。
(13−C)第13サイクルの完了ステージ
5−12の状態にあるIBのヘッダ・ポインタが示すエントリ5(4)において、Sフィールドが1であるので、5(4)の内容に基づいてCPS(及びCRF)を操作する。すなわち、IBのエントリ5(4)のデスティネーション・フィールドに書き込まれている〈7〉をCPSにプッシュし、CPSは4−13のようになる。さらに、ヘッダ・ポインタの値に1を加え5とし、これで、5(4)の命令は完了したことになる。
(14−B)第14サイクルの実行ステージ
演算命令fdivの内容が書き込まれているRS812において、必要なソース・データが全て揃ったので、その内容が演算ユニット1の実行部に渡され、演算が開始される。
(14−C)第14サイクルの完了ステージ
5−13の状態にあるIBのヘッダ・ポインタが示すエントリ5(5)において、Sフィールドが1であるので、5(5)の内容に基づいてCPS(及びCRF)を操作する。すなわち、(6−A)におけるAPSの動作が再現され、CPSは4−14のようになる。さらに、ヘッダ・ポインタの値に1を加え6とし、これで、5(5)の命令は完了したことになる。
(15−C)第15サイクルの完了ステージ
5−14の状態にあるIBのヘッダ・ポインタが示すエントリ5(6)において、Sフィールドが1であるので、5(6)の内容に基づいてCPS(及びCRF)を操作する。すなわち、(7−A)におけるAPSの動作が再現され、CPSは4−15のようになる。さらに、ヘッダ・ポインタの値に1を加え7とし、これで、5(6)の命令は完了したことになる。
(16−C)第16サイクルの完了ステージ
5−15の状態にあるIBのヘッダ・ポインタが示すエントリ5(7)において、Sフィールドが1であるので、5(7)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(7)のソース・フィールドに書き込まれている〈7〉,〈6〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈9〉をCPSにプッシュし、CPSは4−16のようになる。エントリ・アドレスがCPSからポップされるCRFの6(7)、6(6)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈7〉,〈6〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え8とし、これで、5(7)の命令は完了したことになる。
(24−B)第24サイクルの実行ステージ
演算ユニット1は、5(8)の演算命令の実行を終了しており、1語の演算結果(A+B)/{T-(A+B)}を、デスティネーションであるCRFのエントリのアドレス〈10〉と共に、CDBに載せる。これに基づき、CRFにおいては、エントリ6(10)にデータの書き込みを行い、WCFフィールドを1に変更する。また、IBのエントリ5(9)に書き込まれているものと同じ内容が書き込まれているLSUのRS831においても、CRFのエントリのアドレス〈10〉に対応するデータの書き込みが行われる。
以上で、IBのエントリ5(8)に書き込まれている命令の実行が正常に終了するので、次のサイクルにおいて、5(8)のSフィールドが正常終了を意味する1に変更される。
(25−B)第25サイクルの実行ステージ
ストア命令fstoreの内容が書き込まれているRS831において、ストア・データが書き込まれたので、そのデータをストア・バッファに書き込む。
以上で、IBのエントリ5(9)に書き込まれているストア命令に関して、ストア・アドレスとストア・データのストア・バッファへの書き込みが共に終了するので、次のサイクルにおいて、5(9)のSフィールドがストア実行可能を意味する1に変更される。
(26−C)第26サイクルの完了ステージ
5−25の状態にあるIBのヘッダ・ポインタが示すエントリ5(8)において、Sフィールドが1となったので、5(8)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(8)のソース・フィールドに書き込まれている〈8〉,〈9〉をCPSからポップし、デスティネーション・フィールドに書き込まれている〈10〉をCPSにプッシュし、CPSは4−26のようになる。エントリ・アドレスがCPSからポップされるCRFの6(8)、6(9)の各エントリでは、BBフィールドを0に変更する。CRFのエントリのアドレス〈8〉,〈9〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え9とし、これで、5(8)の命令は完了したことになる。
(27−C)第27サイクルの完了ステージ
5−26の状態にあるIBのヘッダ・ポインタが示すエントリ5(9)においては、ストア命令が書き込まれており、Sフィールドが1となったので、LSUにデータ・バッファへのストアの実行を依頼する。さらに、5(9)の内容に基づいてCPS及びCRFを操作する。すなわち、IBのエントリ5(9)のソース・フィールドに書き込まれている〈10〉をCPSからポップし、CPSは4−27のようになる。エントリ・アドレスがCPSからポップされるCRFのエントリ6(10)では、BBフィールドを0に変更する。CRFのエントリのアドレス〈10〉をFLに登録する。さらに、ヘッダ・ポインタの値に1を加え10とし、これで、5(9)の命令は完了したことになる。
以上で、本実施例の計算機システムにおいてX=(A+B)/{T-(A+B)}の計算が完了したことになる。
本発明の計算機システムにおいては、分岐予測に基づく投機的実行を実現することができる。APS履歴ファイルは、投機的実行を可能にするために具備されるものである。条件分岐命令がデコードされるごとに、APS履歴ファイルの1エントリにAPSの全エントリ及びPP_OF_APSの内容を書き込むようになっている。以下に、本実施例の計算機システムにおいて、分岐予測に基づく投機的実行がどのように行われるかについて説明する。
前述のように、本実施例の計算機システムにおいては、命令デコード・発行ステージにおいて、命令をデコードして、命令の内容に応じてAPS及びCRFを操作すると共に、命令の内容をIB及び、必要な場合には、適切な機能ユニットの空いているRSに書き込むようになっている。初期状態から命令が流れ始め最初の条件分岐命令がデコードされるまでの間、発行される命令に分岐タグとして0を付し、この分岐タグ0を、命令の内容が書き込まれるIBのエントリ(と機能ユニットのRS)のBTフィールド、及び、割り付けられるCRFのエントリのCフィールドに書き込む。
最初の条件分岐命令がデコードされ分岐予測が行われる際に、分岐時点の状態を保存するために、APSの全エントリ及びPP_OF_APSの内容をAPS履歴ファイルのアドレス0のエントリに書き込む。上記の分岐予測に基づいた命令の流れにおいては、分岐タグとして1を付し、IB(、機能ユニットのRS)及びCRFの設定を行う。
2つ目の条件分岐命令がデコードされた時に、最初の条件分岐命令が未確定である場合、あるいは確定して予想が当たっていた場合には、APSの全エントリ及びPP_OF_APSの内容をAPS履歴ファイルのアドレス1のエントリに書き込む。2段目の分岐予測に基づいた命令の流れにおいては、分岐タグとして2を付し、IB(、機能ユニットのRS)及びCRFの設定を行う。
分岐予測が当たり続ければ以後同様に処理が進み、APS履歴ファイルへの書き込みはアドレス順に行われる。また、APS履歴ファイルのアドレスnのエントリに書き込みが行われてから次に書き込みが行われるまでの間に発行される命令には分岐タグとしてn+1を付すものとする。
分岐予測が外れた場合には、その条件分岐命令以降に発行された命令に付された分岐タグをもとに、各機能ユニットで実行中あるいはRSに保持されている命令をキャンセルし、CRFにおいてCフィールドで分岐タグを照合してその一致する全てのエントリの割り付けを解除し(BBフィールドを0に変更し、エントリ・アドレスをFLに登録する)、IBにおいてその条件分岐命令以降にキューに加えられたエントリを除外する(トレイル・ポインタの値をその条件分岐命令が書き込まれているエントリの次のアドレスに書き換える)。さらに、同じエントリ・アドレスにあるCPSのエントリとその内容が一致しないAPSの各エントリ及びPP_OF_APSに、その条件分岐命令がデコードされた際にAPS履歴ファイルに書き込まれた内容をコピーして、正しい位置の命令からデコード・発行を再開する。
以上のように、本発明の計算機システムにおいては、APS履歴ファイルを用いることによって、条件分岐命令がデコードされ分岐予測が行われる各々の時点の状態を再構成することができるので、分岐予測に基づく投機的実行が可能である。
以上では、説明を簡単にするため、1サイクルで同時にデコード・発行/完了できる命令は高々1つまでとして説明してきた。本発明の計算機システムにおいては、同時に複数の命令をデコード・発行/完了できる構成とすることが可能である。すなわち、FLがFIFOキューの構成となっていれば、割り付けのためにフリーな(空いている)CRFのエントリのアドレスをFLから取り出す順番は決まっており、各命令における何語ポップし何語プッシュするかというようなスタック操作の内容を把握して、同時に複数の命令をデコード・発行することができる。また、命令の完了は、基本的には、IBの書き込みの内容をもとに、命令がデコード・発行された際のAPSの動作を再現すべくCPSを操作し、エントリ・アドレスがCPSからポップされるCRFのエントリの割り付けを解除すればよいので、同時に複数の命令を完了できる構成とすることも可能である。
同時にデコード・発行/完了できる命令の数を多くするほど、命令デコード・発行ユニットその他の制御回路が複雑になると共に、APS、CPS、IB、CRFやデータ・バッファを構成する各レジスタ・ファイルのポートの数や演算ユニットの数、さらにCDBを構成するバスの数などの点で、より多量のハードウェアが必要となる。
本発明の計算機システムにおいては、命令デコード・発行ステージの前段において、同時にデコード・発行する複数の命令の内容を統合した形式に変換するような構成とすることも可能である。あるいは、変換済のコードを命令キャッシュに蓄えておくような構成としてもよい。
たとえば、1サイクル当り2命令までデコード・発行できるような構成をとる場合、前述のX=(A+B)/{T-(A+B)}を計算するプログラムは第15図の図表に示されるような内容に変換される。第15図の図表の各段には、同時にデコード・発行される2つの命令に基づく、PP_OF_APSの増分、APSの操作内容及びIBの2エントリに書き込まれるべき命令の内容を示している。ここでは、命令発行前のAPSの内容を.....s2, s1, s0(右端がスタックトップ)、FIFOキューの構成となっているフリー・リストの内容を(取り出される順に)f1, f2, f3.....として記述しており、命令発行時にそれぞれ対応するCRFのエントリ・アドレスに置き換えられるようになっている。PP_OF_APSの増分の欄で示されるようにAPSのスタックトップの位置が移動するが、APSの操作内容の欄では、この移動後のスタックトップの位置が右端に対応している。また、'NC'は「変化なし(No Change)」を意味する。
本発明の計算機システムは、上述の実施例に限られるものではなく、細部の構成の異なる様々な実施例が存在する。たとえば、次のようなものをあげることができる。
▲1▼整数データ用/浮動小数点データ用、あるいは32ビット・データ用/64ビット・データ用というようにデータ型別にCRF及びフリー・リストを備え、さらに、それぞれに対応してひと揃いの実行ユニットを設けたもの。
▲2▼複数組の前進ポインタ・スタックと完了ポインタ・スタックを設けた構成とし、メソッドの呼び出し/メソッドからの復帰の際に、用いる前進ポインタ・スタックと完了ポインタ・スタックの組を変更するようにしたもの。
▲3▼複数組の前進ポインタ・スタック、完了ポインタ・スタック、命令バッファ、及びデータ・バッファを設け、複数のスレッドを並行して処理できる構成としたもの。
その他にも、レジスタ・ベースのスーパースカラ・アーキテクチャにおいて考えられる様々な変形の多くが、本発明に基づく計算機システムにおいても適用できる。
命令セットがスタック型の命令及びレジスタ型の命令を共に含むような、本発明に基づく計算機システムも実現可能である。すなわち、前進ポインタ・スタック及び完了ポインタ・スタックに加えて、各論理レジスタにそれぞれ対応して設けられた各エントリに統合レジスタ・ファイルのエントリ・アドレスが書き込まれるようになっている前進レジスタ・マッピング・テーブル及び完了レジスタ・マッピング・テーブルを具備する構成とし、スタック型の命令に関しては前進/完了ポインタ・スタックを操作し、レジスタ型の命令に関しては前進/完了レジスタ・マッピング・テーブルをアクセスするようにする。この場合、前進ポインタ・スタック履歴ファイルの代わりに、各々のエントリに前進ポインタ・スタック及び前進レジスタ・マッピング・テーブル双方の内容が書き込まれるようになっている前進履歴ファイルを具備する必要がある。
産業上の利用可能性
以上のように、本発明の計算機システムは、正確な例外処理を保証しつつ、スタックマシンの機械語で記述されたプログラムをout-of-orderで処理するものであるが、複数の機能ユニットによる並列処理やそれらのパイプライン化によって効率的な処理を行うことが可能であるという利点がある。
また、分岐予測に基づく投機的実行や、1サイクル当り複数命令のデコード・発行/完了の可能な構成とすることにより、さらなる高速化が可能である。
Claims (8)
- データ・キャッシュ(11)と
変数データを保持できるようになっているデータ・バッファ(12)と
各々のエントリにデータが書き込まれるようになっている統合レジスタ・ファイル(6)と
各々のエントリに該統合レジスタ・ファイル(6)のエントリのアドレスが書き込まれるようになっている前進ポインタ・スタック(3)と
各々のエントリに個々の命令の内容が書き込まれるようになっているFIFO(First In First Out)キューの構成となっている命令バッファ(5)と
演算を実行するようになっている演算ユニット(80,81)と
該データ・キャッシュ(11)及び該データ・バッファ(12)にアクセスできるようになっているロード/ストア・ユニット(83)とを具備し、
オペランド・スタックに対するポップ操作を含む命令がデコードされた場合には、ポップすべき語数と同じ数だけ該統合レジスタ・ファイル(6)のエントリのアドレスを該前進ポインタ・スタック(3)からポップし、
オペランド・スタックに対するプッシュ操作を含む命令がデコードされた場合には、プッシュすべき語数と同じ数だけ割り付けられていない該統合レジスタ・ファイル(6)のエントリを割り付け、該割り付けた該統合レジスタ・ファイル(6)のエントリのアドレスを該前進ポインタ・スタック(3)にプッシュし、
デコードされた命令の内容を、ポップ/プッシュ操作を伴う命令の場合にはポップ/プッシュされる該統合レジスタ・ファイル(6)のエントリのアドレスと共に、該命令バッファ(5)に書き込み、
該命令バッファ(5)に保持されている未実行の命令をデータ駆動の原理に基づき処理するようになっている、スタックマシンの機械語で記述されたプログラムを実行する計算機システム。 - 各々のエントリに該統合レジスタ・ファイル(6)のエントリのアドレスが書き込まれるようになっている完了ポインタ・スタック(4)を具備し、
該命令バッファ(5)の先頭のエントリにおいて保持されている命令の完了が可能である、あるいはそうなると、該命令バッファ(5)の該先頭のエントリの内容に基づき、該保持されている命令がデコードされた際の該前進ポインタ・スタック(3)の動作を再現すべく該完了ポインタ・スタック(4)を操作し、該命令バッファ(5)から該先頭のエントリを除外し、
ポップ操作によって該完了ポインタ・スタック(4)におけるアドレスの保持が無くなった該統合レジスタ・ファイル(6)のエントリの割り付けを解除するようになっている請求項1記載の計算機システム。 - 割り付けられていない該統合レジスタ・ファイル(6)のエントリのアドレスを保持するフリー・リストを具備し、
初期状態においては、該統合レジスタ・ファイル(6)の全てのエントリのアドレスが該フリー・リストに登録されており、
該統合レジスタ・ファイル(6)のエントリを割り付ける必要がある場合に、該フリー・リストから割り付けられていない該統合レジスタ・ファイル(6)のエントリのアドレスを取り出し、
割り付けが解除された該統合レジスタ・ファイル(6)のエントリのアドレスを該フリー・リストに登録するようになっている請求項2記載の計算機システム。 - 各々のエントリに該前進ポインタ・スタック(3)の内容が書き込まれるようになっている前進ポインタ・スタック履歴ファイル(3a)を具備し、
該統合レジスタ・ファイル(6)が各々のエントリに分岐タグも書き込まれるような構成となっており、
命令のデコードの際に、割り付けられる該統合レジスタ・ファイル(6)のエントリに分岐タグを書き込むようになっており、
条件分岐命令がデコードされるごとに、該前進ポインタ・スタック履歴ファイル(3a)の1エントリに該前進ポインタ・スタック(3)の内容を書き込み、分岐タグを変更して、分岐予測に基づく投機的実行を行い、
分岐予測が外れた場合には、その条件分岐命令以降にデコードされた命令を無効にし、該条件分岐命令以降にデコードされた命令に付した分岐タグが書き込まれている該統合レジスタ・ファイル(6)のエントリの割り付けを解除し、該条件分岐命令がデコードされた際に書き込みの行われた該前進ポインタ・スタック履歴ファイル(3a)のエントリの内容を、該前進ポインタ・スタック(3)にコピーして、正しい位置の命令から処理を再開するようになっている請求項2記載の計算機システム。 - 該前進ポインタ・スタック(3)と該完了ポインタ・スタック(4)が循環型のバッファの構成となっており、
該前進ポインタ・スタック(3)及び該完了ポインタ・スタック(4)で、該統合レジスタ・ファイル(6)のエントリのアドレスを保持する最下位のエントリの内容が一致する場合には、該前進ポインタ・スタック(3)及び該完了ポインタ・スタック(4)において該最下位のエントリにおける該統合レジスタ・ファイル(6)のエントリのアドレスの保持を解除し、該一致する内容で示される該統合レジスタ・ファイル(6)のエントリに書き込まれているデータを該データ・バッファ(12)にストア(Spill)することができるようになっており、
該データ・バッファ(12)から該統合レジスタ・ファイル(6)にロード(Fill)すべきデータに対し、割り付けられていない該統合レジスタ・ファイル(6)の1エントリを割り付け、該データを書き込み、該前進ポインタ・スタック(3)及び該完了ポインタ・スタック(4)において、該統合レジスタ・ファイル(6)のエントリのアドレスを保持する最下位のエントリの1つ下のエントリに該データが書き込まれる該統合レジスタ・ファイル(6)のエントリのアドレスを保持させることによって、該データ・バッファ(12)から該統合レジスタ・ファイル(6)へのデータのロード(Fill)を行えるようになっている請求項2記載の計算機システム。 - 該フリー・リストがFIFOキューの構成となっており、
同時に複数の命令をデコードし、該前進ポインタ・スタック(3)の操作、該統合レジスタ・ファイル(6)のエントリの割り付け及び該命令バッファ(5)の連続する複数のエントリへの命令の内容の書き込みを行う機能と、
同時に該命令バッファ(5)の連続する複数のエントリに書き込まれている内容に基づき、該完了ポインタ・スタック(4)の操作及び該統合レジスタ・ファイル(6)のエントリの割り付けの解除を行う機能を有する請求項3記載の計算機システム。 - 各々のエントリにデータが書き込まれるようになっている統合レジスタ・ファイル(6)と、
各々のエントリに該統合レジスタ・ファイル(6)のエントリのアドレスが書き込まれるようになっている前進ポインタ・スタック(3)と、
各々のエントリに個々の命令の内容が書き込まれるようになっているFIFO(First In First Out)キューの構成となっている命令バッファ(5)と、
各々適当な数のリザベーション・ステーションを備える機能ユニット群と、
該統合レジスタ・ファイル(6)及び該機能ユニット群の間でデータを該統合レジスタ・ファイル(6)のエントリのアドレスと共に分配するようになっている共通データ・バス(8)とを具備し、
デコードされた命令においてオペランド・スタックに対するポップ操作が規定されている場合には、ポップすべき語数と同じ数だけ該統合レジスタ・ファイル(6)のエントリのアドレスを該前進ポインタ・スタック(3)からポップし、
デコードされた命令においてオペランド・スタックに対するプッシュ操作が規定されている場合には、プッシュすべき語数と同じ数だけ割り付けられていない該統合レジスタ・ファイル(6)のエントリを割り付け、該割り付けた該統合レジスタ・ファイル(6)のエントリのアドレスを該前進ポインタ・スタック(3)にプッシュし、
デコードされた命令の内容を、ポップ/プッシュ操作を伴う命令の場合にはポップ/プッシュされる該統合レジスタ・ファイル(6)のエントリのアドレスと共に、該命令バッファ(5)に書き込み、
命令の種類に応じて、必要な場合には、該命令バッファ(5)に書き込まれる命令の内容を、該命令を実行する機能ユニットの命令の内容を保持していないリザベーション・ステーションにも書き込み、
該前進ポインタ・スタック(3)からエントリ・アドレスがポップされる該統合レジスタ・ファイル(6)のエントリの各々の内容が読み出され、データが既に書き込まれている場合には、エントリ・アドレスとデータが該共通データ・バス(8)に載せられるようになっており、
該リザベーション・ステーションの各々において、命令の内容を保持している場合、そこに書き込まれているソース・データを保持すべき該統合レジスタ・ファイル(6)のエントリのアドレスと該共通データ・バス(8)を通じて送られてくる該統合レジスタ・ファイル(6)のエントリのアドレスが比較され一致すればデータが取り込まれ、必要なソース・データが揃った後に該命令の実行が開始され、
該機能ユニット群の各々において、デコードの際該前進ポインタ・スタック(3)に該統合レジスタ・ファイル(6)のエントリのアドレスがプッシュされるような命令の実行の結果得られたデータを該プッシュされた該統合レジスタ・ファイル(6)の該エントリの該アドレスと共に該共通データ・バス(8)に載せ、
該統合レジスタ・ファイル(6)においては、該共通データ・バス(8)を通じて送られてくる内容に基づきデータの書き込みを行うことによって、スタックマシンの機械語で記述されたプログラムを実行する計算機システム。 - 各々のエントリに該統合レジスタ・ファイル(6)のエントリのアドレスが書き込まれるようになっている完了ポインタ・スタック(4)を具備し、
該命令バッファ(5)におけるキューの先頭のエントリに保持されている命令の完了が可能である、あるいはそうなると、該キューの該先頭のエントリの内容に基づき、該保持されている命令がデコードされた際の該前進ポインタ・スタック(3)の動作を再現すべく該完了ポインタ・スタック(4)を操作し、該キューから該先頭のエントリを除外し、
ポップ操作によって該完了ポインタ・スタック(4)におけるアドレスの保持が無くなった該統合レジスタ・ファイル(6)のエントリの割り付けを解除するようになっている請求項7記載の計算機システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP11504799 | 1999-04-22 | ||
PCT/JP2000/002512 WO2000065435A1 (fr) | 1999-04-22 | 2000-04-17 | Systeme informatique |
Publications (1)
Publication Number | Publication Date |
---|---|
JP3701203B2 true JP3701203B2 (ja) | 2005-09-28 |
Family
ID=14652879
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000614114A Expired - Fee Related JP3701203B2 (ja) | 1999-04-22 | 2000-04-17 | 計算機システム |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1209559A1 (ja) |
JP (1) | JP3701203B2 (ja) |
CN (1) | CN1236382C (ja) |
AU (1) | AU3987100A (ja) |
WO (1) | WO2000065435A1 (ja) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI237771B (en) | 2004-03-22 | 2005-08-11 | Via Tech Inc | Media player control system and control method used therein |
CN100454417C (zh) * | 2004-04-16 | 2009-01-21 | 威盛电子股份有限公司 | 媒体播放控制系统及方法 |
US7721071B2 (en) * | 2006-02-28 | 2010-05-18 | Mips Technologies, Inc. | System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor |
CN103106097B (zh) * | 2013-03-12 | 2016-02-10 | 无锡江南计算技术研究所 | 一种即时编译系统中的栈运算优化方法 |
US20160274915A1 (en) * | 2015-03-20 | 2016-09-22 | Qualcomm Incorporated | PROVIDING LOWER-OVERHEAD MANAGEMENT OF DATAFLOW EXECUTION OF LOOP INSTRUCTIONS BY OUT-OF-ORDER PROCESSORS (OOPs), AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0769799B2 (ja) * | 1992-08-17 | 1995-07-31 | 松下電器産業株式会社 | 情報処理装置 |
JP3296027B2 (ja) * | 1993-06-16 | 2002-06-24 | 富士通株式会社 | ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法 |
US6298435B1 (en) * | 1996-04-16 | 2001-10-02 | International Business Machines Corporation | Methods and apparatus for exploiting virtual buffers to increase instruction parallelism in a pipelined processor |
JP2901573B2 (ja) * | 1997-05-30 | 1999-06-07 | 甲府日本電気株式会社 | スーパースカラー方式の情報処理装置 |
JP2943776B2 (ja) * | 1997-07-04 | 1999-08-30 | 日本電気株式会社 | 情報処理装置 |
-
2000
- 2000-04-17 WO PCT/JP2000/002512 patent/WO2000065435A1/ja not_active Application Discontinuation
- 2000-04-17 EP EP00919128A patent/EP1209559A1/en not_active Withdrawn
- 2000-04-17 CN CNB008065535A patent/CN1236382C/zh not_active Expired - Fee Related
- 2000-04-17 JP JP2000614114A patent/JP3701203B2/ja not_active Expired - Fee Related
- 2000-04-17 AU AU39871/00A patent/AU3987100A/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
WO2000065435A1 (fr) | 2000-11-02 |
CN1236382C (zh) | 2006-01-11 |
CN1348561A (zh) | 2002-05-08 |
EP1209559A1 (en) | 2002-05-29 |
AU3987100A (en) | 2000-11-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5889982A (en) | Method and apparatus for generating event handler vectors based on both operating mode and event type | |
US5452426A (en) | Coordinating speculative and committed state register source data and immediate source data in a processor | |
EP0547240B1 (en) | Risc microprocessor architecture implementing fast trap and exception state | |
US7424599B2 (en) | Apparatus, method, and instruction for software management of multiple computational contexts in a multithreaded microprocessor | |
US6038653A (en) | High-performance superscalar-based computer system with out-of-order instruction execution and concurrent results distribution | |
US9092215B2 (en) | Mapping between registers used by multiple instruction sets | |
JP3871884B2 (ja) | 記憶からロードへの転送のための機構 | |
US6122656A (en) | Processor configured to map logical register numbers to physical register numbers using virtual register numbers | |
US5430884A (en) | Scalar/vector processor | |
US5933627A (en) | Thread switch on blocked load or store using instruction thread field | |
US5634118A (en) | Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation | |
US20090019261A1 (en) | High-Performance, Superscalar-Based Computer System with Out-of-Order Instruction Execution | |
US6119223A (en) | Map unit having rapid misprediction recovery | |
US5613132A (en) | Integer and floating point register alias table within processor device | |
JPH07182167A (ja) | マイクロプロセッサのロード/ストア機能ユニットおよび情報処理用装置 | |
US6266763B1 (en) | Physical rename register for efficiently storing floating point, integer, condition code, and multimedia values | |
US20040226011A1 (en) | Multi-threaded microprocessor with queue flushing | |
US6324640B1 (en) | System and method for dispatching groups of instructions using pipelined register renaming | |
JP3207124B2 (ja) | カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置 | |
KR100572040B1 (ko) | 명령들의 퇴거시 물리적인 레지스터들을 선택적으로 자유화하도록 구성된 프로세서 | |
JPH11345122A (ja) | プロセッサ | |
US20080229080A1 (en) | Arithmetic processing unit | |
JP3701203B2 (ja) | 計算機システム | |
JP3638584B2 (ja) | 計算機システム | |
AU745449B2 (en) | Computer system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040331 |
|
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: 20050614 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20050712 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
LAPS | Cancellation because of no payment of annual fees |