[go: up one dir, main page]

JP2786574B2 - コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置 - Google Patents

コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置

Info

Publication number
JP2786574B2
JP2786574B2 JP5080421A JP8042193A JP2786574B2 JP 2786574 B2 JP2786574 B2 JP 2786574B2 JP 5080421 A JP5080421 A JP 5080421A JP 8042193 A JP8042193 A JP 8042193A JP 2786574 B2 JP2786574 B2 JP 2786574B2
Authority
JP
Japan
Prior art keywords
address
acu
program
store
load
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 - Lifetime
Application number
JP5080421A
Other languages
English (en)
Other versions
JPH06214799A (ja
Inventor
マハムト・ケマル・エブチオウル
エリック・ポール・クロンスタット
マノジ・クマール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH06214799A publication Critical patent/JPH06214799A/ja
Application granted granted Critical
Publication of JP2786574B2 publication Critical patent/JP2786574B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、一般にコンピュータ・
システムに関し、詳しくはディジタル・コンピュータ・
システムの効率及び速度を改善するための方法と装置に
関する。さらに詳しくは、本発明は、動作をより速くす
るためにコンピュータ・プログラム中での命令の順序を
並べ換えるための方法と装置に関する。
【0002】
【従来の技術】速度は、コンピュータについて判断を下
す際の重要な基準である。当業界の一般的な長期的傾向
は、ますます効率的なより速いコンピュータを開発する
ことである。
【0003】コンピュータの実行速度を増加させる1つ
の方法は、メモリ待ち時間を短縮することである。メモ
リ待ち時間とは、命令サイクルの開始時にメモリからオ
ペランドを要求してから、そのオペランドがプロセッサ
内の適切なレジスタに供給されるまでの、時間的遅延で
ある。プロセッサとCPUが今日情報を処理できる速度
と効率が与えられているとすると、メモリ待ち時間のた
めに、メモリ要求を開始した後にプロセッサが遊休状態
になってから、要求されたデータがメモリから戻されて
実際に作業サイクルが開始できるまでに、比較的長時間
の遅延が生じる可能性がある。実際にはプロセッサは、
作業のためにオペランドまたは情報を待つのに、データ
処理に費やすよりも多くのプロセッサ時間を容易に費や
す可能性がある。
【0004】理想的な状況は、オペランドとレジスタの
両方が使用可能になるとすぐに、オペランドをプロセッ
サ内の適当なレジスタに運ぶことであろう。多くの場
合、これは、プロセッサがオペランドを必要とする前に
うまく行うことができる。そうすると、オペランドが、
必要なときプロセッサにとってただちに使用可能とな
り、メモリからオペランドが渡されるのを待つ損失時間
がなくなる。しかし、このようなプロセッサ内の適当な
レジスタへのオペランドの早期ロードを妨げる障害がい
くつか存在する。
【0005】このような障害の1つは、コンピュータ
が、その出力の保全性を維持するために、その動作をか
なり硬直した順序パターンで実行しなければならないこ
とである。コンピュータがその動作を順序通り実行する
には、必要な命令をプロセッサにロードし、その命令に
必要な特定のオペランドを適当なレジスタにロードする
こと必要である。その後、プロセッサは、1つまたは複
数のオペランドに対して求められた動作を実行する。次
にコンピュータは結果を記憶する。結果の記憶が完了す
ると、プロセッサは、次の命令サイクルを開始して、必
要な命令を取り出し、次いで必要な1つまたは複数のオ
ペランドなどを取り出して、およそ同じプロセスを続行
する。一般に、前の命令サイクルを完了し、その結果を
記憶してからでないと、次の命令が開始できない。
【0006】最近の開発によって、前述の障害のいくつ
かが解決された。このような最近の開発の1つに、命令
パイプラインまたは待ち行列機構を備えた設計のプロセ
ッサがあり、この命令パイプラインまたは待ち行列機構
によってプロセッサは一度に複数の命令を取り出すこと
ができ、実行のためにプロセッサがこれらの命令を必要
とする前に使用可能にすることができる。各命令サイク
ルの完了時に、コンピュータには、実行すべき次の命令
がプロセッサ内で使用可能なので、メモリからの次の命
令を待つことによって生ずる遅延はない。これは、単一
プロセッサとより精巧なプロセッサに共通の機構であ
る。また、ほとんどすべての高性能コンピュータは、い
くつかの命令の実行をオーバーラップすることができ
る。高性能コンピュータは、そのハードウェア資源を最
適に使用するために、しばしば元のプログラム中で指定
された順序とは異なる順序で命令(またはそれらの命令
を含む原始動作)を実行する。
【0007】コンピュータの動作で命令または演算をオ
ーバーラップさせる方法がいくつかある。1つの方法
は、ハードウェアのみを通じてそれを実施するものであ
るが、これは複雑でそれほど有望な方法ではない。もう
1つの方法は、コンパイラに、最適化プロセスを通じて
プログラムの実行順序を並び換えさせるもので、これ
は、はるかにより効率的で効果的な方法である。
【0008】コンパイラは、プログラムのコンパイル中
に命令順序を並べ換え、実行がオーバーラップできる1
組の命令を形成する。コンパイラが、プログラム解析に
よって、ある命令によってもたらされた結果を記憶する
メモリまたはレジスタが、他の命令がその入力オペラン
ドを取り出し等するために使用するものとは異なること
を保証できる場合にのみ、2つの命令の実行がオーバー
ラップでき、すなわちプログラム中で指定された順序と
異なる順序で実行することができる。この主題に関する
文献では、これらのことは、反出力/真データ依存制約
条件として知られている。
【0009】オペランドがレジスタから取り出され、結
果がレジスタに記憶されるときは、上述の制約条件を強
制することは容易である。しかし、オペランドがメモリ
から取り出され、あるいは結果がメモリに記憶されると
きは、この課題ははるかに困難である。命令によって参
照されるメモリ位置のアドレスが、プログラムがコンピ
ュータによって実行されるときに計算される場合には、
この問題は特に深刻である。この状況では、2つのアド
レス計算が、プログラムの実行時に同じアドレスをもた
らすかどうかを決定することは、理論的に不可能であ
り、あるいは近い将来にコンパイラからは期待されない
複雑なプログラム解析能力が必要となる。また、データ
依存性をコンパイル時に解析しつつ行うことは、データ
へのアクセスに間接的アドレス指定またはポインタを使
用するときには、極めて実現しにくい。
【0010】プログラム中で計算され使用される2つの
アドレスがプログラム実行時に同一になるか異なるもの
になるかをコンパイラは判定できないが、プログラム解
析技法での経験によれば、アドレスが異なる確率が非常
に高い。しかし、コンパイラは、プログラムの保全性と
正確性のために、アドレスが同じになる場合のことを想
定する結果、得られる並列性、動作効率、及び速度の大
きな損失が生じることになる。コンパイラが逆の動作を
し、アドレスの衝突がないであろうと仮定するのは、コ
ンパイラ最適化としては安全でないであろう。
【0011】
【発明が解決すべき課題】したがって問題は、簡単に言
えば、どのようにしてコンパイラが順不同のオペランド
取出しの可能性を完全に最適化できるようにするかであ
る。順不同のオペランド取出しとは、最適化コンパイル
済みプログラム中におけるストア動作に先立つオペラン
ドのロード動作であり、このオペランドのロード動作
は、最適化コンパイルされていないプログラム中におい
ては該ストア動作に後続して存在した。
【0012】ロード動作をストア動作より前に順不同で
実行できるようにすることによって、コンパイラにプロ
グラムの実行を最適化させようとする1つの試みが、ア
レクサンドル・ニコラウ(Alexandru Nicolau)、IE
EETransactions On Computers, Vol.38, No.5(1989
年5月)"Run-Time Disambiguation:Coping with Static
ally Unpredictable Dependencies"に記載されている。
ニコラウの論文は、コンパイラが、記憶動作の前にロー
ド動作を移すことができる時を識別して、必要なコーデ
ィングを挿入し、その結果、プロセッサが、プログラム
がコンピュータによって実行される時に検査を行って、
記憶動作とロード動作のアドレスが一致するかどうか判
定できるようにする方法を記載している。一致しない場
合には、プロセッサは、記憶動作の前にロード動作が移
された、最適化された命令シーケンスへの分岐動作を実
行する。一致する場合には、プロセッサは、記憶動作の
前にロード動作を移させないセーフ・コードに分岐す
る。プロセッサに検査を行わせて、ロードの移動前のア
ドレスとプログラム実行中に記憶機構に割り当てられる
アドレスが一致するかどうかを判定させるのは、実行速
度増加の妨げとなる。実際に、プログラムを元の最適化
されていない順序で実行するときよりも、ニコラウの構
成で実行する方が時間がかかることが時々ある。ニコラ
ウはこのことをその論文に記している。実行時明確化プ
ロセスの難点の1つは、プロセッサまたはCPUが、ア
ドレスの比較というCPUには適していないプロセスを
含めて、すべての作業を行わなければならないことであ
る。CPU内の各演算論理機構(ALU)は、一時にロ
ード動作の1つのアドレスを記憶動作の1つのアドレス
としか比較できない。CPUは、ロード動作が順不同で
実行される前に、記憶動作のアドレスを生成し、それを
ロード動作のアドレスと比較しなければならない。
【0013】本発明の目的は、既存の技術に伴う上記の
問題を解決し、コンピュータの全体的処理速度を増加さ
せ、その動作をより効率的にすることである。
【0014】本発明は、コンピュータ・プログラムの実
行中に普通なら存在するはずのメモリ待ち時間の大部分
をなくすことによって、コンピュータ・システムの速度
と効率を向上させる。
【0015】本発明の他の目的は、誤りのないコンピュ
ータ動作を保証しながら、コンピュータ動作における速
度と効率の増加を果たすことである。
【0016】
【課題を解決するための手段】本発明は、コンュータ・
システムと組み合わせたとき、正確さを失わずに速度及
び効率の向上という所望の結果を達成する、いくつかの
新しい主要構成要素を包含する。新しい要素とは、オプ
ティマイザを含む改良されたコンパイラ、命令セット中
に新しい命令を有する改良されたCPUまたはプロセッ
サ、及び、本明細書でアドレス比較機構(ACU)と称
する、新しいCPU命令に応答して、CPUアドレスを
以前に生成されたアドレスと速やかに比較するための新
しいハードウェアである。ACUは通常、連想メモリ
(内容アドレス可能メモリとも呼ばれる)を使用して実
施されるが、他の実施態様も可能である。
【0017】簡単に言えば、改良されたコンパイラ、連
想メモリまたはACU、及び改良されたプロセッサまた
はCPUを新しい命令と共に使用して、順不同ロード動
作を誤りなく実行するための方法が提供される。本発明
による方法の基本的態様では、プログラムのコンパイル
中に、オプティマイザを含む改良されたコンパイラが、
関連する記憶動作の前に順序を移すことのできるロード
動作を識別し、次いで関連する記憶動作の前にそのロー
ド動作を移す。関連する記憶動作はコンパイルされた形
のプログラムでその前に移されたロード動作を用いて識
別される。プロセッサによるコンパイル済みプログラム
の実行中に、順不同ロード動作によって取り出されたオ
ペランドのアドレスが、ACUにセーブされる。ACU
は、ロード動作中にセーブされたアドレスを、記憶動作
が実行されるとき、プロセッサにより関連する記憶動作
によって生成されたアドレスと比較する。比較したアド
レスが異なる場合には、プロセッサはプログラムの実行
を続け、次いでACU内にセーブされたロード動作のア
ドレスを、それがもはや必要ないときは消去する。比較
したアドレスが同じ場合には、記憶動作が打ち切られ、
回復プログラムが実行される。回復プログラムの目的
は、ロード命令と記憶命令が同じメモリ位置にアクセス
するときに、これらの命令の順序を逆にすることによっ
て発生する誤りを除くことである。
【0018】本発明のもう1つの態様では、コンパイラ
は、プログラムの実行効率を向上させるために関連する
記憶動作の前に移すことのできるロード動作を識別した
後、そのような最適化が安全であることを証明できない
場合には、そのロード動作にフラグを付ける。好ましい
実施例では、コンパイラは、ロード命令をロード・セー
ブ命令に変えることによってフラグ付けを行う。さらに
コンパイラは関連する記憶動作を変更し、フラグを付け
る。好ましい実施例では、コンパイラは、記憶動作を記
憶・検査命令に変えることによってフラグ付けを行う。
次いで、コンパイラは、記憶・検査命令の前にロード・
セーブ命令を移す。次いでコンパイラは、記憶・検査命
令の後に追加の命令、すなわち、ロード動作によってセ
ーブされたオペランドのアドレスを、コンパイル済みプ
ログラムの実行中に記憶動作が使用するアドレスと比較
した後に消去することを目的とする命令を追加する。ま
た、ロード動作中にセーブされたオペランドのアドレス
が、コンパイル済みプログラムの実行中に記憶動作によ
って生成されるアドレスと同じ場合には、コンパイラ
は、コンパイル済みプログラムの実行中に使用される回
復シーケンスも生成する。本発明のさらに1つの態様で
は、プロセッサは、コンパイル済みプログラムを実行
し、またフラグ付きロード動作、好ましい実施例ではフ
ラグ付きのロード・セーブ動作を認識して、そのロード
動作によって取り出されるオペランドのメモリ・アドレ
スをACUにセーブする手段を有する。プロセッサはま
た、フラグ付き記憶動作、好ましい実施例では記憶・検
査動作を認識する手段も有する。フラグ付き記憶動作を
プロセッサが識別すると、アドレスが生成されて連想メ
モリに送られ、ロード動作によって連想メモリ内にセー
ブされたアドレスと比較される。
【0019】本発明のもう1つの態様では、「アドレス
比較機構」(ACU)が、ロード・セーブ動作中にプロ
セッサから送られてきたアドレスを受け取り、それをA
CU内の特定のメモリ位置にセーブする。その後、記憶
・検査命令とプロセッサが記憶動作のために生成したア
ドレスを受け取ると、ACUは、その生成されたアドレ
スをロード動作によってセーブされたアドレスと比較す
る。記憶動作によって生成されたアドレスとロード動作
中にセーブされたアドレスが一致しない場合には、コン
ピュータはプログラムの実行を続行する。しかし、比較
時にアドレスが一致した場合には、連想メモリまたはA
CUはプロセッサに信号を送って、そのことを通知す
る。
【0020】アドレス比較機構はまた、好ましい実施例
では「ACU消去」命令によって生成された適当な消去
信号を受け取ると、アドレス比較機構が記憶しているセ
ーブされたアドレスを消去する。
【0021】プロセッサは、検査のために送られたアド
レスとACUにセーブされているアドレスが一致すると
の信号をACUから受け取った場合、回復コードを実行
する。
【0022】本発明の他の態様では、アドレス比較機構
は、アドレスをセーブする複数のメモリ・レジスタから
成る。これらのメモリ・レジスタの各々に、1つの有効
ビット位置または別の等価の機構が関連づけられてお
り、これは、メモリ・レジスタにセーブされたアドレス
が有効で検査すべきか否か、または、そこに関連アドレ
スがなく、メモリ・レジスタが追加情報を受け取るため
に使用可能であるか否かを、システムに知らせる。さら
に、各メモリ・レジスタおよびその対になった有効ビッ
トと共に、制御ポートがあり、これはシステムの残りの
部分から信号を受け取り、これらの信号に従って、必要
なセーブ動作、比較動作、または消去動作を実施する。
この制御ポートは復号器によって活動化され制御され
る。
【0023】本発明の他の態様では、ACUは、適当な
信号を受け取ったとき、その中に含まれるアドレスを別
のメモリ位置にセーブし、それ自体が使用可能になっ
て、システムが開始する恐らくは別のアプリケーション
によって生成される追加のアドレスを受け取ることがで
きる。システムは、以前にはACU外の位置にセーブさ
れていたアドレスをACUに戻して復元し、元のアプリ
ケーションを前に中断した所から続行することができ
る。
【0024】
【実施例】前述のように、本発明の目的は、コンピュー
タの効率を維持し、かつ誤りのない動作を確保しなが
ら、コンピュータの実行速度を向上させることである。
メモリ待ち時間を著しく短縮することができれば、コン
ピュータの効率と速度が著しく向上できることは、当業
者には既によく知られている。また、1つまたは複数の
記憶動作の前にロード動作を移した順不同オペランド取
出しを可能にすることは、速度と効率の向上を達成する
1つの方法である。本発明の目的は、これらの目的を達
成し、それに誤りがないことを確保する手段を提供する
ことである。
【0025】本発明の装置の主要構成要素には、図1に
示すように、改良されたコンパイラ21、命令セットに
4つの新しい命令が加えられた改良されたプロセッサ2
4、アドレス比較機構(ACU)22、及びメモリ23
が含まれる。システムはまた、適切な相互接続、すなわ
ち制御線25、26、アドレス・バス27、データ・バ
ス28、並びにアドレス検査信号線30とACUレジス
タ番号線29を含む。図1の矢印は信号の流れの方向を
示す。命令セットに加えられた4つの新しい命令は、ロ
ード・セーブ命令、記憶・検査命令、ACU消去命令、
及びACU読取り命令と称する。
【0026】図1のコンピュータ・システムの全般的動
作を、これから簡単に説明する。
【0027】改良されたコンパイラ21は基本的に、ロ
ード・セーブ、記憶・検査、及びACU消去という新し
い命令を使用できる標準のコンパイラである。当技術分
野で周知のように、コンパイラは、PascalやFO
RTRANなどの高水準言語をコンピュータに読取り可
能な機械コードに変換する。しかし本発明の改良された
コンパイラは、いつどこでそれがプログラムの実行を最
適化し、ハードウェアの使用によって本発明の実行の速
度及び効率を向上させることができるかの判断も行う。
【0028】コンパイル過程中に、改良されたコンパイ
ラは、安全でないコンパイラ最適化をもたらすことがし
ばしばあるとしても、いつどこでそれが1つまたは複数
の記憶動作の前にロード動作を移すことができるかを判
断することによって、プログラムの実行順序を最適化す
る。コンパイラは、記憶動作の前にロード動作を移すよ
う判断を下した時、ロード動作に関連するロード・コマ
ンドをロード・セーブ・コマンドに変更する。コンパイ
ラは、ロード動作によって取り出されるオペランドのア
ドレスとプログラム実行時に記憶動作によって生成され
るアドレスが異なると判定できないときでも、ロード・
セーブ・コマンドを記憶コマンドの前に移す。コンパイ
ル過程中に、上記のようにして1つまたは複数のロード
動作がその前に移された記憶動作に遭遇すると、コンパ
イラはその記憶動作を記憶・検査動作に変更し、同時
に、その記憶・検査コマンド及び適切な信号をプロセッ
サが受け取ったときに実行される割込みハンドラ内の条
件付き分岐動作が到達する回復シーケンスとのすぐ後に
ACU消去命令を加える。コンパイラは、プログラムの
コンパイルが完了するまでこの過程を続ける。割込みハ
ンドラ、及びそのソフトウェアとハードウェアの諸態様
は、当技術分野で周知である。
【0029】したがって、コンパイラ21は、上記の追
加行為を伴う通常の方式でプログラムをコンパイルし、
CPUまたはプロセッサが実行できるようにプログラム
を準備する。次いで、本発明で構想する追加部分をもつ
コンパイル済みプログラムが、実行のためコンピュータ
のメモリ内に置かれる。
【0030】コンパイル済みプログラムの実行中にロー
ド・セーブ・コマンドに遭遇した時は、CPU24は、
通常のロード・コマンドを実行する。これには、通常、
メモリ23内の特定の位置からのオペランドの取出し、
及びそのオペランドのCPU24内のレジスタへの転送
が含まれる。次いでCPU24は、ロード・セーブ・コ
マンドの一部として、そのオペランドのメモリ・アドレ
スをACU22内のレジスタにセーブする。この特定の
ロード・セーブ・コマンドには、プログラム・コンパイ
ル中にACU22内の特定のレジスタが事前に割り当て
られている。そのレジスタにはオペランドのメモリ・ア
ドレスがセーブされ、そのレジスタ番号が、レジスタ番
号線29を介してACU22に送られる。当技術分野で
周知のように、プログラムがコンパイルされ最適化され
るとき、ロード動作によってオペランドがそこから取り
出されるメモリ・アドレスは通常は知られていない。そ
のアドレスは、プログラム実行中にロード・コマンドが
実行されるときに、ロード動作によって生成または計算
される。
【0031】CPUが記憶・検査命令に遭遇するとき
は、CPUは、記憶動作のためのメモリ・アドレスを生
成することによって通常の記憶動作を開始する。しか
し、CPU24は、記憶動作を実際に実行する前に、生
成されたアドレスをACU22に送り、ACU22がそ
れを、前のロード・セーブ・コマンドによってACU2
2にセーブされたアドレスと比較する。記憶動作によっ
て生成されたアドレスが以前にセーブされたどのアドレ
スとも同じでない場合は、コンパイル済みプログラムの
実行が続行される。アドレスの検査が完了すると、AC
U消去命令が、記憶・検査動作によって生成された他の
どのアドレスとも比較する必要のないロード・セーブ動
作のすべてのアドレスをACU22から消去する。一
方、記憶動作によって生成されたアドレスがACU22
内にセーブされているいずれかのアドレスと同じである
場合には、ACU22が信号を生成し、アドレス検査信
号線30を介してCPU24に送る。この信号を受け取
ると、CPUは、以前に準備されコンパイラによってこ
の状況のためにコンパイルされ最適化されたプログラム
中に入れられた、回復プログラムの実行を開始する。こ
の回復シーケンスの目的は、あとで詳述するが、誤って
いた計算を再計算することである。この誤りとは、ロー
ド・セーブ・コマンドによって前に取り出されたオペラ
ンドのアドレスと同じアドレスが記憶・検査コマンドに
よって生成されることである。また、最適化されていな
い形のプログラム中でロード・セーブ・コマンドの後に
記憶・検査コマンドが続くことである。記憶・検査コマ
ンドによってメモリ内に記憶され、ロード・セーブ・コ
マンドによって取り出される値は、この2つのコマンド
が最適化されていないプログラムの元の順序にある場
合、誤った値でプログラミングされたすべての計算を再
計算するのに使用される。また、この事象シーケンスで
は、ACU消去命令が、ACU22内にセーブされたも
はや必要ではないアドレスを消去する。
【0032】コンパイラとコンパイル過程:コンパイラ
は、FORTRAN、BASIC、Pascalなどの
原始言語で書かれたコンピュータ・プログラムを機械語
に変換する、複雑なコンピュータ・プログラムである。
本発明の原理によれば、コンパイラはこれ以上のことを
行う。すなわちコンパイラはさらに、ACUハードウェ
アを使用してプログラムの実行を最適化する。コンパイ
ラはこれを、コンパイラの一部をなすオプティマイザで
行う。オプティマイザとは、コンパイル中にコンピュー
タ・プログラムを実行効率が向上するように変更するた
めに使用される、コンパイラ内のルーチンまたはプロセ
スである。一般に求められている効率は、より高い実行
速度である。これを達成するために利用できる手法、及
び本発明で使用される方法の1つは、プログラムの一部
分の実行順序の並べ換えである。
【0033】本発明のオプティマイザは、記憶動作の前
にロード動作を移して、プロセッサが必要とするオペラ
ンドが適切な時に使用可能となるようにし、したがって
ほとんどのメモリ待ち時間をなくすることによって、そ
の目的を達成する。オプティマイザは、コンパイル過程
中に次の3つの可能性に直面する。a)問題がない。プ
ログラム実行時に記憶動作に割り当てられたアドレスが
順不同ロード動作のアドレスと異なることが確信でき
る。b)記憶動作に割り当てられたアドレスが順不同ロ
ード動作のアドレスと同じになる確率が非常に高い。
c)2つのアドレスが同じになるかどうかコンパイル時
には判定できず、したがって記憶動作に割り当てられた
アドレスが順不同ロード動作のアドレスと同じになる機
会がわずかにある。
【0034】上記の3つの可能性が与えられているとす
ると、従来型のオプティマイザでは、それができること
は非常に限られる。図2に、どのようなオプションがあ
るかを図式的に示す。図2を見るとわかるように、プロ
グラム実行時に記憶動作に割り当てられたアドレスとロ
ード動作のアドレスが一致しないことをオプティマイザ
が確信できないかぎり、オプティマイザは記憶動作の前
にロード動作を移すことはできない。これを、図3に示
すような、本明細書に記載するシステムでオプティマイ
ザができることと対比されたい。この改良されたオプテ
ィマイザは、安全でないコンパイラ最適化状況下におい
ても同然のことを行うことができる。このオプティマイ
ザは、前段に記載の"a"と"c"の2つの状況下で、記憶
動作の前にロード動作を移す。安全でないコンパイラ最
適化状況である状況"c"については、改良されたオプテ
ィマイザは、この異常または誤りの有無の検査を支援す
るコードを生成する。このコードについては後で述べ
る。当業者なら、コンパイル中に記憶動作の前に移すこ
とのできるほとんどの潜在的ロード動作では、プログラ
ム実行時に記憶動作に割り当てられるアドレスが順不同
ロード動作によって取り出されるオペランドのアドレス
と同じになる確率が僅かであることを知っていよう。し
たがって、記憶動作に割り当てられたアドレスとロード
動作のアドレスが同じになるまれな場合を検出する効果
的で効率的な方法があれば、プログラムの実行速度がか
なり増大することになる。異常検査の方法を、性能の低
下を引き起こさない異常修正の方法と組み合わせると、
安全でないコンパイラ最適化の手順が、安全かつ効果的
に使用できるようになるはずである。あとで詳しく実証
するように、本明細書に記載の本発明は、後述の適切な
回復シーケンスと組み合わせて使用するとき、上記のま
れな異常を検出するための効果的で効率的な方法を提供
する。
【0035】図4に示すような従来型のオプティマイザ
は、分岐動作境界を越えてコードを移動することによっ
て最適化を実施することはまれである。一方、図5を見
るとわかるように、本明細書に記載のシステムで使用さ
れるオプティマイザは、極めて容易に分岐動作の前にロ
ード動作を移すことができる。実際に、本明細書に記載
のシステムで使用するオプティマイザが行うことは、ロ
ード・セーブ動作の実行が、分岐動作の結果としてその
ACU消去コマンドを迂回するかどうか判定し、次い
で、そのようなACU消去コマンドが予め挿入されてい
ない場合には、ACU消去コマンドに通じていない分岐
動作のすべての目標にACU消去コマンドを挿入するこ
とである。さらに、このコンパイラは、ACU消去命令
中に、ロード動作のアドレスがセーブされるACU中の
ACUレジスタ番号を挿入する。このようにしてコンパ
イラは、分岐動作の前にロード・セーブ動作を移すこと
ができる。移動先は、プログラム実行継続時において分
岐の実行終了時に到達すべき位置である。
【0036】コンパイラ、その動作及びプログラミング
は、当業者には周知である。したがってここで詳述する
必要はない。コンパイラの最適化、その使用、プログラ
ミング及び原理に関する良い一般的な参考文献は、A.V.
アホ(Aho)及びR.セティ(Sethi)著 Compilers:Princ
iples, Techniques and Tools, Addison-Wesley社、
(1986年)である。コンパイル過程の検討の際に
は、本発明に独特の、また関係するある態様だけを示
す。
【0037】コンパイラがコンパイル過程で行う通常の
機能の他に、2つの追加の過程がある。1つは最適化で
あり、他の1つは必要なコード変更と必要な回復シーケ
ンスの追加である。
【0038】最適化過程では、改良されたコンパイラ
は、オプティマイザとして機能し、いつ記憶の前にロー
ドを移すことができるかに関する決定を行う。この態様
については先に述べた。前述のように、オプティマイザ
として機能するコンパイラは、通常は安全でないコンパ
イラ最適化を行うことになる。当然のことながら、前述
のように、異常の確率が非常に高い場合においては、記
憶動作の前にロード動作を移さないという決定がなされ
る。しかし、大部分の場合においては異常が起こる確率
が低い場合ので記憶動作の前にロード動作を移すことに
なる。
【0039】コンパイラが最適化の判断を下し、またプ
ログラム実行時に異常が発生する機会が僅かであると判
定すると、コンパイラは、プログラム実行時に適切な検
査過程を保証するために、必要なコードとプログラム変
更を生成する。図7および8は、ステップ36でコンパ
イラが最適化の基本的判断を下し、1つまたは複数の記
憶動作の前にロード動作を移した後の、事象シーケンス
を示す流れ図である。次にステップ37で、コンパイラ
は、移動されたロード命令をロード・セーブ命令に変更
する。次のステップ38で、コンパイラは、その記憶命
令、またはその前にロード動作が移されたすべての記憶
命令が、すでに記憶・検査命令に変換されているか否か
を判定する。以前に記憶・検査命令に変更されていない
記憶命令がある場合には、次のステップ39で、これら
の記憶命令がすべて記憶・検査命令に変更される。次の
ステップ40で、コンパイラは次の2つの処置のうちの
1つを講じる。その特定のロード命令が記憶命令と交換
されたのが最初ではないと判定した場合には、コンパイ
ラはルーチンの終りまで進み、ステップ44で回復コー
ドを作成し、それからルーチンを出て、通常のコンパイ
ル過程に戻ることになる。しかし、ステップ40で、そ
れがロード命令が記憶命令と交換された最初であると判
定した場合には、コンパイラは次のステップ41に進
み、そこでコンピュータが、記憶・検査命令にACU消
去命令が付加されているか否かを判定する。付加されて
いない場合には、コンパイラはステップ42に進んで、
ACU消去命令を生成し、図8のステップ43に進む。
ステップ41で、コンパイラが、記憶・検査命令の後に
ACU消去命令が続くと判定した場合には、コンパイラ
は直接ステップ43に進む。ステップ43で、コンパイ
ラはACU消去命令にレジスタ番号ビットを挿入して、
ACUレジスタからロード動作中にセーブされたアドレ
スのエントリを消去する。次いでコンパイラは次のステ
ップ44に進み、必要な回復コードを生成し、これをコ
ンパイル済みプログラムに加える。これが完了すると、
コンパイラはルーチンを出て、通常のコンパイル過程に
進む。
【0040】改良されたコンパイラによってコンパイル
済みプログラムに挿入された回復コードには、異常が発
生した場合に実行される割込み処理ルーチン内の条件付
き分岐動作から到達する。前述のように、異常が発生す
るのは、ACUにおける比較によって、記憶動作に割り
当てられたアドレスが1つのロード・セーブ動作中にセ
ーブされたアドレスの1つと同じであると判定されたと
きである。記憶動作のアドレスは、前述のように、記憶
・検査動作が開始する時点でプロセッサによって生成さ
れる。回復コードの生成と準備は、当技術分野で周知で
ある。
【0041】前述のように、本発明では、分岐動作の処
理、特にプログラムのコンパイル中に遭遇することのあ
る条件付き分岐動作の処理は難しくはない。一般に、遭
遇することのある最も普通の形の分岐動作は、条件付き
のものである。条件付き分岐動作によってもたらされる
問題は、分岐動作の前にロード動作が移され、関連する
記憶・検査動作とACU消去動作がこの分岐動作のいく
つかの目標の1つである時に発生する。分岐動作が、活
動化されて実行されるはずであり、記憶・検査命令、及
び特に、ACUからの以前のロード命令のアドレスを消
去することを意味するACU消去命令を含む目標を選択
しないはずである場合、ロード・セーブ動作によってセ
ーブされたアドレスを適時にACUから適当に除去する
ことに失敗する可能性がある。しかしコンパイラは、プ
ログラム・コンパイル時に、分岐動作の実行によって必
要なACU消去命令が迂回できる可能性があるかどうか
を判定することができる。可能性があると判定した場合
には、コンパイラは、元々はロード・セーブ動作を回避
していた分岐動作の目標に追加のACU動作を加える。
このようにして、どの分岐目標を取ったかには関係な
く、ロード・セーブ・コマンドによってACU内にセー
ブされた情報は、適時に除去される。
【0042】前述のように、コンパイラとそのオプティ
マイザは、命令セットに加えられた4つの新しいコマン
ドのうちの3つだけを使用する。図6は、本明細書に記
載のシステムでコンパイラが使用する3つのコマンドを
示す。図6の各見出しの下は、コンパイル後にプログラ
ム行がどう現れるかの例である。例えば、見出し「ロー
ド・セーブ・コマンド」の下で、最初に現れる項目は実
命令「ロード・セーブ」であり、次に現れる項目はオペ
ランドがロードされる先のCPUレジスタであり、De
st_Regで示されている。次の情報部分は、そこか
らオペランドがロードされる、メモリ内のアドレスであ
る。この情報は、コンピュータ内でプログラムが実行さ
れる時に計算される可能性が最も高い。これはACUに
セーブされるアドレスでもある。最後に、ACUバッフ
ァ番号ACU_Buffer_Nonがある。バッファ
番号は、プログラム実行中にロード動作のアドレスがセ
ーブされる、ACU内の特定のレジスタを識別する。後
述するように、ACUは、各レジスタに1つのアドレス
を記憶することができる個別に制御されたレジスタから
成る連想メモリ装置である。
【0043】図6の見出し「記憶・検査コマンド」の下
は、この特定の命令がコンパイル後にコンピュータ・プ
ログラム中でどう現れるかの例である。記憶・検査命令
の後に、メモリにセーブされるオペランドを含むCPU
レジスタを識別するステートメントData_Regが
ある。次の項目Addressは、記憶動作が実行され
る時にコンピュータによって生成されるメモリ・アドレ
スである。生成されたこのアドレスは、ACU内にセー
ブされたアドレスと突き合わせて検査される。
【0044】ACU消去コマンドは通常、プログラム中
の大部分の記憶・検査コマンドの後に続く。コンパイル
済みプログラム中でこの命令がどう現れるかを、図6の
見出し「ACU消去コマンド」の下に示す。最初の項目
は命令自体Clear_ACUであり、その後に消去す
べきすべてのバッファの番号が続き、この例では、AC
U Buffer_No1、...ACU Buffer_
Nonで表されている。コンパイラは、ロード動作のア
ドレスがセーブされる先のACUレジスタを割り当てる
ので、コンパイル時に、消去すべきレジスタを識別する
ことができる。またコンパイラは、コンパイル過程中
に、その前にロード動作が移された特定の記憶動作を知
っている。各記憶動作の位置は、記憶動作の前に移され
たロード・セーブ動作を除き、コンパイル過程で変更さ
れないままである。したがってコンパイラは、どの記憶
・検査動作が、その前に特定のロード・セーブ動作が移
された最後のものであるかを知っている。コンパイラ
は、この最終記憶・検査動作に到達すると、その後に続
くACU消去命令に、前記のロード・セーブ動作のアド
レスがセーブされた先のレジスタの番号を加える。これ
は、その保存がもはや必要でないためである。
【0045】例示の目的で、図9、図10、図11、図
12はそれぞれ、コンピュータ・プログラムのコンパイ
ル前のシーケンス、本発明を使用せずにコンパイルされ
たシーケンス、本発明を使用してコンパイルされたシー
ケンス、及びコンパイラによって生成される回復コード
を示す。
【0046】図9で、命令"i1"はレジスタ13と15
の内容を加算し、結果をレジスタ13に戻す(このプロ
グラム・シーケンス中で参照されるレジスタは、別段の
明記がない限りCPUのレジスタである)。命令"i2"
は、レジスタ13の内容にオフセット0を加えてメモリ
・アドレスを形成し、このメモリ・アドレスを使用して
メモリから値を取り出し、取り出した値をレジスタ13
に戻す。命令"i3"は、レジスタ13の新しい内容にオ
フセット112を加えてメモリ・アドレスを形成し、こ
のメモリ・アドレスを使ってレジスタ1の内容をメモリ
に記憶する。命令"i4"は、レジスタ12の内容にオフ
セット18を加えてメモリ・アドレスを形成し、このメ
モリ・アドレスを使ってメモリから値を取り出し、取り
出した値をレジスタ2に戻す。命令"i5"は、レジスタ
13の内容にオフセット116を加えてメモリ・アドレ
スを形成し、このメモリ・アドレスを使ってレジスタ3
の内容をメモリに記憶する。命令"i6"は、レジスタ1
2の内容にオフセット10を加えてメモリ・アドレスを
形成し、このメモリ・アドレスを使用してメモリから値
を取り出し、取り出した値をレジスタ4に記憶する。命
令"i7"は、レジスタ2の内容からレジスタ4の内容を
引き、結果をレジスタ2に戻して記憶する。命令"i8"
は、レジスタ2とレジスタ6の内容を加算して、結果を
レジスタ2に戻して記憶する。
【0047】前述のように図10のプログラム・シーケ
ンスは、本発明の改良されたコンパイラを使用しないコ
ンパイル後に現れるので、図9に示したプログラム・シ
ーケンスと同じである。
【0048】図11は、本発明の最適化処理とコンパイ
ル法を使用して図9に示すプログラム・シーケンスをコ
ンパイルした後に、プログラムがどのように現れるかを
示す図である。コンパイル過程中にオプティマイザは、
このコード・セグメントの実行時間を減らすために、共
にロード動作である図9の行i4とi6を、順序を外し
て記憶動作i3、i5の前に移すべきであると決定す
る。図9の行i4は、ロード・セーブ動作に変更され、
1つの記憶動作の前に移されて、図11の命令行2にな
る。図9の行i6のロード動作は、ロード・セーブ動作
に変更され、2つのセーブ動作の前に移されて、コンパ
イル済みプログラムの図11の行3になる。両方のロー
ド・セーブ動作、図11の行2、3には、ACU内のレ
ジスタ番号が割り当てられている。図11の行2では、
割り当てられたACUレジスタ番号は、行末の"1"であ
り、行3ではそれは"2"であり、行末に現れている。し
たがって、これらのロード動作は、順序を外して様々な
記憶動作の前に移されており、こうしてこれらがロード
するオペランドは、実質的にCPUがそれを必要とする
ようになる時より前に、CPU内のレジスタに移され
る。そうすると、オペランドは必要になればすぐにCP
Uが使用できるようになり、プロセッサの機能実行にお
けるあらゆる遅延がなくなり、したがって付随するメモ
リ待ち時間がなくなる。
【0049】図9の行i3は、プログラムのコンパイル
時に図11の行6になり、この命令は記憶・検査命令に
変更される。コンパイラはまた、ACUのレジスタ1に
セーブされたアドレスを消去するため、図11の行7に
ACU消去1命令を加える。このアドレスは、図11の
行2のロード・セーブ命令中にロードされるオペランド
のアドレスである。ACUのレジスタ1内のアドレス
は、この1つの記憶命令の前に移されただけで、他のど
のアドレスとも比較する必要はない。図9の行i5は、
コンパイル中に図11の行8となり、この命令は記憶・
検査命令に変更される。図11の行9のすぐ後に、AC
Uのレジスタ2内のアドレスを消去するため、ACU消
去2命令が加えられる。ACUのレジスタ2内のアドレ
スの保存はもはや必要ではない。すなわち、このアドレ
スは、その前にそれが移された両方の記憶動作中に生成
されたアドレスと比較済みである。
【0050】図11に示す2つの記憶・検査命令用の回
復コードを図12に示す。最初の記憶・検査命令"Store
-Check R1,112(R13)"については、この最初の命令は打
ち切られた記憶・検査動作を再実行して、これを完了す
る。次の2つの命令は、2つの完全でないロード命令、
すなわち図11の命令2、3を再実行する。"SR R2,R4"
命令も、対称形ロード命令によって作成された値を使用
し、対応する記憶・検査命令の前に実行されるので、再
実行される。次いで、"Go To L1"ステートメントがある
ので、制御が回復コードから主プログラムに戻される。
このステートメントは、図11の行7で制御を主プログ
ラムに返す。
【0051】第2の記憶・検査命令"Store-Check R13,1
16(R13)"については、回復コードの実行は次のことを含
む。すなわち、(a)未完了の記憶命令を再実行し、こ
の記憶命令に関して対称的に実行される唯一のロード命
令である、"L R4, 10 (R12)"ロード命令を再実行する。
(b)ロード命令に依存する"SR R2, R4"命令を実行す
る。その後、回復コードは、命令"Go To L2"に従って主
プログラムに分岐する。
【0052】回復コード・シーケンスは各記憶・検査命
令に付随する。記憶・検査例外が発生すると、例外を引
き起こした記憶・検査命令のアドレスが、プロセッサに
使用可能となり、各記憶・検査命令用の回復コード・シ
ーケンスの開始アドレスを列挙したテーブルを使って適
切な回復コード順序を選択するために、それが使用され
る。
【0053】特定の記憶動作を超えて多数のロード動作
が移動される場合には、そのどれか1つが記憶動作と同
じメモリ・アドレスを使用し、記憶・検査例外を引き起
こす可能性がある。この状況では、回復コードは、「A
CU読取り」コマンドを使ってACUの内容を照会し
て、どのロード動作が例外を引き起こしたかを識別し、
そのロード命令とその影響を受ける後続の命令のみを再
実行することができる。しかし図9ないし図12の例で
は、最初の記憶・検査動作には、それに関して順不同で
実行されるロード動作は2つしかない。したがって、た
だ1つのロード動作が例外を引き起こしたかどうか判定
してそのロード動作だけを再実行するよりも、両方のロ
ード動作を再実行する方が都合がよい。
【0054】コンパイラは、回復コードに関連する記憶
・検査命令が首尾よく完了する前に、回復コードが必要
とする値が、主プログラム中で破壊されないように保証
しなければならない。
【0055】システム全体のハードウェア構成要素とコ
ンパイル後の動作:図13は全体的コンピュータ・シス
テムとその基本要素を図1より詳しく示している。プロ
セッサまたはCPU34は、その3つの構成要素であ
る、制御装置(CU)53、演算論理機構(ALU)5
0、及びレジスタ・ファイル52に分かれている。コン
ピュータ・システムの他の2つの主要要素であるACU
22とメモリ23は、接続回路に関してより詳細に示さ
れている。ACU22は、線74によってアドレス・バ
ス27に接続され、それを介してロード動作のメモリ・
アドレスを受け取ることができる。ACU制御線26
は、CU53からACU22に通じている。ACU−C
PUインターフェースの概略図である図16を見ると、
別々の4本の制御線、すなわちACU消去命令用の線1
24、ロード・セーブ命令用の線125、記憶・検査命
令用の線126、及びACU読取り命令用の線127が
ある。図13に戻ると、アドレス検査信号線30がAC
U22からCU53に通じている。この線は、記憶動作
に割り当てられたアドレスがACU22内に含まれるロ
ード・セーブ動作のアドレスと同じである場合に、それ
を介して信号が送られる線である。最後にACUバッフ
ァ番号線29があり、これはCU53をACU22に接
続している。この線を介してCU53はACU22に、
どのレジスタにアドレスをセーブするかを通知する。
【0056】メモリ23は、制御線25を介してCU5
3によって制御され、必要なときに活動化される。メモ
リ装置23は、両方向コネクタ68によってデータ・バ
ス28と接続されている。両方向コネクタ68は、デー
タ・バス28をメモリ・データ・レジスタ57に接続し
ている。さらに、アドレス・バス27は、線69を介し
て、メモリ23に接続され、最終的にはメモリ・アドレ
ス・レジスタ58に接続される。したがって、CU53
は、メモリ23内のある位置へのアクセスを望むとき、
制御線25を介して活動化信号を送り、それと同時にア
ドレス・バス27を介しコネクタ69を経て、アクセス
しようとする特定のデータ記憶位置のアドレスを送る。
通常の復号動作が起こり、次いで要求された情報が線6
8を介してデータ・バス28に送られ、レジスタ・ファ
イル52またはCU53内の命令レジスタ54に送られ
る。線31はACU22をデータ・バス28に接続して
いる。ACU読取りコマンドが実行されるとき、ACU
22内のアドレスが、線31を介しデータ・バス28を
経て、次に線68を介してメモリ23に送られる。
【0057】CU53内には、2つのより小さなサブ・
ユニットである、命令レジスタ(IR)54及びプログ
ラム・カウンタ(PC)55がある。命令レジスタ54
及びプログラム・カウンタ55は、連携して動作する。
すなわち、プログラム・カウンタ55は次の命令のアド
レスを、線70を経てアドレス・バス27を介してメモ
リ23に送る。命令自体はデータ・バス28を経て線7
1を介してCU53に返送され、命令レジスタ54に入
れられる。これによって、明らかに必要な命令がその固
有の順序でCU53に提供されることになる。
【0058】実データ処理はALU50で行われる。A
LU50が作用するオペランドはレジスタ・ファイル5
2内に置かれており、必要に応じてALU50にとって
使用可能になる。要求されると、オペランドはレジスタ
・ファイル52から線73を介してALU50に送られ
る。CU53から制御線25を介して送られてきた命令
に応じて、ALU50がオペランドに対して適切な動作
を実施する。この動作が完了すると、結果が線72を介
してレジスタ・ファイル52に返送される。
【0059】動作を始めるに当たっては、本発明の教示
によるコンパイラが準備したコンパイル済みのプログラ
ムが、コンピュータのメモリ23にロードされる。これ
は図14の流れ図の開始ブロック105に相当する。次
に図14のプログラム・ブロック106で、コンピュー
タは実行を開始する。図14のブロック107で、コン
ピュータは、プログラムの実行中に、時々ロード・セー
ブ・コマンドに遭遇する。このコマンドに遭遇すると、
コンピュータは、図13のメモリ23からの適切なオペ
ランドを図13のレジスタ・ファイル52の適切なレジ
スタにロードするなど、通常のロード動作を完了する。
次いでコンピュータは、図14のステップ116で、オ
ペランドがそこから来たメモリ23のアドレスをACU
内の適切なレジスタにセーブする追加ステップをとる。
プログラムのコンパイル時にACUレジスタ番号が割り
当てられたので、アドレスを図13のACU22にセー
ブする過程の一環として、CU53がACUバッファ番
号線29を介して、アドレスがセーブされるACUレジ
スタの番号を送る。この番号はACU22によって復号
され、適切なレジスタが活動化されて、アドレスを受け
入れることができるようになる。同時に、このレジスタ
の有効ビットが有効になる。この特定の態様については
後でさらに詳しく述べる。現時点では、有効ビットはそ
のレジスタに関連する1つの1ビット・メモリ位置であ
ってよく、その高状態または低状態によって、そのアド
レスがまだ関連があって検査すべきか、それとももはや
有効ではなくて実際に消去すべきかを示すことができる
と言うにとどめておく。
【0060】コンピュータがプログラムの実行を続ける
と、図14のブロック108で、ある点で記憶・検査コ
マンドに遭遇する。記憶・検査コマンドに遭遇すると、
図13のCU53は、適切な信号をACU制御線26を
介してACU22に送る。これは個別の制御線であり、
図16の126に示されている。記憶・検査命令の実行
中に生成されたアドレスはACUに送られる。次にこの
アドレスが、図15のブロック109でACUにセーブ
された消去されていないすべてのアドレスと突き合わせ
て検査される。記憶動作のために割り当てられたアドレ
スが、ACU内にセーブされた有効な、ロード動作のど
のアドレスとも同じでない場合には、ACUによって信
号は生成されない(図15のブロック110)。その結
果、コンピュータは、図15のブロック112でプログ
ラムの順次実行を続けることになる。
【0061】しかし、記憶動作のアドレスとACUにセ
ーブされている有効アドレスが一致する場合には、AC
Uによって信号が生成され(図14のブロック10
9)、図13の線30を介してCU53に送られる。
【0062】アドレスが一致してACUによって信号が
生成されても、アドレスが一致せず信号が生成されなく
ても、後続の命令、すなわちACU消去命令がCUから
ACUに送られる(図15のブロック110)。このA
CU消去命令は、追加の記憶・検査コマンドと突き合わ
せて検査する必要のないすべてのレジスタを消去させる
(図15のブロック118)。
【0063】ここでCUの応答に戻ると、CUは、図1
3の線30を介して肯定アドレス検査信号を受け取る
と、記憶動作を完了せず、それを打ち切る。図15の1
11で、CUはコンパイラが事前に準備した回復シーケ
ンスを実行する。この回復シーケンスの目的は、アドレ
ス間の一致によって生じた誤りから回復することであ
る。本発明の好ましい実施例では、回復プログラムは、
打ち切られた記憶動作を再実行し、次いでロード動作
と、最適化されていない形のプログラム中でこのロード
動作の後に続き、このロード動作に依存し、最適化の結
果として記憶動作の前に移された動作があればそれを再
実行する。この時点で回復シーケンスは終了し、コンピ
ュータは、割込み中の記憶・検査命令の直後に、コンパ
イルされ最適化されたプログラムの主シーケンスの実行
を再開する。
【0064】このシナリオは、プログラムが実行され、
誤りまたは異常が発生する度に繰り返される(図15の
ブロック113)。
【0065】アドレス比較機構:上述のように、システ
ムの一部分は、アドレス比較機構(ACU)と呼ばれる
特別の装置を含み、この装置は、新しい命令セット、改
良されたCPU、及びシステムの他の部分と共に動作す
る。この独特のACU装置は、このシステム内で非常に
特有で重要な機能を果す。この新しい装置は、ロード・
セーブ・コマンドの実行時に順不同ロードによって取り
出されたオペランドのアドレスをセーブする。次いでセ
ーブ検査コマンドを実行して、そこに送られたアドレス
をそれがセーブしたアドレスと突き合わせて検査する。
前述のように、セーブされたアドレスと記憶・検査命令
の実行中に検査のために送られたアドレスが一致する場
合には、ACU装置は信号を、上記のアドレス検査信号
線を介してCPUに送る。次いで最後に、ACU装置
は、セーブしてあったが、もはや検査用に必要でないア
ドレスを消去する。
【0066】ACUの重要性は、セーブ及び記憶を行
い、記憶動作によって生成されたアドレスと、プログラ
ム・コンパイル中に記憶動作の前に移されたロード動作
によってセーブされたアドレスが一致することによる異
常の可能性があるかどうか検査しなければならないとい
う負担を、CPUから取り除くことである。このタスク
をプロセッサから分離した装置に割り当てることによっ
て、ACUは、プロセッサがより効率的かつ迅速に動作
できるようにする。プロセッサは上記のような動作を行
うためには設計されておらず、前述のように、非常に非
効率的にしかそれを行うことができない。
【0067】ACUの好ましい実施例では連想メモリを
使用する。図16にACU/CPUインターフェースを
図示する。ACU内のデータは、データ・バス28によ
ってコネクタ31を介してアクセスされ、データはアド
レス・バス27を介してACUに送られる。ACUレジ
スタ番号線29がACUに接続され、ACU内の記憶位
置を選択する。ACUは、アドレス検査信号線30を介
して、記憶・検査動作中に発生した異常をCPUに信号
で知らせる。ここに記載する実施例では、ACUは、C
PUの制御装置から来る4本の別々の制御線によって制
御される。これらは、ACU消去線124、ロード・セ
ーブ線125、記憶・検査線126、及びACU読取り
線127である。しかし、上記の好ましい実施例の趣旨
を理解すれば、当業者なら、本発明の概念から逸脱する
ことなくここに記載する概念を実施する方法が他にもあ
ることがわかるであろう。
【0068】アドレスがセーブされるACUレジスタま
たはエントリを128に示す。このような各レジスタに
は、後で詳しく論じる有効ビット129が付随してい
る。最後に、各レジスタまたはエントリ128に制御ポ
ート120が付随している。制御ポートは、実際にレジ
スタへのアクセスおよびレジスタからのアクセスを制御
し、様々な制御線を介して送られてきた制御信号に応答
する。好ましい実施例ではこの制御ポートがどのように
設計できるかを示す1つの詳細な構成を、図18に図示
する。これについては後で詳細に論じる。
【0069】図17は、ACUの1つの可能な好ましい
実施例の基本図であり、そのもっとも基本的な要素と接
続を図示してある。順不同ロード動作のアドレスがセー
ブされるレジスタ128は、好ましい実施例では16個
から64個までのどの数にすることもできる。ただし、
レジスタの数はこれより多くても少なくてもよい。各レ
ジスタ128に、有効ビット位置129が付随してい
る。有効ビット位置129は、付随するレジスタ内に含
まれるアドレスが関連するもので検査すべきか、それと
も関連がなく、そのレジスタがセーブすべき新しいアド
レスを受け取るために使用可能であるかを判定するため
に、システムがそこを見る。好ましい実施例では、レジ
スタ128にセーブされたアドレスが関連するもので検
査すべきである場合には、有効ビット129は2進値1
を含む。逆の場合は、有効ビット位置129は2進値ゼ
ロを含み、レジスタに含まれる情報が関連がなく、比較
すべきで使用可能なアドレスがないことを示すことにな
る。その場合、有効ビットは、ロード・セーブ動作中に
順不同ロードのアドレスがセーブされるまで「低」であ
り、セーブされると「高」になる。システムが、このア
ドレスの比較をそれ以上続ける必要がないと判断する
と、ACU消去信号が実際に有効ビットを1からゼロに
変更し、レジスタを実際に消去する。図17の各レジス
タ128は、それ自体の個別のポート120によって制
御される。図18の破線内に、レジスタと有効ビット位
置の両方を制御するようにこのポートを構成する1つの
方法を示す。図18に示す制御ポートについては後で詳
述する。
【0070】図17に戻ると、システムのアドレス・バ
ス27は、制御ポート120を介してレジスタ128に
接続している。アドレス・バス27からレジスタ128
へのアクセスは、各レジスタの制御ポート120によっ
て制御される。これによって、システムはセーブすべき
アドレスをACUのレジスタ128に転送することがで
きる。データ・バス28とそのACUからの接続31に
よって、システムは、コンピュータがそう望む場合、A
CUレジスタ128にセーブされたアドレスを検索する
ことができる。制御ポート120は、アドレス復号器1
33によって制御され活動化される。アドレス復号器1
33は、アクセスすべきレジスタのレジスタ番号をその
バッファ番号線29を介してコンピュータから受け取
る。アドレス復号器133がバッファ番号線29を介し
てレジスタ番号を受け取ると、このレジスタ番号は復号
され、次いで、アドレス復号器133を様々な制御ポー
トに接続する特定の制御線136を介して、アクセスす
べきレジスタ128の特定の制御ポート120を活動化
する信号が送られる。この信号は、この特定の制御ポー
ト120を活動化し、それが制御するレジスタに情報が
出入りすることを告げる。制御線26は、どの動作を実
施すべきか、すなわちロード・セーブ動作か、記憶・検
査動作か、ACU消去動作か、それともACU読取り動
作かを各ポート120に指令する手段である。記憶・検
査動作中に、記憶動作に割り当てられたアドレスが、A
CU120のレジスタ内に記憶されたアドレスの1つと
同じであると判定された場合、アドレス検査信号線30
を介してプロセッサに信号が送られる。
【0071】好ましい実施例で実施できる制御ポートの
ハードウェア実施態様を、図18に示す。図18の破線
内に示すハードウェア論理回路は、各レジスタまたはA
CUテーブルの各エントリごとに複製され、制御ポート
を指定される。
【0072】用語「テーブル」は、バッファと同義語と
して使用され、共に順不同ロード動作のアドレスがセー
ブされるACU内のすべてのメモリ位置の総称である。
用語「レジスタ」及び「エントリ」も同義語として使用
され、共にロード動作によってセーブされたアドレスが
記憶されるACU内の各個別メモリ位置をいう。
【0073】図18で、プロセッサがロード・セーブ・
コマンドを実行するとき、セーブすべきメモリ・アドレ
スがアドレス・バス27上に置かれる。すなわち、書き
込まれるレジスタ番号またはACUテーブルのビットが
バッファ番号線29上に置かれ、またANDゲート91
への入力であるロード・セーブ・コマンド信号が、プロ
セッサの制御装置によって高にアサートされる。バッフ
ァ番号線29の内容が、アドレス復号論理回路133に
よって復号され、バッファ番号線29上のアドレスによ
って指定されたACUレジスタのANDゲート91の第
2入力に接続された1つの出力上に、論理高信号が生成
される。論理低信号は、アドレス復号回路133の他の
出力上に生成され、バッファ番号線29によって選択さ
れないACUレジスタ内の"AND"ゲート91の入力端
に供給される。
【0074】ANDゲート91の2つの入力が上で定義
したようなものであるとすると、その出力はバッファ番
号線29によって選択されたACUについてのみ、かつ
ロード・セーブ・コマンド信号がアサートされるときだ
け高となる。ANDゲート91の出力は、ロード・セー
ブ・コマンドがアサートされたとき、メモリ・アドレス
・バス27の内容を選択されたACUのレジスタ128
に記憶する、書込み開始信号として使用される。各AC
Uレジスタ内の有効ビット129に対応する「フリップ
・フロップ」88は、レジスタ128が記憶・検査命令
中にアドレス・バス27上に同報通信されるアドレスと
比較すべき有効ロード・アドレスを含んでいるかどうか
を示すために使用される。レジスタ128の内容とバス
27上のアドレスの実際の比較は、XNORゲート84
によって各マシン・サイクルで実施され、この両者がビ
ットごとに一致し、かつ「フリップ・フロップ」88
が、レジスタ128の内容が有効であることを示す場合
には、高信号がANDゲート94によってORゲート9
5の入力端でアサートされる。線27上のアドレスとレ
ジスタ128の内容が一致しないか、あるいはレジスタ
128の内容が「フリップフロップ」88によって無効
であることが示された場合には、そのACUエントリか
ら"OR"ゲート95への入力は低のままとなる。
【0075】ORゲート95の出力は、有効ないずれか
のACUエントリがバス27上で同報通信されるアドレ
スと一致する場合に高になり、この出力はANDゲート
96の入力の1つに印加される。プロセッサは、記憶・
検査コマンドを実行しているとき、線126を論理高と
してアサートし、それがANDゲート96の第2入力を
形成する。ANDゲート96の出力は、線30上のアド
レス検査信号であり、プロセッサにフィードバックされ
る。装置84、94、95、96、及び126の動作に
より、線30上のアドレス検査信号は、プロセッサが記
憶・検査コマンドを実行中であり、かつ有効ACUエン
トリの1つがプロセッサによってアドレス・バス27上
で同報通信されるアドレスと一致する場合にのみ、高に
アサートされる。
【0076】有効ビット129の状態遷移は、NAND
ゲート90、ANDゲート89、及びORゲート87に
よって制御される。これらを図18に示す方法で相互接
続することによって、ACUレジスタの有効ビット12
9は、それが前サイクルで高であった場合、またはロー
ド・セーブ・コマンドが前サイクルでそのエントリにあ
るアドレスを記憶した場合、またはそれが前サイクルで
高であり、かつこのACUレジスタへの有効ビットを消
去するためにACU消去コマンドが前サイクルで実行さ
れなかった場合には、所定のサイクルで論理高になる。
言いかえれば、有効ビットは、それがオフのときは、ロ
ード・セーブ・コマンドによってオンにされるまでオフ
のままであり、オンになった後は、ロード・セーブ・コ
マンドによってオフにされるまでオンのままである。
【0077】ロード・セーブ・コマンドは、所定のサイ
クルで1つのACUエントリのみの有効ビットに作用す
ることができ、このエントリはバッファ番号線29によ
って選択される。しかし、ACU消去コマンドは、所定
のサイクルで複数のACUエントリの有効ビットを消去
することができる。装置92は、アドレス・バス27か
らACUテーブル・エントリへのビットの直接的マッピ
ングである。ACUテーブル内のエントリの数がアドレ
ス・バス27上のビットの数より少ないときには、1つ
のワードが、ACU消去コマンドと共にアドレス・バス
を介して送られ、アドレス・バス上の異なるビットが異
なるACUテーブル・エントリを制御する。
【0078】前述のように、各ACU消去コマンドは、
レジスタまたはバッファ番号、または消去すべきレジス
タの数を含んでいた。レジスタまたはバッファ番号は、
最下位ビットから最上位ビットまでの範囲の1つまたは
複数のワード中の1つのビット位置に対応する。この1
つまたは複数のワードは、ACU消去動作中にアドレス
・バス27を介して送られる。各レジスタの番号はビッ
ト・マップ92に対応し、どのレジスタを消去するかを
ACUに知らせる。
【0079】ACUテーブル・エントリの数がアドレス
・バス上のビットの数より多いときには、複数のワード
がACU消去コマンドと共にアドレス・バスを介して転
送され、各ACUメモリ位置に関連する装置92がその
情報を復号し、事前に指定されたサイクルにアドレス・
バスを介して転送されたワードから有効ビットを選択す
る。
【0080】本発明のコンピュータ・システムは、多重
プログラミング環境または多重タスク処理環境で使用で
きる。このシステムは、プロセッサが1つのプログラム
を実行できるようにし、ACUを利用できるようにする
能力を有し、割込みが行われて他のプログラムを実行す
るように要求されたとき、プロセッサは、そのレジスタ
の状態をセーブして後でそのプログラムの実行に戻れる
ようにするステップの一環として、信号すなわちACU
読込み信号をACUに送り、ACUが、そのACUレジ
スタ内のアドレスをメモリ内の他の位置にセーブできる
ようにする。その後、コンピュータは、それに割り当て
られた新しいプログラムを実行し、または新しいタスク
に対して作業をすることになる。コンピュータは、その
タスクを完了するか、または割り込まれて別のプログラ
ムに進むときも、同じことを行う。次いで、最終的に
は、それが作業していた元のプログラムに戻る。そのと
き、プロセッサのレジスタが元の割込み時の状態に復元
されるだけでなく、ACUのレジスタまたはエントリ
も、元のACU読取り命令を受け取った時の状態に復元
される。したがって、これによって、システムが、多重
プログラミング環境または多重タスク処理環境で異なる
複数のプログラムまたは適用業務に使用できるようにな
る。
【0081】図18に戻ると、プロセッサはACU読取
りコマンドを実行するとき、NANDゲート83の入力
の1つに印加されるACU読取りコマンド線127をア
サートする。プロセッサはまた、それが読み取ろうとす
るACUレジスタのアドレスをバッファ番号線29上に
置き、このアドレスは復号回路133によって復号さ
れ、次いで複方回路133が、読み取られるACUエン
トリまたはレジスタ内のNANDゲート83の第2入力
に高信号を印加し、他のACUエントリまたはレジスタ
内のNANDゲート83に低信号を印加する。この結
果、NANDゲート83の出力は、選択されたACUレ
ジスタ内で低となり、そのエントリ内のレジスタ128
の内容を、ゲート85を介し線31を経てデータ・バス
28に転送させる。データ・バスは3状態バスでなけれ
ばならない。したがって、ゲート85は3状態ゲートで
ある。位置128からデータ・バスに転送されたアドレ
スはその後メモリに記憶される。
【0082】下記は、システムがACU読取り命令をど
のように使用するかの例である。プロセッサは、オペレ
ーティング・システムから異なるプログラムまたは適用
業務を実行したいとの要求を受け取ると、ACUの内容
をメモリにセーブするために、ACU読取り信号をAC
Uに送る。オペレーティング・システムからの信号は割
込みの形をとることもできる。プロセッサは、ACU読
取り命令を用いて、(上記のように)それ自体のレジス
タの内容とACUバッファの内容を様々なメモリ位置に
セーブする。多重タスク処理システムまたは多重プログ
ラミング・システム内のオペレーティング・システム
は、これらの割込み信号を生成することができる。オペ
レーティング・システムは、プログラム実行に割込みを
かけ、割り込まれたプログラムのACUレジスタの内容
をメモリにセーブした後、ある時点でこのプログラムの
実行に戻ることができる。ACUへのアドレスの復元
は、コンピュータが、割込みが行われたプログラムの実
行を再開する前に取られる処置の1つである。ACUの
復元を行う方法はいくつかある。ACUレジスタをプロ
グラム割込み時の状態に復元するための、ある種のハー
ドウェア及びソフトウェア実施態様を作成することがで
きる。しかし、ACUレジスタを復元する比較的容易な
方法は、メモリにセーブされたアドレスをアドレス・バ
スを経てCPU内のレジスタに移し、次いでCPUレジ
スタからアドレス・バスに沿って、プログラム割込み時
にこれらのアドレスが記憶されていたACU内のレジス
タに移すことであろう。この操作は、間接ロード・セー
ブ動作を用いて一部実施することができる。当技術分野
で周知の方法によって割込みハンドラに適切な変更を加
えると、容易にこれを実施することができる。
【0083】プログラム・シーケンスの実行中にACU
のレジスタ中で何が起こるかの例を次に説明する。図1
1と図19を参照する。開始時に、ACUのすべてのレ
ジスタ128が消去される(図19)。図11のプログ
ラム・シーケンスが実行されると仮定すると、命令行1
はR13とR15の加算であり、プロセッサによって実
行される。次に、プロセッサは図11のプログラム命令
行2を実行する。これはロード・セーブ動作である。こ
れと同時に、メモリ位置18(R12)から適切な情報
をロードし、また図19のACU内のレジスタAR1に
メモリ・アドレス18(R12)をセーブする。同時
に、レジスタAR1の有効ビットV1が、ゼロから1に
変更される。次にコンピュータは、プログラムの次の
行、図11の行3を実行し、ロード・セーブ命令の実行
の一環として、アドレス10(R12)をレジスタAR
2にセーブする。同時に、コンピュータは、レジスタA
R2の有効ビットV2をゼロから1に変更する。コンピ
ュータは、図11の命令行6に達すると、記憶動作を実
行し、CPUレジスタR1すなわち112(R13)の
オペランドをメモリから取り出すために使用したアドレ
スを、図19に示すACUのACUレジスタ中にセーブ
された2つのアドレスと比較する。プログラムの次の
行、図11の行7で、ACU消去命令が、レジスタR2
の有効ビットV1を1からゼロに変更することによっ
て、レジスタAR1を基本的に消去する。このときコン
ピュータは、この特定のバッファを、図19に示すよう
に消去されているものと見なす。コンピュータはまた、
このACUレジスタを、将来のセーブのために使用でき
るものと見なし、かつ、有効ビットがゼロのままである
限り、将来の記憶・検査動作中に無視できるものと見な
す。次いでコンピュータは、図11に示すようにプログ
ラムの命令行8を実行する。それに応じて、コンピュー
タは、記憶動作のために生成されたアドレスを、ACU
のレジスタと突き合わせて検査する。検査の際に、コン
ピュータには、レジスタは図19に示すように見える。
すなわち、レジスタAR2だけが有効アドレスを有する
と見なされるが、レジスタまたはエントリAR2は正す
なわち高状態の有効ビットV2しか有さないので、この
有効アドレスを検査する必要がある。
【0084】精巧なコンピュータ・システムへの適用:
本発明のシステムが広範な応用分野を有することは、当
業者には容易にわかるであろう。これは、「単一プロセ
ッサ」、すなわち一時に1つの命令しか実行しないプロ
セッサと共に使用する際に適用できるだけでなく、はる
かに精巧なシステムにも、またスーパーコンピュータに
おいてさえ使用可能である。これは、VLIW(非常に
長い命令ワード)またはスーパースカラ・コンピュータ
・システムでの使用に理想的に適している。スーパース
カラ・コンピュータとは、各マシン・サイクルで複数の
命令が実行され、より高い実行速度が得られるコンピュ
ータである。典型的には、スーパースカラ・コンピュー
タは、1マシン・サイクルで2個または4個の命令を実
行し、1マシン・サイクルで実行される命令は、整数演
算、浮動小数点数演算、ロード操作、分岐操作など異な
る種類のものである。VLIW型のコンピュータ・アー
キテクチュアは、各マシン・サイクル中に複数の命令が
実行される形のものである。VLIWコンピュータは通
常、各マシン・サイクル中にもっと多くの命令を実行す
るように設計され、複数の命令は同じ種類のものとする
ことができる。場合によっては、VLIWコンピュータ
はまた、単一のマシン・サイクル中に複数の分岐命令を
も扱う。明らかに、VLIWアーキテクチュアまたはス
ーパースケーラ・コンピュータの使用時にメモリ待ち時
間を減らせるなら、実行の効率と速度の実質的な向上が
得られるはずである。本明細書で提案するシステムは、
こうしたより精巧なアーキテクチュアに適用すると、効
率と速度に関してさらに大きな利得をもたらすことにな
る。VLIWマシン用のコンパイラとコンパイル処理に
ついてのすぐれた参考文献は、J・R・エリス(Elli
s)の博士論文"Bulldog: A Compiler for VLIW Archite
ctures", MITPress(1986年)である。
【0085】本発明を精巧なコンピュータ・システムの
動作とともにどのように有益に使用できるかの例を次に
説明する。この例は、VLIWアーキテクチュアとIB
MシステムS370式のアセンブリ言語を使用するコン
ピュータ・システムに関するものである。これは、先に
図9、10、11、12に示すプログラム・シーケンス
の説明で既に使用したものと同じアセンブリ言語であ
る。同じ元のプログラム・シーケンスを再度使用し、図
20に示す。図20の各プログラム行の詳細な説明につ
いては、図9に関する先の議論を参照されたい。
【0086】図20に示すコード・フラグメントでは、
目的は、できるだけ早くコード・フラグメントの実行を
完了することである。コンパイラには、命令中で指定さ
れたオフセットをレジスタR12とR13の内容に加算
することによって生成されたアドレスが同じかそうでな
いかを知る手段はないと仮定する。前述のように、この
最適化されたコード用の例示的マシンでは、1サイクル
に複数の370命令を実行できるVLIWアーキテクチ
ュアが使用されていると仮定する。ただし、変位を伴う
370式のロードまたは記憶は、さらに複数の1サイク
ル原始動作に分割される可能性があるが、上記の仮定は
例を簡単にするためである。VLIW命令における動作
は、前の命令からの利用可能なレジスタの古い値を用い
て、上述のように並列に実行され、コンパイラは、これ
らの動作が互いにデータ依存性をもたないことを保証す
る。同じ命令中の記憶動作、記憶・検査動作、及びAC
U消去動作は、これらが特別のマルチポート・キャッシ
ュ・ハードウェア及びロード動作によって並列に実行さ
れても、命令中におけるそれらの発生順序で左から右に
順次実行される場合と同じ効果をもち、同じ命令中に同
じメモリ位置への同時記憶動作がある場合でも、前のV
LIW命令からの利用可能なメモリ位置の古い値を読み
取る。これらの仮定は実施態様の詳細であるが、例を理
解するために必要である。
【0087】ACU機能なしでVLIWマシンによって
このコード・フラグメント上で得ることのできる最小実
行時間を、図21に示し、以下に説明する。コンパイラ
は、図21の行4すなわち命令L R2,18(R1
2)が行3の命令ST R1,112(R13)と衝突
する可能性があると想定しなければならない。また行4
の命令は行5の命令ST R3,116(R13)と衝
突する可能性があると想定しなければならない。また、
行6の命令L R4,10(R12)が行5の命令ST
R3,116(R13)と衝突する可能性があると想
定しなければならない。したがって、コンパイラはこれ
らの命令の順序を並べ換えず、その結果、プログラムは
図21に示す形にコンパイルされることになる。したが
って、このコード実行の所与の例で同じ位置を参照する
ロード動作及び記憶動作がないときでも、すべての実行
に7サイクルかかることになる。
【0088】しかし、ACUをVLIWマシンに組み込
むと、上記のコード・フラグメントを、図22に示すよ
うに3サイクルでスケジューリングできる。このスケジ
ュールでは、ロード動作と記憶動作の間に衝突がないと
仮定する。この3サイクルのコード・フラグメント実行
中にACUによってロード動作と記憶動作の間の衝突が
検出された場合は、追加の5サイクルがVLIWマシン
によって回復コードで費され(図23)、さらに割込み
オーバーヘッドがあるが、その大きさは実施態様に依存
する。したがって、ロード・アドレスと記憶アドレスが
衝突しない場合の頻度がやや高い場合には、ACU機能
によってこのコードの実行時間が著しく短縮されること
になる。
【0089】図23に示す回復コードは、図12に示す
ものと類似しているが、下記の点が異なる。すなわち、
マシンはVLIWマシンであるので、VLIW命令にお
ける記憶・検査動作がアドレス検査例外を引き起こすと
きは、その命令中のすべての動作が打ち切られ、回復コ
ードで実行されなければならない。したがって、図12
に示す記憶・検査R1,112(R13)命令の動作に
加えて、2つのACU消去動作と"AR"動作が、図23
の回復コード中で繰り返される。図22に示すように、
同じ命令中に複数の記憶・検査動作がある可能性があ
る。図22では、命令3中で2つの記憶・検査動作が発
生する。どの記憶・検査動作がアドレス検査例外を引き
起こすかには関係なく、実行される回復コードは、両方
の記憶・検査動作によって引き起こされた例外から回復
するために必要な動作を含んでいる。この手法は、同じ
命令中の異なる記憶・検査動作用に別々の回復コードを
生成するよりもかなり簡単であり、性能に対する影響は
無視できる。
【0090】当業者には容易にわかるように、各サイク
ルで複数のロード・セーブ命令と記憶・検査命令を支援
するためのマルチポート式ACUは、前述の単一ポート
式ACUの簡単な拡張である。複数のポートを実施する
ために追加のハードウェアが必要となる。
【0091】アドレス比較機構(ACU)は、好ましい
実施例で述べた連想メモリ以外の方法を使って実施する
こともできる。連想メモリをもつ場合のように、各レジ
スタ/位置を備えた比較機構を設ける代わりに、読取り
ポート1個当り1つのマルチポート・レジスタ・ファイ
ルと1つの比較機構を使用することもできる。読取りポ
ートの数は、所望の性能目的を満たすように選択する。
その場合、余分にわずかなハードウェアを使用して、す
べての比較機構を重複なしに実際に使用されるすべての
ACUレジスタにアクセスさせることができる。この余
分のハードウェアが望ましくない場合には、レジスタ/
位置を、使用可能な比較機構の間で静的に区分すること
もできる。また時分割動作システムにおいてタイマー割
込み時にACU内容をセーブし復元する必要がなくなる
ように、ACU中に、異なるユーザ・プロセスに割り振
ることのできる複数のレジスタ・セットを準備すること
ができる。やはり本発明の範囲に含まれるACUのかな
り異なる実施態様は、セーブされるアドレスを生成する
命令が実行されるときに、実行時にセーブされるアドレ
ス用のACUレジスタを割り振ることである。これによ
ってコンパイラの実施が簡単になる。というのは、こう
するとコンパイラは、ACUレジスタの割振りと割振り
解除について気を使わなくてすむからである。その場
合、ACUはハードウェア・ハッシュ・テーブルとして
実施することができる。さらに、ACU内の有効ビット
は、複数の値を表すことのできるタグ・フィールドで置
き換えることができる。非ゼロのタグ値は、有効エント
リを示す。またロード・セーブ・コマンドが、セーブさ
れるアドレスと共にセーブされるタグ値を指定すること
もできる。その後ACU消去コマンドが、多くの方法の
1つで、タグ値の範囲(または1組のタグ値)を指定
し、この範囲(または組)内のエントリを単一コマンド
でACUから除去することができる。
【0092】本発明の趣旨に反することなく性能向上の
ために、好ましい実施例で指定した特定の命令を修正す
ることができ、また追加の命令を加えることもできる。
好ましい実施例では、ACU消去命令用のマスクは命令
自体の中で指定されている。主メモリに記憶されたマス
クを指すより小さな固定寸法の命令を実施することがさ
らに最適であろう。同様に、現在はACU読取り命令を
使用してACUレジスタの内容を一時に1命令ずつ主メ
モリに移しているが、その代わりにベクトル移動型命令
を使用して、1命令中ですべてのACUレジスタのメモ
リへの転送を指定することもできる。この命令の性能
は、その内容をセーブしなければならないACUレジス
タを識別する(メモリ内の)ベクトル・マスクを指定す
ることによって、さらに最適化することができる。同様
に、ベクトル命令を使用して、単一の命令でACUの必
要なすべてのレジスタ/位置を復元することができる。
上記の命令の修正に加えて、新しい命令を追加すること
ができる。ACUが一致を見つけたとき、最適回復順序
を選択するのに、どのACUが一致をもたらしたかを知
ることが必要となる。ACUが、一致する位置のアドレ
スを記憶するための特別のレジスタを備え、CPUが、
特別の命令を使ってこのレジスタに照会することができ
る。複数の一致が発生する場合には、一致する位置の1
つのアドレス(多分、最下位)をCPUに報告し、これ
とともに、追加の1ビット信号で、さらに一致する位置
があることを示すことができる。ACUがこのようなハ
ードウェア・サポートを持たない場合には、ACU読取
りコマンドの、指定されたACUレジスタの内容を指定
のCPU汎用レジスタに転送するバージョンを備えるの
が有用であろう。
【0093】また、本発明の範囲や趣旨を逸脱すること
なく、好ましい実施例で述べた回復機構を、多くの形で
修正することができる。例えば、CPUアーキテクチュ
アを、記憶・検査命令の実行によってACU内で一致が
生じたときにだけセットされる、余分のビットを条件コ
ード・レジスタに含むように修正することができる。そ
の場合、CPUはこの条件コード・レジスタを他のAC
Uコマンドと共に使用して正しい回復コードを選択する
ことができる。
【0094】本発明を好ましい実施例に関して詳述した
が、本発明の範囲と趣旨を逸脱することなく形式と詳細
に様々な変更が可能なことが、当業者には理解できよ
う。
【図面の簡単な説明】
【図1】本発明のコンピュータ・システムの全容を示す
ブロック図である。
【図2】従来のオプティマイザの動作の流れ図である。
【図3】本発明の原理に従ったオプティマイザの動作の
流れ図である。
【図4】分岐動作における従来のオプティマイザの動作
の流れ図である。
【図5】分岐動作における本発明のオプティマイザの動
作の流れ図である。
【図6】本発明の改良されたコンパイラでコンパイルさ
れたコンピュータ・プログラムに現れる、命令セットの
4つの新しい命令のうちの3つの形式を示す図である。
【図7】改良されたコンパイラ内で動作するオプティマ
イザが本発明の教示に従ってプログラムをどのようにコ
ンパイルするかを示す流れ図である。
【図8】改良されたコンパイラ内で動作するオプティマ
イザが本発明の教示に従ってプログラムをどのようにコ
ンパイルするかを示す流れ図である。
【図9】コンパイルされず最適化されない形のコンピュ
ータ・プログラムのシーケンスの例である。
【図10】本発明を使用せずにコンパイルされた図9か
らのコンピュータ・プログラムのシーケンスを示す図で
ある。
【図11】本明細書に記載する改良されたコンパイラを
使ってコンパイルされた図10からのコンピュータ・プ
ログラムのシーケンスを示す図である。
【図12】図11に示すコンパイル済みプログラム用
の、本発明の改良されたコンパイラによって生成される
回復コードの例を示す図である。
【図13】図1より詳細な、本発明のコンピュータ・シ
ステム全体の概略図である。
【図14】本発明によるコンパイルされたコンピュータ
・プログラムの、プロセッサによる実行を示す流れ図で
ある。
【図15】本発明によるコンパイルされたコンピュータ
・プログラムの、プロセッサによる実行を示す流れ図で
ある。
【図16】本発明のACUとCPUの間のインタフェー
スを示す図である。
【図17】ACUの構造全体を示す図である。
【図18】ACU内のメモリ・バッファを制御するポー
トの1つを、いくつかの回路とともに示す論理図であ
る。
【図19】動作中のACU内のレジスタの状態を示す図
である。
【図20】コンパイルされず最適化されない形のコンピ
ュータ・プログラムのシーケンスを示す図である。
【図21】本発明を使用せず、VLIWコンピュータ上
で実行するためのコンパイル後の、図20からのコンピ
ュータ・プログラムのシーケンスを示す図である。
【図22】本発明を使用した、VLIWコンピュータ上
で実行するためのコンパイル後の図20からのコンピュ
ータ・プログラムのシーケンスを示す図である。
【図23】図22に示すコンパイルされた形のプログラ
ム用の、本発明を使用してコンパイラによって作成され
る回復コードを示す図である。
【符号の説明】
21 コンパイラ 22 ACU(アドレス比較機構) 23 メモリ 24 CPUまたはプロセッサ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 マノジ・クマール アメリカ合衆国10598、ニューヨーク州 ヨークタウン・ハイツ、オーバールッ ク・コモンズ2エイチ (56)参考文献 特開 昭54−150049(JP,A) IEEE TRANSACTIONS ON COMPUTERS,38〜5! (1989−5.),P.663−678 (58)調査した分野(Int.Cl.6,DB名) G06F 9/45 G06F 9/38 350 JICSTファイル(JOIS)

