(57)【特許請求の範囲】
【請求項１】
同一の所定の処理結果をそれぞれテストする複数のテスト処理手段と、
前記各テスト処理手段によるテスト結果に応じてそれぞれ分岐処理を行う複数の分岐処理手段と、
他の前記分岐処理手段に優先して実行される所定の前記分岐処理手段にて分岐できなった場合に障害対応処理を実行するトラップ手段と、
を備え、
前記所定の分岐処理手段による分岐処理、前記トラップ手段による障害対応処理、前記他の分岐処理手段による分岐処理、の優先順位で処理を実行する、
ことを特徴とするマイクロプロセッサ。
【請求項２】
前記トラップ手段は、前記所定の分岐処理手段に対応する前記テスト処理手段によるテスト結果が正しいにも関わらず当該正しい方向に分岐できなかった場合に実行される、ことを特徴とする請求項１記載のマイクロプロセッサ。
【請求項３】
前記トラップ手段は、前記所定の分岐処理手段の障害に関する情報を取得する処理を行う、ことを特徴とする請求項１又は２記載のマイクロプロセッサ。
【請求項４】
前記トラップ手段による前記障害対応処理の実行後に前記他の分岐処理手段による分岐処理を実行する、ことを特徴とする請求項１，２又は３記載のマイクロプロセッサ。
【請求項５】
並列動作可能な複数の演算器を装備し、
１つのサイクルにおける前記所定の分岐処理手段による分岐処理と前記他の分岐処理手段による分岐処理とは、それぞれ異なる前記演算器にて、前記所定の分岐処理手段による分岐処理、前記他の分岐処理手段による分岐処理、の優先順位で並列に実行される、ことを特徴とする請求項１，２，３又は４記載のマイクロプロセッサ。
【請求項６】
マイクロプロセッサに、
同一の所定の処理結果をそれぞれテストする複数のテスト処理手段と、
前記各テスト処理手段によるテスト結果に応じてそれぞれ分岐処理を行う複数の分岐処理手段と、
他の前記分岐処理手段に優先して実行される所定の前記分岐処理手段にて分岐できなかった場合に障害対応処理を実行するトラップ手段と、
を実現させると共に、
前記マイクロプロセッサに、前記所定の分岐処理手段による分岐処理、前記トラップ手段による障害対応処理、前記他の分岐処理手段による分岐処理、の優先順位で処理を実行させるためのプログラム。
【請求項７】
マイクロプロセッサが、
同一の所定の処理結果をそれぞれテストする複数のテスト処理工程と、各テスト処理によるテスト結果に応じてそれぞれ実行される複数の分岐処理工程と、を有すると共に、
前記複数の分岐処理工程のうち、他の前記分岐処理工程に優先して実行される所定の前記分岐処理工程に続いて、当該所定の分岐処理工程にて分岐できなかった場合に障害対応処理を実行するトラップ工程を有し、
前記所定の分岐処理工程による分岐処理、前記トラップ工程による障害対応処理、前記他の分岐処理工程による分岐処理、の優先順位で処理を実行する、
ことを特徴とするマイクロプロセッサによる情報処理方法。
【請求項８】
前記トラップ工程による前記障害対応処理の実行後に前記他の分岐処理工程による分岐処理を実行する、ことを特徴とする請求項７記載のマイクロプロセッサによる情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マイクロプロセッサにかかり、特に、分岐処理を実行するマイクロプロセッサに関する。
【背景技術】
【０００２】
近年、処理の高速化のために、ＶＬＩＷ方式の計算機システムが開発されている。ここで、ＶＬＩＷ方式とは、並列動作可能な複数の演算器を独立した複数の命令の集まりであるＶＬＩＷ（Very  Long  Instruction  Word）と称さされる１個の長い命令語により制御する方式である。つまり、かかる方式の計算機システムは、並列動作可能な複数の演算器を備えており、ＶＬＩＷ上の独立した各命令により、当該各演算器を同期をとって個々にかつ並列に制御して作動する。
【０００３】
そして、上述したようなＶＬＩＷ型プロセッサは、命令間に依存関係のない命令を同時に実行できる利点があるが、逆に処理によっては依存関係のために未使用（ｎｏｐ）となる演算器が生じる。この未使用の演算器を生かして、演算を二重化し、データインティグリティ（信頼性）を向上させる方法がある。例えば、先行する処理の出力をテストする処理を二重化し、両者のテスト結果を比較することによって不正を検出することにより、ハードウェア障害をプログラムにより検出する方法がある（下記、特許文献１参照）。
【０００４】
【特許文献１】特開昭６０−１５１７５３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ここで、上述したようなＶＬＩＷ型プロセッサを用いてプログラミングする場合には、コンパイラを使用して並列処理を最も効率的に行なえるコードを生成するのが一般的である。このとき、プログラムの中でプログラムによってハードウェアの信頼性を確保することが必要な場合には、アセンブリ言語により意識的に信頼性を向上させるコーディングを行なう場合がある。かかる場合には、プログラムの本来性能を低下させずにプロセッサの故障検出率を高めることを行なうことが必要であるが、総じて性能向上と相反する傾向にある。
【０００６】
例えば、上述した特許文献１の従来例では、テスト結果が一致していたと判明した後に実際の分岐処理が実行されるため、かかる分岐処理を実行するまでに余計な処理時間が必要であった。また、ハードウェアの障害が発生することによってテスト結果が不一致であった場合には、障害に対するリカバリ機能が装備されておらず、障害の発生したプロセッサをシステムから切り離したり、システムを停止するなどの処理が行われていたため、処理を続行することができない、という問題があった。
【０００７】
このため、本発明では、上記従来例の有する不都合を改善し、特に、分岐処理を行うハードウェアに障害が生じた場合にリカバリ処理を実行して信頼性の向上を図ると共に、処理性能の低下を抑制することができるマイクロプロセッサを提供することをその目的とする。
【課題を解決するための手段】
【０００８】
そこで、本発明の一形態であるマイクロプロセッサは、
同一の所定の処理結果をそれぞれテストする複数のテスト処理手段と、
各テスト処理手段によるテスト結果に応じてそれぞれ分岐処理を行う複数の分岐処理手段と、
他の分岐処理手段に優先して実行される所定の分岐処理手段にて分岐できなった場合に障害対応処理を実行するトラップ手段と、
を備えたことを特徴としている。
【０００９】
具体的に、トラップ手段は、所定の分岐処理手段に対応するテスト処理手段によるテスト結果が正しいにも関わらず当該正しい方向に分岐できなかった場合に実行される。そして、トラップ手段は、所定の分岐処理手段の障害に関する情報を取得する処理を行う。また、トラップ手段は、障害対応処理の実行後に他の分岐処理手段の実行に復帰する。
【００１０】
さらに、上記所定の分岐処理手段と上記他の分岐処理手段とは、ほぼ並列に実行される、ことを特徴としており、例えば、マイクロプロセッサは、所定の分岐処理手段と他の分岐処理手段とをそれぞれ異なる演算器にて実行するＶＬＩＷ型プロセッサである。
【００１１】
上記発明によると、まず、同一の所定の処理結果のテストが複数のテスト処理手段にて実行され、これに対する同一の分岐処理が複数の分岐処理手段にて多重化されていることにより、信頼性の向上を図ることができる。これに加え、所定の分岐処理手段にて正常に分岐されないなどハードウェア障害が発生した場合であっても、かかる障害情報の取得などリカバリ処理がトラップ手段にて実行されるため、さらなる信頼性の向上を図ることができると共に、後続する他の分岐処理手段による処理が実行されることで、処理性能の低下を抑制することができる。特に、ＶＬＩＷ型プロセッサを用いて、同一の分岐処理を異なる演算器にてほぼ並列に実行することで、より有効に処理性能の低下を抑制することができる。
【００１２】
また、本発明の他の形態であるプログラムは、
マイクロプロセッサに、
同一の所定の処理結果をそれぞれテストする複数のテスト処理手段と、
各テスト処理手段によるテスト結果に応じてそれぞれ分岐処理を行う複数の分岐処理手段と、
他の分岐処理手段に優先して実行される所定の分岐処理手段にて分岐できなかった場合に障害対応処理を実行するトラップ手段と、
を実現させる、ことを特徴としている。
【００１３】
さらに、本発明の他の形態であるマイクロプロセッサによる情報処理方法は、
マイクロプロセッサが、
同一の所定の処理結果をそれぞれテストする複数の分岐条件テスト工程と、各テスト処理によるテスト結果に応じてそれぞれ実行される複数の分岐処理工程と、を有すると共に、
複数の分岐処理工程のうち、他の分岐処理工程に優先して実行される所定の分岐処理工程に続いて、当該所定の分岐処理工程にて分岐できなかった場合に障害対応処理を実行するトラップ工程を有する、
ことを特徴としている。
【００１４】
上述した構成のプログラムや情報処理方法であっても、上記マイクロプロセッサと同様に作用するため、上述した本発明の目的を達成することができる。
【発明の効果】
【００１５】
本発明は、以上のように構成され機能するので、これによると、同一の所定の処理結果のテスト及びこれに応じた分岐処理が多重化されており、かつ、他の分岐処理手段と比べて先に実行される所定の分岐処理手段にて正常に分岐されないなどハードウェア障害が発生した場合に、かかる障害情報の取得などリカバリ処理がトラップ手段にて実行されるため、信頼性の向上を図ることができると共に、後続する他の分岐処理手段による処理が実行されることでシステムが停止することなく、処理性能の低下を抑制することができる、という従来にない優れた効果を有する。
【発明を実施するための最良の形態】
【００１６】
本発明におけるマイクロプロセッサは、多重化した分岐処理の間にリカバリ処理を行うことを特徴としている。以下、実施例では、ＶＬＩＷ型プロセッサにて実現する場合を一例に挙げて説明する。
【実施例１】
【００１７】
本発明の第１の実施例を、図１乃至４を参照して説明する。図１乃至図２は、本実施例におけるマイクロプロセッサの構成及び動作を示す説明である。図３は、プログラム例を示す図である。
【００１８】
［構成］
本実施例におけるマイクロプロセッサは、上述したように、並列動作可能な複数の演算器を装備し、独立した複数の命令の集まりであるＶＬＩＷ（Very  Long  Instruction  Word）と称さされる１個の長い命令語により制御する方式のＶＬＩＷ型プロセッサである。図１は、このＶＬＩＷ型プロセッサを搭載した情報処理装置７０を示している。
【００１９】
そして、情報処理装置７０のプロセッサには、本発明であるプログラムが組み込まれることにより、図１に示すような構成及び動作を実現可能となる。具体的には、情報処理装置７０つまりＶＬＩＷ型プロセッサには、プログラムが組み込まれることにより、処理Ｗ（１０）を実行する機能と、処理Ｘ（２０１）を実行する機能と、処理Ｗ（１０）の結果をテストするテストＡ（２０２）を実行する機能（テスト処理手段）と、当該テストＡ（２０２）と同じテストを行なうテストＢ（２０３）を実行する機能（テスト処理手段）と、テストＡ（２０２）の結果に応じて分岐する分岐処理ａ（３０１）を実行する機能（分岐処理手段）と、分岐処理ａ（３０１）に後続しテストＡ（２０２）の結果に応じてリカバリ処理（６０）へ割り込むトラップ（３０２）を実行する機能（トラップ手段）と、トラップ（３０２）に後続しテストＢ（２０３）の結果に応じて分岐する分岐処理ｂ（３０３）を実行する機能（分岐処理手段）と、が構築されている。また、分岐処理ａ（３０１）、分岐処理ｂ（３０３）の結果に応じて実行される処理Ｙ（４０）と処理Ｚ（５０）とを実行する機能も構築されている。
【００２０】
そして、上述したように、ＶＬＩＷ型プロセッサは、複数の演算器を装備して並列処理が可能であるため、上述した各機能は、それぞれ図２に示すように並列に作動する。ここでは、演算器が３つ装備されており、サイクル１では、演算器１は処理Ｗ（１０）を実行し、演算器２及び演算器３は未使用（ｎｏｐ）となる。そして、後続するサイクル２（図１の符号２０）では、演算器１は処理Ｘ（２０２）を、演算器２はテストＡ（２０２）を、演算器３ではテストＢ（２０３）を、それぞれ並列に実行する。さらに後続するサイクル３（図１の符号３０）では、演算器１は分岐処理ａ（３０１）を、演算器２はトラップ（３０２）を、演算器３は分岐処理ｂ（３０３）を、それぞれ並列に実行する。
【００２１】
ここで、トラップ（３０２）は、特に、二重化された分岐処理ａ（３０１）と分岐処理ｂ（３０３）との間で、分岐処理ａ（３０１）にて正常に分岐できなかった場合、つまり、分岐回路のハードウェア障害が生じた場合に、実行される。その具体的な動作については、動作説明時に詳述する。
【００２２】
そして、トラップ（３０２）によるリカバリ処理（６０）を実行する機能は、分岐処理ａ（３０１）で発生したハードウェア障害の状況を残すために必要なデータ採取や、再度分岐処理を実行するために割り込み元のプログラム格納アドレスを算出し、データ採取が完了した後に割り込みが発生したプログラム格納アドレスの次のアドレス、つまり分岐処理ｂ（３０３）へ復帰する処理を行なう（図１の符号６０１，６０２，６０３参照）。
【００２３】
ここで、図３に、図２に示す命令列を、Intel  R  IA64アーキテクチャ・ソフトウェア・デベロッパーズ・マニュアルにおけるアセンブリ言語のニーモニックでコーディングした例を示す。図中において「cmp」は比較命令を表す。「br」は分岐命令を表す。「(p) br」は条件付きの分岐命令であることを表す。「break」は割り込みを表す。また、「p」、「r」はそれぞれテストＡ（２０２）とテストＢ（２０３）の結果が格納されるレジスタを表す。また、図４には、トラップ（３０２）の動作をコーディングした例を示す。
【００２４】
［動作］
次に、本発明の動作について、図１乃至図２を参照して説明する。まず、図２に示すように、サイクル１にて処理Ｗ（１０）が実行される。そして、次のサイクル２にて、先行する処理Ｗ（１０）のテストが行われる。つまり、図１のサイクル２０及び図２に示すように、演算器２でテストＡ（２０２）が実行され、演算器３でテストＢ（２０３）が実行される（テスト処理工程）。なお、テストＢ（２０３）は、テストＡ（２０２）を二重化した処理であり、テストＡ（２０２）と同じく、処理Ｗ（１０）の結果をテストしている。
【００２５】
そして、図１に示すさらに次のサイクル３０つまり図２に示すサイクル３では、各演算器で、分岐処理ａ（３０１）（所定の分岐処理工程）、トラップ（３０２）（トラップ工程）、分岐処理ｂ（３０３）（他の分岐処理工程）がそれぞれ実行される。このとき、各分岐先アドレスの計算は、ほぼ同時に（並列に）実行されるが、実際に分岐先にジャンプする動作は、図３のコーディング例の「＃サイクル２」と「＃サイクル３」の間に示されるように、分岐処理ａ（３０１）、トラップ（３０２）、分岐処理ｂ（３０３）の優先順位で処理が実行される。つまり、図１のサイクル３０に示す順に処理が実行される。
【００２６】
具体的には、まず、分岐処理ａ（３０１）では、テストＡ（２０２）の結果が「真」の場合に処理Ｙ（４０）に分岐する。つまり、テストＡの結果、分岐ＧＯ（ｐ＝１）の場合には、処理Ｙ（４０）に進み、先読みしたトラップ（３０２）つまり図３に示す「(p) break 10」、及び、分岐処理ｂ（３０３）つまり「(r)br.cond.spnt Y」の分岐先へはジャンプしない。
【００２７】
ここで、分岐処理ａ（３０１）を実行している演算器１の分岐回路が故障などにより、テスト結果が正しく「真」である（p=1）にも関わらず、実際に処理Ｙ（４０）にジャンプできなかった場合には、トラップ（３０２）に進む。つまり、図３に示す「(p) break 10 」に優先権が移り、かかる場合には「p=1」であるので「break 10」が実行される。すると、図４に示すコーディングのトラップ先となるリカバリ処理（６０）が実行され、トラップ元のアドレスを取得して格納し（６０１）、障害情報などを採取する障害処理を実行して（６０２）、障害処理が完了した時点でトラップ元のアドレスの次のアドレスへ復帰する（６０３）、という障害対応処理を行なう。そして、その後、分岐処理ｂ（３０３）に復帰し、当該分岐処理ｂが実行され、ここで正常に分岐が実行される。
【００２８】
一方、分岐処理ａ（３０１）にて、テストＡ（２０２）の結果が「偽」の場合や、分岐処理ａ（３０１）において「ｐ」というレジスタが壊れたハードウェア障害によりテストＡ（２０２）の結果が不正（プレディケーションレジスタ故障）である場合には、処理Ｙ（４０）へ分岐は実行されずに、サイクル３０内のトラップ（３０２）へ進む。但し、このとき、「ｐ＝０」であるため、トラップ（３０２）では何もせず、サイクル３０における後続の分岐処理ｂ（３０３）へ進む。そして、分岐処理ｂ（３０３）は、テストＢ（２０３）の結果に応じて処理Ｙ（４０）へ分岐するか、もしくは処理Ｚ（５０）へ進むが、単に上述した「ｐ」というレジスタが壊れた場合には（サイクル２における演算器２の故障）、テストＢ（２０３）の結果は「真」となり、「ｒ＝１」となるので、分岐処理ｂ（３０３）で正常に処理Ｙ（４０）に分岐される。
【００２９】
なお、演算器１及び演算器２の双方が壊れ、「(p) br.cond.spnt Y」及び「(p) break 10」にジャンプできない場合であっても、演算器３による「(r) br.cond.spnt」で正しく分岐することができる。また、「p=r=0」のケースでは、分岐条件が成り立たないので、サイクル３の「(p) br.cond.spnt」、「(p) break 10」「(r)br.cond.spnt Y」は、分岐先アドレスの生成のみで、実際にはジャンプせずにNOP動作となる。
【００３０】
以上のように、本発明によると、分岐条件となるテスト処理を多重化しているため、信頼性の向上を図ることができると共に、分岐処理ａにて正常に分岐されないなどハードウェア障害が発生した場合であっても、かかる障害情報の取得などリカバリ処理がトラップにて実行されるため、さらなる信頼性の向上を図ることができると共に、後続する他の分岐処理ｂによる処理が実行されることで、処理性能の低下を抑制することができる。特に、ＶＬＩＷ型プロセッサを用いて、同一の分岐処理ａ，ｂを異なる演算器にてほぼ並列に実行することで、より有効に処理性能の低下を抑制することができる。
【００３１】
ここで、上述した二重化されたテストＡとテストＢとの処理は、同一の命令を使ってテスト処理する必要はない。論理的に同一のテスト結果が得られる別のテスト命令を各テスト処理にて用いてもよい。
【００３２】
また、上記では、図２のサイクル２においてテストＡとテストＢを実施しているが、テストＡとテストＢは、処理Ｗの次サイクルで実施する必要はなく、少なくとも１サイクル以上後に実行されればよい。さらには、テストＡとテストＢは、必ずしも同じサイクルで実行される必要はない。そして、テストＡとテストＢの実行順序は、テストＢが先に実行されても同じである。但し、テストＡは分岐処理ａよりも前のサイクルで実行される必要があり、テストＢは分岐処理ｂより前のサイクルで実行することが保障できればよい。
【００３３】
さらに、上記では、テスト処理を二重化する場合について記載しているが、かかるテスト処理を三重化以上にして構成してもよい。これにより、さらなる信頼性の向上を図ることができる。そして、かかる場合には、各テスト処理ごとに対応する分岐処理が実行されるよう構成するが、いかなる分岐処理の間に上述したリカバリ処理つまりトラップを配置してもよく、全ての分岐処理の間に配置すると望ましい。
【産業上の利用可能性】
【００３４】
本発明は、高性能を要求されるプログラムにおいて、データインティグリティを高めることも必要なミッションクリティカルなプログラムの開発といった用途に適用することができ、産業上の利用可能性を有する。
【図面の簡単な説明】
【００３５】
【図１】情報処理装置の構成及び動作を示す説明図である。
【図２】情報処理装置の構成及び動作を示す説明図である。
【図３】コーディング例を示す図である。
【図４】コーディング例を示す図である。
【符号の説明】
【００３６】
７０  情報処理装置
２０２  テストＡ
２０３  テストＢ
３０１  分岐処理ａ
３０２  トラップ
３０３  分岐処理ｂ
【図１】
0004747028.tif 000002
【図２】
0004747028.tif 000003
【図３】
0004747028.tif 000004
【図４】
0004747028.tif 000005