(57)【要約】【課題】複数のプロセッサを搭載する情報処理装置において、プロセッサ間の動作タイミングにずれが発生しても動作異常が発生したプロセッサを精度よく特定する。【解決手段】情報処理装置を、プログラムの指定位置に対応する命令をそれぞれ実行する複数のプロセッサと、各プロセッサから出力された命令の実行結果を示す値を格納する格納部と、プロセッサごとに格納部に格納された各プロセッサからの値を相互に比較する比較部と、比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定部とを有する構成とする。【選択図】図２
2015207237.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの指定位置に対応する命令をそれぞれ実行する複数のプロセッサと、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納する格納部と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する比較部と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定部と
を有する情報処理装置。
【請求項２】
前記命令は、前記各プロセッサに、前記命令の実行結果を示す値を前記格納部に格納したことを示すよう指標部を設定させ、
前記情報処理装置はさらに、前記指標部の前記設定を確認して、前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したか否かを判定する判定部を有し、
前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したと前記判定部が判定したときに、前記比較部は前記プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する
請求項１に記載の情報処理装置。
【請求項３】
前記複数のプロセッサを相互に識別する番号に基づいて前記複数のプロセッサから代表プロセッサが決定され、
前記代表プロセッサは、前記命令の実行結果を示す値が前記格納部に格納されたことを示すよう前記指標部が設定された後で、前記命令の実行結果を示す値が前記格納部に格納されていないことを示すよう前記指標部を設定する
請求項１または請求項２に記載の情報処理装置。
【請求項４】
複数のプロセッサにプログラムの指定位置に対応する命令をそれぞれ実行させる処理と、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納部に格納する処理と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する処理と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定処理と
を行う情報処理方法。
【請求項５】
コンピュータに、
複数のプロセッサにプログラムの指定位置に対応する命令をそれぞれ実行させる処理と、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納部に格納する処理と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する処理と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定処理と
を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本件開示の発明は、複数のプロセッサを有する情報処理装置、情報処理方法および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、複数のＣＰＵ（Central Processing Unit）が搭載されている情報処理装置にお
いて、動作異常の発生したＣＰＵを特定する場合、ＣＰＵが処理する各命令および結果をクロックごとにＣＰＵ間で逐一比較していた。また、情報処理装置において、各ＣＰＵが同期ポイントに到達したときに設定する同期フラグを確認して、同期処理が完了したことをチェックしていた（例えば、特許文献１、２を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００２−３１２１９０号公報
【特許文献２】特開平１０−２４０５４９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかし、上記の技術では、各ＣＰＵとも動作異常がないにもかかわらず、次のような要因により誤ってＣＰＵの動作が異常とみなされる可能性がある。すなわち、第１に、近年は、ソフトエラーによるビット反転対策のためキャッシュ等にＥＣＣ（Error Correcting
Code）を付加したＣＰＵが主流となってきている。例えば、あるＣＰＵでビット反転が
発生した場合、誤り訂正が行われることで当該ＣＰＵの動作タイミングと誤り訂正が行われていない他のＣＰＵの動作タイミングとの間にずれが生じる。動作タイミングがずれるとＣＰＵ間の動作に食い違いが生じる。このため、ＣＰＵ動作をクロックごとに比較する方法では、誤り訂正が行われたＣＰＵには動作異常が発生したとみなされる。
【０００５】
第２に、近年は、ＣＰＵの処理の高速化を図るため、ＣＰＵにパイプライン処理による分岐予測方式を採用することが一般的となっている。分岐予測方式では、ＣＰＵの個体特性や温度等の外的要因によってＣＰＵが設定するレジスタ値が変化すると、分岐方向が変わる場合がある。このため、複数のＣＰＵの間で、最終的な演算処理結果は同じでも、条件分岐命令によって採る演算経路が異なる場合がある。したがって、同期ポイントなどの所定のタイミングでＣＰＵ動作を比較しても、ＣＰＵ間で異なる演算経路を採る場合、正常に動作しているＣＰＵに動作異常が発生したとみなされる可能性がある。
【０００６】
本件開示の技術は、上記に鑑みてなされたものであり、複数のプロセッサを搭載する情報処理装置において、プロセッサ間でハードウェア上の動作に相違が発生しても動作異常の誤検出を低減することを課題とする。
【課題を解決するための手段】
【０００７】
本件開示の情報処理装置は、１つの側面では、プログラムの指定位置に対応する命令をそれぞれ実行する複数のプロセッサと、各プロセッサから出力された命令の実行結果を示す値を格納する格納部と、プロセッサごとに格納部に格納された各プロセッサからの値を相互に比較する比較部と、比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定部とを有する。
【発明の効果】
【０００８】
本件開示の技術によれば、複数のプロセッサを搭載する情報処理装置において、プロセッサ間でハードウェア上の動作に相違が発生しても動作異常の誤検出を低減できる。
【図面の簡単な説明】
【０００９】
【図１】図１は、一実施形態における情報処理装置を有するサーバのハードウェア構成を示す概略構成図である。
【図２】図２は、一実施形態におけるプロセッサモジュールのハードウェア構成を示す概略構成図である。
【図３】図３は、一実施形態におけるプロセッサモジュールの機能部を示す機能ブロック図である。
【図４】図４は、一実施形態におけるプロセッサモジュールにより実行されるオブジエクトファイルを生成する処理を示すフローチャートの一部である。
【図５】図５は、一実施形態におけるプロセッサモジュールにより実行されるオブジエクトファイルを生成する処理を示すフローチャートの一部である。
【図６】図６は、一実施形態におけるプロセッサモジュールにより実行される処理を示すフローチャートの一部である。
【図７】図７は、一実施形態におけるプロセッサモジュールにより実行される処理を示すフローチャートの一部である。
【発明を実施するための形態】
【００１０】
まず、一実施形態における情報処理装置について図面を参照しながら説明する。本実施形態では、一例として図１に示すサーバについて説明する。なお、以下の説明は例示にすぎず、特許請求の範囲を限定するものではない。
【００１１】
図１に示すように、本実施形態に係るサーバ１０は、プロセッサモジュール（ＰＭ：Processor Module）＃００  １０ａおよびプロセッサモジュール＃０１  １０ｂを備える。なお、ＰＭ＃００  １０ａ、ＰＭ＃０１  １０ｂが、情報処理装置の一例に相当する。ＰＭ＃００  １０ａおよびＰＭ＃０１  １０ｂは、ＯＳ（Operating System）等の基本ソフトウェアおよび各種アプリケーションを実行する。また、サーバ１０は、共有メモリ（ＳＳＭ：Shared Storage Module）＃００  １０ｃおよび共有メモリ＃１０  １０ｄを備え
る。ＳＳＭ＃００  １０ｃおよびＳＳＭ＃１０  １０ｄには、ＰＭ＃００  １０ａおよびＰＭ＃０１  １０ｂが同期を取るためのデータ等が記憶される。
【００１２】
また、サーバ１０は、システムバス制御モジュール（ＳＣＭ：System-bus Control Module）＃００  １０ｅおよびシステムバス制御モジュール＃１０  １０ｆを備える。ＳＣ
Ｍ＃００  １０ｅおよびＳＣＭ＃１０  １０ｆは、サーバ１０内のデータの転送経路を制御する。さらに、サーバ１０は、データの入出力を制御する各種Ｉ／Ｏ制御モジュールとして、メディア制御モジュール（ＭＣＭ：Media Control Module）＃００  １０ｇおよびメディア制御モジュール＃１０  １０ｈ、通信制御モジュール（ＣＣＭ：Communication Control Module）＃００  １０ｉおよび通信制御モジュール＃１０  １０ｊ、ＬＡＮ制御モジュール（ＬＮＭ：Local Area Network Control Module）＃００  １０ｋおよびＬＡ
Ｎ制御モジュール＃１０  １０ｍを備える。
【００１３】
ＭＣＭ＃００  １０ｇおよびＭＣＭ＃１０  １０ｈは、それぞれシステムバス＃０１  １０ｘ、システムバス＃１１  １０ｗを介してＰＭ＃００  １０ａ内の各構成要素との間でハードディスク等メディア１０ｎ、１０ｐのデータの取得や記憶等を制御する。ハードディスク等メディア１０ｎ、１０ｐには、画像を含む種々のメディアデータが記憶される。ＣＣＭ＃００  １０ｉおよびＣＣＭ＃１０  １０ｊは、それぞれモデム１０ｑ、１０ｒを介してデータの送受信を制御する。ＬＮＭ＃００  １０ｋおよびＬＮＭ＃１０  １０ｍは、それぞれハブ１０ｓ、１０ｔを介して所定の通信規格に基づく有線ないし無線のデー
タ通信を制御する。
【００１４】
図１に示すように、本実施形態に係るサーバ１０では、二重化あるいは冗長化されたシステムバスに接続する上記の各機能モジュールを、二重化あるいは冗長化して構成されている。これにより、サーバ１０では、各機能モジュールまたはシステムバスに故障が発生した場合は、二重化あるいは冗長化された他の機能モジュールまたはシステムバスに、故障した機能モジュールまたはシステムバスの機能が引き継がれることで、サーバ１０の運用が継続される。なお、図１に示すサーバ１０の構成は一例にすぎず、本実施形態における構成を限定するものではない。
【００１５】
各機能モジュールはそれぞれ自モジュールの処理を制御するためのＣＰＵを備えている。さらに、特にいわゆるフォールトトレランスの観点から信頼性の向上が求められるモジュールには、ＣＰＵが複数個搭載されている。これによりＣＰＵの誤動作等によるデータ異常を検出し、誤動作が発生したＣＰＵの動作を停止し、正常に動作するＣＰＵを用いてモジュールの継続的な運用が図られる。
【００１６】
次に、図２に、本実施形態に係る情報処理装置の一例としてのＰＭ＃００  １０ａの概略構成を示す。なお、図２に示す構成は、ＰＭ＃００  １０ａに限らず、ＰＭ＃０１  １０ｂの他、図１に示す各モジュールやサーバ１０が備えるモジュールに適用してもよい。したがって、本実施形態の種々の処理は、ＰＭ＃００  １０ａに限らず、種々のモジュールが実行することができる。また、以下の説明で、ＣＰＵ＃１〜ＣＰＵ＃ｎには、同種のアーキテクチャが実装されているものとする。
【００１７】
図２に示すように、ＰＭ＃００  １０ａは、ｎ個のＣＰＵ＃１  １００ａ、ＣＰＵ＃２
１００ｂ・・・ＣＰＵ＃ｎ  １００ｃを備える。また、ＰＭ＃００  １０ａは、ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが処理する命令に従って各種データのアクセスを制御するデータ転送機構２００を備える。データ転送機構２００は、ｎ個のＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃのそれぞれに対応するｎ個の命令分離部２００ａ、２００ｂ、２００ｃを備える。
【００１８】
命令分離部２００ａ、２００ｂ、２００ｃは、対応するＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが、ローカルストレージユニット（ＬＳＵ）であるメモリ３００に対してデータの書き込みや読み出しを行う場合は、メモリアクセスとしてメモリ３００とのデータの送受信を行う。また、命令分離部２００ａ、２００ｂ、２００ｃは、対応するＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが、バス制御機構５００に対してデータの入出力を行う場合に、Ｉ／Ｏアクセスとして待ち合わせ／比較部２００ｄとのデータの送受信を行う。
【００１９】
例えば、ＰＭ＃００  １０ａの外部にアクセスするＩ／Ｏ命令が発生した場合、当該命令は、命令分離部２００ａ、２００ｂ・・・２００ｃによりＰＭ＃００  １０ａ内向けの命令と分離される。次いで、待ち合わせ／比較部２００ｄはＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃからの当該Ｉ／Ｏ命令が揃うまで待機し、各ＣＰＵ間でＩ／Ｏ命令が一致することを確認する。そして、待ち合わせ／比較部２００ｄは、Ｉ／Ｏ命令が一致することを確認した後、当該Ｉ／Ｏ命令を１つの命令として、システムバス＃００  １０ｕ又はシステムバス＃１０  １０ｖに発行する。バス制御機構５００は、システムバス＃００  １０ｕ、システムバス＃１０  １０ｖを経由してサーバ１０内の各機能モジュールと接続されている。
【００２０】
図２に示すように、メモリ３００は、ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが共通にアクセス可能な共通領域３００ｄを有する。また、メ
モリ３００は、ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃのそれぞれに、専用のＣＰＵ＃１用の領域３００ａ、ＣＰＵ＃２用の領域３００ｂ・・・ＣＰＵ＃ｎ用の領域３００ｃを有する。
【００２１】
共通領域３００ｄには、ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが実行するＯＳや種々のアプリケーションが格納される領域が設けられている。さらに、共通領域３００ｄには、ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃがフラグを設定するための設定フラグ領域が設けられている。また、共通領域３００ｄには、どのＣＰＵが動作中であるか否かを示す情報を格納するＣＰＵ情報レジスタ３００ｅが設けられている。なお、どのＣＰＵが動作中であるか否かを示す情報は、少なくとも動作中のＣＰＵの番号がわかる情報であれば任意に構成できる。
【００２２】
また、ＣＰＵ＃１  １００ａ用の領域３００ａは、ＣＰＵ＃１  １００ａの処理に使用される変数およびスタック領域とＣＰＵ＃１  １００ａによる値の格納先であるレジスタ＃１を有する。なお、本実施形態において、レジスタ＃１は、ＣＰＵ＃１  １００ａが特殊命令を実行したときに値を格納する領域である。レジスタ＃１における各値の格納については後述する。なお、他のＣＰＵ＃２用の領域３００ｂ、ＣＰＵ＃ｎ用の領域３００ｃも同様の構成を有する。
【００２３】
ＰＭ＃００  １０ａは、さらに比較機構６００を備える。比較機構６００は、ＣＰＵ＃１用の領域３００ａ、ＣＰＵ＃２用の領域３００ｂ・・・ＣＰＵ＃ｎ用の領域３００ｃのレジスタ＃１、レジスタ＃２・・・レジスタ＃ｎに格納されている値を読み取って各値を相互に比較する。また、比較機構６００は、レジスタ＃１、レジスタ＃２・・・レジスタ＃ｎの値を読み取る際に、レジスタのアドレスに基づいて値を格納したＣＰＵの番号も取得する。これにより、比較機構６００は、後述するレジスタの各値の比較処理によってＣＰＵの番号を特定することができる。比較機構６００は、レジスタ＃１、レジスタ＃２・・・レジスタ＃ｎに格納された各値の比較によって動作異常と特定されたＣＰＵの番号をＣＰＵ停止機構４００に送信する。
【００２４】
図３にＰＭ＃００  １０ａにおける機能ブロック図を示す。ＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが各種プログラムを実行することにより、ＰＭ＃００  １０ａは格納部２０ａ、比較部２０ｂ、指標部２０ｃ、特定部２０ｄ、判定部２０ｅとして機能する。本実施形態では、各ＣＰＵが、以下に説明する特殊命令において指定された値を格納部２０ａに格納する。比較部２０ｂは、レジスタに格納された値をＣＰＵ間で相互に比較する。指標部２０ｃは、各ＣＰＵが特殊命令に従って値を格納部２０ａに格納したか否かを示す。特定部２０ｄは、各ＣＰＵによって格納部２０ａに格納された各値の比較の結果において、他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したＣＰＵを特定する。そして、判定部２０ｅは、指標部２０ｃを参照して、各ＣＰＵによる格納部への値の格納が完了したか否かを判定する。なお、各部の動作の詳細については、後述する。
【００２５】
次に、本実施形態においてＣＰＵ＃１  １００ａ、ＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃが実行する特殊命令の命令コードの生成方法について、図４、５のフローチャートを参照しながら説明する。なお、以下の説明において各処理をＯＰと略記する。図４、５のフローチャートに示す処理は、例えばユーザがＣＰＵの動作検証を所望する際にＯＰ１０１の処理を行うことで開始される。なお、ユーザが所望するタイミングでＯＰ１０１の処理が開始されるよう、サーバ１０において実行されるＯＳやアプリケーションを設定してもよい。
【００２６】
ＯＰ１０１において、展開ツールが起動される。本実施形態における展開ツールとは、
以下に説明する特殊命令をＣＰＵに実行させるステートメントの関数をオリジナルプログラムの指定位置に埋め込み、プログラムとして展開するツールである。本実施形態においては、展開ツールには、オリジナルプログラムへの当該ステートメントの埋め込み処理をツール起動後に自動で実行するか否かを決定するためのオプションが設定されている。ここでは当該オプションを自動生成オプションと呼ぶ。なお、自動生成オプションをオンにするかオフにするかの設定はユーザによって行うようにすればよい。展開ツールの起動が完了すると、展開ツールにより処理はＯＰ１０２に進められる。
【００２７】
ＯＰ１０２において、展開ツールは自動生成オプションがオンに設定されているか否かを判定する。展開ツールは、自動生成オプションがオンに設定されている場合は（ＯＰ１０２：Ｙｅｓ）、処理をＯＰ２００に進める。一方、展開ツールは、自動生成オプションがオフに設定されている場合は（ＯＰ１０２：Ｎｏ）、処理をＯＰ１０３に進める。なお、本実施形態において、自動生成オプションがオフに設定されている場合は、オリジナルプログラムにプログラマが手動で上記のステートメントを埋め込んでプログラムとして展開する。なお、自動生成オプションがオフに設定されている場合、プログラマが、情報処理装置（図１  サーバー１０）、ＰＭ＃００  １０ａ、ＣＰＵ＃１  １００ａ〜ＣＰＵ＃ｎ  １００ｃ等の性能を考慮して、特殊命令用の関数を作成して手動でオリジナルプログラムに追加することができる。すなわち、以下に説明するＯＰ２００の処理がプログラマによって手動で完了されているとみなし、処理はＯＰ１０３に進められる。
【００２８】
処理がＯＰ２００に進められると、展開ツールは図５に示すフローチャートの処理を開始する。展開ツールは、ＯＰ２０１の判定処理において、ｘｘｘ．ｃファイル内のプログラムをシークし終えた、すなわち、最終行までシークしたか否かを判定する。展開ツールは、最終行までシークした場合は（ＯＰ２０１：Ｙｅｓ）、特殊命令用のステートメントの関数が追加される処理はＥＮＤとなる。また、展開ツールは、最終行までシークしていない場合は（ＯＰ２０１：Ｎｏ）、処理をＯＰ２０２に進める。
【００２９】
ＯＰ２０２の判定処理において、当該所定の行が代入文である場合は（ＯＰ２０２：Ｙｅｓ）、処理をＯＰ２０３に進める。また、展開ツールは、該当する行が代入文でない場合は（ＯＰ２０２：Ｎｏ）、処理をＯＰ２０５に進める。ＯＰ２０３において、展開ツールは、ＯＰ２０２において代入文であると判定された行が、先頭行あるいは、以下に説明するＯＰ２０４において関数が追加された行から数えてＭ個目（Ｍは自然数）の代入文の行であるか否かを判定する。展開ツールは、ＯＰ２０３の判定処理において、該当する行がＭ個目の代入文の行である場合は（ＯＰ２０３：Ｙｅｓ）、処理をＯＰ２０４に進める。また、展開ツールは、該当する行がＭ個目の代入文の行でない場合は（ＯＰ２０３：Ｎｏ）、処理をＯＰ２０５に進める。なお、本実施形態では、ＯＰ２０４において関数が追加された行から数えてＭ個目の代入文の行としているが、Ｍの値はプログラマ等が任意に指定することができる。
【００３０】
ＯＰ２０４において、展開ツールは、ＯＰ２０３においてＭ個目の代入文の行（この場合、ａ＝ｂ；）であると判定された行の後に左辺の値ａを引数とした特殊命令関数のステートメントを追加する。本特殊命令関数は、ＣＰＵに以下の動作をさせるためのプログラムコードとして展開される。つまり、ＣＰＵに引数ａのその時点における値（例えば「３」など）を自ＣＰＵのレジスタに設定させる。さらに、ＣＰＵに所定の値を設定した後に自ＣＰＵ用の設定フラグをオンに設定させる。また、ＣＰＵにオンに設定した設定フラグが、代表ＣＰＵによってオフに変更されるまで待機させる。なお、代表ＣＰＵの決定方法については後述する。そして、ＣＰＵに、設定フラグが代表ＣＰＵによってオフに変更されたら、当該関数による特殊命令の処理を終了し、当該関数が記述されている行の次の行から通常処理を実行させる。本実施形態において、ｘｘｘ．ｃファイルがコンパイルされることで、上記のステートメントはＣＰＵに以下の処理を実行させる特殊命令として生成
される。ＯＰ２０４関数の追加処理が完了すると、展開ツールは処理をＯＰ２０５に進める。
【００３１】
ＯＰ２０５において、展開ツールは、ｘｘｘ．ｃファイル内のプログラムを１行シークして処理をＯＰ２０１に戻す。これにより、展開ツールは、ｘｘｘ．ｃファイル内のプログラムを１行ずつシークしながら代入文がＭ個出現するたびに上記の特殊命令関数のステートメントを追加することができる。
【００３２】
図５に示すフローチャートの処理が終了すると、ｘｘｘ．ｃファイルがコンパイルされて通常命令に上記の通り特殊命令が挿入されたオブジェクト（ｘｘｘ．ｏ）が生成される。生成されたオブジェクトは、サーバ１０起動時にＰＭ＃００  １０ａのメモリ３００内ＣＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄにローディングされ各ＣＰＵにより実行される。図６、７を参照しながら、当該オブジェクトを実行する際の各ＣＰＵの処理について説明する。一例として、ＰＭ＃００  １０ａ内のＣＰＵ＃１  １００ａが、図６、７に示す処理を実行する場合について説明するが、他のＣＰＵ＃２  １００ｂ・・・ＣＰＵ＃ｎ  １００ｃも同様の処理を実行する。
【００３３】
ＯＰ３０１において、ＣＰＵ＃１  １００ａはｘｘｘ．ｏファイルに記述された各命令を実行する。本実施形態において、ｘｘｘ．ｏファイルには先頭行からＭ個目の代入文が出現する行までは通常の命令が記述されている。したがって、ＣＰＵ＃１  １００ａは最初にそれらの命令を実行する。そして、ＯＰ３０２において、ＣＰＵ＃１  １００ａは、先頭行からＭ個目の代入文が出現する行に記述されている特殊命令の実行を開始する。
【００３４】
ＯＰ３０３において、ＣＰＵ＃１  １００ａは自ＣＰＵの番号を認識する、すなわちＣＰＵ＃ｋ（ｋは１〜ｎの自然数）のＣＰＵであればｋ番目のＣＰＵであると認識する。したがって、ＣＰＵ＃１  １００ａは１番目のＣＰＵであると認識する。次いで、処理はＯＰ３０４に進められる。ＯＰ３０４において、ＣＰＵ＃１  １００ａは、自ＣＰＵの実装状況を設定する、すなわち本実施形態ではＣＰＵ＃１  １００ａが動作中であることを示す値を、メモリ３００のＣＰＵ情報レジスタ３００ｅに格納する。次いで、処理はＯＰ３０５に進められる。
【００３５】
ＯＰ３０５では、ＣＰＵ＃１  １００ａは、ＰＭ＃００  １０ａ内の動作中の他のＣＰＵとの間で、代表ＣＰＵを決定する。本実施形態において、代表ＣＰＵは、次のように決定される。動作中の各ＣＰＵは、メモリ３００のＣＰＵ情報レジスタ３００ｅから、ＣＰＵ＃１  １００ａ〜ＣＰＵ＃ｎ  １００ｃのうちどのＣＰＵが動作中であるかを示す情報を読み込む。そして、各ＣＰＵは、動作中のＣＰＵの中で番号が最も小さい、すなわちＣＰＵ＃ｋにおけるｋの値が最も小さいＣＰＵを代表ＣＰＵとして決定する。なお、ＣＰＵの番号を用いて代表ＣＰＵを決定できれば、例えばｋの値が最も大きいＣＰＵを代表ＣＰＵとするなど、他の方法を用いてもよい。本実施形態では、ＣＰＵ＃１  １００ａが動作中であるため、ＣＰＵ＃１  １００ａが代表ＣＰＵに決定される。ＣＰＵ＃１  １００ａは代表ＣＰＵが決定されると、処理をＯＰ３０６に進める。
【００３６】
ＯＰ３０６において、ＣＰＵ＃１  １００ａは、メモリ３００のＣＰＵ＃１領域３００ａのレジスタ＃１内の領域に、特殊命令に従って指定された値ａを格納する。なお、レジスタ＃１〜レジスタ＃ｎが格納部２０ａの一例に相当する。次いで、ＣＰＵ＃１  １００ａは、処理をＯＰ３０７に進める。ＯＰ３０７において、ＣＰＵ＃１  １００ａは、メモリ３００のＣＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄの設定フラグ＃１をオンに設定する。設定フラグがオンに設定されることで、代表ＣＰＵは、設定フラグをオンに設定したＣＰＵによる値ａの格納処理が完了したことを認識することができる。なお、設定フラグ＃１〜設定フラグ＃ｎが、指標部２０ｃの一例に相当する。ＣＰＵ＃１  １００ａは、設定
フラグ＃１の設定が完了すると、処理をＯＰ３０８に進める。
【００３７】
ＯＰ３０８では、ＣＰＵ＃１  １００ａは、ＯＰ３０４において認識したＣＰＵの番号に基づいて自ＣＰＵが代表ＣＰＵであるか否かを判定する。本実施形態では、ＯＰ３０５においてＣＰＵ＃１が代表ＣＰＵとして決定されている。したがって、ＣＰＵ＃１  １００ａは、自ＣＰＵが代表ＣＰＵであると判定し（ＯＰ３０８：Ｙｅｓ）、処理をＯＰ３０９に進める。なお、上記した通り、図６、７のフローチャートに示す処理は、ＰＭ＃００
１０ａの動作中の各ＣＰＵが実行する。したがって、本実施形態において、ＣＰＵ＃１
１００ａ以外の動作中のＣＰＵは、ＯＰ３０８において自ＣＰＵは代表ＣＰＵでないと判定し（ＯＰ２０８：Ｎｏ）、処理をＯＰ３１４に進める。
【００３８】
以下に説明するＯＰ３０９〜ＯＰ３１１の処理は、代表ＣＰＵによって実行される処理である。本実施形態において、代表ＣＰＵであるＣＰＵ＃１  １００ａは、ＯＰ３０９においてＣＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄの設定フラグ＃１〜＃ｎから動作中のＣＰＵに対応する各設定フラグの値を読み込む。なお、ＣＰＵ＃１  １００ａは、メモリ３００のＣＰＵ情報レジスタ３００ｅに格納された情報から動作中のＣＰＵを特定することができる。ＣＰＵ＃１  １００ａは、各設定フラグの値の読み込みが完了したら、処理をＯＰ３１０に進める。
【００３９】
ＯＰ３１０では、ＣＰＵ＃１  １００ａは、ＯＰ３１０において読み込んだ動作中の各ＣＰＵの設定フラグの値がオンに設定されているか否かを判定する。ＯＰ３１０において、設定フラグの値がオフに設定されているということは、その設定フラグを設定するＣＰＵが上記の値ａの格納処理を完了していないことを意味する。ＣＰＵ＃１  １００ａは、値がオフに設定されている設定フラグがあると判定した場合は（ＯＰ３１０：Ｎｏ）、処理をＯＰ３０９に戻す。また、ＣＰＵ＃１  １００ａは、動作中の各ＣＰＵの設定フラグの値がオンに設定されていると判定した場合は（ＯＰ３１０：Ｙｅｓ）、処理をＯＰ３１１に進める。ＯＰ３１１では、ＣＰＵ＃１  １００ａは、オンに設定されている動作中の各ＣＰＵの設定フラグの値をオフに設定する。これにより、各設定フラグの値は、ＯＰ３０２において特殊命令の処理が開始される前の状態に戻される。
【００４０】
本実施形態において、自ＣＰＵが代表ＣＰＵでない動作中の各ＣＰＵは、ＯＰ３０８からＯＰ３１４に進み、メモリ３００のＣＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄの自ＣＰＵに対応する設定フラグから値を読み込む。次いで、当該各ＣＰＵは、処理をＯＰ３１５に進め、読み込んだ設定フラグの値がオフに設定されているか否かを判定する。ＯＰ３１５の処理により、ＯＰ３１１の処理が実行され、代表ＣＰＵ、本実施形態ではＣＰＵ＃１
１００ａが設定フラグの値をオフにしたか否かが判定される。各ＣＰＵは、自ＣＰＵに対応する設定フラグの値がオフに設定されていると判定した場合は（ＯＰ３１５：Ｙｅｓ）、処理をＯＰ３１２に進める。また、各ＣＰＵは、自ＣＰＵに対応する設定フラグの値がオフに設定されていないと判定した場合（ＯＰ３１５：Ｎｏ）、すなわちＯＰ３０７において設定したオンのままである場合は、処理をＯＰ３１４に戻す。
【００４１】
ＯＰ３１２において、代表ＣＰＵであるＣＰＵ＃１  １００ａおよび動作中の他のＣＰＵは、ＯＰ３０２において処理を開始した特殊命令の処理を終了する。次いで、処理はＯＰ３１３に進められ、オブジェクトファイル内の特殊命令に続いて記述されている残りの通常処理の命令を実行する。なお、オブジェクトファイル内に、上記の特殊命令が複数記述されている場合は、特殊命令の処理が実行されるたびに、動作中の各ＣＰＵはＯＰ３０２〜ＯＰ３１３の処理を繰り返す。そして、各ＣＰＵは、オブジェクトファイルの実行が完了すると、本フローチャートの処理を終了する。
【００４２】
本実施形態において、比較機構６００は、動作中の各ＣＰＵについてメモリ３００のＣ
ＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄの設定フラグ＃１〜＃ｎから設定フラグの値を取得し、各値の論理積演算を行う。なお、比較機構６００は、設定フラグの値がオンであるとき入力を真とみなす。すなわち、比較機構６００は各設定フラグの値がオンであるときに真とみなす。なお、当該論理積演算は比較機構６００にＡＮＤ演算装置を設けて実行させればよく、周知の技術を用いて実行するよう構成すればよい。また、比較機構６００が、比較部２０ｂ、特定部２０ｄ、判定部２０ｅの一例に相当する。
【００４３】
さらに、比較機構６００は、上記の論理積演算の結果が真である場合に、メモリ３００のＣＰＵ＃１領域３００ａ〜ＣＰＵ＃ｎ領域３００ｃのうち、動作中の各ＣＰＵに対応する領域のレジスタから引数ａの値を取得する。そして、比較機構６００は、取得した引数ａの値について多数決論理の演算を行って引数ａの各値を相互に比較する。ＣＰＵに異常動作が発生している場合、当該ＣＰＵは上記の特殊命令により指定された値を引数ａの値として格納する際に、指定された値以外の値を格納する可能性がある。本実施形態では、比較機構６００により、各レジスタに格納された引数ａの値を相互に比較することで、指定された値以外の値を格納したＣＰＵが特定され、特定されたＣＰＵに異常動作が発生しているとみなされる。
【００４４】
そして、比較機構６００は、多数決論理に従い、各レジスタに格納された値のうち他よりも格納されている数が多い値以外の値を格納したＣＰＵの番号を特定する。例えば、ＣＰＵ＃１、＃３、＃４、＃６、＃９が動作中であり、上記の特殊命令で引数ａに値「３」を格納させる場合に、各ＣＰＵ用のレジスタに格納された値が、それぞれ「２」、「３」、「３」、「５」、「３」である場合を考える。この場合、レジスタに格納された値のうち値「３」が、他の値「２」、「５」よりも格納されている数が多い。したがって、比較機構６００は、レジスタの値として値「３」と不一致の値「２」、「５」を格納したＣＰＵの番号、すなわちＣＰＵ＃１、＃６を特定する。
【００４５】
比較機構６００は、このように値の比較およびＣＰＵの特定が完了したら、特定したＣＰＵの番号をＣＰＵ停止機構４００に通知する。ＣＰＵ停止機構４００は、比較機構６００よって通知されたＣＰＵの番号に対応するＣＰＵの動作を停止する。例えば、上記の具体例であれば、ＣＰＵ停止機構４００は、ＣＰＵ＃１およびＣＰＵ＃６の動作を停止する。なお、本実施形態において、引数ａの値として他より多く設定された値の数が同数となった場合は、当該値をレジスタに格納したＣＰＵの動作は停止しないように構成することができる。あるいは、すべてのＣＰＵの動作を停止させるように構成することもできる。比較機構６００からＣＰＵ停止機構４００に出力される結果に基づいて、どのようにＣＰＵ＃１  １００ａ〜ＣＰＵ＃ｎ１００ｃを停止させるかは適宜構成することができる。
【００４６】
以上により、本実施形態において、ＰＭ＃００  １０ａでは、各ＣＰＵ＃１  １００ａ〜ＣＰＵ＃ｎ  １００ｃに対して、プログラムすなわちオブジェクトファイルの任意の位置において上記の特殊命令が実行されるよう構成することができる。これにより、各ＣＰＵの動作環境に応じて特殊命令の実行頻度を調整することができるため、特殊命令が実行されることによるＣＰＵの性能劣化の懸念は小さい。そして、ＰＭ＃００  １０ａでは、ＣＰＵ間で任意に指定された値の出力値を論理的に比較して動作異常が発生しているＣＰＵを特定することができる。また、特殊命令ではＣＰＵに任意に指定された値をレジスタに格納させるため、ＣＰＵが分岐処理により互いに異なる処理経路で処理を実行した場合でも、分岐方向が異なることが原因でＣＰＵに異常動作が発生したとみなされる懸念もない。
【００４７】
以上が本実施形態に関する説明であるが、上記の情報処理装置の構成や処理は、上記の実施形態に限定されるものではなく、本発明の技術的思想と同一性を失わない範囲内において種々の変更が可能である。例えば、上記の説明では、ＯＰ２０４により代入文がＭ個
出現するたびに特殊命令の関数が追加されるが、ＯＰ２０４の処理を省略して、代入文が出現するたびに特殊命令の関数が追加される構成としてもよい。
【００４８】
また、上記の特殊命令では、引数ａに指定値を格納させる構成としているが、格納先の引数は任意に設定できる。さらに、レジスタに格納される指定値のデータ長は、当該レジスタのサイズに応じて適宜設定できる。例えば、レジスタのサイズが２バイトである場合は、指定値のうち下位２バイトがレジスタに格納されるように構成することができる。また、上記の説明では、レジスタに格納された値を比較機構６００によって相互に比較する構成とした。しかし、例えばＯＰ３０１において代表ＣＰＵ（上記の場合はＣＰＵ＃１  １００ａ）が、各ＣＰＵ用の設定フラグがオンになっていると判定した場合に、各レジスタに格納された値を相互に比較する処理を行うよう構成してもよい。そして、代表ＣＰＵが、当該比較結果に基づいて上記のように動作異常が発生したＣＰＵを特定する処理を行うよう構成してもよい。このように構成することにより、比較機構６００が備える比較部２０ｂ、特定部２０ｄ、判定部２０ｅの各機能をソフトウェアとして実現することができる。
【００４９】
そして、上記の説明では、ＰＭ＃００  １０ａのＣＰＵ＃１  １００ａ〜ＣＰＵ＃ｎ  １００ｃには、同種のアーキテクチャが実装されているものとした。しかし、ＣＰＵが互いに異なる種類のアーキテクチャを実装する場合でも、図２に示したＣＰＵ＃１〜ＣＰＵ＃ｎ共通領域３００ｄを設ける代わりに各ＣＰＵが共通にアクセス可能なレジスタを設ければよい。これにより、互いに異種のアーキテクチャが実装されているＣＰＵを用いてＰＭ＃００  １０ａのＣＰＵ＃１〜ＣＰＵ＃ｎを構成しても上記の処理によって動作異常が発生したＣＰＵを精度よく特定することができる。
【００５０】
＜コンピュータが読み取り可能な記録媒体＞
コンピュータその他の機械、装置（以下、コンピュータ等）に上記情報処理装置の設定を行うための管理ツール、ＯＳその他を実現させるプログラムをコンピュータ等が読み取り可能な記録媒体に記録することができる。そして、コンピュータ等に、この記録媒体のプログラムを読み込ませて実行させることにより、その機能を提供させることができる。ここで、コンピュータは、例えば、サーバ等である。
【００５１】
ここで、コンピュータ等が読み取り可能な記録媒体とは、データやプログラム等の情報を電気的、磁気的、光学的、機械的、または化学的作用によって蓄積し、コンピュータ等から読み取ることができる記録媒体をいう。このような記録媒体のうちコンピュータ等から取り外し可能なものとしては、例えばフレキシブルディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＣＤ−Ｒ／Ｗ、ＤＶＤ、ブルーレイディスク、ＤＡＴ、８ｍｍテープ、フラッシュメモリ等のメモリカード等がある。また、コンピュータ等に固定された記録媒体としてハードディスクやＲＯＭ等がある。
【００５２】
以上の実施形態に関し、さらに以下の付記を開示する。
【００５３】
（付記１）
プログラムの指定位置に対応する命令をそれぞれ実行する複数のプロセッサと、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納する格納部と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する比較部と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定部と
を有する情報処理装置。
【００５４】
（付記２）
前記命令は、前記各プロセッサに、前記命令の実行結果を示す値を前記格納部に格納したことを示すよう指標部を設定させ、
前記情報処理装置はさらに、前記指標部の前記設定を確認して、前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したか否かを判定する判定部を有し、
前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したと前記判定部が判定したときに、前記比較部は前記プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する
付記１に記載の情報処理装置。
【００５５】
（付記３）
前記複数のプロセッサを相互に識別する番号に基づいて前記複数のプロセッサから代表プロセッサが決定され、
前記代表プロセッサは、前記命令の実行結果を示す値が前記格納部に格納されたことを示すよう前記指標部が設定された後で、前記命令の実行結果を示す値が前記格納部に格納されていないことを示すよう前記指標部を設定する
付記１または付記２に記載の情報処理装置。
【００５６】
（付記４）
複数のプロセッサにプログラムの指定位置に対応する命令をそれぞれ実行させる処理と、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納部に格納する処理と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する処理と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定処理と
を行う情報処理方法。
【００５７】
（付記５）
前記命令は、前記各プロセッサに、前記命令の実行結果を示す値を前記格納部に格納したことを示すよう指標部を設定させ、
前記情報処理方法はさらに、前記指標部の前記設定を確認して、前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したか否かを判定する判定処理を行い、
前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したと前記判定処理により判定されたときに、前記比較する処理は、前記プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する
付記４に記載の情報処理方法。
【００５８】
（付記６）
前記情報処理方法はさらに、
前記複数のプロセッサを相互に識別する番号に基づいて前記複数のプロセッサから代表プロセッサを決定する処理と、
前記命令の実行結果を示す値が前記格納部に格納されたことを示すよう前記指標部が設定された後で、前記命令の実行結果を示す値が前記格納部に格納されていないことを示すよう前記代表プロセッサに前記指標部を設定させる処理と
を行う付記４または付記５に記載の情報処理方法。
【００５９】
（付記７）
コンピュータに、
複数のプロセッサにプログラムの指定位置に対応する命令をそれぞれ実行させる処理と、
前記各プロセッサから出力された前記命令の実行結果を示す値を格納部に格納する処理と、
プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する処理と、
前記比較の結果において他のプロセッサの実行結果の値と不一致となる実行結果の値を出力したプロセッサを特定する特定処理と
を実行させる情報処理プログラム。
【００６０】
（付記８）
前記命令は、前記各プロセッサに、前記命令の実行結果を示す値を前記格納部に格納したことを示すよう指標部を設定させ、
前記情報処理プログラムはさらにコンピュータに、前記指標部の前記設定を確認して、前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したか否かを判定する判定処理を実行させ、
前記各プロセッサが前記命令の実行結果を示す値を前記格納部に格納したと前記判定処理により判定されたときに、前記比較する処理は、前記プロセッサごとに前記格納部に格納された前記各プロセッサからの値を相互に比較する
付記７に記載の情報処理プログラム。
【００６１】
（付記９）
前記情報処理プログラムはさらにコンピュータに、
前記複数のプロセッサを相互に識別する番号に基づいて前記複数のプロセッサから代表プロセッサを決定する処理と、
前記命令の実行結果を示す値が前記格納部に格納されたことを示すよう前記指標部が設定された後で、前記命令の実行結果を示す値が前記格納部に格納されていないことを示すよう前記代表プロセッサに前記指標部を設定させる処理と
を実行させる付記７または付記８に記載の情報処理プログラム。
【符号の説明】
【００６２】
１０    サーバ
１０ａ    プログラムモジュール
２０ａ    格納部
２０ｂ    比較部
２０ｃ    指標部
２０ｄ    特定部
２０ｅ    判定部
１００ａ、１００ｂ、１００ｃ    ＣＰＵ
３００    メモリ
４００    ＣＰＵ停止機構
６００    比較機構
【図１】
2015207237.tif 000003
【図２】
2015207237.tif 000004
【図３】
2015207237.tif 000005
【図４】
2015207237.tif 000006
【図５】
2015207237.tif 000007
【図６】
2015207237.tif 000008
【図７】
2015207237.tif 000009