(57)【要約】  従来、計算機システムにおいては計算誤りに耐性があるアプリケーションの計算においても、計算誤りを正確に訂正していたため、低電力化や高速化のために電源電圧や動作周波数を大きく変動させられない課題があった。  本発明では、第１プロセッサと第２プロセッサとを備える計算機システムで、第１プロセッサは、動作周波数または動作電圧の少なくとも一方が可変であり、第２プロセッサで動作する検出モジュールが第１プロセッサのエラーを検出し、第２プロセッサで動作する決定モジュールが第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することで、上述の課題を解決する。
2014033941.tif 000002
【特許請求の範囲】
【請求項１】
第１プロセッサと第２プロセッサとを備える計算機システムの制御方法であって、
前記第１プロセッサは、動作周波数または動作電圧の少なくとも一方が可変であり、
前記第２プロセッサで動作する検出モジュールが前記第１プロセッサのエラーを検出し、
前記第２プロセッサで動作する決定モジュールが前記第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することを特徴とする計算機システムの制御方法。
【請求項２】
請求項１に記載の計算機システムの制御方法において、
前記決定モジュールが前記第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定する際に、
前記検出モジュールが検出する前記エラーの頻度に基づいて、前記決定モジュールが前記第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することを特徴とする計算機システムの制御方法。
【請求項３】
請求項２に記載の計算機システムの制御方法において、
前記頻度は、前記検出モジュールが前記エラーの検出処理を行った回数当りに発生した前記エラーの検出回数であることを特徴とする計算機システムの制御方法。
【請求項４】
請求項１に記載の計算機システムの制御方法において、
前記計算機システムは、
前記第１プロセッサおよび前記第２プロセッサを含む第１情報処理装置と、
前記第１情報処理装置に前記エラーの検出条件を送信する第２情報処理装置とを備えることを特徴とする計算機システムの制御方法。
【請求項５】
請求項４に記載の計算機システムの制御方法において、
前記第２情報処理装置は、前記計算機システムに投入されるプログラムから前記検出条件を抽出することを特徴とする計算機システムの制御方法。
【請求項６】
請求項４に記載の計算機システムの制御方法において、
前記第１情報処理装置および前記第２情報処理装置は、サーバ装置であることを特徴とする計算機システムの制御方法。
【請求項７】
第１プロセッサと第２プロセッサとを備える計算機システムであって、
前記第１プロセッサは、動作周波数または動作電圧の少なくとも一方が可変であり、
前記第２プロセッサで動作する検出モジュールが前記第１プロセッサのエラーを検出し、
前記第２プロセッサで動作する決定モジュールが前記第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することを特徴とする計算機システム。
【請求項８】
請求項７に記載の計算機システムにおいて、
前記検出モジュールが検出する前記エラーの頻度に基づいて、前記決定モジュールが前記第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することを特徴とする計算機システム。
【請求項９】
請求項８に記載の計算機システムにおいて、
前記頻度は、前記検出モジュールが前記エラーの検出処理を行った回数当りに発生した前記エラーの検出回数であることを特徴とする計算機システム。
【請求項１０】
請求項７に記載の計算機システムにおいて、
前記計算機システムは、
前記第１プロセッサおよび前記第２プロセッサを含む第１情報処理装置と、
前記第１情報処理装置に前記エラーの検出条件を送信する第２情報処理装置とを備えることを特徴とする計算機システム。
【請求項１１】
請求項１０に記載の計算機システムにおいて、
前記第２情報処理装置は、前記計算機システムに投入されるプログラムから前記検出条件を抽出することを特徴とする計算機システム。
【請求項１２】
請求項１０に記載の計算機システムにおいて、
前記第１情報処理装置および前記第２情報処理装置は、サーバ装置であることを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機システムに関し、特に電源電圧または動作周波数の制御に関する。
【背景技術】
【０００２】
近年、大規模データを用いた認識処理や探索処理など大きな計算量が必要なアプリケーションの台頭が予想され、計算機の性能向上や低電力化が要求されている。しかしながら、計算機を構成する半導体スイッチ素子はその微細化に伴って静的及び動的な特性ばらつきが増大しており、従来のワーストケースベース設計では将来において計算機性能向上が困難となっている。【０００３】
特許文献１には、回路のクリティカルパスがアクティブになることは稀であることを利用し、エラー特性に基づいて電源電圧や周波数などを設定する技術が開示されている。特許文献１に開示の技術では、エラーが検知された場合、再計算などにより正しい値に訂正される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−５２０９５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
例えば学習処理や認識処理では１０．０１２や１０．１２５などの計算値よりも、これがヒトであるか否かを識別できる方が重要であり、多少の計算誤りが直ちにアプリケーションを破綻させるほどの影響を与えない場合がある。特に反復的な計算によって計算結果を平衡状態に収束させ解を得る計算手法では、計算誤りによる誤差は反復によって消えるため計算誤りに対する耐性が非常に高い特徴がある。すなわち、エラーには重要度があり、この重要度の基準はアプリケーションごとに異なる。しかし、特許文献１に記載の技術のアプローチはエラーを均一の重要度として扱うために、重要度の低いエラーに対してまで正確に再計算するため、電源電圧や動作周波数などを変動させる幅を大きくできない問題があった。【０００６】
そこで、本発明では、電源電圧や動作周波数などを変動させる幅を大きくする技術を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明では、第１プロセッサと第２プロセッサとを備える計算機システムで、第１プロセッサは、動作周波数または動作電圧の少なくとも一方が可変であり、第２プロセッサで動作する検出モジュールが第１プロセッサのエラーを検出し、第２プロセッサで動作する決定モジュールが第１プロセッサの動作周波数または動作電圧の少なくとも一方を決定することで、上述の課題を解決する。
【発明の効果】
【０００８】
電源電圧や周波数などを変動させる幅を大きく設定可能となる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施例である計算機システムの機能ブロック図である。
【図２】プログラム１０２が有する情報の例である。
【図３】本発明の実施例である計算機システムのハードウェア構成の例を示す図である。
【図４】計算ユニット３２１における電源電圧および動作周波数の制御領域の例を示す図である。
【図５】計算機システム１００のシステム動作フローチャートの例である。
【図６】メイン計算処理情報２０５へ誤り検出処理情報２２０と補正処理情報２３０を挿入する処理の例を示す図である。
【図７】計算機システム１００の計算動作フローチャートの例である。
【図８】誤り検出処理Ｓ７０２からログ出力処理Ｓ７１１までに対応するフローチャートの例である。
【図９】反復収束計算の反復回数ｉにおける計算結果Ｘの推移の例を示す図である。
【図１０】本発明の実施例である計算機システム１００１のシステム構成図である。
【発明を実施するための形態】
【００１０】
以下、実施例を図面を用いて説明する。
【実施例１】
【００１１】
本実施例では、アプリケーションが要求する信頼性に応じた低電力あるいは高速な計算を可能とする計算機システムの例を説明する。図１は、本発明の実施例である計算機システム１００の機能ブロック図である。【００１２】
計算機システム１００は、入力されたプログラム１０２と入力データ１０４に対して、計算結果１０６を出力するシステムであり、マスタノード１１０と、１つ以上のワーカノード１２０と、データバス１３０とを有する。【００１３】
マスタノード１１０は、誤り耐性情報取得部１１１、計算割当て部１１２、誤り検出／補正方法設定部１１３、ＦＶ変更決定手段設定部１１４、および誤り記録管理部１１５を有する。マスタノード１１０は、実行対象となるプログラム１０２から、解くべき対象となる計算処理の情報と、計算誤りの検出手段および補正手段に関する誤り耐性情報とを取得し、これらをワーカノード１２０へ割当てる機能を有する。また、マスタノード１１０は、ワーカノード１２０が計算処理を実行中には、バリア同期処理などの並列処理における基本的な計算制御を行う機能を有する。【００１４】
誤り耐性情報取得部１１１は、プログラム１０２からアプリケーションのメイン計算処理情報２０５と、その計算処理における計算誤り耐性情報２０１とを取得する。プログラム１０２に含まれる情報の例を図２に示す。プログラム１０２は、メイン計算処理情報２０５と、その計算処理における計算誤り耐性情報２０１とを含む。メイン計算処理情報２０５は、アプリケーションが解くべき対象となる計算処理のプログラムである。計算誤り耐性情報２０１は、アプリケーションが有する計算誤りに対する耐性に関する情報である。【００１５】
計算誤り耐性情報２０１は、誤り許容処理情報２１０、誤り検出処理情報２２０、誤り補正処理情報２３０、許容可能誤り頻度情報２４０、およびＦＶ制御処理情報２５０を含む。【００１６】
誤り許容処理情報２１０は、メイン計算処理情報２０５の内の計算誤りに耐性がある計算処理部分を示す情報である。計算誤りに耐性がある計算処理部分の多くはｆｏｒ文などで記述される繰り返し計算であるため、プログラマはディレクティブなどによって当該部分を指定することができる。【００１７】
誤り検出処理情報２２０は、誤り許容処理情報２１０に示された計算処理部分における致命的な計算誤りを検出するための誤り検出処理の情報である。以下、前記誤り検出処理によって検出された致命的な計算誤りをユーザ定義エラーと表現する。誤り補正処理情報２３０は、ユーザ定義エラーが検出された計算結果を補正するための誤り補正処理の情報である。【００１８】
許容可能誤り頻度情報２４０は、アプリケーションが許容可能なユーザ定義エラーの頻度の情報である。例としては、所定計算ステップ期間あたりに発生するユーザ定義エラーの回数などがある。【００１９】
ＦＶ制御処理情報２５０は、ワーカノード１２０の計算部１２１の動作周波数または電源電圧の少なくともいずれかの制御処理の情報である。例としては、許容可能誤り頻度情報２４０と計算中に検出されたユーザ定義エラーの頻度に基づいて動作周波数または電源電圧、あるいはその両方を制御する手段がある。制御対象はＦＶ制御処理情報２５０に含まれる動作モード設定情報によって決定され、低電力モードであれば動作周波数を一定にして電源電圧を制御し、高速処理モードであれば、電源電圧を一定にして動作周波数を制御し、バランス動作モードであれば電力が一定となるように電源電圧を下げて動作周波数を上げるなどの制御を行うことが可能である。【００２０】
計算処理割当て部１１２は、各ワーカノード１２０に対して、各ワーカノードが担当する計算処理を割り当てる。誤り検出／補正手段設定部１１３は、各ワーカノード１２０の誤り検出部１２２へ誤り検出処理情報２２０を割り当て、各ワーカノード１２０の誤り補正部１２３へ誤り補正処理情報２３０を割り当てる。ＦＶ変更決定手段設定部１１４は、各ワーカノード１２０のＦＶ変更決定部１２４へＦＶ制御処理情報２５０を割り当てる。誤り記録管理部１１５は、各ワーカノード１２０の誤り検出部１２２で検出されたユーザ定義エラーの発生状況を記録する。【００２１】
ワーカノード１２０は、計算部１２１、誤り検出部１２２、誤り補正部１２３、ＦＶ変更決定部１２４、およびＦＶ制御部１２５を有する。【００２２】
計算部１２１は、計算処理割当て部１１２から割り当てられた計算処理を行う。計算部１２１は、計算に必要なデータを、ストレージ装置３４０から、データバス１３０を介して入力データ１０４から、または他のワーカノード１２０から得て計算し、その計算結果１６１を誤り検出部１２２へ出力する。【００２３】
誤り検出部１２２は、検出処理情報２２０の内、誤り検出／補正手段設定部１１３によって割当てられた情報を用いて、計算部１２１の計算結果における致命的な計算誤りであるユーザ定義エラーを検出する。ユーザ定義エラーを検出した場合、誤り検出部１２２は、計算部１２１への再計算要求１６４や、誤り補正部１２３への計算結果に対する補正要求１６６を出力する。また、誤り検出部１２２は、ユーザ定義エラーが発生したことをＦＶ変更決定部１２４へユーザ定義エラー発生通知１６８によって通知し、さらにマスタノード１１０の誤り記録管理部１１５へユーザ定義エラー発生に関するエラーログ情報１６５を出力する。【００２４】
誤り補正部１２３は、誤り補正処理情報２３０の内、誤り検出／補正手段設定部１１３によって割当てられた情報を用いて、計算部１２１の計算結果１６１を誤り検出部１２２からの補正要求１６６に基づいて補正する。誤り補正部１２３は、補正された計算結果１６７をデータバス１３０へ出力する。【００２５】
ＦＶ変更決定部１２４は、ＦＶ制御処理情報２５０の内、ＦＶ変更決定手段設定部１１４によって割当てられた情報と、誤り検出部１２２からのユーザ定義エラー発生通知１６８とに基づいて、計算部１２１の動作周波数または電源電圧の少なくともいずれかを変更することを決定する。ＦＶ変更決定部１２４は、変更を決定した場合、ＦＶ制御部１２５へ動作周波数および電源電圧の設定量１６９を出力する。【００２６】
ＦＶ制御部１２５は、ＦＶ変更決定部１２４からの設定量１６９に基づいて、計算部１２１の動作周波数および電源電圧を設定する。データバス１３０は、マスタノード１１０、１つ以上のワーカノード１２０、さらにその他の外部装置を繋ぐための通信路である。【００２７】
図３に、計算機システム１００のハードウェア構成の例を示す。計算機システム１００は、計算ノード３１０と、少なくとも一つの計算ノード３２０と、ネットワーク３３０と、ストレージ装置３４０とを有する。【００２８】
計算ノード３１０は、図１に示したマスタノード１１０の機能を実現する計算ノードであり、計算ユニット３１１、メモリユニット３１３、通信ユニット３１４、およびバス３１５を備える。計算ノード３１０は、情報処理装置であり、例えばサーバ装置である。【００２９】
計算ユニット３１１は、メモリユニット３１３からプログラムを読み出し計算を行うユニットであり、中央処理装置（ＣＰＵ）などで実現される。メモリユニット３１３は、プログラムやデータを記憶するユニットであり、ＤＲＡＭなどで実現される。通信ユニット３１４は、ネットワーク３３０を介したノード間通信を行うためのユニットである。バス３１５は、計算ユニット３１１、メモリユニット３１３などノード内のユニット間でデータ通信するための通信路である。【００３０】
計算ノード３２０は、図１に示したワーカノード１２０の機能を実現する計算ノードであり、計算ユニット３２１、補助計算ユニット３２２、メモリユニット３１３、通信ユニット３１４、およびバス３１５を備える。計算ノード３２０は、計算ユニット３２１やメモリユニット３１３を複数個備えていても良い。計算ノード３２０は、情報処理装置であり、例えばサーバ装置である。【００３１】
計算ユニット３２１は、図１に示した計算部１２１とＦＶ制御部１２５の機能を実現する計算ユニットであり、その電源電圧および動作周波数が外部から設定可能である。図４に、計算ユニット３２１における電源電圧および動作周波数の制御領域の例を示す。計算機ユニット３２１は、ＣＰＵ４１０とＦＶ制御部４２０とを有する。ＣＰＵ４１０は、命令フェッチ処理４１１、命令デコード処理４１２、演算処理４１３、および書き戻し処理４１４を行う処理ブロックから構成される。ここで、ＣＰＵ４１０では、特に、演算処理４１３を行う浮動小数点演算（ＦＰＵ）ユニット４１５やデータ並列演算（ＳＩＭＤ）ユニット４１６などのプログラムの制御に関わらないデータを計算する演算ユニットおよび記憶ユニットの電源電圧または動作周波数を、ＦＶ制御部４２０によって設定量１６８に従い設定できる。メモリアドレスやポインタ計算などプログラムの制御に関わる計算にエラーが生じた場合、計算ユニット３２１がハングアップするなどの障害が生じる可能性がある。そのため、このように電源電圧または動作周波数を制御するユニットを限定することで、動作周波数を一定にしたまま電源電圧を低減するなど、ＣＰＵ４１０の動作を不安定にする操作を行った際に、計算ユニット３２１がハングアップすることを回避できる。【００３２】
補助計算ユニット３２２は、ＣＰＵなどで実現されるプログラマブルな計算ユニットであり、図１に示した誤り検出部１２２、誤り補正部１２３、およびＦＶ変更決定部１２４の機能を実現する。補助計算ユニット３２２は、簡単な処理しか行わないため、計算ユニット３２１に比べて処理性能が小さな計算ユニットで実現可能である。また、補助計算ユニット３２２を用いて、電源電圧や動作周波数の制御が行われるプロセッサと別のプロセッサで誤り検出部１２２、誤り補正部１２３、およびＦＶ変更決定部１２４の機能を実現することで、電源電圧や動作周波数の制御によって計算機システム１００の動作が不安定になることを防ぐことができるので、より大きく電源電圧や動作周波数を変動させる制御を可能にできる。この補助計算ユニット３２２の使用は、計算ユニット３２１で電源電圧または動作周波数を制御する部分を限定しない場合には、計算機システム１００の動作の安定化に特に有効である。【００３３】
ネットワーク３３０は、計算ノード３１０と、１つ以上の計算ノード３２０と、ストレージ装置３４０とを繋ぐネットワークであり、ネットワークスイッチなどで構成される。ストレージ装置３４０は、プログラム１０２や、計算機システム１００が演算に用いるデータを格納するために用いられる。【００３４】
次に、計算機システム１００の動作を説明する。図５に計算機システム１００の動作フローチャートを示す。【００３５】
マスタノード１１０は、まず、計算誤り耐性情報の有無判定のステップＳ５０１にて、プログラム１０２が計算誤り耐性情報２０１を有しているかを確認する。プログラム１０２が計算誤り耐性情報２０１を有していない場合、マスタノード１１０は、通常の並列計算機システムと同様にメイン計算処理情報２０５を分割して各ワーカノード１２０の計算ユニット３２１へ割当て（ステップＳ５１０）、計算を実行し（ステップＳ５１１）、結果出力を行う（ステップＳ５２１）。【００３６】
プログラム１０２が計算誤り耐性情報２０１を有している場合、マスタノード１１０は、計算誤り耐性情報２０１を取得し（ステップＳ５０２）、図６のように誤り検出処理情報２２０と補正処理情報２３０をメイン計算処理情報２０５の処理ステップへ挿入する（ステップＳ５０３）。図６では、誤り許容処理情報２１０に示される計算部分におけるｎ番目の計算処理とｎ＋１番目の計算処理の間に誤り検出処理と誤り補正処理を挿入する例を示している。ここで、ｎ番目の計算処理とは、例えばＫ−ｍｅａｎｓクラスタリングアルゴリズムなどでは、クラスタ中心位置の座標更新のための計算における反復回数ｎ回目の計算処理に該当する。ステップＳ５０３の操作は、計算ユニット３２１の計算結果を、補助計算ユニット３２２を介して出力するように設定することに相当する。なお、誤り検出処理情報２２０と誤り補正処理情報２３０の挿入位置はメイン計算処理情報２０５内部にディレクティブなどで指示されている。ステップＳ５０４において、マスタノード１１０は、各ワーカノード１２０の計算ユニット３２１へメイン計算処理情報２０５の処理を分割して割当て、さらに各ワーカノード１２０の補助計算ユニット３２２へ誤り検出処理情報２２０、誤り補正処理情報２３０およびＦＶ制御処理情報２５０を割り当てる。【００３７】
計算機システム１００は、ステップＳ５０５では、ステップＳ５０４でワーカノード１２０へ割り当てた計算処理を実行し、ステップＳ５２１にてその計算結果を出力する。【００３８】
以下、ステップＳ５０５の計算実行における計算機システム１００の動作を図７のフローチャートを用いて詳細に説明する。なお、メイン計算処理情報２０５としてＫ−ｍｅａｎｓクラスタリングアルゴリズムなどの反復型収束計算が与えられていることを例に説明する。【００３９】
ワーカノード１２０の計算ユニット３２１が、マスタノード１１０から計算実行開始の通知を受け取ると、計算ユニット３２１で実行されている計算部１２１は、割り当てられた計算処理を実行し、計算結果を補助計算ユニット３２２で実行されている誤り検出部１２２へ送信する（ステップＳ７０１）。次に、補助計算ユニット３２２で実行されている誤り検出部１２２は、送信された計算ユニット３２１で実行されている計算部１２１の計算結果に対し、誤り検出処理を行い（ステップＳ７０２）、エラーが検出されたならば、誤り補正部１２３による誤り補正処理（ステップＳ７１０）とログ出力処理（ステップＳ７１１）が行われる。【００４０】
ここで、誤り検出処理Ｓ７０２からログ出力処理Ｓ７１１までの処理の例を図８および図９を用いて詳細に説明する。図８は、誤り検出処理Ｓ７０２からログ出力処理Ｓ７１１までに対応するフローチャートである。図９は、反復回数ｉにおける計算結果Ｘの値の変遷を曲線９１１によって示しており、反復計算の計算結果Ｘが反復回数ｉの増大に従って振動しながら収束する例を示している。ここでは本発明にかかる誤り検出処理情報２２０の例として、反復回数ｉ回目の計算結果と反復回数ｉ−１回目の計算結果との差分の絶対値を計算誤りの判定基準に用いるアルゴリズム（以下、誤り検出アルゴリズムと称する）の概要を最初に説明し、その後、図８のフローチャートを説明する。以下、反復回数ｉ回目の計算ユニット３２１で実行される計算部１２１の計算結果をＸ（ｉ）と表現として説明する。【００４１】
図９において、｜ΔＸ（ｉ−２）｜は反復回数ｉ−２における計算結果Ｘの変化量９１２に該当し、｜ΔＸ（ｉ−１）｜は反復回数ｉ−１における計算結果Ｘの変化量９１３に該当し、｜ΔＸ（ｉ）｜は反復回数ｉにおける計算結果Ｘの変化量９１４に該当する。誤り検出部１２２で実行される本実施例にかかる誤り検出アルゴリズムでは、計算結果Ｘは反復回数ｉの増加に伴って収束することを前提に、計算結果Ｘの変化量に対し、過去の変化量の情報に基づいて上限値を設定することを特徴とする。具体的には次の式（１）および式（２）によって上限値が設定される。
|ΔX(i)|<ΔXmax・・・式（１）
ΔXmax=MAX(α・|ΔX(i-1)|,β・|ΔX(i-2)|)・・・式（２）
ここで、ΔＸｍａｘは、式（２）で示されるように、反復回数ｉ−１における変化量９１３のα倍と、反復回数ｉ−２における変化量９１２のβ倍とのうち、大きい方の値である。αおよびβはユーザが設定する値であり、ゼロ以上の実数である。即ち、反復回数ｉにおける変化量９１４の上限値は、反復回数ｉ−１における変化量９１３のα倍と、反復回数ｉ−２における変化量９１２のβ倍とのうち、大きい方の値とする。この上限値設定によって制限されるΔＸ（ｉ）の値域は、例えば、値域９２１で表現され、｜ΔＸ（ｉ）｜が前記上限値を超えた場合（あるいはΔＸ（ｉ）が値域９２１の範囲外となった場合とも表現できる）、ユーザ定義エラーが発生したとしてカウントされる。【００４２】
ここで、反復回数ｉ−１と反復回数ｉ−２の２つの結果を用いているのは、例えば、反復回数ｉ−１に計算誤りが生じて｜ΔＸ（ｉ−１）｜が非常に小さな値となった場合、｜ΔＸ（ｉ）｜の上限値も非常に小さくなってしまい、計算の収束に掛かる時間が伸びてしまう。そこで、２回以上続けて大きな計算誤りが生じる確率は小さいことを前提に、｜ΔＸ（ｉ−２）｜を用いてより大きな値を上限値として採用することで前記課題を解決する。なお、より収束時間を安定にするために式（１）にさらに｜ΔＸ（ｉ−３）｜を導入するなど、条件を追加することも可能である。｜ΔＸ（１）｜におけるΔＸｍａｘはユーザが設定してもよいし、変数Ｘの型が取りえる最大値としてもよい。【００４３】
以上に説明した誤り検出アルゴリズムにより、アプリケーションへ大きな影響を与える計算誤りを回避することが可能となる。【００４４】
次に、図８のフローチャートを説明する。補助計算ユニット３２２で実行される誤り検出部１２２は、計算結果Ｘ（ｉ）受信すると、反復回数ｉの値を更新する（ステップＳ８００）。その後、誤り検出部１２２は、計算ユニット３２１で実行される計算部１２１の反復回数ｉ−１での計算結果Ｘ（ｉ−１）と反復回数ｉでの計算結果Ｘ（ｉ）の差分の絶対値である｜ΔＸ（ｉ）｜を算出し（ステップＳ８０１）、｜ΔＸ（ｉ）｜が式（１）に示した変化量の上限値を超えていないかをチェックする（ステップＳ８０２）。なお、ステップＳ８０２の分岐は、ステップＳ７０３の分岐に対応する。ステップＳ８０２において式（１）の条件を満たさない場合には、誤り検出部１２１は、ユーザ定義エラーが発生したと判定する。また、ＦＶ変更決定部１２４ではユーザ定義エラー発生回数が更新され（ステップＳ８１０）、後述のようにその頻度が求められる。【００４５】
誤り補正処理（ステップＳ７１０）では、補助計算ユニット３２２で実行されている誤り補正部１６７は、ステップＳ８０２の比較において｜ΔＸ（ｉ）｜が上限値を超えていた場合は、Ｘ（ｉ−１）＋ΔＸｍａｘまたはＸ（ｉ−１）−ΔＸｍａｘのいずれかＸ（ｉ）に近い値を補正後のＸ（ｉ）の値として採用する。その後、誤り補正部１６７はログ出力処理（ステップＳ７１１）を行い、マスタノード１１０の誤り記録管理部１１５へユーザ定義エラー発生の状況と補正前後の値などのエラーログ情報１６５を送信する。以上が誤り検出処理Ｓ７０２からログ出力処理Ｓ７１１までの処理の例である。これによりアプリケーションが要求する精度を維持しつつ、計算誤りを許容することが可能となるため、従来技術よりも電源電圧および動作周波数を変動させる幅を大きく設定することができ、より大きな低電力化や高速化が可能となる。【００４６】
ＦＶ変更決定処理（ステップＳ７１２）では、ＦＶ変更決定部１２４は、誤り検出処理（ステップＳ７０２）において発生したユーザ定義エラーの頻度をモニタリングし、ユーザ定義エラー発生頻度と許容可能誤り頻度情報２４０とＦＶ制御処理情報２５０の動作モード設定情報に基づいて、計算ユニット３２１の動作周波数または電源電圧を制御するか否かを決定する。動作周波数または電源電圧を変更する場合には、ＦＶ変更決定部１２４は、計算ユニット３２１のＦＶ制御部１２５へ動作周波数または電源電圧の設定量１６９を送信する（Ｓ７１４）。ユーザ定義エラー発生頻度の定義としては、例えばステップＳ７０２の誤り検出処理Ｎ（Ｎは１以上の整数）回当たりに発生したユーザ定義エラーの検出回数などがあり、これが許容可能誤り頻度情報２４０を上回った場合、電源電圧を上昇させる又は動作周波数を低減させる設定量１６９を送信する。一方、観測したユーザ定義エラー発生頻度が許容可能誤り頻度情報２４０を下回った場合、ＦＶ変更決定部１２４は、電源電圧を低減させる、または動作周波数を上昇させる設定量１６９を送信する。これにより、計算機システム１００は、より低電力に、またはより高速に、処理をすることが可能になる。【００４７】
その後、ワーカノード１２０は、計算結果を他のワーカノード１２０へ送信し、マスタノード１１０へ計算結果の収束状況情報と計算完了を通知し、マスタノード１１０は、同期処理を行う（ステップＳ７１５）。マスタノード１１０は、計算結果の収束判定を行い、計算結果が収束したと判定した場合、計算を終了する（ステップＳ７１６）。【００４８】
以上が、本実施例にかかるステップＳ５０５での計算処理の動作例である。【００４９】
以上に示した動作によって本実施例に係る計算機システム１００は、電源電圧や周波数などを変動させる幅を従来技術より大きく設定することができ、より大きな低電力化や高速化が可能となる。
【実施例２】
【００５０】
本実施例では、実施例１に示した計算機システム１００よりもさらにプログラミングが容易な実施例として、計算機システム１００１を説明する。【００５１】
計算機システム１００１は、計算機システム１００においてプログラム１０２に含まれていた計算誤り耐性情報２０１における誤り検出処理情報２２０、誤り補正処理情報２３０、およびＦＶ制御処理情報２５０のうち、良く使われる処理パタンをテンプレート化（またはライブラリ化とも表現できる）し、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ）としてプログラマに提供することを特徴とする。本特徴によりプログラマは利用したい処理パタンを選択し、そのパラメータを指定することで計算機システム１００の機能を利用することが可能となる。【００５２】
図１０は、実施例２における計算機システム１００１の構成図の例である。計算機システム１００１は、エラー忘却型計算テンプレート１０２０と計算機システム１００とを有し、プログラム１０１０を入力として計算を実行する。エラー忘却型計算テンプレート１０２０は誤り検出処理１０２１、誤り補正処理１０２２、およびＦＶ制御処理１０２３を有する。【００５３】
誤り検出処理１０２１は、例えば、実施例１において説明した誤り検出処理情報２２０の処理であり、この場合は式（２）のα、βをパラメータとして設定できる。誤り補正処理１０２２は、例えば、実施例１において説明した誤り補正処理情報２３０の処理であり、その他にもロールバックによる再計算などがある。誤り補正処理１０２２は、これら補正処理モードをパラメータとして設定できる。ＦＶ制御処理１０２３は、例えば、実施例１において説明したＦＶ制御処理情報２５０の処理などであり、許容誤り頻度情報２４０や低電力化のための制御をするか、高速化のための制御をするかなどを指定する動作モード設定情報をパラメータとして設定できる。【００５４】
プログラム１０１０は、メイン計算処理情報２０５、誤り許容処理情報２１０、およびパラメータ情報１０１１を有する。パラメータ情報１０１１は、エラー忘却型計算テンプレート１０２０の誤り検出処理１０２１、誤り補正処理１０２２、およびＦＶ制御処理１０２３のパラメータであり、ＡＰＩの引数としてシステムに入力される。【００５５】
計算機システム１００１は、エラー忘却型計算テンプレート１０２０、パラメータ情報１０１１、および誤り許容処理情報２１０を用いて計算誤り耐性情報２０１を作成し、さらにメイン計算処理情報２０５を加えて、計算機システム１００へプログラム１０２として入力する。【００５６】
以上により、計算機システム１００１は、従来技術よりも電源電圧および動作周波数を変動させる幅を大きく設定することができ、より大きな低電力化や高速化が可能となると共に、実施例１に示した計算機システム１００よりもさらに高いプログラム容易性を実現できる。
【符号の説明】
【００５７】
１００：計算機システム、１０２：プログラム、１０４：入力データ、１０６：計算結果、１１０：マスタノード、１１１：誤り耐性情報取得部、１１２：計算割当て部、１１３：誤り検出／補正方法設定部、１１４：ＦＶ変更決定手段設定部、１１５：誤り記録管理部、１２０：ワーカノード、１２１：計算部、１２２：誤り検出部、１２３：誤り補正部、１２４：ＦＶ変更決定部、１２５：ＦＶ制御部、１３０：データバス１３０、３１０：計算ノード、３１１：計算ユニット、３１３：メモリユニット、３１４：通信ユニット、３１５：バス、３２０：計算ノード、３２１：計算ユニット、３２２：補助計算ユニット、３３０：ネットワーク、３４０：ストレージ装置。
【図１】
2014033941.tif 000003
【図２】
2014033941.tif 000004
【図３】
2014033941.tif 000005
【図４】
2014033941.tif 000006
【図５】
2014033941.tif 000007
【図６】
2014033941.tif 000008
【図７】
2014033941.tif 000009
【図８】
2014033941.tif 000010
【図９】
2014033941.tif 000011
【図１０】
2014033941.tif 000012
【国際調査報告】
2014033941.tif 000013
2014033941.tif 000014
2014033941.tif 000015
2014033941.tif 000016