Claims (5)

    (57)【特許請求の範囲】
  1. 【請求項1】プロセッサ(24)と、それに付随してい
    るコンパイラ(21)と、前記プロセッサから命令を受
    け取る、専用のアドレス比較装置であるACU(22)
    と、を具備するシステムにおいてロード動作の実行効率
    の向上を図る方法であって、 前記付随するコンパイラによって対象となるプログラム
    を最適化コンパイルする過程において、命令シーケンス
    外に移動することによってそれと対となっているストア
    動作より前に移動することのできるロード動作及び該ス
    トア動作を検出し、前記ロード動作を前記ストア動作よ
    り前に移動するステップと、 最適化コンパイルされた前記プログラムを実行する過程
    において、前記移動したロード動作により取り出された
    オペランドのアドレスを前記ACUにセーブするステッ
    プと、 前記ACUが、前記セーブされたアドレスと前記対にな
    っているストア動作を最適化コンパイルする過程におい
    て生成されたアドレスを比較するステップと、 前記比較の結果アドレスが相違していれば前記対になっ
    ているストア動作を実行し、前記最適化コンパイルされ
    たプログラムの実行を継続するステップと, 前記比較の結果アドレスが同一であれば前記ストア動作
    の実行を中断し、プログラムの回復を行うステップと、 からなる方法。
  2. 【請求項2】前記回復を行うステップは、 前記中断したストア動作実行を完了するステップと, その後前記ロード動作を実行し、それに後続する全ての
    命令を最適化されていないプログラムの形式で実行する
    ステップと、 を含む請求項1の方法。
  3. 【請求項3】前記セーブされたアドレスを前記ACUか
    ら異なったメモリに位置に移動することによって、異な
    ったプログラムの実行を可能にするステップと、その
    後、 前記移動されたアドレスを連想メモリに戻し、前記最適
    化コンパイルされたプログラムの実行を再開始するステ
    ップと、 をさらに含む請求項1の方法。
  4. 【請求項4】前記ロード動作を検出するステップは該ロ
    ード動作をロード・セーブ命令に変更するステップを含
    み、 前記対になっているストア動作を検出するステップはス
    トア動作をストア・チェック命令に変更するステップを
    含み、 前記セーブするステップは前記ロード・セーブ命令に応
    答して実行され、 前記比較するステップは前記ストア・チェック命令に応
    答して実行される、 請求項1の方法。
  5. 【請求項5】プロセッサ(24)と、それに付随してい
    るコンパイラ(21)と、専用のアドレス比較装置であ
    るACU(22)と、を具備するシステムにおいてロー
    ド動作の実行効率の向上を図るシステムであって、 前記付随するコンパイラによって対象となるプログラム
    を最適化コンパイルする過程において、命令シーケンス
    外に移動することによってそれと対となっているストア
    動作より前に移動することのできるロード動作及び該ス
    トア動作を検出し、前記ロード動作を前記ストア動作よ
    り前に移動する手段と、 最適化コンパイルされた前記プログラムを実行する過程
    において、前記移動したロード動作により取り出された
    オペランドのアドレスを前記ACUにセーブする手段
    と、 前記ACUが、前記セーブされたアドレスと前記対にな
    っているストア動作を最適化コンパイルする過程におい
    て生成されたアドレスを比較する手段と、 前記比較の結果アドレスが相違していれば前記対になっ
    ているストア動作を実行し、前記最適化コンパイルされ
    たプログラムの実行を継続する手段と, 前記比較の結果アドレスが同一であれば前記ストア動作
    の実行を中断し、プログラムの回復を行う手段と、 からなるシステム。
JP5080421A 1992-05-06 1993-04-07 コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置 Expired - Lifetime JP2786574B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US88010292A 1992-05-06 1992-05-06
US880102 1992-05-06

Publications (2)

Publication Number Publication Date
JPH06214799A JPH06214799A (ja) 1994-08-05
JP2786574B2 true JP2786574B2 (ja) 1998-08-13

Family

ID=25375524

Family Applications (1)

Application Number Title Priority Date Filing Date
JP5080421A Expired - Lifetime JP2786574B2 (ja) 1992-05-06 1993-04-07 コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置

Country Status (3)

Country Link
US (1) US5542075A (ja)
EP (1) EP0568842A2 (ja)
JP (1) JP2786574B2 (ja)

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748937A (en) * 1993-08-26 1998-05-05 Intel Corporation Computer system that maintains processor ordering consistency by snooping an external bus for conflicts during out of order execution of memory access instructions
US6378062B1 (en) * 1994-01-04 2002-04-23 Intel Corporation Method and apparatus for performing a store operation
JP3212213B2 (ja) * 1994-03-16 2001-09-25 株式会社日立製作所 データ処理装置
US5625835A (en) * 1995-05-10 1997-04-29 International Business Machines Corporation Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US5717909A (en) * 1995-05-26 1998-02-10 National Semiconductor Corporation Code breakpoint decoder
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5802340A (en) * 1995-08-22 1998-09-01 International Business Machines Corporation Method and system of executing speculative store instructions in a parallel processing computer system
US5611063A (en) * 1996-02-06 1997-03-11 International Business Machines Corporation Method for executing speculative load instructions in high-performance processors
US5809275A (en) * 1996-03-01 1998-09-15 Hewlett-Packard Company Store-to-load hazard resolution system and method for a processor that executes instructions out of order
US5918005A (en) * 1997-03-25 1999-06-29 International Business Machines Corporation Apparatus region-based detection of interference among reordered memory operations in a processor
JP3515337B2 (ja) * 1997-09-22 2004-04-05 三洋電機株式会社 プログラム実行装置
WO1999019795A1 (en) * 1997-10-13 1999-04-22 Institute For The Development Of Emerging Architectures, L.L.C. Method and apparatus for optimizing execution of load and store instructions
US6505296B2 (en) 1997-10-13 2003-01-07 Hewlett-Packard Company Emulated branch effected by trampoline mechanism
US6075935A (en) * 1997-12-01 2000-06-13 Improv Systems, Inc. Method of generating application specific integrated circuits using a programmable hardware architecture
US6202204B1 (en) * 1998-03-11 2001-03-13 Intel Corporation Comprehensive redundant load elimination for architectures supporting control and data speculation
US6332214B1 (en) * 1998-05-08 2001-12-18 Intel Corporation Accurate invalidation profiling for cost effective data speculation
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6718541B2 (en) * 1999-02-17 2004-04-06 Elbrus International Limited Register economy heuristic for a cycle driven multiple issue instruction scheduler
US6321328B1 (en) * 1999-03-22 2001-11-20 Hewlett-Packard Company Processor having data buffer for speculative loads
WO2000068784A1 (en) * 1999-05-06 2000-11-16 Koninklijke Philips Electronics N.V. Data processing device, method for executing load or store instructions and method for compiling programs
US6728867B1 (en) * 1999-05-21 2004-04-27 Intel Corporation Method for comparing returned first load data at memory address regardless of conflicting with first load and any instruction executed between first load and check-point
US7089404B1 (en) 1999-06-14 2006-08-08 Transmeta Corporation Method and apparatus for enhancing scheduling in an advanced microprocessor
US6813705B2 (en) * 2000-02-09 2004-11-02 Hewlett-Packard Development Company, L.P. Memory disambiguation scheme for partially redundant load removal
US6631460B1 (en) 2000-04-27 2003-10-07 Institute For The Development Of Emerging Architectures, L.L.C. Advanced load address table entry invalidation based on register address wraparound
US6681317B1 (en) * 2000-09-29 2004-01-20 Intel Corporation Method and apparatus to provide advanced load ordering
US7269719B2 (en) * 2002-10-30 2007-09-11 Stmicroelectronics, Inc. Predicated execution using operand predicates
US7103880B1 (en) 2003-04-30 2006-09-05 Hewlett-Packard Development Company, L.P. Floating-point data speculation across a procedure call using an advanced load address table
US7325228B1 (en) 2003-04-30 2008-01-29 Hewlett-Packard Development Company, L.P. Data speculation across a procedure call using an advanced load address table
US7522590B2 (en) * 2003-10-14 2009-04-21 International Business Machines Corporation Managing message arrival to ensure proper matching of unordered messages
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
CN100342335C (zh) * 2004-09-23 2007-10-10 华为技术有限公司 芯片程序加载方法
DE102005048584A1 (de) * 2005-07-21 2007-01-25 Robert Bosch Gmbh FlexRay-Kommunikationsbaustein, FlexRay-Kommunikationscontroller und Verfahren zur Botschaftsübertragung zwischen einer FlexRay-Kommunikationsverbindung und einem FlexRay-Teilnehmer
US7613906B2 (en) * 2005-08-12 2009-11-03 Qualcomm Incorporated Advanced load value check enhancement
US7904697B2 (en) * 2008-03-07 2011-03-08 International Business Machines Corporation Load register instruction short circuiting method
US9152456B2 (en) * 2009-01-23 2015-10-06 Oracle America, Inc. Efficient per-thread safepoints and local access
US8966457B2 (en) * 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
WO2014193375A1 (en) * 2013-05-30 2014-12-04 Intel Corporation Allocation of alias registers in a pipelined schedule
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11016775B2 (en) * 2019-06-26 2021-05-25 Amazon Technologies, Inc. Neural network operation reordering for parallel execution
CN110794900A (zh) * 2019-09-25 2020-02-14 武汉圣达电气股份有限公司 一种综合管廊acu柜
US20220028147A1 (en) * 2020-07-24 2022-01-27 Weta Digital Limited Operating animation controls using evaluation logic
CN114416407B (zh) * 2022-03-29 2022-06-28 树根互联股份有限公司 一种实时数据的乱序修复系统、方法及计算机设备

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54150049A (en) * 1978-05-18 1979-11-24 Fujitsu Ltd Pre-fetch order control system
JPS56149646A (en) * 1980-04-21 1981-11-19 Toshiba Corp Operation controller
US5173872A (en) * 1985-06-13 1992-12-22 Intel Corporation Content addressable memory for microprocessor system
US4847755A (en) * 1985-10-31 1989-07-11 Mcc Development, Ltd. Parallel processing method and apparatus for increasing processing throughout by parallel processing low level instructions having natural concurrencies
SE454920B (sv) * 1986-10-03 1988-06-06 Ellemtel Utvecklings Ab Sett och anordning for att i en pa forhand avgjord ordningsfoljd exekvera tva instruktionssekvenser medelst separatminnen
US4991090A (en) * 1987-05-18 1991-02-05 International Business Machines Corporation Posting out-of-sequence fetches
US5202975A (en) * 1990-06-11 1993-04-13 Supercomputer Systems Limited Partnership Method for optimizing instruction scheduling for a processor having multiple functional resources

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
IEEE TRANSACTIONS ON COMPUTERS,38〜5!(1989−5.),P.663−678

