説明

スーパースカラ・プロセッサにおける命令処理の選択的逐次化の方法およびシステム

【目的】 アプリケーションによって指定された順序で一連のスカラ命令を取り出し、同時に一群のスカラ命令を非逐次的に適宜、複数の実行ユニットにディスパッチすることができる、スーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法およびシステムを提供すること。
【構成】 アプリケーションによって指定された順序で非逐次的に適宜取り出された一群のスカラ命令が、本発明で処理される。本発明では、処理中に逐次化を必要とする条件を検出する。逐次化を必要とする条件の検出に応じて、その一群のスカラ命令のうちの特定のスカラ命令の処理が選択的に制御され、その後は、その一群のスカラ命令の少なくとも一部分が逐次的に処理される。

【発明の詳細な説明】
【0001】
【産業上の利用分野】本発明は、全般的に、改良型データ処理システムに関し、詳しくは、スーパースカラ・プロセッサ・システムにおける命令処理効率を向上させる方法およびシステムに関する。さらに詳細には、本発明は、スーパースカラ・プロセッサ・システムにおいて命令処理を選択的に逐次化する方法およびシステムに関する。
【0002】関連出願本願発明は、米国特許出願第08/001864号に関連しており、この出願は以下の事項を開示している。スーパースカラ・プロセッサ・システムにおいて、複数の命令を、実行し、実行結果を指定された汎用レジスタ内に格納するために、一群の実行ユニットに同時にディスパッチする、単一サイクル命令ディスパッチを可能にするための方法およびシステムを提供する。各命令は一般に、少なくとも1つのソース・オペランドと1つの宛先オペランドを含む。複数の中間記憶バッファが設けられ、利用可能な実行ユニットに命令がディスパッチされるたびに、ディスパッチされた命令中のどの宛先オペランドにも中間記憶バッファが割り当てられ、指定された汎用レジスタまたは指定された代替汎用レジスタを決定し選択する必要がなくなることによって、単一のサイクル内でその命令がディスパッチできるようになる。
【0003】また、米国特許出願第08/001872号にも関連しており、この出願は以下の事項を開示している。複数の中間記憶バッファと、複数の汎用レジスタと、記憶バッファ・インデックスを有するスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法およびシステムを提供する。複数のスカラ命令を、ディスパッチ・バッファから複数の実行ユニットに同時にディスパッチすることができる。複数のスカラ命令はそれぞれ一般に、少なくとも1つのソース・オペランドおよび1つの宛先オペランドを含む。複数の中間記憶バッファのうちの特定の1つが、複数のスカラ命令のうちの選択された1つの命令内の宛先オペランドに割り当てられる。中間記憶バッファのうちの特定の1つと、複数の汎用レジスタのうちの指定された1つの間の関係が、ディスパッチされた命令がディスパッチ機構でアプリケーション・プログラム・シーケンス中の別の命令で置換されるとき、記憶バッファに記憶される。複数のスカラ命令のうちの選択された1つを実行した結果が、その命令が実行されたときに、特定の1つの中間記憶バッファに記憶される。記憶バッファ・インデックスを使用して、記憶バッファが特定の汎用レジスタ用に割り当てられてから実行結果が記憶バッファから汎用レジスタに移されるまでの間にディスパッチされる命令のソース・オペランドとしてどの記憶バッファを使用するかを決定する。
【0004】さらに、米国特許出願第08/001865号にも関連しており、この出願は以下の事項を開示している。実行し、実行結果を指定された汎用レジスタに格納するために複数の命令を一群の実行ユニットに同時にディスパッチするスーパースカラ・プロセッサ・システムにおいて、単一サイクル命令ディスパッチを可能にする方法およびシステムを提供する。各命令は一般に、少なくとも1つのソース・オペランドと1つの宛先オペランドを含む。複数の中間記憶バッファが提供され、利用可能な実行ユニットに命令がディスパッチされるたびに、ディスパッチされた命令内のどの宛先オペランドにも特定の1つの中間記憶バッファが割り当てられ、指定された汎用レジスタまたは指定された代替汎用レジスタを決定して選択する必要がなくなるため、単一サイクル内で命令をディスパッチすることが可能になる。
【0005】さらに、米国特許出願第08/001890号にも関連しており、この出願は以下の事項を開示している。スーパースカラ・プロセッサ・システムにおいて、逐次的に順序付けられた複数の命令を実行し、実行結果を指定された汎用レジスタに格納するために、一群の実行ユニットに適宜、同時にディスパッチする、非逐次命令のディスパッチを可能にする方法およびシステムを提供する。各命令は一般に、少なくとも1つのソース・オペランドおよび1つの宛先オペランドを含む。複数の中間記憶バッファが提供され、利用可能な実行ユニットに命令がディスパッチされるたびに、ディスパッチされた命令内のどの宛先オペランドにも特定の1つの中間記憶バッファが割り当てられ、各命令の実行結果を中間記憶バッファに記憶することができる。各命令の状況を示す指示が完了バッファ内に維持され、その後は、それを使用して、中間記憶バッファ内の結果が、アプリケーションによって指定された順序と整合する順序で、選択された汎用レジスタに選択的に転送される。したがって、選択された命令の完了を妨げる割込みの発生を、完了バッファ内で正確に識別することができる。
【0006】さらに、米国特許出願第08/001866号にも関連しており、この出願は以下の事項を開示している。アプリケーションによって指定された順序で一連のスカラ命令を取り出し、命令ディスパッチ機構を使用して、一群のスカラ命令を複数の実行ユニットに同時にディスパッチすることのできるスーパースカラ・データ・プロセッサ・システム内で一群のスカラ命令を追跡する方法を提供する。スーパースカラ・プロセッサ・システム内で現在実行中の各スカラ命令を一意的に識別するのに十分な大きさの一群の一意的識別番号を選択する。次に、各スカラ命令がプロセッサの命令ディスパッチ機構にロードされるときに、スーパースカラ・プロセッサ・システム内で処理されている各スカラ命令に一意的識別番号の1つを関連付ける。特定のスカラ命令の実行完了後、その特定のスカラ命令とそれに関連する一意的識別番号の間の関連付けが終了し、そのため一群の一意的識別番号を再使用して、前記スーパースカラ・データ・プロセッサ・システム内で以後のスカラ命令の実行を追跡できるようになる。
【0007】
【従来の技術】現代の最新データ処理システムの設計者は、絶えずそのようなシステムの性能面の向上に努めている。データ処理システム効率を向上させる1つの技法は、サイクル・タイムを短くし、1命令当たりサイクル(CPI)率を下げることである。このような技法を拡張データ処理システムに巧みに応用した例に、インターナショナル・ビジネス・マシーンズ・コーポレーション(IBM)のRISCシステム/6000(RS/6000)コンピュータがある。RS/6000システムは、数値中心の科学技術の応用分野およびマルチユーザ商業環境でうまく機能するように設計されている。RS/6000プロセッサは、スーパースカラ実施態様を使用する。すなわち、複数の命令が同時に発行され実行される。
【0008】複数の命令を同時に発行して実行するには、高命令帯域幅で同時に実行できる独立した機能ユニットが必要である。RS/6000システムは、本来的にパイプライン式の別々のブランチ処理ユニット、固定小数点処理ユニット、および浮動小数点処理ユニットを使ってこれを実現している。そのようなシステムにおけるプロセッサのパイプライン式という性質にかんがみ、後続命令をディスパッチする前に、後続命令の実行に必要な特定の命令の結果が得られるように配慮しなければならない。そのようないわゆる「データ依存性ハザード」が発生しないようにするための1つの技法は、特定の命令のディスパッチを、たとえば、すべての先行命令がディスパッチされるまで制限することである。この技法によってデータ依存性ハザードは発生しなくなるが、この技法を用いて発生する性能上の不利益は大きい。
【0009】そのため、現代のスーパースカラ・データ処理システムは、しばしばいわゆる「データ依存性インタロック回路」を使用している。そのような回路は、命令ディスパッチ回路と協調して動作し、たとえばその命令の正しい実行に必要な先行命令の結果が得られる時まで命令をディスパッチしないようにする論理機構を含む。データ依存性インタロック回路を実現するのに必要な論理の量は、各命令内のソース・オペランドの数に正比例する。ソース・オペランドとは、命令の実行に使用するために、レジスタ・ファイル内のオペランドにアクセスするのに使用される、命令内のフィールドである。
【0010】データ依存性インタロック回路を用いると、上述の大きな性能上の不利益を発生させずにデータ依存性ハザードを回避することができるが、多数のソース・オペランドおよび宛先オペランドを含む命令用のデータ依存性インタロック回路の設計および実施は極めて複雑になる。依存性インタロックは、独立で実行可能であり得る後続命令が、ディスパッチャに入ってディスパッチされ実行されるのを妨げる、依存命令のディスパッチを禁止する。
【0011】各プロセッサ・サイクルでの複数の命令の同時実行に伴って発生するデータ依存性ハザードはまた、「レジスタ名前変更」として知られる方法を利用して対処されてきた。レジスタ名前変更は、命令の最終結果がレジスタ・ファイルに格納されるよりも前に、特定の命令の結果を、後続命令が使用できるように、レジスタに一時的に格納するために利用される技術である。レジスタ名前変更は一般に、レジスタ・ファイル・アレイに、特別な位置と、論理レジスタに割り当てられた特定の物理レジスタを識別するポインタ配列とを設けることによって行われる。また従来技術の特定の手法では、複数のレジスタ・ファイル・アレイを使用して、データ用の多数の「読取り」ポート、または例外の場合のバックアップ用に前の結果を保持するための多数の「読取り」ポートを提供している。
【0012】この技術は、普通なら順次実行が必要な場合に複数の命令を同時にディスパッチして実行する能力を提供するが、そのような技法を利用して実行ユニットに命令をディスパッチすることに関して問題が存在する。命令が実行のために特定のデータまたはオペランドを使用するという要件により、一般に、命令と関連データを単一のプロセッサ・サイクル内に実行ユニットにディスパッチするのが不可能になる。なぜなら、ディスパッチ・ユニット、すなわち実行ユニットは一般に、一時レジスタが命令の実行に必要なデータをいつ含むかを判定するために、参照テーブルまたはポインタ・システムを介する複雑な読取りを実行しなければならないからである。
【0013】命令を順序外れで実行できない、あるいは誤ったプログラム結果が生成される状況が存在する。そのような命令は、順次または逐次的な形で処理する必要がある。これは、「逐次化」とも呼ばれる逐次化により、これらの命令の実行が任意の必要な規則に従うようになる。
【0014】したがって、スーパースカラ・プロセッサ・システムで特定の命令が順序外れで実行されるのを防止する方法およびシステムが必要なことは明白である。
【0015】
【発明が解決しようとする課題】本発明の一目的は、改良型データ処理システムを提供することである。
【0016】本発明の他の目的は、スーパースカラ・プロセッサ・システムにおける命令処理効率を向上させるための改良された方法およびシステムを提供することである。
【0017】本発明の他の目的は、スーパースカラ・プロセッサ・システムにおいて命令処理を選択的に逐次化するための改良された方法およびシステムを提供することである。
【0018】
【課題を解決するための手段】前述の目的は、以下に述べるようにして達成される。本発明の方法およびシステムを使用すると、アプリケーションによって指定された順序で一連のスカラ命令を取り出し、同時に一群のスカラ命令を非逐次的に適宜複数の実行ユニットにディスパッチすることができる、スーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させることができる。アプリケーションによって指定された順序で、非逐次的に適宜取り出された一群のスカラ命令が、本発明で処理される。本発明では、処理中に逐次化を必要とする条件を検出する。逐次化を必要とする条件の検出に応じて、この一群のスカラ命令のうちの特定のスカラ命令の処理が選択的に制御され、その後は、この一群のスカラ命令のうちの少なくとも一部が逐次的に処理される。
【0019】本発明の上記その他の目的、特徴、および利点は、以下の詳細な説明で明らかになろう。
【0020】
【実施例】図面、特に図1を参照すると、本発明の方法およびシステムを実施するために利用できるスーパースカラ・データ処理システム10の高水準ブロック図が示されている。図のように、スーパースカラ・データ処理システム10は、データ、命令などを記憶するために利用されるメモリ18を含む。メモリ18内に記憶されるデータまたは命令には、当業者に周知の方法でキャッシュ/メモリ・インタフェース20を使用してアクセスすることが好ましい。キャッシュ・メモリ・システムのサイズ設定および利用法は、データ処理技術分野内の周知の一部門であり、本発明では取り上げない。しかし、現代の連想式キャッシュ技術を使用することにより、キャッシュ/メモリ・インタフェース20内に一時的に記憶されたデータを利用して高率のメモリ・アクセスを達成できることが、当業者には理解されよう。
【0021】キャッシュ/メモリ・インタフェース20からの命令は通常、好ましくは複数の待ち行列位置を含む命令ディスパッチ機構22にロードされる。スーパースカラ・データ処理システムの典型的な実施例では、命令ディスパッチ機構内の各位置が、2ないし8個の命令を含むことができ、したがって所与のサイクルで、キャッシュ/メモリ・インタフェース20によって渡される有効な命令の数と、命令ディスパッチ機構22内で利用可能な空間の量とに応じて、命令ディスパッチ機構22に最高で8個の命令をロードすることができる。
【0022】そのようなスーパースカラ・データ処理システムでは普通であるが、命令ディスパッチ機構22は、実行ユニット24に命令をディスパッチするために利用される。図1に示すように、スーパースカラ・データ処理システム10は、設計上の選択の問題として、1つまたは複数の浮動小数点処理ユニット、固定小数点処理ユニット、ロード/記憶ユニット、およびブランチ処理ユニットを含むことができる。したがって、命令ディスパッチ機構22は、単一のサイクル中に、複数の命令を各実行ユニットに1つずつディスパッチすることができる。実行ユニットは、設計の選択の問題として、単一のサイクル中に単一の実行ユニットに複数の命令をディスパッチできるようにする、予約ステーションを含むことができる。したがって、スーパースカラ・プロセッサ中の複数の実行ユニットがそれぞれ、単一のサイクルで複数の命令を受け取ることができる。また、マルチプロセッサ・システム中で、複数のプロセッサに関連する複数の実行ユニット24に命令をディスパッチすることができる。
【0023】図2を参照すると、本発明の方法およびシステムを実施するために使用できる図1のスーパースカラ・データ処理システムの命令ディスパッチ回路のさらに詳細なブロック図が示されている。図のように、キャッシュ/メモリ・インタフェース20からの命令は通常、命令ディスパッチ機構22に、グループ単位で、アプリケーションで指定された順序でロードされる。したがって、実行ユニット24内の1つまたは複数の実行ユニットに適宜ディスパッチするために、設計上の選択の問題として、2個、4個、または8個の命令がキャッシュ/メモリ・インタフェース20から命令ディスパッチ22にロードされる。図2に示した実施例に示すように、これらの実行ユニットは、浮動小数点処理ユニット26、複数のロード/記憶ユニット28および30、複数の固定小数点処理ユニット32および34、およびブランチ処理ユニット36を含むことができる。言うまでもなく、前述のように、設計上の問題として、スーパースカラ・データ処理システム10内に任意の数の複数のタイプの実行ユニットを含めることができる。
【0024】本明細書に示すタイプのようなスーパースカラ・データ処理システムで典型的であるが、複数の汎用レジスタも設けられている。図2に示した実施例では、浮動小数点汎用レジスタ44および固定小数点汎用レジスタ46の2つのグループの汎用レジスタが設けられている。したがって、図2に示した実行ユニット内での複数の命令の実行結果が通常、将来使用できるように、選択された汎用レジスタ内に記憶される。本発明の重要な特徴によれば、浮動小数点中間記憶バッファ40および固定小数点中間記憶バッファ42という複数の記憶バッファも設けられる。本明細書で詳細に説明するように、各実行ユニットは、独立バスを介して各中間記憶バッファに接続される。したがって、実行ユニットが必要とするデータ、または実行ユニット内での命令の実行によって生成されるデータを、他の実行ユニットで使用できるように、または将来汎用レジスタに転送するために、独立バス上に置き、指定された中間記憶バッファ内に格納することができる。
【0025】このようにして、通常はレジスタ名前変更方式に伴う複雑な参照テーブルを維持する必要がなくなり、中間記憶バッファを、宛先オペランド用の記憶位置として直接使用するために効率的に割り当てることができるので、命令を単一のプロセッサ・サイクル内でディスパッチできるようになる。なぜなら、名前変更されたレジスタ・ファイル内でデータ位置を決定する必要がないからである。また、非順次的に命令を実行することができ、これらの命令の出力は、将来、汎用レジスタ内でアプリケーションによって指定された順序でアセンブルするために、中間記憶バッファ内に一時的に格納することができる。
【0026】図示したように、固定小数点処理ユニット32および34はそれぞれ、独立バスを介して固定小数点中間記憶バッファ42に接続されるが、浮動小数点処理ユニット26は、独立バスを介して各浮動小数点中間記憶バッファ40に接続される。当業者には明らかなように、ロード/記憶ユニット28および30は必然的に、浮動小数点中間記憶バッファ40および固定小数点中間記憶バッファ42に接続される。というのは、これらのユニットが浮動小数点データと固定小数点データの両方をロードして記憶するからである。
【0027】本発明の他の重要な特徴によれば、完了バッファ48が設けられる。完了バッファ48は、実行ユニット24内で実行中の複数のスカラ命令の完了を追跡するために使用される。前述のように、これら命令の実行の結果は、それぞれ関連する中間記憶バッファ内に一時的に格納され、命令または一群の命令が、アプリケーションで指定された順序で首尾よく完了したことが示されたとき、完了バッファ48を使用して、これらの完了した命令データの結果の関連する汎用レジスタへの転送を開始することができる。また、例外条件が発生した場合は、完了バッファ48を使用して、例外の前に完了した命令の実行結果の記憶を開始し、例外条件が発生した点からプロセスを再開して、破壊されたデータまたは無効なデータを有効な出力で効率的に置換できるように命令ディスパッチ機構22を制御し、あるいは、アプリケーション特有のプログラムによって特定の例外タイプ用に指定された新しい一連の命令を開始することができる。
【0028】図3を参照すると、本発明の方法およびシステムによる、図1のスーパースカラ・プロセッサ・システム内での中間記憶バッファの使用法を示す高水準ブロック図が示されている。命令ディスパッチ機構22がアクセスできる記憶バッファ・インデックス58が設けられている。本明細書で詳細に説明するように、記憶バッファ・インデックス58は、複数の中間記憶バッファ60のそれぞれと指定された汎用レジスタ62との関係の指示を、後続命令の実行時に使用できるように、記憶し維持するために使用される。
【0029】複数の中間記憶バッファ60は、複数の独立バス64に接続することが好ましい。好ましい実施例では、独立バス64の数が中間記憶バッファ60の数に等しく、各中間記憶バッファは1本のバスに接続される。各中間記憶バッファ60は、対応する独立バス64に対する読取りおよび書込みを行うことができる。設計上の選択の問題として、使用するバスの数を変えられることが、当業者には理解されよう。
【0030】図の複数の実行ユニット24a、24b、24cはそれぞれ、複数の独立バス64のそれぞれに接続される。好ましい実施例では、実行ユニット24a、24b、24cは、浮動小数点処理ユニット26、複数のロード/記憶ユニット28および30、複数の固定小数点処理ユニット32および34、およびブランチ処理ユニット36を含むことができる。しかし、設計上の選択の問題として、実行ユニットの数およびタイプを変えられることが、当業者には理解されよう。
【0031】複数の実行ユニット24a、24b、24cもそれぞれ、各独立バス64に対する読取りおよび書込みを行うことができる。したがって、複数の実行ユニット24a、24b、24cはそれぞれ、複数の独立バス64を介して、複数の中間記憶バッファ60のそれぞれに結合されている。したがって、実行ユニット内での命令の実行によってデータが生成されるとき、実行ユニットは、データを一時的に格納できるそのデータの宛先として指定されている指定の中間記憶バッファに対応するバス上にそのデータを置くことができる。同時に、実行ユニットは、「有効」ビットを適切な状態にセットすることによって、バス上のデータが有効であることを示す。このようにして、データがバス上にある間、および指定された中間記憶バッファ内にデータを格納する前またはそれと同時に、そのデータを必要とする他のどの実行ユニットもバスからそのデータを取り出すことができる。したがって、独立バスを設けることの1つの利点は、データをバッファに記憶し、その後バッファ内のそのデータにアクセスする必要がなくなることである。データをバスから直接取り出せるので、プロセッサ・システムの処理速度が大幅に向上する。
【0032】さらに図3を参照すると、複数の独立バス64がそれぞれ汎用レジスタ62に結合されていることが分かる。実行ユニットに命令をディスパッチするとき、指定された中間記憶バッファと選択された汎用バッファの関係を記憶バッファ・インデックス58内に記憶することが好ましい。その実行結果を他の実行ユニットが必要とするときは、記憶バッファ・インデックス58内の情報を使用してそれらの結果の転送を実行できる。本明細書で詳細に説明するように、記憶バッファ・インデックス58内に記憶される情報は、汎用レジスタの識別を使用してアクセスされる指定された中間記憶バッファの識別子、または指定された中間記憶バッファの識別によってアクセスされる汎用レジスタの識別子とすることができる。
【0033】このようにして、通常はレジスタ名前変更方式に伴う複雑な参照テーブルを維持する必要がなくなる。なぜなら、汎用レジスタ・ファイルの名前変更を必要とせずに、中間記憶バッファを、ディスパッチされる命令内の各宛先オペランド用の記憶位置として直接割り当てることができるからである。さらに、記憶バッファ・インデックス58により、非順次的に命令を実行することができる。これは、各命令の実行結果が中間記憶バッファ60に一時的に記憶され、後で記憶バッファ・インデックス58内の情報および完了バッファ48の内容を使用することによって、後続命令がこの実行結果を使用できるからである(図2参照)。
【0034】命令は、その結果がバッファに記憶された時点で、終了したものとみなされる。命令の完了は、バッファに格納されたデータが汎用レジスタ(GPR)に転送されるときに発生する。
【0035】図4を参照すると、本発明の好ましい実施例による命令ディスパッチ機構を示すブロック図が示されている。命令ディスパッチ機構22は、本発明の好ましい実施例による、スロット1ないし6を有する命令ディスパッチ・バッファ198を含む。図示した実施例では6個のスロットを使用するが、本発明の好ましい実施例によれば、他の数のスロットを使用することもできる。命令は、ディスパッチするために取り出されてスロットにロードされる。これらの命令は、アプリケーションによって指定された順序で取り出される。本発明の好ましい実施例によれば、スロットは、取り出されたシーケンスの第1の命令がスロット1に置かれ、第2の命令がスロット2に、第3の命令がスロット3に置かれるという順序でロードされる。当業者なら、本発明の好ましい実施例による例示した方式以外の、命令を取り出してスロットに置く他の方式を実施することができよう。ディスパッチ制御機構200は、命令をいつディスパッチするか、どの命令をディスパッチするか、および命令をどの実行ユニットに送るべきかを決定する。通常、命令はスロットから適宜、同時にディスパッチされる。命令をディスパッチする際に特定のシーケンスには従う必要はない。
【0036】命令の一部は、命令処理の逐次化が必要であることを識別するフラグまたは標識を含むことがある。これを単に逐次化とも呼ぶ。他の場合には、本発明の好ましい実施例による完了バッファ48からの信号によって、ディスパッチ制御機構200に逐次化を指示することができる。
【0037】完了バッファ48は、ディスパッチ制御機構200と共に、様々な種類の逐次化を制御することができる。命令が、名前変更されていないアーキテクチャ式の機構を使用しまたは変更するときは必ず、逐次化が必要であり、一部の同期化の場合にも逐次化が必要である。命令または状況に応じて、異なる種類の逐次化または順次処理を利用することができる。たとえば、Load Multiple(LM)命令およびStore Multiple(STM)命令は、最大32個のGPRを使用または変更できる命令である。レジスタにロードするLMの場合、32個のレジスタの名前を変更するのは合理的でない。効率的な解決策は、命令の処理を逐次化することである。本発明の好ましい実施例によれば、LMの完了後にGPRが正しいデータを含むようにするために、LMがロードを開始する前にLMより前のすべての命令を完了しておく必要がある。LMより後の命令は、これらの命令が正しいデータと共にディスパッチされるようにするために、LMが完了するまでディスパッチできない。この種の逐次化を「汎用逐次化」と呼ぶ。
【0038】実行時の逐次化、すなわち「実行逐次化」は、アーキテクチャ内の一定のビットをセットし使用する命令に必要である。STMは、GPRの内容をメモリに格納させる。大部分の命令のように、最大32個のレジスタからのデータを、この記憶命令によって合理的にディスパッチすることはできない。STMには実行逐次化を利用することができる。STMは、前の命令からのデータがGPRに格納された後に実行を開始する。STMより後の命令をディスパッチして実行することができるが、GPRが早く重ね書きされないように、これらの命令はGPRからデータが除去されるまで完了を待つ。
【0039】ある記憶同期命令は、記憶同期命令より前のあらゆる記憶参照動作が、その命令より後のどの記憶参照命令よりも前に完了することを必要とする。別の種類の記憶同期命令には、記憶同期命令より前のすべての命令が完了するまで、その命令より後のロード命令および記憶命令を遅延することを必要とするものもある。また当業者に周知の他の種類の記憶命令は、記憶同期逐次化を必要とするものもある。
【0040】基本的に、まず命令ディスパッチ機構のバッファ内の命令を復号して、どの逐次化が各命令に適用されるか否かを決定する。必要な実行ユニットのタイプ、必要な順序変更レジスタの種類などの他の情報も各命令から復号される。
【0041】図5ないし7を参照すると、本発明の好ましい実施例による逐次化が必要な命令を処理する方法およびシステムを示す高水準フローチャートが示されている。プロセスはブロック250から始まり、次にブロック252に進む。本発明の好ましい実施例によれば、ブロック252で、スロット1中の第1の命令に進む。次にブロック254に進み、選択された命令が逐次化を必要とするか否かを判定する。選択された命令が逐次化を必要としない場合は、ブロック256に進み、検査すべき命令がまだ存在しているか否かを判定する。まだ命令が存在している場合、ブロック258に進む。ブロック258で、選択される命令となる次の命令に進む。次にブロック254に戻る。再びブロック256を参照すると、もはや命令が存在していない場合、ブロック260で、プロセスは終了する。
【0042】再びブロック254を参照すると、選択された命令が逐次化を必要とする場合、ブロック262に進み、選択された命令が汎用逐次化を必要とするか否かを判定する。選択された命令が汎用逐次化を必要とする場合は、結合子Aを介して図6のブロック264に進む。ブロック264で、選択された命令とそれより後の命令のディスパッチを禁止する。次に、ブロック266に進み、該命令より前の命令が完了しているか否を判定する。前の命令が完了していない場合、ブロック264に戻る。
【0043】前の命令が完了すると、ブロック268に進み、選択された命令のディスパッチを許可し、選択された命令より後の命令のディスパッチは引き続き禁止する。次にブロック270に進む。ブロック270で、選択された命令が完了しているか否かを判定する。選択された命令が完了していない場合、ブロック272に進み、選択された命令が完了した後、残りの命令のディスパッチを引き続き禁止する。次にブロック270に戻る。選択された命令が完了すると、ブロック274に進む。ブロック274で、残りの命令のディスパッチを許可し、結合子Dを介して図5のブロック256に戻る。
【0044】再びブロック262を参照すると、選択された命令が汎用逐次化を必要としない場合、ブロック276に進む。ブロック276で、選択された命令が実行逐次化を必要とするか否かを判定する。実行逐次化を必要とする場合は、結合子Bを介して図6のブロック278に進む。ブロック278で、選択された命令の実行を禁止する。選択された命令は実行されないが、例えばアドレスなどの様々な項目を計算できるように、命令をディスパッチすることは可能である。次に、ブロック280に進み、選択された命令より前の命令からのデータがGPR中に存在するか否かを判定する。選択された命令より前の命令からのデータがGPR中に存在しない場合、ブロック278に戻る。GPR中に前のすべての命令からのデータが存在している場合は、ブロック282に進む。ブロック282で、選択された命令の実行を許可する。次に、結合子Dを介してブロック256に戻る。
【0045】再びブロック276を参照すると、命令が実行逐次化を必要としない場合、ブロック284に進む。ブロック284で、命令が記憶同期化を必要とするか否かを判定する。一般に、記憶同期化は、ロード命令および記憶命令のディスパッチを禁止し、あるいはやはりロード装置および記憶装置による実行の完了を禁止することにより、制御することができる。命令が記憶同期化を必要とする場合は、結合子Cを介して図7のブロック288に進む。ブロック288で、選択された命令が本発明の好ましい実施例によるsync1命令であるかそれともsync2命令であるかを判定する。選択された命令がsync1命令である場合、ブロック290に進む。ブロック290で、選択された命令より前のすべての記憶参照が完了しているか否かを判定する。
【0046】アプリケーション特有の順序に従って、選択された命令より前に位置する前の記憶参照命令が完了していない場合、ブロック292に進み、選択された命令より後の記憶参照命令のディスパッチを禁止する。次にブロック290に戻る。再びブロック290を参照すると、選択された命令より前の記憶参照命令が完了している場合、ブロック294に進む。ブロック294で、選択された命令より後に発生する記憶参照命令のディスパッチを許可する。次に結合子Dを介してブロック256に戻る。
【0047】再びブロック288を参照すると、選択された命令がsync2命令である場合、ブロック296に進む。ブロック296で、選択された命令より前のすべての命令が完了しているか否かを判定する。選択された命令より前の命令で完了していないものがある場合、ブロック298に進む。ブロック298で、アプリケーション特有の順序に従って、選択された命令より後に位置するすべてのロード命令および記憶命令のディスパッチを禁止する。次にブロック296に戻る。選択された命令より前に発生するすべての命令が完了すると、ブロック300に進み、アプリケーション特有の順序に従って、選択された命令より後に発生するロード命令および記憶命令のディスパッチを許可する。次に結合子Dを介してブロック256に戻る。例示した実施例では、記憶同期化を必要とする2種類の命令を示す。本発明の好ましい実施例によれば、記憶同期化を必要とする他の種類の命令も逐次化できることが、当業者には理解されよう。
【0048】図8および9を参照すると、本発明の好ましい実施例による再取出しおよび再取出し+1逐次化の方法およびシステムを示すフローチャートが示されている。再取出しまたは再取出し+1逐次化は通常、命令がエラーを引き起こし、それによって不良なデータが発生したときに必要となる。不良データを発生させる命令を適切に処理するために、再取出しおよび再ディスパッチが必要となる場合がある。さらに、その不良データを利用する他の命令も、本発明の好ましい実施例によれば再取出しおよび再ディスパッチが必要となる場合がある。この範疇に含まれる命令としては、ロード/記憶制御に関係するレジスタを変更する命令(すなわち、TID、SRD)が含まれる。一部の浮動小数点命令も、該命令によって浮動小数点レジスタの宛先を変更しないでおく必要がある例外が発生するときは、この範疇に含まれることがある。ロード・アドレスの内容が前の記憶命令によって変更された可能性があることが発見されたとき、前の記憶命令の後にロード命令を実行した場合に、この状況が発生する可能性がある。正しいデータが使用されるようにするために、ロード命令とそれより後のすべてのものについて再取出しを行い、それらを再ディスパッチし、再実行する必要がある。
【0049】米国特許出願第08/001866号に記載されているように、一意的なID番号を使用することにより完了バッファ中のエラーを発見することができる。一意的な識別番号を使用すると、不良データを発生させた、あるいは使用した命令を検出することができる。
【0050】再取出し逐次化により、1つまたは1組の命令の再取出しおよび再ディスパッチが行われる。まだディスパッチされていない命令は、命令が再ディスパッチされるまで抑制される。再取出し+1逐次化は、再取出し逐次化と似ているが、逐次化命令の後の命令が再取出しおよび再実行のために選択される点が異なる。
【0051】図のように、このプロセスはブロック302から開始する。次にブロック304に進み、再取出し逐次化を必要とするか否かを判定する。再取出し逐次化を必要とする場合は、結合子Fを介して図9のブロック306に進む。ブロック306で、ディスパッチ・バッファに残っている命令のディスパッチを禁止する。次にブロック308に進む。ブロック308で、不良データを発生させた命令を取り出し、その不良データを使用した命令をディスパッチ制御機能にロードする。次にブロック310に進む。ブロック310で、取り出された命令が完了したか否かを判定する。取り出された命令が完了していない場合、ブロック312に進み、残りの命令のディスパッチを引き続き禁止する。次に、取り出された命令が完了した時点でブロック310に戻る。次にブロック314に進む。ブロック314で、残りの命令のディスパッチを許可する。
【0052】その後、図8のブロック316でプロセスが終了する。再びブロック304を参照すると、再取出し逐次化を必要としない場合、ブロック318に進み、再取出し+1逐次化を必要とするか否かを判定する。再取出し+1逐次化を必要とする場合は、結合子Gを介してブロック320に進む。ブロック320で、ディスパッチ制御機構に残っている命令のディスパッチを禁止する。次にブロック322に進み、不良データを使用した命令を取り出し、不良データを発生させた命令を排除する。次にブロック324に進み、取り出された命令が完了しているか否かを判定する。取り出された命令が完了していない場合、ブロック326に進み、残りの命令のディスパッチを引き続き禁止する。取り出された命令が完了すると、ブロック328に進む。ブロック328で、残りの命令のディスパッチを許可する。次にブロック316で、プロセスが終了する。
【図面の簡単な説明】
【図1】本発明の方法およびシステムを実施するために利用されるスーパースカラ・データ処理システムの高水準ブロック図である。
【図2】本発明の方法およびシステムを実施するために利用される図1のスーパースカラ・データ処理システムの命令ディスパッチ回路のさらに詳細なブロック図である。
【図3】本発明の方法およびシステムによる図1のスーパースカラ・データ処理システム内の中間記憶バッファの利用法を示す高水準ブロック図である。
【図4】本発明の好ましい実施例による命令ディスパッチ機構を示すブロック図である。
【図5】本発明の好ましい実施例による逐次化を必要とする命令を処理する方法およびシステムを示す図である。
【図6】本発明の好ましい実施例による逐次化を必要とする命令を処理する方法およびシステムを示す図である。
【図7】本発明の好ましい実施例による逐次化を必要とする命令を処理する方法およびシステムを示す図である。
【図8】本発明の好ましい実施例による再取出しおよび再取出し+1逐次化の方法およびシステムを示す図である。
【図9】本発明の好ましい実施例による再取出しおよび再取出し+1逐次化の方法およびシステムを示す図である。
【符号の説明】
10 スーパースカラ・データ処理システム
18 メモリ
20 キャッシュ/メモリ・インタフェース
22 命令ディスパッチ機構
24 実行ユニット
26 浮動小数点処理ユニット
28 ロード/記憶ユニット
32 固定小数点処理ユニット
36 ブランチ処理ユニット
40 浮動小数点中間記憶バッファ
42 固定小数点中間記憶バッファ
44 浮動小数点汎用レジスタ
46 固定小数点汎用レジスタ
48 完了バッファ
58 中間記憶バッファ・インデックス
64 独立バス
198 命令ディスパッチ・バッファ
200 ディスパッチ制御機構

