(57)【要約】  マイクロプロセッサ・出力ポートによって、他の実行ユニットに提供された命令を制御するための装置及び装置が提供される。命令のマイクロプロセッサ・パイプラインが、各実行ユニットに対して提供される。これらは、マイクロプロセッサ・ユニットを介してスケジューリングされる。各実行ユニットに対して、実行ユニットが、更なる命令を受信できるか否かについて判断が為される。もしできなければ、その対応パイプラインは、機能停止と言われる状態にあり、命令は、マイクロプロセッサ・パイプラインから削除される。次にそのスレッドは、後の時点において、実行できなかった命令に対応する命令で再スタートされ得る。
2008507020.tif 000002
【特許請求の範囲】
【請求項１】
マイクロプロセッサ・出力ポートを介して、少なくとも１つの他の実行ユニットに与えられた命令を制御するための方法であって、
実行ユニットに対して、マイクロプロセッサ・パイプラインを介して命令のスレッドを提供し、
前記命令をタイム・スタンピングし、
出力ポートを介して、前記実行ユニットが、更なる命令を受け取ることができるか否かを検知する前記実行ユニットに、順番に命令を提供し、
そして、もし、前記検知の結果が、前記実行ユニットが、更なる命令を受信できないというものならば、前記マイクロプロセッサ・パイプライン内に依然として存在するそのスレッドに対する命令を削除し、そして、
実行することが不可能であった、前記タイム・スタンプされた命令に対応する命令を持つ前記スレッドを再スタートさせる、
ステップを含む方法。
【請求項２】
各実行ユニットが、レジスタを介して前記マイクロプロセッサ出力ポートに接続される、請求項１に記載の方法。
【請求項３】
前記実行ユニットによって受け取られることが不可能な、現在の命令のタイム・スタンプを、前記パイプライン内の命令のタイム・スタンプと比較し、当該比較の結果に従属して、パイプライン内の命令を破棄するステップを含む、請求項１又は２に記載の方法。
【請求項４】
前記パイプライン内の前記命令のタイム・スタンプの値が、現在の命令のタイム・スタンプの値より大きい場合に、前記パイプライン内の前記命令が破棄される、請求項３に記載の方法。
【請求項５】
アドレスであって、当該アドレス内に、実行されることが不可能である現在の命令が記憶される、当該アドレスに対応するメモリ内のアドレスから命令を読出すことによって機能停止したスレッドを再スタートさせるステップを含む、以上のいずれかの請求項に記載の方法。
【請求項６】
マイクロプロセッサを通じて実行ユニットのための命令のマルチプル・スレッドをスケジューリングし、スレッドの１つが実行不可能な場合に、機能停止されていないスレッドの実行を継続するステップを含む、以上のいずれかの請求項に記載の方法。
【請求項７】
マイクロプロセッサ出力ポートを介して、複数の実行ユニットに与えられた命令を制御するための方法であって、
マイクロプロセッサ・パイプラインを通じて、異なった複数の実行ユニットのための複数の命令スレッドをスケジューリングし、
各々の実行スレッドに対して、その実行ユニットが、更なる命令を受け取ることができるか否かを検知し、
もし、その実行ユニットが、更なる命令を受け取れないならば、そのスレッドのために依然としてマイクロプロセッサ・パイプライン内にある命令を削除し、
後の時点で、そのスレッドの実行を、再スケジューリングし、再スタートする、
ステップを含む方法。
【請求項８】
実行できない前記スレッドが、所定の期間の後に再スタートされる、請求項７に記載の方法。
【請求項９】
マイクロプロセッサ出力ポートを介した、少なくとも１つの他の実行ユニットへの命令を制御するためのシステムであって、
実行ユニットのための命令のスレッドを供給するマイクロプロセッサ・パイプライン、
前記命令をタイム・スタンピングするための手段、
前記出力ポートを介して、前記実行ユニットに順番に命令を与えるための手段、
前記実行ユニットが、更なる命令を受け取ることができるか否かを検知するための手段、
前記検知の結果が、前記実行ユニットが更なる命令を受け取ることができないというものである場合に、前記マイクロプロセッサ・パイプライン内に依然として存在する命令を削除するための手段、及び、
実行することができなかった前記タイム・スタンプされた命令に対応する命令を持つ前記スレッドを再スタートするための手段、
を備えるシステム。
【請求項１０】
各実行ユニットを、前記マイクロプロセッサ出力ポートにカップルするレジスタを備える、請求項９に記載の装置。
【請求項１１】
前記実行ユニットによって受け取ることができない、現在の命令の前記タイム・スタンプと、前記パイプライン内の命令の前記タイム・スタンプを比較する手段と、
前記比較の結果に従属して、前記パイプライン内の前記命令を破棄するための手段、
を備える、請求項９又は１０に記載の装置。
【請求項１２】
前記パイプライン内の命令を破棄するための手段が、それらのタイム・スタンプの値が、現在の命令のタイム・スタンプの値より大きい場合に、前記パイプライン内の命令を破棄する、請求項１１に記載の装置。
【請求項１３】
機能停止したスレッドを再スタートするための前記手段が、アドレスであって、当該アドレス内に実行できなかった現在の命令が記憶されるアドレスに対応するアドレスから命令メモリを読み取るための手段を含む、請求項９ないし１２のいずれかに記載の装置。
【請求項１４】
実行ユニットのために、マイクロプロセッサを通じて、命令のマルチプル・スレッドをスケジューリングするための手段、及び、
前記スレッドの１つが実行できなかった場合に、機能停止されなかった命令スレッドの実行を継続するための手段、
を備える請求項９ないし１３に記載の装置。
【請求項１５】
マイクロプロセッサ出力ポートによって、複数の実行ユニットに与えられた命令を制御するための装置であって、
マイクロプロセッサ・パイプラインを通じて、異なった複数の実行ユニットのための複数の命令スレッドをスケジューリングするための手段、
各実行スレッドに対して、その実行ユニットが、更なる命令を受け取ることができるか否かを検知するための手段、
その実行ユニットが更なる命令を受け取ることができない場合に、そのスレッドのために前記マイクロプロセッサ・パイプライン内に依然として存在する命令を削除するための手段、
後の時点において、そのスレッドの実行を再スケジューリングし、再スタートするための手段、
を備える装置。
【請求項１６】
実行できない前記スレッドが、所定の期間の後に再スタートされる、請求項１５に記載の装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサの出力ポートに関連し、特に、他の実行ユニットのために、これらの出力ポートを介して提供される命令の制御に関連する。
【背景技術】
【０００２】
我々の英国特許出願番号9607153.5において、マルチ・スレッドのプロセッサにおいて独立命令スレッドを実行するためのデータ処理管理システムが記載されている。これは、データ入力及び出力の優先度、及び、データ処理手段の優先度を有するマイクロプロセッサを記載する。各データ処理手段は、複数の命令スレッドの少なくとも１つからの命令を実行するためにオペレーションを実行する。制御手段は、データ入力と出力の間で、データ処理手段の選択された１つを介して、データを選択的にルーティングする。外部インターフェース（入力及び出力）は、他のオペレーションを実行するために用いられるコ・プロセッサへのインターフェースであり得る。マイクロプロセッサ内のこれらのコ・プロセッサ及び外部インターフェースは、それらが、マイクロプロセッサ上で走っている命令によって効率的にアクセスされ得るように、システムに統合される必要がある。
【０００３】
通常は、マイクロプロセッサは、外部ユニット又はコ・プロセッサの能力についての知識を用いて命令をスケジューリングする。しかし、もし、マイクロプロセッサが、予測できない振舞いを持つ他のモジュールに付加されるならば、これは、必ずしも可能ではなくなる。マイクロプロセッサに付加されたコ・プロセッサにとって、それらのオペレーションと振舞いに関するデータを、制御しているマイクロプロセッサに提供しないことは、非常に普通のことである。それゆえ、コ・プロセッサに命令を送っているマイクロプロセッサは、コ・プロセッサが、それらの命令を受信する能力を持つか否かについての知識を持たない。１つより多い命令の組が、1つより多いコ・プロセッサに提供され得るようなマルチ・スレッド・システムの場合には、これは特に重要である。なぜなら、いくつかのコ・プロセッサは、問題無しにそれらの命令を実行するが、他のコ・プロセッサは、いくつかの内部事情によって、ブロックされ、それ故、更なる命令を受信することが不可能となるような状況が発生し得るからである。
【発明の開示】
【課題を解決するための手段】
【０００４】
好ましい実施例は、複雑なコ・プロセッサが、マイクロプロセッサといずれかのコ・プロセッサの間の最小のバッファリング量でマイクロプロセッサに付加され得るようなシステムを提供する。
【０００５】
好ましくは、マイクロ・プロセッサのメインの実行ユニット・パイプラインは、少なくとも、いずれかの制御されていないインターフェース（コ・プロセッサ）へのパイプラインの長さと、少なくとも同じ長さであるような最小長であるように延長される。その後、全てのパイプライン化されたオペレーションは、実行されている命令が完了できるか否かを制御するために用いられるタイム・スタンプでタグを付けられ（tagged）る。もし、それらが完了していないならば、次に、それらは有効に巻戻しされ（rewound）、再スタートされる。コ・プロセッサへの書き込みのような一定の命令は、タイム・スタンプをインクリメントし、もし、そのような命令によって、出力ポートがブロックされるという指示を誘引することがわかるならば、命令ストリームは次に、正しい次の命令にポイントし、マシンの状態が、コ・プロセッサ書き込み（write）の状態を正しく反映するように、異なったタイム・スタンプを伴ったその後の（following）命令が消滅するようにされる。
【０００６】
それ故、要するに、好ましい実施例は、命令の上にタイム・スタンプを持つマイクロプロセッサ・パイプラインを提供する。出力ポートはレジスタを持ち、もし、レジスタが、満杯になるならば、いずれかの後続の（following）従属命令が、除去され（再巻戻しされ）、ブロック（blockage）がクリアされたときに再スタートされる。
【０００７】
１つの実施例により、マイクロプロセッサの出力ポートによって、少なくとも１つのそれらの実行ユニットに提供される命令を制御するための方法であって、実行ユニットのためにマイクロプロセッサ・パイプラインを介して命令のスレッドを提供するステップ、命令をタイム・スタンピングするステップ、出力ポートを介することによって順番に、実行ユニットに命令を提供するステップ、実行ユニットが、更なる命令を受信できるか否かを検知するステップ、そして、もし、当該検知の結果が、実行ユニットが、更なる命令を受信できないというものならば、スレッドのために依然としてマイクロプロセッサ・パイプラインに存在する命令を削除するステップ、及び、機能停止した実行ユニットに遭遇された前記タイム・スタンプされた命令に対応する命令を伴ったスレッドを再スタートするステップ、を含む方法が提供される。
【０００８】
本発明の他の実施例によって、マイクロプロセッサ出力ポートを介して、複数の実行ユニットに提供された命令を制御するための方法であって、マイクロプロセッサ・パイプラインを介して異なった実行ユニットのための複数の命令スレッドをスケジューリングするステップ、各実行スレッドに対して、その実行ユニットが、更なる命令を受信できるか否かを検知するステップ、もし、その実行ユニットが更なる命令を受信できないならば、そのスレッドのためにマイクロプロセッサ・パイプライン内に依然として存在する命令を削除するステップ、そして、後の時点において、そのスレッドの実行を再スタートするステップ、を含む方法が提供される。
【発明を実施するための最良の形態】
【０００９】
本発明の好ましい実施例が、添付の図面を参照した例によって詳細に説明される。
図１において、一般的なマイクロプロセッサ１が示される。マイクロプロセッサ１は、１つあるいはそれより多いキャッシュ２か、１つあるいはそれより多いコ・プロセッサ３かのいずれかを介してそれが常駐する残りのシステムに接続される。殆どの状況において、データをキャッシュ、又は、コ・プロセッサの１つに送る能力は、最近キャッシュ又はコ・プロセッサに送られた命令のフローに関する情報を使用しているマイクロプロセッサ自身によって、完全に決定される。更に、コ・プロセッサ自身は、マイクロプロセッサに類似し得るか、又は、実際上、マイクロプロセッサであり、命令を走らせ、予測できない振舞いを表示する。予測できない振舞いを持つコ・プロセッサ、に送られるべきデータをスケジューリングするためのマイクロプロセッサ１の能力は、それがもはや、そのコ・プロセッサが、データを取得できるか否かを決定するためのシステムの状態を十分に知らないような状況において非常に限定される。
【００１０】
この問題に対する１つの解決法は、複数のマイクロプロセッサ、及び、いずれかの、付加されたコ・プロセッサの間にバッファを挿入することである。そのような状況において、マイクロプロセッサにとって、将来データを取得し、それによって、バッファを過負荷状態にさせない、マイクロプロセッサへのデータ転送のスケジューリングを可能とするためのバッファの能力に関するデータを維持することが可能である。しかし、このアプローチは、不十分であり得る。なぜなら、インターフェースがフリーなときに、バッファに関連するゲートをフローさせる（flowing）ことが、利用されないからである。更に、たとえ、マイクロプロセッサが、毎周期において、データをコ・プロセッサ内にストリーミングし得るとしても、バッファが満杯になるとき、又は、ドレーン・アウトされるときに、バッファ内への追加のスケジューリングから生じる過剰のレイテンシーに起因して、コ・プロセッサ・データ・ストリームにギャップが現れ得る。
【００１１】
このバッファリング・アプローチの例が、図２に示される。バッファ・アレンジメントを効率的に作動させるために、マイクロプロセッサは、一旦、既にパイプライン内にある何らかのトランザクションがバッファ内に格納されるために到達したときに、いかに多くのキャパシティが、バッファに残されるであろうかを知る必要がある。このキャパディティ予測は、ロジック５に、いかに多くのトランザクションがパイプライン内にあるか、及び、いかに多くのトランザクションが現在バッファ内にあるかを助言するようなデータを与えられる、マイクロプロセッサ内のロジック５によって取り扱われる。ここから、マイクロプロセッサは、どれだけの、更に多くの、データ・ワードが、バッファ４でオーバーラッピングすること無しに発行され得るかを計算できる。理解され得るように、ロジック５は、マイクロプロセッサからのパイプラインにおける転送に関するデータ、及び、バッファからの、そのフリーなキャパシティに関する情報を受信する。
【００１２】
バッファ４からのデータの除去は、バッファの反対側にリンクされたコ・プロセッサによって制御される。これは、フロー制御データを、レートであって、当該レートでデータがバッファから読み出されるレートを決定するバッファに送る。
【００１３】
データを、コ・プロセッサに送るマイクロプロセッサ上での命令の発行から、そのデータが、コ・プロセッサによって取り込まれるまでの時間の量は、マイクロプロセッサ・パイプラインの長さ、プラス、バッファを通過させるためにかかる時間の量からなる。この時間は、もしそれが、毎周期毎のコ・プロセッサへのデータ・ワードの発行をサポートすべきものならば、バッファが持たなければならない最小サイズを示すので、この時間は重要であり得る。それゆえ、そのようなアレンジメントにとって、バッファは、一般的に、全往復時間内で未解決であり得るだけの数のトランザクションを保持しなければならない。これは、往復時間が経過した後まで、マイクロプロセッサが、その動作のインパクトについて何のデータも受信しないためである。もしコ・プロセッサが、データの取り込みを停止すべきものならば、フルのデータを持つ全バッファが、パイプライン内に存在し得る。これに替わる代替法としては、バッファ・サイズを削減することが考えられ得る。しかし、この代替法によると、レートであって、当該レートでコ・プロセッサへの転送が起こり得るレートに悪影響を与え得る。
【００１４】
本発明の好ましい実施例は、バッファを除去し、新しい命令のスケジューリングの目的のために、マイクロプロセッサだけをその内部状態に従属させることによってこの問題を克服する。この変更には、コ・プロセッサへの、外部的に制御されたフロー制御をサポートする問題への異なったアプローチが必要とされる。命令の、一般的なプロセッサ・パイプライン・フローが、図３に示される。これは、フェッチ命令ユニット６、デコード命令ユニット７、フェッチ・オペランド・ユニット８、演算論理ユニット９、及び、宛先への書き込みユニット１０を備える。
【００１５】
本発明の実施例は、コ・プロセッサとの通信の主要な手段として、マイクロプロセッサのパイプライン自身を用いる。それ故、これは、必要とされる追加のリンクの数を削減する。実施例において、各コ・プロセッサは、単一のバッファ・レジスタを用いて、マイクロプロセッサに付加される。マイクロプロセッサから、コ・プロセッサへのトランザクションは、マイクロプロセッサのパイプラインをフロー・ダウンし、単一のデータのワードを保持するバッファ・レジスタ内に入る。もし、レジスタから、コ・プロセッサへのフロー制御が、機能停止していることが発見されるならば、次に、マイクロプロセッサは、以後の命令であって、パイプライン（１０）の「宛先への書き込み」ユニットを制御する以後の命令の一部を選択的に削除することによってコ・プロセッサに仕向けられた命令、を破棄することを選択し得る。
【００１６】
命令が、破棄される必要があるか否かについての判断は、各命令のタイム・スタンピングに基づいて為される。それらは、命令の効果にも基づき得る。発行された命令の多くは、コ・プロセッサ・インターフェースの状態への従属性を持たない。しかし、コ・プロセッサ転送命令、又は、メモリ・ロード及びストアのような一定の命令場合には、コ・プロセッサ・インターフェースのフロー制御に従属する必要性が存在し得る。
【００１７】
本発明の実施例は、現在の命令が、パイプラインに入った命令の巻戻しを引き起こし得る何かに依存する場合に、現在の命令のタイム・スタンプを変更する。タイムスタンプ自体は、少なくとも、マイクロプロセッサ・パイプラインの長さ（又は、マイクロプロセッサが、変化する長さのパイプラインを持つ場合には、利用可能な最も長いパイプライン）の２倍であるべき、ある範囲（例えば、０−ｎ）を持つことになる。もし、コ・プロセッサ出力ポートのような外部インターフェースが、機能停止にされるならば、次に、その出力ポートを通過している命令のタイム・スタンプを含むフラグが、全てのパイプラインにブロードキャストされ、ブロードキャストで与えられたタイム・スタンプに比較して、より最近のタイム・スタンプを持つ何らかの命令が、それらの宛先に到達することを避けるべきことを指示する。これは、宛先ユニット１０への書き込みが作動することを避けること、即ち、それらの命令に対する書き込みフラグが、クリアされることによって為される。
【００１８】
パイプライン内の、各、全ての宛先更新は、そのソース命令のタイム・スタンプでタグ付けされる。そして、所定の範囲０−ｎに対して、各タイム・スタンプは、ｌｏｇ２ｎビットを持つことになる。ブロードキャストが為されるときに、これらのタグの各々においてテストが為されて、それが含むタイム・スタンプが、より最近のものか否かが決定される。このテストは、２つのタイム・スタンプ（two time stamps）が、タイム・スタンプ値の範囲の底部１／２又は上部１／２にあるか否かを確立することによって実行される。このテストは、頂部ビットを除外するブロードキャスト・タイム・スタンプが、パイプライン内の終了タイム・スタンプより大きいか否かを確かめるためにテストすることによって実行される。次に、もし、２つのタイム・スタンプの頂部の２ビットが一致するならば、もし、パイプラインが、ブロードキャスト・タイム・スタンプより大きくないならば、巻戻しが必要と考えられる。そうでなければ、頂部が異なるときに、もし、パイプライン・タイム・スタンプが、ブロードキャスト・タイム・スタンプより大きくないならば、巻戻しが必要である。これは、通常、テストより小さいか、又は、それと等しい。
【００１９】
もし、両方のタイム・スタンプが、範囲の同じ１／２内にあるならば、もし、タグされたタイム・スタンプが、ブロードキャスト・タイム・スタンプより大きいならば、タグされたタイム・スタンプはより新しい。そうでなければ、もし、タグされたタイム・スタンプが、ブロードキャスト・タイム・スタンプより小さい、又は、それと等しいならば、タグされたタイム・スタンプはより新しい。最大８状態（それ故、０−１５のタイム・スタンプ範囲）を持つパイプラインに対するタイム・スタンプ比較のためのロジックの図面が、図４に示される。図４は、比較より大きいユニット（a greater than comparison unit）１６を介して各パイプライン・タグ１３と比較されている、ブロードキャスト・タイム・スタンプ１２のビットを示す。この比較ユニット１６は、ブロードキャスト・タグ、及び、ＭＳＢ（most significant bit）から離れた各パイプライン・タグ１３のビットの全てを用いる。排他的ＯＲゲート１１において、ＭＳＢは互いに比較され、マルチプレキサ１５を制御するために用いられる。もし、頂部ビットが同じならば、排他的ＯＲゲート１１の出力はゼロであり、マルチプレキサ１５の出力は、比較ユニット１６の出力に結び付けられ（tied to）、巻戻しが呼び出される。もし、頂部ビットが同じでないならば、次に、マルチプレキサが、インバータ１４を介した比較手段１６の反転された出力にスイッチする。インバータは有効に出力を与え、このことは、パイプライン・タグが、ブロードキャスト・タグより大きくないことを意味する。したがって、もし、ＮＳＢが同じならば、パイプライン・タグが、ブロードキャスト・タグに比較して、より大きい値を持つことになる。比較器の出力は、それ故、マルチプレキサ１５に直接的に繋がることになり、巻戻しが実行されることになる。
【００２０】
もし、パイプライン・タグのＭＳＢが、ブロードキャスト・タグより大きいならば、パイプライン・タグの最初の３ビットが、ブロードキャスト・タグの最初の３ビットに比して、より低い値になり、それにより、出力「より大きくない」を与え、これは、インバータ１４によって反転されて、マルチプレキサ１５に、これを、巻戻し信号として通過させる。もし命令が破棄されるべきことが決定されるならば、マイクロプロセッサ上で走っているソフトウェアが、正しい状態に維持されていることを保証するために解決されるべきいくつかの問題が存在する。
【００２１】
第１の問題は、何が、マイクロプロセッサ上で走らせるための次の命令であるかの決定の発行である。本質的に、一旦、コ・プロセッサが、パイプラインの機能停止を引き起こすと、それは次に、マイクロプロセッサ・パイプラインの巻戻しを引き起こす。それゆえ、発行されるべき現在の命令が、正しい次の命令か否かを決定することが必要である。ここでの主要の決定は、コ・プロセッサにデータを送り、巻戻しを引き起こした命令の間の中間命令、及び、現在の命令が、それら自体、巻戻されたか否かについての決定に関連する。この決定は、ブロードキャスト巻戻しによって引き起こされたタイムスタンプに対して、現在の命令のタイム・スタンプを比較することによって為され得る。もし、中間命令が巻戻されたならば、次に、現在の命令のタイム・スタンプが、ブロードキャスト巻戻しタイム・スタンプから移動（move on）させられることになる。図４に示されるものと同じテスト・ロジックを用いて、これらのタイム・スタンプは、比較され得る。
【００２２】
もし、タイム・スタンプが変更されていることが分かったならば、次に、正しいポイントにおける命令ストリームの再スタートは、現在の命令を打ち切り（abort）、現在のプログラム・カウンタ・アドレスからの命令フェッチを再スタートすることを含む。破棄されたトランザクションの全て（any）が、パイプラインから除去されるので、巻戻しの後の現在のプログラム・カウンタ・アドレスが、ポイント（ここでプログラムが再スタートする必要がある）を正しく反映することを保証することが可能である。現在のプログラム・カウンタ値は、プログラム・カウンタ実行ユニットパイプラインから来る。パイプラインが依然として発生するときに、パイプライン内の、依然としてそのようにさせるためのアクションは破棄され、再スタート・プログラム・カウンタ・アドレスが、プログラム・カウンタ・レジスタから検索される。これは、次に、適切なポイントにおいてパイプラインを再スタートさせるために用いられる。
【００２３】
プログラムを再スタートさせるために残っているタスクは、コ・プロセッサ・ポートが、より多くのトランザクションを受け入れるために準備完了となるか否かによって決定される。これは、いつ、単一のバッファリング・レジスタが、自分自身を空（empty）にすることを許されるかを監視することによって決定され得る。一旦このレジスタが空であれば、コ・プロセッサが、データを受け入れるために準備完了であること、および、命令のフローが再スタートされ得ることが想定され得る。以上、我々は、コ・プロセッサ転送が、パイプラインを伝わって、コ・プロセッサに付加される単一のバッファ・レジスタに送られることを確定した（established）。コ・プロセッサが転送の受け入れを停止したとき、即ち、コ・プロセッサがデータを採用するために準備完了となるまで、データが単一のバッファ・レジスタ内に保持されねばならないとき、に検知が行われる。次に何が起こるかは、次の命令が、パイプラインを下って何らかのコ・プロセッサ転送を送ることをプラニングしているか否かに依存する。
【００２４】
１つの実施例では、プロセッサが、コ・プロセッサ転送のために巻戻されるときに、影響を受けたスレッドが巻戻され、同時に、固定の期間（通常は、短期間であるが、任意の周期数、例えば、８周期）の間、近寄らせないように（hold off）される。もし、再スタートが発生するポイントにおける命令ストリームが、コ・プロセッサが準備完了であることに依存しないならば、それは、コ・プロセッサが依然とてビジーか否かとは独立に、再スタートし得、以前のように続行（carry on）し得る。命令は、何かが、コ・プロセッサに送られるべきような時点まで発行され続けることになる。もし、スレッドが、再スタート後の、その最初のアクションとして、コ・プロセッサ転送を発行せねばならないならば、このポイントには即座に到達されることになる。したがって、マルチ・スレッドされたシステムにおいて影響を受けたスレッドだけの休止が好ましいことが分かる。他の影響を受けないスレッドは、好ましくは、通常とおりに実行を継続し得る。
【００２５】
それ故、実行はしばらくの間停止し、再スタートし、現在システムは、何かを、ビジーなコ・プロセッサに送ることを望む。そのような状況において、プロセッサは有効に、我々の英国出願番号9607153.5の書類に説明されたメカニズムを使用する。当該書類の内容は、ここに参照として取り込まれる。これは、命令スケジューラが、必要とされるリソース、及び、それらのリソースの利用可能性を知っていることを意味する。それ故、システムは、コ・プロセッサに転送するための命令を持つ。スケジューラは、それとコ・プロセッサの間の、バッファ・レジスタの状態を観察する。もし、データが既に、レジスタ内に保持されるならばコ・プロセッサはビジーであり、要求されたリソースが未だ利用可能でないので、命令は発行しない。システムがデータを自由にコ・プロセッサに送っているときに、それは、データを受信するために利用可能であり、この阻止（blockage）は決して発生しない（即ち、リソース・テストは、事実上、レジスタが、コ・プロセッサの請求を待つ間に阻止されるか否かのテストである）。
【００２６】
例として、我々は、毎１０００周期ごとに１つのデータの項目だけを取り込むコ・プロセッサに、常にデータを送ることを試みている命令のストリームを考慮しなければならない。プログラムは、問題無しに、データの送信を開始する。送られる最初のワードは、コ・プロセッサによって採用される。第２のワードは、バッファ・レジスタで保持される。この時点で、巻戻されたロジックがトリガされ、依然としてパイプライン内に存在する第３のワードを削除する。次に、既知の良い状態を戻すために、スレッドは、短期間の間、機能停止される。即ち、正しい命令は走らせるために準備完了であり、リソース要求／利用可能性テストの結果として、当該命令はスケジューラによって保持されることになる。この状況は、第２のワードがバッファから除去されるまで、この状態で維持されることになる。第２のワードがバッファから除去される時点は１０００周期の後である。この時点では、バッファ・レジスタは自由になる。次に、プログラムは、再度命令の発行を開始し、第３のワードは、バッファ・レジスタ内に保持され、更なる巻戻しを引き起こす。この工程は、命令のストリームの終了まで継続する。
【００２７】
それゆえ、本発明の実施例は、プロセッサを、元の、実行可能状態（ready-to-run state）に戻し、次に、バッファ・レジスタがクリアされる（このポイントで実行が再開され得る）まで待つ。１つのワードが、１０００周期を占有（take over）するような、上に示された例は、極端である。インテリジェントなプロセッサを有する、より現実的な状況は、コ・プロセッサが、コ・プロセッサが進む（to go）ために十分になるまで、一連のコマンドを取り込み、プロセスを開始するというものになろう。このポイントで、コ・プロセッサはビジーになり得、コ・プロセッサがその初期プロセスを終わらせるまで、後続のコマンドが控えられる（hold off）ことを引き起こし得る。
【００２８】
本システムは、１つあるいはそれより多い出力ポート、及び、接続された１つあるいはそれより多いコ・プロセッサを持つマイクロプロセッサのために作動し得る。
【００２９】
１つあるいはそれより多いマイクロプロセサの各々が、複数の実行ユニットの命令のパイプラインを取り扱っているような、マルチ・スレッドされたシステムの場合には、命令のスレッドはスケジュールされて、それらの優先度に従属して、或いは、適用され得る他の基準に従属して、マイクロプロセッサのパイプラインを通過させる。実行される各スレッドに対して、その実行ユニットが、更なる命令を受信可能か否かについての判断が為される。不可能であれば、そのスレッドは機能停止される。もし、命令が、単に、マイクロプロセッサ内で放って置かれている（left sitting）場合には、更なるスレッドはスケジュールされ得ない。それ故、上述の実施例は、マイクロプロセッサ・パイプラインからの命令を破棄することによって、他の、機能停止されていないスレッドを、実行継続させることを可能とする。所定の時間（a predetermined amount of time）後に、機能停止されたスレッドは、次に、再スタートされる。それは、その対応する実行ユニットが、再度、上述の命令を受信するために準備完了となるような時間まで、再スタートを継続できる。マイクロプロセッサ内の命令が破棄されるときに、上述のタイム・スタンプ法を用いて、これは為される。
【図面の簡単な説明】
【００３０】
【図１】いくつかのコ・プロセッサにカップルされた一般的なマイクロプロセッサの図面を示す。
【図２】バッファされたコ・プロセッサ・インターフェースを示す。
【図３】一般的なプロセッサ命令パイプラインを示す。
【図４】本発明の実施例で使用するためのタイム・スタンプ比較回路を示す。
【符号の説明】
【００３１】
５  ロジック
１２  ブロードキャスト・タイム・スタンプ
【図１】
2008507020.tif 000003
【図２】
2008507020.tif 000004
【図３】
2008507020.tif 000005
【図４】
2008507020.tif 000006
【国際調査報告】
2008507020.tif 000007
2008507020.tif 000008
2008507020.tif 000009