[実施の形態1]
図1に、本実施の形態に係る情報処理システムの概要を示す。本情報処理システムにおいては、先行系計算機100と、遅延系計算機200とが、系間通信路190を介して接続されている。
先行系計算機100は、演算部110と、同期制御部120と、系間通信路190で通信を行う通信部130と、外部デバイス140とを有する。演算部110は、複数のコア111(図1では111a乃至111d)と、コア111によって共有されるメモリ114と、メモリ制御部112と、アクセス抽出部113とを有する。
メモリ制御部112は、メモリ114へのアクセスを制御する。また、アクセス抽出部113は、メモリ114へのアクセスを抽出して同期制御部120へ通知する。
また、同期制御部120は、アクセス履歴格納部121と、出力値格納部123と、制御部122とを有する。アクセス履歴格納部121は、アクセス抽出部113からのデータを格納する。出力値格納部123は、演算部110のコア111が発行した出力要求で出力される値を格納する。また、制御部122は、インストラクションロックステップに係る同期を行うための種々の処理を、通信部130及び系間通信路190を介して遅延系計算機200における同期制御部220と連携しつつ実行する。
外部デバイス140は、ストレージ141、I/O装置142などのデバイスを含む。外部デバイス140を介して他の計算機に接続される場合もある。
遅延系計算機200は、演算部210と、同期制御部220と、系間通信路190で通信を行う通信部230と、外部デバイス240とを有する。演算部210は、複数のコア211(図1では211a乃至211d)と、コア211によって共有されるメモリ214と、メモリ制御部212と、アクセス抽出部213とを有する。
メモリ制御部212は、メモリ214へのアクセスを制御する。また、アクセス抽出部213は、メモリ214へのアクセスを抽出して同期制御部220へ通知する。
また、同期制御部220は、アクセス履歴格納部221と、出力値格納部223と、制御部222とを有する。アクセス履歴格納部221は、アクセス抽出部213からのデータを格納する。出力値格納部223は、演算部210のコア211が発行した出力要求で出力される値を格納する。また、制御部222は、インストラクションロックステップに係る同期を行うための種々の処理を、通信部230及び系間通信路190を介して先行系計算機100における同期制御部120と連携しつつ実行する。
外部デバイス240は、ストレージ241、I/O装置242などのデバイスを含む。外部デバイス240を介して他の計算機に接続される場合もある。
図2に、先行系計算機100における制御部122の機能構成例を示す。制御部122は、グループ対応表1221と、グループ管理部1222と、コア実行制御部1223とを有する。グループ対応表1221は、コア111の各々について、出力要求を出力したコアであるか否か、計算を実行可能なコアであるか否かを管理するためのデータを保持する。このグループ対応表1221は、後から順番に参照できるようにするため、更新時における同期確認点の番号(例えば実行シーケンス番号)と共に保持される。
グループ対応表1221は、例えば図3に示すようなフォーマットを有する。図3の例では、コア111のコアIDと、各コアの所属グループ(出力要求を発行するコアが属する出力グループ又は計算を実行可能なコアが所属する演算グループ)とを格納するようになっている。
グループ管理部1222は、グループ対応表1221の更新管理などを実行する。コア実行制御部1223は、グループ対応表1221に従って各コアの稼働及び停止を制御する。
図4に、遅延系計算機200における制御部222の機能構成例を示す。制御部222は、グループ対応表2221と、コア実行制御部2222と、比較部2223とを有する。
グループ対応表2221は、先行系計算機100における制御部122から送られてくる。コア実行制御部2222は、グループ対応表2221に従って各コアの稼働及び停止を制御する。比較部2223は、先行系計算機100における計算結果と遅延系計算機200における計算結果との比較検証のための処理を行う。
次に、図5乃至図9を用いて、図1に示したシステムの処理の流れを概説する。まず、先行系計算機100における同期制御部120の制御部122は、先行系計算機100の演算部110からレジスタ値、メモリのデータM及びキャッシュのデータCを取得して、遅延系計算機200の同期制御部220に転送する(ステップ(1))。遅延系計算機200における同期制御部220の制御部222は、レジスタ値、メモリのデータM及びキャッシュのデータCを受信する。
また、先行系計算機100における同期制御部120の制御部122は、初期化要求を遅延系計算機200の同期制御部220に発行する(ステップ(2))。遅延系計算機200における同期制御部220の制御部222は、初期化要求を受信すると、遅延系計算機200における演算部210に対して、メモリのデータM及びキャッシュのデータCを用いてコア211を初期化するための初期化命令を発行する(ステップ(3))。これによって、先行系計算機100の演算部110と同じ初期状態が遅延系計算機200の演算部210に実現される。
その後、先行系計算機100における同期制御部120の制御部122(コア実行制御部1223)は、計算実行命令を演算部110に発行する(ステップ(4))。これに対して、演算部110のコア111は、計算を開始する。なお、初期的には全てのコア111は、演算グループに属する。
計算中に、演算部110のいずれかのコア111が、メモリ114に対するアクセスを行うと、アクセス抽出部113により検出され、アクセス抽出部113は、同期制御部120の制御部122に対してメモリ114へのアクセスS1を通知する(ステップ(5))。
同期制御部120の制御部122は、メモリ114へのアクセスS1が通知されると、当該アクセスS1のデータを、遅延系計算機200における同期制御部220の制御部222に転送する(ステップ(6))。遅延系計算機200における同期制御部220の制御部222は、共有メモリへのアクセスS1のデータを受信すると、アクセス履歴格納部221に格納する。共有メモリへのアクセスS1のデータは、先行系計算機100における同期制御部120のアクセス履歴格納部121にも格納される。
その後、先行系計算機100の演算部110のコア111(少なくとも1つ)が出力要求を発行する(ステップ(7))。そうすると、先行系計算機100における同期制御部120の制御部122は、当該出力要求を受信して、出力要求による出力予定値O1を出力値格納部123に格納する。
これに応じて、制御部122(コア実行制御部1223)は、先行系計算機100の演算部110のコア111に対して計算停止命令を発行する(ステップ(8))。これにて先行系計算機100の演算部110のコア111は、計算を停止する。さらに、制御部122は、演算部110のコア111(例えば計算を行っていたコアのみ)に対して、レジスタ値の取得命令を発行する(ステップ(9))。演算部110のコア111は、レジスタ値の取得命令に応じて、レジスタ値R1を、同期制御部120の制御部122へ出力する(ステップ(10))。
ここで、先行系計算機100における同期制御部120の制御部122(グループ管理部1222)は、この時点における実行シーケンス番号と共に、出力要求を発行したコアが出力グループに属することを表すデータを、先行系計算機100のグループ対応表1221に登録する(ステップ(11))。このような登録を行うと共に、制御部122(グループ管理部1222)は、変更後のグループ対応表1221を、遅延系計算機200の同期制御部220に転送する(ステップ(12))。遅延系計算機200における同期制御部220の制御部222は、グループ対応表2221に登録する。
初期的には、図6に示すようなグループ対応表1221であるものとする。そして、出力要求をコア1及び2(コア111a及び111b)が出力したとすると、図3に示すようなグループ対応表1221が登録されることになる。
さらに、先行系計算機100における同期制御部120の制御部122は、出力予定値O1を、遅延系計算機200の同期制御部220に転送し(ステップ(13))、さらにレジスタ値R1をも、遅延系計算機200の同期制御部220に転送する(ステップ(14))。
図7における処理に移行して、先行系計算機100における同期制御部120の制御部122は、グループ対応表1221を参照して、最新のグループ対応表1221から、演算グループに属するコアを特定する(ステップ(15))。
そうすると、先行系計算機100における同期制御部120の制御部122(コア実行制御部1223)は、特定されたコアに対して、計算実行命令を発行する(ステップ(16))。先行系計算機100の演算部110は、計算実行命令で指示されたコアにおいて計算Xを実行する。本実施の形態では、出力要求を発行したコアは待機状態となるが、それ以外のコアについては演算グループに属しており、出力要求を発行したコアと一緒に待機することなく、次の計算を実行することになる。このように計算資源の有効活用が図られる。
なお、計算Xを実行中に、先行系計算機100における演算部110のコア111がメモリ114にアクセスすることがある。このアクセスはアクセス抽出部113により検出され、アクセス抽出部113は、同期制御部120の制御部122に対してメモリ114へのアクセスS2を通知する(ステップ(17))。
同期制御部120の制御部122は、メモリ114へのアクセスS2が通知されると、当該アクセスS2のデータを、遅延系計算機200における同期制御部220の制御部222に転送する(ステップ(18))。遅延系計算機200における同期制御部220の制御部222は、共有メモリへのアクセスS2のデータを受信すると、アクセス履歴格納部221に格納する。共有メモリへのアクセスS2のデータは、先行系計算機100における同期制御部120のアクセス履歴格納部121にも格納される。
一方、先行系計算機100から出力予定値O1及びレジスタ値R1を受信すると、遅延系計算機200における同期制御部220の制御部222(コア実行制御部2222)は、グループ対応表2221を参照して、まだ未参照のグループ対応表のうち最も古いグループ対応表から、演算グループに属するコアを特定する(ステップ(19))。この例では図6に示すように、4つのコアが演算グループに属している。
そうすると、同期制御部220の制御部222は、ステップ(1)で受信したレジスタ値RとアクセスS1とを用いて演算グループに属するコアで計算再現を行うように計算再現命令を、演算部210に対して発行する(ステップ(20))。これに応じて、演算部210において演算グループに属するコアは、先行系計算機100において実行された計算を実行する。そうすると、先行系計算機100のように、共有メモリへのアクセスが発生するが、ここでは先行系計算機100から受信したアクセスS1のデータにアクセスさせる。また、計算再現中に、遅延系計算機200の演算部210のコア211(少なくとも1つ)が出力要求を発行する(ステップ(21))。そうすると、遅延系計算機200における同期制御部220の制御部222は、当該出力要求を受信して、出力要求による出力予定値O2を出力値格納部223に格納する。
そうすると、制御部222(コア実行制御部2222)は、遅延系計算機200の演算部210のコア211に対して計算再現停止命令を発行する(ステップ(22))。これにて遅延系計算機200の演算部210のコア211は、計算再現を停止する。さらに、制御部222は、演算部210のコア211(例えば計算を行っていたコアのみ)に対して、レジスタ値の取得命令を発行する(ステップ(23))。演算部210のコア211は、レジスタ値の取得命令に応じて、レジスタ値R2を、同期制御部220の制御部222へ出力する(ステップ(24))。
そうすると、遅延系計算機200における同期制御部220の制御部222(比較部2223)は、グループ対応表2221を参照して、実行していた計算再現のためのグループ対応表から、演算グループに属するコアを再確認する(ステップ(25))。なお、レジスタ値の取得の前に本ステップを実行しても良い。
そして、制御部222(比較部2223)は、出力予定値O1及びO2と、レジスタ値R1とレジスタ値R2とを比較する(ステップ(26))。比較するレジスタ値は、演算グループに属するコアのレジスタ値のみである。
その後、遅延系計算機200における同期制御部220の制御部222は、比較結果を、先行系計算機100の同期制御部120へ転送する(ステップ(27))。先行系計算機100における同期制御部120の制御部122は、遅延系計算機200から、比較結果を受信する。
なお、比較結果が、O1=O2であり且つR1=R2であることを表していれば、遅延系計算機200における同期制御部220は、出力予定値O2を、外部デバイス240に出力する。
先行系計算機100における同期制御部120の制御部122は、遅延系計算機200から比較結果を受信すると、計算停止命令を、演算部210に対して発行する(ステップ(28))。また、制御部122は、比較結果を確認して、O1=O2であり且つR1=R2である場合には、出力値格納部123に格納されている出力予定値O1を、外部デバイス140に対して出力する(ステップ(29))。
さらに、先行系計算機100における同期制御部120の制御部122(グループ管理部1222)は、比較結果が得られた計算について出力要求を出力したコアを特定して、この時点における実行シーケンス番号と共に、特定されたコアが演算グループに属することを表すデータ(すなわち出力グループの削除)を、先行系計算機100のグループ対応表1221に登録する(ステップ(30))。このような登録を行うと共に、制御部122(グループ管理部1222)は、変更後のグループ対応表1221を、遅延系計算機200の同期制御部220に転送する(ステップ(31))。遅延系計算機200における同期制御部220の制御部222は、グループ対応表2221に登録する。
このような処理を実行することで、計算Xの部分で、全コアが待機状態に陥ることを回避できるので、計算資源の有効活用が図られ、計算効率が向上する。
図8に、コアの使用状態の時間変化を模式的に示す。コアは図1と同様に4つ存在する例を示しているが、出力要求を発行するのはコア1及び2(コア111a及び111b)であるものとする。また、上から下に時間が流れるものとする。先行系計算機100で最初の計算1を実行していると、コア1及び2が出力要求を点Aで発すると、遅延系計算機200では、コア1乃至4で計算再現1が実行される。点Aでは、図3に示すようなグループ対応表1221が登録される。
一方、先行系計算機100では、点Aの後直ぐに、出力要求を発行したコア1及び2以外のコア3及び4が計算2を実行する。そのうち、遅延系計算機200では、計算再現1が終了して点Bで比較結果が先行系計算機100に出力される。ここで比較結果がレジスタ値及び出力予定値の一致を表している場合には、先行系計算機100及び遅延系計算機200において出力が行われる。点Bでは、図6に示すようなグループ対応表1221が登録される。
さらに、出力が実行されると、先行系計算機100では、コア1乃至4は計算3を実行する。また、遅延系計算機200においては、点Aにおけるグループ対応表2221に基づき、コア3及び4によって計算再現2を実行する。
その後、先行系計算機100では、計算1と同じように、点Cで、コア1及び2が出力要求を発行したものとする。点Cでは、点Aと同様のグループ対応表1221(図3)が登録される。そうすると、先行系計算機100では、図3のようなグループ対応表1221に基づき、コア3及び4が、計算4を実行する。
一方、遅延系計算機200では、計算再現2が終了すると、計算3に対応する計算再現3を、点Bにおけるグループ対応表2221に基づき、コア1乃至4が実行する。そうすると、計算再現3による比較結果を遅延系計算機200から先行系計算機100へ送信し、比較結果がレジスタ値及び出力予定値の一致を表している場合には、先行系計算機100及び遅延系計算機200が出力を実行する。
一方、従来のように全てのコアで計算を実行するようにすると、図9に示すように、コア1乃至4の待ち受け時間Y及びZが生じてしまう。出力要求を発行しなかったコアも停止してしまうので、効率が悪くなることが分かる。
これに対して、図8では計算2及び計算4は、一部のコアではあるが、待ち受けを行うことなく実行でき、効率が向上していることが分かる。
図8の例では、4つのコアのうち2つのコアで出力要求を発行する例を示しているが、コア数が増加した場合、出力要求を発するコアの比率が同一又は増加するとは考えられず、コア総数に対する出力要求を発するコアの数の比率は低下すると考えられる。そうなると、より多くのコアを含むCPUが採用されれば、より本実施の形態の効果が増加することになる。
次に、先行系計算機100の同期制御部120による具体的な処理について、図10乃至図21を用いて説明する。
まず、同期制御部120は、初期化処理を実行する(図10:ステップS1)。初期化処理については、図11を用いて説明する。
まず、同期制御部120の制御部122は、演算部110のレジスタ値を読み出す(図11:ステップS31)。また、制御部122は、演算部110のメモリ114のデータを読み出す(ステップS33)。さらに、制御部122は、演算部110のキャッシュのデータを読み出す(ステップS35)。
そして、制御部122は、レジスタ値、メモリデータ及びキャッシュデータを、遅延系計算機200の同期制御部220に転送する(ステップS37)。さらに、制御部122は、遅延系計算機200の同期制御部220に対して、遅延系計算機200の演算部210の初期化要求を送信する(ステップS39)。そして、処理は呼び出し元の処理に戻る。
このようにして遅延系計算機200の演算部210の状態を、先行系計算機100の演算部110の状態に一致させるものである。
図10の処理の説明に戻って、制御部122は、比較結果を遅延系計算機200から受信したか否かを判断する(ステップS3)。比較結果を遅延系計算機200から受信した場合には、処理は端子Aを介して図20の処理に移行する。
一方、比較結果を遅延系計算機200から受信したわけではない場合には、制御部122は、計算指示処理を実行する(ステップS5)。計算指示処理については、図12を用いて説明する。
制御部122のコア実行制御部1223は、最新のグループ対応表1221を参照して、演算グループに属するコアを特定する(図12:ステップS41)。
そして、制御部122のコア実行制御部1223は、特定されたコアのみでの計算を実行するように計算実行命令を、演算部110に対して発行する(ステップS43)。
このようにすれば、出力要求を発行したコアについては比較結果を遅延系計算機200から受信するまで待機するが、それ以外のコアについては計算を行うようになる。
図10の処理の説明に戻って、制御部122は、演算部110のアクセス抽出部113からメモリ114へのアクセスのデータを受信すると、メモリ114へのアクセスのデータを、遅延系計算機200へ転送する(ステップS7)。なお、アクセスのデータについては、アクセス履歴格納部121に格納される。
また、制御部122は、同期確認点通知を演算部110から受信したか否かを判断する(ステップS9)。演算部110は、例えばif分岐の実行回数を計数しており、実行回数が所定回数に達する度に、同期確認点通知を発行するものとする。
同期確認点通知を受信した場合には、制御部122は、確認処理を実行する(ステップS19)。確認処理については図13を用いて説明する。
まず、制御部122のコア実行制御部1223は、演算部110に対して計算停止命令を発行する(図13:ステップS51)。これで演算部110のコア111は、計算を停止する。
そして、制御部122は、演算部110にレジスタ値の取得命令を発行する(ステップS53)。そうすると、演算部110は、レジスタ値を制御部122に出力する。
その後、制御部122は、演算部110からレジスタ値を受信する(ステップS55)。そして処理は呼び出し元の処理に戻る。
図10の処理の説明に戻って、制御部122は、取得したレジスタ値を、遅延系計算機200の同期制御部220へ転送する(ステップS21)。その後、処理は端子Bを介してステップS3の処理に戻る。
一方、同期確認点通知を受信していない場合には、制御部122は、演算部110から出力要求を受信したか否かを判断する(ステップS11)。出力要求を受信していない場合には、処理はステップS7に戻る。
一方、出力要求を受信した場合には、制御部122は、確認処理を実行する(ステップS13)。確認処理は図13で述べた処理である。そして、制御部122は、登録処理を実行する(ステップS15)。登録処理については、図14を用いて説明する。
まず、制御部122のグループ管理部1222は、演算部110の全コアのIDを取得する(図14:ステップS61)。また、グループ管理部1222は、外部デバイス140への出力要求を取得する(ステップS63)。なお、制御部122は、出力要求によって出力する出力予定値及び出力要求を出力したコアのIDについては、出力値格納部123に格納する。
さらに、グループ管理部1222は、グループ対応表1221を参照して、各コアの所属グループをチェックする(ステップS65)。
そして、グループ管理部1222は、出力要求に含まれるコアIDの所属グループを出力グループとして、出力要求発行時の実行シーケンス番号を関連付けてグループ対応表1221を更新する(ステップS67)。
例えば図6に示したグループ対応表1221を、図3に示したグループ対応表1221に更新する。なお、既に出力グループが存在する場合には、例えば図15に示すようなグループ対応表1221に更新される場合もある。すなわち、コア1及びコア2が含まれる第1の出力グループ(出力1)と、コア3が含まれる第2の出力グループ(出力2)とが登録されている。
また、グループ管理部1222は、遅延系計算機200の同期制御部220に対して、グループ対応表1221の更新を通知する(ステップS69)。これに応じて、グループ対応表2221が更新される。
このようにすれば、次の計算に用いることができるコアを特定できるようになる。
図10の処理の説明に戻って、制御部122は、出力要求の出力予定値を、遅延系計算機200の同期制御部220に転送する(ステップS17)。遅延系計算機200の同期制御部220は、例えば出力値格納部223に、受信した出力予定値を格納する。その後処理はステップS21に移行する。
端子A以降の処理については、遅延系計算機200における計算再現が完了した後に行われるので、先に遅延系計算機200における同期制御部220の処理について図16乃至図19を用いて説明する。
まず、同期制御部220の制御部222は、初期化要求を先行系計算機100から受信したか否かを判断する(図16:ステップS71)。初期化要求を受信した場合には、先行系計算機100の同期制御部120から受信したレジスタ値、メモリデータ及びキャッシュデータのうち、メモリデータ及びキャッシュデータで、演算部210の初期化を実行する(ステップS73)。そして処理は端子Cを介してステップS71に戻る。
一方、初期化要求を受信したわけではない場合には、同期制御部220の制御部222は、先行系計算機100の同期制御部120から、共有メモリアクセスのデータを受信し(ステップS75)、アクセス履歴格納部221に格納する。
さらに、同期制御部220の制御部222は、先行系計算機100の同期制御部120から、レジスタ値を受信する(ステップS77)。なお、ステップS77で受信したレジスタ値は、後に計算結果に含まれるレジスタ値との比較対象となる。
そして、制御部222は、演算グループによる計算再現処理を実行する(ステップS79)。計算再現処理については、図17を用いて説明する。
制御部222のコア実行制御部2222は、次に実行する区間のグループ対応表2221を参照して、演算グループに属するコアを特定する(図17:ステップS91)。未使用のグループ対応表のうち最も古い(実行シーケンス番号が最も小さい)グループ対応表を用いる。
そして、制御部222のコア実行制御部2222は、特定されたコアについて、共有メモリアクセスのデータ、開始時のレジスタ値及び終了時のレジスタ値が揃っているか否かを確認する(ステップS93)。図5の例では、レジスタ値R及びR1と、共有メモリへのアクセスデータS1とが揃っているか否かを判断する。揃っていない場合には、待機する。
開始時及び終了時のレジスタ値並びに共有メモリアクセスのデータが揃っていれば、制御部222のコア実行制御部2222は、演算部210に対して、演算グループに属するコアによるレジスタ値及び共有メモリアクセスのデータに基づく計算再現の実行命令を発行する(ステップS95)。なお、演算部210のコア211からメモリ214へのアクセスをアクセス抽出部213が検出すると、先行系計算機100から受信した共有メモリアクセスのデータをアクセス元のコア211に出力する。
そして、演算部210で出力要求が発生した場合には(ステップS97:Yesルート)、制御部222は、出力要求を演算部210から受信する(ステップS99)。出力要求で出力される出力予定値及び出力元コアのIDを保持しておく。そして処理はステップS103に移行する。
一方、演算部210で出力要求が発生しない場合には(ステップS97:Noルート)、制御部222は、演算部210から同期確認点通知を受信することになる(ステップS101)。例えば、if分岐を所定回数実行したことが通知される。
その後、制御部222のコア実行制御部2222は、計算再現の停止命令を、演算部210に対して発行する(ステップS103)。
このようにして遅延系計算機200において計算再現が実行されるようになる。
図16の処理の説明に戻って、制御部222は、計算再現処理の処理結果の取得処理を実行する(ステップS81)。本取得処理については、図18を用いて説明する。
まず、制御部222は、演算部210に対してレジスタ値の取得命令を発行する(図18:ステップS111)。これに対して、演算部210は、レジスタ値を読み出して、制御部222に出力する。
よって、制御部222は、演算部210からレジスタ値を取得する(ステップS113)。そして処理は図16の処理に戻る。
図16の処理の説明に戻って、制御部222は、計算結果の比較処理を実行する(ステップS83)。計算結果の比較処理については、図19を用いて説明する。
まず、制御部222の比較部2223は、計算再現を行った区間のグループ対応表2221を参照して、演算グループのコアを特定する(ステップS121)。
また、制御部222の比較部2223は、特定されたコアについて、取得されたレジスタ値と、先行系計算機100から受信したレジスタ値とを比較する(ステップS123)。
そして、演算部210から出力要求を受信した場合には(ステップS125:Yesルート)、制御部222の比較部2223は、計算再現によって得られた出力予定値と、先行系計算機100から受信した出力予定値とを比較する(ステップS127)。そして処理はステップS129に移行する。
一方、演算部210から出力要求を受信しなかった場合にも(ステップS125:Noルート)、処理はステップS129に移行する。
そして、制御部222の比較部2223は、比較結果を先行系計算機100の同期制御部120に送信する(ステップS129)。ステップS123における比較結果と、出力要求があった場合にはステップS127における比較結果とが、先行系計算機100に対して送信される。そして、処理は呼び出し元の処理に戻る。
図16の処理の説明に戻って、演算部210は、出力要求を受信している場合には、比較結果がレジスタ値及び出力予定値の一致を表していれば、出力を実行する(ステップS85)。
このような処理を行えば、適切に計算再現を遅延系計算機200で行うことができるようになる。
ここで先行系計算機100の同期制御部120の処理の説明(図20及び図21)に戻って、同期制御部120の制御部122は、遅延系計算機200の同期制御部220から比較結果を受信すると、当該比較結果が、一致を表しているか否かを判断する(ステップS131)。レジスタ値の一致、出力予定値の一致が各々判断される。
一部でも不一致があった場合には、制御部222は、予め定められた例外処理を実行する(ステップS133)。例外処理は、従来と同じであり、ここでは詳細な説明は省略する。そして処理は終了する。
一方、比較結果が、すべて一致を表していた場合には、制御部122は、比較結果に関連する出力要求が存在していたか否かを判断する(ステップS135)。比較結果に関連する出力要求が存在していない場合には、処理はステップS139に移行する。
一方、比較結果に関連する出力要求が存在する場合には、制御部122は、出力値格納部123に格納されている出力値を読み出して、外部デバイス140に対して出力する(ステップS137)。
そして、制御部122は、削除処理を実行する(ステップS139)。この処理が終了すると、端子Bを介して処理は図10のステップS3に戻る。削除処理については、図21を用いて説明する。
まず、制御部122のグループ管理部1222は、例えば出力値格納部123から、出力要求を発行したコアのIDを取得する(図21:ステップS141)。
制御部122のグループ管理部1222は、出力要求に係る区間のグループ対応表を参照して、各コアの所属グループをチェックする(ステップS143)。
制御部122のグループ管理部1222は、出力要求を発行したコアが所属するグループを演算グループとして、この時点における実行シーケンス番号に関連付けてグループ対応表1221を更新する(ステップS145)。
さらに、制御部122は、遅延系計算機200の同期制御部220に対して、グループ対応表1221の更新を通知する(ステップS147)。遅延系計算機200における同期制御部220の制御部222は、グループ対応表の更新通知を受信すると、グループ対応表2221を更新する。
以上のような処理を実行すると、上で述べたように、コアの利用効率が向上することで、計算効率が向上することになる。
[実施の形態2]
本実施の形態では、第1の実施の形態で述べた処理を実行する機能を、主にソフトウエアで実装する例を示す。
具体的には、本実施の形態ではハイパーバイザ上に起動した演算用の仮想マシンに対して第1の実施の形態で述べた技術を適用する。
本実施の形態では、図22に示すように、2つの物理サーバが系間通信路を介して接続されている。そして、各物理サーバは、仮想化支援機構とメモリ制御部と、複数のコア(図22では4つのコア)とを有するCPUと、メモリと、チップセットと、外部デバイスと、通信部とを有している。そして、各物理サーバでは、仮想マシンの起動及び制御などを行うためのハイパーバイザが実行される。
そして、2台の物理サーバ上に仮想マシンを各々生成し、仮想マシンレベルでの同期を行う。同期対象となる仮想マシンには仮想コアが複数割り当てられ、SMPを行う。SMPでは複数のコアがアクセス可能なメモリ領域である共有メモリを用い、複数のコアで協調して計算を行う。
本実施の形態では、例えば図23に示すような構成を有する物理サーバを2つ構築する。例えば、物理サーバはインテル社のx86系CPUを含む計算機であり、各物理サーバでは、例えばXenServerという仮想化ソフトウエアであるハイパーバイザが実行され、当該ハイパーバイザ上に生成される管理仮想マシンdom0上で、制御ソフトウエアが実行される。制御ソフトウエアは、同期を行うための仮想マシンの起動、管理及び制御を行うためのソフトウエアである。
制御ソフトウエアは、演算用仮想マシンと制御用仮想マシンを各物理サーバに生成する。演算用仮想マシンは、複数の仮想コアを含み、本実施の形態に係る処理を行うドライバと一般的なOS(Operating System)とが実行される。
また、各物理サーバには、外部デバイスの一種として仮想ディスクが用意される。
演算用仮想マシンと制御用仮想マシンとは、互いに通信を行うための内部通信路で仮想的に結線されている。また、2つの物理サーバは、当該2つの物理サーバ間を直接結線している系間通信路を用いて互いに通信を行うことで同期を実現する。演算用仮想マシンは第1の実施の形態に係る演算部に対応し、制御用仮想マシンは第1の実施の形態に係る同期制御部に対応する。
このような構成においては、物理サーバのCPUが有する仮想化支援機構(例えば、Intel Virtualization Technology)を利用することで、メモリ、キャッシュ、レジスタ、入出力の制御、及び命令実行の監視を行う。
また、命令実行の監視では、例えばインテル社のx86系CPUにおいてパフォーマンスカウンタの一種であるif分岐の実行回数をカウントするためのカウンタを利用する。すなわち、一定回数if分岐を実行する毎に、ハイパーバイザの機能を利用して仮想マシンの仮想クロックを一時停止/再開することで、計算実行/停止を実現する。また、このカウンタを利用し、実行シーケンス番号として処理が発生したタイミングを管理する。
計算再現については、上記のような計算実行/停止に加えて、CPUの仮想化支援機構を用いて共有メモリへのアクセスを検知すると、ハイパーバイザの機能を用いて一時停止を行い、仮想化支援機構によってアクセス先のメモリの値を書き換えた後で、演算用仮想マシンの再開を行うことで実現する。
演算用仮想マシンのOSとしては、例えばWindows(登録商標)が用いられる。また、演算用仮想マシンの入出力及び動作を制御するために、本実施の形態に係るドライバがインストールされる。そして、このドライバは、演算用仮想マシンで発生した入出力を仮想的な結線を通じて制御用仮想マシンに、外部デバイスへの出力要求として通知する。
制御用仮想マシンのOSとしては、例えばLinux(登録商標)がインストールされており、仮想的な結線を通じて演算用仮想マシンのドライバから入手した情報を基に、演算用仮想マシンに対して制御を行う。グループ対応表は制御用仮想マシンで管理する。出力要求が発生した場合、制御用仮想マシンでグループ対応表を生成及び更新し、演算用仮想マシンにおいて演算に使用される仮想コアを制御する。グループ対応表については、出力要求が発生した際の実行シーケンス番号と、出力要求を実行した仮想コアのID、該当する出力を実行した際の実行シーケンス番号を一つのセットとして取り扱う。同期制御部である制御用仮想マシンによって許可が下りた出力処理は、管理仮想マシン(dom0)によって実行される。
[実施の形態3]
図24に、本実施の形態に係る情報処理システムの構成例を示す。本実施の形態では、先行系計算機300と遅延系計算機400とが、例えばイーサネット(登録商標)などのネットワークにて接続されている。
先行系計算機300は、CPU310及び320と、チップセット350と、メモリ330及び340と、外部デバイス370と、通信部360とを有する。
CPU310は、コア311a及び311bと、リングバス312と、LL(Last Level)キャッシュ313と、メモリコントローラ314とを有する。リングバス312に、コア311a及び311bと、LLキャッシュ313と、メモリコントローラ314とが接続されている。メモリコントローラ314には、共有メモリであるメモリ330が接続されている。
CPU320も、コア321a及び321bと、リングバス322と、LLキャッシュ323と、メモリコントローラ324とを有する。リングバス322に、コア321a及び321bと、LLキャッシュ323と、メモリコントローラ324とが接続されている。メモリコントローラ324には、共有メモリであるメモリ340が接続されている。
CPU310とCPU320とは、QPI(QuickPath Interconnect)バス380とで接続されており、チップセット350もこのQPIに接続されている。
チップセット350は、共有メモリであるメモリ330及び340へのアクセスを抽出するアクセス抽出部351と、アクセス履歴格納部352と、本実施の形態における主要な処理を実行する制御部353と、従来のチップセットの機能を有するデバイス制御部354とを有する。
アクセス抽出部351及び制御部353は、QPIバス380を介して、コア311a及び311b並びに321a及び321bによるメモリトランザクションを受信する。デバイス制御部354は、例えばPCIe(Peripheral Component Interconnect Express)を介して外部デバイス370及び通信部360に接続される。制御部353は、デバイス制御部354を介して外部デバイス370及び通信部360へ出力を行う。なお、アクセス抽出部351、アクセス履歴格納部352及び制御部353は、FPGA(Field-Programmable Gate Array)で実装される。本実施の形態では、第1の実施の形態における出力値格納部123が設けられていない。
本実施の形態では、LLキャッシュ313及び323をバッファとして利用する。各コアは、if命令を実行する度、共有メモリへのアクセス要求を行う度に、QPIバス380へ信号を出力する。本実施の形態におけるCPU310及び320と、QPIバス380と、アクセス抽出部351とが、第1の実施の形態における演算部に対応する。また、本実施の形態におけるアクセス抽出部351以外のチップセット350の部分及び通信部360は、第1の実施の形態における同期制御部に対応する。
また、制御部353及びアクセス抽出部351は、QPIバス380経由でリングバス312を監視することで、発生した命令の監視を行う。これによってメモリ330及び340へのアクセスを監視し、if命令の実行回数の計数を行う。また、出力割り込みが発生した際に出力の内容を制御部353へ通知するように、割り込みベクタテーブルを修正することで、制御部353は出力要求(出力命令とも呼ぶ)の発生を取得する。本実施の形態では、CPU310及び320によるIO(Input Output)空間への書き込みは、チップセット350に出力値格納部が設けられていないため、メモリ330及び340に対して行われ、計算再現などが行われた後に、改めて制御部353を介して行われる。
また、制御部353は、各コア311a及び311b並びに321a及び321bで実行されたif命令の実行回数を計数し、一定回数のif命令が実行される毎に,同期確認点を生成する。また、この計数を基に、制御部353は、各コアがどのタイミングで処理を行ったかを表す実行シーケンス番号を所持する。
遅延系計算機400は、先行系計算機300と同様の構成を有している。すなわち、遅延系計算機400は、CPU410及び420と、チップセット450と、メモリ430及び440と、外部デバイス470と、通信部460とを有する。
CPU410は、コア411a及び411bと、リングバス412と、LL(Last Level)キャッシュ413、メモリコントローラ414を有する。リングバス412に、コア411a及び411bと、LLキャッシュ413と、メモリコントローラ414とが接続されている。メモリコントローラ414には、共有メモリであるメモリ430が接続されている。
CPU420も、コア421a及び421bと、リングバス422と、LLキャッシュ423と、メモリコントローラ424とを有する。リングバス422に、コア421a及び421bと、LLキャッシュ423と、メモリコントローラ424とが接続されている。メモリコントローラ424には、共有メモリであるメモリ440が接続されている。
チップセット450は、共有メモリであるメモリ430及び440へのアクセスを抽出するアクセス抽出部451と、アクセス履歴格納部452と、本実施の形態における主要な処理を実行する制御部453と、従来のチップセットの機能を有するデバイス制御部454とを有する。
アクセス抽出部451及び制御部453は、QPIバス480を介して、コア411a及び411b並びに421a及び421bによるメモリトランザクションを受信する。デバイス制御部454は、例えばPCIe(Peripheral Component Interconnect Express)を介して外部デバイス470及び通信部460に接続される。制御部453は、デバイス制御部454を介して外部デバイス470及び通信部460へ出力を行う。なお、アクセス抽出部451、アクセス履歴格納部452及び制御部453は、FPGA(Field-Programmable Gate Array)で実装される。本実施の形態では、第1の実施の形態における出力値格納部223が設けられていない。
各コアは、if命令を実行する度、共有メモリへのアクセス要求を行う度に、QPIバス480へ信号を出力する。本実施の形態におけるCPU410及び420と、QPIバス480と、アクセス抽出部451とが、第1の実施の形態における演算部に対応する。また、本実施の形態におけるアクセス抽出部451以外のチップセット450の部分及び通信部460は、第1の実施の形態における同期制御部に対応する。また、制御部453及びアクセス抽出部451は、QPIバス480経由でリングバス412を監視することで、発生した命令の監視を行う。
上で述べたように、本実施の形態では、メモリ330及び340に、出力要求において出力される値が格納されることになるので、実際に出力処理が行われるまでに、メモリ330及び340に格納されている出力予定値が書き換わってしまうことを回避する仕組みが採用される。
このため、本実施の形態では、出力要求が発生した後実際に出力が完了するまでの間において、演算グループのコアが仮計算を実行する出力モードが設けられている。
仮計算が通常モードにおける計算と異なる点は、共有メモリであるメモリ330及び340へのアクセスである。出力予定値が書き換わることを回避するため、共有メモリへの書き込みを共有メモリに対して直接実行せず、バッファであるLLキャッシュ313又は323を間接参照させることで、メモリ330及び340の整合性を保つ。ここで、一時的にメモリ330及び340以外の領域に保存するため、LLキャッシュ313又は323において、メモリ330又は340のアドレスと値とを保持する。
仮計算では、以下のようなメモリ関連処理を行う。
(a)メモリ330及び340へアクセスが発生した場合、メモリ330及び340の値ではなく、対応するアドレスを有する、LLキャッシュ313又は323における値を参照する。
(b)対応するアドレスの値がLLキャッシュ313及び323に存在しない状態で読み込みが発生した場合には、メモリ330又は340における値を直接参照する。
(c)対応するアドレスの値がLLキャッシュ313及び323に存在しない状態で書き込みが発生した場合には、メモリ330又は340へと書き込みを実行せず、代わりに対応するアドレスを新規にLLキャッシュ313又は323に生成し、そこに書き込みを行う。
(d)LLキャッシュ313及び323には世代が存在し、世代毎に異なるメモリ状態を保持できる。世代が更新されない間は、メモリ330又は340へのアクセスは、LLキャッシュ313又は323の同一アドレスへのアクセスとなる。
(e)LLキャッシュ313及び323の情報については、世代を指定してコミットを行うことで、LLキャッシュ313及び323における指定した世代の情報が、メモリ330又は340へと反映される。
遅延系計算機400では、仮計算に対応して仮計算再現が実行される。また、遅延系計算機400では、通常モードにおける計算に対応して計算再現が実行される。
このため、例えばCPU310及び320におけるLLキャッシュ313及び323は、図25に示すように、世代管理テーブルを格納する。図25の例では、世代の識別情報と、世代更新時における実行シーケンス番号とを含む。世代は、後に述べるように、同期確認点、出力要求を検出した際及び実際に出力を行う際に更新される。
また、LLキャッシュ313又は323は、例えば図26に示すように、データを保持する。図26の例では、各バッファアドレスについて、値と、メモリ330又は340における対応アドレスと、世代とが格納されるようになっている。
また、制御部353から、実行シーケンス番号が指定された、仮計算のコミットが指示されると、対応する世代のデータをLLキャッシュ313又は323からメモリ330又は340に書き込む。図25及び図26の例で、実行シーケンス番号001500−003000のコミットが指示されると、世代「2」でコミットされることになるので、アドレスAの「2」及びアドレスBの「3」を、メモリ330又は340に書き込むことになる。
さらに、本実施の形態では、制御部353及び453は、図27に示すようなグループ対応表を管理する。本実施の形態では、出力要求時の実行シーケンス番号と、出力要求を行ったコアのグループのID(グループID)と、このグループに所属するコアのID(コアID)と、出力時の実行シーケンス番号とが登録されるようになっている。図27の例では、1行目は既に出力を実際に実行しているが、2行目については、出力要求が検出されたところで、出力要求時の実行シーケンス番号と、グループIDと、コアIDとが登録された状態を示している。
なお、先行系計算機300における制御部353は、図28に示すように、グループ対応表3531と、グループ管理部3532と、コア実行制御部3533と、出力モード処理部3534とを有する。グループ管理部3532及びコア実行制御部3533は、第1の実施の形態におけるグループ管理部及びコア実行制御部と同様の機能を有する。出力モード処理部3534は、出力モード及び仮計算に関連する処理を実行する。
また、遅延系計算機400における制御部453は、図29に示すように、グループ対応表4531と、コア実行制御部4532と、比較部4533と、出力モード処理部4534とを有する。コア実行制御部4532及び比較部4533は、第1の実施の形態におけるコア実行制御部及び比較部と同様の機能を有する。出力モード処理部4534は、出力モード及び仮計算再現に関連する処理を実行する。
次に、本実施の形態に係る処理内容について、図30乃至図50を用いて説明する。
まず、先行系計算機300におけるCPU310及び320並びに制御部353は、初期化のための処理を実行する(図30:ステップS201)。本処理は、第1の実施の形態における初期化処理と同様であり、メモリのデータ、キャッシュのデータ及びレジスタ値を、先行系計算機300から遅延系計算機400へコピーし、先行系計算機300のグループ対応表3531を遅延系計算機400にコピーする。なお、初期的にはグループ対応表3531には出力グループが存在しないので、空のグループ対応表が遅延系計算機400にコピーされる。
また、現在の処理が通常モードであれば(ステップS203:Yesルート)、先行系計算機300におけるCPU310及び320は、通常計算を実行する(ステップS207)。通常計算については、従来と同じであるからこれ以上述べない。なお、初期的には通常計算が実行されることになる。
一方、現在の処理が出力モードであれば(ステップS203:Noルート)、先行系計算機300におけるCPU310及び320は、仮計算を実行する(ステップS205)。仮計算は、演算グループに属するコアのみで実行され、メモリ330又は340への直接的な書き込みを行わない計算である。この仮計算については図31を用いて説明する。
CPU310及び320のコア(コア311a及び311b並びに321a及び321bの少なくともいずれか)は、所定の計算を実行する(図31:ステップS231)。
この計算中に、メモリ330又は340からの読み込みが発生した場合には(ステップS233:Yesルート)、CPU310及び320のコアは、LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在するか判断する(ステップS243)。LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在しない場合には、CPU310及び320のコアは、メモリ330又は340から値を読み込む(ステップS247)。一方、LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在する場合には、CPU310及び320のコアは、現世代のバッファの値をLLキャッシュ313又は323から読み込む(ステップS245)。
一方、計算中に、メモリ330又は340からの読み込みが発生しておらず(ステップS233:Noルート)、メモリ330又は340への書き込みが発生した場合には(ステップS235:Yesルート)、CPU310及び320のコアは、LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在するか判断する(ステップS237)。メモリ330又は340への書き込みが発生していない場合には(ステップS235:Noルート)、処理は呼び出し元の処理に戻る。
LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在しない場合には、CPU310及び320のコアは、LLキャッシュ313又は323において、今回の書き込みのためのバッファ領域を生成する(ステップS239)。そして処理はステップS241に移行する。
LLキャッシュ313又は323において対応アドレスを有する現世代のバッファが存在する場合には、CPU310及び320のコアは、LLキャッシュ313又は323において、現世代のバッファに対して書き込みを行う(ステップS241)。
このような処理が繰り返され、CPU310及び320のコアによるIO空間への出力に相当する、メモリ330又は340に対する書き込みの結果が不用意に更新されることが回避される。
図30の処理の説明に戻って、アクセス抽出部351がQPIバス380を介してメモリ330又は340へのアクセスを検出すると(ステップS209:Yesルート)、アクセス抽出部351は、メモリ330又は340へのアクセスを、制御部353へ通知する(ステップS211)。アクセスを行ったコアのIDとアクセス内容とを通知する。
制御部353は、アクセス抽出部351から、メモリ330又は340へのアクセス通知を受信する(ステップS213)。これに応じて、制御部353は、メモリへのアクセスの記録及び転送処理を実行する(ステップS215)。この処理については、図32を用いて説明する。
制御部353は、メモリへのアクセスのデータに実行シーケンス番号を付与してジャーナルファイルを生成し、アクセス履歴格納部352に格納する(図32:ステップS251)。
そして、制御部353は、生成したジャーナルファイルを、遅延系計算機400に対して送信する(ステップS253)。そして、処理は呼び出し元の処理に戻る。
図30の処理の説明に戻って、制御部353は、メモリへのアクセス通知の受信後に、受信完了を、アクセス抽出部351に対して通知する(ステップS217)。これに対して、アクセス抽出部351は、制御部353から受信完了通知を受信する(ステップS219)。
ステップS219の後に又はメモリ330又は340へのアクセスが検出されていない場合(ステップS209:Noルート)であって、出力命令が発生していない場合には(ステップS221:Noルート)、処理は端子Fを介して図39の処理に移行する。
一方、出力命令が発生した場合には(ステップS221:Yesルート)、LLキャッシュ313又は323若しくはメモリ330又は340への書き込みがなされるので、QPIバス380を介して、出力命令のデータ(出力内容及び出力命令を発行したコアのID)は、制御部353に出力される(ステップS223)。制御部353は、CPU310及び320による出力命令のデータをQPIバス380を介して受信する(ステップS225)。そして処理は端子Eを介して図33の処理に移行する。
図33の処理の説明に移行して、端子Eの後に、制御部353は、状態取得処理を実行する(ステップS261)。状態取得処理については、図34を用いて説明する。
まず、制御部353のコア実行制御部3533は、コアの停止命令をCPU310及び320に対して発行する(図34:ステップS281)。CPU310及び320のコアは、制御部353からのコアの停止命令に応じてコアを停止させ(ステップS283)、コアの停止を制御部353に対して通知する(ステップS285)。
制御部353のコア実行制御部3533は、コアの停止通知をCPU310及び320から受信する(ステップS287)。そうすると、制御部353は、レジスタ値と、変更があったメモリのアドレス及び値(メモリ状態と呼ぶ)との取得命令を、CPU310及び320のコアに対して発行する(ステップS289)。CPU310及び320のコアは、取得命令に応じて、レジスタ値及びメモリ状態を読み出して、制御部353に対して出力する(ステップS291)。
制御部353は、CPU310及び320からレジスタ値及びメモリ状態のデータを受信し、現時点における実行シーケンス番号を付与する(ステップS293)。そして処理は図33の処理に戻る。
図33の処理の説明に戻って、制御部353のグループ管理部3532は、グループ対応表の更新処理を実行する(ステップS263)。グループ対応表の更新処理については、図35を用いて説明する。
まず、出力命令検出時であれば(ステップS301:Yesルート)、制御部353のグループ管理部3532は、グループIDとして一意なIDを生成する(ステップS303)。例えば、シリアルに番号を発行するようにしても良い。そして、グループ管理部3532は、出力命令が発生した時の実行シーケンス番号、生成したグループID及び出力命令を発行したコアのIDを含む出力グループのデータを、グループ対応表3531に登録するという更新を実行する(ステップS305)。
さらに、グループ管理部3532は、更新後のグループ対応表のデータを、遅延系計算機400に送信する(ステップS309)。
これに対して、遅延系計算機400の制御部453は、更新後のグループ対応表のデータを受信し(ステップS311)、受信したグループ対応表のデータによって遅延系計算機400におけるグループ対応表4531を更新する(ステップS313)。
一方、出力命令検出時でなければ(ステップS301:Noルート)、出力命令による出力処理の実行時であるから、グループ管理部3532は、出力処理が行われた時の実行シーケンス番号を、当該出力に係るグループに対して設定するという更新を実行する(ステップS307)。そして処理はステップS309に移行する。
このようにして、遅延系計算機400のグループ対応表が、先行系計算機300のグループ対応表と同期するようになる。
図33の処理の説明に戻って、制御部353は、非出力コアの稼働処理を実行する(ステップS265)。非出力コアの稼働処理については、図36を用いて説明する。
制御部353のコア実行制御部3533は、グループ対応表3531から、出力命令実行予定のコアを特定する(図36:ステップS321)。図27に示すように、本実施の形態に係るグループ対応表3531には、出力命令を発行したコアのIDのみが登録されているので、出力が完了していないグループに属するコアのIDを特定する。
そして、制御部353のコア実行制御部3533は、特定されたコア以外のコアを含む演算グループのコアを特定する(ステップS323)。その後、制御部353のコア実行制御部3533は、演算グループ(コアIDを含む)に対する稼働命令を、CPU310及び320に出力する(ステップS325)。
これに対して、CPU310及び320は、演算グループに対する稼働命令を受信する(ステップS327)。そうすると、CPU310及び320は、演算グループのうち停止しているコアを稼働させる(ステップS329)。このようにして、次の仮計算を実行するコアを稼働状態にする。そして、処理は呼び出し元の処理に戻る。
図33の処理の説明に戻り、制御部353は、現在のモードが出力モードであるか否かを判断する(ステップS267)。初期的には標準モードである。現在のモードが標準モードである場合には、制御部353は、出力モードへのモード切替処理を実行する(ステップS269)。モード切替処理については、図37を用いて説明する。
制御部353は、特定のモード(例えば出力モード)へのモード切替を、CPU310及び320に対して通知する(ステップS331)。これに対してCPU310及び320は、特定のモードへのモード切替通知を受信する(ステップS333)。
そうすると、CPU310及び320は、特定のモードへのモード切替を実行する(ステップS335)。CPU310及び320は、以降、特定のモードに応じた処理を実行するようになる。そして、処理は呼び出し元の処理に戻る。
図33の処理の説明に戻って、現在のモードが出力モードである場合、制御部353は、バッファの世代更新処理を実行する(ステップS271)。バッファの世代更新処理については、図38を用いて説明する。
まず、制御部353は、現在の実行シーケンス番号を含む世代更新命令をCPU310及び320に対して発行する(ステップS341)。これに対して、CPU310及び320は、現在の実行シーケンス番号を含む世代更新命令を受信する(ステップS343)。
そうすると、CPU310及び320は、受信した実行シーケンス番号を更新時の実行シーケンス番号(現世代の終了時における実行シーケンス番号)として世代管理テーブル(図25)に記録して、新たな世代を生成する(ステップS345)。そして、CPU310及び320は、世代更新通知を、制御部353に出力する(ステップS347)。
制御部353は、CPU310及び320から世代更新通知を受信する(ステップS349)。そして、処理は呼び出し元の処理に戻る。
このように、CPU310及び320のLLキャッシュ313及び323におけるデータ管理が変化する。
図33の処理の説明に戻って、制御部353は、実行シーケンス番号と、各コアのレジスタ値と、メモリ状態と出力内容を、遅延系計算機400へ送信する(ステップS273)。
出力命令を検出した際の処理は一旦終了して、処理は端子Dを介して図30のステップS203の処理に戻る。
一方、図30のステップS221で出力命令が発生していない場合には、端子Fを介して図39の処理が行われる。すなわち、制御部353は、if命令の実行回数を計数している(ステップS351)。
そして、制御部353は、if命令の実行回数が所定回数に達するという同期確認の条件を満たしたか否かを判断する(ステップS353)。同期確認の条件を満たしていない場合には、処理は端子Dを介して図30のステップS203に戻る。
一方、同期確認の条件を満たした場合には、制御部353は、状態取得処理を実行する(ステップS355)。この処理は図34で示した処理と同じである。
その後、制御部353は、非出力コアの稼働処理を実行する(ステップS357)。この処理は図36で示した処理と同じである。
そして、現在が出力モードであれば、制御部353は、バッファの世代更新処理を実行する(ステップS361)。この処理は図38で示した処理である。一方、現在が出力モードでなければ、処理はステップS363に移行する。
そして、制御部353は、実行シーケンス番号、各コアのレジスタ値及びメモリ状態を、遅延系計算機400へ送信する(ステップS363)。そして処理は端子Dを介して図30のステップS203に戻る。
このように、出力命令が発行されていない場合でも、同期確認点についてのデータが遅延系計算機400へ送信される。
次に、遅延系計算機400から計算再現又は仮計算再現についての計算結果の比較結果を受信した後において実行される処理について、図40及び図41を用いて説明する。
先行系計算機300の制御部353は、出力命令発行時又は同期確認点における実行シーケンス番号を含む比較結果を遅延系計算機400から受信する(ステップS401)。なお、比較結果が、レジスタ値又は出力値について不一致が検出されたことを示している場合には、異常終了するので、本実施の形態では説明を省略する。すなわち、以下の処理では、比較結果が、レジスタ値及び出力値が一致したということを示している場合を説明する。
そうすると、制御部353は、比較結果における実行シーケンス番号とグループ対応表3531とから、出力命令が発生している区間であるか否かを判断する(ステップS403)。グループ対応表3531には出力命令が発生した時点における実行シーケンス番号が登録されているので、比較結果における実行シーケンス番号と一致する実行シーケンス番号がグループ対応表3531に登録されているか否かで判断される。出力命令が発行されていない区間である場合には、処理は端子Dを介して図30のステップS203に戻る。
一方、出力命令が発生している区間である場合には、制御部353は、メモリ330又は340に格納されている出力予定値等のデータに基づき、外部デバイス370に対して出力処理を実行する(ステップS405)。
さらに、制御部353は、グループ対応表の更新処理を実行する(ステップS407)。この更新処理は図35の処理と同様である。
また、制御部353は、状態取得処理を実行する(ステップS408)。状態取得処理は、図34の処理と同様である。
また、制御部353は、非出力コアの稼働処理を実行する(ステップS409)。非出力コアの稼働処理は、図36の処理と同様である。
そして、制御部353は、仮計算のコミットを実行する(ステップS411)。この仮計算のコミットについては、図41を用いて説明する。
まず、制御部353の出力モード処理部3534は、グループ対応表3531から、コミットする区間を特定する(ステップS421)。このステップの直前に行った外部デバイス370への出力処理についての出力命令発行時から次の出力命令発行時までの区間(開始及び終了時の実行シーケンス番号)を特定する。そして、制御部353の出力モード処理部3534は、CPU310及び320に対して、コミットする区間を通知する(ステップS423)。
これに対して、CPU310及び320は、制御部353から、コミットする区間の通知を受信する(ステップS425)。そうすると、CPU310及び320は、通知された区間内の世代を、世代管理テーブルから特定する(ステップS427)。
そうすると、CPU310及び320は、通知された区間内の世代のうち、未処理の世代を特定する(ステップS429)。そして、CPU310及び320は、特定された世代において競合が発生しているか否かを判断する(ステップS431)。複数のトランザクションで同一メモリアドレスへの書き込みを含むアクセスが発生し、デッドロックの可能性がある場合等で、競合発生と判断される。
競合ありの場合には、CPU310及び320は、この区間については仮計算をアボートすることになる(ステップS433)。そのため、処理はステップS439に移行する。
一方、競合無しの場合には、CPU310及び320は、特定された世代についてバッファ(LLキャッシュ313又は323)に保存されている変更データをメモリ330又は340に対して反映させる(ステップS435)。
また、CPU310及び320は、通知された区間内の世代のうち未処理の世代が存在するか否かを判断する(ステップS437)。未処理の世代が存在する場合には、処理はステップS429に戻る。
一方、未処理の世代が存在しない場合には、CPU310及び320は、処理結果を制御部353に通知する(ステップS439)。制御部353の出力モード処理部3534は、処理結果の通知を受信する(ステップS441)。そして、処理は呼び出し元の処理に戻る。
なお、遅延系計算機400においてもこの処理は実行されるが、アボートが発生した場合には、処理は異常終了となる。また、アボートがあった場合には、コミットする区間で実行される仮計算をやり直すことになるので、この仮計算開始時におけるメモリ状態及びレジスタ値で、先行系計算機300及び遅延系計算機400を初期化する処理から再開する。以下では、コミットが成功したケースについて説明する。
図40の処理の説明に戻って、制御部353は、バッファの世代更新処理を実行する(ステップS413)。この処理は、図38の処理と同様である。
さらに、制御部353は、コミット結果を遅延系計算機400に送信する(ステップS415)。コミット結果には、ステップS408における実行シーケンス番号と、コミットした区間の実行シーケンス番号と、コア毎のレジスタ値及びメモリ状態のデータを含む。
そして、制御部353は、グループ対応表3531から、未実行の出力命令があるか否かを判断する(ステップS417)。未実行の出力命令が存在する場合には、出力モードを維持するので、処理は端子Dを介して図30のステップS203に戻る。一方、未実行の出力命令が存在しない場合には、制御部353は、通常モードへのモード切替処理を実行する(ステップS419)。この処理は、図37の処理と同様である。そして、処理は端子Dを介して図30のステップS203に戻る。
このようにして、出力処理に応じて、バッファとして用いられているLLキャッシュ313及び323におけるデータで、メモリ330及び340の更新を行うと共に、世代の更新が行われるようになる。
ここで、図42A及び図42Bを用いて仮計算のコミットに関連するデータ遷移について説明しておく。図42Aの右側に示すように、コア1乃至4が通常モードで計算を実行すると、コア1及び2が出力命令1を発行する(点A)。ここまでは、メモリ330及び340への書き込みが行われると共に、出力命令によって出力される値もメモリ330又は340に書き込まれる。
そして、コア3及び4が仮計算を実行し、その後コア3が出力命令2を発行する(点B)。さらに、コア4が仮計算を実行し、その後、遅延系計算機400から比較結果(点Aまでの計算再現の結果)が得られる(点C)。そうすると、出力命令1についての出力処理を行って、その後出力命令2までのコミットを図41に従って実行することになる。なお、図42Aにおいて黒の横棒は、同期確認点を表すものとする。
このような例において、グループ対応表3531には、点Aにおいて、点Aの実行シーケンス番号と第1の出力グループ(コア1及び2)とが登録される。また、この時点において、バッファとして用いられるLLキャッシュ313及び323に対する記録が開始される。その後の同期確認点では、世代更新が行われる。そして、点Bにおいて、グループ対応表3531には、点Bの実行シーケンス番号と第2の出力グループ(コア3)とが追加で登録される。
さらに、出力命令が実行される出力点1(点C)では、グループ対応表3531には、第1の出力グループに関連して、出力処理時における実行シーケンス番号として点Cの実行シーケンス番号が登録される。
出力命令2までのコミットでは、点A−Bの区間についてコミットを行う。この様子を図42Bを用いて説明する。この図では上から下へ時間が経過するものとする。また、バッファ(LLキャッシュ313及び323)及びメモリ330及び340では、アドレス0乃至3が存在しているものとする。さらに、バッファの各行は世代を表す。
点Aまではバッファは用いられず、メモリ330及び340に書き込まれる。点Aからは、メモリ330及び340を更新せずに、バッファに記録を行うことになる。第1の世代では、バッファ「3」に「X」が書き込まれ、第2の世代では、バッファ「3」に「Y」が書き込まれ、第3の世代では、バッファ「2」に「Y」が書き込まれ、バッファ「3」には「Z」が書き込まれる。点Aから点Bまでの間には、第1乃至第3の世代が含まれるが、その後点Cまでは第4乃至第6の世代が存在する。
コミットを実行する際には、点Aから点Bまでの区間をコミットするので、第3の世代までを、メモリ330及び340の対応するアドレスに書き込むことになる。図42Bの例では、メモリ「2」に「Y」が書き込まれ、メモリ「3」に「Z」が書き込まれる。メモリ「0」及び「1」については変更はない。
このようにして、コミットされたデータのみがバッファからメモリに反映されることになる。
次に、上で述べたような処理においてデータを受信する側の遅延系計算機400における処理内容について図43乃至図50を用いて説明する。
まず、遅延系計算機400の制御部453は、先行系計算機300からのデータの受信待ちとなる(ステップS501)。その後、制御部453は、先行系計算機300からデータを受信することになる(ステップS503)。(A)実行シーケンス番号、各コアのレジスタ値及びメモリ状態を受信する場合、(B)実行シーケンス番号、各コアのレジスタ値、メモリ状態及び出力内容を受信する場合、(C)実行シーケンス番号を含むジャーナルファイルを受信する場合、(D)実行シーケンス番号、コミット区間を表す実行シーケンス番号、コア毎のレジスタ値及びメモリ状態を受信する場合がある。出力内容は、出力命令が発行された場合に含まれる。ジャーナルファイルは、その都度送信される。(A)実行シーケンス番号、各コアのレジスタ値及びメモリ状態を受信する場合は、世代更新が行われた場合に送られてくる。
次に、制御部453は、受信データに含まれる実行シーケンス番号から特定される区間が通常モードであるか否かをグループ対応表4531から判断する(ステップS505)。グループ対応表4531において、出力処理時の実行シーケンス番号がどの出力グループについても登録されている状態であれば、通常モードとして判断される。
通常モードであれば、制御部453は、通常モードへのモード切替処理を実行する(ステップS507)。この処理は、図37の処理と同様である。
また、制御部453は、計算再現実行の条件を満たしているか否かを判断する(ステップS509)。具体的には、再現する区間より前の区間における計算再現が完了しており、以下のデータが揃っていることが条件となる。
1.区間内のジャーナルファイル
2.区間開始時のコア毎のレジスタ値及びメモリ状態のデータ
3.区間終了時のコア毎のレジスタ値及びメモリ状態のデータ
4.出力命令が存在する場合には出力内容
区間は、特定の実行シーケンス番号から他の特定の実行シーケンス番号までで規定され、同期が完了した区間の最後の実行シーケンス番号から、同期未完了で次に同期を行うべきタイミングの実行シーケンス番号までで規定される。なお、第1の実施の形態における例でも示したように、出力命令発行時の間、比較完了時の間又は出力命令発行時と比較完了時との間を想定すれば分かりやすい。
計算再現実行の条件が満たされている場合には、制御部453等は、計算再現を実行する(ステップS511)。計算再現については、図44を用いて説明する。なお、このステップの後には処理は端子Gを介して図49の処理に移行する。
制御部453は、レジスタを、区間開始時の値で初期化する初期化命令を、CPU410及び420に対して発行する(図44:ステップS531)。CPU410及び420は、初期化命令に応じて、区間開始時の値でレジスタを更新する(ステップS533)。また、CPU410及び420は、更新完了通知を、制御部453へ返信する(ステップS535)。これに対して、制御部453は、更新完了通知を受信する(ステップS537)。
制御部453のコア実行制御部4532は、コアの稼働命令を発行する(ステップS539)。通常モードであるから、全コアを稼働させるものである。CPU410及び420は、稼働命令に応じて、コアを稼働させる(ステップS541)。そして、CPU410及び420は、コアによって所定の計算を実行する(ステップS543)。
計算において、メモリ430又は440からの読み込みが発生した場合には(ステップS545:Yesルート)、アクセス抽出部451は、メモリ430又は440へのアクセスを検出して、メモリ430又は440へのアクセス通知を制御部453に出力する(ステップS547)。これに対して、制御部453は、アクセス通知の受信に応じて、読み込み予定値を、現在の実行シーケンス番号を基に特定され且つアクセス履歴格納部452に格納されているジャーナルファイルのデータで書き換えを行う(ステップS549)。
そうすると、CPU410及び420は、メモリからの読み込みを実際に実行する(ステップS551)。その後処理は端子Jを介して図45の処理に移行する。メモリの読み込みが検出されない場合(ステップS545:Noルート)も処理は端子Jを介して図45の処理に移行する。
図45の処理の説明に移行して、外部デバイス470への出力命令が発生した場合には(ステップS553:Yesルート)、QPIバス480を介して、出力内容が制御部453へ出力される(ステップS555)。制御部453は、CPU410及び420から出力内容を受信する(ステップS557)。そして呼び出し元の処理に戻る。
なお、外部デバイス470への出力命令が発生しておらず(ステップS553:Noルート)、区間分の計算が終了していない場合には(ステップS559:Noルート)、処理は端子Kを介して図44のステップS543に戻る。一方、区間分の計算が終了すると(ステップS559:Yesルート)、処理は呼び出し元の処理に戻る。このようにして計算再現が実行される。
図43の処理の説明に戻って、ステップS505で現在出力モードであると判断されると(ステップS505:Noルート)、制御部453は、出力モードへのモード切替処理を実行する(ステップS513)。この処理は図37の処理と同様である。
その後、制御部453は、対象区間の仮計算再現が完了しているか判断する(ステップS515)。対象区間の仮計算再現が完了していなければ、処理はステップS521に移行する。一方、対象区間の仮計算再現が完了していれば、制御部453の出力モード処理部4534は、区間終了時のメモリ状態を受信したか否かを判断する(ステップS517)。区間終了時のメモリ状態が得られていない場合には、処理はステップS501に戻る。一方、区間終了時のメモリ状態を受信した場合には、制御部453等は、区間のコミットを実行する(ステップS519)。この処理については図48を用いて説明する。そして、処理は端子Gを介して図49の処理に移行する。
また、対象区間の仮計算再現が完了していない場合には、制御部453は、仮計算再現実行の条件を満たしているか否かを判断する(ステップS521)。具体的には、再現する区間より前の区間における計算再現又は仮計算再現及びコミットが完了しており、以下のデータが揃っていることが条件となる。
1.区間内のジャーナルファイル
2.区間開始時における演算グループに属するコア毎のレジスタ値
3.区間終了時における演算グループに属するコア毎のレジスタ値
4.出力命令が存在する場合には出力内容
仮計算再現実行の条件が満たされていない場合には、処理はステップS501に戻る。一方、仮計算再現実行の条件が満たされた場合には、制御部453などは、仮計算再現を実行する(ステップS523)。仮計算再現については、図46及び図47を用いて説明する。
制御部453の出力モード処理部4534は、グループ対応表4531を参照して、対象区間における演算グループに属するコアを特定する(図46:ステップS561)。出力グループに属していないコアが演算グループに属するコアである。
そして、制御部453の出力モード処理部4534は、特定されたコアのレジスタを、区間開始時の値で初期化する初期化命令を、CPU410及び420に対して発行する(ステップS563)。CPU410及び420は、初期化命令に応じて、区間開始時の値で、特定されたコアのレジスタを更新する(ステップS565)。また、CPU410及び420は、更新完了通知を、制御部453へ返信する(ステップS567)。これに対して、制御部453は、更新完了通知を受信する(ステップS569)。
制御部453の出力モード処理部4534は、演算グループに属するコアの稼働命令を発行する(ステップS571)。そうすると、CPU410及び420は、稼働命令に応じて、演算グループに属するコアを稼働させる(ステップS573)。そして、CPU410及び420は、演算グループに属するコアによって所定の計算を実行する(ステップS575)。
計算において、メモリ430又は440からの読み込みが発生した場合には(ステップS577:Yesルート)、アクセス抽出部451は、読み込みを検出して、メモリ430又は440へのアクセス通知を制御部453に出力する(ステップS579)。これに対して、制御部453は、アクセス通知の受信に応じて、読み込み予定値を、現在の実行シーケンス番号に基づき且つアクセス履歴格納部452に格納されているジャーナルファイルのデータで書き換えを行う(ステップS581)。
そうすると、CPU410及び420は、メモリからの読み込みを実際に実行する(ステップS583)。その後処理は端子Lを介して図47の処理に移行する。メモリの読み込みが検出されない場合(ステップS577:Noルート)も処理は端子Lを介して図47の処理に移行する。
図47の処理の説明に移行して、メモリ430又は440への書き込みが発生した場合には(ステップS585:Yesルート)、アクセス抽出部451は、書き込みを検出すると、CPU410及び420に、書き込みの取り消しを実行させる(ステップS587)。そして処理はステップS589に移行する。メモリ430又は440への書き込みが発生していない場合(ステップS585:Noルート)にも、処理はステップS589に移行する。
さらに、外部デバイス470への出力命令が発生した場合には(ステップS589:Yesルート)、QPIバス480を介して、出力内容が制御部453へ出力される(ステップS591)。制御部453の出力モード処理部4534は、CPU410及び420から出力内容を受信する(ステップS593)。そして呼び出し元の処理に戻る。
なお、外部デバイス470への出力命令が発生しておらず(ステップS589:Noルート)、区間分の計算が終了していない場合には(ステップS595:Noルート)、処理は端子Mを介して図46のステップS575に戻る。一方、区間分の計算が終了すると(ステップS595:Yesルート)、処理は呼び出し元の処理に戻る。
このようにして仮計算再現が実行される。なお、遅延系計算機400では、先行系計算機300とは異なり、仮計算再現、コミット及び出力処理が連続して行われた後に、他の計算再現又は仮計算再現が開始されるので、LLキャッシュ413及び423をバッファとして用いてメモリ430及び440への書き込みを制御することはない。
図43の処理の説明に戻って、制御部453の出力モード処理部4534は、区間終了時のメモリ状態を受信したか否かを判断する(ステップS525)。区間終了時のメモリ状態が得られていない場合には、処理はステップS501に戻る。
一方、区間終了時のメモリ状態を受信した場合には、制御部453などは、区間のコミットを実行する(ステップS527)。ここで区間のコミットについて、図48を用いて説明する。なお、ステップS527の後に処理は端子Gを介して図49の処理に移行する。
まず、制御部453の出力モード処理部4534は、グループ対応表4531から、コミットする区間を特定する(ステップS651)。このステップの直前に行った外部デバイス470への出力処理についての出力命令発行時から次の出力命令発行時までの区間(開始及び終了時の実行シーケンス番号)を特定する。そして、制御部453の出力モード処理部4534は、特定された区間内に含まれるジャーナルファイルを特定し、CPU410及び420に対して、コミットする区間及び当該区間に含まれるジャーナルファイルを通知する(ステップS653)。なお、上でも述べたように世代更新が行われると先行系計算機300から通知されるデータがあって、世代も特定されるので、通知するジャーナルファイルには世代の情報を付加する。
これに対して、CPU410及び420は、制御部453から、コミットする区間及び当該区間のジャーナルファイルを受信する(ステップS655)。そうすると、CPU410及び420は、通知された区間内の世代を、受信データから特定する(ステップS657)。
また、CPU410及び420は、通知された区間内の世代のうち、未処理の世代を特定する(ステップS659)。そして、CPU410及び420は、特定された世代において競合が発生しているか否かを判断する(ステップS661)。この際、LLキャッシュ413及び423のデータではなく、特定された世代における最新のジャーナルファイルを用いて競合の有無を判断する。すなわち、複数のトランザクションで同一メモリアドレスへの書き込みを含むアクセスが発生し、デッドロックの可能性がある場合等で、競合発生と判断される。
競合ありの場合には、CPU410及び420は、この区間については仮計算再現をアボートすることになる(ステップS663)。そのため、処理はステップS669に移行する。
一方、競合無しの場合には、CPU410及び420は、ジャーナルファイルの内容をメモリ430又は440に対して反映させる(ステップS665)。
また、CPU410及び420は、通知された区間内の世代のうち未処理の世代が存在するか否かを判断する(ステップS667)。未処理の世代が存在する場合には、処理はステップS659に戻る。
一方、未処理の世代が存在しない場合には、CPU410及び420は、処理結果を制御部453に通知する(ステップS669)。制御部453の出力モード処理部4534は、処理結果の通知を受信する(ステップS671)。そして、処理は呼び出し元の処理に戻る。
図49の処理の説明に移行して、制御部453等は、メモリ状態の更新処理を実行する(図49:ステップS601)。この処理については図50を用いて説明する。
まず、制御部453は、区間終了時における実行シーケンス番号におけるメモリ状態で、メモリ430及び440の上書きをCPU410及び420に指示する(ステップS621)。これに対して、CPU410及び420は、指示に応じてメモリ状態の上書きを実行する(ステップS623)。先行系計算機300とメモリについての同期を図るためである。そして、処理は呼び出し元の処理に戻る。
そして、制御部453は、状態取得処理を実行する(ステップS603)。状態取得処理については、図34の処理と同様である。
さらに、制御部453は、計算結果(レジスタ値及び出力命令が発生していた場合には出力内容。但し、出力モードであれば演算グループのコアのみ)についての比較処理を実行する(ステップS605)。レジスタ値が一致するか、出力予定値が一致するか判断する。
計算結果が不一致を表している場合には(ステップS607:Noルート)、制御部453は、予め定められた異常対処処理を実行する(ステップS609)。そして処理は終了する。
計算結果が一致を表している場合には(ステップS607:Yesルート)、制御部453は、出力命令が発生していたか判断し(ステップS611)、発生していた場合には、外部デバイス470に対する出力処理を実行する(ステップS613)。一方、出力命令が発生していない場合には、処理はステップS615に移行する。
制御部453は、ステップS605の比較結果を、先行系計算機300に送信する(ステップS615)。そして、処理は端子Hを介してステップS501に戻る。
このような処理を実行することで、遅延系計算機400において先行系計算機300の計算内容について比較検証を行いつつ、計算を効率的に進行させることができるようになる。
先行系計算機300及び遅延系計算機400で行われる同期処理の一例を図51に示す。図51では、上から下に時間が流れるものとする。
図51の例において、先行系計算機300については、「出力命令2までをコミット」までは、図42Aを用いて説明したものと同様である。なお、「出力命令2までをコミット」の後には、コミット区間及びレジスタ値を、先行系計算機300から遅延系計算機400に送信する。
また、先行系計算機300では、「出力命令2までをコミット」を実行しても、出力命令2についての出力処理は行われていないので、出力モードのままである。但し、コア1及び2については出力命令1の出力を行ったので、コア1、2及び4によって仮計算を実行する。
一方、遅延系計算機400では、計算再現を行ったところで、レジスタ値及び出力予定値の比較を行い、点Aについての比較結果を、先行系計算機300に送信する。比較結果が一致を表している場合には、その後出力命令1についての出力処理が実行される。そして、先行系計算機300のコア3及び4で実行された仮計算について仮計算再現が実行される。仮計算再現については、上でも述べたようにメモリ状態以外が揃った時点で実行される。
遅延系計算機400において、点Bまでの仮計算に対応する仮計算再現が完了し、先行系計算機300でコミットがなされ且つメモリ状態が取得されると、出力命令2までのコミットを実行する。コミットが完了すると、レジスタ値及び出力予定値の比較を行い、比較結果を遅延系計算機400から先行系計算機300へ送信する。比較結果がレジスタ値及び出力予定値の一致を表している場合には、出力命令2についての出力処理を実行する。
先行系計算機300においても、比較結果を受信し、当該比較結果が一致を表している場合には、出力命令2についての出力処理を実行する。なお、グループ対応表3531は更新され、第2の出力グループの出力処理時の実行シーケンス番号(点D)が登録される。さらに、先行系計算機300においても、出力点1までをコミットする。そうすると、コミット区間及びレジスタ値を、先行系計算機300から遅延系計算機400に送信する。その後、出力点2までの仮計算のコミットも実行する。コミット毎に、コミット区間及びレジスタ値を、先行系計算機300から遅延系計算機400に送信する。
その後、未実行の出力処理が無くなるので、先行系計算機300は通常モードに戻り、計算をコア1乃至4で実行する。
前の仮計算再現がコミットされると、遅延系計算機400では、コア4のみで実行する仮計算の仮計算再現を実行する。この仮計算再現が完了すると、この仮計算再現のコミット(出力点1までのコミット)を行う。そうすると、遅延系計算機400においても、コア1、2及び4によって実行された仮計算について仮計算再現を実行する。この仮計算再現が完了すると、この仮計算再現のコミット(出力点2までのコミット)を実行する。コミットが完了すると、通常モードに戻って、計算再現を実行する。
このように、様々な仮計算が、先行系計算機300において可能な限り待ち時間が無くなるように実行され、対応する仮計算再現についても遅延系計算機400においても順次行われるようになる。
以上本発明の実施の形態について説明したが、本発明はこれに限定されるものではない。例えば、処理フローについては、処理結果が変わらない限り、処理の順番を入れ替えたり、複数のステップを並列実行することもある。
機能ブロック図についても一例であって、プログラムモジュール構成とは一致しない場合もある。
以上述べた本実施の形態をまとめると、以下のようになる。
本実施の形態に係る情報処理システムは、複数の第1演算器と第1制御部と第1外部デバイスとを含む第1のシステムと、複数の第2演算器と第2制御部と第2外部デバイスとを含み、第1のシステムで実行された計算と同一の計算を行って計算結果の比較を行うための第2のシステムとを有する。そして、第1制御部は、(A)複数の第1演算器のうち1又は複数の第1演算器から第1外部デバイスへの第1の出力要求が出力されたことを検出すると、上記1又は複数の第1演算器を含み且つ第1の計算を実行していた第1演算器を停止させ、(B)第1の出力要求で出力される値を含む第1の比較対象データを第2制御部に送信し、(C)第1の計算を実行していた第1演算器のうち上記1又は複数の第1演算器以外の第1演算器に、第2の計算を実行させる。また、第2制御部は、(D)第1制御部から第1の比較対象データを受信した場合、第1の計算に対応する第3の計算を、第1の計算を実行していた第1演算器に対応する第2演算器に実行させ、(E)第1の計算を実行していた第1演算器に対応する第2演算器のうち1又は複数の第2演算器から第2外部デバイスへの第2の出力要求が出力されたことを検出すると、第2の出力要求で出力される値を含む第2の比較対象データと第1の比較対象データとを比較する。
このようにすれば第2の計算が速やかに実行されるようになり、システムにおける演算器の有効利用が図られるようになる。
なお、上で述べた第1制御部は、第1の計算を実行する第1演算器を特定するための情報を、予め第2制御部に送信しておくようにしても良い。この場合、第2制御部は、第1の計算を実行していた第1演算器に対応する第2演算器を、上記情報に基づき特定するようにしても良い。このようにすれば、第1の計算と同様の計算が、第2演算器で実行されるようになる。
より具体的には、上で述べた第1制御部は、(F)第2の計算を実行する第1演算器を特定するための情報を、第2制御部に送信し、(G)第2の計算を実行していた第1演算器のうちある第1演算器から第1外部デバイスへの第3の出力要求が出力されたことを検出すると、第2の計算を実行していた第1演算器を停止させ、(H)第3の出力要求で出力される値を含む第3の比較対象データを第2制御部に送信し、(I)第2の計算を実行していた第1演算器のうち上記ある第1演算器以外の第1演算器に、第5の計算を実行させるようにしても良い。また、上で述べた第2制御部は、(J)上記情報を、第1制御部から受信し、(K)第1制御部から第3の比較対象データを受信した場合、上記情報に基づき第2の計算に対応する第4の計算を実行する第2演算器に特定して第4の計算を実行させ、(L)特定された第2演算器のうちある第2演算器から第2外部デバイスへの第4の出力要求が出力されたことを検出すると、第4の出力要求で出力される値を含む第4の比較対象データと第3の比較対象データとを比較するようにしても良い。
このように第1のシステムと同様の構成で第2のシステムにおいて計算再現が行われるようになる。
なお、第2の計算を実行する第1演算器を特定するための情報が、上記1又は複数の第1演算器の識別子を含むようにしても良い。逆に、出力要求を出力した第1演算器の識別子を含むようにしても良い。
さらに、上で述べた第1のシステムが、複数の第1演算器を含む第1の仮想マシンと、第1制御部を含む第2の仮想マシンと、第1の仮想マシン及び第2の仮想マシンの管理を行う第1の管理部とを有するようにしても良い。この場合、上で述べた第2のシステムが、複数の第2演算器を含む第3の仮想マシンと、第2制御部を含む第4の仮想マシンと、第3の仮想マシン及び第4の仮想マシンの管理を行う第2の管理部とを有するようにしても良い。実装形態は様々に変更可能である。
さらに、上で述べた第1制御部は、第1の出力要求で出力する値を保持しておくようにしても良い。この場合、上で述べた第2制御部は、比較結果を第1制御部に送信するようにしても良い。そして、さらに第1制御部は、第2制御部から受信した比較結果が第1の比較対象データと第2の比較対象データとが一致することを表す場合には、保持している上記値を第1外部デバイスを出力するようにしても良い。第1制御部に、出力する値を保持できる場合には、このような処理が行われる。
一方、上で述べた第1のシステムは、複数の第1演算器に共有される第1メモリと、第1メモリに反映する前のデータを保持する第1バッファとを有する場合がある。この場合、上記1又は複数の第1演算器は、第1の出力要求で出力される値を第1メモリに書き込み、第1の計算を実行していた第1演算器のうち上記1又は複数の第1演算器以外の第1演算器は、第2の計算におけるデータの書き込みを、第1バッファに対して行うようにしても良い。そして、上で述べた第2制御部は、比較結果を第1制御部に送信すると、上で述べた第1制御部は、比較結果を第2制御部から受信し、第2制御部から受信した比較結果が第1の比較対象データと第2の比較対象データとが一致することを表す場合には、第1メモリに書き込まれた上記値を第1外部デバイスに出力し、第1バッファに対して行われた書き込みの競合の有無の判定を複数の第1演算器に実行させ、当該競合無しと判定された場合には第1バッファに対する書き込み結果を第1メモリに反映させるようにしても良い。
第1制御部に、出力する値を保持しない場合には、このような構成を採用することで、同様の作用効果を得ることができるようになる。
なお、上で述べた第1制御部は、第2の計算を実行する第1演算器を特定するための情報を、第2制御部に送信し、第2の計算を実行している第1演算器が第1バッファへ書き込んだデータを、第2制御部に送信し、第2の計算を実行していた第1演算器のうちある第1演算器から第1外部デバイスへの第3の出力要求が出力されたことを検出すると、第2の計算を実行していた第1演算器を停止させ、第3の出力要求で出力される値を含む第3の比較対象データを第2制御部に送信するようにしてもよい。この場合、上で述べた第2制御部は、上記情報及び第1バッファへ書き込んだデータを、第1制御部から受信し、第1制御部から第3の比較対象データを受信した場合、上記情報に基づき第2の計算に対応する第4の計算を実行する第2演算器に特定して第4の計算を実行させ、特定された第2演算器のうちある第2演算器から第2外部デバイスへの第4の出力要求が出力されたことを検出すると、第4の出力要求で出力される値を含む第4の比較対象データと第3の比較対象データとを比較し、当該比較の結果が、第3の比較対象データと第4の比較対象データとが一致することを表す場合には、上記ある第2演算器に、第4の出力要求で出力される値を第2外部デバイスへ出力させ、第1バッファへ書き込んだデータを用いて、書き込みの競合の有無の判定を第2演算器に実行させるようにしても良い。
なお、上で述べたような処理をプロセッサに実施させるためのプログラムを作成することができ、当該プログラムは、例えばフレキシブル・ディスク、CD−ROMなどの光ディスク、光磁気ディスク、半導体メモリ(例えばROM)、ハードディスク等のコンピュータ読み取り可能な記憶媒体又は記憶装置に格納される。なお、処理途中のデータについては、RAM等の記憶装置に一時保管される。
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
(付記1)
複数の第1演算器と第1制御部と第1外部デバイスとを含む第1のシステムと、
複数の第2演算器と第2制御部と第2外部デバイスとを含み、前記第1のシステムで実行された計算と同一の計算を行って計算結果の比較を行うための第2のシステムと、
を有し、
前記第1制御部は、
前記複数の第1演算器のうち1又は複数の第1演算器から前記第1外部デバイスへの第1の出力要求が出力されたことを検出すると、前記1又は複数の第1演算器を含み且つ第1の計算を実行していた第1演算器を停止させ、
前記第1の出力要求で出力される値を含む第1の比較対象データを前記第2制御部に送信し、
前記第1の計算を実行していた第1演算器のうち前記1又は複数の第1演算器以外の第1演算器に、第2の計算を実行させ、
前記第2制御部は、
前記第1制御部から前記第1の比較対象データを受信した場合、前記第1の計算に対応する第3の計算を、前記第1の計算を実行していた第1演算器に対応する第2演算器に実行させ、
前記第1の計算を実行していた第1演算器に対応する第2演算器のうち1又は複数の第2演算器から前記第2外部デバイスへの第2の出力要求が出力されたことを検出すると、前記第2の出力要求で出力される値を含む第2の比較対象データと前記第1の比較対象データとを比較する
情報処理システム。
(付記2)
前記第1制御部は、
前記第1の計算を実行する第1演算器を特定するための情報を、予め前記第2制御部に送信しておき、
前記第2制御部は、
前記第1の計算を実行していた第1演算器に対応する第2演算器を、前記情報に基づき特定する
付記1記載の情報処理システム。
(付記3)
前記第1制御部は、
前記第2の計算を実行する第1演算器を特定するための情報を、前記第2制御部に送信し、
前記第2の計算を実行していた第1演算器のうちある第1演算器から前記第1外部デバイスへの第3の出力要求が出力されたことを検出すると、前記第2の計算を実行していた第1演算器を停止させ、
前記第3の出力要求で出力される値を含む第3の比較対象データを前記第2制御部に送信し、
前記第2の計算を実行していた第1演算器のうち前記ある第1演算器以外の第1演算器に、第5の計算を実行させ、
前記第2制御部は、
前記情報を、前記第1制御部から受信し、
前記第1制御部から前記第3の比較対象データを受信した場合、前記情報に基づき前記第2の計算に対応する第4の計算を実行する第2演算器に特定して前記第4の計算を実行させ、
特定された前記第2演算器のうちある第2演算器から前記第2外部デバイスへの第4の出力要求が出力されたことを検出すると、前記第4の出力要求で出力される値を含む第4の比較対象データと前記第3の比較対象データとを比較する
付記1記載の情報処理システム。
(付記4)
前記第2の計算を実行する第1演算器を特定するための情報が、前記1又は複数の第1演算器の識別子を含む
付記3記載の情報処理システム。
(付記5)
前記第1のシステムが、
前記複数の第1演算器を含む第1の仮想マシンと、
前記第1制御部を含む第2の仮想マシンと、
前記第1の仮想マシン及び前記第2の仮想マシンの管理を行う第1の管理部と、
を有し、
前記第2のシステムが、
前記複数の第2演算器を含む第3の仮想マシンと、
前記第2制御部を含む第4の仮想マシンと、
前記第3の仮想マシン及び前記第4の仮想マシンの管理を行う第2の管理部と、
を有する
付記1乃至4のいずれか1つ記載の情報処理システム。
(付記6)
前記第1制御部は、
前記第1の出力要求で出力する値を保持しておき、
前記第2制御部は、
比較結果を前記第1制御部に送信し、
前記第1制御部は、
前記第2制御部から受信した前記比較結果が前記第1の比較対象データと前記第2の比較対象データとが一致することを表す場合には、保持している前記値を前記第1外部デバイスを出力する
付記1乃至5のいずれか1つ記載の情報処理システム。
(付記7)
前記第1のシステムは、
前記複数の第1演算器に共有される第1メモリと、
前記第1メモリに反映する前のデータを保持する第1バッファと、
を有し、
前記1又は複数の第1演算器は、
前記第1の出力要求で出力される値を前記第1メモリに書き込み、
前記第1の計算を実行していた第1演算器のうち前記1又は複数の第1演算器以外の第1演算器は、
前記第2の計算におけるデータの書き込みを、前記第1バッファに対して行い、
前記第2制御部は、
比較結果を前記第1制御部に送信し、
前記第1制御部は、
前記比較結果を前記第2制御部から受信し、
前記第2制御部から受信した前記比較結果が前記第1の比較対象データと前記第2の比較対象データとが一致することを表す場合には、前記第1メモリに書き込まれた前記値を前記第1外部デバイスに出力し、
前記第1バッファに対して行われた書き込みの競合の有無の判定を前記複数の第1演算器に実行させ、当該競合無しと判定された場合には前記第1バッファに対する書き込み結果を前記第1メモリに反映させる
付記1記載の情報処理システム。
(付記8)
前記第1制御部は、
前記第2の計算を実行する第1演算器を特定するための情報を、前記第2制御部に送信し、
前記第2の計算を実行している第1演算器が前記第1バッファへ書き込んだデータを、前記第2制御部に送信し、
前記第2の計算を実行していた第1演算器のうちある第1演算器から前記第1外部デバイスへの第3の出力要求が出力されたことを検出すると、前記第2の計算を実行していた第1演算器を停止させ、
前記第3の出力要求で出力される値を含む第3の比較対象データを前記第2制御部に送信し、
前記第2制御部は、
前記情報及び前記第1バッファへ書き込んだデータを、前記第1制御部から受信し、
前記第1制御部から前記第3の比較対象データを受信した場合、前記情報に基づき前記第2の計算に対応する第4の計算を実行する第2演算器に特定して前記第4の計算を実行させ、
特定された前記第2演算器のうちある第2演算器から前記第2外部デバイスへの第4の出力要求が出力されたことを検出すると、前記第4の出力要求で出力される値を含む第4の比較対象データと前記第3の比較対象データとを比較し、
当該比較の結果が、前記第3の比較対象データと前記第4の比較対象データとが一致することを表す場合には、前記ある第2演算器に、前記第4の出力要求で出力される値を前記第2外部デバイスへ出力させ、
前記第1バッファへ書き込んだデータを用いて、書き込みの競合の有無の判定を前記第2演算器に実行させる
付記7記載の情報処理システム。
(付記9)
複数の第1演算器と第1制御部と第1外部デバイスとを含む第1のシステムと、複数の第2演算器と第2制御部と第2外部デバイスとを含み、前記第1のシステムで実行された計算と同一の計算を行って計算結果の比較を行うための第2のシステムとを有するシステムのうち前記第1制御部は、
前記複数の第1演算器のうち1又は複数の第1演算器から前記第1外部デバイスへの第1の出力要求が出力されたことを検出すると、前記1又は複数の第1演算器を含み且つ第1の計算を実行していた第1演算器を停止させ、
前記第1の出力要求で出力される値を含む第1の比較対象データを前記第2制御部に送信し、
前記第1の計算を実行していた第1演算器のうち前記1又は複数の第1演算器以外の第1演算器に、第2の計算を実行させ、
前記第2制御部は、
前記第1制御部から前記第1の比較対象データを受信した場合、前記第1の計算に対応する第3の計算を、前記第1の計算を実行していた第1演算器に対応する第2演算器に実行させ、
前記第1の計算を実行していた第1演算器に対応する第2演算器のうち1又は複数の第2演算器から前記第2外部デバイスへの第2の出力要求が出力されたことを検出すると、前記第2の出力要求で出力される値を含む第2の比較対象データと前記第1の比較対象データとを比較する
情報処理方法。