(57)【要約】【課題】  本発明の目的は、間欠故障の可能性を減らして安定動作を実現することが可能な情報処理装置およびプロセッサの処理方法を提供することにある。【解決手段】  本発明の情報処理装置は、命令をフェッチする命令フェッチ手段と、フェッチされた命令をデコードする命令デコード手段と、デコードされた命令を実行する複数の実行回路と、命令制御手段とを備える。命令制御手段は、故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを確認し、電気的に安定している場合に当該命令を実行回路に実行させることを特徴とする。【選択図】      図１
2011128709.tif 000002
【特許請求の範囲】
【請求項１】
命令をフェッチする命令フェッチ手段と、
前記フェッチされた命令をデコードする命令デコード手段と、
前記デコードされた命令を実行する複数の実行回路と、
故障発生の可能性が高い命令がデコードされた場合、前記実行回路が電気的に安定しているか否かを確認し、電気的に安定している場合に当該命令を前記実行回路に実行させる命令制御手段と、
を備えることを特徴とする情報処理装置。
【請求項２】
前記命令制御手段は、故障発生の可能性が高い命令に対する先行命令が全て実行完了している場合に電気的に安定していると判断することを特徴とする請求項１記載の情報処理装置。
【請求項３】
過去に故障を発生させた命令種別の情報が格納された記憶手段を備え、
前記命令制御手段は、前記命令種別の情報に基づいて、故障発生の可能性が高い命令がデコードされたか否かを判断することを特徴とする請求項１または２記載の情報処理装置。
【請求項４】
各実行回路はフラグを備えており、
前記各実行回路は、故障が発生すると前記フラグを点灯させ、前記フラグが点灯していない状態で故障が発生した場合に間欠故障が発生したと判断することを特徴とする請求項１ないし３のいずれかに記載の情報処理装置。
【請求項５】
前記各実行回路において前記間欠故障が発生したと判断された場合に、当該間欠故障を発生させた命令種別の情報を前記記憶手段に登録する手段を備えることを特徴とする請求項４記載の情報処理装置。
【請求項６】
前記フラグの点灯時に故障が発生した場合に、前記各実行回路は、固定故障が発生したと判断することを特徴とする請求項４または５のいずれかに記載の情報処理装置。
【請求項７】
前記各実行回路における命令実行状態を管理するスケジューリング手段を備え、
前記命令制御手段は、故障発生の可能性が高い命令がデコードされた場合、前記実行回路が電気的に安定しているか否かを前記スケジューリング手段に問い合わせることを特徴とする請求項１ないし６のいずれかに記載の情報処理装置。
【請求項８】
命令をフェッチする命令フェッチステップと、
前記フェッチされた命令をデコードする命令デコードステップと、
故障発生の可能性が高い命令がデコードされた場合、前記実行回路が電気的に安定しているか否かを判断する第１の判断ステップと、
電気的に安定している場合に当該命令を実行回路に実行させる命令実行ステップと、
を有することを特徴とするプロセッサの処理方法。
【請求項９】
前記第１の判断ステップにおいて、故障発生の可能性が高い命令に対する先行命令が全て実行完了している場合に、電気的に安定していると判断することを特徴とする請求項８記載のプロセッサの処理方法。
【請求項１０】
過去に故障を発生させた命令種別の情報を記憶手段に格納する格納ステップと、
前記命令種別の情報に基づいて、故障発生の可能性が高い命令がデコードされたか否かを判断する第２の判断ステップと、
を有することを特徴とする請求項８または９記載のプロセッサの処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置およびプロセッサの処理方法に関し、特に間欠故障の可能性を減らして安定動作を実現することが可能な情報処理装置（プロセッサ等）およびプロセッサの処理方法に関する。
【背景技術】
【０００２】
間欠故障の検出時、擬似的なキャッシュミス等を行うことによりその動作を無効化し、間欠故障の影響を最小化する技術が知られている。
【０００３】
特許文献１は、データプロセッサ２が、命令フローの区間Ａ〜Ｃに含まれる命令を読み込んで実行しながら命令の異常を検出し、異常検出時にはそれ以降の命令の実行を停止する技術を開示している（図１５）。特許文献１のデータプロセッサ１４２は不正なアタックを検出するための演算回路として減算回路１４７とアキュムレータ１４８とを備える。減算回路１４７は命令レジスタ１４５が保有する命令コードをアキュムレータ１４８が保有する値から減算し、減算結果をアキュムレータ１４８に戻す。減算回路１４７は減算回路がゼロになったとき、ゼロフラグをセットして制御回路１４９に供給する。制御回路１４９は、所定の命令実行区間において、セット状態のゼロフラグを検出すると、命令実行を停止し、或いは特定の無限ループに入って、本来のプログラム実行を停止する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−２８７４４９
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１は間欠故障が発生するとプログラムが完全に実行されなくなるという問題がある。また、特許文献１では将来的に発生するだろう同じ間欠故障を発生させる命令を特定できないという問題がある。
【０００６】
本発明の目的は、間欠故障の可能性を減らし、安定動作を実現することが可能な情報処理装置およびプロセッサの処理方法を提供することにある。
【課題を解決するための手段】
【０００７】
本発明の情報処理装置は、命令をフェッチする命令フェッチ手段と、フェッチされた命令をデコードする命令デコード手段と、デコードされた命令を実行する複数の実行回路と、
故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを確認し、電気的に安定している場合に当該命令を実行回路に実行させる命令制御手段と、を備えることを特徴とする。
【０００８】
本発明のプロセッサの処理方法は、命令をフェッチする命令フェッチステップと、フェッチされた命令をデコードする命令デコードステップと、故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを判断する第１の判断ステップと、電気的に安定している場合に当該命令を実行回路に実行させる命令実行ステップと、を有することを特徴とする。
【発明の効果】
【０００９】
本発明は、故障を発生させる可能性が高い命令を実行回路が安定している場合にのみ実行させることにより間欠故障の可能性を減らし、安定動作を実現することができるという効果を有する。
【図面の簡単な説明】
【００１０】
【図１】図１は本発明の第１実施形態のプロセッサ内部を示す図である。
【図２】フェッチデコード部１の動作概要を示すフローチャートである。
【図３】命令スケジューリング手段２１の動作概要を示すフローチャートである。
【図４】非コア部３の動作概要を示すフローチャートである。
【図５】プロセッサ内部について詳細に示した図である。
【図６】実行すべき命令の命令列を示す図である。
【図７】故障部位使用命令ＤＢ１２のデータを示す図である。
【図８】命令デコード手段１０２から命令制御部１１に送られる命令情報を示す図である。
【図９】加算器３０から故障部位使用命令検出手段３７に送られる情報を示す図である。
【図１０】乗算器３１故障部位使用命令検出手段３７に送られる情報を示す図である。
【図１１】ＡＤＤ命令で間欠故障が発生した場合における故障部位使用命令ＤＢ１２のデータを示す図である。
【図１２】故障部位使用命令ＤＢ１２のデータを示す図である。
【図１３】命令デコード手段１０２から命令制御部１１送られるデータを示す図である。
【図１４】本発明の第２の実施の形態を示すブロック図である。
【図１５】本発明の関連技術を示すブロック図である。
【発明を実施するための形態】
【００１１】
まず、本発明の第１実施形態について説明する。本実施形態では、情報処理装置としてプロセッサを例に挙げて説明する。
【００１２】
図１は、本実施形態のプロセッサ内部を示す図である。プロセッサ１０はフェッチデコード部１とプロセッサコア部２と非コア部３とを備える。
【００１３】
フェッチデコード部１は、命令を保持し、命令をフェッチ、デコードしてプロセッサコア部２に送る機能を有する。一般的には、分岐予測機構なども含まれる。
【００１４】
フェッチデコード部１は、命令が格納されている命令キャッシュ１０３と、命令をフェッチする命令フェッチ手段１０１と、命令をデコードする命令デコード手段１０２と、命令をプロセッサコア部２に送るか否かを判断する命令制御部１１と、過去に発生した故障に関係する命令種別が格納されたデータベースである故障部位使用命令ＤＢ（Data Base）１２とを備える。
【００１５】
故障部位使用命令ＤＢ１２に格納されたデータの一例を図１１に示す。有効bitフィールド７−１と命令種別のフィールド７−２とを備える。図１１では、命令種別のフィールド７−２が「ＡＤＤ命令」となっており、それに対応する有効bitフィールド７−１が「１」となっている。これは、過去にＡＤＤ命令で間欠故障が生じたことを意味している。なお、故障部位使用命令ＤＢ１２の構成はこれに限定されるものではない。 
また、命令キャッシュ１０３は、一般的なプロセッサが持つ命令キャッシュと同様であり、例えば、１２８Ｂ／ライン、２ウェイセットアソシアティブ構成の６４ＫＢサイズのキャッシュ等が挙げられる。
【００１６】
プロセッサコア部２は、命令を実行するための前処理（実行スケジュール管理等）を行い、非コア部の実行回路３０−３５（加算器３０と乗算器３１と除算器３２とアドレス計算手段３３とＣＰＵ制御回路３４とデータキャッシュ３５）に命令を送る機能を有する。プロセッサコア部２は、命令スケジューリング手段２１と、演算命令ＲＳ（Reservation Station）２２と、メモリ系命令ＲＳ（Reservation Station）２２と、制御系命令ＲＳ（Reservation Station）２４とを備える。
【００１７】
演算命令ＲＳ２２は、一般的にリザベーションステーションと呼ばれる、オペランドの待ち合わせを行うためのバッファである。演算命令ＲＳ２２は、命令スケジューリング手段２１から分配された命令を登録し、実行可能な命令を選択し、命令種別に応じて加算器３０や乗算器３１や除算器３２等に送る。演算命令ＲＳ２２では、主に整数・浮動小数点の演算命令や論理演算などを実施するが、整数・浮動小数点で構成が分割されていてもよいし、それぞれを複数持っていても良い。
【００１８】
メモリ系命令ＲＳ２３は、一般的にリザベーションステーションと呼ばれる、オペランドの待ち合わせを行うためのバッファである。メモリ系命令ＲＳ２３は、命令スケジューリング手段２１から分配された命令を登録し、実行可能な命令を選択し、アドレス計算手段３３に命令を送出する。メモリ系命令ＲＳ２３では、主にメモリへのロード・ストア命令を処理する。なお、複数個のＲＳに分割されていてもよい。
【００１９】
制御系命令ＲＳ２４は、一般的にリザベーションステーションと呼ばれる、オペランドの待ち合わせを行うためのバッファであり、命令スケジューリング手段２１から分配された命令を登録し、実行可能な命令を選択し、その命令をＣＰＵ制御回路３４に送出する。制御系命令ＲＳ２４では、ＣＰＵ状態フラグ操作命令、動作モード操作命令、ＣＰＵ性能カウンタ操作命令など、ＣＰＵ全体の制御を行う命令を主に扱う。なお、複数個のＲＳに分割されていてもよい。
【００２０】
非コア部３は、命令終了検出手段３６と故障部位使用命令検出手段３７と複数の実行回路３０−３５とを備えている。非コア部３は、実行回路として、加算器３０と乗算器３１と除算器３２とアドレス計算手段３３とＣＰＵ制御回路３４とデータキャッシュ３５とを備える。各実行回路にはフラグが備え付けられており、フラグは過去にその回路で間欠故障が発生したか否かを記憶している。加算器３０はフラグ３０１を備え、乗算器３１はフラグ３１１を備え、アドレス計算手段３３はフラグ３３１を備え、ＣＰＵ制御回路３４はフラグ３４１を備え、除算器３２はフラグ３２１を備え、データキャッシュ３５はフラグ３５１を備える。
【００２１】
命令終了検出手段３６は、一般的にはリタイア処理と呼ばれる処理を行い、実行された命令が順番などに矛盾なく終了してもいいかどうかを判断し、完全に終了してもよい場合は命令スケジューリング手段２１に命令の終了を知らせる。
【００２２】
故障部位使用命令検出手段３７は、間欠故障検出時に、どの命令がその間欠故障を引き起こしたかを特定する。よって、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に対して、故障回路を使用する可能性のある命令の種別を通知することが可能となる。
【００２３】
次に、フローチャートを用いて、フェッチデコード部１の動作概要について説明する。図２は、フェッチデコード部の動作概要を示すフローチャートである。
【００２４】
命令フェッチ手段１０１は、命令キャッシュ１０３から命令を取り出し、命令デコード手段１０２に送る（ステップＳ２０１）。命令デコード手段１０２は、故障部位使用命令DB１２を参照し、故障部位使用命令DB１２に登録された命令種別であるか否か調べる（ステップＳ２０２）。
【００２５】
そして、命令デコード手段１０２は、命令制御部１１に対して、デコードした命令と故障部位使用命令DB１２に登録された命令であるか否か（過去に間欠故障を発生した命令であるか否か）を示す命令情報とを送る（ステップＳ２０３）。図８に、命令情報の一例を示す。命令情報は有効bitフィールド８−１と命令フィールド８−２と間欠故障フィールド８−３とから構成される。図８の命令情報は、ＡＤＤ命令およびＭＵＬＴ命令がともに過去に間欠故障を発生させておらず、かつ、有効な情報であることを意味する。詳細は後述する。
【００２６】
なお、本実施形態では、命令デコード手段１０２は最大４命令を１つのパケットまたは１つのフレームとして命令制御部１１に送ることができる構成としているが、これに限定されるものではない。
【００２７】
命令制御部１１は、命令情報に基づいて、命令デコード手段１０２から受け取った命令が過去に発生した故障に関係する命令か否かを判断する（ステップＳ２０４）。過去に発生した故障に関係する命令の場合、命令制御部１１は、命令スケジューリング手段２１に対して実行回路の問い合わせを行う。そして、命令制御部１１は、命令スケジューリング手段２１から送られてくる実行回路の情報を参照し（ステップＳ２０５）、使用する実行回路が電気的に安定であることが確認できるまで、命令を保持する（ステップＳ２０６、ステップＳ２０７）。実行回路が電気的に安定であることが確認されると、命令制御部１１は、その命令を命令スケジューリング手段に送る（ステップＳ２０８）。
【００２８】
本実施形態では、「電気的に安定である」とは、ステップＳ２０４において「過去に発生した故障に関係する」と判断された命令の先行命令が全て終了している状態を意味するが、これに限定されるものではない。
【００２９】
一方、命令デコード手段１０２から受け取った命令が過去に発生した故障に関係する命令でない場合、命令制御部１１は命令を保持せずに命令スケジューリング手段２１へ送る（ステップＳ２０４、ステップＳ２０８）。
【００３０】
次に、フローチャートを用いて、命令スケジューリング手段２１の動作概要について説明する。図３は、命令スケジューリング手段２１の動作概要を示すフローチャートである。
【００３１】
命令スケジューリング手段２１は、一般的なプロセッサで行われている命令キューやリオーダバッファと呼ばれる、命令におけるオペランドの依存性解析や終了の順序保障動作を行う。
【００３２】
命令スケジューリング手段２１は、命令制御部１１から実行回路の情報について問い合わせを受けると（ステップＳ３００）、先行命令が全て終了しているか否かを調べる（ステップＳ３０１）。先行命令が全て終了していた場合、命令スケジューリング手段２１は命令制御部１１に対して回路が安定している旨を知らせる（ステップＳ３０２、ステップＳ３０３）。
【００３３】
そして、命令スケジューリング手段２１は、命令制御部１１から命令を受け取ると、その命令を実行パイプラインに送出する（ステップＳ３０５）。具体的には、命令スケジューリング手段２１は、命令種別毎に、演算命令ＲＳ２２、メモリ系命令ＲＳ２３、制御系命令ＲＳ２４と分類して送出する。そして、演算命令ＲＳ２２、メモリ系命令ＲＳ２３、制御系命令ＲＳ２４はそれぞれ、実行可能な命令を選択し、その命令を非コア部３の実行回路３０−３５に送出する（ステップＳ３０６）。
【００３４】
一方、命令スケジューリング手段２１は、命令制御部１１から実行回路の情報について問い合わせを受けない状態で命令を受け取った場合（ステップＳ３００、ステップＳ３０４）、その命令を実行パイプラインに送出する（ステップＳ３０５）。具体的には、命令スケジューリング手段２１は、命令種別毎に、演算命令ＲＳ２２、メモリ系命令ＲＳ２３、制御系命令ＲＳ２４と分類して送出する。そして、演算命令ＲＳ２２、メモリ系命令ＲＳ２３、制御系命令ＲＳ２４はそれぞれ、実行可能な命令を選択し、その命令を非コア部３の実行回路３０−３５に送出する（ステップＳ３０６）。
【００３５】
なお、本実施形態では、命令スケジューリング手段２１は命令が終了したか否かの情報を保持するとするが、これに限定されるものではない。
【００３６】
次に、フローチャートを用いて、非コア部３の動作概要について説明する。図４は非コア部の動作概要を示すフローチャートである。特に、ステップＳ４００〜ステップＳ４０５は各実行回路の動作概要である。
【００３７】
まず、各実行回路の動作概要について説明する。各実行回路において演算処理内容は異なるが、その他の動作は同様である。
【００３８】
加算機３０の場合について説明する。
【００３９】
加算器３０は、浮動小数点・固定小数点の加算動作を行う。内部的には、パリティチェックや二重化等の故障検出回路が含まれている。
【００４０】
故障発生時（ステップＳ４００）、加算器３０はフラグ３０１が点灯しているか否かを調べる（ステップＳ４０１）。フラグ３０１がすでに点灯していた場合、加算器３０は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわち加算命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。そして、故障部位使用命令検出手段３７は、システム停止などの障害処理を行う（ステップＳ４１０）。
【００４１】
一方、故障発生時にフラグ３０１が点灯していなかった場合、最初の故障であることを意味しているので、加算器３０は、間欠故障が発生していると判断し、フラグ３０１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわち加算命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、加算器３０は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００４２】
図９に、固定故障が発生した場合に加算器３０が故障部位使用命令検出手段３７に送る情報の一例を示す。図９の情報は、有効bitフィールド９−１と命令種別フィールド９−２と固定故障フィールド９−３とから構成される。図９では、有効bitフィールドが「１」であり、これは有効情報であることを意味している。また、固定故障フィールド９−３が「０」であり、これは固定故障が発生していないことを意味している。
【００４３】
次に、乗算器３１の場合（ステップＳ４００〜ステップＳ４０５、ステップＳ４０９、ステップＳ４１０）について説明する。
【００４４】
乗算器３１は、浮動小数点・固定小数点の乗算動作を行う。内部的には、パリティチェックや二重化等の故障検出回路が含まれている。
【００４５】
故障発生時（ステップＳ４００）、乗算器３１はすでにフラグ３１１が点灯しているか否かを調べる（ステップＳ４０１）。すでにフラグ３１１が点灯していた場合、乗算器３１は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわち乗算命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。そして、故障部位使用命令検出手段３７は、システム停止などの障害処理を行う（ステップＳ４１０）。
【００４６】
一方、故障発生時にフラグ３１１が点灯していなかった場合、最初の故障であることを意味しているので、乗算器３１は、間欠故障が発生していると判断し、フラグ３１１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわち乗算命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、乗算器３１は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００４７】
なお、固定故障が発生した場合に乗算器３１が故障部位使用命令検出手段３７に送る情報は、加算器３０の場合と同様であるため、詳細な説明は省略する。
【００４８】
次に  除算器３２の場合（ステップＳ４００〜ステップＳ４０５、ステップＳ４０９、ステップＳ４１０）について説明する。
【００４９】
除算器３２は、浮動小数点・固定小数点の除算動作を行う。内部的には、パリティチェックや二重化等の故障検出回路が含まれている。
【００５０】
故障発生時（ステップＳ４００）、除算器３２はすでにフラグ３２１が点灯しているか否かを調べる（ステップＳ４０１）。すでにフラグ３２１が点灯していた場合、除算器３２は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわち除算命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。そして、故障部位使用命令検出手段３７は、システム停止などの障害処理を行う（ステップＳ４１０）。
【００５１】
一方、故障発生時にフラグ３２１が点灯していなかった場合、最初の故障であることを意味しているので、除算器３２は、間欠故障が発生していると判断し、フラグ３２１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわち除算命令種別）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、除算器３２は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００５２】
なお、固定故障が発生した場合に除算器３２が故障部位使用命令検出手段３７に送る情報は、加算器３０の場合と同様であるため、詳細な説明は省略する。
【００５３】
次に、アドレス計算手段３３の場合（ステップＳ４００〜ステップＳ４０５、ステップＳ４０９、ステップＳ４１０）について説明する。
【００５４】
アドレス計算手段３３は、メモリアクセス用のアドレス計算を行う。内部的には、パリティチェックや二重化等の故障検出回路が含まれている。
【００５５】
故障検出時（ステップＳ４００）、アドレス計算手段３３はすでにフラグ３３１が点灯しているか否かを調べる（ステップＳ４０１）。すでにフラグ３３１が点灯していた場合、アドレス計算手段３３は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわちメモリ系命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。ここで、アドレス計算が実行されると、データキャッシュ３５に対して命令を移送し、実際のメモリアクセス操作が行われる。
【００５６】
一方、故障発生時にフラグ３３１が点灯していなかった場合、最初の故障であることを意味しているので、アドレス計算手段３３は、間欠故障が発生していると判断し、フラグ３３１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわちメモリ系命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、アドレス計算手段３３は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００５７】
なお、固定故障が発生した場合に乗算器３１が故障部位使用命令検出手段３７に送る情報は、加算器３０の場合と同様であるため、詳細な説明は省略する。
【００５８】
次に、データキャッシュ３５の場合（ステップＳ４００〜ステップＳ４０５、ステップＳ４０９、ステップＳ４１０）について説明する。
【００５９】
データキャッシュ３５は、一般的なプロセッサにおけるデータキャッシュと同様のものであり、データのロード・ストア動作が主に行われる。内部的にはパリティチェックや二重化等の故障検出回路が含まれている。
【００６０】
故障発生時（ステップＳ４００）、データキャッシュ３５はすでにフラグ３５１が点灯しているか否かを調べる（ステップＳ４０１）。すでにフラグ３５１が点灯していた場合、データキャッシュ３５は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわちメモリ系命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。
【００６１】
一方、故障発生時にフラグ３５１が点灯していなかった場合、最初の故障であることを意味しているので、データキャッシュ３５は、間欠故障が発生していると判断し、フラグ３５１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわちメモリ系命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、除算器３５は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００６２】
なお、固定故障が発生した場合にデータキャッシュ３５が故障部位使用命令検出手段３７に送る情報は、加算器３０の場合と同様であるため、詳細な説明は省略する。
【００６３】
次に、ＣＰＵ制御回路３４の場合（ステップＳ４００〜ステップＳ４０５、ステップＳ４０９、ステップＳ４１０）について説明する。
【００６４】
ＣＰＵ制御回路３４は、主にＣＰＵ状態フラグ操作命令、動作モード操作命令、ＣＰＵ性能カウンタ操作命令など、ＣＰＵ全体の制御を行う命令を主に実行する。内部的にはパリティチェックや二重化等の故障検出回路が含まれている。
【００６５】
故障発生時（ステップＳ４００）、ＣＰＵ制御回路３４はすでにフラグ３４１が点灯しているか否かを調べる（ステップＳ４０１）。すでにフラグ３４１が点灯していた場合、ＣＰＵ制御回路３４は、固定故障が発生していると判断し、故障発生時に実行中だった命令の種別情報（すなわちＣＰＵ制御系命令種別情報）と固定故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０２）。
【００６６】
一方、フラグ３４１が点灯していなかった場合、最初の故障であることを意味しているので、ＣＰＵ制御回路３４は、間欠故障が発生していると判断し、フラグ３４１を点灯させるとともに、故障発生時に実行中だった命令の種別情報（すなわちＣＰＵ制御系命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送る（ステップＳ４０３、ステップＳ４０４）。そして、故障部位使用命令検出手段３７は、故障部位使用命令ＤＢ１２に間欠故障が発生した旨を登録し（ステップＳ４０９）、ＣＰＵ制御回路３４は、命令の実行が終了した旨を命令終了検出手段３６に送る（ステップＳ４０５）。
【００６７】
なお、固定故障が発生した場合にＣＰＵ制御回路３４が故障部位使用命令検出手段３７に送る情報は、加算器３０の場合と同様であるため、詳細な説明は省略する。
【００６８】
次に、ステップＳ４０６〜ステップＳ４０８の動作について説明する。
【００６９】
各実行回路３０−３５が命令実行を終了した旨を命令終了検出手段３６へ送ると（ステップＳ４０５）、命令終了検出手段３６は、一般的にリタイア処理と呼ばれる処理を行う（ステップＳ４０６）。リタイア処理では、「実行された命令の順番などに矛盾がないか」「このまま終了してしまって良いか」を判断する。完全に終了してもよい場合、命令終了検出手段３６は命令スケジューリング手段２１に対して命令の終了を知らせる（ステップＳ４０７、ステップＳ４０８）。
【００７０】
なお、本実施形態では、Ｓ４１０において障害処理を行う構成としたが、これに限定されるものではなく、そのまま継続して使用することも可能である。
【００７１】
次に、図２乃至図４に示すフローチャートと図５を用いてプロセッサ全体の動作についてより詳細に説明する。図５は、図１に示されたプロセッサの内部をさらに詳細に示した図である。本実施形態では、図６に示された命令を実行するものとして説明する。以下では、過去に間欠故障を発生させていない図６の命令を実行した結果、加算器３０において障害が発生する例について説明する。
【００７２】
命令フェッチ手段１０１は、図６に示されたADD命令およびMULT命令をパス１３０を介してフェッチする。命令フェッチ手段１０１は、パス１３１を介してフェッチされた命令を命令デコード手段１０２へ送る（ステップＳ２０１）。
【００７３】
命令デコード手段１０２は、パス１３２を介して故障部位使用命令ＤＢ１２を参照する（ステップＳ２０２）。本実施形態では過去に間欠故障は発生していないため、故障部位使用命令ＤＢ１２から読み出されるデータは図７で示されるように空の状態である（有効bitフィールド７−１が点灯していない状態である）。
【００７４】
そのため、命令デコード手段１０２は、命令を停止させることなく、図８に示される命令情報をパス１４３を介して命令制御部１１に渡す（ステップＳ２０３）。
【００７５】
命令情報において、有効bitを示す有効bitフィールド８−１は命令が有効か否かを示し、有効bitが「１」のとき命令が有効であることを示す。命令フィールド８−２は命令種別を示す。命令情報フィールド８−３は命令フィールドに示された命令が過去に間欠故障を引き起こしたか否かを示す。「１」のとき間欠故障を引き起こしていることを意味し、「０」のとき間欠故障を引き起こしていないことを意味する。
【００７６】
本実施形態では、図８の命令情報に過去の故障履歴が格納されていないため（間欠故障フィールド８−３がいずれも「０」であるため）、命令制御部１１は、フェッチされた命令をそのまま命令スケジューリング手段２１に送る（ステップＳ２０８）。
【００７７】
命令スケジューリング手段２１は、命令制御部１１から実行回路の情報の問い合わせを受けずに命令を受け取ったため（ステップＳ３０４）、送られてきた命令の種別に応じて演算命令ＲＳ２２、メモリ系命令ＲＳ２３、制御系命令ＲＳ２４のいずれかに命令を分配する（ステップＳ３０５）。本実施形態では、ＡＤＤ命令およびＭＵＬＴ命令は両方とも演算命令であるため、命令スケジューリング手段２１は、両命令ともパス２５０を介して演算命令ＲＳ２２に送出する。
【００７８】
そして、演算命令ＲＳ２２は、ＡＤＤ命令を加算器３０に送り、ＭＵＬＴ命令を乗算器３１に送る（ステップＳ３０６）。
【００７９】
次に、加算器３０において演算処理が行われる。
【００８０】
二重化チェック等で結果不正が検出された場合（ステップＳ４００）、加算器３０はフラグ３０１の値をチェックする（ステップＳ４０１）。フラグ３０１の値が０であり（フラグが点灯しておらず）、これは「過去にこの回路で障害が発生していない」ことを示している。よって、加算器３０は最初の障害（間欠故障）であると判断する。そして、加算器３０は、命令種別情報（加算命令種別情報）と間欠故障である旨を示す情報とを故障部位使用命令検出手段３７に送るとともに、フラグ３０１を「１」にする（フラグ３０１を点灯させる）（ステップＳ４０３、ステップＳ４０４）。
【００８１】
Ｓ４０４において加算器３０から故障部位使用命令検出手段３７に送られる情報を図９に示す。有効bitフィールド９−１は情報の有効性を示しており、「１」は有効情報であることを意味する。命令種別フィールド９−２は、障害を発生させた命令種別（今回はＡＤＤ命令）を示している。固定故障フィールド９−３は固定故障か否かを示しており固定障害の場合「０」となり、間欠故障の場合「１」となる。
【００８２】
一方、乗算器３１で実行しているＭＵＬＴ命令では障害が発生しなかったとすると、乗算器３１は図１０に示される情報を故障部位使用命令検出手段３７に送出する（ステップＳ４１０）。図１０では、有効bitフィールド９−１が「０」であるため、故障部位使用命令検出手段４はこの情報を無視する。
【００８３】
ステップＳ４０４の後、故障部位使用命令検出手段３７は、図９に示される情報をパス４１を介して故障部位使用命令ＤＢ１２に登録するとともに（ステップＳ４０９）、命令が終了した旨を命令終了検出手段３６に知らせる（ステップＳ４０５）。Ｓ４０９において、故障部位使用命令検出手段ＤＢ１２には、図１１に示されるように「ADD命令で過去に間欠故障が生じた」という情報が登録される。
【００８４】
その後、命令終了検出手段３６は、リタイア処理を行い（ステップＳ４０６）、終了して良い場合には、命令終了検出手段３６は命令スケジュール手段２１に対して命令の終了を知らせる（ステップＳ４０７、ステップＳ４０８）。
【００８５】
本実施形態では、ＪＯＢはアボートさせるかチェックポイントリスタートによる再開を行うこととするが、これに限定されず、ＪＯＢのハードウェア的な巻き戻しによる再開・再実行などの機構を取り入れることも可能である。
【００８６】
次に、上述した図６の命令実行に続いて図１２に示される命令列を実行する場合の動作について説明する。動作開始時における故障部位使用命令ＤＢ１２の命令情報を図１１に示す。
【００８７】
図１２に示される命令のうち、最初の２つのDIV命令は除算器３２で行われるため、加算器３０での過去の故障は影響しないが、３つ目の命令であるADD命令に関しては、間欠故障を防ぐための間欠故障予防動作が行われる。
【００８８】
まず、命令フェッチ手段１０１は、命令キャッシュ１０３からパス１３０を介して命令をフェッチし、その命令をパス１３３を介して命令デコード手段１０２に送る（ステップＳ２０１）。
【００８９】
命令デコード手段１０２は最大４命令をデコードすることができる。命令デコード手段１０２は、まず、図１２に示される命令列の最初の４命令をデコードする。故障部位使用命令DB１２にはすでに図１１に示されるように「ADD命令の故障動作可能性を示す情報」が登録されているため（ステップＳ２０２）、命令デコード手段１０２は、図１３に示された情報（ＡＤＤ命令で間欠故障が発生しているという情報）とデコードした命令とを命令制御部１１に送る（ステップＳ２０３）。なお、図１３の各フィールドの情報は図８の各フィールドの情報と同一であるため詳細な説明は省略する。
【００９０】
命令制御部１１は、受け取った情報（図１３に示された情報）に基づいて、命令情報の間欠故障フィールド８−３が「０」である最初の２命令（DIV命令２つ）をパス１３４を介して命令スケジューリング手段２１に送る（ステップＳ２０４、ステップＳ２０８）。一方、３番目の命令であるＡＤＤ命令に対応する間欠故障フィールド８−３が「１」であるため、命令制御部１１は、過去に発生した故障に関係する命令と判断し、命令スケジューリング手段２１に問い合わせて実行回路の情報を取得する（ステップＳ２０５）。
【００９１】
命令制御部１１は、使用する実行回路が電気的に安定しているか否かを判断し（ステップＳ２０６）、電気的に安定するまでの間、ADD命令とそれ以降の命令（MULT命令）とを命令制御部１１内で待機させる（ステップＳ２０７）。
【００９２】
なお、本実施形態では、ADD命令より前の命令が全て終わった状態を電気的に安定した状態とする。
【００９３】
電気的に安定した状態になった後、命令制御部１１はＡＤＤ命令を命令スケジューリング手段２１に送る。命令情報におけるＭＵＬＴ命令に対応する間欠故障フィールド８−３が「０」となっているため、命令制御部１１は、ＡＤＤ命令に続いてＭＵＬＴ命令も命令スケジューリング手段２１に送る（ステップＳ２０８）。
【００９４】
最初の２命令であるＤＩＶ命令の場合、命令スケジューリング手段２１は、命令制御部１１から実行回路の情報の問い合わせを受けない状態でＤＩＶ命令を受け取る（ステップＳ３００、ステップＳ３０４）。命令スケジューリング手段２１は、２つのＤＩＶ命令を受け取ると、それを演算命令ＲＳ２２に送り、演算命令ＲＳ２２は２つのＤＩＶ命令を非コア部３の実行回路に送る（ステップＳ３０６）
そして、３番目の命令であるＡＤＤ命令を受け取る前に、命令スケジューリング手段２１は実行回路の情報の問い合わせ受ける（ステップＳ３００）。そして、命令スケジューリング手段２１は、命令制御部１１からＡＤＤ命令およびＭＵＬＴ命令をＡＤＤ命令→ＭＵＬＴ命令の順で受け取る（ステップＳ３０４）。
【００９５】
命令スケジュール手段２１は、ＡＤＤ命令およびＭＵＬＴ命令を演算命令ＲＳ２２に送る（ステップＳ３０５）。演算命令ＲＳ２２は、ＡＤＤ命令を加算器３０に送り、ＭＵＬＴ命令を乗算器３１に送る（ステップＳ３０６）。
【００９６】
障害が発生せずに、各実行回路（除算器３２、加算器３０、乗算器３１）で演算処理が行われると、各実行回路は命令種別の情報（２つの除算命令種別、加算命令種別、乗算命令種別）と障害が発生していない旨の情報とを故障部位使用命令検出手段３７に送る（ステップＳ４００、ステップＳ４１０）。
【００９７】
そして、各実行回路は命令が終了した旨を命令終了検出手段３６に知らせる（ステップＳ４０５）。その後、命令終了検出手段３６はリタイア処理を行う（ステップＳ４０６）。処理を終了して良い場合、命令終了検出手段３６は命令スケジュール手段２１に対して命令の終了を知らせる（ステップＳ４０７、ステップＳ４０８）。
【００９８】
このように、本実施形態では、間欠故障を起こす可能性のある命令（本実施形態の場合はＡＤＤ命令）は、その先行命令が全て終了して電気的に安定した状態の場合に実行される。その結果、間欠故障のリスクを大幅に減らすことが可能となり、安定動作を実現することができるという効果を有する。
【００９９】
また、間欠故障を発生させた命令に関する履歴をもつ回路、すなわち、過去に故障を発生させた命令種別の情報が格納された記憶手段（故障部位使用命令ＤＢ１２）を備え、命令制御部１１は、その命令種別の情報に基づいて、故障発生の可能性が高い命令がデコードされたか否かを判断する。この結果、将来的に発生するだろう同じ間欠故障を発生させる命令を特定してそのリスクを減らし、安定動作を実現することができるという効果を有する。
【０１００】
図１４は、本発明の第２の実施形態を示すブロック図である。
【０１０１】
第２の実施形態による情報処理装置５０は、命令をフェッチする命令フェッチ手段５１と、フェッチされた命令をデコードする命令デコード手段５２と、複数の実行回路５３―１〜５３−４と、命令制御回路５４とを備える。図１４には、複数の実行回路として４つの実行回路を記載しているがこれに限定されるものではない。
【０１０２】
各実行回路５３は、命令デコード手段５２でデコードされた命令を実行する。命令制御回路５４は、命令デコード手段５２と複数の実行回路５３とに接続される。
【０１０３】
故障発生の可能性が高い命令が命令デコード手段５２でデコードされた場合、命令制御回路５４は、デコードされた命令を実行する実行回路５３が電気的に安定しているか否かを確認し、電気的に安定している場合に当該命令を実行回路に実行させる。
【０１０４】
ここで、電気的に安定している場合とは、たとえば、故障発生の可能性が高い命令に対する先行命令が全て実行完了している場合であるが、これに限定されない。
【０１０５】
本発明の第２の実施形態では、間欠故障を起こす可能性のある命令は、電気的に安定した状態の場合に実行される。その結果、間欠故障のリスクを大幅に減らすことが可能となり、安定動作を実現することができるという効果を有する。
【０１０６】
本発明の実施形態は、以下の付記記載のプロセッサの処理方法であっても良い。
【０１０７】
（付記１）命令をフェッチする命令フェッチステップと、フェッチされた命令をデコードする命令デコードステップと、故障発生の可能性が高い命令がデコードされた場合、当該実行回路が電気的に安定しているか否かを判断する第１の判断ステップと、電気的に安定している場合に当該命令を実行回路に実行させる命令実行ステップと、故障が発生するとフラグを点灯させるフラグ点灯ステップと、当該フラグが点灯していない状態で故障が発生した場合、間欠故障が発生したと判断する第３の判断ステップと、第３の判断ステップにおいて間欠故障が発生したと判断された場合に、当該間欠故障を発生させた命令種別の情報を記憶手段に登録する登録ステップと、を有することを特徴とするプロセッサの処理方法。
【０１０８】
（付記２）フラグの点灯時に故障が発生した場合には固定故障が発生したと判断する第４の判断ステップを有することを特徴とする付記１に記載のプロセッサの処理方法。
【０１０９】
（付記３）命令ケジューリング手段が各実行回路における命令実行状態を管理する管理ステップと、故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを命令スケジューリング手段に問い合わせる問い合わせステップと、
を備えることを特徴とする付記１または２に記載のプロセッサの処理方法。
【０１１０】
（付記４）命令をフェッチする命令フェッチステップと、フェッチされた命令をデコードする命令デコードステップと、故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを判断する第１の判断ステップと、電気的に安定している場合に当該命令を実行回路に実行させる命令実行ステップと、命令ケジューリング手段が各実行回路における命令実行状態を管理する管理ステップと、故障発生の可能性が高い命令がデコードされた場合、実行回路が電気的に安定しているか否かを命令スケジューリング手段に問い合わせる問い合わせステップと、を備えることを特徴とするプロセッサの処理方法。
【符号の説明】
【０１１１】
１    フェッチコード部
１０    プロセッサ
１０１    命令フェッチ手段
１０２    命令デコード手段
１０３    命令キャッシュ
１１    命令制御部
１２    故障部位使用命令ＤＢ
２    プロセッサ部
２１    命令スケジューリング手段
２２    演算命令ＲＳ
２３    メモリ系命令ＲＳ
２４    制御系命令ＲＳ
３    非コア部
３０    加算器
３０１    フラグ
３１    乗算器
３１１    フラグ
３２    除算器
３２１    フラグ
３３    アドレス計算手段
３３１    フラグ
３３２    パス
３４    ＣＰＵ制御回路
３４１    フラグ
３５    データキャッシュ
３５１    フラグ
３６    命令終了検出手段
３７    故障部位使用命令検出手段
３７１〜３８３    パス
１３０〜１３４    パス
２１１    パス
２５０〜２５７    パス
１４２    データプロセッサ
１４３    データバス
１４４    データバッファレジスタ
１４５    命令レジスタ
１４６    命令デコーダ
１４７    減算回路
１４８    アキュムレータ
１４９    制御回路
１４１１    プログラムカウンタ
１４１２    汎用レジスタ回路
１４１３    演算回路
５１    命令フェッチ手段
５２    命令デコード手段
５３−１〜５３−４  実行回路
５４    命令制御回路
【図１】
2011128709.tif 000003
【図２】
2011128709.tif 000004
【図３】
2011128709.tif 000005
【図４】
2011128709.tif 000006
【図５】
2011128709.tif 000007
【図６】
2011128709.tif 000008
【図７】
2011128709.tif 000009
【図８】
2011128709.tif 000010
【図９】
2011128709.tif 000011
【図１０】
2011128709.tif 000012
【図１１】
2011128709.tif 000013
【図１２】
2011128709.tif 000014
【図１３】
2011128709.tif 000015
【図１４】
2011128709.tif 000016
【図１５】
2011128709.tif 000017