(57)【要約】【課題】電子計算機内のCPUとメモリ間のデータ転送帯域によらず、搭載する物理乱数アダプタ数に比例した物理乱数生成速度を効率的に実現する。【解決手段】電子計算機内の、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数要求に対して、任意の物理乱数アダプタから直接ユーザプロセスが管理するメモリ領域へ物理乱数を書き込む。その際、要求元にとって発生元アダプタや発生時刻が物理乱数の品質に影響しないという特徴を利用し、使用されていない全ての物理乱数アダプタを任意の物理乱数要求に対して、効率的に割り当てる。【選択図】図１
2012003512.tif 000002
【特許請求の範囲】
【請求項１】
物理乱数転送コマンドにより任意のアドレスへ物理乱数を出力する機能を有する複数の物理乱数アダプタと、任意のユーザプロセスから発行される任意の物理乱数要求をメモリ上に保持する機能と、任意の物理乱数要求に対して、任意の複数の物理乱数アダプタへ物理乱数転送コマンドを発行する機能を有するデバイスドライバからなる物理乱数発生装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子計算機に搭載される物理乱数アダプタを並列化することで、物理乱数生成速度の効率的な増加を可能とする物理乱数発生装置に関するものである。
【背景技術】
【０００２】
益々大規模化、高精細化する物理乱数を用いた科学技術計算や数値シミュレーション、統計学の計算では、電子計算機の処理能力とともに電子計算機の入力としての物理乱数も高速に生成されなければ所要の計算結果を得ることができない。
【０００３】
電子計算機の処理能力に見合った物理乱数生成速度を当該電子計算機に搭載された単一の物理乱数アダプタで実現できない場合は、物理乱数アダプタを複数搭載し並列化することで所要の物理乱数生成速度を実現する必要がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第３６８００９１号
【特許文献２】特開２００７−３２３１３５号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
従来、電子計算機内の、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数データの要求に対して、並列化した複数の物理乱数アダプタから物理乱数を供給する場合、デバイスドライバが管理するメモリ上の任意の領域に各乱数アダプタからの出力を一旦書き込み、そこからユーザプロセスが管理するメモリ上の任意の領域へ物理乱数をコピーすることで実現していた。
【０００６】
よって、搭載する物理乱数アダプタ数を増やしても、ＣＰＵとメモリ間のデータ転送帯域を越える物理乱数生成速度を実現できなかった。
【０００７】
本発明の目的は、ＣＰＵとメモリ間のデータ転送帯域によらず、物理乱数を任意の複数のユーザプロセスへ、搭載する物理乱数アダプタ数に比例した物理乱数生成速度で効率的に供給することにある。
【課題を解決するための手段】
【０００８】
本発明では、電子計算機内の、デバイスドライバが管理するメモリ領域からユーザプロセスが管理するメモリ領域への物理乱数のコピーを回避するために、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数要求に対して、任意の物理乱数アダプタから直接ユーザプロセスが管理するメモリ領域へ物理乱数を書き込む。
【０００９】
その際、要求元にとって発生元アダプタや発生時刻が物理乱数の品質に影響しないという特徴を利用し、使用されていない全ての物理乱数アダプタを任意の物理乱数要求に対して、効率的に割り当てる。
【発明の効果】
【００１０】
本発明の物理乱数発生装置によれば、電子計算機内に搭載された物理乱数アダプタ数に比例した物理乱数生成速度を、効率的に実現することができる、という効果が得られる。
【図面の簡単な説明】
【００１１】
【図１】本発明の一実施の形態である物理乱数発生装置を含む電子計算機の基本構成を示す概念図である。
【図２】デバイスドライバ領域内のリクエストとリクエストキューの構造を示す概念図である。
【図３】デバイスドライバ領域内の物理乱数アダプタ管理テーブルの構造を示す概念図である。
【図４】デバイスドライバの物理乱数要求受領処理を示すフローである。
【図５】デバイスドライバの物理乱数アダプタ割当処理を示すフローである。
【図６】デバイスドライバのリクエスト終了監視処理を示すフローである。
【図７】図４のサブルーチンである初期化の処理を示すフローである。
【図８】図４のサブルーチンであるアダプタポインタの移動の処理を示すフローである。
【発明を実施するための形態】
【００１２】
図１はＣＰＵ１と、ＣＰＵ１にＩ／Ｏバス２を介して接続された複数の物理乱数アダプタ３と、ＣＰＵ１にメモリバス９を介して接続されたメモリ１０で構成される物理乱数発生装置を含む電子計算機の概念図である。
【００１３】
物理乱数アダプタ３には、物理乱数生成ユニット４と物理乱数転送制御ユニット５が搭載されている。物理乱数転送制御ユニット５は、物理乱数転送コマンド受信部６と、物理乱数の出力先アドレスを格納する出力先アドレスレジスタ７と、物理乱数の出力データ長を格納する出力データ長レジスタ８を持つ。物理乱数アダプタは物理乱数転送コマンドを受け取ると、設定された出力先アドレスに対して、物理乱数生成ユニットから出力される物理乱数を設定された出力データ長だけ転送する機能を有する。物理乱数転送コマンドによる物理乱数の転送が終了した際は、図３に示す物理乱数アダプタ管理テーブルの該当するデータ転送終了フラグ２２に１を書き込む。
【００１４】
メモリ１０には、任意のユーザプロセス管理領域１１とデバイスドライバ管理領域１２が確保される。これらの領域を参照、変更する際は、それぞれ個別の排他制御を行う必要がある。
【００１５】
デバイスドライバが管理する領域１２には、ユーザプロセスからの物理乱数要求を格納するためのリクエストキューと搭載された全ての物理乱数アダプタの動作状況を管理するための物理乱数アダプタ管理テーブルを作成する。リクエストキューのフォーマットの概要を図２に、物理乱数アダプタ管理テーブルのフォーマットの概要を図３に示す。
【００１６】
リクエストキューは、図２のように、ユーザプロセスから発行される、物理乱数の要求であるリクエスト１３を、あらかじめ設定されている最大リクエスト数格納できるキューとしてメモリ上に確保される。リクエストキューに保持されるリクエスト１３は、発行したユーザプロセスを識別するためのリクエストユーザプロセスＩＤ１４と、ユーザプロセスが要求する物理乱数データを格納する領域の先頭アドレスを示す物理乱数格納アドレス１５と、ユーザプロセスが要求する物理乱数のデータ長を格納するリクエストデータ長１６と、当該リクエストに対して発行された物理乱数転送コマンドによるデータ転送が全て完了したことを示すためのコマンドカウンタ１７をもつ。また、処理中のリクエストを示す実行リクエストポインタと、次に発行されるリクエストを格納するリクエスト受付ポインタをもつ。
【００１７】
物理乱数アダプタ管理テーブルは、図３のように、搭載された各物理乱数アダプタ毎に、当該アダプタがデータ転送中であることを示すデータ転送中フラグ２０、実行中のデータ転送がどのリクエストに対するものかを示す発行元リクエストＩＤ２１、そのデータ転送が完了したかを示すデータ転送終了フラグ２２を持つ。また、次にデータ転送コマンド発行可能なアダプタを示すアダプタポインタを持つ。
【００１８】
デバイスドライバは、物理乱数要求受領処理と、物理乱数アダプタ割当処理とリクエスト終了監視処理を行う。
【００１９】
図４は物理乱数要求受領処理のフローの概要を示したものであり、ユーザプロセスからの物理乱数要求が発生するたびに実行される。
【００２０】
ステップ４１ではリクエスト受付ポインタが示すエントリが既に完了しているかどうかを判定するため、コマンドカウンタが０であることを確認する。０でない場合は０になるまで待つ。
【００２１】
ステップ４２ではユーザプロセスから受け取ったリクエストユーザプロセスＩＤ、物理乱数格納アドレス、リクエストデータ長を当該エントリに書き込む。コマンドカウンタにはリクエストデータ長をあらかじめ設定されている物理乱数アダプタのデータ転送最大長で割り、割り切れた場合は商を、割り切れなった場合は商＋１を書き込む。
【００２２】
ステップ４３ではリクエスト受付ポインタがリクエストキューの最終エントリの場合はリクエスト受付ポインタをリクエストキューの先頭エントリへ移動し、最終エントリではない場合はリクエスト受付ポインタを＋１したエントリへ移動する。
【００２３】
図５は物理乱数アダプタ割当処理のフローの概要を示したものであり、本物理乱数発生装置が起動された際に実行される。
【００２４】
ステップ５１では初期化処理を行う。処理の概要は図７にて説明する。
【００２５】
ステップ５２ではリクエスト実行ポインタが示すエントリのリクエストデータ長が０より大きいかを判定する。リクエストデータ長が０以下の場合はステップ５９で示すように、リクエスト実行ポインタが、リクエストキューの最終エントリの場合はリクエスト実行ポインタをリクエストキューの先頭エントリへ移動し、ステップ５２を再度実行する。最終エントリでない場合はリクエスト実行ポインタを＋１したエントリへ移動し、ステップ５２を再度実行する。
【００２６】
ステップ５３ではリクエスト実行ポインタが示すエントリの物理乱数格納アドレス、リクエストデータ長を、アダプタポインタが示す物理乱数アダプタの出力先アドレスレジスタ、出力データ長レジスタに設定する。ただし、リクエストデータ長があらかじめ設定されている物理乱数アダプタのデータ転送最大長より大きい場合は出力データ長レジスタに物理乱数アダプタのデータ転送最大長を設定する。
【００２７】
ステップ５４ではリクエスト実行ポインタが示すエントリの物理乱数格納アドレスに、アダプタポインタが示す物理乱数アダプタの出力データ長レジスタに設定した値を足す。
【００２８】
また、リクエスト実行ポインタが示すエントリのリクエストデータ長からダプタポインタが示す物理乱数アダプタの出力データ長レジスタに設定した値を引く。
【００２９】
ステップ５５ではアダプタポインタが示す物理乱数アダプタ管理テーブルのデータ転送中フラグに１を書き込み、発行元リクエストＩＤにリクエスト実行ポインタが示すリクエストＩＤを書き込む。
【００３０】
ステップ５６ではアダプタポインタが示す物理乱数アダプタのデータ転送制御部に対して物理乱数転送コマンドを発行する。
【００３１】
ステップ５７ではリクエスト実行ポインタが、リクエストキューの最終エントリの場合はリクエスト実行ポインタをリクエストキューの先頭エントリへ移動し、最終エントリでない場合はリクエスト実行ポインタを＋１したエントリへ移動する。
【００３２】
ステップ５８はアダプタポインタの移動を行う。詳細は図８にて説明する。
【００３３】
図６はリクエスト終了監視処理のフローの概要を示したものであり、本物理乱数発生装置が起動された際に実行される。
【００３４】
ステップ６１では物理乱数アダプタ管理テーブルの全データ転送完了フラグを参照し、データ転送が完了したアダプタが有るかを確認する。データ転送が完了したアダプタが無い場合には、再度ステップ６１を実行。
【００３５】
ステップ６２では物理乱数アダプタ管理テーブルのデータ転送フラグに１がたっているエントリの発行元リクエストＩＤが示すリクエストのコマンドカウンタを−１する。
【００３６】
ステップ６３では当該リクエストのコマンドカウンタが０の場合はリクエストユーザプロセスＩＤが示す、ユーザプロセスへ要求された物理乱数の転送が完了したことを通知する。
【００３７】
ステップ６４では物理乱数アダプタ管理テーブルの当該アダプタのデータ転送中フラグとデータ転送終了フラグに０を書き込む。
【００３８】
図７は図５で示す物理乱数アダプタ割当処理フローのステップ５１である初期化の処理の概要を示したものである。
【００３９】
ステップ７１ではメモリ上のデバイスドライバが管理する領域に、あらかじめ設定されている最大リクエスト数格納できるキューとしてリクエストキュー領域を確保し、リクエストキュー領域全体に０を書き込む。
【００４０】
ステップ７２ではリクエストキューの実行リクエストポインタにリクエストキューの先頭エントリであるＲ０を設定する。
【００４１】
ステップ７３ではリクエストキューのリクエスト受付ポインタにリクエストキューの先頭エントリであるＲ０を設定する。
【００４２】
ステップ７４ではメモリ上のデバイスドライバが管理する領域に、搭載された物理乱数アダプタ数のエントリを持つ物理乱数アダプタ管理テーブル領域を確保し、物理乱数アダプタ管理テーブル領域全体に０を書き込む。
【００４３】
ステップ７５では物理乱数アダプタ管理テーブルのアダプタポインタにアダプタ０に対応するＡ０を設定する。
【００４４】
図８は図５で示す物理乱数アダプタ割当処理フローのステップ５８であるアダプタポインタの移動の処理の概要を示したものである。
【００４５】
ステップ８１では物理乱数アダプタ管理テーブルの全データ転送中フラグを参照し、データ転送中でないアダプタが有るかを確認する。データ転送中でないアダプタが無い場合には、再度ステップ８１を実行。
【００４６】
ステップ８２ではアダプタポインタが、物理乱数アダプタ管理テーブルの最終エントリの場合はアダプタポインタを物理乱数アダプタ管理テーブルの先頭エントリへ移動し、最終エントリでない場合はアダプタポインタを＋１したエントリへ移動する。
【００４７】
ステップ８３では物理乱数アダプタ管理テーブルのアダプタポインタが示すエントリのデータ転送中フラグが０であるかを確認する。データ転送中フラグが０でない場合には、再度ステップ８２を実行。
【符号の説明】
【００４８】
１…ＣＰＵ、２…Ｉ／Ｏバス、３…物理乱数アダプタ、４…物理乱数生成ユニット、５…物理乱数転送制御ユニット、６…物理乱数転送コマンド受信部、７…出力先アドレスレジスタ、８…出力データ長レジスタ、９…メモリバス、１０…メモリ、１１…ユーザプロセス管理領域、１２…デバイスドライバ管理領域、１３…リクエスト、１４…リクエストユーザプロセスＩＤ、１５…物理乱数格納アドレス、１６…リクエストデータ長、１７…コマンドカウンタ、１８…実行リクエストポインタ、１９…リクエスト受付ポインタ、２０…データ転送中フラグ、２１…発行元リクエストＩＤ、２２…データ転送終了フラグ、２３…アダプタポインタ。
【図１】
2012003512.tif 000003
【図２】
2012003512.tif 000004
【図３】
2012003512.tif 000005
【図４】
2012003512.tif 000006
【図５】
2012003512.tif 000007
【図６】
2012003512.tif 000008
【図７】
2012003512.tif 000009
【図８】
2012003512.tif 000010