(57)【要約】【課題】キャッシュメモリを有する計算機上で、入力データの集合から乱数を用いて要素の無作為抽出を繰り返すシミュレーション計算を行う際に、キャッシュメモリを活用して性能を向上させるために、入力データに対するアクセスを局所化する。【解決手段】乱数を生成する乱数集合生成部１０２と、生成された乱数を格納する乱数集合格納テーブル１０９と、並列処理による乱数へのアクセスパターンを、識別番号記憶テーブル１１０と、アクセス順序記憶テーブル１１１として取得するアクセス情報記録部１１５と、アクセス情報記録部１１５で取得した情報に基づき、乱数集合格納テーブル１０９内の乱数を自動的に整列する整列処理部１０６とを具備した乱数生成システム１０１をシミュレーション計算システム１１４に接続して構成される。【選択図】      図１
2006155168.tif 000002
【特許請求の範囲】
【請求項１】
シミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおける乱数生成方法において、前記乱数生成システムは、前記シミュレーション計算システムから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、取得した識別番号とアクセス順序との情報に基づいて、生成した乱数集合を整列したものとし、整列した乱数集合内の乱数を前記シミュレーション計算システムに対して出力することを特徴とする乱数生成方法。
【請求項２】
前記乱数集合の整列によるシミュレーション計算システムの性能向上効果を予め推定し、整列の要否を判定することを特徴とする請求項１記載の乱数生成方法。
【請求項３】
大規模な入力データの集合から乱数を用いた要素の無作為抽出と計算とを繰り返す処理を行い、乱数による入力データの抽出及び計算部分の処理を複数の独立した処理部で並列実行するシミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおける乱数生成方法において、前記乱数生成システムは、前記シミュレーション計算システムの前記処理部のそれぞれから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、取得した識別番号とアクセス順序との情報に基づいて、生成した乱数集合を整列したものとし、整列した乱数集合内の乱数を前記シミュレーション計算システムの前記処理部のそれぞれに対して出力することを特徴とする乱数生成方法。
【請求項４】
シミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおいて、生成した乱数の集合を格納する乱数集合格納テーブルと、前記シミュレーション計算システムから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、識別番号記憶テーブルとアクセス順序記憶テーブルに格納するアクセス情報記録部と、該アクセス情報記録部で取得した識別番号とアクセス順序との情報に基づいて、生成した前記乱数集合格納テーブル内の乱数集合を整列する整列処理部と、整列した乱数集合内の乱数を前記シミュレーション計算システムに対して出力する手段とを備えることを特徴とする乱数生成システム。
【請求項５】
前記乱数集合の整列によるシミュレーション計算システムの性能向上効果を予め推定し、整列の要否を判定する整列効果推定部をさらに備えることを特徴とする請求項４記載の乱数生成システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乱数生成方法及びシステムに係り、特に、乱数を使用するシミュレーションを行うシステムに対して入力する乱数の生成に使用して好適な乱数生成方法及びシステムに関する。
【背景技術】
【０００２】
近年、一般にモンテカルロ法と呼ばれている乱数を使用するシミュレーション計算の技術が、分子計算、金融計算の分野でよく利用されている。シミュレーションで使用する乱数は、物理乱数、擬似乱数、準乱数等がある。本発明により生成する乱数は、擬似乱数に係るものであり、疑似乱数の生成方法に関する従来技術として、例えば、非特許文献１等に記載されたＭ系列乱数生成法、非特許文献２等に記載されたメルセンヌツイスター法等の技術がよく知られている。そして、非特許文献１、非特許文献２に記載の乱数生成方法は、いずれも、線形漸化式で生成した乱数を生成した順番に出力するものである。
【０００３】
一方、乱数を使用するシミュレーション計算の技術として、特に、大規模な入力データの集合から乱数を用いた要素の無作為抽出と計算とを繰り返す処理を持ち、乱数による入力データの抽出及び計算部分の処理が独立であって、この部分の並列化が可能な技術が知られている。このような構成を持つシミュレーション計算システムは、入力される乱数として、従来、線形漸化式で生成して順番に出力された乱数をそのまま使用していた。
【非特許文献１】T. G. Lewis and W. H. Payne. Generalized Feedback Shift Register Pseudorandom Number Algorithm. Journal of the ACM, 20(3):456-468, July 1973.
【非特許文献２】M. Matsumoto and T. Kurita: "Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator", ACM Transactions on Modeling and Computer Simulations (1998).
【発明の開示】
【発明が解決しようとする課題】
【０００４】
一般に、キャッシュメモリを有する計算機は、メモリへアクセスする順番が連続であればメモリ参照の局所性が向上し、その性能を向上させることができるという特徴を持っていることが知られている。
【０００５】
前述のようなキャッシュメモリを有する逐次計算機上に、従来技術で示したようなシミュレーション計算システムを構築して、シミュレーションを実行させる際に、生成された順に格納された乱数列をそのまま利用すると、シミュレーションの入力データの集合に対するアクセスの順序に規則性がほとんどないため、計算機が持つキャッシュメモリを有効に生かすことができないという問題が生じる。
【０００６】
同様に、キャッシュメモリを有する並列計算機上で、乱数集合に対するアクセスを並列化したシミュレーションを実行させる場合にも、並列処理時入力並列計算機を構成する全てのプロセッサについて、シミュレーションの入力データの集合に対するアクセスの順序に規則性がほとんどないため、前述した逐次計算機の場合と同様の問題が発生する。
【０００７】
本発明の目的は、前述した従来技術の問題にを解決し、キャッシュメモリを有する逐次計算機上あるいは並列計算機上に構築された大規模な入力データの集合から乱数を用いた要素の無作為抽出と計算とを繰り返す処理を行うシミュレーション計算システムに入力して好適な乱数を発生する乱数生成方法及びシステムを提供することにある。
【課題を解決するための手段】
【０００８】
本発明によれば前記目的は、シミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおける乱数生成方法において、前記乱数生成システムが、前記シミュレーション計算システムから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、取得した識別番号とアクセス順序との情報に基づいて、生成した乱数集合を整列したものとし、整列した乱数集合内の乱数を前記シミュレーション計算システムに対して出力することにより達成される。
【０００９】
また、前記目的は、大規模な入力データの集合から乱数を用いた要素の無作為抽出と計算とを繰り返す処理を行い、乱数による入力データの抽出及び計算部分の処理を複数の独立した処理部で並列実行するシミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおける乱数生成方法において、前記乱数生成システムが前記シミュレーション計算システムの前記処理部のそれぞれから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、取得した識別番号とアクセス順序との情報に基づいて、生成した乱数集合を整列したものとし、整列した乱数集合内の乱数を前記シミュレーション計算システムの前記処理部のそれぞれに対して出力することにより達成される。
【００１０】
また、前記目的は、シミュレーション計算システムが使用する乱数の集合を発生する乱数生成システムにおいて、生成した乱数の集合を格納する乱数集合格納テーブルと、前記シミュレーション計算システムから受け取った計算回数と乱数集合の要素番号とに基づいて、識別番号とアクセス順序とを取得し、識別番号記憶テーブルとアクセス順序記憶テーブルに格納するアクセス情報記録部と、このアクセス情報記録部で取得した識別番号とアクセス順序との情報に基づいて、生成した前記乱数集合格納テーブル内の乱数集合を整列する整列処理部と、整列した乱数集合内の乱数を前記シミュレーション計算システムに対して出力する手段とを備えることにより達成される。
【発明の効果】
【００１１】
本発明によれば、キャッシュメモリを有する逐次計算機上あるいは並列計算機上に構築された大規模な入力データの集合から乱数を用いた要素の無作為抽出と計算とを繰り返す処理を行うシミュレーション計算システムに使用した場合に、入力データに対するアクセスを局所化するように、自動的に整列した乱数列を生成することができ、シミュレーション計算システムの性能の向上を図ることができる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明による乱数生成方法及びシステムの実施形態を図面により詳細に説明する。
【００１３】
本発明による乱数生成方法及びシステムを用いて生成した乱数を用いるシミュレーション計算システムは、入力データを乱数により間接的に参照することができ、乱数による入力データの参照及びシミュレーションの計算の部分が乱数毎に独立に計算可能で、この部分の並列化が可能なものを想定している。また、このシミュレーション計算システムは、乱数の値を入力データの集合が持つ要素番号に容易に変換するために、上限及び下限が決まっている乱数を用いることとしている。
【００１４】
生成する乱数集合と参照する入力データとの関係には、どちらを繰り返し適用するかにより、一対多、多対一、多対多の計算の場合がある。多対多の計算とは、入力データの組を複数持ち、入力データのそれぞれの組に対し、複数回生成した乱数集合のそれぞれを用いて間接的な参照を複数回繰り返すような計算の場合である。
【００１５】
以下に説明する本発明の実施形態は、シミュレーション計算における乱数集合と入力データとの関係が１対多の場合であり、入力データの組を複数もち、入力データのそれぞれの組に対し、１つの乱数集合を用いて間接的な参照を行ってシミュレーション計算を行うシミュレーション計算システムに適用されるものとする。そして、本発明の一実施形態による乱数生成システム及びそれを利用するシミュレーション計算システムは、複数のプロセッサ（物理的なプロセッサであっても、論理的なプロセッサであってもよい）を持つ並列計算機上に実装されるものとしている。
【００１６】
図１は本発明の一実施形態による乱数生成システムとそれを利用するシミュレーション計算システムを実装した並列計算機との主記憶装置上の構成を示すブロック図である。図１において、１０１は乱数生成システム、１０２は乱数集合生成部、１０３は整列効果推定部、１０４は乱数取得部、１０５はアクセス情報記録部、１０６は整列処理部、１０７は識別番号、１０８はアクセス回数記憶カウンタ、１０９は乱数集合格納テーブル、１１０は識別番号記憶テーブル、１１１はアクセス順序記憶テーブル、１１２は整列状態フラグ、１１３は整列効果推定テーブル、１１４はシミュレーション計算システム、１１５は入力データ組格納テーブル、１１６は乱数生成要求部、１１７は乱数参照部、１１８はデータ取得部、１１９は計算部、１２０は入力部、１２１は出力部、１２２は乱数生成用システム接続部、１２３は乱数取得用システム接続部、１２４は部分シミュレーション処理部である。
【００１７】
乱数生成システム１０１は、乱数集合生成部１０２、整列効果推定部１０３、複数の乱数取得部１０４、乱数集合格納テーブル１０９、識別番号記憶テーブル１１０、アクセス順序記憶テーブル１１１、整列状態フラグ１１２、整列効果推定テーブル１１３により構成される。乱数取得部１０４は、アクセス情報記録部１０５、整列処理部１０６、識別番号１０７、アクセス回数記憶カウンタ１０８により構成される。
【００１８】
シミュレーション計算システム１１４は、入力データ組格納テーブル１１５、乱数生成要求部１１６、複数の部分シミュレーション処理部１２４、入力部１２０、出力部１２１を備えて構成される。複数の部分シミュレーション処理部１２４のそれぞれは、乱数参照部１１７、データ取得部１１８、計算部１１９により構成され、それぞれが専用の図示しないキャッシュメモリを備えている。
【００１９】
シミュレーション計算システム１１４は、乱数参照部１１７、データ取得部１１８及び計算部１１９を持つ部分シミュレーション処理部１２４をＰ個持ち、これらを並列に動作させることが可能である。そして、乱数生成システム１０１の乱数集合生成部１０２とシミュレーション計算システム１１４の乱数生成要求部１１６とは乱数生成用システム接続部１２２により接続され、乱数生成システム１０１の複数の乱数取得部１０４のそれぞれとシミュレーション計算システム１１４の部分シミュレーション処理部１２４のそれぞれとは、１対１に対応付けられて、乱数取得用システム接続部１２３により接続されている。
【００２０】
乱数生成システム１０１における乱数集合生成部１０２と複数の乱数取得部１０４とは、シミュレーション計算システム１１４と接続するためのインターフェースとして設けられている。そして、乱数集合生成部１０２は、乱数生成用システム接続部１２２を介して、乱数生成要求部１１６からの乱数生成の要求を受け付ける。このとき、生成する乱数の個数Ｎと、整列による効果の有無を推測するための入力データ数Ｄ及び並列実行数Ｐとをあわせて受信する。乱数集合生成部１０２は、Ｎ個の乱数を生成し、生成した乱数を乱数集合格納テーブル１０９に格納する。乱数集合格納テーブル１０９は、生成した乱数集合を格納するためのテーブルであり、乱数の個数Ｎに等しい個数の値を格納することができ、それぞれの値には１〜Ｎの範囲で要素番号が付けられている。
【００２１】
乱数取得部１０４は、乱数取得用システム接続部１２３を介して、部分シミュレーション処理部１２４内の乱数参照部１１７からの乱数の取得要求を受け付ける。このとき、乱数取得部１０４は、乱数集合格納テーブル１０９に対応する要素番号ｎと、計算回数ｃをあわせて受信する。乱数取得部１０４は、乱数生成システム１０１で生成され乱数集合格納テーブル１０９に格納された乱数を、前述の要素番号ｎを参照し、乱数集合格納テーブル１０９のｎ番目の要素から取得し、その乱数の値を、乱数取得用システム接続部１２３を介して乱数参照部１１７に送信すると共に、計算回数ｃを参照して、ｃ＝１である間、アクセス情報記録部１０５での処理を実行し、初めてｃ＝２になったときに、整列処理部１０６での処理を実行する。ここで、計算回数ｃは、１組の入力データに対する計算全体を１回として扱ったときの計算の回数と等しい。
【００２２】
シミュレーション計算システム１１４は、入力データ組格納テーブル１１５を持ち、乱数を用いた間接参照により、入力データの組を１組ずつ取り出して計算を繰り返す。入力データ組格納テーブル１１５は、入力データＤ個を１組として、それをＣ組持つ。
【００２３】
シミュレーション計算システム１１４は、入力部１２０と出力部１２１とを持ち、入力部１２０と出力部１２１は、データの初期値入力と計算結果の出力とを行うためのインターフェースとして設けられている。また、シミュレーション計算システム１１４における乱数生成要求部１１６と乱数参照部１１７とは、乱数生成システム１０１と接続するためのインターフェースとして設けられている。
【００２４】
入力部１２０は、入力データ組格納テーブル１１５に格納するためのデータや計算で用いる乱数の個数Ｎをはじめとするシミュレーション固有のパラメータの入力を受け付け、また、出力部１２１は計算結果を出力する。乱数生成要求部１１６は、乱数生成用システム接続部１２２を介して、乱数生成システム１０１に対し乱数生成を要求する。このとき、乱数生成要求部１１６は、生成する乱数の個数Ｎと、整列による効果の有無を推測するための入力データ数Ｄ及び並列実行数Ｐとをあわせて送信する。
【００２５】
乱数参照部１１７は、乱数取得用システム接続部１２３を介して乱数取得部１０４に対して乱数参照を要求する。このとき、乱数参照部１１７は、生成した乱数集合に対して参照する要素番号ｎと、計算回数ｃとを送信する。この操作により、乱数参照部１１７は、乱数取得用システム接続部１２３を介して乱数取得部１０４から乱数の値を１つ受信することができる。データ取得部１１８は、乱数参照部１１７で得られた乱数を入力データ組格納テーブル１１５に対する要素番号ｄに変換して、入力データ組格納テーブル１１５の要素番号ｄの要素を得る。計算部１１９は、データ取得部１１８で得られた入力データを用いて、シミュレーション固有の計算を行う。
【００２６】
なお、シミュレーション計算システム１１４は、入力データ組格納テーブル１１５に格納されたＤ個のデータの全てのデータに対してシミュレーション計算を行うものではなく、乱数生成システム１０１から得られる乱数により、Ｄ個のデータの一部をデータ全体から均等に抽出して、抽出されたデータに対してシミュレーション計算を行うものである。また、データ取得部１１８は、入力データ組格納テーブル１１５からデータを取り込む際に、キャッシュメモリを用いるが、使用されるキャッシュメモリの容量は、入力データ組格納テーブル１１５に格納されるＤ個のデータの全てを取り込むことのできない大きさである。
【００２７】
図２は乱数生成システム１０１を利用するシミュレーション計算システム１１４での処理動作を説明するフローチャートであり、次に、これについて説明する。
【００２８】
（１）シミュレーション計算システム１１４は、処理を開始すると、入力部１２０での処理を実行し、入力データ組格納テーブル１１５に格納するためのデータ及び計算で用いる乱数の個数Ｎをはじめとするシミュレーション固有のパラメータの入力を受け付ける（ステップ２０１、２０２）。
【００２９】
（２）次に、乱数生成要求部１１６での処理を実行する。乱数生成要求部１１６は、乱数生成システム１０１が持つ乱数集合生成部１０２に対して乱数生成を要求し、乱数の個数Ｎ、入力データ数Ｄ及び並列実行数Ｐを乱数集合生成部１０２に送信する（ステップ２０３）。
【００３０】
（３）計算回数ｃを１に設定し、入力データ組格納テーブル１１５から１組の入力データを選択し、ステップ２０６以降の処理で、選択された１組、ここではｃ組目の入力データに対して計算する設定を行う（ステップ２０４、２０５）。
【００３１】
次に、ステップ２０６の処理として、ステップ２０７〜ステップ２１０の各処理について並列処理を行う。
【００３２】
（４）並列化されたステップ２０６の処理において、まず、値Ｎp に等しい回数だけステップ２０８〜ステップ２１０の処理を繰り返すことを設定する。並列化された処理のそれぞれに、識別番号ｐ＝０〜Ｐ−１を付与したとき、値Ｎp は、識別番号ｐの処理が乱数集合格納テーブル１０９に対してアクセスする回数を示す（ステップ２０７）。
【００３３】
（５）次に、乱数参照部１１７での処理を実行する。乱数参照部１１７は、乱数取得部１０４に対し乱数取得を要求する。このとき、乱数参照部１１７は、要素番号ｎ及び計算回数ｃをあわせて送信する。この操作によって、乱数参照部１１７は、乱数取得部１０４から乱数の値を受信する（ステップ２０８）。
【００３４】
ステップ２０８での処理において、識別番号ｐの処理における乱数参照部１１７で利用する要素番号ｎの値は、シミュレーション計算システム１１４が並列処理時に乱数集合格納テーブル１０９を参照するときのアクセスパターンから決定する。また、要素番号ｎは、１〜Ｎの範囲内にあり、１組の入力データについて計算する間、異なる乱数参照部１１７間においても同じ要素番号ｎが２度現れることはない。言い換えると、乱数集合格納テーブル１０９の要素番号ｎを持つ要素は、Ｐ個の乱数参照部１１７のうちいずれか１つから１度だけアクセスされ、同じあるいは異なる乱数参照部１１７から２度アクセスされることはない。
【００３５】
（６）次に、データ取得部１１８での処理を実行する。データ取得部１１８は、ステップ２０８の処理で取得した乱数ｘを、入力データ組格納テーブル１１５に対する要素番号ｄに変換し、要素番号がｄである計算中の組の入力データの値を取得する（ステップ２０９）。
【００３６】
（７）次に、計算部１１９での処理を実行する。計算部１１９は、ステップ２０９の処理で取得した要素番号がｄである入力データ格納テーブルの値をもとにシミュレーション固有の計算を行う（ステップ２１０）。
【００３７】
（８）入力データ１組に対する計算が全て終了した時点（ステップ２０７の終了）で、計算回数ｃを１増加し、計算回数ｃが入力データ組格納テーブル１１５のデータ組数Ｃより小さい（ｃ≦Ｃ）か否かを判定し、計算回数ｃが入力データ組格納テーブル１１５のデータ組数Ｃを超えるまで、ステップ２０５からの処理に戻って、ステップ２０５〜２１０の処理を繰り返す（ステップ２１１、２１２）。
【００３８】
（９）ステップ２１２の判定で、計算回数ｃが入力データ組格納テーブル１１５のデータ組数Ｃを超え、全ての繰り返し処理が完了した時点で、出力部１２１での処理を実行し、シミュレーションの結果を出力して、ここでの処理を終了する（ステップ２１３、２１４）。
【００３９】
図３は図２に示すフローのステップ２０３の処理で実行される乱数集合生成部１０２での処理の詳細を説明するフローチャートであり、次に、これについて説明する。
【００４０】
（１）乱数集合生成部１０２での処理が開始されると、乱数集合生成部１０２は、乱数用システム接続部１２２を介して、発生させる乱数集合Ｎの値及び入力データ数Ｄの値を乱数生成要求部１１６から読み込む。入力データ数Ｄは、後に実行される整列効果推定部１０３で利用される（ステップ３０１、３０２）。
【００４１】
（２）次に、乱数集合生成部１０２は、Ｎ個の乱数を生成し、乱数集合格納テーブル１０９にＮ個の乱数を格納する。このとき利用する乱数生成方法については様々な方法であってよいが、ここでは、上限及び下限が決まっていて乱数の値から入力データ格納テーブル１１５に対する要素番号へ容易に変換できる乱数を生成できる乱数生成方法を用いる（ステップ３０３）。
【００４２】
（３）次に、整列効果推定部１０３での処理を実行する。整列効果推定部１０３は、受信した乱数の個数や入力データサイズや並列実行数から整列の効果を推測し、その結果を整列効果推定テーブル１１３に格納して、ここでの処理を終了する（ステップ３０４、３０５）。
【００４３】
前述した整列効果推定テーブル１１３は、例えば「昇順」や「ＳＭＰ昇順」といった乱数集合格納テーブル１０９を整列する規則を要素として持ち、それぞれが「効果あり」、「効果なし」の２つの値をとる。整列規則は、多岐にわたり、それぞれの整列効果の推定方法も同様に多岐にわたるため、本発明の実施形態では、その推定方法の一例として、入力データ数Ｎと並列実行数Ｐの値を用いて「昇順」及び「ＳＭＰ昇順」の効果を推定する方法をとることとする、この方法の詳細については、後述する具体例の中で説明する。
【００４４】
図４は乱数取得部１０４での処理の詳細を説明するフローチャートであり、次に、これについて説明する。この処理は、図２に示すフローのステップ２０８の処理で、乱数参照部１１７から参照要求が行われたときに乱数取得部１０４が行う処理である。
【００４５】
（１）乱数取得部１０４での処理が開始されると、乱数取得部１０４は、乱数取得用システム接続部１２３を介して、乱数参照部１１７から、参照する要素番号ｎの値と、計算回数ｃとを受信する。計算回数ｃは、シミュレーション計算システム１１４がｃ組目の入力データを計算するために乱数を参照しようとしていることを示す（ステップ４０１、４０２）。
【００４６】
（２）次に、計算回数ｃが１であるか否かを判定し、計算回数ｃが１であった場合、それまでに乱数集合格納テーブル１０９が持つ要素の全てにはアクセスされておらず、アクセス解析が行われていないかその途中であることを示すので、乱数生成システム１０１は、アクセス情報記録部１０５での処理を実行する。なお、このアクセス情報記録部１０５での処理の詳細については、図５に示すフローを参照して後述する（ステップ４０３、４０４）。
【００４７】
（３）ステップ４０３の判定で、計算回数ｃが１でなかった場合、あるいは、ステップ４０４のアクセス情報記録部１０５での処理の終了後、計算回数ｃが初めて２になったか否かを判定し、計算回数ｃが初めて２になったのであれば、それはアクセス解析が終了した直後であることを示すので、整列処理部１０６での処理を実行する。なお、この整列処理部１０６での処理の詳細については、図６に示すフローを参照して後述する（ステップ４０５、４０６）。
【００４８】
（４）ステップ４０５の判定で、計算回数ｃが初めて２になったのでなかった場合、あるいは、ステップ４０６の整列処理部１０６での処理の終了後、乱数集合格納テーブル１０９の要素番号ｎの値を乱数取得用システム接続部１２３を介して、乱数参照部１１７へ送信して、ここでの処理を終了する（ステップ４０７、４０８）。
【００４９】
図５は図４に示すフローのステップ４０４のアクセス情報記録部１０５での処理の詳細を説明するフローチャートであり、次に、これについて説明する。
【００５０】
（１）アクセス情報記録部１０５での処理が開始されると、アクセス情報記録部１０５は、整列効果推定テーブル１１３を参照することにより整列の効果の判定を行い、整列効果推定テーブル１１３のいずれかの要素が「効果あり」であるか否かを判定し、整列効果推定テーブル１１３が持つどの要素も「効果なし」であれば、整列効果推定テーブル１１３の整列を行う必要がないためここでの処理を終了する（ステップ５０１、５０２、５０６）。
【００５１】
前述において、整列効果推定テーブル１１３の内容は、図３に示すフローのステップ３０４での処理により、また、後述する図７での具体例で接続するように効果の有無として記述されている。
【００５２】
（２）ステップ５０２の判定で、整列効果推定テーブル１１３が持ついずれかの要素が「効果あり」であった場合、この乱数取得部１０４が持つ識別番号ｐを、識別番号記憶テーブル１１０の要素番号がｎである要素へコピーする。これは、乱数集合格納テーブル１０９の要素番号ｎの値が、識別番号がｐである乱数取得部１０４からアクセスされたことを示す。識別番号記憶テーブル１１０は、乱数の個数Ｎに等しい個数の値を格納でき、それぞれの値には１〜Ｎの範囲で要素番号が付けられている（ステップ５０３）。
【００５３】
（３）次に、この乱数取得部１０４が持つアクセス回数記憶カウンタ１０８の値ｔを、アクセス順序記憶テーブル１１１の要素番号ｎの要素にコピーする。これは、乱数集合格納テーブル１０９の要素番号ｎの値が、識別番号がｐである乱数取得部１０４においてｔ番目にアクセスされたことを示す。アクセス順序記憶テーブル１１１は、乱数の個数Ｎに等しい個数の値を格納でき、それぞれの値には１〜Ｎの範囲で要素番号が付けられている（ステップ５０４）。
【００５４】
（４）その後、この乱数取得部１０４が持つアクセス回数記憶カウンタ１０８の値ｔを１増加させて、ここでの処理を終了する。ここでの処理は、同じ乱数取得部１０４が再び実行された場合、次にアクセスされる乱数集合格納テーブル１０９の要素番号ｎ’の値がｔ＋１番目にアクセスされるとき、アクセス順序記憶テーブル１１１の要素番号ｎ’の要素にｔ＋１を格納するための処理である（ステップ５０５、５０６）。
【００５５】
図６は図４に示すフローのステップ４０６の整列処理部１０６での処理の詳細を説明するフローチャートであり、次に、これについて説明する。
【００５６】
（１）整列処理部１０６での処理が開始されると、整列処理部１０６は、整列効果推定テーブル１１３を参照することにより整列の効果の判定を行い、整列効果推定テーブル１１３のいずれかの要素が「効果あり」であるか否かを判定し、整列効果推定テーブル１１３が持つどの要素も「効果なし」であれば、整列効果推定テーブル１１３の整列を行う必要がないためここでの処理を終了する（ステップ６０１、６０２、６０９）。
【００５７】
（２）ステップ６０２の判定で、整列効果推定テーブル１１３が持ついずれかの要素が「効果あり」であった場合、整列状態フラグ１１２が「整列済」であるか否かを判定する。整列状態フラグ１１２の情報は、乱数集合格納テーブル１０９に対する整列操作が行われたかどうかを示し、「未整列」、「整列中」、「整列済」の３つの値を取る。ここでの判定で、整列効果推定テーブル１１３に対応する整列状態フラグ１１２が「整列済」であった場合、整列する必要が無いためここでの処理を終了する（ステップ６０３、６０９）。
【００５８】
（３）ステップ６０３の判定で、整列状態フラグ１１２が「整列済」でなかった場合、整列状態フラグ１１２が「整列中」であるか否かを判定し、「整列中」であれば、他の乱数取得部１０４が乱数を整列している最中であるということを意味するので、その間は乱数へのアクセスもできないため、整列状態フラグ１１２が「整列中」でなくなるまで待ってから、その後にここでの処理を終了する（ステップ６０４、６０８、６０９）。
【００５９】
（４）ステップ６０４の判定で、整列状態フラグ１１２が「整列中」でなかった場合、整列状態フラグ１１２が「未整列」であるので、整列状態フラグ１１２を「整列中」にする。この操作によって、他の乱数取得部１０４が整列中の乱数集合格納テーブル１０９に対してアクセスできないようにする（ステップ６０５）。
【００６０】
（５）次に、識別番号記憶テーブル１１０とアクセス順序記憶テーブル１１１とを参照して、整列効果推定テーブル１１３の値を元に乱数集合格納テーブル１０９の値を整列する。なお、ここでの処理の具体例についてを図９を参照して後述する（ステップ６０６）。
【００６１】
（６）ステップ６０６の処理の終了後、整列状態フラグ１１２を「整列済」にし、ここでの処理を終了する。この処理を行うことにより、ステップ６０８の処理で待ち状態になっていた他の乱数取得部１０４も、待ち状態から解放されて処理を終了する（ステップ６０７、６０９）。
【００６２】
次に、前述で説明した本発明の実施形態におけるシミュレーション計算システム１１４及び乱数生成システム１０１の処理動作の具体例について、図７〜図１０を参照して説明する。
【００６３】
図７は乱数集合生成部１０２が乱数生成の要求を受信し、乱数集合を生成し、整列効果推定部１０３での処理を実行する例を示す図である。図７に示す例は、図３により説明したフローのステップ３０２〜３０４での処理を具体的に示したものである。
【００６４】
ステップ３０２の処理において、発生させる乱数の個数Ｎ＝８、入力データ数Ｄ＝１０及び並列実行数Ｐ＝４を、乱数生成用システム接続部１２２を介して乱数生成要求部１１６から受信する。
【００６５】
ステップ３０３の処理において、ステップ３０２の処理で得た乱数の個数Ｎ＝８をもとに８個の乱数を生成する。図７に示す具体例で生成する乱数は、［０，１］区間の乱数、すなわち、生成する乱数の値をｘとしたとき、０≦ｘ≦１を満たす値の乱数であり、これら８個の乱数は、乱数集合格納テーブル１０９に格納される。図７に示す例では、８個の乱数として、［0.53，0.31，0.87，0.16，0.90，0.76，0.15，0.27］が生成されている。
【００６６】
そして、ステップ３０４の処理において、まず、整列効果推定部１０３での処理を実行する。図７に示す具体例では、「昇順」または「ＳＭＰ昇順」の整列規則のいずれかについて、整列の効果の有無を確認している。そして、ここでは、［０，１］区間の乱数を生成する乱数生成方法を利用しているものとしているため、入力データ数を乱数の個数で割った値が２未満であれば、整列したときに乱数が必ず１箇所以上で連続となるといえる。よって、２未満になった場合、整列を行うことにより性能向上が見込めるものとして扱う。なお、前述で挙げた「ＳＭＰ昇順」の条件は、ハードウェアの特性に従って変化するものであり、一例として挙げたものである。
【００６７】
次に、整列により性能向上が見込めるならば、並列実行数が１であれば整列効果推定テーブル１１３が持つ「昇順」の要素を「効果あり」に設定し、並列実行数が複数であれば整列効果推定テーブル１１３が持つ「ＳＭＰ昇順」の要素を「効果あり」に設定する。ここで「昇順」とは、乱数集合格納テーブル１０９全体を単純に昇順に並べ替えるという逐次処理に向いた整列規則であり、「ＳＭＰ昇順」とは、識別番号が０である乱数参照部１１７のアクセス順に昇順に整列し、次に識別番号が１である乱数参照部１１７のアクセス順に整列するということを、識別番号が２以上の場合にも同様に繰り返すという並列処理に向いた整列規則である。なお、「ＳＭＰ昇順」による整列規則は、本発明で定義した整列規則である。
【００６８】
具体的に前述の計算式に値を代入すると、乱数の個数がＮ＝８であり、入力データ数がＤ＝１０であるので、１０／８＜２となり、かつ、並列実行数がＰ＝４であるので、４＞１となり、整列効果推定テーブル１１３が持つ「ＳＭＰ昇順」の要素に「効果あり」を設定する。
【００６９】
並列実行数がＰ＝４で、乱数の個数がＮ＝８の場合に「ＳＭＰ昇順」の規則を用いると、識別番号が０である乱数参照部１１７が１番目にアクセスした要素が１番小さい値になり、識別番号が０である乱数参照部１１７が２番目にアクセスした要素が２番目に小さい値になり、識別番号が１である乱数参照部１１７が１番目にアクセスした要素が３番目に小さい値になり、最終的に識別番号が３である乱数参照部１１７が２番目にアクセスした要素が最も大きい値となる。
【００７０】
図８は計算回数ｃ＝１のときに乱数取得部１０４が実行するアクセス情報記録部での処理の具体例を説明する図である。図８に示す具体例は、図５により説明したフローのステップ５０３〜５０５の処理を具体的に示したものであり、識別番号０である乱数取得部１０４が１番目に、整列前の乱数集合格納テーブル１０９から要素番号ｎ＝１の値を取得する場合の処理の例を示す。この前提から、乱数取得部１０４が持つ識別番号１０７の値は、ｐ＝０となっており、また、アクセス回数記憶カウンタ１０８の値は、ｔ＝１となっている。また、図８に示す具体例は、図７の場合と同様に、並列実行数Ｐ＝４、発生させた乱数の個数Ｎ＝８とする。また、並列化された各乱数参照部１１７は、乱数集合格納テーブル１０９をサイクリックに参照するものとする。サイクリックに参照するとは、乱数参照部１１７に０〜Ｐ−１の範囲で識別番号ｐを割り当て、識別番号ｐの乱数参照部１１７がｎ回目に乱数集合格納テーブル１０９を参照するとき、要素番号（ｎ−１）＊Ｐ＋（ｐ＋１）の値を参照することを示す。
【００７１】
ステップ５０３の処理において、乱数取得部１０４が持つ識別番号１０７の値ｐ＝０を、識別番号記憶テーブル１１０の要素番号ｎ＝１の要素へコピーする。
【００７２】
ステップ５０４の処理において、乱数取得部１０４が持つ、アクセス回数記憶カウンタ１０８の値ｔ＝１を、アクセス順序記憶テーブル１１１の要素番号ｎ＝１の要素へコピーする。
【００７３】
ステップ５０５の処理において、この乱数取得部１０４が持つアクセス回数記憶カウンタ１０８の値ｔ＝１を１増加させてｔ＝２とする。
【００７４】
前述で説明した図８でのアクセス情報記録部１０５での処理が完了した結果、識別番号記憶テーブル１１０は、後述する図９に示す識別番号記憶テーブル１１０のようになり、アクセス順序記憶テーブル１１１は、図９におけるアクセス順序記憶テーブル１１１のようになる。
【００７５】
図９は計算回数ｃが初めて２になったときに乱数取得部１０４が実行する整列処理部１０６での処理の具体例を説明する図である。この例の場合も、前述で説明した具体例の場合と同様に、並列実行数Ｐ＝４であり、乱数の個数Ｎ＝８であるとする。また、図９に示す例は、整列効果推定テーブル１１３が持つ「ＳＭＰ昇順」に「効果あり」が設定されていて、並列化された各乱数参照部１１７が乱数集合格納テーブル１０９をサイクリックに参照し、識別番号記憶テーブル１１０及びアクセス順序記憶テーブル１１１の値が図９のように設定されているものとする。
【００７６】
図９に示す具体例において、「ＳＭＰ昇順」の整列規則を用いると、識別番号が０である乱数参照部１１７が１番目にアクセスした要素が１番小さい値になり、識別番号が０である乱数参照部１１７が２番目にアクセスした要素が２番目に小さい値になり、識別番号が１である乱数参照部１１７が１番目にアクセスした要素が３番目に小さい値になり、最終的に識別番号が３である乱数参照部１１７が２番目にアクセスした要素が最も大きい値になるよう整列される。乱数集合格納テーブル１０９を「ＳＭＰ昇順」の規則で整列すると、整列後の乱数集合格納テーブル１０９は、９０５として示すようなものになる。
【００７７】
図１０は乱数取得部１０４での取得した乱数を出力する処理とシミュレーション計算システム１１４での乱数を参照して計算を行う処理との具体例を説明する図である。ここで説明する具体例は、整列後の乱数集合に対して、識別番号１０７がｐ＝０である乱数取得部１０４での図４に示すステップ４０７の処理及び乱数取得部１０４から乱数を受信した後のシミュレーション計算システム１１４の図２に示すステップ２０８〜２１０の処理の具体例である。また、図１０に示す具体例は、図８により説明した例と同様に、並列実行時の処理数Ｐ＝４、乱数集合生成を１回要求する度に生成する乱数の個数Ｎ＝８とし、並列化された各乱数参照部１１７は、乱数集合格納テーブル１０９をサイクリックに参照するものとする。
【００７８】
図１０において、ステップ４０７の処理を行う乱数取得部１０４は、整列された乱数を格納している乱数集合格納テーブル１０９の要素番号ｎ（図示例の場合、要素番号１番）の値に対して１回目の取得を行い、その乱数の値を乱数取得用システム接続部１２３を介して乱数参照部１１７に送信する。
【００７９】
ステップ２０８に対応する処理を行う乱数参照部１１７は、乱数取得用システム接続部１２３を介して、乱数の値を乱数取得部１０４から受信する。
【００８０】
ステップ２０９に対応する処理を行うデータ取得部１１８は、乱数参照部１１７から乱数の値を受け取り、その乱数をもとに入力データへのアクセス先を求める。アクセス先を求めるための計算式１００６は、図１０に示す例では、ｄ＝ｘ＊Ｄ＋１（端数切捨て）としている。ここで、ｄは参照する入力データ組格納テーブル１１５の要素番号、ｘは取得した乱数値、Ｄは入力データ組格納テーブル１１５の要素数を示す。ここで説明している例では、計算式１００６による計算結果はｄ＝１．５となり、端数の切捨てによりｄ＝１となる。よって、入力データ組格納テーブル１１５の計算中の組の１番目の要素を参照して、これをデータ取得部１１８のデータ取得結果とする。
【００８１】
ステップ２１０に対応する処理を行う計算部１１９は、データ取得部１１８から入力データの値を受け取り、シミュレーション固有の計算を行う。
【００８２】
次のシミュレーション計算のために、乱数取得部１０４は、続いてステップ４０７の処理を行い、乱数集合格納テーブル１０９から要素番号５番の乱数の取得を行って乱数参照部１１７に送信する。乱数参照部１１７、データ取得部１１８及び計算部１１９は、前述下場合と同様にして入力データを取得し、シミュレーション固有の計算を行う。
【００８３】
このとき、整列処理により、乱数集合格納テーブル１０９の要素番号ｎ＝５の乱数の値は、乱数集合格納テーブル１０９の要素番号１の乱数の値と最も近い値が格納されていて、アクセス先を求めるための計算式１００６の計算によっても近い値が現れる。これにより、アクセスの局所性を向上させることができる。
【００８４】
前述した本発明の実施形態における各処理は、処理プログラムとして構成することができ、この処理プログラムは、ＨＤ、ＤＡＴ、ＦＤ、ＭＯ、ＤＶＤ−ＲＯＭ、ＣＤ−ＲＯＭ等の記録媒体に格納して提供することができる。
【００８５】
前述した本発明の実施形態は、シミュレーション計算システムが、乱数による入力データの抽出及び複数の部分シミュレーション処理部での計算部分の処理が独立であって、この部分の並列化が可能なものであるとして説明したが、本発明は、シミュレーション計算システムが、逐次処理の計算機内に構築された場合にも適用することができる。
【図面の簡単な説明】
【００８６】
【図１】本発明の一実施形態による乱数生成システムとそれを利用するシミュレーション計算システムを実装した並列計算機との主記憶装置上の構成を示すブロック図である。
【図２】乱数生成システム１０１を利用するシミュレーション計算システム１１４での処理動作を説明するフローチャートである。
【図３】図２に示すフローのステップ２０３の処理で実行される乱数集合生成部１０２での処理の詳細を説明するフローチャートである。
【図４】乱数取得部での処理の詳細を説明するフローチャートである。
【図５】図４に示すフローのステップ４０４のアクセス情報記録部での処理の詳細を説明するフローチャートである。
【図６】図４に示すフローのステップ４０６の整列処理部での処理の詳細を説明するフローチャートである。
【図７】乱数集合生成部が乱数生成の要求を受信し、乱数集合を生成し、整列効果推定部での処理を実行する例を示す図である。
【図８】計算回数ｃ＝１のときに乱数取得部が実行するアクセス実施形態記録部での処理の具体例を説明する図である。
【図９】計算回数ｃが初めて２になったときに乱数取得部が実行する整列処理部での処理の具体例を説明する図である。
【図１０】乱数取得部での取得した乱数を出力する処理とシミュレーション計算システム１１４での乱数を参照して計算を行う処理との具体例を説明する図である。
【符号の説明】
【００８７】
１０１  乱数生成システム
１０２  乱数集合生成部
１０３  整列効果推定部
１０４  乱数取得部
１０５  アクセス情報記録部
１０６  整列処理部
１０７  識別番号
１０８  アクセス回数記憶カウンタ
１０９  乱数集合格納テーブル
１１０  識別番号記憶テーブル
１１１  アクセス順序記憶テーブル
１１２  整列状態フラグ
１１３  整列効果推定テーブル
１１４  シミュレーション計算システム
１１５  入力データ組格納テーブル
１１６  乱数生成要求部
１１７  乱数参照部
１１８  データ取得部
１１９  計算部
１２０  入力部
１２１  出力部
１２２  乱数生成用システム接続部
１２３  乱数取得用システム接続部
１２４  部分シミュレーション処理部
【図１】
2006155168.tif 000003
【図２】
2006155168.tif 000004
【図３】
2006155168.tif 000005
【図４】
2006155168.tif 000006
【図５】
2006155168.tif 000007
【図６】
2006155168.tif 000008
【図７】
2006155168.tif 000009
【図８】
2006155168.tif 000010
【図９】
2006155168.tif 000011
【図１０】
2006155168.tif 000012