説明

物理乱数発生装置

【課題】電子計算機内のCPUとメモリ間のデータ転送帯域によらず、搭載する物理乱数アダプタ数に比例した物理乱数生成速度を効率的に実現する。
【解決手段】電子計算機内の、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数要求に対して、任意の物理乱数アダプタから直接ユーザプロセスが管理するメモリ領域へ物理乱数を書き込む。その際、要求元にとって発生元アダプタや発生時刻が物理乱数の品質に影響しないという特徴を利用し、使用されていない全ての物理乱数アダプタを任意の物理乱数要求に対して、効率的に割り当てる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、電子計算機に搭載される物理乱数アダプタを並列化することで、物理乱数生成速度の効率的な増加を可能とする物理乱数発生装置に関するものである。
【背景技術】
【0002】
益々大規模化、高精細化する物理乱数を用いた科学技術計算や数値シミュレーション、統計学の計算では、電子計算機の処理能力とともに電子計算機の入力としての物理乱数も高速に生成されなければ所要の計算結果を得ることができない。
【0003】
電子計算機の処理能力に見合った物理乱数生成速度を当該電子計算機に搭載された単一の物理乱数アダプタで実現できない場合は、物理乱数アダプタを複数搭載し並列化することで所要の物理乱数生成速度を実現する必要がある。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特許第3680091号
【特許文献2】特開2007−323135号
【発明の概要】
【発明が解決しようとする課題】
【0005】
従来、電子計算機内の、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数データの要求に対して、並列化した複数の物理乱数アダプタから物理乱数を供給する場合、デバイスドライバが管理するメモリ上の任意の領域に各乱数アダプタからの出力を一旦書き込み、そこからユーザプロセスが管理するメモリ上の任意の領域へ物理乱数をコピーすることで実現していた。
【0006】
よって、搭載する物理乱数アダプタ数を増やしても、CPUとメモリ間のデータ転送帯域を越える物理乱数生成速度を実現できなかった。
【0007】
本発明の目的は、CPUとメモリ間のデータ転送帯域によらず、物理乱数を任意の複数のユーザプロセスへ、搭載する物理乱数アダプタ数に比例した物理乱数生成速度で効率的に供給することにある。
【課題を解決するための手段】
【0008】
本発明では、電子計算機内の、デバイスドライバが管理するメモリ領域からユーザプロセスが管理するメモリ領域への物理乱数のコピーを回避するために、任意の複数のユーザプロセスから任意のタイミング、任意のデータ量で発生する物理乱数要求に対して、任意の物理乱数アダプタから直接ユーザプロセスが管理するメモリ領域へ物理乱数を書き込む。
【0009】
その際、要求元にとって発生元アダプタや発生時刻が物理乱数の品質に影響しないという特徴を利用し、使用されていない全ての物理乱数アダプタを任意の物理乱数要求に対して、効率的に割り当てる。
【発明の効果】
【0010】
本発明の物理乱数発生装置によれば、電子計算機内に搭載された物理乱数アダプタ数に比例した物理乱数生成速度を、効率的に実現することができる、という効果が得られる。
【図面の簡単な説明】
【0011】
【図1】本発明の一実施の形態である物理乱数発生装置を含む電子計算機の基本構成を示す概念図である。
【図2】デバイスドライバ領域内のリクエストとリクエストキューの構造を示す概念図である。
【図3】デバイスドライバ領域内の物理乱数アダプタ管理テーブルの構造を示す概念図である。
【図4】デバイスドライバの物理乱数要求受領処理を示すフローである。
【図5】デバイスドライバの物理乱数アダプタ割当処理を示すフローである。
【図6】デバイスドライバのリクエスト終了監視処理を示すフローである。
【図7】図4のサブルーチンである初期化の処理を示すフローである。
【図8】図4のサブルーチンであるアダプタポインタの移動の処理を示すフローである。
【発明を実施するための形態】
【0012】
図1はCPU1と、CPU1にI/Oバス2を介して接続された複数の物理乱数アダプタ3と、CPU1にメモリバス9を介して接続されたメモリ10で構成される物理乱数発生装置を含む電子計算機の概念図である。
【0013】
物理乱数アダプタ3には、物理乱数生成ユニット4と物理乱数転送制御ユニット5が搭載されている。物理乱数転送制御ユニット5は、物理乱数転送コマンド受信部6と、物理乱数の出力先アドレスを格納する出力先アドレスレジスタ7と、物理乱数の出力データ長を格納する出力データ長レジスタ8を持つ。物理乱数アダプタは物理乱数転送コマンドを受け取ると、設定された出力先アドレスに対して、物理乱数生成ユニットから出力される物理乱数を設定された出力データ長だけ転送する機能を有する。物理乱数転送コマンドによる物理乱数の転送が終了した際は、図3に示す物理乱数アダプタ管理テーブルの該当するデータ転送終了フラグ22に1を書き込む。
【0014】
メモリ10には、任意のユーザプロセス管理領域11とデバイスドライバ管理領域12が確保される。これらの領域を参照、変更する際は、それぞれ個別の排他制御を行う必要がある。
【0015】
デバイスドライバが管理する領域12には、ユーザプロセスからの物理乱数要求を格納するためのリクエストキューと搭載された全ての物理乱数アダプタの動作状況を管理するための物理乱数アダプタ管理テーブルを作成する。リクエストキューのフォーマットの概要を図2に、物理乱数アダプタ管理テーブルのフォーマットの概要を図3に示す。
【0016】
リクエストキューは、図2のように、ユーザプロセスから発行される、物理乱数の要求であるリクエスト13を、あらかじめ設定されている最大リクエスト数格納できるキューとしてメモリ上に確保される。リクエストキューに保持されるリクエスト13は、発行したユーザプロセスを識別するためのリクエストユーザプロセスID14と、ユーザプロセスが要求する物理乱数データを格納する領域の先頭アドレスを示す物理乱数格納アドレス15と、ユーザプロセスが要求する物理乱数のデータ長を格納するリクエストデータ長16と、当該リクエストに対して発行された物理乱数転送コマンドによるデータ転送が全て完了したことを示すためのコマンドカウンタ17をもつ。また、処理中のリクエストを示す実行リクエストポインタと、次に発行されるリクエストを格納するリクエスト受付ポインタをもつ。
【0017】
物理乱数アダプタ管理テーブルは、図3のように、搭載された各物理乱数アダプタ毎に、当該アダプタがデータ転送中であることを示すデータ転送中フラグ20、実行中のデータ転送がどのリクエストに対するものかを示す発行元リクエストID21、そのデータ転送が完了したかを示すデータ転送終了フラグ22を持つ。また、次にデータ転送コマンド発行可能なアダプタを示すアダプタポインタを持つ。
【0018】
デバイスドライバは、物理乱数要求受領処理と、物理乱数アダプタ割当処理とリクエスト終了監視処理を行う。
【0019】
図4は物理乱数要求受領処理のフローの概要を示したものであり、ユーザプロセスからの物理乱数要求が発生するたびに実行される。
【0020】
ステップ41ではリクエスト受付ポインタが示すエントリが既に完了しているかどうかを判定するため、コマンドカウンタが0であることを確認する。0でない場合は0になるまで待つ。
【0021】
ステップ42ではユーザプロセスから受け取ったリクエストユーザプロセスID、物理乱数格納アドレス、リクエストデータ長を当該エントリに書き込む。コマンドカウンタにはリクエストデータ長をあらかじめ設定されている物理乱数アダプタのデータ転送最大長で割り、割り切れた場合は商を、割り切れなった場合は商+1を書き込む。
【0022】
ステップ43ではリクエスト受付ポインタがリクエストキューの最終エントリの場合はリクエスト受付ポインタをリクエストキューの先頭エントリへ移動し、最終エントリではない場合はリクエスト受付ポインタを+1したエントリへ移動する。
【0023】
図5は物理乱数アダプタ割当処理のフローの概要を示したものであり、本物理乱数発生装置が起動された際に実行される。
【0024】
ステップ51では初期化処理を行う。処理の概要は図7にて説明する。
【0025】
ステップ52ではリクエスト実行ポインタが示すエントリのリクエストデータ長が0より大きいかを判定する。リクエストデータ長が0以下の場合はステップ59で示すように、リクエスト実行ポインタが、リクエストキューの最終エントリの場合はリクエスト実行ポインタをリクエストキューの先頭エントリへ移動し、ステップ52を再度実行する。最終エントリでない場合はリクエスト実行ポインタを+1したエントリへ移動し、ステップ52を再度実行する。
【0026】
ステップ53ではリクエスト実行ポインタが示すエントリの物理乱数格納アドレス、リクエストデータ長を、アダプタポインタが示す物理乱数アダプタの出力先アドレスレジスタ、出力データ長レジスタに設定する。ただし、リクエストデータ長があらかじめ設定されている物理乱数アダプタのデータ転送最大長より大きい場合は出力データ長レジスタに物理乱数アダプタのデータ転送最大長を設定する。
【0027】
ステップ54ではリクエスト実行ポインタが示すエントリの物理乱数格納アドレスに、アダプタポインタが示す物理乱数アダプタの出力データ長レジスタに設定した値を足す。
【0028】
また、リクエスト実行ポインタが示すエントリのリクエストデータ長からダプタポインタが示す物理乱数アダプタの出力データ長レジスタに設定した値を引く。
【0029】
ステップ55ではアダプタポインタが示す物理乱数アダプタ管理テーブルのデータ転送中フラグに1を書き込み、発行元リクエストIDにリクエスト実行ポインタが示すリクエストIDを書き込む。
【0030】
ステップ56ではアダプタポインタが示す物理乱数アダプタのデータ転送制御部に対して物理乱数転送コマンドを発行する。
【0031】
ステップ57ではリクエスト実行ポインタが、リクエストキューの最終エントリの場合はリクエスト実行ポインタをリクエストキューの先頭エントリへ移動し、最終エントリでない場合はリクエスト実行ポインタを+1したエントリへ移動する。
【0032】
ステップ58はアダプタポインタの移動を行う。詳細は図8にて説明する。
【0033】
図6はリクエスト終了監視処理のフローの概要を示したものであり、本物理乱数発生装置が起動された際に実行される。
【0034】
ステップ61では物理乱数アダプタ管理テーブルの全データ転送完了フラグを参照し、データ転送が完了したアダプタが有るかを確認する。データ転送が完了したアダプタが無い場合には、再度ステップ61を実行。
【0035】
ステップ62では物理乱数アダプタ管理テーブルのデータ転送フラグに1がたっているエントリの発行元リクエストIDが示すリクエストのコマンドカウンタを−1する。
【0036】
ステップ63では当該リクエストのコマンドカウンタが0の場合はリクエストユーザプロセスIDが示す、ユーザプロセスへ要求された物理乱数の転送が完了したことを通知する。
【0037】
ステップ64では物理乱数アダプタ管理テーブルの当該アダプタのデータ転送中フラグとデータ転送終了フラグに0を書き込む。
【0038】
図7は図5で示す物理乱数アダプタ割当処理フローのステップ51である初期化の処理の概要を示したものである。
【0039】
ステップ71ではメモリ上のデバイスドライバが管理する領域に、あらかじめ設定されている最大リクエスト数格納できるキューとしてリクエストキュー領域を確保し、リクエストキュー領域全体に0を書き込む。
【0040】
ステップ72ではリクエストキューの実行リクエストポインタにリクエストキューの先頭エントリであるR0を設定する。
【0041】
ステップ73ではリクエストキューのリクエスト受付ポインタにリクエストキューの先頭エントリであるR0を設定する。
【0042】
ステップ74ではメモリ上のデバイスドライバが管理する領域に、搭載された物理乱数アダプタ数のエントリを持つ物理乱数アダプタ管理テーブル領域を確保し、物理乱数アダプタ管理テーブル領域全体に0を書き込む。
【0043】
ステップ75では物理乱数アダプタ管理テーブルのアダプタポインタにアダプタ0に対応するA0を設定する。
【0044】
図8は図5で示す物理乱数アダプタ割当処理フローのステップ58であるアダプタポインタの移動の処理の概要を示したものである。
【0045】
ステップ81では物理乱数アダプタ管理テーブルの全データ転送中フラグを参照し、データ転送中でないアダプタが有るかを確認する。データ転送中でないアダプタが無い場合には、再度ステップ81を実行。
【0046】
ステップ82ではアダプタポインタが、物理乱数アダプタ管理テーブルの最終エントリの場合はアダプタポインタを物理乱数アダプタ管理テーブルの先頭エントリへ移動し、最終エントリでない場合はアダプタポインタを+1したエントリへ移動する。
【0047】
ステップ83では物理乱数アダプタ管理テーブルのアダプタポインタが示すエントリのデータ転送中フラグが0であるかを確認する。データ転送中フラグが0でない場合には、再度ステップ82を実行。
【符号の説明】
【0048】
1…CPU、2…I/Oバス、3…物理乱数アダプタ、4…物理乱数生成ユニット、5…物理乱数転送制御ユニット、6…物理乱数転送コマンド受信部、7…出力先アドレスレジスタ、8…出力データ長レジスタ、9…メモリバス、10…メモリ、11…ユーザプロセス管理領域、12…デバイスドライバ管理領域、13…リクエスト、14…リクエストユーザプロセスID、15…物理乱数格納アドレス、16…リクエストデータ長、17…コマンドカウンタ、18…実行リクエストポインタ、19…リクエスト受付ポインタ、20…データ転送中フラグ、21…発行元リクエストID、22…データ転送終了フラグ、23…アダプタポインタ。

【特許請求の範囲】
【請求項1】
物理乱数転送コマンドにより任意のアドレスへ物理乱数を出力する機能を有する複数の物理乱数アダプタと、任意のユーザプロセスから発行される任意の物理乱数要求をメモリ上に保持する機能と、任意の物理乱数要求に対して、任意の複数の物理乱数アダプタへ物理乱数転送コマンドを発行する機能を有するデバイスドライバからなる物理乱数発生装置。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate