JP3759398B2 - コンピュータ・プログラムのハザードを検出するシステム - Google Patents
コンピュータ・プログラムのハザードを検出するシステム Download PDFInfo
- Publication number
- JP3759398B2 JP3759398B2 JP2000310362A JP2000310362A JP3759398B2 JP 3759398 B2 JP3759398 B2 JP 3759398B2 JP 2000310362 A JP2000310362 A JP 2000310362A JP 2000310362 A JP2000310362 A JP 2000310362A JP 3759398 B2 JP3759398 B2 JP 3759398B2
- Authority
- JP
- Japan
- Prior art keywords
- instruction
- instructions
- data
- write
- memory
- 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
- 238000004590 computer program Methods 0.000 title claims description 25
- 230000007246 mechanism Effects 0.000 claims description 111
- 238000012545 processing Methods 0.000 claims description 80
- 230000004044 response Effects 0.000 claims description 19
- 238000001514 detection method Methods 0.000 claims description 11
- 238000000034 method Methods 0.000 description 29
- 230000008569 process Effects 0.000 description 16
- 230000006870 function Effects 0.000 description 11
- 238000003672 processing method Methods 0.000 description 8
- 238000010586 diagram Methods 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000007704 transition Effects 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/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Description
【発明の属する技術分野】
本発明は、一般的にはコンピュータ処理技術に関し、より具体的には、コンピュータ・プログラムの命令グループ内のデータ・ハザードを検出するスーパースカラー処理システムおよびその方法に関する。
【0002】
【従来の技術】
スーパースカラー処理としても知られている並列処理は、コンピュータ・プログラムの命令を処理するのに必要な時間量を減少させるために開発されてきた。並列処理においては、複数の命令を同時に実行する少なくとも2つのパイプラインが定義される。並列処理の1つのタイプは、アウトオブオーダー(out-of-order)処理である。アウトオブオーダー処理においては、プロセッサのそれぞれのパイプラインは、他のパイプラインからは独立して同時に異なる命令を実行する。
【0003】
アウトオブオーダー処理においては、命令は、プロセッサによって受け取られる順序と同じ順序でパイプラインに入力されるとは限らない。更に、典型的には、命令が異なればそれを実行する時間量が異なるので、たとえある1つの命令がそのそれぞれのパイプラインに先に入力されていたとしても、他の命令が、当該1つの命令よりも前に実行を完了するということがあり得る。従って、命令は、プロセッサ内の複数パイプラインによって受け取られる順序と同じ順序で実行されるとは必ずしも限らない。その結果、アウトオブオーダー処理の場合、リード・アフター・ライト(read-after-write:書込み後の読み出し)のデータ・ハザードおよびライト・アフター・ライト(write-after-write:書込み後の書込み)のデータ・ハザードによって起こるエラーを防止する複雑さ(詳細は後述)が比較的大きい。
【0004】
プロセッサによって実行されるべき1つの命令が、別の命令の実行によって抽出または生成されたデータを実行中に利用する時、"リードアフターライトのデータ依存性"が存在する。上記別の命令が実行する前に上記1つの命令が実行すると、実行中に不正データを利用することがあるので、エラーが発生することがある。結果として、エラーを防止するためには、上記別の命令の実行から必要なデータが利用可能となるまで、上記別の命令の実行によって抽出または生成されたデータを利用する上記1つの命令が実行しない、ということを保証するステップをとらなければならない。リードアフターライトのデータ依存性が存在し、かつそのようなステップがとられなければ、リードアフターライトのデータ依存性が不正データの利用となることがあり、よって"リードアフターライトのデータ・ハザード(data hazard)"が存在する。
【0005】
一方、実行中に、相対的に若い命令によって書き込まれるレジスタまたはメモリ位置に、相対的に古い命令がデータを書き込み、該古い命令が、若い命令によって書き込まれた有効なデータを不正に上書きすることがある時、"ライトアフターライトのデータ・ハザード"が存在する。ここで、ある命令が、別の命令の後にプロセッサによって受け取られた時、その命令は、当該別の命令より"若い"という。反対に、ある命令が、別の命令より前にプロセッサによって受け取られた時、その命令は、当該別の命令より"古い"という。
【0006】
ライトアフターライトのデータ・ハザードの1つの例として、第1の命令が、データを抽出して該抽出したデータを特定のレジスタに書き込むロード命令であると仮定する。抽出すべきデータがローカル的に利用可能でない場合、データを抽出するのに要する時間は比較的長い。従って、第1の命令より若い命令である第2の命令が、第1の命令が実行した後ではあるが該第1の命令によって抽出されたデータがレジスタに書き込まれるより前に、同じレジスタにデータを書き込む可能性がある。そのようなケースでは、第2の命令によってレジスタに書き込まれたデータが、第1の命令によって抽出されたデータによって上書きされることがある。その結果、レジスタは不正データを含み、後の命令がレジスタのデータを使用する時エラーが発生する可能性がある。
【0007】
リードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードによるエラーを防止するため、大部分のアウトオブオーダー並列プロセッサは制御機構を使用する。すなわち、制御機構は、それぞれの命令の実行中に、処理されつつある命令(以下、"ペンディング(pending)命令"と呼ぶ)が、より古い命令の実行によって生成されるデータを必要とするか否かを判断する。必要としていると判断すれば、制御機構は、次に、必要とされるデータが少なくとも利用可能となる時点までに当該古い命令の処理が完了したか否かを判断する。このデータがなお利用可能でなければ、制御機構は、必要なデータが利用可能となるまでペンディング命令の処理をストール(stall、すなわち一時的に機能停止)し、こうしてリードアフターライトのデータ・ハザードによるエラーを防止する。
【0008】
さらに制御機構は、古い命令からのデータ(すなわち古い命令によって抽出または生成されるデータ)が、ペンディング命令からのデータと同じレジスタまたは同じメモリ位置に書き込まれることになっているか否かを判断する。もしも同じレジスタまたは同じメモリ位置に書き込まれるならば、制御機構は、古い命令からのデータがそのレジスタまたはメモリ・アドレスに書き込まれるまでペンディング命令をストールし、それによって、ライトアフターライトのデータ・ハザードによるエラーを防止する。このようにして、制御機構は、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードによるエラーを防止するため、ペンディング命令をストールさせることができる。
【0009】
ペンディング命令のストールは、通常、ペンディング命令を実行しているパイプラインに送られるストール信号をアサートすることによって達成される。アサートされたストール信号に応答して、パイプラインは、制御機構によってストール信号がデアサート(deassert)されるまでペンディング命令の実行を停止するよう設計される。リードアフターライトのデータ・ハザードもライトアフターライトのデータ・ハザードももはや存在しなくなれば、制御機構はストール信号をデアサートし、それに応じてパイプラインは、ペンディング命令の処理を再開する。リードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードによる潜在的なエラーを検出して防止するのに必要とされる制御機構は、アウトオブオーダー・プロセッサにおいては比較的複雑であり、パイプラインの数が増加するにつれ、制御機構の複雑さは劇的に増加する。
【0010】
この結果、多くの従来の並列プロセッサ、特に多数のパイプラインを有するプロセッサは、上述のアウトオブオーダーのタイプの処理方式の代わりにインオーダー(in-order)タイプの処理方式を使用する。インオーダー・タイプの処理方式においては、異なるパイプラインによって処理される命令は、システムクロック信号の所定のエッジに従ってパイプラインの複数の段階を1つずつ実行される。すなわち、1つのパイプラインにおける命令の処理は、通常複数の段階に分割され、パイプラインのそれぞれの段階は、異なる命令を同時に処理する。
【0011】
例えば、それぞれのパイプラインによって実行される処理は、レジスタ段階、実行段階、例外検出段階および書込み段階に分割される。レジスタ段階の間、命令の実行に必要なオペランドが取得される。オペランドが取得されると、命令の処理は、命令が実行される実行段階に入る。命令が実行された後、命令の処理は例外検出段階に入り、そこで、例えばデータの信憑性が無いことを示すことがある実行中のオーバーランというような条件が検査される。例外検出段階が完了すると書込み段階に入り、そこで、実行段階の結果がレジスタに書き込まれる。
【0012】
インオーダー処理の重要な特徴は、"発行グループ"のそれぞれの命令が、同時にそれぞれの段階を1つずつ実行する、という点にある。ここで、"発行グループ(issue group)"は、単一プロセッサ内で異なるパイプラインの同じ段階によって同時に(すなわち同一クロック・サイクルの間に)処理される命令セット、と定義される。例えば、従来技術において典型的に実施されているように、それぞれのパイプラインのそれぞれの段階が一度に1つの命令を処理すると仮定する。(複数の)パイプラインの例外検出段階における(複数の)命令が第1の発行グループを形成し、(複数の)パイプラインの実行段階における(複数の)命令が第2の発行グループを形成する。更に、(複数の)パイプラインのレジスタ段階における(複数の)命令が第3の発行グループを形成する。ストールがないとすると、発行グループのそれぞれは、システム・クロック信号のアクティブ・エッジに応答して次のそれぞれの段階に進む。言い換えると、システム・クロック信号のアクティブ・エッジに応答して、第1の発行グループは書込み段階に進み、第2の発行グループは例外検出段階に進み、第3の発行グループは実行段階に進む。
【0013】
"アクティブ・エッジ(active edge)"は、ここではシステムクロック信号の何らかのエッジを示すものとして使用されており、このエッジの発生により、パイプラインにおいてストールされていない命令のそれぞれは、そのパイプラインにおける次の処理段階に前進するよう誘導される。例えば、プロセッサが、ストールされていない命令を、3クロック毎に次の処理段階に進むよう設計されていると仮定する。この例では、アクティブ・エッジを、クロック信号の3番目毎の立ち上がりエッジとして定義することができる。どのクロック信号のエッジが"アクティブ・エッジ"として指定されるかは設計パラメータに基づいており、プロセッサごとに変えることができる、という点に注意すべきである。
【0014】
インオーダー処理の間は、1つの発行グループにおけるいかなる命令も、別の発行グループの別の命令を追い越さない。言い換えると、上記別の発行グループの命令の後にパイプラインに入力された上記1つの発行グループの命令は、当該別の発行グループの命令のいずれかを処理する段階と同じ段階に入ることを禁止される。従って、いかなる時点においても、パイプラインのそれぞれの段階は、ただ1つの発行グループからの命令だけをそれぞれ処理している。異なる発行グループからの命令が相互に追い越すことが禁止されるので、パイプラインを制御して命令をストールし、リードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードによるエラーを防ぐ制御機構が大幅に簡略化され、よってアウトオブオーダー処理に比べて好ましいことが多い。
【0015】
しかしながら、インオーダーのプロセッサのなかには、リードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードによるエラーが適切に防止されないものがある。この点に関して、プロセッサ・パイプラインによって処理される発行グループを定義するのに命令分散ユニット(IDU:instruction dispersal unit)がたびたび利用される。更に、明示的並列命令今コンピューティング(EPIC:explicitly parallel instruction computing)を利用するプロセッサのようなインオーダー・プロセッサのなかには、命令が、命令グループの形でIDUに送られるものがある。命令グループは命令のセットであり、該セットの中の命令と命令の間にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持たないということを、プロセッサの外部のコンパイラまたは他の何らかの装置によって保証された命令セットである。
【0016】
例えば、多くのコンパイラは、命令をIDUに順次送る。命令をコンパイルする際、コンパイラは、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードが存在するか否かをを判断する。パフォーマンスを最適化するため、コンパイラは、IDUが一層効率的に命令を処理することができるように、ストップ・ビットを挿入することによって命令グループを定義する。ここで使用される"ストップ・ビット"は、処理システムに送られる命令と命令の間に挿入されるビットであり、該ビットを適切にアサートまたはデアサートして、命令グループの開始および終了を示すことができる。
【0017】
例えば、コンパイラは、連続的に送られる複数の命令が1つの命令グループを定義する時を判断し、グループの最初の命令の前およびグループの最後の命令の後にストップ・ビットをアサートするよう設計されることができる。その結果、アサートされたストップ・ビットとストップ・ビットの間の命令が1つの命令グループを定義し、よってアサートされたストップ・ビットとストップ・ビットの間のいかなる命令も、当該ストップ・ビットとストップ・ビットの間の他の命令とリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持つことがない、ということをIDUが認識することとなる。従って、IDUは、発行グループを定義する際に、命令グループ内の命令間におけるリードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードについて検査する必要がない。
【0018】
【発明が解決しようとする課題】
しかしながら、コンパイラが命令グループの中にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持つ2つの命令を間違って含む場合に問題が発生する。IDUは、同じ命令グループの中の命令間のリードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードについて検査しないように設計されることがあるので(検査する代わりに、ストップ・ビットのアサート/デアサートを当てにして、リードアフターライトおよびライトアフターライトのデータ・ハザードを示すよう設計されることがある)、同じ発行グループにおける2つの命令がそれらの間にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持つ、というような発行グループを、IDUが不適切に定義することがある。同じ発行グループの2つの命令の間にリードアフターライトまたはライトアフターライトのデータ・ハザードを持つことは、インオーダー・プロセッサのアーキテクチャに違反し、その結果、プロセッサ・パイプラインによる2つの命令の処理中にエラーが発生する可能性が生じる。
【0019】
このように、間にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持つ2つの命令を命令グループが含む場合を判断するシステムおよび方法を提供するという産業上の必要性が存在する。
【0020】
【課題を解決するための手段】
本発明は、上述された従来技術の不適切な点および欠点を克服する。本発明は、一般的には、ある1つの命令グループが、同じ命令グループの他の命令とデータ・ハザードを規定する命令を含んでいるかどうかを判断するシステムおよび方法を提供する。
【0021】
アーキテクチャの観点から見れば、本発明のシステムは、メモリ、複数のパイプライン、命令分散ユニット(IDU)、および制御機構を使用する。IDUは、複数の命令を含む命令グループを受け取り、該命令グループの命令を複数のパイプラインに送る。制御機構は、命令のレジスタ識別子をメモリに記憶し、該命令のうちの1つの命令に関連するレジスタ識別子がメモリに記憶されているかどうかを判断する。該1つの命令に関連するレジスタ識別子がメモリに記憶されている場合には、制御機構は警告信号を送る。該警告信号に応答して、警告メッセージを生成し、命令グループの2つの命令がリードアフターライトまたはライトアフターライトのデータ・ハザードを規定する、ということをユーザに通知することができ、および/またはさらなる命令の処理を終了させることができる。
【0022】
本発明の他の特徴によると、メモリは連想記憶装置であり、制御機構は、命令グループのそれぞれの命令が該制御機構によって分析されたと判断したとき、メモリにおけるデータを無効にする。
【0023】
本発明はまた、コンピュータ・プログラムの命令を処理し、該コンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法を提供するものとみることができる。該方法は、複数の命令を含む命令グループを定義するステップと、該命令に関連するレジスタ識別子をメモリに記憶するステップと、該命令のうちの1つの命令に関連する前記レジスタ識別子のうちの1つのレジスタ識別子がメモリに記憶されているかどうかを判断するステップと、前記1つの命令に関連する前記1つのレジスタ識別子がメモリに記憶されているかどうかを判断する前記ステップの判断に応答して警告信号を送るステップと、によって広く要約されることができる。
【0024】
本発明の他の特徴および有利な点は、以下の詳細な説明を図面と共に検証することにより、当業者には明らかとなるであろう。このような特徴および有利な点は、本発明の範囲内に含まれるものと意図され、また特許請求の範囲によって保護されるよう意図されている。
【0025】
【発明の実施の形態】
本発明は、ある1つの命令グループが、同じ命令グループにおける他の命令とデータ・ハザードを持つ命令を含むかどうかを判断するスーパースカラー処理システムおよびその方法に関する。図1は、本発明の処理システム20を使用するコンピュータ・システム15の好ましい実施形態を示す。好ましい実施形態の処理システム20はハードウェアで実現されることが好ましいが、処理システム20の一部を必要に応じてソフトウェアで実現することも可能である。
【0026】
図1に示されているように、コンピュータ・システム15は、1つまたは複数のバスを有することのできるローカル・インタフェース22を備える。ローカル・インタフェース22は、処理システム20がコンピュータ・システム15の他の構成要素と通信することを可能にする。さらに、キーボードおよび/またはマウスなどのような入力装置25を使用してシステム15のユーザからデータを入力することができ、ディスプレイ27および/またはプリンタ29を使用してユーザにデータを出力することができる。システム・クロック31はクロック信号を生成し、該クロック信号は、当該技術分野で既知の技術を介して、システム15によって伝達されるデータのタイミングを制御するのに使用される。ディスク記憶機構32をローカル・インタフェース22に接続して、(たとえば磁気または光学的な)不揮発性ディスクとの間でデータを転送することができる。また必要に応じて、システムl5をネットワーク・インタフェース33に接続して、ネットワーク35とデータを交換することを可能にすることができる。
【0027】
さらに、システム15は、メモリ44に記憶されるプログラム41、システム・マネージャ42およびコンパイラ46を備える。プログラム41は、処理システム20によって処理および実行される命令を有する。システム・マネージャ42は、入力装置25および/またはネットワーク・インタフェース33から入力を受け取り、必要に応じてプログラム41の命令を処理システム20に送るよう設計される。プログラム41の命令は、処理システム20に送られる前に、好ましくは先ず処理システム20と互換性のある形式にコンパイラ46によって変換される。例えば、プログラム41の命令が(CまたはFortranなどのような)高水準コンピュータ言語で書かれている場合、コンパイラ46は、処理システム20と互換性のあるマシン語にそれらの命令を翻訳するよう設計される。
【0028】
本発明の好ましい実施形態において、コンパイラ46は、翻訳された命令を含み、かつ処理システム20に直接送られることのできる命令バンドル(instruction bundle)を定義する。図2は、本発明の原理に従う命令バンドル52を示している。図2に示されているように、それぞれのバンドル52は、1つまたは複数の命令を定義するデータを含み、さらにヘッダ55を有する。ヘッダ55は、バンドル52に含まれる命令の種類を特定する識別子情報を有する。例えば、ヘッダ55は、バンドル52における第1の命令がメモリ演算命令であり、バンドル52における第2の命令が整数演算命令であり、バンドル52における第3の命令が浮動小数点演算であることを示す情報を有することができる。ヘッダ55はまた、ストップ・ビット57を有する(これについては、詳細を後述する)。図2に示される命令バンドル52は3つの命令を含むよう示されているが、任意の数の命令をバンドル52に含めることができる。
【0029】
命令バンドル52を定義する際、コンパイラ46は、リードアフターライトのデータ・ハザードおよびライトアフターライトのデータ・ハザードについて検査し、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを規定する2つの命令が同じバンドル52内に置かれないということを確実にするよう設計されるのが好ましい。加えて、コンパイラ46は、バンドル52をプログラムの順に(すなわち、命令が実行される順に)処理システム20に順次送るよう設計される。さらにコンパイラ46は、アサートされたストップ・ビット52によって区切られた複数のバンドル52における命令と命令の間に、いかなるリードアフターライトのデータ・ハザードおよびライトアフターライト・データ・ハザードも存在しないことを確実にするよう設計されるのが好ましい。従って、処理システム20は、デアサートされたストップ・ビット57を持つ一連の命令バンドル52を受け取った場合には、該一連の命令バンドルにおける命令のいずれもが、該一連の命令バンドルにおける他のいかなる命令にも依存しないこと、または、該一連の命令バンドルにおける命令のいずれもが、該一連の命令バンドルの他の命令と同じレジスタにデータを書き込まないこと、に気づく。
【0030】
例えば、図3を参照すると、図3によって示される順序で処理システム20に順次送られるバンドル52a〜52gというストリングが示されている。図3において、"D"を有するそれぞれのバンドル52a、52c、52dおよび52eは、デアサートされたストップ・ビットを持ち、"A"を有するそれぞれのバンドル52b、52fおよび52gは、アサートされたストップ・ビットを持つ。ストップ・ビット57を分析することにより、コンパイラ46によればバンドル52f内の命令とバンドル52g内の命令との間にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードが存在する可能性がある、ということを判断することができる。しかしながら、バンドル52c、52dおよび52eはデアサートされたストップ・ビット57を持つので、コンパイラ46によれば、バンドル52c、52d、52eおよび52fのいずれの命令の間においてもリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードが存在しない、ということを判断することができる。言い換えると、バンドル52c、52d、52eおよび52fは1つの命令グループを定義する。さらに、バンドル52bはアサートされたストップ・ビット57を持つので、バンドル52aおよび/または52bは、バンドル52c、52d、52eおよび52fによって定義される命令グループ内の命令の1つとリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを持つ命令を含む可能性がある。
【0031】
本発明の原理から逸脱することなく、処理システム20に命令バンドル52を送る他の方法を使用することができる、ということに留意すべきである。処理システム20にバンドル52を送り、かつ命令グループの存在を示す方法ならば、どのような方法も本発明を実現するのに適している。
【0032】
図4に示されているように、処理システム20は、処理システム20に送られた命令バンドル52を受け取るよう設計される命令分散ユニット(IDU)72を含む。IDU72は、IDU72によって受け取られた命令バンドル52の命令を使用して発行グループを定義して、1つの発行グループの命令をパイプライン75に送るよう構成されており、発行グループのそれぞれの命令が、パイプライン75のうちのただ1つによってのみ受け取られるようにする。パイプライン75は、受け取った命令を更に処理および実行するよう設計される。並列インオーダープロセッサの従来のパイプラインと同様に、パイプライン75は、受け取った命令を複数の段階で処理するのが好ましい。
【0033】
図5は、パイプライン75についての典型的な一組の段階を示す。すなわち、パイプライン75のそれぞれは、レジスタ段階77、実行段階79、例外検出段階81および最後に書込み段階83において、命令を受け取って該命令を順次処理する。これらの段階についての詳細は上記の従来技術の項に記述したが、命令を処理および実行するために、他の段階および/またはいくつかの段階の他の組み合わせを使用することができる、ということは注意すべきであろう。
【0034】
発行グループを定義する際、IDU72は、それぞれの命令が、その命令と互換性を持つパイプライン75にのみ送られるということを保証するよう設計されるのが好ましい。すなわち、パイプライン75の中には、所定の種類の命令だけを取り扱うように設計されている場合がある。例えば、パイプライン75の1つまたは複数を、メモリ演算命令、整数演算命令、浮動小数点命令または他の既知の種類の命令だけを取り扱うよう構成することができる。従って、IDU72は、受け取った命令を分析して、適切な種類の命令がそれぞれのパイプライン75に送られるように発行グループを定義するよう設計される。好ましい実施形態において、IDU72は、それぞれの命令バンドル52のヘッダ55を分析して、どの命令がどのパイプライン75と互換性があるかを判断することができる。
【0035】
IDU72はまた、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを規定する2つの命令が、同じ発行グループに置かれない、ということを確実にするよう設計される。従って、クロック31によって生成されるクロック信号のアクティブ・エッジ上で処理の第1の段階(すなわち、好ましい実施形態においてはレジスタ段階)に入るそれぞれの命令は、同じクロックエッジ上で第1の段階に入る他の命令のいずれに対してもデータ依存性を持ってはならない。更に、クロック信号のエッジ上で処理の第1の段階に入るそれぞれの命令は、同じクロックエッジ上で第1の段階に入る他のどの命令とも同じレジスタにデータを書き込んではならない。
【0036】
上述のように、命令バンドル52のストップ・ビット57は、リードアフターライトのデータ依存性またはライトアフターライトの・データ・ハザードが、連続する命令バンドル52の命令と命令の間に存在するかどうかを示すので、IDU72は、ストップ・ビット57を利用して、発行グループを定義するプロセスを単純化するのが好ましい。すなわち、IDU72は、命令グループの中の命令と命令の間のリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを検査することなく、1つの命令グループを定義する一連のバンドル52における命令のうち任意の命令を、同じ発行グループに含めることができる。
【0037】
IDU72はさらに、古い命令よりも先により若い命令がパイプライン75の処理を完了しないことを保証するよう設計される。この点に関して、周知のことではあるが、命令の処理は、元のプログラム41によって定義されたものと同じ順序で(すなわち、"プログラム順序"で)完了されなければならない。このプログラム順序は、命令が処理システム20に送られる順番である。
【0038】
それぞれの命令の新旧は、"プログラム順序"におけるその位置に基づく。例えば、プログラム41において実行されるべき第1の命令(すなわち、処理システム20によって受け取られるプログラムの第1の命令)は最も古い命令であり、そのプログラムの他のすべての命令はこの命令より若い。第1の命令の後に実行されるべき次の命令(すなわち、第1の命令の後に処理システム20によって受け取られるプログラムの次の命令)は、第1の命令より若いが、プログラム41の残りの命令より古い。さらに、実行されるべき最後の命令は、最も若い命令である。たとえスーパースカラー・プロセッサが一度に複数の命令を処理するとしても、それらの命令は、非スーパースカラー・プロセッサがプログラム41を1ステップずつ実行して一度に一つずつ命令を処理している場合と同じ順序で処理を完了しなければならない(すなわち、この例では書き込み段階83を完了しなければならない)。より若い命令がより古い命令よりも先に処理を完了しない、ということを確実にするため、IDU72は、より古い命令を、より若い命令を含む発行グループの後にパイプライン75に送られる発行グループには割り当てないのが好ましい。
【0039】
IDU72は、発行グループが定義されると、インオーダー方式でそれぞれの発行グループをパイプライン75に順次送るよう設計される。従って、発行グループ内のそれぞれの命令は、クロック信号の同じアクティブ・エッジ上で、そのそれぞれのパイプライン75に送られる。理想的には、それぞれの発行グループ内のそれぞれの命令は、クロック信号のアクティブ・エッジとアクティブ・エッジとの間のそのそれぞれの段階で完全に処理され、発行グループ内のそれぞれの命令が同じクロックエッジ上で次の段階に進むようにする。従って、ストールが無い場合、レジスタ段階77における発行グループの命令は、実行段階79および例外検出段階81における発行グループの命令が例外検出段階81および書込み段階83にそれぞれ入るのと同じクロックエッジ上で、実行段階79に入る。さらに、レジスタ段階77、実行段階79および例外検出段階81における発行グループの命令が次のそれぞれの段階に進むとき、新しい発行グループの命令がレジスタ段階77に入る。結果として、発行グループの処理は、ある発行グループからのいかなる命令も、他の発行グループ内の命令と同じ段階に入ることがないよう制御される。
【0040】
図4に示されているように、処理システム20は、パイプライン75に接続された制御機構85を備えるのが好ましい。単純化のため、図4の制御機構85は、パイプライン75のうちの1つにだけに接続しているように示されているが、好ましい実施形態においては、制御機構85は、パイプライン75のそれぞれに同じように接続される。
【0041】
制御機構85は、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードによるエラーを防止するため、パイプライン75によって処理されるデータを分析して必要に応じて命令をストールするよう設計される。すなわち制御機構85は、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードが、異なる発行グループの命令と命令の間に存在するかどうかを判断するよう構成される。その後、制御機構85は、上記ハザードのうちの1つに起因するエラーを引き起こす可能性を持つ命令または該命令を含む発行グループを、少なくともエラーを起こす可能性がなくなるまで、ストールさせるよう構成される。係属中の米国特許出願"Superscalar Processing System and Method for Efficiently Preventing Errors Caused by Write-After-Write Data Hazards"」(docket no. 10971195)、および米国特許出願"Superscalar Processing System and Method for Efficiently Performing In-Order Processing of Instructions"(docket no. 0971338)は、両方ともこの発明の発明者によって出願されたものであり、ここで参照により取り入れる。これらの出願は、パイプライン75によって処理されている命令をストールさせるシステムおよび方法を開示している。
【0042】
しかしながら、従来の制御機構は、一般に、ハザードを発生させる命令が同じ発行グループに置かれている場合、リードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードによるエラーを防止するようには設計されていない。更に、上述の従来技術の項で記述したように、コンパイラ46がリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードを規定する2つの命令を間違って同じ命令グループに置いた場合、IDU72は、該2つの命令を間違って該同じ発行グループに割り当てる可能性がある。従って、コンパイラ46がリードアフターライトのデータ依存性またはライトアフターライトのデータ・ハザードを規定する2つの命令を同じ命令グループ内に間違って含めてしまった場合を知ることが望ましい。この情報は、この2つの命令が同じ発行グループに割り当てられた場合にエラーを検出するのに役立つものであり、また、たとえこの2つの命令が現在同じ発行グループに含まれていないとしても将来発生するかもしれない潜在的なエラーを検出するのにも役立つ。
【0043】
この点に関して、IDU72はこの2つの命令を異なる発行グループに割り当てることができ、制御機構85は、該2つの命令のうちの1つをストールさせることによっていかなるエラーをも防止することができる。しかしながら、この2つの命令が、プログラム41の将来の実行においても異なる発行グループに割り当てられるという保証はない。従って、たとえ2つの命令がIDU72によって同じ発行グループに現在は割り当てられていないとしても、該2つの命令が同じ命令グループに含められる場合を知ることが望ましい。従って、パイプライン75によって処理されているデータを分析する際、制御機構85は、命令グループのいずれかの命令と同じ命令グループの他のいずれかの命令との間にリードアフターライトのデータ・ハザードまたはライトアフターライトのデータ・ハザードが存在するかどうかを判断するのが好ましい。
【0044】
好ましい実施形態において、IDU72は、命令グループの少なくとも1つの命令にデータを挿入し(すなわち、少なくとも1つの命令にタグを付け)、制御機構85が、プログラム順序で命令を分析する時にどの命令が同じ命令グループに関連づけられているかを判断することができるようにする。例えば、命令がプログラム順序で分析されているときに、命令グループの最初または最後の命令にタグを付けて、命令グループの開始または終了をそれぞれ示すことができる。しかし、本発明の原理から逸脱することなく、どの命令がどの命令グループに関連しているかを制御機構85に示す他の方法を使用することもできる。
【0045】
さらに、図4に示されているように、制御機構85はメモリ91を備える。他の種類のメモリを使用することもできるが、メモリ91は、連想記憶メモリであるのが好ましい。"連想記憶メモリ"は、メモリに記憶されるデータの内容に基づいてアクセスされるメモリである。図4に示されるように、この好ましい実施形態ではメモリ91は制御機構85内に置かれているけれども、必要に応じて、メモリ91をコンピュータ・システム15の外部または内部の他の位置に置くことができる。
【0046】
従来のインオーダー処理システムと同様に、制御機構85は、発行グループが段階77、79、81または83のうちの1つによって処理されている間に、該発行グループのそれぞれの命令を分析して、これらの命令のいずれかをストールすべきかどうかを判断するよう設計される。制御機構85は、書込み命令を分析する時、該書込み命令によって書き込まれるレジスタを識別するレジスタ識別子が、メモリ91のエントリに記憶されているかどうかを判断するよう設計される。書込み命令は、処理システム20に関連するレジスタにデータを記憶する任意の命令であり、レジスタを識別するレジスタ識別子は、レジスタの実アドレスであってもよい。または、レジスタを識別するのに他の種類の値を使用することもできる。書込み命令によって書き込まれるレジスタを識別するレジスタ識別子がメモリ91にまだ記憶されていなければ、制御機構85は、メモリ91のエントリにこのレジスタ識別子を記憶するよう設計される。
【0047】
さらに、制御機構85は、読み出し命令を分析する時、読み出し命令によって読み出されるレジスタを識別するレジスタ識別子が、メモリ91のエントリに記憶されているかどうかを判断するよう設計される。読み出し命令は、処理システム20に関連するレジスタからデータを読み出す任意の命令である。
【0048】
さらに、制御機構85は、命令グループの命令のそれぞれを分析したと判断した時、メモリ91のデータを無効にするよう設計される。当該技術分野で周知のように、メモリ91のエントリを消去することによって、またはエントリのデータが無効で使用すべきでないことを示すことによって、メモリ91におけるデータを無効にすることができる。
【0049】
制御機構85は、プログラム順序で命令を分析するので、1つの命令グループのすべての命令を、他の命令グループの命令のいずれかを分析する前に完全に分析する。制御機構85は、1つの命令グループの最後の命令を分析した(必要ならば、最後の命令に関連するレジスタ識別子を記憶した)後であり、かつ次の命令グループの最初の命令に関連するレジスタ識別子についてメモリ91を検索する前に、メモリ91のデータを無効にする。この機能を達成する種々の方法を使用することができるけれども、制御機構85は、分析されている命令が命令グループの最初の命令または最後の命令であるという判断に応答して、メモリ91のデータを無効にすることができる。制御機構85は、上述のようにIDU72によって命令グループの最初または最後の命令に挿入されるデータを分析することによって、この判断を行うことができる。
【0050】
制御機構85は、プログラム順序(すなわち、命令がIDU72によって受け取られる順序)で命令を分析し、かつある命令グループから他の命令グループへの遷移の最中にメモリ91のデータを無効にするので、メモリ91の有効なデータは、同じ命令グループに含まれる書込み命令のレジスタ識別子のみを含むこととなる。従って、制御機構85は、該制御機構85によって分析されている読み出しまたは書込み命令に関連するレジスタ識別子がメモリ91に記憶されているとが判断すれば、該分析されている命令が、同じ命令グループにおける前の命令に対して(その命令が読み出し命令であれば)リードアフターライトのデータ・ハザードまたは(その命令が書込み命令であれば)ライトアフターライトのデータ・ハザードを規定する、ということに気づく。
【0051】
分析されている読み出しまたは書込み命令に関連するレジスタ識別子がメモリ91に記憶されているという判断に応答して、制御機構85は、システム・マネージャ42に警告信号を送るよう設計されるのが好ましく、該警告信号に応答して、プログラム41の実行が終了させられる。それに加えて、警告信号をディスプレイ27および/またはプリンタ29に送ることにより違反が発生したということをユーザに示す警告メッセージを生成することもできる。警告信号および警告メッセージは、制御機構85が違反を発見した時どの命令が分析されていたかをユーザが判断することができるよう十分な情報を含むのが好ましい。
【0052】
留意されるべき点であるが、好ましい実施形態においては、(読み出し命令ではなく)書込み命令のレジスタ識別子だけがメモリ91に記憶される。なぜならば、読み出し命令がパイプラインに入力されると、大部分の読み出し命令は、レジスタからデータを比較的迅速に読み出すからである。一方、大部分の書込み命令により、データは、さらにパイプライン75の処理を進んだ後にレジスタに書き込まれる。例えば、読み出し命令によりデータは典型的にはレジスタ段階77においてその関連するレジスタから読み出され、書込み命令によりデータは典型的には書込み段階83においてその関連するレジスタに書き込まれる。従って、若い書込み命令をもつ同じ命令グループの読み出し命令は、その書込み命令がデータをレジスタに書き込む前にそのレジスタからデータを読み出す可能性が高い。従って、読み出し命令が書込み命令より古い時、たとえ読み出し命令および書込み命令が同じ命令グループにあるとしても、エラーが発生する可能性は少ない。結果として、若い書込み命令と同じレジスタを利用する古い読み出し命令が同じ命令グループにある時、ユーザが警告されることはそう重要なことではない。言い換えると、ライトアフターリードのデータ・ハザードに関して警告信号を生成することは、そう重要なことではない。
【0053】
第2の実施形態
本発明の第2の実施形態において、同じレジスタを利用する2つの読み出し命令の検出に応答して警告信号が生成されないことを保証するステップが取られることを前提として、制御機構85は、ライトアフターリードのデータ・ハザードを検出するよう構成される。この点に関して、同じレジスタを利用する2つの読み出し命令が、エラーを引き起こすことなく同じ命令グループ内に存在することがあるが、同じ命令グループ内の2つの読み出し命令(例えばリードアフターリード条件)の検出に応答した警告信号の送信は、必要でもないし所望もされない。
【0054】
リードアフターライトおよびライトアフターライトのデータ・ハザードに加えてライトアフターリードのデータ・ハザードを検出する機能を達成するため、第2の実施形態の制御機構85は、書込み命令と同様に読み出し命令に応答してレジスタ識別子をメモリ91に記憶するよう構成される点を除き、上記好ましい実施形態と同様に動作する。従って、分析されている命令(以下、「現命令」という)のレジスタ識別子がメモリ91に記憶されていなければ、現命令がたとえ読み出し命令であるとしても、制御機構85は、メモリ91のエントリにレジスタ識別子を記憶するよう構成される。メモリ・エントリは、レジスタ識別子に関連するレジスタを使用する読み出し命令および書込み命令が検出されたかどうかを示す追加の情報を含むのが好ましい。
【0055】
例えば、現命令が、メモリ91に記憶されていないレジスタ識別子を持つ書込み命令であると仮定する。この状況では、制御機構85は、メモリ91のエントリに現命令のレジスタ識別子の値を記憶するよう構成される。更に、メモリ91は、記憶されたレジスタ識別子に関連するレジスタを使用する書込み命令が検出されたことを示す付加的なデータをエントリに記憶するよう構成される。
【0056】
次に、制御機構85は、同じレジスタを利用する同じ命令グループの読み出し命令(次の命令)を分析すると仮定する。制御機構85は、レジスタ識別子がメモリ91のエントリにすでに記憶されているので、メモリ91に当該次の命令のレジスタ識別子を記憶しない。しかしながら、制御機構85は、エントリに記憶されているレジスタ識別子に関連づけられたレジスタを利用する読み出し命令が今検出されたことを示すため、前述のエントリに付加的なデータを記憶するよう構成される。従って制御機構85は、任意の時にメモリ91のデータを分析して、現命令グループの中に特定のレジスタを利用する書込み命令または読み出し命令が検出されたかどうかを判断することができる。
【0057】
好ましい実施形態と同様に、制御機構85は、現命令のレジスタ識別子がメモリ91に以前に記憶された識別子であると判断したならば、警告信号を送るよう構成される。しかしながら、リードアフターリード条件に応答した警告信号の送信は望ましくないので、制御機構85は、警告信号を送る前に、リードアフターリード条件だけが存在するかどうかを判断するよう構成される。従って、現命令が読み出し命令であり、前の読み出し命令だけが現命令のレジスタを利用したことをメモリ91が示す場合には(すなわち、現命令のレジスタを利用する書込み命令が検出されてない場合)、制御機構85は、警告信号を送ることを抑制するよう設計される。従って、リードアフターライト、ライトアフターライトおよびライトアフターリードのデータ・ハザードに応答して警告信号が制御機構85によって送られるが、リードアフターリード条件に応答しては警告信号は送られない。
【0058】
メモリ91の無効化が、本発明のいずれの実施形態を実現する上で必ずしも必要でない、という点に留意すべきである。例えば上述のように、命令グループの命令に関連づけられたレジスタ識別子を記憶する際、どの命令グループが該関連づけられた命令を含むかを示すデータをレジスタ識別子に含めるよう制御機構85を構成することもできる。従ってこの場合、同じ命令グループにあって同じレジスタを利用する命令だけが、同じレジスタ識別子を持つことができる。この結果、制御機構85は、分析されている命令のレジスタ識別子についてメモリ91を検索する場合、たとえ制御機構85が上述のようにメモリ91のデータを無効にしなくても、レジスタ識別子がメモリ91にすでに記憶されていると判断したときに、制御機構85は、前述のデータ・ハザードのうちの1つを認識することができる。
【0059】
更に留意されるべき点であるが、本発明はインオーダー処理を背景として記述されている。しかし、本発明の原理を、アウトオブオーダー処理に適用することができる。すなわち、アウトオブオーダー・プロセッサも、上述したような命令グループを介して実行されるべき命令を受け取ることができる。従って、アウトオブオーダー・プロセッサが、制御機構85と同様の機構であって、それぞれの書込み命令および必要ならばそれぞれの読み出し命令のレジスタ識別子を記憶および分析する機構を含む限り、本発明の原理をアウトオブオーダー・プロセッサについても実現することができる。
【0060】
更に、制御機構85が可能性のあるデータ・ハザードを検出することができるということを確実にするため、メモリ91におけるエントリ数を、メモリ91に記憶される可能性のあるレジスタ識別子の最大数と同じまたはそれより多くすべきである。しかし、これは、メモリ91のエントリ数を不当に大きくすることになるかもしれない。大部分のアプリケーションにおいて、エントリ数は、命令グループに含まれる可能性のある命令の予想最大数に等しいかまたはそれ以上であるのが望ましい。これは、任意の1つの命令グループについて記憶される可能性のある異なるレジスタ識別子の予想最大数に対応する。メモリ91のエントリ数が、分析されている命令グループの中の命令数に等しいかまたはそれ以上である限り、すべての可能なリードアフターライト、ライトアフターライトおよびライトアフターリードのデータ依存性ハザードを検出することが可能となる。しかし、命令グループの中の命令数が命令の予想最大数を超え、よってメモリ91のエントリ数を超えたならば、命令グループの命令に関連する異なるレジスタ識別子のそれぞれを同時にメモリ91に記憶することが不可能となるので、前述のハザードの一部を見過ごしてしまう可能性がある。
【0061】
メモリ91がいっぱいになると(すなわち、メモリのそれぞれのエントリが有効データを保有する場合)、制御機構85は、レジスタ識別子の記憶を続行するのが必要なとき、データを上書きしてしまうことがある。制御機構85は、メモリ91のデータを上書きする際になんらかの置き換えアルゴリズムを利用することができる。しかし、有効なデータが上書きされると、データ・ハザードが検知されないまま処理が進む可能性があり、従って、有効データの上書きは回避されるべきである。
【0062】
動作
処理システム20および関連する方法の好ましい使用および動作を以下に記述する。発行グループがパイプライン75を順次進むにつれて、制御機構85は、段階77、79、81および83を通過する命令を分析する。段階77、79、81または83のうちの1つにおいて命令を分析する時、制御機構85は、図6に示される機能を実行する。以下の記述において、例示の目的から、制御機構85が実行段階79において命令を分析する際に図6の機能を実施すると仮定する。しかし当然のことながら、制御機構85がその他の段階77、81または83のいずれかにおいて命令を分析する際に図6の機能を実施することは可能である。
【0063】
図6のブロック108に示されるように、最初に制御機構85は、段階79の最初の命令を分析し、次にブロック112において、その命令が新しい命令グループに関連するかどうかを判断する。命令が新しい命令グループに関連するならば、制御機構85は、ブロック114において、メモリ91のデータを無効にする。ブロック112を実行した後、または該当する場合にはブロック114を実行した後、ブロック117において、制御機構85は、当該命令に関連するレジスタ識別子がメモリ91にすでに記憶されているかどうかを判断する。記憶されていれば、同じ命令グループに関連する別の命令が、分析されている現在の命令(以下、「現命令」という)によって使用(すなわち、そこに書き込みまたはそこから読み出し)されるものと同じレジスタにデータを書き込むこととなる。従って、制御機構85は、ブロック119において、(現命令が読み出し命令であれば)リードアフターライトのデータ・ハザードまたは(現命令が書込み命令であれば)ライトアフターライトのデータ・ハザードを示す警告信号を送る。
【0064】
現命令に関連するレジスタ識別子がメモリ91にすでに記憶されていなければ、制御機構85は、ブロック123において、現命令が書込み命令であるかどうかを判断する。書込み命令であれば、制御機構85は、ブロック125において、現命令に関連するレジスタ識別子をメモリ91のエントリに記憶する。ブロック119またはブロック123を実行した後、または該当する場合にはブロック125を実行した後、制御機構85は、ブロック128において、まだ分析されていない命令が段階79にあるかどうかを判断する。命令が残っていれば、制御機構85は、ブロック131において次の命令を分析し、該次の命令についてブロック112から開始する前述のプロセスを繰り返す。段階79における命令のすべてが分析されたならば、制御機構85は、ブロック135によって示されるように、上記のプロセスを繰り返す前に次の発行グループが段階79に到来するのを待つ。
【0065】
前述のように、必要に応じて制御機構85を第2の実施形態で構成し、ライトアフターリードのデータ・ハザードを検出することができる。図7は、リードアフターライトおよびライトアフターライトのデータ・ハザードと同様にライトアフターリードのデータ・ハザードを検出する際の制御機構85のアーキテクチャおよび機能を示している。図6を図7と比較することによってわかるように、図7によって示される機能は、制御機構85がブロック117および128の間で若干異なるステップを実行する点を除き、図6によって示される機能と同様である。
【0066】
すなわち、ブロック117において、制御機構85は、現命令のレジスタ識別子がメモリ91に記憶されていると判断したならば、ブロック141によって示されるように、リードアフターリード条件だけが存在するかどうかを判断する。現命令が読み出し命令であり、かつ現命令と同じレジスタを使用する他のいかなる書込み命令も同じ命令グループで検出されなかったならば、リードアフターリード条件のみが存在する。リードアフターリード条件のみが存在するならば、制御機構85は、ブロック119を迂回する(すなわち、警告信号の送信を抑制する)。しかし、現命令が書込み命令であるならば、または、現命令と同じレジスタを使用する前の書込み命令が検出されているならば、制御機構85はブロック119を実行する(すなわち、警告信号を送る)。
【0067】
さらに、ブロック123において、現命令が書込み命令であれば、制御機構85はブロック145に分岐する。制御機構85は、ブロック145において、現命令に関連するレジスタを使用する書込み命令が検出されているということを、メモリ91が確実に示すようにする。例えば、現命令のレジスタ識別子がメモリ91にまだ記憶されていないならば、制御機構85は、現命令のレジスタ識別子をメモリ91のエントリに記憶し、該レジスタ識別子に関連するレジスタにデータを書き込む書込み命令が検出されたということを示すデータを、該エントリに記憶する。そうでなければ、制御機構85は、現命令のレジスタ識別子を含むエントリの位置を特定し、該レジスタ識別子に関連するレジスタを前の書込み命令が使用したということを該エントリが示しているかどうか検証する。もし示しているならば、制御機構85は、ブロック128に進む前にそれ以上のアクションをとる必要はない。しかし、現命令と同じレジスタを使用する前の書込み命令がすでに検出されたことを上記エントリが示していなければ、制御機構85は、ブロック145において、それを示すデータを該エントリに記憶する。
【0068】
現命令が読み出し命令である時、制御機構85は、ブロック123において、ブロック145の代わりにブロック148に分岐する。制御機構85は、ブロック148において、現命令と同じレジスタを使用する読み出し命令が検出された、ということをメモリ91が確実に示すようにする。例えば、現命令のレジスタ識別子がメモリ91にまだ記憶されていないとすれば、制御機構85は、現命令のレジスタ識別子をメモリ91のエントリに記憶し、該レジスタ識別子に関連するレジスタからデータを読み出す読み出し命令が検出されたということを示すデータをエントリに記憶する。そうでなければ、制御機構85は、現命令のレジスタ識別子を含むエントリの位置を特定し、該レジスタ識別子に関連するレジスタを前の読み出し命令が使用したことをそのエントリが示しているかどうかを検証する。示しているならば、制御機構85は、ブロック128に進む前にそれ以上のアクションをとる必要はない。しかし、現命令と同じレジスタを使用する前の読み出し命令がすでに検出されたことを上記エントリが示していないならば、制御機構85は、ブロック145において、それを示すデータを該エントリに記憶する。
【0069】
留意されるべき点であるが、制御機構85は、図6および図7によって示されている機能に加えて他の機能を実行することもできる。例えば、ブロック135において次の発行グループを待つ間、制御機構85は、他の段階77、81および/または83の他の命令を分析して、いずれかの命令をストールする必要があるかどうかを判断することができる。従って、当業者に明らかなように、制御機構85の機能は、図6および図7によって示される機能に限定されるべきではない。
【0070】
本発明の上記の実施形態、特に"好ましい"実施形態は、実施形態の単なる可能な例に過ぎず、本発明の原理の明確な理解のために提示されているに過ぎない点は特に強調されるべきであろう。本発明の原理および理念を逸脱することなく上記実施形態に多くの変更および修正を加えることが可能である。
【0071】
本発明には、例として次のような実施様態が含まれる。
(1)コンピュータ・プログラム(41)の命令を処理し、該コンピュータ・プログラム内のハザードを検出するシステム(20)であって、
メモリ(91)と、
複数のパイプライン(75)と、
複数の命令を含む命令グループを受け取り、該複数命令を前記複数のパイプラインに送るよう構成された命令分散ユニット(IDU)と、
前記複数の命令のうち少なくとも1つの命令に関連する第1のレジスタ識別子を前記メモリに記憶し、前記複数の命令のうち他の命令に関連する第2のレジスタ識別子が前記メモリに記憶されているかどうかを判断し、該第2のレジスタ識別子が前記メモリに記憶されているという判断に応答して警告信号を送るよう構成された制御機構(85)と、
を備えるコンピュータ・プログラム内のハザードを検出するシステム。
【0072】
(2)前記メモリが連想記憶メモリである、上記(1)に記載のコンピュータ・プログラム内のハザードを検出するシステム。
【0073】
(3)前記制御機構が、前記メモリのエントリに前記第1のレジスタ識別子を記憶し、該第1のレジスタ識別子に関連する書込み命令を検出したかどうかを前記エントリを介して示すよう構成された、上記(1)に記載のコンピュータ・プログラム内のハザードを検出するシステム。
【0074】
(4)前記命令グループにおける命令のそれぞれが前記制御機構によって分析されたという判断に応答して、該制御機構が、前記メモリにおけるデータを無効にするよう構成された、上記(1)に記載のコンピュータ・プログラム内のハザードを検出するシステム。
【0075】
(5)コンピュータ・プログラム(41)の命令を処理し、該コンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法であって、
複数の命令を含む命令グループを定義するステップと、
前記命令に関連するレジスタ識別子をメモリ(91)に記憶するステップと、
前記命令のうちの1つに関連する前記レジスタ識別子のうちの1つが前記メモリに記憶されているかどうかを判断するステップと、
前記1つの命令に関連する前記1つのレジスタ識別子が前記メモリに記憶されているという前記判断ステップの判断に応答して、警告信号を送るステップと、
を含むコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0076】
(6)前記記憶するステップが、前記メモリのそれぞれのエントリに前記レジスタ識別子のそれぞれを記憶するステップを含み、前記方法が、
前記エントリのうちの1つを分析するステップと、
前記命令のうちの1つが、前記1つのエントリに記憶されているレジスタ識別子に関連するレジスタにデータを書き込む命令であるかどうかを、前記分析するステップに基づいて判断するステップと、を含む上記(5)に記載のコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0077】
(7)前記メモリが連想記憶メモリである上記(5)に記載のコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0078】
(8)前記命令グループにおける前記命令のそれぞれを、プログラム順序で分析するステップと、
前記命令のそれぞれが、前記分析するステップにおいて分析されたという判断に応答して前記メモリを無効にするステップと、
を含む上記(5)に記載のコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0079】
(9)前記記憶するステップが、前記命令グループの中のそれぞれの書込み命令にそれぞれ関連するレジスタ識別子を、前記メモリに記憶するステップを含む上記(5)に記載のコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0080】
(10)前記他の命令を分析して、該他の命令が新しい命令グループに関連するかどうかを判断するステップと、
前記他の命令が新しい命令グループに関連するという前記判断ステップの判断に応答して、前記メモリを無効にするステップと、
を含む上記(5)に記載のコンピュータ・プログラム内のハザードを検出するスーパースカラー処理方法。
【0081】
【発明の効果】
ある1つの命令グループが、同じ命令グループの他の命令とデータ・ハザードを規定する命令を含んでいるかどうかを判断することができる。
【図面の簡単な説明】
【図1】本発明に従う処理システムを使用するコンピュータ・システムを示すブロック図。
【図2】図1の処理システムに送られる命令の典型的なバンドルを示すブロック図。
【図3】少なくとも1つの命令グループを定義する命令バンドルの典型的なセットを示すブロック図。
【図4】図1の処理システムの詳細を示すブロック図。
【図5】図1の処理システムの処理段階を示すフローチャート。
【図6】図4の制御機構の好ましい実施形態のアーキテクチャおよび機能を示すフローチャート。
【図7】図4の制御機構によって使用されることのできる付加的なアーキテクチャおよび機能を示すフローチャート。
【符号の説明】
20 処理システム
41 コンピュータ・プログラム
72 IDU(命令分散ユニット)
75 パイプライン
85 制御機構
91 メモリ
Claims (3)
- コンピュータ・プログラムの命令を処理し、該コンピュータ・プログラム内のデータ・ハザードを検出するためのコンピュータ・システムであって、
メモリと、
複数のパイプラインと、
複数の命令と、該複数の命令を異なる命令グループにグループ化する命令グループデータであって、コンパイラにより規定される命令グループデータと、を受け取り、該命令グループデータに基づいて発行グループを規定し、該発行グループを前記複数のパイプラインに送るよう構成された命令分散ユニット(IDU)と、
前記命令グループのうちの1つにおける命令に関連づけられたレジスタ識別子を、前記メモリに格納するよう構成された御機機構であって、該制御機構により分析されている命令に関連づけられたレジスタ識別子が該メモリに格納されているとの判断により、間違ったデータ・ハザードを検出し、該間違ったデータ・ハザードの検出に応答して、警告信号を送出するよう構成された制御機構と、
を備え、
前記警告信号は、前記コンパイラが、前記命令グループの1つにおける命令間にデータ・ハザードが間違って存在するように、前記複数の命令を間違ってグループ化したことを示す、
コンピュータ・システム。 - コンピュータ・プログラムの命令を処理し、該コンピュータ・プログラム内のデータ・ハザードを検出するためのスーパースカラー処理システムであって、
コンパイラにより規定される命令グループデータに基づいて、複数の命令を含む命令グループを識別する手段と、
前記複数の命令および前記命令グループデータに基づいて、発行グループを規定する手段と、
前記複数の命令のそれぞれに関連づけられたレジスタ識別子を、メモリに格納する手段と、
前記複数の命令のうちの1つの命令に関連づけられたレジスタ識別子が前記メモリに格納されているかどうかどうかに基づいて、前記命令グループにおける命令間に存在する間違ったデータ・ハザードを検出する手段と、
前記検出する手段による前記間違ったデータ・ハザードの検出に応答して、警告信号を送出する手段であって、該警告信号は、前記コンパイラが、前記命令グループにおける前記命令間でデータ・ハザードが間違って存在するように、前記複数の命令を間違ってグループ化したことを示す、手段と、
を備える、スーパースカラー処理システム。 - コンピュータ・プログラムの命令を処理するためのシステムであって、
メモリと、
複数のパイプラインと、
複数の命令と、該複数の命令を異なる命令グループにグループ化する命令グループデータであって、コンパイラにより規定される命令グループデータと、を受け取り、該命令グループデータに基づいて発行グループを規定するよう構成された命令分散ユニット(IDU)と、
前記命令グループのうちの1つにおける命令に関連づけられたレジスタ識別子を、前記メモリに格納するよう構成された制御機構であって、該1つの命令グループに関連づけられた該複数の命令のうちの1つの命令のレジスタ識別子と、前記格納されているレジスタ識別子のうちの少なくとも1つと、の間で、少なくとも1つの比較を実行し、該比較に基づいて、該1つの命令グループにおける命令間に間違って存在するデータ・ハザードを生じさせたコンパイルのエラーを検出するよう構成された制御機構と、
を備える、システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/418286 | 1999-10-14 | ||
US09/418,286 US6651164B1 (en) | 1999-10-14 | 1999-10-14 | System and method for detecting an erroneous data hazard between instructions of an instruction group and resulting from a compiler grouping error |
Publications (3)
Publication Number | Publication Date |
---|---|
JP2001134442A JP2001134442A (ja) | 2001-05-18 |
JP2001134442A5 JP2001134442A5 (ja) | 2005-06-02 |
JP3759398B2 true JP3759398B2 (ja) | 2006-03-22 |
Family
ID=23657475
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000310362A Expired - Fee Related JP3759398B2 (ja) | 1999-10-14 | 2000-10-11 | コンピュータ・プログラムのハザードを検出するシステム |
Country Status (2)
Country | Link |
---|---|
US (1) | US6651164B1 (ja) |
JP (1) | JP3759398B2 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101412885B1 (ko) * | 2012-03-26 | 2014-06-26 | 서울대학교산학협력단 | 모드 설정 및 구분자를 이용하여 저장 매체에서의 영속화를 제어하는 방법 및 그 스토리지 시스템 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6948162B2 (en) * | 2002-01-09 | 2005-09-20 | Sun Microsystems, Inc. | Enhanced parallelism in trace scheduling by using renaming |
CN101180607B (zh) * | 2005-06-15 | 2011-08-03 | 松下电器产业株式会社 | 处理器 |
US20090055636A1 (en) * | 2007-08-22 | 2009-02-26 | Heisig Stephen J | Method for generating and applying a model to predict hardware performance hazards in a machine instruction sequence |
US8635501B2 (en) * | 2011-07-25 | 2014-01-21 | Microsoft Corporation | Detecting memory hazards in parallel computing |
US9348596B2 (en) | 2013-06-28 | 2016-05-24 | International Business Machines Corporation | Forming instruction groups based on decode time instruction optimization |
US9372695B2 (en) | 2013-06-28 | 2016-06-21 | Globalfoundries Inc. | Optimization of instruction groups across group boundaries |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5148536A (en) * | 1988-07-25 | 1992-09-15 | Digital Equipment Corporation | Pipeline having an integral cache which processes cache misses and loads data in parallel |
EP0652510B1 (en) * | 1993-11-05 | 2000-01-26 | Intergraph Corporation | Software scheduled superscalar computer architecture |
US5958042A (en) * | 1996-06-11 | 1999-09-28 | Sun Microsystems, Inc. | Grouping logic circuit in a pipelined superscalar processor |
US6065105A (en) * | 1997-01-08 | 2000-05-16 | Intel Corporation | Dependency matrix |
US5918033A (en) * | 1997-01-08 | 1999-06-29 | Intel Corporation | Method and apparatus for dynamic location and control of processor resources to increase resolution of data dependency stalls |
US5765017A (en) * | 1997-01-13 | 1998-06-09 | International Business Machines Corporation | Method and system in a data processing system for efficient management of an indication of a status of each of multiple registers |
US6237077B1 (en) * | 1997-10-13 | 2001-05-22 | Idea Corporation | Instruction template for efficient processing clustered branch instructions |
US6260189B1 (en) * | 1998-09-14 | 2001-07-10 | Lucent Technologies Inc. | Compiler-controlled dynamic instruction dispatch in pipelined processors |
US6378063B2 (en) * | 1998-12-23 | 2002-04-23 | Intel Corporation | Method and apparatus for efficiently routing dependent instructions to clustered execution units |
US6219781B1 (en) * | 1998-12-30 | 2001-04-17 | Intel Corporation | Method and apparatus for performing register hazard detection |
-
1999
- 1999-10-14 US US09/418,286 patent/US6651164B1/en not_active Expired - Lifetime
-
2000
- 2000-10-11 JP JP2000310362A patent/JP3759398B2/ja not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101412885B1 (ko) * | 2012-03-26 | 2014-06-26 | 서울대학교산학협력단 | 모드 설정 및 구분자를 이용하여 저장 매체에서의 영속화를 제어하는 방법 및 그 스토리지 시스템 |
Also Published As
Publication number | Publication date |
---|---|
JP2001134442A (ja) | 2001-05-18 |
US6651164B1 (en) | 2003-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3659877B2 (ja) | ライトアフターライトデータハザードにより生じるエラーを効率的に防止するためのスーパースケーラ処理システム及び方法 | |
JP3772899B2 (ja) | コンピュータシステム | |
US7111126B2 (en) | Apparatus and method for loading data values | |
US20070118696A1 (en) | Register tracking for speculative prefetching | |
JP3773769B2 (ja) | 命令のインオーダ処理を効率的に実行するスーパースケーラ処理システム及び方法 | |
US6449713B1 (en) | Implementation of a conditional move instruction in an out-of-order processor | |
JP3776302B2 (ja) | コンピュータ・プログラムのハザードを検出するシステム | |
JP3759398B2 (ja) | コンピュータ・プログラムのハザードを検出するシステム | |
US20070226472A1 (en) | Method and apparatus for sampling instructions on a processor that supports speculative execution | |
JP2008537208A (ja) | 条件付命令を実行しない時のソース・オペランドの停止待機 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20040817 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20040817 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20051209 |
|
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: 20051227 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20051228 |
|
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 |