(57)【要約】【課題】同期処理を複数、実行させる場合に、各処理装置における各同期処理の実行結果を、それ以降の同期処理の実行に反映させるための技術を提供する。【解決手段】各ＣＰＵ０〜２は、レジスタ３５、或いは３６の待ち合わせカウント値とレジスタ３１の待ち合わせ対象ＣＰＵ数の一致により、同期ポイントを特定する。Ｓ２１の第１の試験処理内で第１の試験を実行した結果、ＣＰＵ２は、Ｓ２２の第２の試験処理内で第２の試験を実行しないと判定し、レジスタ３１の待ち合わせ対象ＣＰＵ数を３から２に更新する。ＣＰＵ０及び１は、その第２の試験処理内での第２の試験の実行により、レジスタ３５の待ち合わせカウント値を０から１、１から２に順次、更新する。その結果、待ち合わせカウント値は待ち合わせ対象ＣＰＵ数と一致する。それにより、各ＣＰＵ０〜２は、次の試験を実行するか否かを自律的に選択し、必要に応じて、待ち合わせ対象ＣＰＵ数を更新する。【選択図】図５
2013210853.tif 000002
【特許請求の範囲】
【請求項１】
複数の処理装置によって共有される記憶装置を備えた情報処理装置であって、
前記複数の処理装置に対して同期させて実行させる処理が存在する場合、前記複数の処理装置の中から前記処理を実行する処理装置群を決定する決定部と、
決定された前記処理装置群の総数を前記記憶装置に格納するとともに、前記処理装置群に前記処理を実行させる制御部と、
前記処理装置群に含まれる処理装置のうち、前記処理を実行した処理装置の数を計数する計数部と、
前記処理装置群の前記総数と、計数した前記処理装置の数とを比較する比較部と、
前記比較部による比較結果に基づいて、前記処理装置群に含まれる処理装置の全てが前記処理を実行したことを通知する通知部と、
を有することを特徴とする情報処理装置。
【請求項２】
前記制御部は、前記処理の実行対象とする各処理装置にそれぞれ、次に実行すべき処理を実行するか否かを判定させると共に、前記判定結果に基づいて前記記憶装置上の前記総数を更新させることにより実現される、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記処理装置の数の初期値として前記総数とは異なる値が前記記憶装置に格納される場合、
前記計数部は、前記次に実行すべき処理を実行すると判定した各処理装置に、前記次に実行すべき処理を終了した後、前記処理装置の数を更新させることにより実現され、
前記比較部は、前記実行対象とする各処理装置にそれぞれ、前記記憶装置上の前記処理装置の数と前記総数とを比較させることにより実現され、
前記通知部は、前記記憶装置上の前記処理装置の数と前記総数とを比較した各処理装置に、前記処理装置群に含まれる処理装置の全てが前記処理を実行したか否かを判定させることにより実現される、
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
複数の処理装置によって共有される記憶装置を備えた情報処理装置に同期させて処理を複数、実行されるための同期処理実行管理方法であって、
複数の処理装置のなかで前記処理の実行対象とする各処理装置に、次に実行すべき処理を実行するか否かを判定させると共に、前記判定結果に基づいて前記記憶装置上に格納される、処理を実行する処理装置の総数を更新させ、
前記次に実行すべき処理の実行に移行する場合、前記複数の処理装置のうちの１つに、処理を終了した処理装置の数を表す計数値の初期値を前記記憶装置に格納させ、
前記次に実行すべき処理を実行すると判定した各処理装置に、前記次に実行すべき処理を終了した後、前記記憶装置上の前記計数値を更新させ、
前記実行対象とする各処理装置に、前記記憶装置上の戦記計数値を前記総数と比較させ、前記次に実行すべき処理を実行する全ての処理装置が前記次に実行すべき処理を終了したか否かを判定させる、
ことを特徴とする同期処理実行管理方法。
【請求項５】
処理システムの処理装置として使用可能なコンピュータに、
複数の処理装置に同期させて実行させる処理が複数、存在する場合に、前記処理単位で前記処理を実行するか否かを判定し、
前記判定結果に基づいて、所定の記憶装置上に格納される、前記処理を実行する処理装置の総数を更新し、
前記判定により実行する処理を終了した後、前記所定の記憶装置上に格納される、処理を終了した処理装置の数を表す計数値を更新し、
前記所定の記憶装置上に格納された前記計数値、及び前記総数を参照し、現在、実行対象となっている処理を実行すべき全ての処理装置が前記実行対象となっている処理を終了したか否かを判定する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同じ記憶装置にアクセス可能な処理装置を複数、備えた情報処理装置に関する。
【背景技術】
【０００２】
ＣＰＵ（Central Processing Unit）等のプログラムを実行可能な処理装置では、他の処理装置と同期させて処理（以降「同期処理」）を連続的に実行させる場合がある。同期処理の同期処理において、同期処理を実行する全ての処理装置は、全ての処理装置が同期処理を終了した後、次の同期処理を実行しなければならない。次の同期処理に移行すべきタイミング（同期ポイント）の判定は、例えば各処理装置がアクセス可能な記憶装置上に同期判定用の数値を格納し、同期処理を終了した処理装置に、同期判定用の数値を更新させることにより、各処理装置に行わせることができる。
【０００３】
数値の更新は、同期判定用の数値をインクリメント、或いはデクリメントすることで行われる。
数値をインクリメントさせる場合、記憶装置には、普通、更新の対象となる数値の他に、同期処理を実行する処理装置の総数を表す数値が格納される。各処理装置は、その２つの数値を比較することにより、同期処理を実行する全ての処理装置がその同期処理を終了したか否か判定することができる。このため、他の全ての処理装置が同期処理を終了する前に同期処理を終了した処理装置は、他の全ての処理装置が同期処理を終了するまで待つことができる。通常、更新の対象となる数値の初期値は０であり、総数を表す数値は、その総数自体である。以降、便宜的に、更新の対象となる数値は「カウント値」、総数を表す数値は「待ち合わせ対象ＣＰＵ数」とそれぞれ表記する。
【０００４】
一方、数値をデクリメントさせる場合、記憶装置には、普通、カウント値の初期値として待ち合わせ対象ＣＰＵ数が格納される。待ち合わせ対象ＣＰＵ数をカウント値の初期値とした場合、同期処理を実行する全ての処理装置が同期処理を終了することにより、カウント値は０となる。それにより、各処理装置は、カウント値が０か否か確認することにより、同期処理を実行する全ての処理装置が同期処理を終了したか否か判定することができる。
【０００５】
同期処理は、通常、連続的に複数、実行される。従来、同期処理を実行させる処理装置の総数は固定（一定）としていた。しかし、処理装置に実行させる同期処理には、同期処理を適切に終了できるとは限らないものがある。処理装置には、別の同期処理の実行結果が強く影響する関係にある同期処理を連続的に実行させる場合がある。例えば、別の同期処理を適切に終了できなければ、適切に終了するのを期待できない同期処理を別の同期処理の終了後に実行させる場合がある。
【０００６】
実行結果が大きく影響する関係にある２つの同期処理を連続的に各処理装置に実行させる場合、或る同期処理を適切に終了するか否かは処理装置に依存することも多い。同期処理を適切に終了するのを期待できない処理装置に同期処理を実行させた場合、処理装置の処理時間が他の処理装置よりも非常に長くなることもありうる。そのように処理時間が非常に長くなれば、全ての実行させるべき同期処理の終了に要する総処理時間にも大きな影響も及ぼす。このようなことから、各処理装置に実行させる同期処理の内容によっては、各処理装置における各同期処理の実行状況を考慮することも必要と思われる。
【０００７】
このことについて、以下により具体的に説明する。
ＣＰＵでは、専用のプログラム（以降「試験プログラム」と呼ぶ）を実行させて、ＣＰＵのマイクロアーキテクチャ、つまり内部構造設計を検証するための試験が行われる。ＣＰＵ（処理装置）を複数、備えた処理システムでは、通常、試験プログラムとして、その試験を行うためのサブプログラム、及びそのサブプログラムを起動する別のサブプログラムを有する試験プログラムが用いられる。ここでは以降、試験を行うためのサブプログラムを「試験部」、その試験部を起動するサブプログラムを「初期処理部」とそれぞれ呼ぶことにする。
【０００８】
上記試験プログラムは、例えばスタンドアロンで各ＣＰＵのマイクロアーキテクチャの検証を行う。マイクロアーキテクチャの検証は、ＣＰＵを複数の検証対象に分け、検証対象毎に行う場合がある。その場合、各検証対象の検証は、それぞれ別同期処理として実行される。
【０００９】
ＣＰＵを複数の検証対象に分割しての検証では、別の検証対象が適切に動作するのを前提とする場合がある。例えばＣＰＵに搭載されたメモリ（通常キャッシュ）へのアクセスが適切に行えるか否かの検証と、メモリに格納されたデータを用いた演算機能の検証とを別に行う場合、演算機能の検証は、メモリへのアクセスが適切に行えることを前提として行われる。ＣＰＵによるメモリへのアクセスが適切に行われない場合、メモリへの適切なアクセスが前提の演算機能の検証を行うのは事実上、不可能となる。不可能な検証を行わなければならない必要性はない。各ＣＰＵでの各検証対象の検証結果は、他のＣＰＵに影響を及ぼさない。そのため、演算機能の検証を行うことによって生じる不具合を考慮することも必要と思われる。
【先行技術文献】
【特許文献】
【００１０】
【特許文献１】特開平７−１５２６９４号公報
【特許文献２】特開平１１−３１２１４８号公報
【特許文献３】特開平３−１１３５６４号公報
【発明の概要】
【発明が解決しようとする課題】
【００１１】
１側面では、本発明は、各処理装置における各同期処理の実行結果を、それ以降の同期処理の実行に反映させることを目的とする。
【課題を解決するための手段】
【００１２】
第１の案では、複数の処理装置によって共有される記憶装置を備えたシステムであって、複数の処理装置に対して同期させて実行させる処理が存在する場合、複数の処理装置の中から処理を実行する処理装置群を決定する決定部と、決定された処理装置群の総数を記憶装置に格納するとともに、処理装置群に処理を実行させる制御部と、処理装置群に含まれる処理装置のうち、処理を実行した処理装置の数を計数する計数部と、処理装置群の総数と、計数した処理装置の数とを比較する比較部と、比較部による比較結果に基づいて、処理装置群に含まれる処理装置の全てが処理を実行したことを通知する通知部と、を有する。
【発明の効果】
【００１３】
本発明を適用した場合には、各処理装置における各同期処理の実行結果を、それ以降の同期処理の実行に反映させることができる。
【図面の簡単な説明】
【００１４】
【図１】本実施形態による情報処理装置の構成例を説明する図である。
【図２】本実施形態によるプログラムの機能構成例を表す図である。
【図３】本実施形態によるプログラムによってメモリ上に確保される同期管理領域に格納されるデータ例を説明する図である。
【図４】ＣＰＵの構成例を説明する図である。
【図５】本実施形態によるプログラムの制御により各ＣＰＵが実行する処理を表すフローチャートである。
【図６】第１の試験処理のフローチャートである。
【図７】第２の試験処理のフローチャートである。
【図８】第３の試験処理のフローチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明の実施の形態について、図面を参照しながら詳細に説明する。
図１は、本実施形態による情報処理装置の構成例を説明する図である。図１に表すように、情報処理装置１は、計３個のＣＰＵ１１（ＣＰＵ１１−０〜ＣＰＵ１１−２）、メモリ（例えばメモリモジュール）１２、記憶装置１３、入力装置１４、入力装置インターフェース（Ｉ／Ｆ）１５、ディスプレイ１６、及び出力装置インターフェース（Ｉ／Ｆ）１７を備える。ＣＰＵ１１−０〜１１−２、メモリ１２、記憶装置１３、入力装置１４、入力装置インターフェース（Ｉ／Ｆ）１５、ディスプレイ１６、出力装置インターフェース（Ｉ／Ｆ）１７は、バス１８によって互いに接続されている。なお、ＣＰＵ１１の数は３であるが、ＣＰＵ１１の数は２以上であれば良い。
【００１６】
記憶装置１３は、ハードディスク装置、或いは半導体記憶装置等の不揮発性の記憶装置であり、本実施形態によるプログラム２０は、記憶装置１３に格納される。本実施形態において、プログラム２０は、各ＣＰＵ１１（のマイクロアーキテクチャ）を検証するための試験用を想定する。それにより、以降プログラム２０は「試験プログラム２０」と表記する。
【００１７】
試験プログラム２０は、ＣＰＵ１１を複数の検証対象に分け、検証対象毎に、検証対象を検証するための試験を実行する。各試験のための処理は、各ＣＰＵ１１に同期させて実行させる同期処理となっている。本実施形態では便宜的に、検証対象を検証する試験のための同期処理は、３つ連続的に実行されると想定する。
【００１８】
メモリ１２は、全てのＣＰＵ１１がアクセス可能な記憶装置であり、各ＣＰＵ１１が試験プログラム２０を実行するための領域１２ａが確保されている。その領域１２ａは、各ＣＰＵ１１が同期処理の同期のために用いられる。以降、領域１２ａは「同期管理領域」と呼ぶことにする。
【００１９】
試験プログラム２０は、全てのＣＰＵ１１（１１−０〜１１−２）にとって実行の対象となる。その試験プログラム２０は、図２に表すように、実際に試験を行うためのサブプログラムである試験部２２、試験部２２を起動する別のサブプログラムである初期処理部２１、及び試験プログラム２０を終了させるためのサブプログラムである終了処理部２３を含む。本実施形態による情報処理装置１は、各ＣＰＵ１１に試験プログラム２０を実行させることで実現される。
【００２０】
試験プログラム２０の初期処理部２１は、図１に表す構成の情報処理装置１において、３個のＣＰＵ１１のうちの１つに、他のＣＰＵ１１における試験の実行を制御する試験制御機能を実現させる。試験制御機能を実現可能な初期処理部２１は、自身が実行されるＣＰＵ（自ＣＰＵ）１１に試験部２２を起動させ、他のＣＰＵ１１にも試験部２２を起動させる。結果、試験制御機能を実現させる初期処理部２１は、各ＣＰＵ１１に並行に試験を開始させる。以降、試験制御機能が実現されるＣＰＵ１１は便宜的に「マスタＣＰＵ１１」と表記する。
【００２１】
各ＣＰＵ１１の一つは、例えばバス１８及び入力装置インターフェース１５を介した入力装置１４からの試験者の指示に従い、記憶装置１３に格納された試験プログラム２０をメモリ１２に読み出し、試験プログラム２０を起動する。このとき、試験プログラム２０を起動したＣＰＵ１１は、マスタＣＰＵ１１として動作する。
【００２２】
図１に表すように、ＣＰＵ１１には符号１１−０〜１１−２を付している。それらの符号において、ハイフンに続く数字は、対応するＣＰＵ１１に割り当てられたＩＤ番号を表している。マスタＣＰＵ１１となるのは、例えばＩＤ番号が最も小さいＣＰＵ１１である。マスタＣＰＵ１１は、試験プログラム２０の初期処理部２１を実行することにより、他のＣＰＵ１１に試験プログラム２０を起動させる。
【００２３】
上記のように、試験プログラム２０は、ＣＰＵ１１を複数の検証対象に分け、検証対象毎に、検証対象を検証するための試験を実現する。検証対象を検証するための試験に含まれる処理は、試験部２２の実行によって実現される。
【００２４】
終了処理部２３は、試験部２２から制御が渡されるサブプログラムである。終了処理部２３により、試験プログラム２０は終了する。マスタＣＰＵ１１が実行する終了処理部２３は、他のＣＰＵ１１による試験の終了を待って、自ＣＰＵ１１を含む各ＣＰＵ１１が行った試験結果を出力する機能を実現させる。各ＣＰＵ１１が行った試験結果を出力する機能により、試験者は各ＣＰＵ１１の試験結果を確認することができる。試験結果の出力は、図１に表す構成ではディスプレイ１６を用いて行われる。
【００２５】
他のＣＰＵ１１の試験結果は、バス１８を介した通信により、或いはメモリ１２を介した試験結果の取得により収集することができる。各ＣＰＵ１１の試験結果は、例えば、メモリ１２に保存される。
【００２６】
図４は、ＣＰＵの構成例を説明する図である。ここで図４を参照し、試験プログラム２０を実行させる対象となるＣＰＵ１１の構成例、及びその構成例のＣＰＵ１１で試験の対象となる検証対象について具体的に説明する。
【００２７】
図４に表すＣＰＵ１１は、ＭＴＰ（Multi Threaded Processing）に対応したものであり、１つのＳＸユニット（Secondary Cache and External Access Unit）４１と、４つのＣＰＵコア４２とを備えている。各ＣＰＵコア４２は、Ｓユニット（Storage Unit）４５、Ｉユニット（Instruction Control Unit）４６、及びＥユニット（Execution Unit）４７を備えている。
【００２８】
ＳＸユニット４１は、レベル２のユニファイドキャッシュ（図４中「Ｕ２  Ｃａｃｈｅ」と表記）４１ｂを備え、このユニファイドキャッシュ４１ｂを用いて、各ＣＰＵコア４２のＳユニット４５との間でデータの入出力を行う。ＳＸユニット４１は、バス１８を介したデータの送受信を行うためにインターフェース・ロジック４１ａを備えている。このインターフェース・ロジック４１ａは、バス１８から受信したデータを格納するムーブイン・バッファ４１ａ１、及びバス１８に送信するデータを格納するムーブアウト・バッファ４１ａ２を備えている。バス１８から受信されるデータは、メモリ１２からのデータであり、バス１８に送信するデータは、メモリ１２に格納されるデータである。
【００２９】
各ＣＰＵコア４２のＳユニット４５は、ロード及びストア命令のために全てのデータの供給、及び受給を扱う。そのために、Ｓユニット４５は、ＳＸユニット４１用のインターフェース（図４中「ＳＸ  Ｉｎｔｅｒｆａｃｅ」と表記）４５ａ、命令用のレベル１キャッシュ（図４中「Ｌ１Ｉ  Ｃａｃｈｅ」と表記）４５ｂ、データ用のレベル１キャッシュ（図４中「Ｌ１Ｄ  Ｃａｃｈｅ」と表記）４５ｃ、命令用のＴＬＢ（Translation Look-aside Buffer。図４中「Ｉ−ＴＬＢ」と表記）４５ｄ、及びデータ用のＴＬＢ（図４中「Ｄ−ＴＬＢ」と表記）４５ｅを備えている。インターフェース４５ａは、ＳＸユニット４１から入力したデータ（命令を含む）の格納に用いられるバッファ（図４中「ＳＸ  Ｏｒｄｅｒ  Ｑｕｅｕｅ」と表記）４５ａ１、及びＥユニット４７からのデータの格納に用いられるバッファ（図４中「Ｓｔｏｒｅ  Ｑｕｅｕｅ」と表記）４５ａ２を備える。
【００３０】
ＳＸユニット４１からの命令及びデータは、インターフェース４５ａのバッファ４５ａ１或いはバッファ４５ａ２に格納され、更にキャッシュ４５ｂ或いはキャッシュ４５ｃに格納される。このとき、キャッシュ４５ｂ或いはキャッシュ４５ｃに格納される命令、或いはデータのアドレスは論理アドレス（仮想アドレス）である。
【００３１】
ＴＬＢ４５ｄは、命令の論理アドレスを対応する物理アドレス（実アドレス）に変換し、論理アドレスと物理アドレスとの対応関係を格納する。論理アドレスは、タグとして扱われ、命令は、キャッシュ４５ｂのそのタグにより特定されるエントリに格納される。ＴＬＢ４５ｄは、例えばタグ（論理アドレス（例えば仮想ページ番号）、物理アドレス（例えば物理ページ番号）、及び状態フラグを格納可能なエントリが複数、確保されたテーブルを備えている。そのテーブルのエントリのうち、３２のエントリは、エントリ毎に異なる論理アドレスを格納可能なフルアソシアティブ（Full Associative）方式である。２０４８のエントリは、同一の論理アドレスを２つのエントリに格納可能な２ウェイセットアソシアティブ方式である。これは、ＴＬＢ４５ｅも同様である。
【００３２】
命令は、パイプライン処理される。パイプライン処理では、命令は投機的に投入される。バッファ４５ａ２は、ストア命令のレイテイシをパイプライン処理から分離するためのものであり、ストア命令がデータを待っている間、パイプライン処理を継続させることを可能にする。
【００３３】
Ｉユニット４６は、命令フェッチパイプライン４６ａ、ブランチヒストリ４６ｂ、命令バッファ４６ｃ、コミットスタックエントリ４６ｄ、リザベーションステーション群４６ｅ、及びレジスタ群４６ｆを備える。ＭＴＰをサポートするために、命令バッファ４６ｃ、コミットスタックエントリ４６ｄ及びレジスタ群４６ｆはそれぞれ二重化されている。
【００３４】
命令フェッチパイプライン４６ａは、フェッチすべき命令のアドレス生成、キャッシュ４５ｂへのアクセス、命令の命令バッファ４６ｃへの書き込み、等を行う。ブランチヒストリ４６ｂは、命令の分岐先と分岐方向を予測するためのテーブルである。命令フェッチパイプライン４６ａは、ブランチヒストリ４６ｂを参照して、命令をフェッチし、命令バッファ４６ｃに書き込む。命令バッファ４６ｃは、そのようにしてフェッチされた命令を保持するためのバッファである。
【００３５】
コミットスタックエントリ４６ｄは、実行中の命令の情報を保持するためのバッファである。リザベーションステーション群４６ｅを構成する各リザベーションステーションは、対応付けられた種類の命令が実行可能になるまで保持するためのバッファである。実行可能になった命令は、対応するリザベーションステーションから読み出され、Ｅユニット４７に出力される。
【００３６】
レジスタ群４６ｆは、命令実行制御のためのプログラム可視の各種レジスタである。図４中に表記のＰＣ、ｎＰＣ、ＣＣＲ、及びＦＳＲは、それぞれ、異なるレジスタの種類を表している。ＰＣは「Program Counter」の略記である。同様に、ｎＰＣは「next Program Counter」、ＣＣＲは「Condition Code Register」、及びＦＳＲは「Floating-Point State Register」の略記である。
【００３７】
ＰＣは、次に投入すべき命令のアドレスを保持する。ｎＰＣは、次にＰＣに格納すべきアドレスを保持する。ＣＣＲは、例えば複数のフラグを有するコンディションコードを保持する。ＦＳＲは、Ｅユニット４７内の浮動小数点データを処理するＡＬＵ（Arithmetic and Logic Unit）の実行モードと状態情報とを保持する。
【００３８】
Ｅユニット４７は、命令を処理するためのＡＬＵ群４７ａを備える。ＡＬＵ群４７ａを構成するＡＬＵとしては、２つの整数実行パイプライン（図４中「ＥＸＡ」、「ＥＸＢ」と表記）、２つの浮動小数点実行パイプライン（図４中「ＦＬＡ」、「ＦＬＢ」と表記）、２つの仮想アドレス加算器（図４中「ＥＡＧＡ」、「ＥＡＧＢ」と表記）がある。Ｉユニット４６が有するレジスタ群４６ｆのＦＳＲに実行モードが格納されるＡＬＵは、浮動小数点実行パイプラインである。
【００３９】
コントロール・ロジック４７ｂは、Ｉユニット４６のリザベーションステーション群４６にアクセスし、実行（投入）可能になった命令を対応するリザベーションステーションから読み出し、ＡＬＵ群４７ａの対応するＡＬＵに供給する。ＡＬＵ群４７ａの命令の実行に必要なデータは、レジスタ群４７ｃを介して、バッファ４５ａ２、キャッシュ４５ｃ、或いはレジスタ群４６ｆから取得される。ＡＬＵ群４７ａの命令の実行によって得られたデータは、レジスタ群４７ｃを介して、バッファ４５ａ２、キャッシュ４５ｃ、或いはレジスタ群４６ｆの何れかのレジスタに格納される。
【００４０】
Ｅユニット４７は、上記構成要素の他に、ＧＵＢ（GPR Update Buffer）４７ｄ、ＣＷＲ（Current Window Register）４７ｅ、ＧＰＲ（General Purpose register）４７ｆ、ＦＵＢ（FPR Update Buffer）４７ｇ及びＦＰＲ（Floating Point Register）４７ｈを備える。これらは、ＭＴＰをサポートするために二重化されている。図４では明確にしていないが、これらＧＵＢ４７ｄ、ＧＰＲ４７ｆ、ＦＵＢ４７ｇ及びＦＰＲ４７ｈは、それぞれ複数、存在する。
【００４１】
上記ＧＰＲ４７ｆは、整数データの保持に用いられる汎用のレジスタである。ＣＷＲ４７ｅは、ＧＰＲ４７ｆのコピーに用いられるレジスタである。ＧＵＢ４７ｄは、ＧＰＲ４７ｆ用のリネーミングレジスタファイルである。ＦＰＲ４７ｈは、浮動小数点データの保持に用いられるレジスタである。ＦＵＢ４７ｇは、ＦＰＲ４７ｈ用のリネーミングレジスタファイルである。
【００４２】
上記のような構成のＣＰＵ１１では、３つに分けた試験を行う場合、各試験の検証対象は、例えばＳＸユニット４１と各ＣＰＵコア４２のＳユニット４５、各ＣＰＵコア４２のＩユニット４６、及び各ＣＰＵコア４２のＥユニット４７、の３つに分けることが考えられる。各試験は、例えば、３つに分けた試験の記載順序で行えば良い。以降、便宜的に、ＳＸユニット４１と各ＣＰＵコア４２のＳユニット４５を対象にした試験は「第１の試験」、各ＣＰＵコア４２のＩユニット４６を対象にした試験は「第２の試験」、各ＣＰＵコア４２のＥユニット４７を対象にした試験は「第３の試験」とそれぞれ表記する。
【００４３】
ＣＰＵ１１の構成要素を３つの検証対象に分けた場合、各ＣＰＵコア４２のＩユニット４６を対象にした第２の試験では、ＳＸユニット４５のキャッシュ４５ｂ及び４５ｃにそれぞれ命令、及びデータが適切に格納されていることを前提とすることになる。このため、第１の試験で不適切な部分が判明するか、或いはその第１の試験を適切に行えなかった（例えばその試験のための処理を実行中にハングアップが発生した）場合、第２の試験を行う必要はないことになる。このことから、本実施形態では、各ＣＰＵ１１に、行うべき試験を自律的に選択させて行わせるようにしている。行うべき試験の自律的な選択を各ＣＰＵ１１に行わせることにより、試験全体の完了を大幅に遅らせるといった大きい悪影響を及ぼす可能性が考えられる試験をＣＰＵ１１に実行させるのを回避できる。それにより、全体として安定的に各ＣＰＵ１１に各試験を実行させることができる。
【００４４】
ここでは便宜的に、各ＣＰＵ１１は、第１の試験の結果に応じて第２の試験を行い、第３の試験は第１の試験、及び第２の試験の各結果に応じて行うと想定する。より具体的には、第１の試験で問題が見つからなかったＣＰＵ１１は、第２の試験を続けて行い、その第１の試験で問題が見つかったＣＰＵ１１は、第２の試験は行わず、次に第３の試験を行うと想定する。第２の試験で問題が見つかったＣＰＵ１１は、第３の試験を行わないと想定する。
【００４５】
第１の試験〜第３の試験は、それぞれ異なる処理によって行われる。各処理は、各ＣＰＵ１１に同期させて実行される。同期させる処理を実行する各ＣＰＵ１１は、その処理を実行する他の全てのＣＰＵ１１がその処理を終了したことを認識しなければならない。各ＣＰＵ１１が自律的に行う試験の選択は、処理（試験）によって、同期対象とするＣＰＵ１１の数が増減することを意味する。このことから、本実施形態では、メモリ１２上に確保された同期管理領域１２ａに以下のようなデータを格納するようにしている。図３を参照して具体的に説明する。
【００４６】
図３に表すように、同期管理領域１２ａには、６つのデータ格納領域３１〜３６が確保される。ここでは各データ格納領域は以降「レジスタ」と表記する。
各々のレジスタ３１〜レジスタ３６には、それぞれデータとして、待ち合わせ対象ＣＰＵ数、資源選択フラグ、排他フラグ、排他フラグ、待ち合わせカウント値、待ち合わせカウント値、が格納される。レジスタ３３とレジスタ３５、及びレジスタ３４とレジスタ３６は、それぞれサブセットを形成する。
【００４７】
レジスタ３１に格納される待ち合わせ対象ＣＰＵ数は、試験のための処理を実行するＣＰＵ１１の総数を表す。レジスタ３２に格納される資源選択フラグは、２つのサブセットのなかで有効であるサブセットを表す。ここでは、資源選択フラグの値が０のときはレジスタ３３とレジスタ３５のサブセットが有効であり、その値が１のときはレジスタ３４とレジスタ３６のサブセットが有効と想定する。
【００４８】
レジスタ３３とレジスタ３４にそれぞれ格納される排他フラグは、対応するフラグ３５、或いはレジスタ３６に格納された待ち合わせカウント値の更新を排他的に行うためのデータである。排他フラグにより、有効であるサブセットのレジスタ３３、或いは３４に格納されている待ち合わせカウント値は、１つのＣＰＵ１１のみ更新可能とさせている。
【００４９】
ここでは、排他フラグの値が０のときは非排他状態、つまり任意のＣＰＵ１１が排他状態に移行できる状態を表し、その値が１のときは排他状態、つまりその排他状態に移行させたＣＰＵ１１のみが待ち合わせカウント値を更新可能な状態を表すと想定する。以降、排他フラグの更新によって排他状態に移行させることを「排他獲得」とも表現する。本実施形態では、任意のＣＰＵ１１が排他獲得を行えるように、有効ではない無効のサブセットのレジスタ３３、或いはレジスタ３４には、例えば、値が０の排他フラグを格納する。
【００５０】
本実施形態では、試験のための処理の実行が終了したＣＰＵ１１に、現在、有効であるサブセットの排他獲得を行わせ、そのサブセットの待ち合わせカウント値をインクリメントさせるようにしている。待ち合わせカウント値の初期値は０としている。それにより、各ＣＰＵ１１は、現在、有効であるサブセットの待ち合わせカウント値がレジスタ３１の待ち合わせ対象ＣＰＵ数と一致するか否かにより、現在、対象としている試験を実行すべき全てのＣＰＵ１１がその試験を終了したか否かを確認することができる。
【００５１】
上記のように、本実施形態では、各ＣＰＵ１１に、行うべき試験を自律的に選択させるようにしている。行うべき試験の自律的な選択により、各ＣＰＵ１１には、その選択結果に応じて、レジスタ３１の待ち合わせ対象ＣＰＵ数の更新を行わせる。待ち合わせ対象ＣＰＵ数の更新により、直前の試験を実行し、且つ次の試験を実行しないＣＰＵ１１は、待ち合わせ対象ＣＰＵ数をデクリメントする。一方、直前の試験を実行せず、且つ次の試験を実行するＣＰＵ１１は、待ち合わせ対象ＣＰＵ数をインクリメントする。
【００５２】
各ＣＰＵ１１は、状況に応じて、待ち合わせ対象ＣＰＵ数の更新を行う。そのため、試験（同期させる処理）の実行対象となる各ＣＰＵ１１は、試験を実行するか否かに係わらず、且つ試験を実行する他のＣＰＵ１１の数の増減に係わらず、試験を実行する全てのＣＰＵ１１の試験の終了を認識することができる。このようなことから、各ＣＰＵ１１は、他のＣＰＵ１１に影響を及ぼすことなく、自律的に実行すべき試験のみを選択することができる。
【００５３】
上記同期管理領域１２ａを用いて各ＣＰＵ１１が試験を同期させて実行することを可能とするために、本実施形態では、試験プログラム２０は以下のような機能構成となっている。図２を参照して、具体的に説明する。
【００５４】
図２に表すように、初期処理部２１は、機能構成（例えばサブプログラム）として、初期化部２１１、及び起動部２１２を含む。
初期化部２１１は、同期管理領域１２ａの各レジスタ３１〜３６に最初に格納すべきデータを格納するための機能であり、マスタＣＰＵ１１でのみ有効となる。起動部２１２は、試験部２２を起動させる機能であり、各ＣＰＵ１１で用いられる。マスタＣＰＵ１１が実行する起動部２１２では、他のＣＰＵ１１に試験プログラム２０を起動させる機能が有効となる。
【００５５】
図２に表すように、試験部２２は、機能構成（例えばサブプログラム）として、試験実行部群２２１、実行管理部２２２、同期判定部２２３、更新部２２４、及び例外処理部２２５を含む。
【００５６】
試験実行部群２２１は、上記第１の試験〜第３の試験を実行するための機能群である。試験実行部群２２１は、第１の試験を実行するための第１の試験実行部２２１ａ、第２の試験を実行するための第２の試験実行部２２１ｂ、及び第３の試験を実行するための第３の試験実行部２２１ｃを含む。
【００５７】
実行管理部２２２は、試験実行部群２２１を構成する第１〜第３の試験実行部２２１ａ〜２２１ｃによる各試験を予め定めた順序で順次、実行させる機能である。実行すべき試験の自律的な選択は、この実行管理部２２２によって実現される。
【００５８】
同期判定部２２３は、有効であるサブセットの待ち合わせカウンタの値と待ち合わせ対象ＣＰＵ数を比較し、現在、対象とする試験を実行すべき全てのＣＰＵ１１が試験を終了したか否かを判定する機能である。その試験を実行すべきＣＰＵ１１のなかで最後にその試験を終了したＣＰＵ１１以外は、その判定結果に従って、その試験を実行すべき全てのＣＰＵ１１がその試験を終了するのを待つ待ち合わせを行うことになる。
【００５９】
更新部２２４は、同期管理領域１２ａに格納されたデータの更新を実現させる機能である。試験プログラム２０を実行する全てのＣＰＵ１１は、図３に表す全てのレジスタ３１〜３６にそれぞれ格納されているデータを更新可能である。
【００６０】
例外処理部２２５は、第１〜第３の試験実行部２２１ａ〜２２１ｃの何れかによる試験の実行中に発生した不具合、例えばハングアップに対応するための機能である。この例外処理部２２５により、各ＣＰＵ１１は試験の実行中に発生する不具合に対応することができる。
【００６１】
図２に表すように、終了処理部２３は、機能構成（例えばサブプログラム）として、試験結果出力部２３１、完了監視部２３２、及び終了部２３３を含む。
試験結果出力部２３１は、各ＣＰＵ１１による各試験の結果を出力するための機能である。図１に表すディスプレイ１６上への各ＣＰＵ１１による各試験の結果の表示は、この試験結果出力部２３１によって実現される。そのため、この試験結果出力部２３１は、マスタＣＰＵ１１でのみ有効となる。
【００６２】
各ＣＰＵ１１による各試験の結果の出力は、全てのＣＰＵ１１が最後の試験を終了した後に行わなければならない。完了監視部２３２は、全てのＣＰＵ１１が最後の試験を終了するのを監視するための機能である。そのため、試験結果出力部２３１と同様に、マスタＣＰＵ１１でのみ有効となる。
【００６３】
終了部２３３は、試験プログラム２０を終了させる機能である。全てのＣＰＵ１１で有効となる。マスタＣＰＵ１１以外のＣＰＵ１１では、試験部２２から終了処理部２３に制御が渡された場合、この終了部２３３による処理が直ちに実行される。
【００６４】
本実施形態では、初期処理部２１の初期化部２１１に、試験部２２の実行管理部２２２、及び更新部２２４に、それぞれ機能を追加させることにより、各ＣＰＵ１１における試験の自律的な選択、及びその選択結果への対応を可能にさせている。図２に表す初期処理部２１、試験部２２、及び終了処理部２３の機能構成は一例であり、そのような機能構成に限定されるものではない。試験プログラム２０を構成するサブプログラムも、初期処理部２１、試験部２２、及び終了処理部２３の３つに限定されない。
【００６５】
図５は、試験プログラムの制御により各ＣＰＵが実行する処理を表すフローチャートである。図５に表す処理は、各ＣＰＵ１１のなかでマスタＣＰＵ１１（１１−０）となるＣＰＵ１１が試験プログラム２０を起動することによって実現される。図５では、「ＣＰＵ０」がマスタＣＰＵ１１を表し、「ＣＰＵ１」「ＣＰＵ２」はそれぞれマスタＣＰＵ１１以外のＣＰＵ１１を表している。マスタＣＰＵ１１以外のＣＰＵ１１を指す場合、以降「他のＣＰＵ」と表記する。次に図５を参照して、試験プログラム２０の制御によって各ＣＰＵ１１が実行する処理について具体的に説明する。
【００６６】
各ＣＰＵ１１が図４に表すような構成であった場合、図５に表す処理は、４つのＣＰＵコア４２の何れかが、ＳＸユニット４１を介して順次、供給される試験プログラム２０の命令を実行することで実現される。この図５では、理解を容易とするために、レジスタ３１、３５及び３６にそれぞれデータとして格納される待ち合わせ対象ＣＰＵ数、及び２つの待ち合わせカウント値が更新されるシーケンスも併せて表している。図５中に表記の「０」〜「３」の数字は、対応するデータの値を表している。
【００６７】
図５において、Ｓ１０、Ｓ２０、及びＳ３０は、それぞれ、初期処理部２１、試験部２２、及び終了処理部２３によって実現される処理である。図５に表すように、試験プログラム２０では、初期処理部２１→試験部２２→終了処理部２３の順序で制御が渡される。
【００６８】
マスタＣＰＵ１１は、入力装置インターフェース１５、及びバス１８を介して入力する入力装置１４から試験者の指示に従って、記憶装置１３上の試験プログラム２０をメモリ１２上にロードし、試験プログラム２０を起動する。その起動によって、マスタＣＰＵ１１は、初期処理部２１によりＳ１０を実行する。そのＳ１０では、以下のような処理が行われる。
【００６９】
先ず、マスタＣＰＵ１１は、メモリ１２上に同期管理領域１２ａを確保し、その領域１２ａ内の各レジスタ３１〜３６にそれぞれ初期値とするデータを格納する初期設定を行う（Ｓ１１）。その初期設定により、レジスタ３１には待ち合わせ対象ＣＰＵ数として３、レジスタ３２には資源選択フラグとして０、レジスタ３３及び３４には排他フラグとしてそれぞれ０、レジスタ３５及び３６には待ち合わせカウント値としてそれぞれ０が格納される。
【００７０】
次にマスタＣＰＵ１１は、試験部２２を起動すると共に、他のＣＰＵ１１に試験プログラム２０の起動を指示する（Ｓ１２）。試験部２２の起動により、制御は初期処理部２１から試験部２２に渡る。このことから、Ｓ１０の一連の処理はここで終了し、Ｓ２０の実行が開始される。
【００７１】
上記Ｓ１１は、図２に表す初期化部２１１によって実現される。Ｓ１２は、起動部２１２によって実現される。
他のＣＰＵ１１で実行されるＳ１０では、以下のような処理が行われる。
【００７２】
他のＣＰＵ１１は、マスタＣＰＵ１１から試験プログラム２０の起動指示を受信するのを待つ待機状態にある（Ｓ１５）。その起動指示を受信した他のＣＰＵ１１は、起動指示を受信すると、試験部２２を起動する（Ｓ１６）。その試験部２２の起動により、他のＣＰＵ１１におけるＳ１０の一連の処理はここで終了し、起動した試験部２２によるＳ２０が実行される。
【００７３】
各ＣＰＵ１１は、Ｓ２０でＳ２１の第１の試験処理、Ｓ２２の第２の試験処理、及びＳ２３の第３の試験処理を順次、実行する。Ｓ２３の第３の試験処理の終了により、制御は試験部２２から終了処理部２３に渡され、各ＣＰＵ１１はＳ２０からＳ３０に移行する。
【００７４】
他のＣＰＵ１１は、Ｓ３０への移行により、試験プログラム２０を終了させる。その終了は、終了部２３３によって実現される。
一方のマスタＣＰＵ１１は、Ｓ３０に移行すると、先ず、他の全てのＣＰＵ１１がＳ２３の第３の試験処理を完了するのを待つ。そのための待ち合わせは、レジスタ３１に格納された待ち合わせ対象ＣＰＵ数が、有効であるサブセットの待ち合わせカウント値と一致したと判定するまで行われる。それらが一致した場合、Ｓ３１の判定はＹｅｓとなってＳ３２に移行し、マスタＣＰＵ１１は、自ＣＰＵ１１を含む全てのＣＰＵ１１による各試験結果をメモリ１２から収集し、バス１８、及び出力装置インターフェース１７を介してディスプレイ１６上に出力させる（Ｓ３２）。その後、例えば入力装置１４を介した試験者の指示により、Ｓ３０の一連の処理を終了する。Ｓ３１は、完了監視部２３２によって実現され、Ｓ３２は、試験結果出力部２３１によって実現される。
【００７５】
図５でのＳ２０を説明する前に、そのＳ２０内でＳ２１〜Ｓ２３として実行される第１〜第３の試験処理について詳細に説明する。
図６は、第１の試験処理のフローチャートである。始めに図６を参照して、Ｓ２０として実行される第１の試験処理について詳細に説明する。Ｓ２０で実行される処理の内容は全てのＣＰＵ１１で同じであることから、ここでは実行対象を「ＣＰＵ１１」と表記する。
【００７６】
先ず、ＣＰＵ１１は、次に行うべき試験を対象にした試験を実行する（Ｓ４１）。次にＣＰＵ１１は、その試験が終了したか否か判定する（Ｓ４２）。その試験が正常か否かに係わらずに終了した場合、Ｓ４２の判定はＹｅｓとなってＳ４３に移行する。その試験が終了していない場合、Ｓ４２の判定はＮｏとなって、その試験が終了するのを待つ。
【００７７】
図７及び図８に表すように、第２の試験処理、及び第３の試験処理でもこの第１の試験処理が実行される。しかし、Ｓ２１として実行される第１の試験処理、Ｓ２２の第２の試験処理中で実行される第１の試験処理、及びＳ２３の第３の試験処理中で実行される第１の試験処理では、Ｓ４１の試験実行のための処理を実現させる試験部２２の機能が異なる。Ｓ２１として実行される第１の試験処理では、第１の試験実行部２２１ａによる第１の試験が実行される。Ｓ２２の第２の試験処理中で実行される第１の試験処理では、第２の試験実行部２２１ｂによる第２の試験が実行され、Ｓ２３の第３の試験処理中で実行される第１の試験処理では、第３の試験実行部２２１ｃによる第３の試験が実行される。それにより、第１〜第３の試験処理では、異なる検証対象の試験が実行される。試験部２２の実行管理部２２２は、第１〜第３の試験処理での異なる検証対象の試験の実行を実現させる。
【００７８】
異なる検証対象の試験は同期させて実行するようにしている。それにより、第１〜第３の試験処理は、同じ内容の試験を各ＣＰＵ１１で同期させて実行させるための同期処理とさせている。
【００７９】
試験実行のための処理では、ハングアップ等が発生する可能性がある。そのようなハングアップが発生した場合、例外処理部２２５は、ハングアップの発生を処理の終了と見なし、実行管理部２２２に通知する。このことから、Ｓ４２は、実行管理部２２２と例外処理部２２５によって実現される。
【００８０】
Ｓ４３では、ＣＰＵ１１は、同期管理領域１２ａのレジスタ３２から試験選択フラグを読み出し、有効であるサブセットを確認する。次にＣＰＵ１１は、有効であるサブセットの排他獲得を行い（Ｓ４４）、その排他獲得が実際にできたか否か判定する（Ｓ４５）。有効であるサブセットの排他フラグの値が０であった場合、ＣＰＵ１１は、その排他フラグの値を０から１に更新することで排他獲得を行う。このことから、Ｃ４４の判定はＹｅｓとなってＳ４６に移行する。
【００８１】
一方、その排他フラグの値が１であった場合、ＣＰＵ１１は、排他獲得を行うことができない。このため、Ｓ４５の判定はＮｏとなって上記Ｓ４４に戻り、ＣＰＵ１１は、再度、排他獲得を試みることになる。
【００８２】
Ｓ４６では、ＣＰＵ１１は、有効であるサブセットの待ち合わせカウント値を読み出し、読み出した待ち合わせカウント値をインクリメントし、インクリメントした後の待ち合わせカウント値を待ち合わせ対象ＣＰＵ数と比較する。続いてＣＰＵ１１は、その比較の結果、それらが一致したか否か判定する。それらが一致した場合、Ｓ４７の判定はＹｅｓとなってＳ５２に移行する。それらが一致しなかった場合、判定はＮｏとなってＳ４８に移行する。
【００８３】
Ｓ４８への移行は、他のＣＰＵ１１のなかにＳ４１を実行しているＣＰＵ１１が存在すると見なせることを意味する。このことから、Ｓ４８〜Ｓ５１では、Ｓ４１を実行する全てのＣＰＵ１１がそのＳ４１を終了するまで待つための処理が実行される。
【００８４】
先ず、Ｓ４８では、ＣＰＵ１１は、インクリメント後の待ち合わせカウント値を有効であるサブセットに書き込む。次にＣＰＵ１１は、排他フラグの値を１から０に更新することにより、有効であるサブセットを非排他状態に設定する（Ｓ４９）。
【００８５】
その後、ＣＰＵ１１は、排他獲得を行うことなく、有効であるサブセットから待ち合わせカウント値を読み出し、読み出した待ち合わせカウント値を待ち合わせ対象ＣＰＵ数と比較し（Ｓ５０）、その比較の結果、それらが一致したか否か判定する（Ｓ５１）。
【００８６】
それらが一致した場合、Ｓ５１の判定はＹｅｓとなる。ここでのＹｅｓの判定は、Ｓ４１を実行した全てのＣＰＵ１１が有効であるサブセットの待ち合わせカウント値を更新したことを意味する。このことから、待ち合わせは完了、つまり同期ポイントが検出されたとして、ここで第１の試験処理が終了する。
【００８７】
一方、それらが一致しない場合、Ｓ５１の判定はＮｏとなって上記Ｓ５０に戻り、有効であるサブセットからの待ち合わせカウント値の読み出し、読み出した待ち合わせカウント値と待ち合わせ対象ＣＰＵ数の比較を再度、行う。それにより、Ｓ４１を実行した全てのＣＰＵ１１が有効であるサブセットの待ち合わせカウント値を更新するのを待つ。
【００８８】
上記Ｓ４７でのＹｅｓの判定は、有効であるサブセットの待ち合わせカウント値を自身が最後に更新したことを意味する。このことから、Ｓ４７の判定がＹｅｓとなって移行するＳ５２以降では、次の同期処理（ここではＳ２２の第２の試験処理）に移行するための処理が行われる。
【００８９】
先ず、Ｓ５２では、ＣＰＵ１１は、現在、無効であるサブセットの排他フラグを、排他状態を表す値の１に設定し、そのサブセットの待ち合わせカウント値として０を書き込む。次にＣＰＵ１１は、有効であるサブセットにインクリメント後の待ち合わせカウント値を書き込む（Ｓ５３）。その後、ＣＰＵ１１は、無効であるサブセットの排他フラグを、非排他状態を表す値の０に更新し（Ｓ５４）、資源選択フラグの値の０／１反転を行う（Ｓ５５）。その反転は、それまでの値が０であれば１に、それまでの値が１であれば０に更新することで行われる。そのようにして、有効であるサブセットの切り換えを行った後、この第１の試験処理が終了する。
【００９０】
Ｓ２１で実行される第１の試験処理では、最初の試験が対象となることから、その第１の試験処理を実行する全てのＣＰＵ１１は、有効であるサブセットの待ち合わせカウント値の更新を行うこととなる。しかし、Ｓ２２で実行される第２の試験処理中の第１の試験処理では、２番目の試験が対象となり、全てのＣＰＵ１１がその試験を実行するとは限らない。その試験を実行しないＣＰＵ１１は、有効であるサブセットの待ち合わせカウント値の更新を行うことなく、その試験を実行する全てのＣＰＵ１１がその試験を終了するのを待たなければならない。Ｓ５２は、そのように試験を実行しないＣＰＵ１１が適切に待ち合わせを行えるようにするための処理である。そのために２つのサブセットを用意している。
【００９１】
上記Ｓ４３〜Ｓ４５、Ｓ４８、Ｓ４９、Ｓ５２〜Ｓ５５は、試験部２２の更新部２２４によって実現される。Ｓ４７、Ｓ５０及びＳ５１は、同期判定部２２３によって実現される。Ｓ４６は、更新部２２４及び同期判定部２２３によって実現される。
【００９２】
図７は、第２の試験処理のフローチャートである。次に図７を参照して、その第２の試験処理について詳細に説明する。
先ず、ＣＰＵ１１は、次の試験（ここでは第２の試験）は実行対象か否か判定する（Ｓ６１）。Ｓ２１の第１の試験処理中のＳ４１を実行、つまり第１の試験を実行した結果、不適切な部分が判明するか、或いはハングアップが発生することで問題が顕在化したような場合、Ｓ６１の判定はＮｏとなってＳ６３に移行する。そのような問題が顕在化していない場合、Ｓ６１の判定はＹｅｓとなってＳ６２に移行する。
【００９３】
Ｓ６２では、ＣＰＵ１１は、図６に表すような第１の試験処理を実行する。ここでは、Ｓ４１で第２の試験を実行するための処理が行われる。その第１の試験処理を終了した後、第２の試験処理が終了する。
【００９４】
Ｓ６３では、ＣＰＵ１１は、同期管理領域１２ａ中のレジスタ３１に格納されている待ち合わせ対象ＣＰＵ数をそれまでより１つ小さい値に更新する。その後、ＣＰＵ１１は、Ｓ６４及びＳ６５を実行する。これらＳ６４及びＳ６５の処理内容は、上記Ｓ５０及びＳ５１と基本的に同じであるため、その説明は省略する。
【００９５】
図８は、第３の試験処理のフローチャートである。最後に図８を参照して、その第３の試験処理について詳細に説明する。
上記第２の試験処理では、試験を実行するＣＰＵ１１の総数である待ち合わせ対象ＣＰＵ数は減少する方向でのみ更新される。しかし、この第３の試験処理では、第２の試験を実行せずに第３の試験を実行するＣＰＵ１１に対応しなければならない。このため、第３の試験処理では、その対応のための処理が第２の試験処理に加えられた形となっている。このことから、図８では、第２の試験処理と同じ、或いは基本的に同じ内容の処理には第２の試験処理と同じ符号を付している。ここでは、第２の試験処理から異なる部分にのみ着目して説明を行う。
【００９６】
第３の試験処理のＳ６１では、ＣＰＵ１１は、次の試験（ここでは第３の試験）は実行対象か否か判定する。Ｓ２２の第２の試験処理中に第２の試験を実行した結果、不適切な部分が判明するか、或いはハングアップが発生することで問題が顕在化したような場合、Ｓ６１の判定はＮｏとなってＳ７３に移行する。そのような問題が顕在化していない場合、Ｓ６１の判定はＹｅｓとなってＳ７１に移行する。
【００９７】
Ｓ７１では、ＣＰＵ１１は、前回の試験、つまり第２の試験は実行したか否か判定する。その第２の試験を実行していた場合、Ｓ７１の判定はＹｅｓとなってＳ６２の第１の試験処理、つまり第３の試験を実行する。その後、この第３の試験処理が終了する。その第２の試験を実行していなかった場合、Ｓ７１の判定はＮｏとなる。その場合、ＣＰＵ１１は、同期管理領域１２ａのレジスタ３１に格納された待ち合わせ対象ＣＰＵ数をそれまでより１つ大きい値に更新する（Ｓ７２）。その後、そのＳ６２に移行する。
【００９８】
一方、Ｓ７３では、ＣＰＵ１１は、前回の試験、つまり第２の試験は実行したか否か判定する。その第２の試験を実行していた場合、Ｓ７３の判定はＹｅｓとなる。その場合、ＣＰＵ１１は、同期管理領域１２ａのレジスタ３１に格納された待ち合わせ対象ＣＰＵ数をそれまでより１つ小さい値に更新するためにＳ６３に移行する。その第２の試験を実行していなかった場合、Ｓ７３の判定はＮｏとなってＳ６４に移行する。
【００９９】
上記試験の実行結果による移行の想定では、Ｓ７３でＮｏと判定されない。しかし、その想定と異なる想定では、Ｓ７３でのＮｏの判定は有りうる。３回より多い試験を行う場合、３回目以降の試験を実行するための処理として、図８に表すような第３の試験処理を繰り返し実行させれば良い。
【０１００】
図５の説明に戻る。
上記のように、第２の試験処理、及び第３の試験処理では、それよりも前に実行した試験の結果に応じて、実行対象とする試験を実際に実行するか否かを決定し、必要に応じて、同期管理領域１２ａのレジスタ３１に格納されている待ち合わせ対象ＣＰＵ数を更新する。待ち合わせカウント値の更新は、実際に試験を実行したＣＰＵ１１のみが行う。そのように状況に応じてＣＰＵ１１の動作はＣＰＵ１１によって異なる。そのような動作の違いを説明するために、図５では、ＣＰＵ１１−２（図５中「ＣＰＵ２」と表記）が第１の試験の結果により、第２の試験を実行することなく、第３の試験を実行し、マスタＣＰＵであるＣＰＵ１１−０、ＣＰＵ１１−１は共に全ての試験を実行した場合を想定している。レジスタ３１、３５及び３６にそれぞれデータとして格納される待ち合わせ対象ＣＰＵ数、及び２つの待ち合わせカウント値が更新されるシーケンスは、その想定で表している。その想定でシーケンスを表すために、各ＣＰＵ１１でＳ２１〜Ｓ３として実行される第１〜第３の試験処理の縦方向上の位置を異ならせている。それにより、各ＣＰＵ１１における第１〜第３の試験処理の縦方向上の位置は、レジスタ３１、３５或いは３６にアクセスするタイミングを表している。
【０１０１】
Ｓ２１の第１の試験処理は、図５に表すように、マスタＣＰＵ１１→ＣＰＵ１１−１→ＣＰＵ１１−２の順序で終了する。そのため、このときに有効であるサブセットのレジスタ３５に格納された待ち合わせカウント値は、マスタＣＰＵ１１により０から１に更新され、ＣＰＵ１１−１により１から２に更新され、ＣＰＵ１１−２により２から３に更新される。ＣＰＵ１１−２は待ち合わせカウント値を最後に更新したＣＰＵであることから、待ち合わせカウント値は待ち合わせ対象ＣＰＵ数と一致する。そのため、ＣＰＵ１１−２は、このとき無効であるサブセットのレジスタ３６の待ち合わせカウント値を０にし、資源選択フラグを０から１に更新する。そのような更新によって、各ＣＰＵ１１はＳ２２に移行する。
【０１０２】
Ｓ２２に移行したＣＰＵ１１−２は、第１の試験の結果に問題があったことから、第２の試験を実行しない。そのため、ＣＰＵ１１−２は、Ｓ２２に移行して直ぐに、待ち合わせ対象ＣＰＵ数をそれまでの値である３から２に更新する。第２の試験を実行するマスタＣＰＵ１１及びＣＰＵ１１−１は、その第２の試験をＣＰＵ１１−１→マスタＣＰＵ１１の順序で終了する。それにより、レジスタ３６に格納された待ち合わせカウント値は、ＣＰＵ１１−１によって０から１に更新され、マスタＣＰＵ１１によって１から２に更新される。マスタＣＰＵ１１は待ち合わせカウント値を最後に更新したＣＰＵであることから、このとき無効であるサブセットのレジスタ３５の待ち合わせカウント値を０にし、資源選択フラグを１から０にする更新を合わせて行う。そのような更新によって、各ＣＰＵ１１はＳ２３に移行する。
【０１０３】
Ｓ２３に移行したＣＰＵ１１−２は、第２の試験を実行せずに、第３の試験を実行することになる。そのため、ＣＰＵ１１−２は、Ｓ２３に移行して直ぐに、待ち合わせ対象ＣＰＵ数をそれまでの値である２から３に更新する。それにより、第３の試験は全てのＣＰＵ１１が実行することとなる。
【０１０４】
第３の試験は、ＣＰＵ１１−１→ＣＰＵ１１−２→マスタＣＰＵ１１の順序で終了する。それにより、レジスタ３５に格納された待ち合わせカウント値は、ＣＰＵ１１−１によって０から１に更新され、ＣＰＵ１１−２によって１から２に更新され、マスタＣＰＵ１１によって２から３に更新される。そのような更新によって、各ＣＰＵ１１はＳ２０からＳ３０に移行、つまり制御を試験部２２から終了処理部２３に渡すことになる。マスタＣＰＵ１１は待ち合わせカウント値を最後に更新したＣＰＵであることから、このとき無効であるサブセットのレジスタ３６の待ち合わせカウント値を０にし、資源選択フラグを０から１にする更新を合わせて行う。
【０１０５】
なお、本実施形態では、待ち合わせカウント値はインクリメントすることで更新するようにしているが、減算する方向で更新するようにしても良い。これは、待ち合わせカウント値を初期値から最後まで減算していった結果、その減算が終了した後の待ち合わせカウント値が待ち合わせ対象ＣＰＵ数と一致すれば良いからである。
【０１０６】
また、本実施形態では、各ＣＰＵ１１に自律的に試験（同期処理）を実行させているが、試験を実行したＣＰＵ１１から結果を収集し、次の試験を実行すべきＣＰＵ１１の選択を１つのＣＰＵに行わせても良い。その１つのＣＰＵは、試験の実行対象としないＣＰＵであっても良い。その１つのＣＰＵに、状況に応じて、試験を実行させるＣＰＵ１１、及びその数を決定させ、その決定結果に従って、試験を実行させるべきＣＰＵ１１に試験を実行させるようにしても良い。
【０１０７】
本実施形態では、試験を実行しないＣＰＵ１１は、事実上、同期ポイント（待ち合わせカウント値と待ち合わせ対象ＣＰＵ数の一致が確認されたタイミング）が到来するまで有効である処理を実行しない。このことから、試験を実行しない、或いは試験を実行させないＣＰＵ１１に、次の同期ポイントが到来するまでの間、そのときの状況で必要な別処理を実行させるようにしても良い。試験（同期処理）の実行対象とするＣＰＵ１１のなかで任意のＣＰＵ１１に任意の別処理を実行させることも可能であることから、高い汎用性が得られる。
【０１０８】
本実施形態では、同期処理は試験実行のための処理としているが、同期処理はそのような処理に限定されない。同期処理は、各ＣＰＵ（処理装置）１１が実行するか否かによって他のＣＰＵ１１の実行結果に及ぼす影響を無視できるものであれば良い。
【０１０９】
以上の変形例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
同じ記憶装置にアクセス可能な処理装置を複数、備えた処理システムにおいて、
複数の処理装置に同期させて実行させる同期処理が複数、存在する場合に、前記同期処理単位で前記同期処理を実行すべき処理装置、及び前記処理装置の総数を決定し、前記決定した処理装置に実行すべき同期処理を実行させると共に、前記同期処理に対応する総数を前記記憶装置上に格納する制御手段と、
前記記憶装置上に格納された前記総数を用いて、前記制御手段により決定された各処理装置に、前記総数に対応する同期処理を実行すべき全ての処理装置が前記同期処理を終了したことを認識させる同期実現手段と、
を具備することを特徴とする処理システム。
（付記２）
前記制御手段は、前記同期処理の実行対象とする各処理装置にそれぞれ、次に実行すべき同期処理を実行するか否かを判定させると共に、前記判定結果に基づいて前記記憶装置上の前記総数を更新させることにより実現される、
ことを特徴とする付記１記載の処理システム。
（付記３）
前記次に実行すべき同期処理の実行に移行する前に、同期処理を終了した処理装置の数を表す計数値の初期値として前記総数とは異なる値が前記記憶装置に格納される場合、
前記同期実現手段は、前記次に実行すべき同期処理を実行すると判定した各処理装置に、前記次に実行すべき同期処理を終了した後、前記記憶装置上の前記計数値を更新させ、前記実行対象とする各処理装置に、前記記憶装置上の前記計数値を前記総数と比較させ、前記次に実行すべき同期処理を実行する全ての処理装置が前記次に実行すべき同期処理を終了したか否かを判定させることにより実現される、
ことを特徴とする付記２記載の処理システム。
（付記４）
複数の処理装置に同期させて実行させる同期処理が複数、存在する場合に、前記同期処理単位で前記同期処理を実行するか否かを判定する実行判定手段と、
前記実行判定手段の判定結果に基づいて、所定の記憶装置上に格納される、前記同期処理を実行する処理装置の総数を更新する第１の更新手段と、
前記実行判定手段により実行すると判定した同期処理を終了した後、前記所定の記憶装置上に格納される、同期処理を終了した処理装置の数を表す計数値を更新する第２の更新手段と、
前記所定の記憶装置上に格納された前記計数値、及び前記総数を参照し、現在、実行対象となっている同期処理を実行すべき全ての処理装置が前記同期処理を終了したか否かを判定する同期判定手段と、
を具備することを特徴とする処理装置。
（付記５）
同じ記憶装置にアクセス可能な処理装置を複数、備えた処理システムに同期処理を複数、実行されるための同期処理実行管理方法であって、
複数の処理装置のなかで前記同期処理の実行対象とする各処理装置に、次に実行すべき同期処理を実行するか否かを判定させると共に、前記判定結果に基づいて前記記憶装置上に格納される、同期処理を実行する処理装置の総数を更新させ、
前記次に実行すべき同期処理の実行に移行する場合、前記複数の処理装置のうちの１つに、同期処理を終了した処理装置の数を表す計数値の初期値を前記記憶装置に格納させ、
前記次に実行すべき同期処理を実行すると判定した各処理装置に、前記次に実行すべき同期処理を終了した後、前記記憶装置上の前記計数値を更新させ、
前記実行対象とする各処理装置に、前記記憶装置上の戦記計数値を前記総数と比較させ、前記次に実行すべき同期処理を実行する全ての処理装置が前記次に実行すべき同期処理を終了したか否かを判定させる、
ことを特徴とする同期処理実行管理方法。
（付記６）
処理システムの処理装置として使用可能なコンピュータに、
複数の処理装置に同期させて実行させる同期処理が複数、存在する場合に、前記同期処理単位で前記同期処理を実行するか否かを判定し、
前記判定結果に基づいて、所定の記憶装置上に格納される、前記同期処理を実行する処理装置の総数を更新し、
前記判定により実行する同期処理を終了した後、前記所定の記憶装置上に格納される、同期処理を終了した処理装置の数を表す計数値を更新し、
前記所定の記憶装置上に格納された前記計数値、及び前記総数を参照し、現在、実行対象となっている同期処理を実行すべき全ての処理装置が前記同期処理を終了したか否かを判定する、
処理を実行させるプログラム。
【符号の説明】
【０１１０】
１    処理システム
１１、１１−０〜１１−２    ＣＰＵ
１２    メモリ
１２ａ    同期管理領域
１３    記憶装置
２０    試験プログラム
２１    初期処理部
２２    試験部
２３    終了処理部
【図１】
2013210853.tif 000003
【図２】
2013210853.tif 000004
【図３】
2013210853.tif 000005
【図４】
2013210853.tif 000006
【図５】
2013210853.tif 000007
【図６】
2013210853.tif 000008
【図７】
2013210853.tif 000009
【図８】
2013210853.tif 000010