JP6270765B2 - 並列シミュレーション装置 - Google Patents

並列シミュレーション装置 Download PDF

Info

Publication number
JP6270765B2
JP6270765B2 JP2015064430A JP2015064430A JP6270765B2 JP 6270765 B2 JP6270765 B2 JP 6270765B2 JP 2015064430 A JP2015064430 A JP 2015064430A JP 2015064430 A JP2015064430 A JP 2015064430A JP 6270765 B2 JP6270765 B2 JP 6270765B2
Authority
JP
Japan
Prior art keywords
parallel
trial
random number
unit
execution unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2015064430A
Other languages
English (en)
Other versions
JP2016184307A (ja
Inventor
修介 渡部
修介 渡部
尾崎 敦夫
敦夫 尾崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to JP2015064430A priority Critical patent/JP6270765B2/ja
Publication of JP2016184307A publication Critical patent/JP2016184307A/ja
Application granted granted Critical
Publication of JP6270765B2 publication Critical patent/JP6270765B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Description

本発明は、並列処理によるモンテカルロシミュレーションを実行する並列シミュレーション装置に関するものである。
モンテカルロシミュレーションは、評価対象となる事象の確率的な発生頻度等を見積るために、乱数を用いた多数回のシミュレーション(以降、試行と称す。)を繰り返し実行して全試行の実行結果を統計的に処理することで評価を行う手法である。モンテカルロシミュレーションによる見積りの精度は大数の法則に従うため、試行回数を多くすればするほど、より良い精度の見積りを得ることができる。そのため、モンテカルロシミュレーションでは、実行可能な限られた時間内においてできるだけ多くの試行を実行するための実行速度の高速化が求められる。
このような背景に対し、複数の計算機や、CPUコアなどの計算機中の複数のプロセッサや、あるいはこれらの組合せによる複数の計算資源を用いた並列処理によるモンテカルロシミュレーションの高速化が検討されている。例えば1000回の試行を実行するにあたり、4つのCPUコアを持つ計算機を用い4並列でモンテカルロシミュレーションを実行したとすると、各CPUコアは1000/4すなわち250試行を分担して並列に実行することで、1つの計算資源を用いた場合に比べて最大で4倍の高速化を実現することができる。このような複数の計算資源による並列処理を用いたモンテカルロシミュレーションでは、乱数生成処理が計算資源に分散するため、次に述べるような2つの実用上の問題がある。
まず1つ目の問題は、試行の実行結果の確認や、あるいは新たな条件で試行を実行した場合の影響を検証するために、試行の実行結果の再現性を確保できなければならないという問題である。再現性を確保するためには、試行の実行において使われた各種計算条件を全て再現できる必要があるため、各試行で利用された乱数列も再現できることが求められる。再現性のある乱数列の取得方法として、一般的には、線形合同法やメルセンヌ・ツイスタ等に代表される、同一のシード値から常に同一の乱数列が生成される疑似乱数生成アルゴリズムが利用される。しかし、これらの疑似乱数生成アルゴリズムは逐次的に乱数を発生させるため、乱数生成処理が複数の計算資源において並列に実行される場合は、そのままでは再現性のある乱数列を取得することができない。
次に2つ目の問題は、各試行が利用する乱数列に相関があると、多数回の試行の実行結果にバイアスがかかるため、モンテカルロシミュレーションの結果の精度が悪化するという問題である。そのため、各試行で相関の小さい乱数列が生成できることが技術的な課題となる。
そこで、これらの対策として、従来、例えば特許文献1に示すような並列処理手法があった。この並列処理手法は、初回の乱数生成にシード値を基に状態変数を計算し、次にその状態変数を基に乱数を生成する。初回以降の乱数生成は、前回の乱数生成で計算した状態変数を基に状態変数を更新し、更新された状態変数を基に新たな乱数を生成する。このような処理の流れは、メルセンヌ・ツイスタ等の疑似乱数生成アルゴリズムを一般的に示したものであり、また線形合同法の場合は、状態変数を生成された乱数そのものに置き換えることで、同じ枠組みとして考えることができる。なお、特許文献1では状態変数の更新処理をスキップ処理と呼ぶが、本発明では更新処理と称す。
特許文献1の方式は、同一のシード値から常に同一の乱数列が生成される疑似乱数生成アルゴリズムの状態変数の更新処理と保存処理を、並列に実行される試行の処理から排他的にアクセスする方式である。特許文献1の方式では、任意の試行を再現するためには、使用したシード値、当該試行の番号n、更新処理に使用した1回の試行の実行に必要な乱数の個数、の3つの値を保存しておくことで、各試行で利用された乱数列を再現することが可能である。また、特許文献1の方式では、同じシード値から生成された乱数列を試行毎に分割して利用するが、例えば、メルセンヌ・ツイスタでは生成される乱数は623次元に均等分布し、また(2^19937)−1という非常に長い周期を持つことが証明されているため、このような疑似乱数生成アルゴリズムを特許文献1の方式に組合せることで、各試行が使用する乱数列の相関を小さくすることが可能である。
特開2012−14591号公報
上記特許文献1の方式では、シードの値、各試行の番号n、1回の試行の実行に必要な乱数の個数の3つの値を保存することで、各試行が実行した際に利用した乱数列を再現することが可能である。しかし、この3つの値のうち、1回の試行の実行に必要な乱数の個数は、試行実行前に見積った値であり、シミュレーションの対象によっては事前に見積ることが困難な場合がある。例えば、敵・味方の2サイドが戦闘を行うようなシナリオにおいて味方側の作戦評価等に利用する防衛作戦評価用モンテカルロシミュレーションでは、ある部隊が他方の部隊を攻撃し破壊できるか否かが乱数を用いて模擬される。もし、ある時点で、ある部隊が破壊された場合、その部隊の攻撃の模擬はそれ以降実行されない。このようなモンテカルロシミュレーションでは、試行毎に、部隊が破壊された時刻や、破壊されずに戦闘を行った時刻が異なるため、早い時刻で部隊が破壊された試行では使用された乱数が少なく、また、破壊されずに戦闘を継続した試行では使用された乱数が多くなる。このように、試行の実行の途中の状況によって利用する乱数の個数が変化するようなモンテカルロシミュレーションでは、事前に1回の試行の実行に必要な乱数の個数を見積ることは困難という課題があった。
また、特許文献1の方式では、並列に試行を実行する各スレッドが乱数生成を行うが、各スレッドの乱数生成の初期値となる状態変数を得るために試行の実行開始前にグローバル記憶部に対して排他アクセスを行う。複数のスレッドが同時にグローバル記憶部にアクセスした場合は、後からアクセスしたスレッドの実行が、状態変数の更新を行う処理時間と、排他ロックの処理時間を足した分だけ待たされる。一般的に、状態変数の更新を行う処理時間は試行の処理時間に対して非常に小さいと考えられるが、排他ロックの処理時間は、例えば多数の計算機をネットワークで接続したような大規模並列計算機システムの場合等では状態変数の更新処理時間よりも大きくなることが考えられる。このような並列化できない処理が性能に与える影響は、一般的に次式(1)に示す並列処理におけるアムダールの法則として知られており、全体の実行時間に対して並列化できない処理の割合によって、並列数(特許文献1の方式ではスレッド数)を増やしても高速化倍率が上がらないことが知られている。
Figure 0006270765

S(N):並列数Nの場合の高速化倍率
P :全体の実行時間に対して並列化可能な処理の割合
式(1)において(1−P)の項が並列化できない処理の割合である。並列化できない処理の割合が1.0%である場合、並列数Nをいくら大きくしても高速化倍率S(N)は100倍を超えない。このように、特許文献1の方式のような並列処理中に排他アクセスがあるようなシステムでは、並列数を増やしても高い高速化効果を得ることが難しいという課題があった。
この発明は上記のような課題を解決するためになされたもので、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無い並列シミュレーション装置を得ることを目的とする。
この発明に係る並列シミュレーション装置は、それぞれが並列処理によるモンテカルロシミュレーションの試行を実行する複数の並列試行実行部を備えた並列シミュレーション装置であって、複数の並列試行実行部は、それぞれ、自身の試行を実行する試行実行部と、複数の並列試行実行部に共通のシード値を用いて、初回の乱数生成における状態変数の更新回数を並列試行実行部毎に付与された並列番号と同数に決定し、初回以降の乱数生成における状態変数の更新回数を複数の並列試行実行部の個数である並列数と同数に決定する並列乱数生成部とを備え、並列番号は、0から始まり前記並列数から1を減じた値までの連番であり、試行実行部は、並列乱数生成部で生成された乱数を用いて前記試行を行うようにしたものである。
この発明の並列シミュレーション装置は、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無いという効果を得ることができる。
この発明の実施の形態1による並列シミュレーション装置を示す構成図である。 この発明の実施の形態1による並列シミュレーション装置のモンテカルロシミュレーションの流れを示すフローチャートである。 この発明の実施の形態1による並列シミュレーション装置の各並列試行実行部の処理の流れを示すフローチャートである。 この発明の実施の形態1による並列シミュレーション装置の並列乱数生成部における乱数生成処理の流れを示すフローチャートである。 この発明の実施の形態2による並列シミュレーション装置の過去に実行した試行の再現実行処理の流れを示すフローチャートである。 この発明の実施の形態2による並列シミュレーション装置の並列乱数生成部における乱数生成処理を示すフローチャートである。 この発明の実施の形態1及び実施の形態2による並列シミュレーション装置の効果を示す説明図である。 図7のデータをグラフ化して示す説明図である。
実施の形態1.
図1は、この発明の実施の形態1による並列シミュレーション装置を示す構成図である。
図1に示す並列シミュレーション装置は、全体制御部1と複数の並列試行実行部2−1〜2−nを備える。全体制御部1は、モンテカルロシミュレーション全体の実行制御を行う制御部である。並列試行実行部2−1〜2−nは、モンテカルロシミュレーションの各試行を並列に実行する処理部であり、モンテカルロシミュレーションを実行する計算資源の数に応じて用意され、図1ではn個用意されている例を示す。並列試行実行部2−1〜2−nは、それぞれ並列乱数生成部3と試行実行部4とを備えている。並列乱数生成部3は、全体制御部1によって並列試行実行部2−1〜2−nに実行が割り当てられた試行で利用する乱数を生成するための処理部である。試行実行部4は、全体制御部1によって並列試行実行部2−1〜2−nに実行が割り当てられた試行を実行するための処理部である。
並列乱数生成部3は、並列数保存部5、並列番号保存部6、シード値保存部7、状態変数更新部8、乱数生成部9、乱数生成回数保存部10を備えている。なお、図1では、これら並列数保存部5〜乱数生成回数保存部10の構成を並列試行実行部2−1のみ示しているが、他の並列試行実行部2−2〜2−nにおいても同様に備えているものとする。並列数保存部5は、全体の並列試行実行部2−1〜2−nの個数である並列数を保存する記憶部である。並列番号保存部6は、全体制御部1が各並列試行実行部2−1〜2−nに割り当てた番号のうち、自身の並列番号を識別値として保存する記憶部である。シード値保存部7は、全体制御部1が全ての並列試行実行部2−1〜2−nに同じ値として割り当てたシード値を保存する記憶部である。状態変数更新部8は、疑似乱数生成アルゴリズムにおける状態変数の更新を行う処理部である。乱数生成部9は、状態変数に基づいて乱数を生成する処理部である。乱数生成回数保存部10は、その並列乱数生成部3において、乱数生成が行われた回数をカウントし記憶するための記憶部である。
次に、実施の形態1の並列シミュレーション装置の動作について説明する。
図2は、並列シミュレーション装置が行うモンテカルロシミュレーションの流れを示すフローチャートである。
モンテカルロシミュレーションの実行が開始されると、全体制御部1は、ステップST1において、ユーザによって設定された試行回数と、利用する計算資源による並列数と、乱数生成の初期値となるシード値を取得する。ここで、シード値は、ユーザが設定した値を利用するか、または、全体制御部1が、例えば日付等を基に自動的に生成した値を利用することができる。
次に、ステップST2において、利用する計算資源に割当てられた並列試行実行部2−1〜2−nに対し、全体の並列数と、それぞれの並列試行実行部2−1〜2−nに割り振られた並列番号と、シード値を設定する。ここで、並列番号は、0から始まる{並列数−1}までの整数値で、各並列試行実行部2−1〜2−nに対して連番で割り振られた番号である。並列試行実行部2−1〜2−nに設定された値は、並列乱数生成部3において、並列数保存部5に並列数が保存され、並列番号保存部6に自身の並列番号が保存され、シード値保存部7にシード値が保存される。
次に、ステップST3において、試行回数ループ処理が開始される。ステップST3のループ処理の終了条件は、全ての未実行の試行が実行するまでである。
次に、ステップST3のループ処理中のステップST4において、未実行の試行の1つが試行を実行していない並列試行実行部2−1〜2−nのうちの1つに対して割り振られる。ステップST3のループ処理の初回のステップST4では、全ての並列試行実行部2−1〜2−nが試行を実行していないため、全ての並列試行実行部2−1〜2−nに試行が割当てられ並列に実行される。
次に、ステップST3のループ処理中のステップST5において、何れか1つの並列試行実行部2−1〜2−nに割り当てた試行が終了するまで待つ処理が行われる。何れか1つの並列試行実行部2−1〜2−nの試行が終了した場合、ステップST3のループ処理によってループの終了条件の判定が行われ、未実行の試行が残っていた場合には、終了条件の判定が偽となり、ステップST4に処理が進み、未実行の試行が、試行の終了した並列試行実行部2−1〜2−nに対して割り当てられ実行される。ステップST3のループの終了条件の判定が真となった場合は、モンテカルロシミュレーションの終了となる。
次に、並列試行実行部2−1〜2−nの処理について説明する。図3は、各並列試行実行部2−1〜2−nの処理の流れを示すフローチャートである。
図2のステップST4で試行の実行が開始されると、全体制御部1によって割当てられた未実行の試行の実行が図3に示すように行われる。この試行実行処理は、まずステップST11において、試行実行ループ処理が開始される。ステップST11のループ処理の終了条件は、例えば、シミュレーションの時刻が終了時刻に達するまでであったり、あるいは、シミュレーションにおける終了イベントが模擬されるまで等、シミュレーションの種類や目的によってユーザにより設定される試行の終了条件が満たされるまでである。
次に、ステップST11のループ処理中のステップST12において、試行における1時刻分の模擬処理が開始される。次に、ステップST13において、試行実行部4は、開始された1時刻分の模擬処理が、乱数を用いる模擬かどうかを判定する。ステップST13の判定がNO(偽)の場合、ステップST15に進み、模擬処理を実行する。ステップST13の判定がYES(真)の場合、ステップST14に進み、試行実行部4は、並列乱数生成部3に対して、当該模擬処理において必要とされる乱数を要求し、取得した後、ステップST15に進み、模擬処理を実行する。
ステップST15において1時刻分の模擬処理の実行が終了すると、次にステップST16に進み、試行の時刻の更新を行い、次のループ処理に進み、ステップST11において模擬実行ループの終了条件の判定が行われる。模擬実行ループの終了条件の判定が偽の場合、ステップST12以降の処理が行われ、また、模擬実行ループの終了条件の判定が真の場合は、ステップST17に処理が進み、当該試行において使用された乱数列の再現のために必要な情報が保存される。保存される情報は、並列乱数生成部3の並列数保存部5に保存する並列数と、並列番号保存部6に保存する並列番号と、シード値保存部7に保存するシード値と、乱数生成回数保存部10に保存する当該試行が開始された際の乱数生成回数である。ステップST17の処理が終了すると、その並列試行実行部2−1〜2−nに割り当てられた試行の実行が終了する。
次に、並列乱数生成部3の動作について説明する。図4は、各並列試行実行部2−1〜2−nの、並列乱数生成部3における乱数生成処理の流れを示すフローチャートである。なお、ここでは、各並列試行実行部2−1〜2−nの一つとして並列試行実行部2−1における並列乱数生成部3の動作を一例として説明する。
図3のステップST14において、試行実行部4より並列乱数生成部3に対して乱数が要求されると、1個の乱数要求に対して図4の乱数取得処理が開始される。
先ず、ステップST101において、今回の乱数の要求が、並列試行実行部2−1において初回の乱数取得かどうかの判定が行われる。
ステップST101の判定結果がYES(真)の場合、ステップST102に進み、シード値保存部7に保存されたシード値が取り出され、状態変数更新部8における状態変数更新処理の初期値として設定される。次に、ステップST103において、並列番号保存部6に保存された並列試行実行部2−1に割り当てられた並列番号が取り出され、次に、状態変数更新部8において並列番号と同じ数の回数分更新処理が実行され、状態変数が更新される。並列番号は各並列試行実行部2−1〜2−nに対して連番で割り振られた0から始まる{並列数−1}までの整数値であるため、このステップST103の処理の結果、各並列試行実行部2−1〜2−nは、それぞれ異なる状態変数の値に更新される。
ステップST101の判定結果がNO(偽)の場合、ステップST104の処理に進み、並列数保存部5に保存された並列数が取り出され、次に、状態変数更新部8において並列数と同じ数の回数分更新処理が実行され、状態変数が更新される。初回の乱数取得の際にステップST103が実行された結果、各並列試行実行部2−1〜2−nは、それぞれ異なる状態変数の値に更新されているため、このステップST104の処理の結果も、各並列試行実行部2−1〜2−nは、それぞれ異なる状態変数の値に更新される。また、各並列試行実行部2−1〜2−nの状態変数更新部8における、初回の乱数取得から今回の乱数取得までの更新回数は、次式(2)の通りとなり、各並列試行実行部2−1〜2−nの全ての乱数取得において異なる状態変数の値に更新される。
=PN+i・Nparallel (2)
:i番目の乱数取得における更新回数
PN:各並列試行実行部に割り当てられた並列番号
parallel:並列数
なお、初回のiの値は0である。
ステップST103またはステップST104の実行が終了すると、次にステップST105に処理が進み、乱数生成部9において状態変数を基に乱数が生成される。次に、ステップST106に処理が進み、乱数生成回数保存部10において並列試行実行部2−1における乱数生成回数がカウントされる。乱数生成回数保存部10が保存する乱数生成回数は、試行の実行が開始される時点の乱数生成回数であり、並列試行実行部2−1の最初の試行実行の際は0が、また、それ以外の試行実行の際は、その試行の前に並列試行実行部2−1で実行された試行の最後の乱数生成回数である。ステップST106の処理が終了すると、並列乱数生成部3における乱数取得処理が終了する。
以上説明したように、実施の形態1の並列シミュレーション装置によれば、それぞれが並列処理によるモンテカルロシミュレーションの試行を実行する複数の並列試行実行部を備えた並列シミュレーション装置であって、複数の並列試行実行部は、それぞれ、自身の試行を実行する試行実行部と、複数の並列試行実行部に共通のシード値を用いて、初回の乱数生成における状態変数の更新回数を並列試行実行部毎に付与された異なる値を基に決定し、初回以降の乱数生成における状態変数の更新回数を複数の並列試行実行部の個数を基に決定する並列乱数生成部とを備え、試行実行部は、並列乱数生成部で生成された乱数を用いて試行を行うようにしたので、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無いという効果がある。なお、効果の詳細については実施の形態2を含めて後述する。
また、実施の形態1の並列シミュレーション装置によれば、並列乱数生成部は、初回の乱数生成における状態変数の更新回数を並列試行実行部毎に付与された異なる値と同数とし、初回以降の乱数生成における状態変数の更新回数を複数の並列試行実行部の個数と同数とするようにしたので、構成を複雑化することなく、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無いという効果を得ることができる。
また、実施の形態1の並列シミュレーション装置によれば、並列乱数生成部は、試行実行部が試行を実行した際の複数の並列試行実行部の個数である並列数と、試行を実行した自並列試行実行部に付与されている値である識別値と、シード値と、自並列試行実行部が生成した乱数の生成回数とを保存するようにしたので、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無いという効果がある。
実施の形態2.
実施の形態2は、過去に実行した試行の再現実行を行う場合の並列シミュレーション装置の処理を示すものである。実施の形態2における並列シミュレーション装置の図面上の構成は図1に示す実施の形態1の構成と同様であるため、図1を用いて説明する。また、過去に実行した試行とは例えば実施の形態1で説明した試行である。
実施の形態2の全体制御部1は、過去に実行した試行の再現実行を行う場合、これを指示し、各並列試行実行部2−1〜2−nはこれに従って試行の再現実行を行うよう構成されている。すなわち、各並列試行実行部2−1〜2−nにおける並列乱数生成部3は、試行の実行後に保存された、その試行を実行した際の並列数と、その試行を実行した自並列試行実行部の識別値である並列番号と、各並列試行実行部2−1〜2−nに共通のシード値と、自並列試行実行部が生成した最後の乱数生成回数と用いて、初回の乱数生成における状態変数の更新回数を、試行実行時の並列数、並列番号、シード値及び乱数生成回数を基に決定すると共に、初回以降の乱数生成における状態変数の更新回数を並列数を基に決定するよう構成されている。また、試行実行部4は、過去に実行した試行の再現実行を行う際、並列乱数生成部3で決定された乱数を用いて行うよう構成されている。
次に、実施の形態2の並列シミュレーション装置の動作について説明する。
図5は、過去に実行した試行の再現実行処理の流れを示すフローチャートである。
全体制御部1の指示により各並列試行実行部2−1〜2−nで試行の再現実行処理を行う場合、まず、ステップST21において、当該試行が過去に実行された際の並列試行実行部2−1〜2−nにおけるステップST17で保存された、試行再現情報である並列数、並列番号、シード値、乱数生成回数が取得される。
次に、ステップST22において、ステップST21で取得された並列数、並列番号、シード値、乱数生成回数が、当該試行を実行する並列試行実行部2−1〜2−nに対して設定される。各並列試行実行部2−1〜2−nに設定された値は、それぞれの並列試行実行部2−1〜2−nにおいて、並列数保存部5に並列数が保存され、並列番号保存部6に並列番号が保存され、シード値保存部7にシード値が保存され、乱数生成回数保存部10に乱数生成回数が保存される。
次に、ステップST23において、当該試行を実行する並列試行実行部2−1〜2−nに当該試行が割り当てられ、実行が開始される。各並列試行実行部2−1〜2−nによる試行の再現実行の処理の流れは、図3に示したフローチャートと同じである。
各並列試行実行部2−1〜2−nによる試行の実行が終了すると、試行の再現実行が終了する。
次に、図6は、図5のステップST23で実行が開始された試行の再現実行において、並列乱数生成部3における乱数生成処理を示すフローチャートである。すなわち、この処理は図3のステップST14において試行実行部4から並列乱数生成部3に対して乱数の取得要求があった場合の流れに相当する。
図6のフローチャートの基本的な流れは図4のフローチャートと同様であるが、ステップST201〜ステップST204の条件分岐以降の更新処理を行うステップが異なる。まず、ステップST201において、今回の乱数の要求が、当該並列試行実行部2−1〜2−nの当該試行の再現実行において初回の乱数取得かどうかの判定が行われる。
ステップST201の判定結果がYES(真)の場合、ステップST202に進み、シード値保存部7に保存されたシード値が取り出され、状態変数更新部8における状態変数更新処理の初期値として設定される。次にステップST203において、並列数保存部5に保存された並列数、並列番号保存部6に保存された並列番号、乱数生成回数保存部10に保存された乱数生成回数が取り出され、状態変数更新部8において式(2)に示した式によって更新回数が計算され、算出された更新回数分状態変数の更新を行う。ここで、式(2)の変数iには乱数生成回数が設定される。以上の処理により、状態変数更新部8の状態変数の値は、再現の対象となる当該試行が実行された際の初回の乱数生成時の状態変数の値に再現される。
一方、ステップST201の判定結果がNO(偽)の場合、ステップST204の処理に進み、並列数保存部5に保存された並列数が取り出され、次に、状態変数更新部8において並列数と同じ数の回数分更新処理が実行され、状態変数が更新される。以上の処理により、状態変数更新部8の状態変数の値は、再現の対象となる当該試行が実行された際の初回以降の乱数生成時の状態変数の値に再現される。
なお、試行を再現実行する際に設定される並列数、並列番号は、当該試行が過去に実行された際のシステム構成における値を利用するだけであり、試行を再現実行にあたって過去に当該試行を実行したシステム構成そのものを再現する必要はない。
次に、実施の形態1及び実施の形態2を含む本発明の効果について説明する。
まず、本発明は、各試行を並列に実行する並列試行実行部2−1〜2−nにおいて、試行を実行する前に、当該試行が必要とする乱数の個数を予め見積る必要がなく、試行を実行した後に実際に生成した乱数の数を計測して保存することで、試行が使用した乱数列の再現を行うことを可能とする。そのため、従来技術の課題に例示した防衛作戦評価用モンテカルロシミュレーションのような、事前に必要とする乱数の個数を見積ることが困難なシミュレーションであっても問題無く利用することが可能である。
次に、本発明は、各試行を並列に実行する並列試行実行部2−1〜2−nにおいて、他の並列試行実行部2−1〜2−nと異なる状態変数の値になるように更新するよう更新回数を調整することで、状態変数の更新を各並列試行実行部2−1〜2−nにおいて排他アクセスすることなく並列に実行することができる。そのため、従来技術として示した特許文献1の方式に比べ、並列化できない処理の割合を小さくすることが可能であり、より高い並列化効果を得ることが可能である。この効果を、図7及び図8を用いて定量的に説明する。
図7は、並列数による高速化倍率を見積った表の説明図である。図7の表は、並列化できない処理の時間として、乱数生成に必要な更新処理と、排他ロックの処理の合計の処理時間として、式(1)に挙げた並列処理におけるアムダールの法則に基づき高速化倍率を見積った。本発明と特許文献1の方式を比較した場合、もし双方が同じ個数の乱数を用いた試行を実行したと仮定すると、双方の方式で更新処理の実行回数は同一であり、異なる点は本発明は更新処理が並列に実行され、特許文献1の方式は排他アクセスが行われるグローバル記憶部で実行される点である。そのため、図7の表において、見出しを除く左端の0.1%という列の数字が本発明による高速化倍率の見積値であり、それ以外の0.2〜0.7%という列が、それぞれ排他ロックの処理時間の割合に応じた高速化倍率の見積値である。
図8は、図7の表をグラフ化した説明図であり、横軸に並列数を、縦軸に高速化倍率を対数目盛で示したグラフを示している。図示のグラフに示した通り、排他ロックが必要な方式では、排他ロックの処理時間が全体に対して0.1〜0.6%と非常にわずかであっても、並列数の増加に対して高速化倍率が向上せず、より少ない並列数で高速化の効果が限界に達する。排他ロックの必要のない本発明では、より高い並列効果を得ることが可能である。
以上説明したように実施の形態2の並列シミュレーション装置によれば、一度実行したモンテカルロシミュレーションの試行を終了後に再現する際、並列乱数生成部は、試行の実行後に保存された、試行を実行した際の複数の並列試行実行部の並列数と、試行を実行した自並列試行実行部の識別値と、シード値と、自並列試行実行部が生成した最後の乱数生成回数とを用い、初回の乱数生成における状態変数の更新回数を、試行実行時の並列数、識別値、シード値及び乱数生成回数を基に決定すると共に、初回以降の乱数生成における状態変数の更新回数を並列数を基に決定し、試行実行部は、並列乱数生成部で生成された乱数を用いて試行の再現を行うようにしたので、試行の再現性を確保するために試行を実行する前に1回の試行の実行に必要な乱数の個数を見積る必要がなく、また、乱数生成のために排他アクセスの必要が無いという効果がある。
なお、本願発明はその発明の範囲内において、各実施の形態の自由な組み合わせ、あるいは各実施の形態の任意の構成要素の変形、もしくは各実施の形態において任意の構成要素の省略が可能である。
1 全体制御部、2−1〜2−n 並列試行実行部、3 並列乱数生成部、4 試行実行部、5 並列数保存部、6 並列番号保存部、7 シード値保存部、8 状態変数更新部、9 乱数生成部、10 乱数生成回数保存部。

Claims (3)

  1. それぞれが並列処理によるモンテカルロシミュレーションの試行を実行する複数の並列試行実行部を備えた並列シミュレーション装置であって、
    前記複数の並列試行実行部は、それぞれ、
    自身の試行を実行する試行実行部と、
    前記複数の並列試行実行部に共通のシード値を用いて、初回の乱数生成における状態変数の更新回数を並列試行実行部毎に付与された並列番号と同数に決定し、初回以降の乱数生成における状態変数の更新回数を前記複数の並列試行実行部の個数である並列数と同数に決定する並列乱数生成部とを備え、
    前記並列番号は、0から始まり前記並列数から1を減じた値までの連番であり、
    前記試行実行部は、前記並列乱数生成部で生成された乱数を用いて前記試行を行うことを特徴とする並列シミュレーション装置。
  2. 前記並列乱数生成部は、
    前記試行実行部が試行を実行した際の前記複数の並列試行実行部の個数である並列数と、当該試行を実行した自並列試行実行部に付与されている値である識別値と、前記シード値と、前記自並列試行実行部が生成した乱数の生成回数とを保存することを特徴とする請求項1記載の並列シミュレーション装置。
  3. 一度実行したモンテカルロシミュレーションの試行を終了後に再現する際、
    前記並列乱数生成部は、
    当該試行の実行後に保存された、当該試行を実行した際の前記複数の並列試行実行部の並列数と、当該試行を実行した自並列試行実行部の識別値と、前記シード値と、前記自並列試行実行部が生成した最後の乱数生成回数とを用い、
    初回の乱数生成における状態変数の更新回数を、前記試行実行時の並列数、識別値、シード値及び乱数生成回数を基に決定すると共に、初回以降の乱数生成における状態変数の更新回数を当該並列数を基に決定し、
    前記試行実行部は、前記並列乱数生成部で生成された乱数を用いて前記試行の再現を行うことを特徴とする請求項記載の並列シミュレーション装置。
JP2015064430A 2015-03-26 2015-03-26 並列シミュレーション装置 Active JP6270765B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2015064430A JP6270765B2 (ja) 2015-03-26 2015-03-26 並列シミュレーション装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2015064430A JP6270765B2 (ja) 2015-03-26 2015-03-26 並列シミュレーション装置

Publications (2)

Publication Number Publication Date
JP2016184307A JP2016184307A (ja) 2016-10-20
JP6270765B2 true JP6270765B2 (ja) 2018-01-31

Family

ID=57243122

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015064430A Active JP6270765B2 (ja) 2015-03-26 2015-03-26 並列シミュレーション装置

Country Status (1)

Country Link
JP (1) JP6270765B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2022096222A (ja) 2020-12-17 2022-06-29 富士通株式会社 乱数生成プログラムおよび乱数生成方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3539870B2 (ja) * 1998-07-14 2004-07-07 株式会社日立製作所 乱数生成システム及び乱数生成方法
JP3183261B2 (ja) * 1998-07-17 2001-07-09 日本電気株式会社 シミュレーション実行装置およびシミュレーションの実行方法
US8756264B2 (en) * 2006-06-20 2014-06-17 Google Inc. Parallel pseudorandom number generation
JP4950325B2 (ja) * 2010-07-02 2012-06-13 みずほ第一フィナンシャルテクノロジー株式会社 モンテカルロ法の効率的な並列処理手法

Also Published As

Publication number Publication date
JP2016184307A (ja) 2016-10-20

Similar Documents

Publication Publication Date Title
Irazoqui et al. Systematic reverse engineering of cache slice selection in Intel processors
CN111078395B (zh) 一种基于张量的深度学习gpu内存管理优化方法及系统
Chen et al. GPU-accelerated sparse LU factorization for circuit simulation with performance modeling
US20060224594A1 (en) Methods and systems for identifying highly contended blocks in a database
JP5059928B2 (ja) Gpuを用いた乱数生成処理の並列化
JP6205168B2 (ja) 並列構造化重複検出を利用する並列モデル検査のためのシステムおよび方法
Bartocci et al. Towards a GPGPU-parallel SPIN model checker
US20190042615A1 (en) Hybrid concurrency control
WO2019193570A1 (en) Batch jobs execution time prediction using distinct service demand of threads and instantaneous cpu utilization
US10599638B2 (en) System and method for identifying maximal independent sets in parallel
JP6270765B2 (ja) 並列シミュレーション装置
Aksenova et al. The models and methods of optimal control of three work-stealing deques located in a shared memory
CN113421095A (zh) 一种区块链交易并行执行加速方法
US11226798B2 (en) Information processing device and information processing method
Hoseini et al. Modeling the performance of atomic primitives on modern architectures
US8380724B2 (en) Grouping mechanism for multiple processor core execution
Schmidt et al. Load-balanced parallel constraint-based causal structure learning on multi-core systems for high-dimensional data
Duttagupta et al. Predicting performance in the presence of software and hardware resource bottlenecks
Gamaarachchi et al. Accelerating correlation power analysis using graphics processing units (gpus)
JP4950325B2 (ja) モンテカルロ法の効率的な並列処理手法
Anzt et al. On block-asynchronous execution on GPUs
US11144428B2 (en) Efficient calculation of performance data for a computer
Allal et al. Sequential and parallel algorithms for the state space exploration
CN112541041A (zh) 一种数据处理方法、装置、服务器及存储介质
Månsson Comparative Study of CPU and GPGPU Implementations of the Sievesof Eratosthenes, Sundaram and Atkin

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170126

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20171010

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20171017

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171115

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20171128

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20171226

R150 Certificate of patent or registration of utility model

Ref document number: 6270765

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250