(57)【要約】  単一スレッドの命令列を処理するプロセッサと同等のリトライ成功率を実現する複数スレッドの命令列を同時に処理できるプロセッサを提供するために、演算装置２００に、複数のスレッドを実行する命令実行回路２０１と、各スレッドについての実行状態や再実行を制御する実行制御回路２０２と、を備える。
2008155803.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出して通知する命令実行回路と、
該命令実行回路から前記ハードウェアエラーが通知されると、前記命令実行回路に対して全てのスレッドについて実行のキャンセルを指示して該全てのスレッドがキャンセル状態となるまで待ち合わせを行ない、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示する実行制御回路と、
を備える演算回路。
【請求項２】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備える請求項１に記載の演算装置。
【請求項３】
前記実行制御回路は、
全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項４】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備え、さらに
前記ハードウェアエラーが通知された第１の実行状態制御回路が前記命令実行回路に対して前記エラースレッドの実行のキャンセルを指示した旨の通知を受けると、該第１の実行状態制御回路以外の第２の実行状態制御回路に対して前記スレッドの実行のキャンセルを指示し、全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記エラースレッドについて、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項５】
前記リトライ制御回路は、前記命令実行回路から前記エラースレッドの実行の完了が通知されたタイミングから、前記１命令の再実行が可能なタイミングを判断する、
ことを特徴とする請求項２に記載の演算装置。
【請求項６】
前記スレッド待ち合わせ回路は、前記実行状態制御回路が前記ハードウェアエラーの通知に応じて前記命令実行回路に対して前記エラースレッドのキャンセルを指示すると、該エラースレッド以外の正常スレッドの実行のキャンセルを前記実行状態制御回路に指示する、
ことを特徴とする請求項３に記載の演算回路。
【請求項７】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出する命令実行処理と、
該ハードウェアエラーを検出すると、前記命令実行処理を行なう命令実行回路に対して、全てのスレッドについて実行のキャンセルを指示し、該全てのスレッドがキャンセル状態となるまで待ち合わせを行なって、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示するリトライ指示処理と、
該リトライ指示に応じて前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行するリトライ処理と、
を演算装置に実行させる命令リトライ方法。
【請求項８】
前記リトライ指示処理は、
前記命令実行回路に対して、前記エラースレッドについて実行のキャンセルを指示するとともに、前記エラースレッド以外の正常スレッドについてスレッド毎に実行のキャンセルを指示し、
前記命令実行回路において、前記エラースレッド及び正常スレッドが全てキャンセル状態となるまで待ち合わせを行ない、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示する、
ことを特徴とする請求項７に記載の命令リトライ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドを同時に処理する演算装置であって、ハードウェア命令のリトライ機能を有する演算装置に関する。
【背景技術】
【０００２】
信頼性を重視するサーバ用プロセサにおいては、命令処理中にエラーを検出すると、その時点で処理していた命令をハードウェアで再実行する命令リトライ処理が行われている。例えば、以下のようなエラーが発生したときに、命令リトライを実行することで、プログラムを異状終了させることなく、処理を継続することができる。
（１）α線などによって一時的にハードウェア内部の状態が変化することで発生するエラー
ハードウェア自体の故障が原因ではないので、命令を再実行したときに同じエラーが発生する可能性は非常に低い。したがって、この類のエラーは、ほぼ確実に命令リトライで回復することができる。
（２）ハードウェア内部の近接配線からのノイズによって発生するエラー
プロセサ内部の信号線がエレクトロマイグレーションなどによって壊れかけている場合には、その信号線に近接する信号線にエラーが発生することがある。このようなエラーは、単一命令のみを再実行することによって、再実行時に近接配線が変動する確率が大幅に減少するので、命令リトライで回復できる可能性が高くなる。【０００３】
図１は、従来の命令リトライ方式を説明する図である。
命令リトライ機構を有する従来の演算装置１００は、図１に示すように、命令実行回路１０１と、実行状態制御回路１０２と、リトライ制御回路１０３と、を備える。【０００４】
命令実行回路１０１は、任意の命令を記憶装置からフェッチし、フェッチした命令に対してデコード処理を行なう。そして、デコードされた命令に応じて演算を実行する。また、命令実行に際して、プログラマブル資源の更新を順次指示するとともに、命令実行中のエラーの有無をチェックする。また、命令実行回路１０１は、命令実行や資源更新が完了すると、リトライ制御回路１０３に通知する。【０００５】
実行状態制御回路１０２は、命令実行回路１０１に対して命令実行のキャンセルを指示する。
リトライ制御回路１０３は、命令実行回路１０１が命令リトライ可能なタイミングを判断し、命令リトライを行なうことが確定したことを示すフラグ（例えばレジスタ）のＯＮ／ＯＦＦを制御する。そして、リトライ可能なタイミングと判断すると、命令実行回路１０１に対して単一命令実行を指示する。【０００６】
命令実行回路１０１は、資源を１つしか更新しない命令の場合、命令実行の完了と資源更新の完了を同一のタイミングで通知するが、複数のサイクルにわけて資源を更新する命令の場合、命令実行の完了と資源更新の完了とを異なるタイミングで通知する。この場合、リトライ制御回路１０３は、資源更新後から命令実行の完了直前まで間はリトライ不可能と判断する。【０００７】
以上の構成において、以下に示すリトライ処理が行なわれる。
（１）命令実行回路１０１は、命令実行中にエラーを検出すると、実行状態制御回路１０２とリトライ制御回路１０３に対してエラー発生を通知する。【０００８】
（２）命令実行回路１０１からエラー発生の通知を受けると、実行状態制御回路１０２は、エラーデータを使って資源の更新が行なわれることを避けるために、即座に命令実行回路１０１に対して命令実行のキャンセルを指示する。【０００９】
（３）命令実行回路１０１からエラー発生の通知を受けると、リトライ制御回路１０３は、リトライ可能なタイミングか否かを判断する。そして、リトライ可能なタイミングであれば、命令リトライを行なうことが確定したことを示すフラグをセットし、命令実行回路１０１に命令の再実行を指示する。【００１０】
一方、（４）実行状態制御回路１０２から命令実行キャンセルの指示を受けると、命令実行回路１０１は、命令実行回路１０１内の処理を全てクリアする。また、命令実行回路１０１は、実行状態制御回路１０２からの命令実行キャンセルの指示が解除されると、リトライ制御回路１０３からの指示にしたがって命令の再実行を行なう。【００１１】
（５）命令の再実行が完了すると、命令実行回路１０１は、命令実行の完了をリトライ制御回路１０３に通知する。
（６）命令実行回路１０１から命令実行の完了の通知を受けると、リトライ制御回路１０３は、命令リトライ処理を行なうことが確定したことを示すフラグをリセットして命令実行回路１０１への再実行の指示を解除する。【００１２】
（７）再実行の指示が解除されると、命令実行回路１０１は、リトライ処理を終了し、通常の命令実行処理を再開する。
ここで、性能を重視するプロセッサにおいては、複数スレッドの命令列を同時に処理することで性能の向上を図るプロセサが提案されている。【００１３】
例えば、１サイクル毎に異なるスレッドの命令列を実行するｆｉｎｅ  ｇｒａｉｎｅｄ  ｖｅｒｔｉｃａｌ  ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇと呼ばれる方式や、複数スレッドの命令列を同時に実行するｓｉｍｕｌｔａｎｅｏｕｓ  ｍｕｌｔｉ−ｔｈｒｅａｄｉｎｇと呼ばれる方法を使用したプロセッサである。この方式は、ある同一時点でみたときに、複数スレッドの命令列を同時に命令実行回路で処理することができる。【００１４】
サーバ用のプロセッサには、高性能かつ高信頼性が要求されるため、複数スレッドの命令列処理を同時に行なうことによる高性能化と、エラー時のリトライ処理による高信頼性と、の両立が要求されている。【００１５】
複数スレッドの命令列を処理するプロセサにおいて、リトライ処理を行なう方法として、以下の２つの方法が考えられる。
（Ａ）従来と同じ単一スレッドの命令列を処理するプロセサの命令リトライ機構を全スレッドに対して共通に一つだけプロセッサに備える方法。
（Ｂ）従来と同じ単一スレッドの命令列を処理するプロセサの命令リトライ機構をスレッド毎に一つずつプロセッサに備える方法。【００１６】
しかし、（Ａ）に示す方法では、エラー発生を検出したタイミングで、複数処理されているスレッドのうちいずれか一つがリトライ不可能な状態であると、命令リトライは不可能となる。即ち、スレッド数が増えれば増えるほど命令リトライ不可能と判断される可能性が高くなる。したがって、リトライ成功率は単一スレッド用プロセサよりも低くなる。【００１７】
また、（Ｂ）に示す方法では、命令リトライはスレッド毎に行われることなる。即ち、あるスレッドでエラーが検出されて命令リトライ処理が行われている間、エラーが検出されていないスレッドの命令列は通常通り実行される。従って、単一スレッド処理プロセサに比べて、命令リトライ処理中に動作する回路量が増える。そのため、例えば、他配線からのノイズにエラー原因がある場合のリトライ成功率は単一スレッド用プロセサよりも低くなる。【００１８】
上記技術に関連する技術として、特許文献１には、命令リトライを何度も繰り返し動作させて検証することができるようにすることによって、高い品質をもった命令リトライ機能を実現することができる情報処理装置について開示されている。【００１９】
特許文献２には、オペランドデータを複数回参照するコマンドを各１回のみオペランドデータを参照するコマンドに分割しておき、実行時にエラーが発生した場合にはそのコマンドのみを再実行する情報処理装置について開示されている。
【特許文献１】特開２００６−０４０１７４号公報
【特許文献２】米国特許第５５６４０１４号明細書
【発明の開示】
【００２０】
本発明は、上述した問題に鑑みてなされたものであり、その解決しようとする課題は、単一スレッドの命令列を処理するプロセッサと同等のリトライ成功率を実現する複数スレッドの命令列を同時に処理できるプロセッサを提供することである。
【００２１】
上記課題を解決するために、本発明に係る演算装置は、複数のスレッドを並列的に実行し、該実行中に発生するハードウェアエラーを検出して通知する命令実行回路と、該命令実行回路から前記ハードウェアエラーが通知されると、前記命令実行回路に対して全スレッドについて実行のキャンセルを指示して該全スレッドがキャンセル状態となるまで待ち合わせを行ない、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示する実行制御回路と、を備える。
【００２２】
本発明によると、実行制御回路は、全スレッドの実行をキャンセルし、かつ、全スレッドがキャンセル状態となるまで待ち合わせを実行する。そして、全スレッドがキャンセル状態となると、命令実行回路に対して１命令だけ再実行を指示する。
【００２３】
したがって、再実行の指示によって動作する回路以外の他の回路は動作しないので、当該他の回路からのノイズによるエラーの発生を回避することが可能となる。
また、実行制御回路は、全スレッドがキャンセル状態となるまで待ち合わせて、命令実行回路に再実行を指示するので、命令実行回路は確実に指示されたスレッドについて再実行することができる。
【００２４】
その結果、複数スレッドの命令列を同時に処理できるプロセッサにおけるハードウェアエラー時の再実行の成功率を向上することが可能となる。
以上のように、本発明によると、単一スレッドの命令列を処理するプロセッサと同等のリトライ成功率を実現する複数スレッドの命令列を同時に処理できるプロセッサを提供することができる。
【図面の簡単な説明】
【００２５】
【図１】従来の命令リトライ方式を説明する図である。
【図２】本実施例に係る演算装置の動作原理を説明する図である。
【図３】本実施例に係る演算装置の全体構成の概要を示す図である。
【図４】本実施例に係る実行状態制御回路の構成例を示す図である。
【図５】本実施例に係るリトライ制御回路の構成例を示す図である。
【図６】本実施例に係るスレッド待ち合わせ回路の構成例を示す図である。
【図７】本実施例に係る命令実行回路の構成例を示す図である。
【図８】本発明に係る演算装置の動作を説明するフローチャートである。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施形態について、図２〜図８に基づいて説明する。
図２は、本実施例に係る演算装置２００の動作原理を説明する図である。
図２に示す演算装置２００は、複数のスレッドを実行する命令実行回路２０１と、各スレッドについての実行状態や再実行を制御する実行制御回路２０２と、を備える。【００２７】
命令実行回路２０１は、１以上の命令列からなる複数のスレッドを並列的に処理する回路である。例えば、各スレッドに対して、命令フェッチ、命令デコード、演算実行、命令完了、プログラマブル資源更新の指示、命令実行中のハードウェアエラーのチェック等を行なう。【００２８】
そして、命令実行回路２０１は、各スレッドについて命令実行中にハードウェアエラーを検出すると、実行制御回路２０２に当該ハードウェアエラーを通知する（以下、この通知を単に「エラー通知」という）。【００２９】
また、命令実行回路２０１は、実行制御回路２０２から特定のスレッドについて実行のキャンセルの指示（以下、この指示を「キャンセル指示」という）を受けると、当該スレッドについての実行をキャンセルする。【００３０】
また、命令実行回路２０１は、実行制御回路２０２から特定のスレッドについて再実行の指示（以下、「リトライ指示」という）を受けたもののうち、図示しない実行状態制御回路３０２からの実行のキャンセルを解除する指示（以下、この指示を「キャンセル解除指示」という）を受けたスレッドについて、１命令だけ再実行を行なう。【００３１】
実行制御回路２０２は、命令実行回路２０１からエラー通知を受けると、命令実行回路２０１に対して、ハードウェアエラーが発生した時に実行していたスレッド（以下、「エラースレッド」という）のキャンセル指示を行なうとともに、当該エラースレッドのリトライ指示を行なう。【００３２】
この時、実行制御回路２０２は、命令実行回路２０１に対して、エラースレッド以外の実行中のスレッド（以下、「正常スレッド」という）についても実行のキャンセルを指示する。【００３３】
そして、実行制御回路２０２は、命令実行回路２０１におけるスレッドの実行状態を監視して、全スレッドの実行がキャンセルされるまで待ち合わせを行なう。
また、全スレッドの実行がキャンセルされると、実行制御回路２０２は、命令実行回路２０１に対して、エラースレッドについてキャンセル解除指示を行なって１命令だけ再実行させる。実行制御回路２０２は、１スレッドずつ再実行を行ない、全てのエラースレッドについて再実行が完了すると、リトライ処理を終了する。【００３４】
図３は、本実施例に係る演算装置２００の全体構成の概要を示す図である。
図３に示すように演算装置２００は、複数のスレッドを実行する命令実行回路２０１と、各スレッドについての実行状態や再実行を制御する実行制御回路２０２と、各スレッドの実行に使用するプログラマブル資源３０１−１、３０１−２、・・・、３０１−ｎ（ｎは自然数。以下、任意のプログラマブル資源を指す場合には「プログラマブル資源３０１」と記載する）と、を備える。【００３５】
そして、実行制御回路２０２は、スレッド毎に、スレッドの実行状態を制御する実行状態制御回路３０２−１、３０２−２、・・・、３０２−ｎと、スレッドの再実行を制御するリトライ制御回路３０３−１、３０３−２、・・・、３０３−ｎと、を備え、さらに、リトライ実行に際して全スレッドがキャンセルされるまで待ち合わせを行なう待ち合わせ回路３０４と、を備える。【００３６】
なお、任意の実行状態制御回路３０２−１〜３０２−ｎを指す場合には「実行状態制御回路３０２」と記載する。同様に、任意のリトライ制御回路３０３−１〜３０３−ｎを指す場合には「リトライ制御回路３０３」と記載する。【００３７】
命令実行回路２０１は、図２で説明したように、１以上の命令列からなる複数のスレッドを並列的に処理する。例えば、各スレッドについて、命令フェッチ、命令デコード、演算実行、命令完了、プログラマブル資源更新の指示、命令実行中のハードウェアエラーのチェック等を行なう。【００３８】
命令実行回路２０１は、命令実行中又は命令実行完了時にプログラマブル資源３０１の更新を行なうと、更新したプログラマブル資源３０１を使用するスレッドを管理するリトライ制御回路３０３に対して資源の更新を通知する（以下、この通知を「資源更新通知」という）。【００３９】
また、命令実行回路２０１は、任意のスレッドについて命令実行が完了すると、当該スレッドを管理するリトライ制御回路３０３とスレッド待ち合わせ回路３０４に対して命令実行の完了を通知する（以下、この通知を「命令完了通知」という）。【００４０】
また、命令実行回路２０１は、命令実行中のハードウェアエラーを検出すると、エラースレッドを管理する実行状態制御回路３０２に対してエラー通知を行なう。
また、命令実行回路２０１は、実行状態制御回路３０２からキャンセル指示を受けると、その実行状態制御回路３０２が管理するスレッドの命令実行処理を全てクリア（キャンセル）し、そのスレッドのプログラマブル資源の更新を中止する。そして、実行状態制御回路３０２からキャンセル解除通知を受けるまで、この状態を維持する。【００４１】
また、命令実行回路２０１は、リトライ制御回路３０３からリトライ指示を受けたスレッドのうち、実行状態制御回路３０２からキャンセル解除通知を受けたスレッドについて、１命令だけ再実行を行なう。【００４２】
実行状態制御回路３０２は、命令実行回路２０１からエラー通知を受け、又は、スレッド待ち合わせ回路３０４からキャンセル指示を受けると、命令実行回路２０１に対して、キャンセル指示を行なう。【００４３】
この時、実行状態制御回路３０２は、当該スレッドがキャンセルされた状態であることをスレッド待ち合わせ回路３０４に通知する。
また、実行状態制御回路３０２は、スレッド待ち合わせ回路３０４からキャンセル解除指示を受けると、図示しないが命令実行回路２０１に対して、当該スレッドについてキャンセル解除指示を行なう。【００４４】
リトライ制御回路３０３は、命令実行回路２０１からエラー通知を受けると、命令実行回路２０１からの命令完了通知や資源更新通知に基づいて、当該スレッドについてリトライ可能なタイミングか否かを判断する。リトライが可能なタイミングにある場合（以下、この状態を「リトライ確定状態」という）、命令実行回路２０１に対してリトライ指示を行なうとともに、スレッド待ち合わせ回路３０４に対して当該スレッドがリトライ確定状態にあることを通知する（以下、この通知を「リトライ確定通知」という）。【００４５】
スレッド待ち合わせ回路３０４は、リトライ制御回路３０３からリトライ確定通知を受けると、命令実行回路２０１から命令完了通知を受けた全スレッドの実行状態制御回路３０２に対して、キャンセル指示を行なう。【００４６】
そして、スレッド待ち合わせ回路３０４は、各スレッドを管理する実行状態制御回路３０２からのキャンセル状態通知を監視して、全スレッドがキャンセルされるまで待ち合わせを行なう。【００４７】
そして、スレッド待ち合わせ回路３０４は、リトライ確定状態にあるスレッドの中から１スレッド選択し、当該スレッドを管理する実行状態制御回路３０２に対してキャンセル解除指示を行なう。キャンセル解除指示を受けた実行状態制御回路３０２は、上述したように、図示しないが実行状態制御回路３０２から命令実行回路２０１に対して当該キャンセル解除指示を行なうので、当該スレッドについて１命令だけリトライ処理が行なわれることとなる。（この処理は、リトライ確定状態にある全てのスレッドに対して行なわれる）。【００４８】
そして、スレッド待ち合わせ回路３０４は、リトライ確定状態にある全スレッドについてリトライ処理が完了すると、全ての実行状態制御回路３０２に対してキャンセル解除指示を行なって、リトライ処理を終了する。【００４９】
以下、各回路の具体的な構成例について説明する。
図４は、本実施例に係る実行状態制御回路３０２の構成例を示す図である。
図４に示す実行状態制御回路３０２は、論理演算を行なう論理和回路ａと、状態の保持・遷移が可能なレジスタ（例えば、ＲＳ−ＦＦ）４０１と、で構成される。【００５０】
論理和回路ａは、命令実行回路２０１からのエラー通知と、スレッド待ち合わせ回路３０４からのキャンセル指示と、を入力とする。レジスタ４０１は、セット側に論理和回路ａの出力、リセット側にスレッド待ち合わせ回路３０４からのキャンセル解除指示を入力とする。【００５１】
エラー通知が「１」、又は、キャンセル指示が「１」となると、論理和回路ａは「１」を出力し、レジスタ４０１に「１」がセットされる。そして、レジスタ４０１は、セットされた値を保持する。この時のレジスタ４０１の状態を「キャンセル状態」という。また、キャンセル解除指示が「１」となると、レジスタ４０１が「０」にセットされる（キャンセル状態が解除される）。【００５２】
レジスタ４０１の出力は、命令実行回路２０１とスレッド待ち合わせ回路３０４とに入力される。命令実行回路２０１への出力がキャンセル指示（キャンセル解除指示）であり、スレッド待ち合わせ回路３０４への出力がキャンセル状態通知である。【００５３】
したがって、実行状態制御回路３０２は、命令実行回路２０１からエラー通知、または、スレッド待ち合わせ回路３０４からキャンセル指示を受けると、キャンセル状態にセットされ、命令実行回路２０１に対してキャンセル指示を行なうとともに、スレッド待ち合わせ回路３０４に対してキャンセル状態通知を行なう。また、実行状態制御回路３０２は、スレッド待ち合わせ回路３０４からキャンセル解除指示を受けると、キャンセル状態解除され、命令実行回路２０１に対してキャンセル解除指示を行なう。【００５４】
図５は、本実施例に係るリトライ制御回路３０３の構成例を示す図である。
図５に示すリトライ制御回路３０３は、状態の保持・遷移が可能なレジスタ（例えば、ＲＳ−ＦＦ）５０１及び５０２と、論理演算を行なう論理積回路ｂ、否定論理積回路ｃ及び否定回路ｄと、で構成される。【００５５】
レジスタ５０１は、セット側に命令実行回路２０１からの命令完了通知、リセット側に命令実行回路２０１からの資源更新通知を入力とする。また、レジスタ５０２は、セット側に論理積回路ｂからの出力、リセット側に命令実行回路２０１からの命令完了通知を入力とする。また、論理積回路ｂは、レジスタ５０１の出力、否定論理積回路ｃの出力、命令実行回路２０１からのエラー通知、を入力とする。また、否定論理積回路ｃは、命令実行回路２０１からの命令完了通知を入力とする否定回路ｄの出力、命令実行回路２０１からの資源更新通知、を入力とする。【００５６】
レジスタ５０１は、命令完了通知が「１」となると「１」にセットされ、資源更新通知が「１」となると「０」にセットされる。したがって、レジスタ５０１は、命令完了以外のタイミングで資源更新通知が行われたときにリセットされ、命令完了通知を受けたタイミングでセットされる。以下、このレジスタ５０１をＲＥＴＲＹ＿ＰＯＩＮＴという。【００５７】
論理積回路ｂは、ＲＥＴＲＹ＿ＰＯＩＮＴが「１」、否定論理積回路ｃの出力が「１」、かつ、エラー通知が「１」の場合のみ「１」を出力する。
否定論理積回路ｃは、命令完了通知が「０」、かつ、資源更新通知が「１」以外の場合に「１」を出力する。すなわち、資源更新通知が入力されない限り「１」を出力する。【００５８】
レジスタ５０２は、論理積回路ｂの出力が「１」となると「１」にセットされ、命令完了通知が「１」となると「０」にセットされる。以下、このレジスタ５０２をＲＥＴＲＹ＿ＴＧＲといい、ＲＥＴＲＹ＿ＴＧＲが「１」に設定されたことを、「リトライが確定」したという。【００５９】
ＲＥＴＲＹ＿ＴＧＲの出力は、命令実行回路２０１とスレッド待ち合わせ回路３０４とに入力される。命令実行回路２０１への出力がリトライ指示であり、スレッド待ち合わせ回路３０４への出力がリトライ確定通知である。【００６０】
以上から、リトライ制御回路３０３は、命令完了通知を受けてから資源更新通知を受けるまでの間に、エラー通知を受けるとリトライが確定し、命令完了通知を受けるとリトライ確定が解除される。【００６１】
図６は、本実施例に係るスレッド待ち合わせ回路３０４の構成例を示す図である。
図６に示すスレッド待ち合わせ回路３０４は、各スレッドを管理する実行状態制御回路３０２に対してキャンセル指示を行なうキャンセル指示部６０１と、各スレッドを管理する実行状態制御回路３０２に対してキャンセル解除指示を行なうキャンセル解除指示部６０２と、を備える。【００６２】
キャンセル指示部６０１は、スレッド１のキャンセル指示を行なうキャンセル指示部６０３−１、スレッド２のキャンセル指示を行なうキャンセル指示部６０３−２、・・・、スレッドｎのキャンセル指示を行なうキャンセル指示部６０３−n、を備える。【００６３】
例えば、キャンセル指示部６０３−１は、スレッド１以外の全スレッド（スレッド２〜ｎ）のＲＥＴＲＹ＿ＴＧＲを入力とする論理和回路ｅと、命令実行回路２０１からのスレッド１についての命令完了通知と論理和回路ｅの出力を入力とする論理積回路ｆと、で構成される。【００６４】
論理和回路ｅは、スレッド１以外の少なくとも１つ以上のスレッドについてＲＥＴＲＹ＿ＴＧＲが「１」となると、「１」を出力する。論理積回路ｆは、命令実行回路２０１からのスレッド１についての命令完了通知が「１」、かつ、論理和回路ｅの出力が「１」の時に、「１」を出力する。【００６５】
したがって、キャンセル指示部６０３−１は、スレッド１以外のスレッドでリトライが確定し、スレッド１の命令が完了すると、スレッド１に対してキャンセル指示を出力する。【００６６】
同様に、キャンセル指示部６０３−ｍ（ｍは自然数）は、スレッドｍ以外の全スレッド（スレッド１〜ｍ−１及びスレッドｍ＋１〜ｎ）のＲＥＴＲＹ＿ＴＧＲを入力とする論理和回路ｅと、命令実行回路２０１からのスレッドｍについての命令完了通知と論理和回路ｅの出力を入力とする論理積回路ｆと、で構成される。【００６７】
論理和回路ｅは、スレッドｍ以外の少なくとも１つ以上のスレッドについてＲＥＴＲＹ＿ＴＧＲが「１」となると、「１」を出力し、論理積回路ｆは、命令実行回路２０１からのスレッドｍについての命令完了通知が「１」、かつ、論理和回路ｅの出力が「１」の時に、「１」を出力する。【００６８】
したがって、キャンセル指示部６０３−ｍは、スレッドｍ以外のスレッドでリトライが確定し、スレッドｍの命令が完了すると、スレッドｍに対してキャンセル指示を出力する。【００６９】
キャンセル解除指示部６０２は、実行状態制御回路３０２に対して、スレッド１のキャンセル解除指示を行なうキャンセル解除指示部６０４−１、スレッド２のキャンセル解除指示を行なうキャンセル解除指示部６０４−２、・・・、スレッドｎのキャンセル解除指示を行なうキャンセル解除指示部６０４−ｎと、全スレッドについてキャンセルの待ち合わせを行なう待ち合わせ部６０５と、を備える。【００７０】
キャンセル解除指示部６０４−１は、スレッド１のＲＥＴＲＹ＿ＴＧＲを入力とする否定回路ｃ１と、スレッド２〜ｎのＲＥＴＲＹ＿ＴＧＲを入力とする論理和回路ｄと、否定回路ｃ１の出力と論理和回路ｄの出力を入力とする論理積回路ｅと、論理積回路ｅの出力と待ち合わせ部６０５の出力を入力とする論理和回路ｆと、論理和回路ｆの出力を入力とする否定回路ｇと、で構成される。【００７１】
否定回路ｃ１は、スレッド１のＲＥＴＲＹ＿ＴＧＲが「０」の時に「１」を出力する。論理和回路ｄは、スレッド１以外のスレッドのＲＥＴＲＹ＿ＴＧＲが「１」の時に「１」を出力する。論理積回路ｅは、否定回路ｃ１が「１」、かつ、論理和回路ｄが「１」の時のみ論理和回路ｆに「１」を出力する。【００７２】
したがって、キャンセル解除指示部６０４−１は、スレッド１以外のスレッドについて命令リトライが確定している場合に、待ち合わせ部６０５による待ち合わせが完了すると、スレッド１に対してキャンセル解除指示を行なう。【００７３】
同様に、キャンセル解除指示部６０４−ｍは、スレッド１、２、・・・、ｍのＲＥＴＲＹ＿ＴＧＲを入力とする否定回路ｃ１、ｃ２、・・・、ｃｍと、スレッドｍ＋１、ｍ＋２、・・・、ｎのＲＥＴＲＹ＿ＴＧＲを入力とする論理和回路ｄと、否定回路ｃ１、ｃ２、・・・、ｃｍの出力と論理和回路ｄの出力を入力とする論理積回路ｅと、論理積回路ｅの出力と待ち合わせ部６０５の出力を入力とする論理和回路ｆと、論理和回路ｆの出力を入力とする否定回路ｇと、で構成される。【００７４】
否定回路ｃ１、ｃ２、・・・、ｃｍはそれぞれスレッド１、２、・・・、ｍのＲＥＴＲＹ＿ＴＧＲが「０」の時に「１」を出力する。論理和回路ｄは、スレッドｃ１、ｃ２、・・・、ｃｍ以外のスレッドのＲＥＴＲＹ＿ＴＧＲが「１」の時に「１」を出力する。論理積回路ｅは、否定回路ｃ１、c２、・・・、ｃｍが「１」、かつ、スレッドｍ＋１、ｍ＋２、・・・、ｎのＲＥＴＲＹ＿ＴＧＲが「１」の時のみ論理和回路ｆに「１」を出力する。【００７５】
したがって、キャンセル解除指示部６０４−ｍは、スレッド１、２、・・・、ｍ以外のスレッドについて命令リトライが確定している場合に、待ち合わせ部６０５による待ち合わせが完了すると、スレッドｍに対してキャンセル解除指示を行なう。【００７６】
待ち合わせ部６０５は、各実行状態制御回路３０２からのスレッド１、２、・・・、ｎについてのキャンセル状態通知を入力とする論理積回路ｈと、論理積回路ｈの出力を入力とする否定回路ｉと、スレッド１、２、・・・、ｎについてのＲＥＴＲＹ＿ＴＧＲを入力とする論理和回路ｊと、否定回路ｉの出力と論理和回路ｊの出力を入力とする論理積回路ｋと、を備える。【００７７】
待ち合わせ部６０５は、スレッド１、２、・・・、ｎの少なくとも１つ以上のスレッドのＲＥＴＲＹ＿ＴＧＲが「１」、かつ、全スレッドについてキャンセル状態通知が「１」となった場合のみ、論理和回路ｆに「０」を出力し、その他の場合には、論理和回路ｆに「１」を出力する。【００７８】
したがって、待ち合わせ部６０５は、スレッド１、２、・・・、ｎの少なくとも１つ以上のスレッドについてリトライが確定した場合に、全スレッドがキャンセル状態となるまで待ち合わせを行ない、全スレッドがキャンセル状態になると各スレッドに対するキャンセル解除指示を許可する。【００７９】
図７は、本実施例に係る命令実行回路２０１の構成例を示す図である。
図７に示す命令実行回路２０１は、スレッド毎の命令列の取り出し処理を制御する命令フェッチ制御回路７０１と、取り出した命令列を一時的に記憶する命令バッファ７０２と、命令列をデコードする命令デコーダ７０３と、分岐命令の分岐アドレスの計算等を行なう分岐命令制御回路７０４と、命令に応じた演算を行なう演算ユニット７０５と、命令列順に命令を完了させてプログラム資源の更新を指示する命令コミット制御回路７０６と、を備える。【００８０】
命令フェッチ制御回路７０１は、キャッシュ回路７０７に対してスレッド毎に命令列の取り出しを指示し、取り出された命令列を命令バッファ７０２に格納する。また、リトライ制御回路３０３からリトライ指示を受け、かつ、実行状態制御回路３０２からのキャンセル解除指示によってキャンセル状態が解除されると、当該スレッドの命令列の取り出しをキャッシュ回路７０７に指示する。【００８１】
命令デコーダ７０３は、命令バッファ７０２からスレッド毎に命令列取り出してデコードし、デコードの結果に応じて、分岐制御回路７０４、演算ユニット７０５、命令コミット制御回路７０６などに命令を発行する。また、リトライ制御回路３０３からリトライ指示を受け、かつ、実行状態制御回路３０２からのキャンセル解除指示によってキャンセル状態が解除されると、命令バッファ７０２から命令を取り出して１命令だけ再実行する。【００８２】
分岐制御回路７０４は、複数スレッドの分岐命令の分岐アドレスの計算や分岐方向の確定などの分岐命令処理を行なった後、分岐命令処理の完了を命令コミット制御回路７０６に通知する。【００８３】
演算ユニットは７０５、各スレッドの命令に応じた演算を行って、演算処理完了を命令コミット制御回路７０６に通知する。
命令コミット制御回路７０６は、分岐制御回路７０４や演算ユニット７０５などからの処理の完了通知を受け取り、その命令に必要な処理が全て完了すると、命令列順序にしたがって命令を完了させる。そして、リトライ制御回路３０３とスレッド待ち合わせ回路３０４に対して命令完了を通知する。また、必要に応じてプログラマブル資源の更新を指示するとともに、リトライ制御回路３０３に対して資源更新を通知する。【００８４】
以上に説明した命令実行回路２０１内の各回路には、図示しないがハードウェアエラーを検出するエラー検出回路が備わっている。そして、命令実行中にハードウェアエラーを検出すると、エラー検出回路は、エラースレッドを管理する実行状態制御回路３０２とリトライ制御回路３０３にエラー通知を行なう。【００８５】
また、命令フェッチ制御回路７０１、命令バッファ７０２、命令デコーダ７０３、分岐命令制御回路７０４、演算ユニット７０５、及び命令コミット制御回路７０６の各回路は、実行状態制御回路３０２からキャンセル指示を受けると、その実行状態制御回路３０２が管理するスレッドについての処理を停止して状態をクリアする（当該スレッドをキャンセルする）。【００８６】
さらに、上述のようにリトライ制御回路３０３からリトライ指示を受け、かつ、実行状態制御回路３０２からキャンセル解除指示を受けると、命令実行回路２０１は、実行状態制御回路３０２及びリトライ制御回路３０３が管理するスレッドについてリトライ処理を行なう。なお、１命令だけを実行する処理については、一般に演算装置に備わる機能を使用すればよいので詳細な説明は省略する。【００８７】
図８は、本発明に係る演算装置２００の動作を説明するフローチャートである。
ステップＳ８０１において、命令実行回路２０１は、各スレッドについて命令実行中にハードウェアエラーを検出すると、エラースレッドを管理する実行状態制御回路３０２とリトライ制御回路３０３とにエラー通知を行なう。【００８８】
ステップＳ８０２において、エラー通知を受けた実行状態制御回路３０２は、命令実行回路２０１に対して、自身が管理するスレッドについての命令実行のキャンセル指示を行なう。【００８９】
ステップＳ８０３において、エラー通知を受けたリトライ制御回路３０３は、自身が管理するスレッドについてリトライ可能か否かを判断する。リトライが可能でないと判断した場合、リトライ制御回路３０３は、処理をステップＳ８０４に移行する。【００９０】
ステップＳ８０４において、演算装置２００は、エラートラップを設定し、実行中のソフトウェアによるエラー処理（例えば、割り込みハンドラ）等を実行する。
ステップＳ８０３において、リトライが可能と判断すると、リトライ制御回路３０３は、処理をステップＳ８０５に移行する。【００９１】
ステップＳ８０５において、リトライ制御回路３０３は、ＲＥＴＲＹ＿ＴＧＲに「１」をセットして、リトライを確定状態にセットする。
ステップＳ８０６において、スレッド待ち合わせ回路３０４は、全スレッドについて命令実行がキャンセルされたか否かを判断する。そして、まだキャンセルされていないスレッドが存在する場合、スレッド待ち合わせ回路３０４は、処理をステップＳ８０７に移行する。【００９２】
ステップＳ８０７において、スレッド待ち合わせ回路３０４は、キャンセルされていない正常スレッドの命令実行が完了したか否かを判断する。命令実行が完了しない場合には、再帰的にステップＳ８０７の処理を実行する。【００９３】
ステップＳ８０７において、キャンセルされていない正常スレッドから命令完了通知を受けると、スレッド待ち合わせ回路３０４は、処理をステップＳ８０８に移行する。
ステップＳ８０８において、スレッド待ち合わせ回路３０４は、実行状態制御回路３０２に対して、当該スレッドの命令実行のキャンセルを指示する。そして、処理をステップＳ８０６に移行する。【００９４】
以上に説明したステップＳ８０６〜Ｓ８０８の処理によって、スレッド待ち合わせ回路３０４は、全スレッドがキャンセルされるまで待ち合わせを行なう。
ステップＳ８０６において、全スレッドについて命令実行がキャンセルされると、スレッド待ち合わせ回路３０４は、処理をステップＳ８０９に移行する。【００９５】
ステップＳ８０９において、スレッド待ち合わせ回路３０４は、ステップＳ８０５の処理でＲＥＴＲＹ＿ＴＧＲに「１」が設定されたスレッドから１つを選択する。以下、選択されたスレッドを「選択スレッド」という。【００９６】
ステップＳ８１０において、スレッド待ち合わせ回路３０４は、選択スレッドを管理する実行状態制御回路３０２に対して、キャンセル解除指示を行なう。
ステップＳ８１１において、命令実行回路２０１は、選択スレッドについてキャンセルが解除されると、選択スレッドについて１命令だけ再実行を行なう。そして、処理をステップＳ８１２に移行する。【００９７】
ステップＳ８１２において、リトライ制御回路３０３は、再実行が完了したか否かを判断する。例えば、命令実行回路２０１から送られる選択スレッドについての命令完了通知を検出する。命令完了通知が検出されない場合、ステップＳ８１２の処理を再帰的に実行する。【００９８】
ステップＳ８１２において、命令完了通知が検出されると、リトライ制御回路３０３は、再実行が完了したと判断し、処理をステップＳ８１３に移行する。
ステップＳ８１３において、リトライ制御回路３０３は、ステップＳ８０５でセットしたＲＥＴＲＹ＿ＴＧＲを「０」にリセットして、リトライの確定状態を解除する。【００９９】
ステップＳ８１４において、スレッド待ち合わせ回路３０４は、ステップＳ８０５で命令リトライが確定状態となった全スレッドについて、ステップＳ８０９〜Ｓ８１３の再実行処理が完了したか否かを判断する。【０１００】
再実行していないスレッドが存在する場合、スレッド待ち合わせ回路３０４は、処理をステップＳ８１５に移行し、実行状態制御回路３０２に対して選択スレッドの命令実行のキャンセルを指示する。そして、ステップＳ８０９〜Ｓ８１４の処理を行なう。【０１０１】
ステップＳ８１４において、ステップＳ８０５でリトライが確定した全スレッドについて、ステップＳ８０９〜Ｓ８１３の再実行処理が完了したと判断すると、スレッド待ち合わせ回路３０４は、処理をステップＳ８１６に移行する。【０１０２】
ステップＳ８１６において、スレッド待ち合わせ回路３０４は、全実行状態制御回路３０２に対して、スレッドのキャンセル解除を指示する。そして、処理をステップＳ８１７に移行する。【０１０３】
ステップＳ８１７において、命令実行回路２０１は、全スレッドに対して正常処理を開始する。
以上に説明したように、演算装置２００は、命令実行回路２０１で命令実行中にハードウェアエラーが発生すると、全スレッドの実行をキャンセルする。そして、全スレッドがキャンセル状態となるまで待ち合わせを行なう。そして、全スレッドがキャンセル状態となると、エラースレッドに対して１命令だけ再実行を行なう。【０１０４】
演算装置２００は、全スレッドをキャンセル状態にして１のエラースレッドについて再実行を行なうので、例えば、他配線からのノイズを原因とするハードウェアエラーを回避することができる。【０１０５】
また、演算装置２００は、全スレッドについてキャンセル状態となるまで待ち合わせてから（リトライ可能なタイミングまで待ち合わせてから）、再実行を行なうので、確実にエラースレッドについての再実行を行なうことが可能となる。【０１０６】
その結果、高いリトライ成功率を実現することが可能となる。また、リトライ成功率が高くなるので、演算装置２００の信頼性を向上させることが可能となる。
また、演算装置２００は、リトライ処理中に動作する回路量が抑えられるので、複数スレッドの命令列を同時に処理するプロセッサであっても、単一スレッドの命令列を処理するプロセッサと同様にリトライを成功することが可能となる。
【図１】
2008155803.tif 000003
【図２】
2008155803.tif 000004
【図３】
2008155803.tif 000005
【図４】
2008155803.tif 000006
【図５】
2008155803.tif 000007
【図６】
2008155803.tif 000008
【図７】
2008155803.tif 000009
【図８】
2008155803.tif 000010
【手続補正書】
【提出日】平成21年7月30日(2009.7.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出して通知する命令実行回路と、
該命令実行回路から前記ハードウェアエラーが通知されると、前記命令実行回路に対して全てのスレッドについて実行のキャンセルを指示して該全てのスレッドがキャンセル状態となるまで待ち合わせを行ない、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示する実行制御回路と、
を備える演算回路。
【請求項２】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備える請求項１に記載の演算装置。
【請求項３】
前記実行制御回路は、
全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項４】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備え、さらに
前記ハードウェアエラーが通知された第１の実行状態制御回路が前記命令実行回路に対して前記エラースレッドの実行のキャンセルを指示した旨の通知を受けると、該第１の実行状態制御回路以外の第２の実行状態制御回路に対して前記スレッドの実行のキャンセルを指示し、全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記エラースレッドについて、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項５】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出する命令実行処理と、
該ハードウェアエラーを検出すると、前記命令実行処理を行なう命令実行回路に対して、全てのスレッドについて実行のキャンセルを指示し、該全てのスレッドがキャンセル状態となるまで待ち合わせを行なって、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示するリトライ指示処理と、
該リトライ指示に応じて前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行するリトライ処理と、
を演算装置に実行させる命令リトライ方法。
【手続補正書】
【提出日】平成22年1月5日(2010.1.5)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出して通知する命令実行回路と、
該命令実行回路から前記ハードウェアエラーが通知されると、前記命令実行回路に対して全てのスレッドについて実行のキャンセルを指示して該全てのスレッドがキャンセル状態となるまで待ち合わせを行ない、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示する実行制御回路と、
を備える演算装置。
【請求項２】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備える請求項１に記載の演算装置。
【請求項３】
前記実行制御回路は、
全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項４】
前記実行制御回路は、前記スレッド毎に、
前記命令実行回路に対して前記スレッドの実行のキャンセルを指示して前記スレッドの実行状態を制御する実行状態制御回路と、
前記命令実行回路における前記エラースレッドの実行状態から前記１命令の再実行が可能なタイミングを検出し、前記命令実行回路に対して前記１命令の再実行を指示するリトライ制御回路と、
を備え、さらに
前記ハードウェアエラーが通知された第１の実行状態制御回路が前記命令実行回路に対して前記エラースレッドの実行のキャンセルを指示した旨の通知を受けると、該第１の実行状態制御回路以外の第２の実行状態制御回路に対して前記スレッドの実行のキャンセルを指示し、全てのスレッドがキャンセル状態となるまで前記スレッドの実行状態を監視し、全てのスレッドの実行状態がキャンセル状態となると、前記エラースレッドについて、前記リトライ制御回路に対して前記命令実行回路に前記１命令を再実行させるように指示するスレッド待ち合わせ回路、
を備える請求項１に記載の演算装置。
【請求項５】
複数のスレッドを実行し、該実行中に発生するハードウェアエラーを検出する命令実行処理と、
該ハードウェアエラーを検出すると、前記命令実行処理を行なう命令実行回路に対して、全てのスレッドについて実行のキャンセルを指示し、該全てのスレッドがキャンセル状態となるまで待ち合わせを行なって、前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行を指示するリトライ指示処理と、
該リトライ指示に応じて前記ハードウェアエラーが発生したエラースレッドについて１命令だけ再実行するリトライ処理と、
を演算装置に実行させる命令リトライ方法。
【国際調査報告】
2008155803.tif 000011
2008155803.tif 000012
2008155803.tif 000013