Also Published As

Publication number Publication date
JPH06214799A (ja) 1994-08-05
EP0568842A3 (ja) 1994-01-05
EP0568842A2 (en) 1993-11-10
US5542075A (en) 1996-07-30

Similar Documents

Publication Publication Date Title
JP2786574B2 (ja) コンピュータ・システムにおける順不同ロード動作の性能を改善する方法と装置
US5692169A (en) Method and system for deferring exceptions generated during speculative execution
JP3093624B2 (ja) 投機例外を処理する方法及び装置
US4755966A (en) Bidirectional branch prediction and optimization
US5625835A (en) Method and apparatus for reordering memory operations in a superscalar or very long instruction word processor
US8935515B2 (en) Method and apparatus for vector execution on a scalar machine
JP2938426B2 (ja) 順不同ロード命令とストア命令との干渉を検出回復するための方法及び装置
US5421022A (en) Apparatus and method for speculatively executing instructions in a computer system
US5901308A (en) Software mechanism for reducing exceptions generated by speculatively scheduled instructions
US5428807A (en) Method and apparatus for propagating exception conditions of a computer system
US6505296B2 (en) Emulated branch effected by trampoline mechanism
JPH0638234B2 (ja) 変換されたプログラムコードのソース命令不可分性を保持するためのシステムおよび方法
KR20000076584A (ko) 컴퓨터 프로세싱 시스템에서의 로드 연산을 재순서화하기위한 방법 및 장치
JPH02260033A (ja) ブランチ予測
US7302557B1 (en) Method and apparatus for modulo scheduled loop execution in a processor architecture
JP3439033B2 (ja) 割り込み制御装置及びプロセッサ
US5761467A (en) System for committing execution results when branch conditions coincide with predetermined commit conditions specified in the instruction field
JP3570442B2 (ja) コンピュータ
JP2951580B2 (ja) 非プログラム順序の命令実行をサポートする方法及びデータ処理システム
US6704861B1 (en) Mechanism for executing computer instructions in parallel
JP6882320B2 (ja) ベクトル命令の処理
US11782871B2 (en) Method and apparatus for desynchronizing execution in a vector processor
JP3146058B2 (ja) 並列処理型プロセッサシステムおよび並列処理型プロセッサシステムの制御方法
CN117083594B (zh) 用于在矢量处理器中进行去同步化执行的方法和设备
WO2022231733A1 (en) Method and apparatus for desynchronizing execution in a vector processor