(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムに擬似乱数を提供するための乱数処理装置であって、
乱数データを生成する、乱数生成部と、
前記乱数生成部に、予め、第１の乱数データをキャッシュデータとして生成させる、キャッシュ生成部と、
前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを前記乱数生成部に生成させ、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供する、キャッシュ読込部と、
を備えていることを特徴とする、乱数処理装置。
【請求項２】
前記第１の乱数データ及び前記第２の乱数データは、それぞれ、複数のブロックから構成されており、
前記キャッシュ読込部は、前記第１の乱数データと前記第２の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、請求項１に記載の乱数処理装置。
【請求項３】
前記第１の乱数データを格納するための記憶領域が設けられた記憶装置をさらに備え、
前記キャッシュ読込部は、前記乱数生成部が前記第２の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第１の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、請求項２に記載の乱数処理装置。
【請求項４】
前記キャッシュ生成部は、設定された前記ブロックの数の比に基づいて、前記第１の乱数データを構成する各ブロックに、間隔をおいたブロック番号を付与し、
前記乱数生成部は、前記キャッシュ読込部が前記第１の乱数データを構成する各ブロックに付与されたブロック番号以外のブロック番号を要求した場合に当該ブロック番号の第２の乱数データのブロックを生成し、
前記キャッシュ読込部は、前記ブロック番号の順に、前記第１の乱数データ及び前記第２の乱数データを前記アプリケーションプログラムへ提供する、請求項２又は３に記載の乱数処理装置。
【請求項５】
アプリケーションプログラムに擬似乱数を提供するための方法であって、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を有することを特徴とする、乱数処理方法。
【請求項６】
アプリケーションプログラムへの擬似乱数の提供をコンピュータに実行させるためのプログラムであって、前記コンピュータに、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を実行させることを特徴とする、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムに擬似乱数を提供するための、乱数処理装置、乱数処理方法、及びこれらを実現するためのプログラムに関する。
【背景技術】
【０００２】
従来から、システムの評価やシミュレーション等といった分野において擬似乱数が広く使用されており、この擬似乱数は例えばメルセンヌ・ツイスタまたはカオス乱数といった種々の公知の擬似乱数生成アルゴリズムによってＣＰＵ（Central Processing Unit）を使用して生成される。
【０００３】
ただし、ＣＰＵはその擬似乱数を使用するアプリケーションなどにもＣＰＵリソースを割り当てる必要があるため、擬似乱数を生成するために割り当てることができるＣＰＵリソースが限定される。このため、擬似乱数を生成するために割り当てられるＣＰＵリソースが不十分となる場合、擬似乱数を必要とするアプリケーションに対して擬似乱数を高速に提供したいという要望に十分応えることができないという問題がある。
【０００４】
ところで、特許文献１には、暗号論的に安全でない擬似乱数生成アルゴリズムに対して追加の計算処理を行うことで、暗号論的に安全な擬似乱数を高速に提供する発明が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−３１７８０２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ただし、特許文献１に記載される発明は、安全性の高い乱数乱数列を高速に提供することができるが、元々の擬似乱数生成アルゴリズムを高速化させるわけではない。このため、暗号論的な安全性が不要な分野（評価やシミュレーションなど暗号に関係ない分野）においては、特許文献１に記載の発明は高速に擬似乱数を提供することには役立たない。よって、擬似乱数を高速に提供したいという上述した要望に対しては、例えばＣＰＵをより高性能なものへとアップグレードするなどの対応が考えられる。
【０００７】
しかしながら、多くのシステムを運用している場合、又は既に高価なＣＰＵを使用している場合がある。これらの場合は、アップグレードのコストが大きくなるといった問題、さらにはＣＰＵの仕様が変わりシステム全体のアップグレードが必要となりコストが非常に大きくなるといった問題が生じる。また、そもそも現在使用しているＣＰＵが最高性能のものであって今以上にＣＰＵをアップグレードすることができないといった問題もある。なお、ＣＰＵ以外、例えば、ＧＰＵ（Graphics Processing Unit）、又はその他の演算処理装置等において擬似乱数を生成する場合においても同様の問題が生じ得る。
【０００８】
そこで、本発明の目的の一例は、上記問題を解消し、装置性能をアップグレードさせることなく、乱数を高速に発生させることのできる、乱数処理装置、乱数処理方法、およびこれらを実現するためのプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
上記目的を達成するため、本発明の一側面における乱数処理装置は、アプリケーションプログラムに擬似乱数を提供するための乱数処理装置であって、
乱数データを生成する、乱数生成部と、
前記乱数生成部に、予め、第１の乱数データをキャッシュデータとして生成させる、キャッシュ生成部と、
前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを前記乱数生成部に生成させ、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供する、キャッシュ読込部と、
を備えていることを特徴とする。
【００１０】
また、上記目的を達成するため、本発明の一側面における乱数処理方法は、アプリケーションプログラムに擬似乱数を提供するための方法であって、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を有することを特徴とする。
【００１１】
更に、上記目的を達成するため、本発明の一側面におけるプログラムは、アプリケーションプログラムへの擬似乱数の提供をコンピュータに実行させるためのプログラムであって、前記コンピュータに、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を実行させることを特徴とする。
【発明の効果】
【００１２】
以上のように本発明における乱数処理装置、乱数処理方法、及びプログラムによれば、装置性能をアップグレードさせることなく、乱数を高速に提供することができる。
【図面の簡単な説明】
【００１３】
【図１】図１は本実施形態１における乱数処理装置の構成を示すブロック図である。
【図２】図２は本実施形態１における乱数処理装置の動作全体の概要を示すフロー図である。
【図３】図３は本実施形態１における乱数処理装置の動作の一部を示すフロー図である。
【図４】図４は本実施形態１における乱数処理装置の動作の一部を示すフロー図である。
【図５】図５は本実施形態２における乱数処理装置の動作の一部を示すフロー図である。
【図６】図６は本実施形態１又は２における乱数処理装置を実現するコンピュータの一例を示すブロック図である。
【図７】図７は本実施例１において使用されるブロックの生成順を示す説明図である。
【発明を実施するための形態】
【００１４】
（実施形態１）
以下、本発明の実施形態１における、乱数処理装置、乱数処理方法、及びプログラムについて、図１〜図４を参照しながら説明する。
【００１５】
［乱数処理装置］
最初に図１を用いて、本実施形態１における乱数処理装置の構成について説明する。図１は、本発明の実施形態１における乱数処理装置の構成を示すブロック図である。図１に示す本実施形態１における乱数処理装置１は、アプリケーションプログラム２に擬似乱数を提供する装置であり、キャッシュ生成部３と、乱数生成部４と、キャッシュ読込部５と、を備えている。
【００１６】
乱数生成部４は、乱数データを生成する。また、キャッシュ生成部３は、乱数生成部４に、第１の乱数データをキャッシュデータとして予め生成させる。そして、キャッシュ読込部５は、アプリケーションプログラム２の要求に応じて、第１の乱数データを読み込むとともに第２乱数データを乱数生成部４に生成させ、第１の乱数データと第２の乱数データとを組み合わせてアプリケーションプログラム２に提供する。
【００１７】
このように、乱数処理装置１は、アプリケーションプログラム２へ提供する擬似乱数として、キャッシュ読込部５の要求に応じて乱数生成部４によって生成された第２の乱数データだけでなく、予め生成されていたキャッシュデータである第１の乱数データも利用する。このため、乱数処理装置１によれば、アプリケーションプログラム２へ高速に擬似乱数を提供することができる。なお、この乱数生成部４で使用される個々の乱数生成アルゴリズムは、従来から広く使用されている乱数生成アルゴリズムを使用することもできるし、他の新たな乱数生成アルゴリズムを使用することもできる。
【００１８】
ここで、乱数処理装置１の構成を更に具体的に説明する。図１に示すように、本実施形態では、乱数処理装置１は、キャッシュ生成部３、乱数生成部４、キャッシュ読込部５に加え、メモリ６と、記憶装置７と、をさらに備えている。なお、以下の説明において、第１の乱数データを「キャッシュ乱数データ」、第２の乱数データを「算出乱数データ」とする。また、第１の乱数データ及び第２の乱数データは複数のブロックから構成されている。
【００１９】
記憶装置７は、ハードディスクドライブ（ＨＤＤ）等であり、キャッシュ生成部３の指示によって生成されたキャッシュ乱数データのブロックをキャッシュデータとして格納する補助記憶キャッシュ保存領域を有している。この記憶装置７に格納された各ブロックは、ブロック番号及び乱数の種と関連付けられている。また、メモリ６は、記憶装置７の補助記憶キャッシュ保存領域から読み出されたキャッシュ乱数データのブロックをキャッシュデータとして格納する主記憶キャッシュ保存領域を有しており、キャッシュ乱数データのブロックを直ちにアプリケーションプログラム２へと提供する。
【００２０】
キャッシュ生成部３は、アプリケーションプログラム２において乱数を使用する前に、キャッシュ乱数データを乱数生成部４に予め生成させる。より詳細には、キャッシュ生成部３は、アプリケーションプログラム２から、乱数の種と、乱数データに関するデータの総量（必要データ量）とを情報として受け取る。すると、キャッシュ生成部３は、まず、生成すべきブロックのブロック番号を特定する。そして、キャッシュ生成部３は、特定されたブロック番号と乱数の種とに基づいて、乱数生成部４に対して擬似乱数生成アルゴリズムにより複数のブロックを生成させる。また、キャッシュ生成部３は、この生成されたキャッシュ乱数データをブロック番号及び乱数の種とともに記憶装置７の補助記憶キャッシュ保存領域に格納する。
【００２１】
また、このキャッシュ生成部３の指示により生成された複数のブロックがキャッシュ乱数データである。また、キャッシュ生成部３は、予め設定された算出乱数データとキャッシュ乱数データとの利用比率に基づいて、生成すべきブロックのブロック番号を特定する。
【００２２】
乱数生成部４は、算出乱数データを生成する。より具体的には、乱数生成部４は、与えられた乱数の種とブロック番号とを組み合わせて擬似乱数生成アルゴリズムの種としブロックを生成する。なお、キャッシュ読込部５の指示により生成されるブロックが算出乱数データを構成する。
【００２３】
キャッシュ読込部５は、アプリケーションプログラム２からの要求に応じて、若いブロック番号から順に算出乱数データまたはキャッシュ乱数データのブロックをアプリケーションプログラム２へと提供する。なお、キャッシュ読込部５は、アプリケーションプログラム２から、キャッシュ生成部３に与えられものと同じ乱数の種と、乱数データに関するデータの総量（必要データ量）とを情報として受け取る。
【００２４】
より具体的には、キャッシュ読込部５は、アプリケーションプログラム２に提供すべきブロック番号のブロックがメモリ６の主記憶キャッシュ保存領域にあれば、そのブロックをアプリケーションプログラム２に提供する。メモリ６の主記憶キャッシュ保存領域に当該ブロック番号のブロックがなければ、当該ブロック番号のブロックを生成するよう乱数生成部４に要求する。そして、キャッシュ読込部５は、乱数生成部４によって生成されたブロックをアプリケーションプログラム２に提供する。
【００２５】
また、キャッシュ読込部５は、アプリケーションプログラム２への乱数データ提供時において、バックグラウンドの処理として記憶装置７の補助記憶キャッシュ保存領域に格納されているキャッシュ乱数データを、メモリ６の主記憶キャッシュ保存領域へと読み込む。
【００２６】
［乱数処理装置の動作］
次に、本発明の実施形態における乱数処理装置１の動作について、図１を適宜参酌しつつ図２〜図４を用いて説明する。なお、本実施形態１では、乱数処理装置１を動作させることによって乱数処理方法が実施されるため、本実施形態における乱数処理方法の説明は以下の乱数処理装置１の動作説明に代える。
【００２７】
まず、図２を用いて、乱数処理装置１の動作全体について説明する。図２は、乱数処理装置１の動作全体の概要を示すフロー図である。図２に示すように、まず、キャッシュ生成部３は、乱数生成部４に対してキャッシュ乱数データを予め生成させ、この乱数生成部４が予め生成したキャッシュ乱数データを記憶装置７の補助記憶キャッシュ保存領域へと格納する（ステップＳ１）。
【００２８】
より詳細に説明すると、ステップＳ１では、まず、アプリケーションプログラム２が、キャッシュ生成部３に対して、乱数の種、及び必要データ量を情報として与え、キャッシュ乱数データを生成するよう要求すると、キャッシュ生成部３はこの要求を受け付ける。
【００２９】
次にステップＳ１では、キャッシュ生成部３は、生成すべきブロックのブロック番号を特定し、このブロック番号と乱数の種とを用いてキャッシュ乱数データのブロックを乱数生成部４に生成させる。このブロック番号は、予め設定された算出乱数データとキャッシュ乱数データとの利用比率（設定値）に基づいて特定される。なお、この利用比率は、例えば、乱数生成部４が算出乱数データの各ブロックを生成する際に掛かる時間と、キャッシュ読込部５が記憶装置７からメモリ６へキャッシュ乱数データの各ブロックを読み込む際に掛かる時間とに基づいて設定することができる。
【００３０】
さらにステップＳ１では、キャッシュ生成部３は、乱数生成部４が生成したキャッシュ乱数データをブロック番号と乱数の種とに関連付けて記憶装置７の補助記憶キャッシュ保存領域に保存する。なお、キャッシュ生成部３は、乱数生成部４に対して上記乱数の種を用いて必要データ量の全ての乱数データをブロック番号順に生成させ、特定したブロック番号に対応するブロックのみを記憶装置７に格納してもよい。
【００３１】
続いて、キャッシュ読込部５は、アプリケーションプログラム２が乱数データの使用のために乱数データを要求すると、この要求を受け付ける（ステップＳ２）。
【００３２】
次に、キャッシュ読込部５は、乱数生成部４に算出乱数データの生成を行わせ、キャッシュ乱数データと算出乱数データとを組み合わせて、アプリケーションプログラム２へ擬似乱数を提供する（ステップＳ３）。このステップＳ３は、アプリケーションプログラム２が要求する必要データ量の乱数データがアプリケーションプログラム２へ提供されるまで行われる。
【００３３】
ここで、ステップＳ３について、図３を参照しつつ詳細に説明する。図３は、本実施形態の乱数処理装置１の動作の一部を示すフロー図である。
【００３４】
図３に示すように、まず、キャッシュ読込部５は、アプリケーションプログラム２から乱数データの要求を受け付けると、若いブロック番号から順にブロック番号を設定し、該当するブロック番号が付与されたキャッシュ乱数データのブロックがメモリ６の主記憶キャッシュ保存領域に存在しているか否かを確認する（ステップＳ３１）。なお、アプリケーションプログラム２は、乱数データを要求する際、キャッシュ読込部５に対し、キャッシュ生成部３に対して与えたものと同じ、乱数の種、及び必要データ量を情報として与える。
【００３５】
メモリ６の主記憶キャッシュ保存領域にキャッシュ乱数データのブロックが存在する場合は、キャッシュ読込部５は、そのキャッシュ乱数データをアプリケーションプログラム２へと提供する（ステップＳ３２）。
【００３６】
メモリ６の主記憶キャッシュ保存領域に当該ブロックが存在しない場合、キャッシュ読込部５は、乱数生成部４に乱数の種とブロック番号を与え、乱数生成部４は、これらを擬似乱数生成アルゴリズムの種として算出乱数データのブロックを生成する（ステップＳ３３）。そして、キャッシュ読込部５は、この生成されたブロックをアプリケーションプログラム２へと提供する（ステップＳ３４）。
【００３７】
以上のステップＳ３２又はステップＳ３４が終了すると、キャッシュ読込部５は、アプリケーションプログラム２に対して必要データ量の乱数データを提供したか判断する（ステップＳ３５）。そして、まだ全てのデータが提供されていなければ、キャッシュ読込部５は上記処理を再度繰り返す。また、全ての乱数データがアプリケーションプログラム２へ提供されていれば、キャッシュ読込部５は処理を終了する。
【００３８】
また、キャッシュ読込部５は、ステップＳ３１〜Ｓ３５の実行時に、そのバックグラウンドの処理として、キャッシュ乱数データを記憶装置７からメモリ６に読み込む処理をする。
【００３９】
この処理について図４を参照しつつ詳細に説明する。図４は本実施形態１における乱数処理装置の動作の一部を示すフロー図である。図４に示すように、まず、キャッシュ読込部５は、条件に合致するキャッシュ乱数データのブロックを決定する（ステップＳ４１）。この条件とは、
・記憶装置７の補助記憶キャッシュ保存領域に存在しているブロックであること、
・現在乱数生成部４で生成されているブロックよりもブロック番号が大きいこと、
・予め設定された算出乱数データとキャッシュ乱数データとの利用比率に基づいて当該ブロックが必要となる瞬間にメモリ６への転送が完了できるブロックであること、
の３つである。
【００４０】
以上の条件に合致するブロックが決定されると、キャッシュ読込部５は、そのブロックを記憶装置７の補助記憶キャッシュ保存領域から読み出し、メモリ６の主記憶キャッシュ保存領域に書き込む（ステップＳ４２）。
【００４１】
なお、ステップＳ４１〜Ｓ４２は、記憶装置７の補助記憶キャッシュ保存領域がビジー状態でなく、また、メモリ６の主記憶キャッシュ保存領域に空きがある場合は継続的に行われる。
【００４２】
以上のように本実施形態１によれば、乱数生成部４によって生成された算出乱数データだけでなく、予め生成していたキャッシュ乱数データもアプリケーションプログラム２へ提供される。このため、本実施形態１によれば、高速に乱数データをアプリケーションプログラム２へと提供することができる。
【００４３】
［プログラム］
本実施形態１におけるプログラムは、コンピュータに、図２に示すステップＳ１〜Ｓ３、図３に示すステップＳ３１〜Ｓ３５、図４に示すステップＳ４１〜Ｓ４２を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし実行することによって、本実施形態における乱数処理装置１と乱数処理方法とを実現することができる。この場合、コンピュータのＣＰＵ（Central Processing Unit）は、キャッシュ生成部３、乱数生成部４、キャッシュ読込部５として機能し、処理を行なう。
【００４４】
（実施形態２）
次に本発明の実施形態２について、以下、説明する。なお、実施形態１と異なる部分は、キャッシュ生成部３が乱数生成部４に生成させるブロックのブロック番号の特定方法であるため、この部分を中心に説明を行い、その他の部分については説明を省略する。
【００４５】
本実施形態２では、算出乱数データとキャッシュ乱数データの利用比率が予め設定されていない。この場合における記憶装置７に格納するキャッシュ乱数データのブロックの特定方法について、キャッシュ生成部３の動作に基づいて図５を参照しつつ以下に説明する。なお、以下の説明では、記憶装置７がビジーでない状態の時間をｘ、キャッシュ生成部３によって１つのブロックを生成するのに掛かる時間をｙとする。
【００４６】
図５に示すように、まず、キャッシュ生成部３は、アプリケーションプログラム２から、キャッシュ乱数データの生成要求を受け付ける（ステップＳ１１）。次に、キャッシュ生成部３は、ｘの初期値を０とする（ステップＳ１２）。
【００４７】
次に、キャッシュ生成部３は、乱数生成部４に対して、アプリケーションプログラム２から与えられた乱数の種及び必要データ量に基づいて、若いブロック番号から順にブロックを生成させる（ステップＳ１３）。
【００４８】
次に、ブロックの生成が終了したとき、キャッシュ生成部３は、記憶装置７がビジー状態か否かを確認する（ステップＳ１４）。記憶装置７がビジー状態のとき、キャッシュ生成部３は、当該ブロックを破棄して（ステップＳ１５）、ステップＳ１３から同様の処理を繰り返す。
【００４９】
一方、各ブロックの生成が終了したときに記憶装置７がビジー状態でない場合は、キャッシュ生成部３は、記憶装置７への別のブロックの書き込み処理が終了したのが当該ブロックの生成中であるか否かを判断する（ステップＳ１６）。
【００５０】
書き込み処理が終了したのが当該ブロックの生成中である場合、キャッシュ生成部３は、別のブロックの書き込みが終了した時刻ｔ２と当該ブロックの生成が終了した時刻ｔ１との差分（ｔ１-ｔ２）をｘに加算する（ステップＳ１７）。
【００５１】
そして、キャッシュ生成部３は、ステップＳ１７によって算出されたｘがｙ以上か否かを判断する（ステップＳ１８）。ステップＳ１８において、ｘがｙ以上でない場合、キャッシュ生成部３は、当該ブロックを破棄し（ステップＳ１５）、ステップＳ１３から同様の処理を繰り返す。ステップＳ１８においてｘがｙ以上の場合は、キャッシュ生成部３は、当該ブロックを記憶装置７の補助記憶キャッシュ保存領域へと書き込む（ステップＳ２０）。
【００５２】
一方、ステップＳ１６において書き込み処理が終了したのが当該ブロックの生成中でない場合、キャッシュ生成部３は、当該ブロックの生成に掛かった時間ｙをｘに加算する（ステップＳ１９）。そして、当該ブロックを記憶装置７の補助記憶キャッシュ保存領域へ書き込む（ステップＳ２０）。
【００５３】
次に、キャッシュ生成部３は、乱数データが必要データ量だけ生成されたか否かを判断し（ステップＳ２１）、必要データ量の乱数データがまだ生成されていない場合、ｘからｙを減算して（ステップＳ２２）、再度ステップＳ１３から処理を繰り返す。また、ステップＳ２１において必要データ量の乱数データの生成が終了した場合は当該処理を終了する。なお、記憶装置７への書き込みに関して、キャッシュされるブロックがＯＳ又はＲＡＩＤコントローラによって遅延書き込みの対象とされてしまうと正確に性能（時間ｘ、ｙ）を計測できなくなる。したがって、本実施形態２における乱数処理装置を実現するコンピュータでは、これらの機能は無効にしておく必要がある。
【００５４】
以上、本実施形態２によれば、上記実施形態１によって得られる効果に加え、利用比率が予め設定されていない場合であっても、キャッシュ生成部３が記憶装置７に格納すべきブロックを特定することができる。
【００５５】
［プログラム］
本実施形態２におけるプログラムは、実施形態１におけるステップに加え、図５に示すステップＳ１１〜Ｓ２２を実行させるプログラムであればよい。このプログラムをコンピュータにインストールし実行することによって、本実施形態２における乱数処理装置１と乱数処理方法とを実現することができる。
【００５６】
［コンピュータ］
ここで、本実施形態１及び２におけるプログラムを実行することによって、乱数処理装置を実現するコンピュータについて図を用いて説明する。図６は、本発明の実施形態における乱数処理装置を実現するコンピュータの一例を示すブロック図である。
【００５７】
図６に示すように、コンピュータ１１０は、ＣＰＵ１１１と、メモリ６と、記憶装置７と、入力インターフェイス１１４と、表示コントローラ１１５と、データリーダ／ライタ１１６と、通信インターフェイス１１７とを備える。これらの各部は、バス１２１を介して、互いにデータ通信可能に接続される。
【００５８】
ＣＰＵ１１１は、記憶装置７に格納された、本実施形態におけるプログラム（コード）をメモリ６に展開し、これらを所定順序で実行することにより、各種の演算を実施する。メインメモリ６は、典型的には、ＤＲＡＭ（Dynamic Random Access Memory）等の揮発性の記憶装置である。また、本実施形態におけるプログラムは、コンピュータ読み取り可能な記録媒体１２０に格納された状態で提供される。なお、本実施形態におけるプログラムは、通信インターフェイス１１７を介して接続されたインターネット上で流通するものであっても良い。
【００５９】
また、記憶装置７の具体例としては、ハードディスクドライブ（ＨＤＤ）の他、フラッシュメモリ等の半導体記憶装置が挙げられる。入力インターフェイス１１４は、ＣＰＵ１１１と、キーボード及びマウスといった入力機器１１８との間のデータ伝送を仲介する。表示コントローラ１１５は、ディスプレイ装置１１９と接続され、ディスプレイ装置１１９での表示を制御する。データリーダ／ライタ１１６は、ＣＰＵ１１１と記録媒体１２０との間のデータ伝送を仲介し、記録媒体１２０からのプログラムの読み出し、及びコンピュータ１１０における処理結果の記録媒体１２０への書き込みを実行する。通信インターフェイス１１７は、ＣＰＵ１１１と、他のコンピュータとの間のデータ伝送を仲介する。
【００６０】
また、記録媒体１２０の具体例としては、ＣＦ（Compact Flash（登録商標））及びＳＤ（Secure Digital）等の汎用的な半導体記憶デバイス、フレキシブルディスク（Flexible Disk）等の磁気記憶媒体、又はＣＤ−ＲＯＭ（Compact Disk Read Only Memory）などの光学記憶媒体が挙げられる。
【００６１】
なお、本実施形態１及び２では、ＣＰＵが乱数生成部４として機能するとしているが、乱数データを生成できるものであれば、特にＣＰＵに限定されるものではない。例えば、ＧＰＵ（Graphics Processing Unit）、専用の乱数データ生成ハードウェア、その他の演算処理装置、これらを組み合わせたシステムが乱数生成部４として機能してもよい。また、上記ＣＰＵ１１１、及び記憶装置７の数は特に限定されるものではない。
【００６２】
［変形例１］
上記各実施形態では、アプリケーションプログラム２がキャッシュ読込部５に要求する乱数データのデータ量と、アプリケーションプログラム２がキャッシュ生成部３に要求する乱数データのデータ量とを同じとして説明したが、これらは異なっていてもよい。例えば、キャッシュ読込部５に要求する乱数データのデータ量が、キャッシュ生成部３に要求した乱数データのデータ量よりも小さい場合、そのデータ量を超える部分のキャッシュ乱数データのブロックを単に利用しなければよい。また、これと逆の場合、すなわち、キャッシュ読込部５に要求する乱数データのデータ量が、キャッシュ生成部３に要求した乱数データのデータ量よりも大きい場合は、キャッシュ乱数データの不足分を全て乱数生成部４にて生成すればよい。
【００６３】
［変形例２］
また、上記各実施形態では、必要とする乱数データのキャッシュを全て作成すると説明したが、高速な乱数データ生成が必要な場所が一部に限られている場合、その一部に対応するキャッシュ乱数データのみをキャッシュ生成部３が乱数生成部４に生成させてもよい。このようにすることで、キャッシュ乱数データの生成時間を減少させることもできる。
【００６４】
例えば、シミュレーションなどの分野において、データを蓄積して学習していくようなアルゴリズムによるシミュレーションを行う場合、シミュレーションの開始直後は学習データが少なく高速に処理できるため、高速な乱数データ生成が要求される。一方、シミュレーションが進むにつれ、学習データが蓄積されて処理が遅くなり開始直後と比較して高速な乱数データが要求されない場面がある。このような場合は、高速な乱数データ生成が要求されるシミュレーション開始直後の分のみキャッシュ乱数データを生成すればよい。
【００６５】
［変形例３］
また、上記各実施形態において、乱数処理装置１を実現するコンピュータのＣＰＵの数、コア数、スレッドの数については、１つに限定されない。乱数処理装置１を実現するコンピュータ全体で利用できるスレッド数が複数になる場合、単純にCPU処理能力がその分倍増すると考えれば、各実施形態で述べた技術は複数のCPUスレッドに対応することができる。また、同様に、乱数処理装置１を実現するコンピュータのストレージ（記憶装置７）の数に関しても１つに限定されない。バックグラウンドでのキャッシュ読込処理が複数同時に行われるように、キャッシュ読込部５を拡張することで容易に複数のストレージに対応することができる。
【００６６】
［変形例４］
また、上記各実施形態では、乱数生成部４は乱数の種とブロック番号とで擬似乱数アルゴリズムを初期化して乱数データを生成している。この方法では、データの再現性はあるが、ブロックごとに擬似乱数アルゴリズムの種が異なることになる。しかし、計算の精度の問題やその他の都合により、同一の種からの擬似乱数アルゴリズムによる連続した乱数データが必要となる場合がある。この場合、キャッシュ生成部３では、キャッシュ乱数データを作成する際、先頭から全ての乱数データを乱数生成部４に計算させ、キャッシュする必要のあるブロックのみを記憶装置７の補助記憶キャッシュ保存領域に書き込むことで連続した乱数データを利用できる。
【００６７】
［変形例５］
また、上記各実施形態は、特願２０１１−０３１６１１に記載の「仮想ファイルシステム」に組み合わせることができる。この仮想ファイルシステムは、ストレージシステムなどの性能評価に利用され、ファイルのデータを動的にＣＰＵによって計算することで、処理の高速化を図っている。この仮想ファイルシステムに、本実施形態１及び２の技術を組み合わせた場合は、よりいっそうの処理の高速化が図られると考えられる。
【００６８】
特に、上記仮想ファイルシステムと上記各実施形態の技術との組み合わせは、重複排除を行う機能が、性能評価の対象となるストレージシステム、又は、評価に用いるバックアップソフトに備わっている場合に関して、以下の利点がある。
【００６９】
一般に、重複排除機能を持つシステムにおいて、非重複書き込み性能と重複書き込み性能とを評価する場合、まず、新しい乱数データファイルがストレージに書き込まれ（非重複の書き込み）、次に、同一の乱数データファイルがもう一度ストレージに書き込まれる（重複の書き込み）。
【００７０】
重複の書き込みは、データの重複が排除されることで実際にストレージに書き込むデータが少なくなるため、非重複の書き込みに比べて短時間で処理することができる。このように、重複書き込みの場合は、バックアップ先への書き込み処理が高速になるため、バックアップ元からの読み込み処理に関しても高速性が要求される。
【００７１】
この高速性が要求される読み込み処理に対して、本実施形態１又は２の技術を利用することができる。すなわち、１回目の書き込みで乱数データを計算する際に、計算されたブロックが（必要なブロックについて）、キャッシュデータとして補助記憶キャッシュ保存領域に書き込まれるようにすればよい。この結果、高速性が要求される２回目の書き込み時において、本実施形態１又は２によって高速に乱数データを生成でき、乱数データの作成時間を実質上ゼロとすることができる。
【００７２】
また、上記仮想ファイルシステムにおいて、バックアップソフト内で重複排除を行う場合、重複データの排除処理が追加で必要となるため、重複の書き込みは非重複の書き込みに比べてＣＰＵの負荷が高くなる。これにより、重複の書き込みでは、乱数生成システムに対してＣＰＵリソースの割り当てが少なくなるため、重複データの排除処理を行わない非重複の書き込みに比べて高速性が要求される。
【００７３】
したがって、上記仮想ファイルシステムと本実施形態１又は２の技術とを組み合わせ、１回目の書き込みで乱数データを計算する際に、計算されたブロックが（必要なブロックについて）、キャッシュデータとして補助記憶キャッシュ保存領域に書き込まれるようにすればよい。この結果、高速性が必要な２回目の書き込み時において、本実施形態１又は２によって高速に乱数データを生成でき、また、キャッシュデータの事前生成が不要となるために、キャッシュデータの生成時間を実質上ゼロとすることができる。
【００７４】
また、補助記憶キャッシュ保存領域に書き込まれたキャッシュデータが削除されても、乱数生成部によって乱数データを生成できるため、ファイルの再現性は確保できる、よって、利用率の低いキャッシュデータなどを削除することにより、キャッシュデータのサイズを小さく抑えることもできる。
【００７５】
［変形例６］
また、上記各実施形態に記載の乱数処理装置１をモンテカルロ法などの乱数を用いたシミュレーションに利用することが考えられる。モンテカルロ法では乱数精度と試行回数とが重要であるが、特に試行回数を多くする場合、乱数アルゴリズムの計算コストが課題となる。これに対して、モンテカルロ法と乱数計算を高速化する本実施形態１又は２の乱数処理装置とを組み合わせれば、同じ計算時間で試行回数を増やすことが可能となり、計算コストが低減される。
【００７６】
［変形例７］
また、上記各実施形態における乱数生成部４で使用されるアルゴリズムは、特定の種から同一データを再現できるデータ生成アルゴリズムであればよい。例えば、使用されるデータ生成アルゴリズムは、辞書データ、又は文法データ等を用いて自然言語風の擬似データを生成するアルゴリズムでも良いし、図形データ等を組み合わせて画像データを作成するアルゴリズムでも良い。つまり、本実施形態１及び２において、擬似乱数及び乱数データは、ランダムな数字の列に限定されるものではない。
【実施例】
【００７７】
（実施例１）
上述した実施形態１において、記憶装置７へと格納されるブロックのブロック番号の特定方法について実施例１として説明する。例えば、予め設定した算出乱数データとキャッシュ乱数データとの利用比率が４：１の場合、キャッシュ生成部３は、５（=4+1）ブロックにつき１つのブロック、すなわち、ブロック番号０，５，１０，１５・・・に対応するブロックを記憶装置７に格納する。
【００７８】
また、アプリケーションプログラム２から要求された必要データ量が３２ＧｉＢであって各ブロックのサイズが１ＭｉＢの場合、アプリケーションプログラム２に必要なブロック数は３２７６８個である。このため、キャッシュ生成部３は、キャッシュ乱数データのブロックを、ブロック番号３２７６５までの６５５４個、乱数生成部４に生成させる。
【００７９】
以上のようにしてアプリケーションプログラム２へと提供される乱数データの各ブロックのタイムラインの具体例を図７に示す。図７の横軸の目盛は、１ブロックの生成に掛かる時間を１とした単位時間を表している。図７中、一番上の各矢印で表される区間は、乱数データ生成部で各ブロックを生成する時間を表し、その下における各矢印で表される区間は記憶装置７の補助記憶キャッシュ保存領域からメモリ６の主記憶キャッシュ保存領域へと各ブロックを読み込む時間を表している。また、各矢印の上に記された＃に続く数字は、当該矢印区間中に生成または読み込まれるブロックのブロック番号を表している。
【００８０】
また、算出乱数データとキャッシュ乱数データとの利用比率が整数比でない場合についても説明する。例えば、算出乱数データとキャッシュ乱数データとの利用比率が７．５：２の場合について説明する。
【００８１】
この場合は、7.5/2=3.75であるため、キャッシュ生成部３は、4.75（=3.75+1）ブロックにつき１つのブロックを記憶装置７に格納することとなる。しかし、ブロック番号は整数である必要があるため、小数点以下を切り上げて整数として利用する。すなわち、この場合、キャッシュ生成部３は、ブロック番号０，５（4.75），１０（9.5），１５（14.25），１９（19），２４（23.75），２９（28.5），３４（33.25），３８（38）・・・に対応するブロックを記憶装置７に格納する。なお、括弧内の数値は、小数点以下を切り上げる前の数値である。
【００８２】
（実施例２）
上述した実施形態２の具体例について、図５を参照しつつ、実施例２として説明する。実施例２において、キャッシュ生成部３が１つのブロックを生成するために実際に掛かる時間ｙを１ｍｓ、キャッシュ生成部３が記憶装置７へ１つのブロックを書き込むのに実際に掛かる時間を３．５ｍｓとする。また、時刻をｔで表し、処理を開始した時刻を０とする。
【００８３】
アプリケーションプログラム２は、キャッシュ生成部３に、乱数の種と必要データ量とを与えてキャッシュ乱数データの生成を要求すると、キャッシュ生成部３はこの要求を受け付ける（ステップＳ１１）。キャッシュ生成部３は、まず、記憶装置７がビジーでない時間ｘを0とし（ステップＳ１２）、ブロック番号０のブロックを乱数生成部４に生成させる（ステップＳ１３）。
【００８４】
ブロック番号０のブロックの生成が終了したとき(t=1ms)、乱数生成部４においてブロックを生成するためにかかる時間ｙは1msである。また、キャッシュ生成部３は、記憶装置７がビジー状態でなく（ステップＳ１４）、当該ブロックの生成中に書き込み処理が終わったのでもないと判断する（ステップＳ１６）。そして、キャッシュ生成部３は、当該ブロックの生成に掛かった時間(1ms)をｘに加算し(x=0+1=1ms)（ステップＳ１９）、ブロック番号０のブロックを記憶装置７に書き込むこととして書き込み処理を開始する（ステップＳ２０）。
【００８５】
次にキャッシュ生成部３は、必要データ量の乱数データが生成されていないと判断し（ステップＳ２１）、xからyを減算し、x=0msとする（ステップＳ２２）。
【００８６】
キャッシュ生成部３は、次にブロック番号１のブロックを乱数生成部４に生成させる（ステップＳ１３）。キャッシュ生成部３は、ブロック番号１のブロックの生成が終わったとき(t=2ms)、記憶装置７がブロック番号０のブロックの書込み処理中であることからビジー状態であると判断する（ステップＳ１４）。そして、キャッシュ生成部３は、作成されたブロック番号１のブロックを破棄する（ステップＳ１５）。
【００８７】
続いて、キャッシュ生成部３は、ブロック番号２，３の各ブロックについても、ブロック番号１のブロックと同様の処理を行う。すなわち、キャッシュ生成部３は、ブロック番号２，３のブロックを破棄する。
【００８８】
次にキャッシュ生成部３は、ブロック番号４のブロックを乱数生成部４に生成させる（ステップＳ１３）。乱数生成部４がブロック番号４のブロックを生成している途中(t=4.5ms)で、ブロック番号０のブロックの記憶装置７への書込みが終了する。このため、キャッシュ生成部３は、ブロック番号４の生成終了時(t=5ms)、記憶装置７がビジー状態ではないと判断する（ステップＳ１４）。
【００８９】
また、キャッシュ生成部３は、ブロック番号０のブロックの書き込み処理が終わったときは当該ブロックの生成中であったと判断する（ステップＳ１６）。
【００９０】
よって、キャッシュ生成部３は、当該ブロックの生成終了時刻とブロック番号０のブロックの書込み処理が終了した時刻からの時刻差(5-4.5=0.5ms)をxに加算する(x=0+0.5=0.5ms)（ステップＳ１７）。キャッシュ生成部３は、ｘはy以上ではないと判断し（ステップＳ１８）、ブロック番号４のブロックも破棄する（ステップＳ１５）。
【００９１】
続いて、キャッシュ生成部３は、ブロック番号５のブロックを乱数生成部４に生成させる（ステップＳ１３）。キャッシュ生成部３は、ブロック番号５のブロックの生成が終了した時(t=6ms)、記憶装置７はビジー状態ではないと判断する（ステップＳ１４）。
【００９２】
また、ブロック番号０のブロックの記憶装置７への書き込み処理は既に終了している。よって、キャッシュ生成部３は、ブロック番号０のブロックの書込み処理が終わったとき、当該ブロック（ブロック番号５）の生成中ではないと判断する（ステップＳ１６）。そして、キャッシュ生成部３は、ｘに当該ブロックの生成に掛かった時間(1ms)を加算し(x=0.5+1=1.5ms)（ステップＳ１９）、当該ブロックをキャッシュデータとして記憶装置７へ書き込むこととし、書き込み処理を開始する（ステップＳ２０）。また、キャッシュ生成部３は、乱数データが必要データ量生成されていないと判断し（ステップＳ２１）、ｘからｙを減算し、x=1.5-1=0.5msとする（ステップＳ２２）。
【００９３】
キャッシュ生成部３は、以上の処理を必要データ量だけ繰り返し行い、ブロック番号９、１４，１８・・・の各ブロックを順に記憶装置７にキャッシュデータとして書き込む。このブロック番号の増加値は平均4.5である。これは、上述したキャッシュ生成部３が１つのブロックを生成する速度と、キャッシュ生成部３が１つのブロックを記憶装置７に書き込む速度の性能比1:3.5から求められる、(1+3.5)=4.5ブロック毎に1ブロック、と同等である。
【００９４】
よって、利用比率が予め与えられなくても実際の性能比と同等値を算出することができる。なお、この方法は、HDD、又はそれを用いたRAID-0ボリュームのように読込性能と書込性能とが同等で、書き込む場所の違い（外周と内周など）によって性能が動的に変化するようなストレージを用いる場合、有効に作用する。
【００９５】
上述した各実施形態の一部又は全部は、以下に記載する（付記１）〜（付記１２）によって表現することができるが、以下の記載に限定されるものではない。
【００９６】
（付記１）
アプリケーションプログラムに擬似乱数を提供するための乱数処理装置であって、
乱数データを生成する、乱数生成部と、
前記乱数生成部に、予め、第１の乱数データをキャッシュデータとして生成させる、キャッシュ生成部と、
前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを前記乱数生成部に生成させ、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供する、キャッシュ読込部と、
を備えていることを特徴とする、乱数処理装置。
【００９７】
（付記２）
前記第１の乱数データ及び前記第２の乱数データは、それぞれ、複数のブロックから構成されており、
前記キャッシュ読込部は、前記第１の乱数データと前記第２の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記１に記載の乱数処理装置。
【００９８】
（付記３）
前記第１の乱数データを格納するための記憶領域が設けられた記憶装置をさらに備え、
前記キャッシュ読込部は、前記乱数生成部が前記第２の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第１の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記２に記載の乱数処理装置。
【００９９】
（付記４）
前記キャッシュ生成部は、設定された前記ブロックの数の比に基づいて、前記第１の乱数データを構成する各ブロックに、間隔をおいたブロック番号を付与し、
前記乱数生成部は、前記キャッシュ読込部が前記第１の乱数データを構成する各ブロックに付与されたブロック番号以外のブロック番号を要求した場合に当該ブロック番号の第２の乱数データのブロックを生成し、
前記キャッシュ読込部は、前記ブロック番号の順に、前記第１の乱数データ及び前記第２の乱数データを前記アプリケーションプログラムへ提供する、付記２又は３に記載の乱数処理装置。
【０１００】
（付記５）
アプリケーションプログラムに擬似乱数を提供するための方法であって、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を有することを特徴とする、乱数処理方法。
【０１０１】
（付記６）
前記第１の乱数データと前記第２の乱数データは、それぞれ、複数のブロックから構成されており、
前記（ｂ）のステップにおいて、前記第１の乱数データと前記第２の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記５に記載の乱数処理方法。
【０１０２】
（付記７）
（ｃ）前記第１の乱数データを格納するための記憶領域が設けられた記憶装置に前記第１の乱数データを格納するステップをさらに有し、
前記（ｂ）のステップにおいて、前記第２の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第１の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記６に記載の乱数処理方法。
【０１０３】
（付記８）
前記（ａ）のステップにおいて、設定された前記ブロックの数の比に基づいて、前記第１の乱数データを構成するブロックに、間隔をおいたブロック番号を付与し、
前記（ｂ）のステップにおいて、前記（ａ）のステップで付与されたブロック番号以外のブロック番号が要求された場合に当該ブロック番号の第２の乱数データを生成し、前記ブロック番号の順に、前記第１の乱数データ及び前記第２の乱数データを前記アプリケーションプログラムへと提供する、付記６又は７に記載の乱数処理方法。
【０１０４】
（付記９）
アプリケーションプログラムへの擬似乱数の提供をコンピュータに実行させるためのプログラムであって、前記コンピュータに、
（ａ）予め、第１の乱数データをキャッシュデータとして生成するステップと、
（ｂ）前記アプリケーションプログラムの要求に応じて、前記第１の乱数データを読み込むとともに第２の乱数データを生成し、前記第１の乱数データと前記第２の乱数データとを組み合わせて、前記アプリケーションプログラムに提供するステップと、
を実行させることを特徴とする、プログラム。
【０１０５】
（付記１０）
前記第１の乱数データと前記第２の乱数データは、それぞれ、複数のブロックから構成されており、
前記（ｂ）のステップにおいて、前記第１の乱数データと前記第２の乱数データとを、両者のブロック数の比が設定された値となるように組み合わせる、付記９に記載のプログラム。
【０１０６】
（付記１１）
（ｃ）前記第１の乱数データを格納するための記憶領域が設けられた記憶装置に前記第１の乱数データを格納するステップを前記コンピュータにさらに実行させ、
前記（ｂ）のステップにおいて、前記第２の乱数データを生成する際に掛かる時間と、前記キャッシュ読込部が前記記憶装置から前記第１の乱数データを読み込む際に掛かる時間とに基づいて、前記ブロック数の比を設定する、付記１０に記載のプログラム。
【０１０７】
（付記１２）
前記（ａ）のステップにおいて、設定された前記ブロックの数の比に基づいて、前記第１の乱数データを構成するブロックに、間隔をおいたブロック番号を付与し、
前記（ｂ）のステップにおいて、前記（ａ）のステップで付与されたブロック番号以外のブロック番号が要求された場合に当該ブロック番号の第２の乱数データを生成し、前記ブロック番号の順に、前記第１の乱数データ及び前記第２の乱数データを前記アプリケーションプログラムへと提供する、付記１０又は１１に記載のプログラム。
【産業上の利用可能性】
【０１０８】
本発明は、乱数データを必要とするアプリケーションプログラムに利用することができる。
【符号の説明】
【０１０９】
１    乱数処理装置
２    アプリケーションプログラム
３    キャッシュ生成部
４    乱数生成部
５    キャッシュ読込部
６    メモリ
７    記憶装置
１１０  コンピュータ
１１１  ＣＰＵ
１１４  入力インターフェイス
１１５  表示コントローラ
１１６  データリーダ／ライタ
１１７  通信インターフェイス
１１８  入力機器
１１９  ディスプレイ装置
１２０  記録媒体
１２１  バス
【図１】
0005953808.tif 000002
【図２】
0005953808.tif 000003
【図３】
0005953808.tif 000004
【図４】
0005953808.tif 000005
【図５】
0005953808.tif 000006
【図６】
0005953808.tif 000007
【図７】
0005953808.tif 000008