(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0014】
(実施形態1)
以下、本発明の実施形態1における、乱数処理装置、乱数処理方法、及びプログラムについて、
図1〜
図4を参照しながら説明する。
【0015】
[乱数処理装置]
最初に
図1を用いて、本実施形態1における乱数処理装置の構成について説明する。
図1は、本発明の実施形態1における乱数処理装置の構成を示すブロック図である。
図1に示す本実施形態1における乱数処理装置1は、アプリケーションプログラム2に擬似乱数を提供する装置であり、キャッシュ生成部3と、乱数生成部4と、キャッシュ読込部5と、を備えている。
【0016】
乱数生成部4は、乱数データを生成する。また、キャッシュ生成部3は、乱数生成部4に、第1の乱数データをキャッシュデータとして予め生成させる。そして、キャッシュ読込部5は、アプリケーションプログラム2の要求に応じて、第1の乱数データを読み込むとともに第2乱数データを乱数生成部4に生成させ、第1の乱数データと第2の乱数データとを組み合わせてアプリケーションプログラム2に提供する。
【0017】
このように、乱数処理装置1は、アプリケーションプログラム2へ提供する擬似乱数として、キャッシュ読込部5の要求に応じて乱数生成部4によって生成された第2の乱数データだけでなく、予め生成されていたキャッシュデータである第1の乱数データも利用する。このため、乱数処理装置1によれば、アプリケーションプログラム2へ高速に擬似乱数を提供することができる。なお、この乱数生成部4で使用される個々の乱数生成アルゴリズムは、従来から広く使用されている乱数生成アルゴリズムを使用することもできるし、他の新たな乱数生成アルゴリズムを使用することもできる。
【0018】
ここで、乱数処理装置1の構成を更に具体的に説明する。
図1に示すように、本実施形態では、乱数処理装置1は、キャッシュ生成部3、乱数生成部4、キャッシュ読込部5に加え、メモリ6と、記憶装置7と、をさらに備えている。なお、以下の説明において、第1の乱数データを「キャッシュ乱数データ」、第2の乱数データを「算出乱数データ」とする。また、第1の乱数データ及び第2の乱数データは複数のブロックから構成されている。
【0019】
記憶装置7は、ハードディスクドライブ(HDD)等であり、キャッシュ生成部3の指示によって生成されたキャッシュ乱数データのブロックをキャッシュデータとして格納する補助記憶キャッシュ保存領域を有している。この記憶装置7に格納された各ブロックは、ブロック番号及び乱数の種と関連付けられている。また、メモリ6は、記憶装置7の補助記憶キャッシュ保存領域から読み出されたキャッシュ乱数データのブロックをキャッシュデータとして格納する主記憶キャッシュ保存領域を有しており、キャッシュ乱数データのブロックを直ちにアプリケーションプログラム2へと提供する。
【0020】
キャッシュ生成部3は、アプリケーションプログラム2において乱数を使用する前に、キャッシュ乱数データを乱数生成部4に予め生成させる。より詳細には、キャッシュ生成部3は、アプリケーションプログラム2から、乱数の種と、乱数データに関するデータの総量(必要データ量)とを情報として受け取る。すると、キャッシュ生成部3は、まず、生成すべきブロックのブロック番号を特定する。そして、キャッシュ生成部3は、特定されたブロック番号と乱数の種とに基づいて、乱数生成部4に対して擬似乱数生成アルゴリズムにより複数のブロックを生成させる。また、キャッシュ生成部3は、この生成されたキャッシュ乱数データをブロック番号及び乱数の種とともに記憶装置7の補助記憶キャッシュ保存領域に格納する。
【0021】
また、このキャッシュ生成部3の指示により生成された複数のブロックがキャッシュ乱数データである。また、キャッシュ生成部3は、予め設定された算出乱数データとキャッシュ乱数データとの利用比率に基づいて、生成すべきブロックのブロック番号を特定する。
【0022】
乱数生成部4は、算出乱数データを生成する。より具体的には、乱数生成部4は、与えられた乱数の種とブロック番号とを組み合わせて擬似乱数生成アルゴリズムの種としブロックを生成する。なお、キャッシュ読込部5の指示により生成されるブロックが算出乱数データを構成する。
【0023】
キャッシュ読込部5は、アプリケーションプログラム2からの要求に応じて、若いブロック番号から順に算出乱数データまたはキャッシュ乱数データのブロックをアプリケーションプログラム2へと提供する。なお、キャッシュ読込部5は、アプリケーションプログラム2から、キャッシュ生成部3に与えられものと同じ乱数の種と、乱数データに関するデータの総量(必要データ量)とを情報として受け取る。
【0024】
より具体的には、キャッシュ読込部5は、アプリケーションプログラム2に提供すべきブロック番号のブロックがメモリ6の主記憶キャッシュ保存領域にあれば、そのブロックをアプリケーションプログラム2に提供する。メモリ6の主記憶キャッシュ保存領域に当該ブロック番号のブロックがなければ、当該ブロック番号のブロックを生成するよう乱数生成部4に要求する。そして、キャッシュ読込部5は、乱数生成部4によって生成されたブロックをアプリケーションプログラム2に提供する。
【0025】
また、キャッシュ読込部5は、アプリケーションプログラム2への乱数データ提供時において、バックグラウンドの処理として記憶装置7の補助記憶キャッシュ保存領域に格納されているキャッシュ乱数データを、メモリ6の主記憶キャッシュ保存領域へと読み込む。
【0026】
[乱数処理装置の動作]
次に、本発明の実施形態における乱数処理装置1の動作について、
図1を適宜参酌しつつ
図2〜
図4を用いて説明する。なお、本実施形態1では、乱数処理装置1を動作させることによって乱数処理方法が実施されるため、本実施形態における乱数処理方法の説明は以下の乱数処理装置1の動作説明に代える。
【0027】
まず、
図2を用いて、乱数処理装置1の動作全体について説明する。
図2は、乱数処理装置1の動作全体の概要を示すフロー図である。
図2に示すように、まず、キャッシュ生成部3は、乱数生成部4に対してキャッシュ乱数データを予め生成させ、この乱数生成部4が予め生成したキャッシュ乱数データを記憶装置7の補助記憶キャッシュ保存領域へと格納する(ステップS1)。
【0028】
より詳細に説明すると、ステップS1では、まず、アプリケーションプログラム2が、キャッシュ生成部3に対して、乱数の種、及び必要データ量を情報として与え、キャッシュ乱数データを生成するよう要求すると、キャッシュ生成部3はこの要求を受け付ける。
【0029】
次にステップS1では、キャッシュ生成部3は、生成すべきブロックのブロック番号を特定し、このブロック番号と乱数の種とを用いてキャッシュ乱数データのブロックを乱数生成部4に生成させる。このブロック番号は、予め設定された算出乱数データとキャッシュ乱数データとの利用比率(設定値)に基づいて特定される。なお、この利用比率は、例えば、乱数生成部4が算出乱数データの各ブロックを生成する際に掛かる時間と、キャッシュ読込部5が記憶装置7からメモリ6へキャッシュ乱数データの各ブロックを読み込む際に掛かる時間とに基づいて設定することができる。
【0030】
さらにステップS1では、キャッシュ生成部3は、乱数生成部4が生成したキャッシュ乱数データをブロック番号と乱数の種とに関連付けて記憶装置7の補助記憶キャッシュ保存領域に保存する。なお、キャッシュ生成部3は、乱数生成部4に対して上記乱数の種を用いて必要データ量の全ての乱数データをブロック番号順に生成させ、特定したブロック番号に対応するブロックのみを記憶装置7に格納してもよい。
【0031】
続いて、キャッシュ読込部5は、アプリケーションプログラム2が乱数データの使用のために乱数データを要求すると、この要求を受け付ける(ステップS2)。
【0032】
次に、キャッシュ読込部5は、乱数生成部4に算出乱数データの生成を行わせ、キャッシュ乱数データと算出乱数データとを組み合わせて、アプリケーションプログラム2へ擬似乱数を提供する(ステップS3)。このステップS3は、アプリケーションプログラム2が要求する必要データ量の乱数データがアプリケーションプログラム2へ提供されるまで行われる。
【0033】
ここで、ステップS3について、
図3を参照しつつ詳細に説明する。
図3は、本実施形態の乱数処理装置1の動作の一部を示すフロー図である。
【0034】
図3に示すように、まず、キャッシュ読込部5は、アプリケーションプログラム2から乱数データの要求を受け付けると、若いブロック番号から順にブロック番号を設定し、該当するブロック番号が付与されたキャッシュ乱数データのブロックがメモリ6の主記憶キャッシュ保存領域に存在しているか否かを確認する(ステップS31)。なお、アプリケーションプログラム2は、乱数データを要求する際、キャッシュ読込部5に対し、キャッシュ生成部3に対して与えたものと同じ、乱数の種、及び必要データ量を情報として与える。
【0035】
メモリ6の主記憶キャッシュ保存領域にキャッシュ乱数データのブロックが存在する場合は、キャッシュ読込部5は、そのキャッシュ乱数データをアプリケーションプログラム2へと提供する(ステップS32)。
【0036】
メモリ6の主記憶キャッシュ保存領域に当該ブロックが存在しない場合、キャッシュ読込部5は、乱数生成部4に乱数の種とブロック番号を与え、乱数生成部4は、これらを擬似乱数生成アルゴリズムの種として算出乱数データのブロックを生成する(ステップS33)。そして、キャッシュ読込部5は、この生成されたブロックをアプリケーションプログラム2へと提供する(ステップS34)。
【0037】
以上のステップS32又はステップS34が終了すると、キャッシュ読込部5は、アプリケーションプログラム2に対して必要データ量の乱数データを提供したか判断する(ステップS35)。そして、まだ全てのデータが提供されていなければ、キャッシュ読込部5は上記処理を再度繰り返す。また、全ての乱数データがアプリケーションプログラム2へ提供されていれば、キャッシュ読込部5は処理を終了する。
【0038】
また、キャッシュ読込部5は、ステップS31〜S35の実行時に、そのバックグラウンドの処理として、キャッシュ乱数データを記憶装置7からメモリ6に読み込む処理をする。
【0039】
この処理について
図4を参照しつつ詳細に説明する。
図4は本実施形態1における乱数処理装置の動作の一部を示すフロー図である。
図4に示すように、まず、キャッシュ読込部5は、条件に合致するキャッシュ乱数データのブロックを決定する(ステップS41)。この条件とは、
・記憶装置7の補助記憶キャッシュ保存領域に存在しているブロックであること、
・現在乱数生成部4で生成されているブロックよりもブロック番号が大きいこと、
・予め設定された算出乱数データとキャッシュ乱数データとの利用比率に基づいて当該ブロックが必要となる瞬間にメモリ6への転送が完了できるブロックであること、
の3つである。
【0040】
以上の条件に合致するブロックが決定されると、キャッシュ読込部5は、そのブロックを記憶装置7の補助記憶キャッシュ保存領域から読み出し、メモリ6の主記憶キャッシュ保存領域に書き込む(ステップS42)。
【0041】
なお、ステップS41〜S42は、記憶装置7の補助記憶キャッシュ保存領域がビジー状態でなく、また、メモリ6の主記憶キャッシュ保存領域に空きがある場合は継続的に行われる。
【0042】
以上のように本実施形態1によれば、乱数生成部4によって生成された算出乱数データだけでなく、予め生成していたキャッシュ乱数データもアプリケーションプログラム2へ提供される。このため、本実施形態1によれば、高速に乱数データをアプリケーションプログラム2へと提供することができる。
【0043】
[プログラム]
本実施形態1におけるプログラムは、コンピュータに、
図2に示すステップS1〜S3、
図3に示すステップS31〜S35、
図4に示すステップS41〜S42を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし実行することによって、本実施形態における乱数処理装置1と乱数処理方法とを実現することができる。この場合、コンピュータのCPU(Central Processing Unit)は、キャッシュ生成部3、乱数生成部4、キャッシュ読込部5として機能し、処理を行なう。
【0044】
(実施形態2)
次に本発明の実施形態2について、以下、説明する。なお、実施形態1と異なる部分は、キャッシュ生成部3が乱数生成部4に生成させるブロックのブロック番号の特定方法であるため、この部分を中心に説明を行い、その他の部分については説明を省略する。
【0045】
本実施形態2では、算出乱数データとキャッシュ乱数データの利用比率が予め設定されていない。この場合における記憶装置7に格納するキャッシュ乱数データのブロックの特定方法について、キャッシュ生成部3の動作に基づいて
図5を参照しつつ以下に説明する。なお、以下の説明では、記憶装置7がビジーでない状態の時間をx、キャッシュ生成部3によって1つのブロックを生成するのに掛かる時間をyとする。
【0046】
図5に示すように、まず、キャッシュ生成部3は、アプリケーションプログラム2から、キャッシュ乱数データの生成要求を受け付ける(ステップS11)。次に、キャッシュ生成部3は、xの初期値を0とする(ステップS12)。
【0047】
次に、キャッシュ生成部3は、乱数生成部4に対して、アプリケーションプログラム2から与えられた乱数の種及び必要データ量に基づいて、若いブロック番号から順にブロックを生成させる(ステップS13)。
【0048】
次に、ブロックの生成が終了したとき、キャッシュ生成部3は、記憶装置7がビジー状態か否かを確認する(ステップS14)。記憶装置7がビジー状態のとき、キャッシュ生成部3は、当該ブロックを破棄して(ステップS15)、ステップS13から同様の処理を繰り返す。
【0049】
一方、各ブロックの生成が終了したときに記憶装置7がビジー状態でない場合は、キャッシュ生成部3は、記憶装置7への別のブロックの書き込み処理が終了したのが当該ブロックの生成中であるか否かを判断する(ステップS16)。
【0050】
書き込み処理が終了したのが当該ブロックの生成中である場合、キャッシュ生成部3は、別のブロックの書き込みが終了した時刻t
2と当該ブロックの生成が終了した時刻t
1との差分(t
1-t
2)をxに加算する(ステップS17)。
【0051】
そして、キャッシュ生成部3は、ステップS17によって算出されたxがy以上か否かを判断する(ステップS18)。ステップS18において、xがy以上でない場合、キャッシュ生成部3は、当該ブロックを破棄し(ステップS15)、ステップS13から同様の処理を繰り返す。ステップS18においてxがy以上の場合は、キャッシュ生成部3は、当該ブロックを記憶装置7の補助記憶キャッシュ保存領域へと書き込む(ステップS20)。
【0052】
一方、ステップS16において書き込み処理が終了したのが当該ブロックの生成中でない場合、キャッシュ生成部3は、当該ブロックの生成に掛かった時間yをxに加算する(ステップS19)。そして、当該ブロックを記憶装置7の補助記憶キャッシュ保存領域へ書き込む(ステップS20)。
【0053】
次に、キャッシュ生成部3は、乱数データが必要データ量だけ生成されたか否かを判断し(ステップS21)、必要データ量の乱数データがまだ生成されていない場合、xからyを減算して(ステップS22)、再度ステップS13から処理を繰り返す。また、ステップS21において必要データ量の乱数データの生成が終了した場合は当該処理を終了する。なお、記憶装置7への書き込みに関して、キャッシュされるブロックがOS又はRAIDコントローラによって遅延書き込みの対象とされてしまうと正確に性能(時間x、y)を計測できなくなる。したがって、本実施形態2における乱数処理装置を実現するコンピュータでは、これらの機能は無効にしておく必要がある。
【0054】
以上、本実施形態2によれば、上記実施形態1によって得られる効果に加え、利用比率が予め設定されていない場合であっても、キャッシュ生成部3が記憶装置7に格納すべきブロックを特定することができる。
【0055】
[プログラム]
本実施形態2におけるプログラムは、実施形態1におけるステップに加え、
図5に示すステップS11〜S22を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし実行することによって、本実施形態2における乱数処理装置1と乱数処理方法とを実現することができる。
【0056】
[コンピュータ]
ここで、本実施形態1及び2におけるプログラムを実行することによって、乱数処理装置を実現するコンピュータについて図を用いて説明する。
図6は、本発明の実施形態における乱数処理装置を実現するコンピュータの一例を示すブロック図である。
【0057】
図6に示すように、コンピュータ110は、CPU111と、メモリ6と、記憶装置7と、入力インターフェイス114と、表示コントローラ115と、データリーダ/ライタ116と、通信インターフェイス117とを備える。これらの各部は、バス121を介して、互いにデータ通信可能に接続される。
【0058】
CPU111は、記憶装置7に格納された、本実施形態におけるプログラム(コード)をメモリ6に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ6は、典型的には、DRAM(Dynamic Random Access Memory)等の揮発性の記憶装置である。また、本実施形態におけるプログラムは、コンピュータ読み取り可能な記録媒体120に格納された状態で提供される。なお、本実施形態におけるプログラムは、通信インターフェイス117を介して接続されたインターネット上で流通するものであっても良い。
【0059】
また、記憶装置7の具体例としては、ハードディスクドライブ(HDD)の他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス114は、CPU111と、キーボード及びマウスといった入力機器118との間のデータ伝送を仲介する。表示コントローラ115は、ディスプレイ装置119と接続され、ディスプレイ装置119での表示を制御する。データリーダ/ライタ116は、CPU111と記録媒体120との間のデータ伝送を仲介し、記録媒体120からのプログラムの読み出し、及びコンピュータ110における処理結果の記録媒体120への書き込みを実行する。通信インターフェイス117は、CPU111と、他のコンピュータとの間のデータ伝送を仲介する。
【0060】
また、記録媒体120の具体例としては、CF(Compact Flash(登録商標))及びSD(Secure Digital)等の汎用的な半導体記憶デバイス、フレキシブルディスク(Flexible Disk)等の磁気記憶媒体、又はCD−ROM(Compact Disk Read Only Memory)などの光学記憶媒体が挙げられる。
【0061】
なお、本実施形態1及び2では、CPUが乱数生成部4として機能するとしているが、乱数データを生成できるものであれば、特にCPUに限定されるものではない。例えば、GPU(Graphics Processing Unit)、専用の乱数データ生成ハードウェア、その他の演算処理装置、これらを組み合わせたシステムが乱数生成部4として機能してもよい。また、上記CPU111、及び記憶装置7の数は特に限定されるものではない。
【0062】
[変形例1]
上記各実施形態では、アプリケーションプログラム2がキャッシュ読込部5に要求する乱数データのデータ量と、アプリケーションプログラム2がキャッシュ生成部3に要求する乱数データのデータ量とを同じとして説明したが、これらは異なっていてもよい。例えば、キャッシュ読込部5に要求する乱数データのデータ量が、キャッシュ生成部3に要求した乱数データのデータ量よりも小さい場合、そのデータ量を超える部分のキャッシュ乱数データのブロックを単に利用しなければよい。また、これと逆の場合、すなわち、キャッシュ読込部5に要求する乱数データのデータ量が、キャッシュ生成部3に要求した乱数データのデータ量よりも大きい場合は、キャッシュ乱数データの不足分を全て乱数生成部4にて生成すればよい。
【0063】
[変形例2]
また、上記各実施形態では、必要とする乱数データのキャッシュを全て作成すると説明したが、高速な乱数データ生成が必要な場所が一部に限られている場合、その一部に対応するキャッシュ乱数データのみをキャッシュ生成部3が乱数生成部4に生成させてもよい。このようにすることで、キャッシュ乱数データの生成時間を減少させることもできる。
【0064】
例えば、シミュレーションなどの分野において、データを蓄積して学習していくようなアルゴリズムによるシミュレーションを行う場合、シミュレーションの開始直後は学習データが少なく高速に処理できるため、高速な乱数データ生成が要求される。一方、シミュレーションが進むにつれ、学習データが蓄積されて処理が遅くなり開始直後と比較して高速な乱数データが要求されない場面がある。このような場合は、高速な乱数データ生成が要求されるシミュレーション開始直後の分のみキャッシュ乱数データを生成すればよい。
【0065】
[変形例3]
また、上記各実施形態において、乱数処理装置1を実現するコンピュータのCPUの数、コア数、スレッドの数については、1つに限定されない。乱数処理装置1を実現するコンピュータ全体で利用できるスレッド数が複数になる場合、単純にCPU処理能力がその分倍増すると考えれば、各実施形態で述べた技術は複数のCPUスレッドに対応することができる。また、同様に、乱数処理装置1を実現するコンピュータのストレージ(記憶装置7)の数に関しても1つに限定されない。バックグラウンドでのキャッシュ読込処理が複数同時に行われるように、キャッシュ読込部5を拡張することで容易に複数のストレージに対応することができる。
【0066】
[変形例4]
また、上記各実施形態では、乱数生成部4は乱数の種とブロック番号とで擬似乱数アルゴリズムを初期化して乱数データを生成している。この方法では、データの再現性はあるが、ブロックごとに擬似乱数アルゴリズムの種が異なることになる。しかし、計算の精度の問題やその他の都合により、同一の種からの擬似乱数アルゴリズムによる連続した乱数データが必要となる場合がある。この場合、キャッシュ生成部3では、キャッシュ乱数データを作成する際、先頭から全ての乱数データを乱数生成部4に計算させ、キャッシュする必要のあるブロックのみを記憶装置7の補助記憶キャッシュ保存領域に書き込むことで連続した乱数データを利用できる。
【0067】
[変形例5]
また、上記各実施形態は、特願2011−031611に記載の「仮想ファイルシステム」に組み合わせることができる。この仮想ファイルシステムは、ストレージシステムなどの性能評価に利用され、ファイルのデータを動的にCPUによって計算することで、処理の高速化を図っている。この仮想ファイルシステムに、本実施形態1及び2の技術を組み合わせた場合は、よりいっそうの処理の高速化が図られると考えられる。
【0068】
特に、上記仮想ファイルシステムと上記各実施形態の技術との組み合わせは、重複排除を行う機能が、性能評価の対象となるストレージシステム、又は、評価に用いるバックアップソフトに備わっている場合に関して、以下の利点がある。
【0069】
一般に、重複排除機能を持つシステムにおいて、非重複書き込み性能と重複書き込み性能とを評価する場合、まず、新しい乱数データファイルがストレージに書き込まれ(非重複の書き込み)、次に、同一の乱数データファイルがもう一度ストレージに書き込まれる(重複の書き込み)。
【0070】
重複の書き込みは、データの重複が排除されることで実際にストレージに書き込むデータが少なくなるため、非重複の書き込みに比べて短時間で処理することができる。このように、重複書き込みの場合は、バックアップ先への書き込み処理が高速になるため、バックアップ元からの読み込み処理に関しても高速性が要求される。
【0071】
この高速性が要求される読み込み処理に対して、本実施形態1又は2の技術を利用することができる。すなわち、1回目の書き込みで乱数データを計算する際に、計算されたブロックが(必要なブロックについて)、キャッシュデータとして補助記憶キャッシュ保存領域に書き込まれるようにすればよい。この結果、高速性が要求される2回目の書き込み時において、本実施形態1又は2によって高速に乱数データを生成でき、乱数データの作成時間を実質上ゼロとすることができる。
【0072】
また、上記仮想ファイルシステムにおいて、バックアップソフト内で重複排除を行う場合、重複データの排除処理が追加で必要となるため、重複の書き込みは非重複の書き込みに比べてCPUの負荷が高くなる。これにより、重複の書き込みでは、乱数生成システムに対してCPUリソースの割り当てが少なくなるため、重複データの排除処理を行わない非重複の書き込みに比べて高速性が要求される。
【0073】
したがって、上記仮想ファイルシステムと本実施形態1又は2の技術とを組み合わせ、1回目の書き込みで乱数データを計算する際に、計算されたブロックが(必要なブロックについて)、キャッシュデータとして補助記憶キャッシュ保存領域に書き込まれるようにすればよい。この結果、高速性が必要な2回目の書き込み時において、本実施形態1又は2によって高速に乱数データを生成でき、また、キャッシュデータの事前生成が不要となるために、キャッシュデータの生成時間を実質上ゼロとすることができる。
【0074】
また、補助記憶キャッシュ保存領域に書き込まれたキャッシュデータが削除されても、乱数生成部によって乱数データを生成できるため、ファイルの再現性は確保できる、よって、利用率の低いキャッシュデータなどを削除することにより、キャッシュデータのサイズを小さく抑えることもできる。
【0075】
[変形例6]
また、上記各実施形態に記載の乱数処理装置1をモンテカルロ法などの乱数を用いたシミュレーションに利用することが考えられる。モンテカルロ法では乱数精度と試行回数とが重要であるが、特に試行回数を多くする場合、乱数アルゴリズムの計算コストが課題となる。これに対して、モンテカルロ法と乱数計算を高速化する本実施形態1又は2の乱数処理装置とを組み合わせれば、同じ計算時間で試行回数を増やすことが可能となり、計算コストが低減される。
【0076】
[変形例7]
また、上記各実施形態における乱数生成部4で使用されるアルゴリズムは、特定の種から同一データを再現できるデータ生成アルゴリズムであればよい。例えば、使用されるデータ生成アルゴリズムは、辞書データ、又は文法データ等を用いて自然言語風の擬似データを生成するアルゴリズムでも良いし、図形データ等を組み合わせて画像データを作成するアルゴリズムでも良い。つまり、本実施形態1及び2において、擬似乱数及び乱数データは、ランダムな数字の列に限定されるものではない。
【実施例】
【0077】
(実施例1)
上述した実施形態1において、記憶装置7へと格納されるブロックのブロック番号の特定方法について実施例1として説明する。例えば、予め設定した算出乱数データとキャッシュ乱数データとの利用比率が4:1の場合、キャッシュ生成部3は、5(=4+1)ブロックにつき1つのブロック、すなわち、ブロック番号0,5,10,15・・・に対応するブロックを記憶装置7に格納する。
【0078】
また、アプリケーションプログラム2から要求された必要データ量が32GiBであって各ブロックのサイズが1MiBの場合、アプリケーションプログラム2に必要なブロック数は32768個である。このため、キャッシュ生成部3は、キャッシュ乱数データのブロックを、ブロック番号32765までの6554個、乱数生成部4に生成させる。
【0079】
以上のようにしてアプリケーションプログラム2へと提供される乱数データの各ブロックのタイムラインの具体例を
図7に示す。
図7の横軸の目盛は、1ブロックの生成に掛かる時間を1とした単位時間を表している。
図7中、一番上の各矢印で表される区間は、乱数データ生成部で各ブロックを生成する時間を表し、その下における各矢印で表される区間は記憶装置7の補助記憶キャッシュ保存領域からメモリ6の主記憶キャッシュ保存領域へと各ブロックを読み込む時間を表している。また、各矢印の上に記された#に続く数字は、当該矢印区間中に生成または読み込まれるブロックのブロック番号を表している。
【0080】
また、算出乱数データとキャッシュ乱数データとの利用比率が整数比でない場合についても説明する。例えば、算出乱数データとキャッシュ乱数データとの利用比率が7.5:2の場合について説明する。
【0081】
この場合は、7.5/2=3.75であるため、キャッシュ生成部3は、4.75(=3.75+1)ブロックにつき1つのブロックを記憶装置7に格納することとなる。しかし、ブロック番号は整数である必要があるため、小数点以下を切り上げて整数として利用する。すなわち、この場合、キャッシュ生成部3は、ブロック番号0,5(4.75),10(9.5),15(14.25),19(19),24(23.75),29(28.5),34(33.25),38(38)・・・に対応するブロックを記憶装置7に格納する。なお、括弧内の数値は、小数点以下を切り上げる前の数値である。
【0082】
(実施例2)
上述した実施形態2の具体例について、
図5を参照しつつ、実施例2として説明する。実施例2において、キャッシュ生成部3が1つのブロックを生成するために実際に掛かる時間yを1ms、キャッシュ生成部3が記憶装置7へ1つのブロックを書き込むのに実際に掛かる時間を3.5msとする。また、時刻をtで表し、処理を開始した時刻を0とする。
【0083】
アプリケーションプログラム2は、キャッシュ生成部3に、乱数の種と必要データ量とを与えてキャッシュ乱数データの生成を要求すると、キャッシュ生成部3はこの要求を受け付ける(ステップS11)。キャッシュ生成部3は、まず、記憶装置7がビジーでない時間xを0とし(ステップS12)、ブロック番号0のブロックを乱数生成部4に生成させる(ステップS13)。
【0084】
ブロック番号0のブロックの生成が終了したとき(t=1ms)、乱数生成部4においてブロックを生成するためにかかる時間yは1msである。また、キャッシュ生成部3は、記憶装置7がビジー状態でなく(ステップS14)、当該ブロックの生成中に書き込み処理が終わったのでもないと判断する(ステップS16)。そして、キャッシュ生成部3は、当該ブロックの生成に掛かった時間(1ms)をxに加算し(x=0+1=1ms)(ステップS19)、ブロック番号0のブロックを記憶装置7に書き込むこととして書き込み処理を開始する(ステップS20)。
【0085】
次にキャッシュ生成部3は、必要データ量の乱数データが生成されていないと判断し(ステップS21)、xからyを減算し、x=0msとする(ステップS22)。
【0086】
キャッシュ生成部3は、次にブロック番号1のブロックを乱数生成部4に生成させる(ステップS13)。キャッシュ生成部3は、ブロック番号1のブロックの生成が終わったとき(t=2ms)、記憶装置7がブロック番号0のブロックの書込み処理中であることからビジー状態であると判断する(ステップS14)。そして、キャッシュ生成部3は、作成されたブロック番号1のブロックを破棄する(ステップS15)。
【0087】
続いて、キャッシュ生成部3は、ブロック番号2,3の各ブロックについても、ブロック番号1のブロックと同様の処理を行う。すなわち、キャッシュ生成部3は、ブロック番号2,3のブロックを破棄する。
【0088】
次にキャッシュ生成部3は、ブロック番号4のブロックを乱数生成部4に生成させる(ステップS13)。乱数生成部4がブロック番号4のブロックを生成している途中(t=4.5ms)で、ブロック番号0のブロックの記憶装置7への書込みが終了する。このため、キャッシュ生成部3は、ブロック番号4の生成終了時(t=5ms)、記憶装置7がビジー状態ではないと判断する(ステップS14)。
【0089】
また、キャッシュ生成部3は、ブロック番号0のブロックの書き込み処理が終わったときは当該ブロックの生成中であったと判断する(ステップS16)。
【0090】
よって、キャッシュ生成部3は、当該ブロックの生成終了時刻とブロック番号0のブロックの書込み処理が終了した時刻からの時刻差(5-4.5=0.5ms)をxに加算する(x=0+0.5=0.5ms)(ステップS17)。キャッシュ生成部3は、xはy以上ではないと判断し(ステップS18)、ブロック番号4のブロックも破棄する(ステップS15)。
【0091】
続いて、キャッシュ生成部3は、ブロック番号5のブロックを乱数生成部4に生成させる(ステップS13)。キャッシュ生成部3は、ブロック番号5のブロックの生成が終了した時(t=6ms)、記憶装置7はビジー状態ではないと判断する(ステップS14)。
【0092】
また、ブロック番号0のブロックの記憶装置7への書き込み処理は既に終了している。よって、キャッシュ生成部3は、ブロック番号0のブロックの書込み処理が終わったとき、当該ブロック(ブロック番号5)の生成中ではないと判断する(ステップS16)。そして、キャッシュ生成部3は、xに当該ブロックの生成に掛かった時間(1ms)を加算し(x=0.5+1=1.5ms)(ステップS19)、当該ブロックをキャッシュデータとして記憶装置7へ書き込むこととし、書き込み処理を開始する(ステップS20)。また、キャッシュ生成部3は、乱数データが必要データ量生成されていないと判断し(ステップS21)、xからyを減算し、x=1.5-1=0.5msとする(ステップS22)。
【0093】
キャッシュ生成部3は、以上の処理を必要データ量だけ繰り返し行い、ブロック番号9、14,18・・・の各ブロックを順に記憶装置7にキャッシュデータとして書き込む。このブロック番号の増加値は平均4.5である。これは、上述したキャッシュ生成部3が1つのブロックを生成する速度と、キャッシュ生成部3が1つのブロックを記憶装置7に書き込む速度の性能比1:3.5から求められる、(1+3.5)=4.5ブロック毎に1ブロック、と同等である。
【0094】
よって、利用比率が予め与えられなくても実際の性能比と同等値を算出することができる。なお、この方法は、HDD、又はそれを用いたRAID-0ボリュームのように読込性能と書込性能とが同等で、書き込む場所の違い(外周と内周など)によって性能が動的に変化するようなストレージを用いる場合、有効に作用する。
【0095】
上述した各実施形態の一部又は全部は、以下に記載する(付記1)〜(付記12)によって表現することができるが、以下の記載に限定されるものではない。
【0096】
(付記1)
アプリケーションプログラムに擬似乱数を提供するための乱数処理装置であって、
乱数データを生成する、乱数生成部と、
前記乱数生成部に、予め、第1の乱数データをキャッシュデータとして生成させる、キャッシュ生成部と、
前記アプリケーションプログラムの要求に応じて、前記第1の乱数データを読み込むとともに第2の乱数データを前記乱数生成部に生成させ、前記第1の乱数データと前記第2の乱数データとを組み合わせて、前記アプリケーションプログラムに提供する、キャッシュ読込部と、
を備えていることを特徴とする、乱数処理装置。
【0097】
(付記2)
前記第1の乱数データ及び前記第2の乱数データは、それぞれ、複数のブロックから構成されており、
前記キャッシュ読込部は、前記第1の乱数データと前記第2の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記1に記載の乱数処理装置。
【0098】
(付記3)
前記第1の乱数データを格納するための記憶領域が設けられた記憶装置をさらに備え、
前記キャッシュ読込部は、前記乱数生成部が前記第2の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第1の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記2に記載の乱数処理装置。
【0099】
(付記4)
前記キャッシュ生成部は、
設定された前記
ブロックの数の比に基づいて、前記第1の乱数データを構成する各ブロックに、間隔をおいたブロック番号を付与し、
前記乱数生成部は、前記キャッシュ読込部が前記第1の乱数データを構成する各ブロックに付与されたブロック番号以外のブロック番号を要求した場合に当該ブロック番号の第2の乱数データのブロックを生成し、
前記キャッシュ読込部は、前記ブロック番号の順に、前記第1の乱数データ及び前記第2の乱数データを前記アプリケーションプログラムへ提供する、付記2又は3に記載の乱数処理装置。
【0100】
(付記5)
アプリケーションプログラムに擬似乱数を提供するための方法であって、
(a)予め、第1の乱数データをキャッシュデータとして生成するステップと、
(b)前記アプリケーションプログラムの要求に応じて、前記第1の乱数データを読み込むとともに第2の乱数データを生成し、前記第1の乱数データと前記第2の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を有することを特徴とする、乱数処理方法。
【0101】
(付記6)
前記第1の乱数データと前記第2の乱数データは、それぞれ、複数のブロックから構成されており、
前記(b)のステップにおいて、前記第1の乱数データと前記第2の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記5に記載の乱数処理方法。
【0102】
(付記7)
(c)前記第1の乱数データを格納するための記憶領域が設けられた記憶装置に前記第1の乱数データを格納するステップをさらに有し、
前記(b)のステップにおいて、前記第2の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第1の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記6に記載の乱数処理方法。
【0103】
(付記8)
前記(a)のステップにおいて、
設定された前記
ブロックの数の比に基づいて、前記第1の乱数データを構成するブロックに、間隔をおいたブロック番号を付与し、
前記(b)のステップにおいて、前記(a)のステップで付与されたブロック番号以外のブロック番号が要求された場合に当該ブロック番号の第2の乱数データを生成し、前記ブロック番号の順に、前記第1の乱数データ及び前記第2の乱数データを前記アプリケーションプログラムへと提供する、付記6又は7に記載の乱数処理方法。
【0104】
(付記9)
アプリケーションプログラムへの擬似乱数の提供をコンピュータに実行させるためのプログラムであって、前記コンピュータに、
(a)予め、第1の乱数データをキャッシュデータとして生成するステップと、
(b)前記アプリケーションプログラムの要求に応じて、前記第1の乱数データを読み込むとともに第2の乱数データを生成し、前記第1の乱数データと前記第2の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を実行させることを特徴とする、プログラム。
【0105】
(付記10)
前記第1の乱数データと前記第2の乱数データは、それぞれ、複数のブロックから構成されており、
前記(b)のステップにおいて、前記第1の乱数データと前記第2の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記9に記載のプログラム。
【0106】
(付記11)
(c)前記第1の乱数データを格納するための記憶領域が設けられた記憶装置に前記第1の乱数データを格納するステップを前記コンピュータにさらに実行させ、
前記(b)のステップにおいて、前記第2の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第1の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記10に記載のプログラム。
【0107】
(付記12)
前記(a)のステップにおいて、
設定された前記
ブロックの数の比に基づいて、前記第1の乱数データを構成するブロックに、間隔をおいたブロック番号を付与し、
前記(b)のステップにおいて、前記(a)のステップで付与されたブロック番号以外のブロック番号が要求された場合に当該ブロック番号の第2の乱数データを生成し、前記ブロック番号の順に、前記第1の乱数データ及び前記第2の乱数データを前記アプリケーションプログラムへと提供する、付記10又は11に記載のプログラム。