(57)【要約】      （修正有）【課題】デッドロックおよび安全性障害を検出するための、幅優先探索を用いるモデル検査を並列化するためのシステム及び方法を提供する。【解決手段】方法は、システムの状態空間の抽象的表現を作り出す（１２２）ことと、抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行する（１２４）ことと、構造化重複検出技法を用いる並列到達可能性分析の実行を基礎としてシステムの無効な挙動または状態を決定する（１２６）ことと、無効な挙動または状態が発見されなければ、システムの正当性を証明することを含む。【選択図】図７
2013239163.tif 000002
【特許請求の範囲】
【請求項１】
システムを検証するための方法であって、
前記システムの状態空間の抽象的表現を作り出すことと、
前記抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行することと、
構造化重複検出技法を用いる前記並列到達可能性分析の前記実行を基礎として前記システムの無効な挙動または状態を決定することと、
無効な挙動または状態が発見されなければ、前記システムの正当性を証明することと、を含む方法。
【請求項２】
前記無効な挙動または状態を導いたシステム遷移のシーケンスをユーザへ通知することをさらに含む、請求項１に記載の方法。
【請求項３】
共有または分散されたメモリおよび並列処理環境においてモデルチェッカを開始することをさらに含む、請求項１に記載の方法。
【請求項４】
半順序簡約が保全される、請求項１に記載の方法。
【請求項５】
前記抽象的表現を作り出すことは、カレント状態および遷移セットを有する有限オートマトンによって表現される同時プロセスのサブセットを用いることを含む、請求項１に記載の方法。
【請求項６】
前記遷移は先行者と後続者との関係性を決定するために使用され、かつ前記抽象的表現の計算に際してはサブセットのプロセスのオートマトンのみが使用される、請求項５に記載の方法。
【請求項７】
前記抽象的表現を作り出すことは、必要に応じて抽象グラフを緩やかに発生することを含む、請求項１に記載の方法。
【請求項８】
前記抽象グラフは、処理デバイスの複数のコアプロセッサにより、または１つのコンピュータの複数のプロセッサまたはクラスタ内の複数のコンピュータにより並行して発生される、請求項７に記載の方法。
【請求項９】
前記抽象グラフを発生することは、遷移を通じて単一のオートマトンのみが変わることの保証を含む、請求項７に記載の方法。
【請求項１０】
計算システムであって、
検証されるべきシステムの状態空間の抽象的表現を作り出し、前記抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行し、かつ並列構造化重複検出技法の実行を基礎として前記検証されるべきシステムの無効な挙動または状態を決定するように動作可能な少なくとも１つのプロセッサと、
構造化重複検出技法を用いる前記並列到達可能性分析を実行するために前記プロセッサと相互作用するように動作可能な記憶デバイスと、を備える計算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列構造化重複検出を利用する並列モデル検査に関する。
【背景技術】
【０００２】
モデル検査は、非同期的および分散されたシステムの作製および検証において使用される基本ツールである。例えば、モデルチェッカは、様々な技術、分野および産業で使用される分散ソフトウェアシステムを検証するために使用されることがある。このようなシステムの各コンポーネントにより実行されるアクションは、様々にインタリーブされ得ることから、システムの構成は全体として多数になる可能性がある。
【０００３】
非同期システムの正当性の検証を補助するために、モデルチェッカに加えて、全ての到達可能なシステム構成を列挙することができる抽象モデルが作成されて使用される場合がある。その列挙の間、モデルチェッカは、システムが無効の挙動を呈示していない、または無効状態に達していないことを確実にすることができる。このようなエラーが発見されれば、このようなエラーを導いたアクションのトレースがユーザへ報告して返されることが可能である。新しいシステムを作成してデバッグする場合、このトレース情報は貴重である可能性がある。さらに、モデルチェッカが無効な挙動を発見できなければ、それはシステムが実際に正当なものであることの証拠である。非同期システムの状態としての全ての可能性を列挙するために、一般的なモデルチェッカの多くは、配位空間を、ノードがシステム状態に対応しかつ辺が各コンポーネントの遷移としての可能性である暗に画定されるグラフとして扱う。このグラフを介する軌跡は、システムが実行する場合のあるアクションをインタリーブする１つの可能性を示す。グラフが画定されると、全数探索アルゴリズムが、所定の性質を妨害する状態を探して、システムの到達可能な全ての状態を探索することができる。しかしながら、黙示的グラフでは典型的であるように、存在するノードの数は膨大である可能性があり、探索には桁外れな時間または費用がかかることになる。
【０００４】
さらに、非モデル検査環境において、発見的探索および自動企画コミュニティは、最新のマルチコアプロセッサを利用してそのアルゴリズムの性能を向上させる新しい探索フレームワークの開発においてかなり成功を収めている。さらに、これらのフレームワークは、大型グラフ探索のメモリ要件のかなりの部分をＲＡＭからハードディスク等の外部記憶装置へオフロードすることにおいても功を奏することが示されている。
【発明の概要】
【課題を解決するための手段】
【０００５】
本明細書に記述している実施形態の一態様において、方法は、システムの状態空間の抽象的表現を作り出すことと、抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行することと、構造化重複検出技法を用いる並列到達可能性分析の実行を基礎としてシステムの無効な挙動または状態を決定することと、無効な挙動または状態が発見されなければ、システムの正当性を証明することを含む。
【０００６】
本明細書に記述している実施形態の別の態様において、本方法はさらに、無効な挙動または状態を導いたシステム遷移のシーケンスをユーザへ通知することを含む。
【０００７】
本明細書に記述している実施形態の別の態様において、本方法はさらに、共有または分散されたメモリおよび並列処理環境においてモデルチェッカを開始することを含む。
【０００８】
本明細書に記述している実施形態の別の態様では、半順序簡約が保全される。
【０００９】
本明細書に記述している実施形態の別の態様において、抽象的表現を作り出すことは、カレント状態および遷移セットを有する有限オートマトンによって表現される同時プロセスのサブセットを用いることを含む。
【００１０】
本明細書に記述している実施形態の別の態様において、遷移は先行者と後続者との関係性を決定するために使用され、かつ抽象的表現の計算に際してはサブセットのプロセスのオートマトンのみが使用される。
【００１１】
本明細書に記述している実施形態の別の態様において、抽象的表現を作り出すことは、抽象グラフを必要に応じて緩やかに発生することを含む。
【００１２】
本明細書に記述している実施形態の別の態様において、抽象グラフは、処理デバイスの複数のコアプロセッサにより、または１つのコンピュータの複数のプロセッサまたはクラスタ内の複数のコンピュータにより並行して発生される。
【００１３】
本明細書に記述している実施形態の別の態様において、抽象グラフを発生することは、遷移を通じて単一のオートマトンのみが変わることの保証を含む。
【００１４】
本明細書に記述している実施形態の別の態様において、計算システムは、検証されるべきシステムの状態空間の抽象的表現を作り出すための手段と、抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行するための手段と、構造化重複検出技法を用いる並列到達可能性分析の実行を基礎として検証されるべきシステムの無効な挙動または状態を決定するための手段とを備える。
【００１５】
本明細書に記述している実施形態の別の態様において、計算システムはさらに、無効な挙動または状態を導いたシステム遷移のシーケンスをユーザへ通知するための手段を含む。
【００１６】
本明細書に記述している実施形態の別の態様において、計算システムはさらに、モデルチェッカを開始するための手段を含む。
【００１７】
本明細書に記述している実施形態の別の態様において、計算システムは、検証されるべきシステムの状態空間の抽象的表現を作り出し、抽象的表現を基礎とする構造化重複検出技法を用いて並列到達可能性分析を実行し、かつ並列する構造化重複検出技法の実行を基礎として検証されるべきシステムの無効な挙動または状態を決定するように動作可能な少なくとも１つのプロセッサと、構造化重複検出技法を用いる並列到達可能性分析を実行するためにプロセッサと相互作用するように動作可能な記憶デバイスとを備える。
【００１８】
本明細書に記述している実施形態の別の態様において、少なくとも１つのプロセッサは、複数のコアプロセッサを有するプロセッサを備える。
【００１９】
本明細書に記述している実施形態の別の態様において、少なくとも１つのプロセッサは、複数のプロセッサを備える。
【００２０】
本明細書に記述している実施形態の別の態様において、複数のプロセッサはネットワーク内に分散される。
【００２１】
本明細書に記述している実施形態の別の態様において、記憶デバイスは内部および外部メモリデバイスを備える。
【００２２】
本明細書に記述している実施形態の別の態様において、記憶デバイスは入力／出力効率を向上させるように構成される。
【００２３】
本明細書に記述している実施形態の別の態様において、記憶デバイスはソリッドステートデバイスまたは磁気ディスクを備える。
【図面の簡単な説明】
【００２４】
【図１Ａ】図１Ａは、本明細書に記述している実施形態によるＰＳＤＤ技術を示す図である。
【図１Ｂ】図１Ｂは、本明細書に記述している実施形態によるＰＳＤＤ技術を示す図である。
【図２】図２は、実験結果を示す図である。
【図３Ａ】図３Ａは、実験結果を示す図である。
【図３Ｂ】図３Ｂは、実験結果を示す図である。
【図４Ａ】図４Ａは、実験結果を示す図である。
【図４Ｂ】図４Ｂは、実験結果を示す図である。
【図４Ｃ】図４Ｃは、実験結果を示す図である。
【図４Ｄ】図４Ｄは、実験結果を示す図である。
【図５Ａ】図５Ａは、実験結果を示す図である。
【図５Ｂ】図５Ｂは、実験結果を示す図である。
【図５Ｃ】図５Ｃは、実験結果を示す図である。
【図５Ｄ】図５Ｄは、実験結果を示す図である。
【図６】図６は、本明細書に記述している実施形態によるシステムを示す図である。
【図７】図７は、本明細書に記述している実施形態による方法のフローチャートである。
【発明を実施するための形態】
【００２５】
例えばＳｐｉｎモデルチェッカであるモデルチェッカのための２つの並列幅優先探索技術について説明する。モデルチェッカは、実際のアプリケーション、産業および技術において実装される、ソフトウェアシステム（例えば、分散ソフトウェアシステム）等のシステムを検証するために使用される。Ｓｐｉｎモデルチェッカが、周知かつ効率的なシステムであることを理解されたい。例えば、Ｓｐｉｎモデルチェッカは、例えばフラッド制御、呼処理ソフトウェア等の通信ソフトウェア、宇宙探査に使用されるソフトウェア、自動車分野における制御ソフトウェアおよび医療デバイス分野におけるソフトウェア等を目的として制御アルゴリズムを検証するために使用されているという報告がなされている。しかしながら、本明細書において、Ｓｐｉｎモデルチェッカは単なる一例として使用されるものである。本明細書に記述している実施形態に関しては、任意の適切なモデルチェッカが使用されてもよい。先に述べた技術のうちの第１の技術は、ハッシュ分散方式の幅優先探索（ＨＤ−ＢＦＳ）と呼ばれるハッシュ分散Ａ＊の幅優先探索実装であり、もう一方の技術は並列構造化重複検出と呼ばれる。
【００２６】
しかしながら、本明細書に記述している実施形態によれば、ＰＳＤＤは、モデル検査に適用される場合にはハッシュ分散方式の探索を凌ぐ優位点を有する。第１に、ＨＤ−ＢＦＳは遅延式の重複検出を使用し、かつ重複探索ノードを、これらがスレッド間で通信される間に一時的に格納しなければならない。ＰＳＤＤは重複状態を、これらの発生直後に検出することができ、よって、これらを格納するために余分なメモリを用いる必要をなくする。第２に、ＰＳＤＤはモデルチェッカ（例えば、Ｓｐｉｎ）の半順序簡約−モデルチェッカにより探索空間のサイズを縮小するために使用される技術−を実行する能力を保全することができる。これは、複数のスレッドを用いる場合、ＰＳＤＤはしばしば、共に半順序簡約の実行に際してはより保存的でなければならないＨＤ−ＢＦＳおよびマルチコア深さ優先探索（上述のＳｐｉｎモデルチェッカ等のモデルチェッカに組み込まれるもの等）の双方よりも遙かに狭い空間を検出できることを意味する。全体として、私達が行った実験の結果は、ＰＳＤＤがＨＤ−ＢＦＳおよび最新技術のマルチコア深さ優先探索の何れよりも高速であり、かつより大きな並列速力増加を達成できることを実証している。
【００２７】
幅優先探索の性能を向上させることに加えて、結果の中には、ＰＳＤＤが、外部記憶デバイスを利用することによってモデル検査のメモリ要件をも如何にして首尾良く減らすことができるかを実証するものがある。ある実験では、ＰＳＤＤは、ハードディスクを用いて内部メモリを補う場合に探索のメモリ要件を５００％余りも縮小することができる。
【００２８】
深さ優先検索対幅優先探索
最も広く知られるグラフ探索アルゴリズムのうちの２つは、深さ優先探索と幅優先探索である。深さ優先探索は、グラフ内の後続ノードを最深優先順序で発生させる（後続ノードの発生を「ノード拡張」と呼ぶ）。これは、最も新しく発生されたノードが次の拡張されるノードとなることを意味する。一方で、幅優先探索は最浅優先順序でノードを拡張する。例えば、Ｓｐｉｎは、安全性（典型的には、望ましくない何かは発生しないことを検証するために使用される）および活性（典型的には、望ましい何かはいつか必ず起こることの検証に使用される）の双方を検査できることからデフォルトで深さ優先探索を使用するが、Ｓｐｉｎの幅優先探索アルゴリズムは安全特性しか検証することができない。
【００２９】
幅優先探索は、モデルが安全性を侵害すれば最短の反例を発見することが保証されることから、モデル検査にとって重要である。これは、非同期システムの重要な特性の多くは安全性であることから重大であり、よってシステムのデバッグに際しては、システムが望み通りに行動しない理由を決定するためにモデルチェッカによって反例が提供されることを理解しなければならない。深さ優先探索は、状態空間において１つのノードに到達するために使用されるステップ数に留意せず、よって、ステップ数が不要にかなり長い反例を生成する場合がある。これらの長いトレースは、多くの不要な遷移を含む場合があることから、解釈が極めて困難である可能性がある。これを視野に入れると、あるモデルにおいて私達は、深さ優先探索はデッドロックを発見して９，９９２ステップより成るトレースをもたらすが、幅優先探索はそのデッドロックのトレースを４２という考え得る最小数のステップで発見することを観察している。
【００３０】
幅優先探索を活性の検証に直に用いることはできないが、活性検査問題を、続いて幅優先の到達可能性分析によって検証されることが可能な安全性検査問題へ効率的に遷移させる取り組みはなされている。深さ優先探索固有の順次的性質を所与として、深さ優先ではなく幅優先戦略を用いる活性検査は、最新のマルチコアプロセッサのより大幅な並列速力増加のより良いてこ入れを行うことができる。
【００３１】
ハッシュ分散方式の幅優先探索
この研究における私達の関心は、安全性をより迅速に検証するためにモデル検査の幅優先探索の性能を向上させることにある。グラフの並列探索を成功させるためには、グラフは、探索を実行する各スレッドがグラフの独立した一部分に作用できるようにして分割されなければならない。これを達成する単純な方法は、グラフのノードをハッシュ関数で静的に分割することである。このフレームワークは、ハッシュ分散方式の探索と呼ばれる。
【００３２】
私達は、ＨＤＡ＊アルゴリズムを幅優先探索へ適応させた。この新しいアルゴリズムを、ハッシュ分散方式の幅優先探索（ＨＤ−ＢＦＳ）と呼んでいる。これは、ノードをハッシュ関数により異なるスレッド間に分散させることによって、ＨＤＡ＊として進行する。各ＨＤ−ＢＦＳスレッドは１対のキュー、即ち現行で探索されている深さ層におけるノードのための１つのキュー、および後続者が配置される次の深さ層のための１つのキュー、を用いる。各スレッドは、探索が同じノードへ複数回拡張しないように使用される、それまでに訪問した全てのノードを含むハッシュテーブルも有する。探索に際して、スレッドは次のノードを現行の深さ層のキューから拡張し、かつその拡張するスレッドに割り当てられる後続者はハッシュテーブルに照らして検査され、重複していなければ次の深さ層のキューの後部に置かれる。拡張するスレッドに割り当てられない後続者は何れも、適切な近傍スレッドへ、近傍スレッドの到来するキューに配置することによって送られる。ある実装において、私達は、ノードを遠隔スレッドの到来するキューに非同期的に配置できるように通信スキームを用いた。
【００３３】
周期的に、各スレッドはその到来するキューを、ハッシュテーブルにおけるメンバーシップに関して試験される新しいノードについて検査し、これらの新しいノードは、重複するものでなければ受入側のスレッドによって次の深さ層のキューに配置される。どのスレッドもその現行の深さ層にノードを持たず、かつ全ての通信キューが空である場合、スレッドはその次のキューをその現行キューと同期しかつスワップして探索を次の深さ層へ移動させる。次の深さ層へのスワップ後にオープンノードが存在しなければ、探索空間は使い果たされていて、アルゴリズムは終了する。
【００３４】
欠点
ハッシュ分散方式の探索がモデル検査に適用される場合の主たる欠点は、２つ存在する。第１に、ハッシュ分散方式の探索は、重複ノードがスレッド間で通信される際に重複ノードの検出を遅延させる。ノードは、別のスレッドへ送られると、そのスレッドの受入側のキューに配置され、最終的に受け入れられて受入側のスレッドのハッシュテーブルに照らして検査されるまでそこに留まる。重複ノードのこの遅延される検出は、重複ノードがそのメモリを再使用のために即座に解放する代わりに受け入れキュー内に存在することに起因して、探索にさらなるメモリを必要とさせる。やがて分かるように、遅延する重複ノード検出によって生み出される余分なメモリオーバーヘッドはかなりのものになる可能性がある。
【００３５】
ハッシュ分散方式の探索の第２の欠点は、半順序簡約を適用する際には保存的でなければならないことにある。半順序簡約は、モデル検査において探索グラフのサイズを縮小するために使用される技法である。半順序簡約では、グラフ内のノードの拡張に際して後続者のサブセットのみが検討される。半順序簡約によって幅優先探索を実行する場合、Ｓｐｉｎは、完全性を保証できない場合の簡約を防止するためにＱ  ｐｒｏｖｉｓｏと呼ばれる試験を用いる。ノードの拡張に際してＱ  ｐｒｏｖｉｓｏが満たされなければ、ノードは全体に拡張されなければならず、簡約は行われない。Ｑ  ｐｒｏｖｉｓｏとは、ノードの後続者の発生に際して、後続者の何れかが幅優先探索キューに存在している、または配置されていれば簡約を行うことができ、そうでなければ、完全な拡張が発生しなければならない、というものである。この単純な試験は、安全性の障害およびデッドロックを探索する場合に、幅優先探索が半順序簡約の下で完全であり続けることを可能にする。
【００３６】
ハッシュ分散方式の探索では、拡張するスレッドに後続状態が割り当てられなくてもよい。割当てが発生する場合、拡張するスレッドは、後続状態がキューに存在するか、キューへ向かって進むかを試験する能力を保有しない。完全性を保全するために、ＨＤ−ＢＦＳは保存的でなければならならず、かつ近傍スレッドへ送られるノードがＱ  ｐｒｏｖｉｓｏを通過しないことを想定しなければならない。これは、簡約のためにスレッドはスレッド自体に割り当てられかつＱ  ｐｒｏｖｉｓｏも通過する後続状態を発生しなければならないことに起因して、半順序簡約を成功裏に実行する機会を減らす。スレッドの数が多いほど、拡張するスレッドに後続状態が割り当てられない機会は多くなる。これは、スレッドの数が増加するにつれて、そうでなければ半順序簡約を適用できるモデルに対する探索空間のサイズが増大することを意味する。これに起因して、複数のスレッドを用いるＨＤ−ＢＦＳの性能は、完全性を保証するために膨大な空間を探索しなければならないことから、事実上、連続的な幅優先探索よりも悪くなる可能性がある。
【００３７】
抽象ベースのハッシュ法
ハッシュ分散方式の探索に関わる先に述べた問題点は共に、スレッドへノードを割り当てるために使用されるハッシュ関数はノードを均一に分散するように設計されるという事実に由来する。これは、後続ノードが拡張するスレッドへ割り当てられることをまれにする。Ｂｕｒｎｓ  ｅｔ  ａｌ．（２０１０年）は、この問題点を軽減するために使用できるハッシュ分散方式の探索の修正を提示している。ノードを均一に分散するハッシュ関数を用いる代わりに、準同形の抽象化関数を用いてノードをより構造化された方法で分散することができる。慎重に作成される抽象化を用いる場合のこの手法の優位点は、探索ノードの後続者にその親と同じ抽象ノードへマップする傾向があり、よって、これらは拡張するスレッドへ割り当てられることにある。欠点は、探索負荷がスレッド間で均等に平衡され得ないことである。Ｂｕｒｎｓ  ｅｔ  ａｌ．は、均一に分散されるハッシュ関数の代わりに抽象化を用いることで、パズル解法および企画問題に対するＨＤＡ＊の性能を大幅に向上させ得ることを示している。
【００３８】
モデル検査にとって、より少ない通信はメモリに存在する重複ノードがより少ないことを意味し、かつ半順序簡約を実行する機会がより多いことをも意味する。やがて分かるように、この手法は、メモリ要件およびハッシュ分散方式の探索により探索される探索空間のサイズを大幅に低減することができる。残念ながら、ノードがもはやスレッド間で均等に分散されないことに起因して、（私達がＡＨＤ−ＢＦＳと呼ぶところの）ＨＤ−ＢＦＳのこの抽象化ベースの実装は、異なるスレッド数に関して極めて脆弱な性能をもたらす。ノードは不均一に分散される傾向があり、スレッドによって作業が極めて混み合うものも欠乏するものも生じる。この挙動は、利用可能な並列性を完全に活用する探索の能力を妨げる。
【００３９】
並列構造化重複検出
本明細書に記述している実施形態によれば、ハッシュ関数を用いて先験的にノードをスレッドへ割り当てる代わりに、スレッドが探索努力を動的に分割できるようにする並列構造化重複検出（ＰＳＤＤ）と呼ばれるフレームワーク等の構造化重複検出技法を用いる並列到達可能性分析が使用される。ＰＳＤＤは、準同形の抽象化を用いて探索グラフ内のノードを探索グラフの抽象的表現におけるノードへマップする。抽象化は、典型的には各探索ノードの状態情報の幾つかを投影することによって作成される多対１マッピングである。探索ノードがマッピングされる抽象ノードは、抽象化されている探索ノードの画像と呼ばれる。抽象グラフは次に、探索グラフにおける一辺により接続される２つの探索ノードの画像であるあらゆる抽象ノードペア間の辺を加えることによって接続される。
【００４０】
探索を実行するために、抽象グラフ内の各ノードは、所定の抽象ノードへマッピングする探索グラフのオープンノードを含む２つ（１つは現行の深さ層のためであり、もう１つは次の層のため）のキューを有する。各抽象ノードは、抽象ノードへマッピングされる、既に拡張されている全ての探索ノードのハッシュテーブルも含む。スレッドは、単一の抽象ノードに関してオープン探索ノードの全てを一度に拡張するためのアクセスを獲得する。このような探索ノードの後続者は、同じ抽象ノードへマップするか、抽象グラフにおける後続者のうちの１つへマップするかの何れかである。抽象ノードおよびその後続者への排他的アクセスを主張することにより、スレッドは抽象ノードから拡張することができ、かつ発生される後続者について、それが排他的アクセスを有するデータ構造のみを用いて即時的な重複検出を実行することができる。私達は、抽象ノードおよびその後続者に対するノードの集合を重複検出スコープまたは単にスコープと呼ぶ。
【００４１】
図１Ａにおける画像１０は、薄い灰色の例示的なグラフ１２と、その上に濃い黒色で描かれた前記グラフの可能な抽象化１４とを示している。この抽象化１４は、ノード１６等のノード４つの集合をグループ化している。抽象グラフにおけるノード２０およびノード２２等の各抽象ノードペア間には辺１８等の辺が存在し、この辺１８に対して、その下にあるグラフには一片で接続されかつその画像が個々の抽象状態に対応するノードペアが存在する。図１Ｂにおける画像５０は、このグラフにおける、各々が灰色のノードによって画定されかつ点線により包囲される２つの重複検出スコープ５２、５４を示している。双方の重複検出スコープは、灰色のノードと、抽象グラフ１４においてその後続の画像へマッピングされる全てのノードとから成る。灰色のノードのうちの任意のノードを拡張する場合、全ての後続ノードは、同じ重複検出スコープ内に存在するノードに対応する。
【００４２】
並列探索を実行するために、異なるスレッドは各々、抽象グラフを用いて、他のスレッドにより使用されているものと重ならない重複検出スコープを位置決めする。これらの互いに素な重複検出スコープは、ノードが拡張されている期間中に通信を要求することなく並行して探索されてもよい。このスキームで、スレッドが同期しなければならない唯一の場合は、複数のスレッドが抽象グラフへのアクセスを同時に要求するときである。抽象グラフへのアクセスを順番に並べるために必要なミューテックスは１つだけであり、抽象グラフに対する作用は迅速になりやすい。
【００４３】
図１Ｂに示されている２つの重複検出スコープは、ノードを何ら共有しないことから互いに素である。
【００４４】
あるスレッドが全てのオープン探索ノードを拡張してその現行抽象ノードへのマッピングを完了すると、スレッドは次に、その重複検出スコープを解放してそのスコープ内の全ての抽象ノードを自由に最獲得されるものとしてマーキングする。次に、スレッドは探索する新しいスコープの獲得を試行することができる。現行深さにおいてオープン探索ノードを有する自由なスコープが存在しなければ、新しいスコープの獲得を試行するスレッドは、別のスレッドが拡張を終了してその抽象ノードを解放するまで待機しなければならない。この待ち時間は、十分に多い互いに素な重複検出スコープを有するより微細な粒状にされた抽象化を用いることによって短縮されることが可能である。実際には、私達は、抽象化が、典型的には待ち時間が取るに足らないものになるような十分な大きさにされ得ることを発見している。
【００４５】
最終的には、現行の深さ層においてオープン探索ノードが使い果たされてくるにつれて、他のスレッドは抽象ノードが自由になるのを待機していることから、アクティブに探索しているスレッドは１つしか存在しなくなる。待機していない最後のスレッドがその重複検出スコープを解放し、かつオープンノードを有する自由なスコープが存在しないことを発見すると、このスレッドは探索を次の深さ層へ進める。これを行うために、各抽象ノードの現行キューと次のキューとがスワップされ、これらの新しい現行層においてオープンノードを有する全ての抽象ノードが自由であるとマーキングされ、待機スレッドが覚醒され、探索が再開される。新しい深さ層がオープン探索ノードを含んでいなければ、探索空間は使い果たされていて、スレッドは終了することができる。
【００４６】
明確さおよびさらなる説明のために、そこで列挙されているように、抽象ノードｙ＝ｐ（ｘ）を状態空間射影関数ｐ（＄）の下のノードｘの画像であるものとし、かつ後続者（ｙ）を抽象状態空間グラフにおけるｙの後続抽象ノードの集合であるものとする。すると、次のような定義および定理が与えられる。
【００４７】
定義１：ノードｘ１およびｘ２の重複検出スコープは、ｘ１の画像の後続者集合が抽象グラフにおけるｘ２の画像の後続者集合から素であれば、即ち、後続者（ｐ（ｘ１））∩後続者（ｐ（ｘ２））＝φであれば、状態空間射影関数ｐ（＄）の下で素である。
【００４８】
定理１：２つのノードは、それらの重複検出スコープが互いに素であれば、共通の後続者ノードを共有することができない。
【００４９】
定理１は、並列グラフ探索において必要とされる同期演算の数を減らすためにてこ入れされることが可能な重要な保証を規定している。具体的には、複数のスレッドが、通信を必要とすることなしに、互いに素な重複検出スコープに相当する、グラフの互いに素な部分を探索することができる。ＨＤ−ＢＦＳとは異なり、ＰＳＤＤにおいて、重複状態が発生するとすぐに検出される。
【００５０】
データ局所性を強化するために、ＰＳＤＤは、発生されかつ格納されるノードの集合を、ＳＤＤの場合のように各抽象ノードにつき１ブロックのｎ個のブロックに分割する。同じｎ番目のブロック内のノードは同じ重複検出スコープを共有することから、定義１および定理１は、個々のノードに対して成立することに加えてｎ個のブロックに一般化される。互いに素な重複検出スコープの概念は、互いに素な重複検出スコープを有するｎ個のブロックを異なるプロセッサへ割り当てることによってグラフ探索を並列化するために使用される。これは、１つのプロセッサが別のプロセッサによって発生される可能性もある後続者ノードを発生することは不可能であることに起因して、複数のプロセッサが互いに同期する必要なしにノードを並行して拡張することを可能にする。
【００５１】
あるプロセッサへノード拡張のためにｎ番目のブロックが割り当てられる場合、このプロセッサには、そのｎ番目のブロックの重複検出スコープにおけるｎ個のブロックの全てに対する排他的アクセスが与えられることに留意されたい。よって、割り当てられるｎ番目のブロックの重複検出スコープはそのプロセッサによって占有されると言うことができる。これは、割り当てられるｎ番目のブロックの後続者を発生する間、そのプロセッサは、アクセスする必要があるｎ個のブロックに関して競合する他のプロセッサについて懸念する必要がないことを意味する。
【００５２】
ＰＳＤＤは、ハッシュ分散方式の探索を凌ぐ優位点を少なくとも２つ有し、即ち１）ＰＳＤＤの場合、新しい重複検出スコープを解放しかつ獲得する際にスレッドは単に抽象グラフへのアクセスを同期するだけでよいことから、スレッド間の同期数は少なくなる場合があり、２）重複の検査は、余分なメモリを用いて重複ノードを格納した後に初めてハッシュテーブルとの照合が可能にされる代わりに、即座に実行されることが可能である。
【００５３】
ＰＳＤＤは、モデル検査へ適用される際には追加的な利点を提供する。即ち、これは、半順序簡約の実行に際して保存的である必要がない。ＨＤ−ＢＦＳは、拡張するスレッドに後続者が割り当てられなかった場合には、後続者ノードが幅優先キューに存在するかどうかの試験へのアクセスを有していなかったことを想起されたい。しかしながら、ＰＳＤＤでは、拡張するスレッドは、その拡張の起点である抽象ノードの重複検出スコープに関して、データ構造体への排他的アクセスを有する。これは、ＰＳＤＤは、それが発生しつつある後続者がＱ  ｐｒｏｖｉｓｏを通過するか同化を試験することができ、よって半順序簡約の実行に際して保存的である必要がないことを意味する。これは、多くのモデルに関して、ＰＳＤＤにＨＤ−ＢＦＳおよびＳｐｉｎのマルチコア深さ優先探索の双方を凌ぐ大きな優位点を与える。
【００５４】
モデル検査のための抽象化
ＰＳＤＤは、空間の局所構造を活用するために状態空間グラフの抽象的表現に依存する。Ｓｐｉｎの場合、探索空間内の各状態は、その実行がモデリングされつつあるプロセスの集合より成る。各プロセスは、カレント状態および遷移集合を有する有限オートマトンによって表現される。私達がＰＳＤＤの実装において用いた抽象化は、任意の状態を所与として、プロセスＩＤの部分集合のプロセスタイプおよびオートマトン状態のみを考察する。例えば、０〜６を付番された７つのプロセスを有する状態について考察されたい。可能な抽象化の１つは、プロセスの１つの部分集合のみ、例えば最初の２つのプロセスＩＤのオートマトン状態のみを考察することである。これは、プロセスＩＤ２〜６を効果的に「投影」し、抽象ノードの遙かに小さい集合をもたらす。次には、有限オートマトンの遷移を用いて、抽象グラフにおける先行者／後続者関係を決定する。ノードとその後続者との間では単一コンポーネントのオートマトンの状態のみが遷移することから、抽象グラフにおける後続者は、プロセスＩＤの、抽象化において除去されていない考え得る全ての単一遷移である。抽象グラフを計算する場合、起きてはならない性質の記述は抽象化によって考察されず、よって、単一コンポーネントのオートマトンのみが遷移を通じて変わることが保証される。効率化のために、私達は探索の間、抽象グラフを必要に応じて緩やかに発生させている。これは、実際に使用されるグラフ部分のみをインスタンス化するという利点を提供する。この緩やかな構成には、グラフの構成を、前処理ステップとして連続して行う代わりに、（例えば、処理デバイスの複数のコアプロセッサ、またはコンピュータの複数のプロセッサまたはネットワークまたはクラスタ内の複数のコンピュータを用いて）探索の実行と並行して行うという追加的な利点もある。
【００５５】
実験結果
本項では、２つの並列幅優先探索方法を評価するために実行した実験セットの結果について述べる。さらに、適用可能であれば、Ｓｐｉｎの内蔵式マルチコア深さ優先探索との比較を行う。私達の実験に用いたマシンは、各々が６個のコアを有する２つの３．３３ＧＨｚ  Ｘｅｏｎ  ５６８０プロセッサと、９６ＧＢのＲＡＭとを有する。
【００５６】
マルチコア深さ優先探索
Ｓｐｉｎは、最新技術のマルチコア深さ優先探索アルゴリズムを含む。このアルゴリズムは、探索を実行する各スレッドをリングに接続する。ノードは、リングを回って１つのスレッドから別のスレッドへ一方向に通されてもよい。よって各スレッドは、ある特定の深さ間隔内に含まれる全てのノードを拡張する働きを担っている。あるノードの後続者が現行スレッドに割り当てられる間隔に含まれない場合、新しく発生される後続者は、共有されるメモリキューを用いてリング沿いの近傍スレッドへ通されなければならない。この近傍スレッドは、次に、キューからノードを受け入れかつこれらの拡張を開始してもよい。この技法を用いて、ＨｏｌｚｍａｎｎおよびＢｏｓｎａｃｋｉは、設定されたベンチマークモデル上の２つのスレッドにおいて１．６倍を超える速力増加、および参照モデル上の２つのスレッドで、調整可能パラメータセットを提供するほぼ完璧な線形速力増加を達成することができた。しかしながら、その結果において、彼らは、この技法が、半順序簡約の実行に際して保存的でなければならないことを示している。よって、半順序簡約が使用される場合、マルチコア深さ優先探索の性能は、ＨＤ−ＢＦＳの場合と同様に、事実上直列探索より悪くなる可能性がある。
【００５７】
以下の実験では、安全性に対する障害を含まないモデルに対するＳｐｉｎのマルチコア深さ優先探索と比較する。障害を有するモデルに対する深さ優先探索との比較は、特性障害が部分最適経路を介して発見されるという理由で行わない。幅優先探索は、最適長さのトレースのみを返すように制約されることから、著しく大量の作業を実行しなければならず、比較が不正にされる。しかしながら、特性障害のないモデルに対しては、全てのアルゴリズムが探索空間を使い果たさなければならず、よって、比較し得る量の探索が行われる。
【００５８】
Ｓｐｉｎは、異なるモデルで探索性能を調整すべく微調整される場合のある多くのパラメータを提供する。私達は、全てのモデルに関する以下のオプションによってマルチコア深さ優先探索をコンパイルした。
‐ＤＦＵＬＬ＿ＴＲＡＩＬ−ＤＳＡＦＥＴＹ−ＤＭＥＭＬＩＭ＝６４０００
【００５９】
個々のモデルについて、デフォルトパラメータセットによる実行後にＳｐｉｎにより推奨された任意の追加パラメータも用いた。
【００６０】
ＰＳＤＤの即時的重複検出の効果をＨＤ−ＢＦＳの遅延される重複検出と比較するために、２つのアルゴリズムのメモリ使用量を比較した。私達の仮説は、ＨＤ−ＢＦＳには、受け入れるスレッドによってハッシュテーブルとの照合による検査を行えるまでに、通信の間に重複探索ノードを格納するためにより多くのメモリが必要になる、というものであった。この実験用に選択するモデルは、１０人の哲学者による古典的な食事する哲学者の問題のモデルである。このモデルは、古典的なデッドロック状況を回避するように構成され、よって、探索空間全体が探索アルゴリズムによって使い果たされる。これは、エラーを含むモデルを探索する際に遭遇される場合がある均衡破りの効果を取り除く。また、このモデルでは、半順序簡約に関わらず全てのアルゴリズムによって同数の状態が拡張され、よって、メモリ使用量の如何なる差異も、必ず重複ノードまたはその欠如の即時的検出に帰属される、と結論することができる。
【００６１】
図２は、１０人の哲学者問題に関してＳｐｉｎにより報告されているメモリ使用量を示す。ｘ軸は、スレッドの番号１−１２を示し、ｙ軸は、探索を完了するために使用されたギガバイト数を示す。各線は、各スレッド計数における５回の実行の平均を示し、エラーバーは、その平均の９５％信頼区間を示す。幅優先探索は１つのスレッドしか使用しないが、私達は、比較を容易にするために、その単一スレッドの性能のラインをｘ軸に渡って拡張している。
【００６２】
この図から、幅優先探索およびＰＳＤＤは３ギガバイト未満のメモリを用いたことが分かる。ＰＳＤＤのメモリ使用量は、探索を実行したスレッド数においてほぼ一定のままであった。しかしながら、ＨＤ−ＢＦＳは、このモデルに対して、２つ以上のスレッドを用いて実行した場合に著しく多いメモリを必要とした。ＨＤ−ＢＦＳが必要としたメモリ量は、スレッド数が追加されるにつれて急激に増大し、６個のスレッドで平らになった。先に言及したように、これは、ＨＤ−ＢＦＳには、通信の間、重複ノードを即時検出する代わりにメモリへ格納する必要があったという事実に帰属されることが可能である。スレッド間通信における簡約に起因して、ＡＨＤ−ＢＦＳが用いたメモリはＨＤ−ＢＦＳより少ないが、３つ以上のスレッドではやはり幅優先探索およびＰＳＤＤより多いメモリを必要とした。
【００６３】
ここに示した結果以外にも、私達は、実験で用いた全てのモデルに対して、ＨＤ−ＢＦＳがより多いメモリを必要としたことを観察した。おそらくは、これは重複ノードに起因するものであるが、他のモデルでは、次に理解することとなるように、保存的な半順序簡約も１つの要因である場合がある。
【００６４】
保存的な半順序簡約の効果
ハッシュ分散方式の探索およびＳｐｉｎのマルチコア深さ優先探索が保存的な半順序簡約に起因して被る性能劣化を評価するために、オペレーティングシステム「Ｐｌａｎ  ９  ｆｒｏｍ  Ｂｅｌ  Ｌａｂｓ」からのセマフォ実装モデルを用いて実験を実行した。このモデルのための状態空間サイズは、半順序簡約を実行できるかどうかに依存して約３までの係数で変更が可能である。このモデルが特に興味深い理由は、先の実験に使用された哲学者モデルとは異なり、セマフォモデルが実世界のモデル検査問題から採用されたことにもある。
【００６５】
図３Ａおよび図３Ｂは、セマフォを目指して競う４つの別々のプロセスを有するセマフォモデルに対して、ＰＳＤＤ、ＨＤ−ＢＦＳ、幅優先探索およびＳｐｉｎのマルチコア深さ優先探索により拡張された状態数およびメモリ量を示す。プロットのフォーマットは、図２のそれと同じである。このモデルの配位空間を使い果たすために拡張されたノード数は幅優先探索が最も少なく、かつ使用されたメモリも幅優先探索が最も少なかったことが分かる。ＰＳＤＤが拡張したノード数は、幅優先探索より僅かに多かった。ＰＳＤＤと幅優先探索とで拡張したノード数に差が出た理由は、これらがノードを同じ深さ層内でも異なる順序で拡張し得ることにある。均衡破りのこの差は、半順序簡約に僅かに影響を与える可能性があり、拡張されるノード数が僅かに増す、または減ることになる。
【００６６】
１つのスレッドでは、ＨＤ−ＢＦＳは、他の何れのアルゴリズムともほぼ同数のノードを拡張し、かつほぼ同量のメモリを使用した。しかしながら、スレッド数が増すにつれて、ＨＤ−ＢＦＳが必要とする拡張数およびメモリは急激に増大し、約５個のスレッドにおいて平らになってＰＳＤＤおよび幅優先探索が必要とした拡張数の２倍以上に達した。急な増加の理由は、より多くのスレッド間でノードが分割されるにつれて、ＨＤ−ＢＦＳがより多くの通信を必要としたことにある。ノードが通信されるたびに、探索は、半順序簡約を実行できないものと保存的に想定し、よって、他の２つのアルゴリズムによって遂行されていない多くの冗長経路が探索された。またプロットは、これと同じ効果がＳｐｉｎのマルチコア深さ優先探索に発生することも示している。深さ優先探索はＨＤ−ＢＦＳと同様に保存的な半順序簡約によって害され、２つ以上のスレッドでは、ＰＳＤＤおよび幅優先探索より遙かに多い状態を拡張した。またＨＤ−ＢＦＳは、１２個のスレッドで実行された際にはほぼ８０ＧＢのメモリを必要とした。
【００６７】
全体性能
次に、４つのモデルに対する異なるアルゴリズムの並列速力増加および壁時計時間に関わる全体性能を示す。共に抽象化を必要とするＰＳＤＤおよびＡＨＤ−ＢＦＳについては、投影において実験的に使用されるプロセッサＩＤの一定のサブセットを選ぶ。各モデルに対して、小値のｎ（７まで）による手動選択のプロセスＩＤシーケンスの小集合０−ｎおよび１−ｎを用いてこれらのアルゴリズムを実行した。各モデルで最良の性能をもたらしたシーケンスが、次の比較で使用された。私達は、このような単純な抽象化を用いた場合の次の結果におけるＰＳＤＤにより示された優れた性能は、ＰＳＤＤに対する優れた抽象化の発見が困難なタスクではないことの強力な証拠であると考える。
【００６８】
図４Ａ〜図４Ｄは並列速力増加を示し、図５Ａ〜図５Ｄは、各アルゴリズムが１〜１２個のスレッドを用いる４つの異なるモデルの各々の探索に必要とした合計壁時計時間を示す。先のプロットの場合と同様に、各ラインは５回の実行の平均性能を示し、エラーバーは９５％信頼区間を示す。ｘ軸は使用されたスレッド数１〜１２を示し、かつこの場合も、各プロットのｘ軸に幅優先探索の性能が描かれている。但し、幅優先探索は線形的にしか行われていない。使用されたモデルは、哲学者が１０人でデッドロックのない食事する哲学者の問題、哲学者が１５人で、４２ステップで到達可能なデッドロックを有する食事する哲学者の問題、４プロセスが競合するＰｌａｎ  ９セマフォ、およびＳｐｉｎが幅優先探索の場合に完全性を保全しないと訴えることからランデブーを回避するように修正された、７２ステップで到達可能なライブロックを含むＧＮＵ  ｉ−プロトコルモデルの０レベル抽象化であった。Ｓｐｉｎのマルチコア深さ優先探索アルゴリズムは１５人の哲学者モデルまたはｉ−プロトコルモデルについて示されていないが、これは、両者が、深さ優先探索が最短の反例を発見せず、よって比較可能な量の探索を実行しないエラーを示すためである。
【００６９】
図４Ａ〜図４Ｄは、ｘ軸上に与えられたスレッド数に関して必要とされる時間で割った単一スレッド時間として計算された、ＰＳＤＤ、ＨＤ−ＢＦＳ、ＡＨＤ−ＢＦＳおよび深さ優先探索の並列速力増加を示している。速力増加は、そのアルゴリズムが並列性の増加に伴ってどの程度良好に性能を発揮するかを示すことから、おそらくは並列アルゴリズムを比較する場合の最も重要な測定基準の１つである。各々の速力増加プロットにおける対角線は、典型的には実際に達成できない完璧な線形的速力増加を示しているが、有益な参照点を提供することができる。アルゴリズムの性能が対角線に近いほど、その性能は完璧な線形的速力増加に近い。これらの図からは、全てのモデルにおいて、ＰＳＤＤが線形的速力増加に最も近づいていることが分かる。実際に、ＰＳＤＤは、これらのモデルにおいて常に他の並列アルゴリズムより優れた速力増加をもたらした。
【００７０】
図５Ａ〜図５Ｄは、４つのモデルにおける各アルゴリズムの壁時計時間、即ち実際の経過時間を単位秒で示している。この図から、４つ以上のスレッドでＰＳＤＤは、これらのモデルの全てを他のアルゴリズムより迅速に解くことができたことが分かる。「実世界」の２つのモデル、即ちセマフォモデルおよびｉ−プロトコルモデルでは、ＨＤ−ＢＦＳは事実上、２つ以上のスレッドを使用する場合に直列幅優先探索より時間を要した。これは、半順序簡約のその保存的使用によって、遙かに大きいグラフを探索することになったためである。Ｓｐｉｎのマルチコア深さ優先探索も、この同じ問題によって害されたが、並列性をより良く利用しているように思われ、よって最終的にこれは、５つ以上のスレッドで直列幅優先探索より速かった。最後に、ＡＨＤ−ＢＦＳは、異なるスレッド数に渡って極めて不安定な性能をもたらすことが分かる。私達はこれを、均一なノード分散ではなく抽象化を用いることによる、スレッド間の不良な負荷バランシングのせいであるとする。
【００７１】
外部メモリＰＳＤＤ
結果は、ＰＳＤＤがモデル検査問題に対して必要とするメモリはハッシュ分散方式の探索より少なく、かつＰＳＤＤは、ハッシュ分散方式の探索およびＳｐｉｎのマルチコア深さ優先探索の双方より優れた並列速力増加および速い探索時間をもたらすことを実証している。またＰＳＤＤは、ハードディスク等の外部記憶装置がコアメモリを補助するために使用される外部メモリ探索アルゴリズムとしても作用することができる。外部メモリＰＳＤＤ（または略して単に外部ＰＳＤＤ）はＰＳＤＤとほぼ同じ働きをするが、抽象ノードが探索スレッドのうちの１つによって使用中でなければ、外部記憶装置へと押しやられることが可能である。これは、探索アルゴリズムのメモリ使用量を、探索グラフ全体のメモリ使用量から、ちょうど各探索スレッドにより獲得される重複検出スコープのサイズにまで減らす。
【００７２】
予備実験として、私達は外部ＰＳＤＤをＳｐｉｎに実装し、これをデッドロックのない１０人の哲学者モデルを解くために用いた。私達はこれを、ＲＡＩＤ  ０アレイに構成された８個のコアと４つのディスクとを有するマシン上で実行した。この実験では、標準ＰＳＤＤが１つのスレッドでモデルを探索するために平均２３３秒を用いたのに対して、外部ＰＳＤＤは平均１，７６４秒を要した（どちらの時間も変動はほとんどなかった）。８個全てのコアを用いる場合、ＰＳＤＤの探索時間は平均３４秒まで減ったが、外部ＰＳＤＤは、単一のディスクコントローラ上でＩ／Ｏ制御されることから並列性による恩恵を受けなかった。実験に使用されたマシンは単一のディスクコントローラを有し、よって、８個全てのコアを用いる場合、外部ＰＳＤＤは並列性による恩恵を受けなかった。しかしながら、複数のディスクコントローラを使用すれば、外部ＰＳＤＤは、Ｉ／Ｏ並列化を使用する場合に性能向上を示す。しかしながら、外部ＰＳＤＤの主たる利点は、メモリ使用量を標準ＰＳＤＤによる２．５ギガバイトから単一スレッドを用いる場合の約０．５ギガバイトまで減らすことができることにある。これは、探索によるメモリ使用量の５００％低減である。多くの場合、メモリ要件のこの低減は探索時間の短縮より遙かに重要であり、これは、探索の完了をより長く待機することはより用意であるが、メモリをさらに追加することは不可能である場合があることに起因する。これを理由に、メモリ要件はしばしば、モデルがモデルチェッカによって検認され得るかどうかを決定する限定因子となる。
【００７３】
さらなる論考
予備実験では、外部メモリＰＳＤＤが探索のメモリ要件を大幅に低減できることを目にした。しかしながら、外部メモリＰＳＤＤに関する不利益は、ハードディスク記憶装置にアクセスしなければならないことから直列探索より遙かに長い時間がかかり得ることにある。私達は、外部ＰＳＤＤの性能が、Ｉ／Ｏ並列化を活用すべく複数のＲＡＩＤアレイを用いることによって大幅に高められ得るものと推測している。
【００７４】
現行の実装では、外部ＰＳＤＤは、各スレッドがコアＲＡＭにその固有の重複検出スコープを保有しなければならないことから、２つ以上のスレッドによって実行されると遙かに多くのメモリを用いる。８個のコアを用いる場合、外部ＰＳＤＤは、ハードディスク記憶装置を全く用いない標準ＰＳＤＤとほぼ同量のメモリを用いた。この問題を修正するために、重複検出スコープのサイズを単に単一の抽象ノードへマップされる探索状態であるように縮小すべく、エッジパーティショニングと呼ばれる新しい技法が開発されている。エッジパーティショニングは、外部ＰＳＤＤが、依然として極小メモリフットプリントを有しながら複数のスレッドを用いることを有効化することができる。
【００７５】
これまで、選択される抽象化がＰＳＤＤの性能にどのように影響するかについては、詳しく論じていない。私達の実験では、抽象化は、経験的評価により、各モデル上の小さい抽象化集合を用いて選択された。しかしながら、抽象グラフが小さすぎるか、あまりに強く接続されていれば、ＰＳＤＤは、並列探索を行うに足る数の互いに素なスコープを発見できなくなることから害を受ける可能性がある。私達は、実験に使用された単純な抽象化が十分な量の並列性を提供したことを発見している。しかしながら、最近の研究は、ＰＳＤＤが、探索時間中に抽象化を変更する動的な探索空間パーティショニングから大きな恩恵を受け得ることを示している。動的なパーティショニングを用いることにより、アルゴリズムは、より平衡されている抽象化を選択することができると思われ、外部探索のピークメモリ要件は減りかつ接続が少なくなり、並行性を活用するその能力は向上する。
【００７６】
デッドロックおよび安全性障害に対して最短のトレースを発見するために、Ｓｐｉｎモデルチェッカにおいて幅優先探索を並列化するための２つの技法を比較した。結果は、並列構造化重複検出が、より優れた並列速力増加をもたらしかつ必要とするメモリが著しく少ないことに起因して、ハードディスク記憶装置およびＳｐｉｎのマルチコア深さ優先探索の双方を凌ぐ利点を提供することを示した。また私達は、外部ＰＳＤＤが、ハードディスク等の安価な二次記憶装置を利用することによってモデル検査のメモリ要件をさらにもっと減らせることも実証している。ＣＰＵ性能は実効クロック速度より並列性への依存度が高いことから、ここに提示される技法は、モデル検査が最新ハードウェアの全ケイパビリティをより良く活用することを有効化する。
【００７７】
半順序簡約は、モデル検査において状態空間爆発の問題に取り組むために広く使用される技法である。しかしながら、これを並列化技法と組み合わせることは、これまで難題であった。ここにおいて、私達は、ＰＳＤＤが並列到達可能性分析に有効であるだけでなく、Ｓｐｉｎの半順序簡約アルゴリズムの全能力をも保全することを示す。
【００７８】
以上、並列構造化重複検出（ＰＳＤＤ）を用いてモデル検査を行う手法を開示した。本手法は、探索グラフの局所構造を、重複検出における格納されたノードへのアクセスを同期するためのオーバーヘッドを著しく低減する方法で活用するための互いに素な重複検出スコープの概念をてこ入れする。またこれは、半順序簡約技法が並列到達可能性分析の間に可能な限り極限まで実装かつ／または保全されることも可能にする。
【００７９】
本明細書に記述している概念は、様々な計算システム上で実装されてもよい。先に述べたように、モデルチェッカは、様々な活動領域における様々な環境で実装されてもよい。したがって、本明細書に記述している実施形態も同様に、広範に実装されてもよい。このような計算システム１００の一例は、図６に示されていて、本システムは、コンポーネントの中でもとりわけ、モニタ１０２と、キーボード１０４と、計算セクション１０６と、ディスク１０８等の外部メモリとを含む。計算セクション１０６は、ＣＰＵまたは他の計算コンポーネント１１０等のコンポーネントと、ＲＡＭ等の内部メモリ１１２とを含む。当然ながら、計算セクション１０６が他のコンポーネントを含んでもよく、かつここに示されているもの以外の構成で設計されてもよいことは理解されるべきである。例えば、計算コンポーネント１１０は、シングルコアプロセッサを含んでも、マルチコアプロセッサを含んでもよい。実際に、先に述べたプロセッサ例は、各々が６つのコアプロセッサを有する２つのプロセッサを含む。この点に関連して、例えば、各コアプロセッサは、並列処理を達成するために先に記述した単一の互いに素なスコープを処理する。さらに、本明細書に記述している実施形態を実装するために使用されるプロセッサは、ネットワーク構成における異なる計算セクションに分散されてもよい。先に述べた任意の構成において、プロセッサは、少なくとも１つの形式で、後述する方法１００を含む本明細書に記述している実施形態により企図される方法を達成すべくコードまたは命令を実行するようにプログラムされてもよい。外部メモリ１０８は、計算セクション１０６の外側に存在することから外部的であるとされ、よって結果的にＩ／Ｏ動作は内部メモリ１１２に比べて遙かに遅くなる。またディスク１０８は、任意選択のディスク１１４によって示されているように計算セクション１０６によって物理的に封入されても、されなくてもよい。例えば、任意選択のディスク１１４は、ネットワークドライブまたは他のタイプの代替メモリデバイスである場合もある。記述しているこれらのメモリデバイス（またはその他）が、本明細書に記述しているコンピュータ実装方法を実行できるように、計算セクション１０６および計算コンポーネント１１０（例えば、多コアまたは多プロセッサ構造を含む）等の処理および／または計算コンポーネントと相互作用するように構成されかつ機能してもよいことは認識されるべきである。この点に関連して、メモリまたは記憶デバイスは入力／出力効率を高めるように構成されてもよく、かつ／または例えばスケーラビリティを高めかつ他の優位点を達成するために互いに（外部記憶補足ＲＡＭデバイス等）補足し合ってもよい。この点に関連して、メモリデバイスは、ある形式において、機械読取り可能データおよび／または実行用命令を格納するための非一時的なコンピュータ読取り可能媒体として機能する。また、メモリまたは記憶デバイスは、固体形式または磁気ディスク構成を含む様々な物理的形式を取る可能性もある。
【００８０】
図７は、本出願のＰＳＤＤ概念を用いるモデル検査のためのプロセスを示すフローチャート１００を記したものである。図７に関連して記述される方法は単なる例示であり、よってある形式では、先に図６に関連して述べたような計算システム上で実装されてもよい。ステップ１２０では、モデルチェッカが（例えば、キーボードからのユーザコマンドによって、または計算セクションによって自動的に）開始される。モデルチェッカは、少なくとも１つの形式において、共有および／または分散メモリおよび並列計算環境において実装される。先に述べたように、様々なモデルチェッカのうちの何れが使用されてもよいが、本明細書において使用される例は周知のＳｐｉｎモデルチェッカである。モデルチェッカは、記述している様々な記憶デバイスまたは他の記憶デバイスにおける計算システム上へ、本明細書に記述している実施形態による効果的な実装および／またはモデルチェッカの実行を容易にする任意の方法で格納され得ることを理解されたい。様々なモデルチェッカの実装は、モデルチェッカおよび検査されているモデルの関数として変わってもよい。例えば、Ｓｐｉｎモデルチェッカの場合、その主たる実行ファイルは、システムまたは検査されているモデルに固有の別のモデルチェッカのＣソースコードを生成する自動コード生成器であり、この自動生成されたモデルチェッカがコンパイルされてバイナリ実行ファイルにされると、これはバグの発見またはモデルまたはシステムの正当性の証明の何れかを目的とするモデル検査タスクを実行すべく呼び出されることが可能である。本明細書に記述している実施形態の実装は、Ｓｐｉｎの自動コード生成器を、ＰＳＤＤを実装する追加的Ｃコードを発するように修正する。したがって、Ｓｐｉｎ（例えば、自動コード生成器が「Ｓｐｉｎ」であるとされれば）の開始と（Ｓｐｉｎにより生成されるＣソースコードの適切なコンパイルの後の）実際のバイナリコードとの間には、モデルまたはシステムの検査に使用される任意選択のコンパイルが存在してもよい。他のモデルチェッカは、この「自動コード生成」手法を用いる必要がある場合も、ない場合もある。
【００８１】
ステップ１２２では、抽象状態空間グラフをシステム（例えば、検証されるべきソフトウェアシステムまたはモデル）の抽象的表現として形成するために状態空間抽象化が作り出される。例えば、先により詳しく述べたように、抽象化は、任意の状態を所与として、プロセスの一定のサブセットのプロセスタイプおよびオートマトン状態しか考慮しなくてもよい。ある形式では、グラフは、システムを表現する抽象ノード（および／または辺）を含む。抽象状態空間グラフを基礎として、原初の状態空間グラフは、探索プロセスの間にタイミングを計るためにある期間は互いに干渉しない複数の独立した領域に分割される。当然ながら、ある形式では、計算セクション１０６（任意の計算コンポーネント１１０および適切なメモリを含む）がこのタスクを達成する。ステップ１２４では、システム（例えば、検証されるべきソフトウェアシステムまたはモデル）の探索または検証が、構造化重複検出技法（例えば、並列構造化重複検出）を用いる並列到達可能性分析を採用して着手される。この点に関連して、並列構造化重複検出（ＰＳＤＤ）は、先に述べたように実装されても、当業者には明らかとなる他の方法で実装されてもよい。少なくとも１つの形式において、並列構造化重複検出技法は、その間は独立した領域が独立したものとして保全されることが可能な時間量を最大化するために、複数の処理ユニットに渡って探索仕事量を分散する。この時間の間、少なくとも１つの形式において、個々の処理ユニットまたはコアプロセッサは状態空間グラフの部分を並行して探索しかつ検証し、かつ必要であれば適切な記憶エリアを用いてもよい。結論に達するまでノードを拡張することを含む探索または検証が達成されるにつれて、無効な挙動または状態の決定が下される（ステップ１２６）。この点に関連して、ある形式では、無効な挙動または状態を導いたシステム遷移のシーケンスが決定されてもよい。ある形式では、ユーザは、無効な挙動または状態を導いたシステム遷移のシーケンスを、モニタ１０２を用いるものを含む任意の様々な既知技術を介して通知される。当然ながら、無効な挙動または状態が発見されなければ、システムの正当性が検証または証明される。これもまた、既知の技術を介して（例えば、モニタ１０２を介して）ユーザに通信されてもよい。
【図１Ａ】
2013239163.tif 000003
【図２】
2013239163.tif 000004
【図３Ａ】
2013239163.tif 000005
【図３Ｂ】
2013239163.tif 000006
【図４Ａ】
2013239163.tif 000007
【図４Ｂ】
2013239163.tif 000008
【図４Ｃ】
2013239163.tif 000009
【図４Ｄ】
2013239163.tif 000010
【図５Ａ】
2013239163.tif 000011
【図５Ｂ】
2013239163.tif 000012
【図５Ｃ】
2013239163.tif 000013
【図５Ｄ】
2013239163.tif 000014
【図６】
2013239163.tif 000015
【図７】
2013239163.tif 000016
【図１Ｂ】
2013239163.tif 000017