【特許請求の範囲】
【請求項1】アプリケーションによって指定された順序で一連のスカラ命令を取り出し、同時に一群の前記スカラ命令を非逐次的に適宜、複数の実行ユニットにディスパッチすることのできる、スーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法であって、アプリケーションによって指定された順序で取り出された一群のスカラ命令を非逐次的に適宜処理するステップと、前記処理ステップ中に逐次化を必要とする条件を検出するステップと、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の1の命令の処理を選択的に制御して、その後は前記一群のスカラ命令の少なくとも一部分が逐次的に処理されるようにするステップとを含む方法。
【請求項2】前記一群の命令のうちの特定の1の命令の処理を選択的に制御する前記ステップが、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の命令のディスパッチを選択的に禁止するステップを含む請求項1に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項3】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の1の命令のディスパッチを選択的に禁止する前記ステップが、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの選択された1の命令より前にあるあらゆるスカラ命令が完了するまで、前記一群のスカラ命令のうちの前記選択された1の命令のディスパッチを禁止するステップと、前記一群のスカラ命令のうちの前記選択された1の命令が完了するまで、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの前記選択された1の命令より後にある、あらゆる命令のディスパッチを禁止するステップとを含む請求項2に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項4】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の1の命令のディスパッチを選択的に禁止する前記ステップが、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの前記特定の1の命令より前にある選択された数の前記一群のスカラ命令が完了するまで、前記一群のスカラ命令のうちの特定の1の命令のディスパッチを禁止するステップを含む請求項2に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項5】前記一群のスカラ命令のうちの特定の1の命令の処理を選択的に制御する前記ステップが、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の1の命令の実行を選択的に制御するステップを含む請求項1に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項6】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の1の命令の実行を選択的に制御する前記ステップが、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの前記選択された1の命令より前にある、前記一群のスカラ命令のうちの前記特定の1の命令の少なくとも一部分が完了するまで、前記一群のスカラ命令のうちの選択された1の命令の実行を禁止するステップを含む請求項5に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項7】前記処理ステップ中に逐次化を必要とする条件を検出する前記ステップが、特定の命令によって引き起こされた、少なくとも1つの終了したスカラ命令の再処理を必要とする条件を検出するステップを含む請求項1に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項8】前記一群のスカラ命令のうちの特定の命令の処理を選択的に制御する前記ステップが、少なくとも1つの終了したスカラ命令の再処理を必要とする前記条件から生じたデータを利用するすべての終了したスカラ命令の再取出しを行うステップと、再取出しされたすべてのスカラ命令の処理を選択的に制御するステップとを含む請求項7に記載の、スーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項9】少なくとも1つの終了したスカラ命令の再処理を必要とする前記条件を発生させた前記命令の再取出しを行うステップをさらに含む請求項7に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させる方法。
【請求項10】アプリケーションによって指定された順序で一連のスカラ命令を取り出し、同時に一群の前記スカラ命令を非逐次的に適宜、複数の実行ユニットにディスパッチすることのできる、スーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステムであって、アプリケーションによって指定された順序で取り出された一群のスカラ命令を非逐次的に適宜処理する処理手段と、前記処理手段による処理中に逐次化を必要とする条件を検出する検出手段と、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の命令の処理を選択的に制御して、その後は前記一群のスカラ命令の少なくとも一部分が逐次的に処理されるようにする制御手段とを備えるシステム。
【請求項11】前記制御手段が、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の1の命令のディスパッチを選択的に禁止する手段を備える請求項10に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項12】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の命令のディスパッチを選択的に禁止する手段が、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの選択された1の命令より前にあるあらゆるスカラ命令が完了するまで、前記一群のスカラ命令のうちの前記選択された1の命令のディスパッチを禁止する手段と、前記一群のスカラ命令のうちの前記選択された1の命令が完了するまで、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの前記選択された1の命令より後にあるあらゆる命令のディスパッチを禁止する手段とを備える請求項11に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項13】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の1の命令のディスパッチを選択的に禁止する前記手段が、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの前記特定の1の命令より前にある選択された数の前記一群のスカラ命令が完了するまで、前記一群のスカラ命令のうちの特定の1の命令のディスパッチを禁止する手段を備える請求項11に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項14】前記一群のスカラ命令のうちの特定の命令の処理を選択的に制御する前記手段が、逐次化を必要とする条件が検出されたことに応答して、前記一群のスカラ命令のうちの特定の1の命令の実行を選択的に制御する制御手段を備える請求項10に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項15】逐次化を必要とする条件が検出されたことに応答して前記一群のスカラ命令のうちの特定の1の命令の実行を選択的に制御する前記制御手段が、前記アプリケーションによって指定された順序で前記一群のスカラ命令のうちの選択された1の命令より前にある前記一群のスカラ命令のうちの前記特定の命令の少なくとも一部分が完了するまで、前記一群のスカラ命令のうちの前記選択された1の命令の実行を禁止する手段を備える請求項14に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項16】前記処理手段による処理中に逐次化を必要とする条件を検出する前記検出手段が、少なくとも1つの終了したスカラ命令の再処理を必要とする条件を検出する手段を備える請求項10に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項17】前記一群のスカラ命令のうちの特定の1の命令の処理を選択的に制御する前記制御手段が、少なくとも1つの終了したスカラ命令の再処理を必要とする前記条件から生じたデータを利用するすべての終了したスカラ命令の再取出しを行う再取出し手段と、再取出しされたすべてのスカラ命令の処理を選択的に制御する選択的制御手段とを備える請求項16に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。
【請求項18】少なくとも1つの終了したスカラ命令の再処理を必要とする前記条件を発生させた前記命令の再取出しを行う再取出し手段をさらに備える請求項17に記載のスーパースカラ・プロセッサ・システムにおける命令ディスパッチ効率を向上させるためのシステム。

【図1】
image rotate


【図2】
image rotate


【図3】
image rotate


【図4】
image rotate


【図7】
image rotate


【図5】
image rotate


【図8】
image rotate


【図6】
image rotate


【図9】
image rotate


【公開番号】特開平6−242952
【公開日】平成6年(1994)9月2日
【国際特許分類】
【出願番号】特願平5−325322
【出願日】平成5年(1993)12月22日
【出願人】(390009531)インターナショナル・ビジネス・マシーンズ・コーポレイション (4,084)
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MASCHINES CORPORATION