説明

情報処理システム、情報処理方法、及びプログラム

【課題】乱数生成能力と素数判定能力とを有する情報処理システムにおいて、並列に行われる素数生成処理を効率化する。
【解決手段】生成ユニットは、乱数を生成し、かつ生成した乱数のビット列の少なくとも一部を、少なくとも1つの判定ユニットに送信する。判定ユニットは、少なくとも1つの生成ユニットから送信されたビット列を組み合わせて所定ビット数の数値を生成し、生成した数値が素数であるか否かを判定し、かつ素数であると判定された数値を出力する。制御手段は、生成ユニットが乱数を生成するのに要する時間と、判定ユニットが数値について素数であるか否かを判定するのに要する時間とが近くなるように、複数の処理ユニットの一部若しくは全部のそれぞれを生成ユニット又は判定ユニットとして動作させる制御を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、素数を生成する情報処理システム、情報処理方法、及びプログラムに関する。
【背景技術】
【0002】
近年の情報通信において、情報を保護するための暗号技術は必要不可欠である。この暗号技術の一つとして、デジタル署名などに用いられる公開鍵暗号がある。一般的に公開鍵暗号の鍵を生成するためには、桁の大きな素数p,qの生成を必要とする。一般的に素数は、乱数生成器にて乱数を生成し、生成された乱数が素数かどうかを判定することにより生成される。
【0003】
安全性の観点から、素数には高品質な一様性及び予測困難性等が求められる。この要求を満たすために、乱数を生成するために物理的な雑音(熱雑音等)が蓄積されるエントロピーソースを用いることが推奨されている。エントロピーソースから取得したデータ(エントロピー)を乱数の種(シード)として乱数生成器に入力することにより、高品質な乱数が得られる(非特許文献1)。
【0004】
生成する素数のビット長が大きいほど、素数が見つかる確率は小さくなる。大きな素数を発見するためには、乱数の生成と素数判定とを何度も繰り返す必要があるため、多くのコンピュータリソース及び時間を必要とする。この問題を解決するために、特許文献1においては、暗号処理の全てが画像処理アクセラレータであるGPUで行われる。一般にGPUは多数の演算コアで構成されており、各演算コアは並列に汎用計算ができるため、CPUよりも高速に暗号処理を行うことができることが期待される。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2007−233381号公報
【非特許文献】
【0006】
【非特許文献1】NIST,“Recommendation for Random Number Generation Using Deterministic Random Bit Generators,SP800−90”
【非特許文献2】NIST,“DIGITAL SIGNATURE STANDARD(DSS), FIPS186−2”
【発明の概要】
【発明が解決しようとする課題】
【0007】
特許文献1に記載の方式ではGPUがエントロピーソースを持たないため、高品質な素数の生成は困難である。GPUのようにエントロピーソースを持たない演算装置を用いて素数生成を行うには、例えばCPUのような、エントロピーソースを持つ演算装置が乱数を生成する必要がある。しかしながら、多数のGPUコアに供給する乱数の生成には時間がかかるため、各GPUコアはCPUが乱数を生成するのを待たなければならないかもしれない。この場合、素数の生成速度が低下してしまう。一方でGPUによる素数判定には一定の時間を要するため、CPUの乱数生成速度が速すぎることも、処理資源の無駄につながる。
【0008】
本発明は、乱数生成能力と素数判定能力とを有する情報処理システムにおいて、並列に行われる素数生成処理を効率化することを目的とする。
【課題を解決するための手段】
【0009】
本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、
複数の処理ユニットと、該処理ユニットを生成ユニット又は判定ユニットとして動作させる制御手段と、を備える情報処理システムであって、
前記生成ユニットとして動作する処理ユニットは、乱数を生成し、かつ前記生成した乱数のビット列の少なくとも一部を、少なくとも1つの前記判定ユニットとして動作する処理ユニットに送信し、
前記判定ユニットとして動作する処理ユニットは、少なくとも1つの前記生成ユニットから送信されたビット列を組み合わせて所定ビット数の数値を生成し、前記生成した数値が素数であるか否かを判定し、かつ素数であると判定された前記数値を出力し、
前記制御手段は、前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要する時間と、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要する時間とが近くなるように、前記複数の処理ユニットの一部若しくは全部のそれぞれを前記生成ユニット又は前記判定ユニットとして動作させる制御を行う
ことを特徴とする。
【発明の効果】
【0010】
乱数生成能力と素数判定能力とを有する情報処理システムにおいて、並列に行われる素数生成処理を効率化することができる。
【図面の簡単な説明】
【0011】
【図1】実施例1及び実施例2に係るシステムの全体構成を説明する図である。
【図2】実施例1に係るCPUの構成を示す図である。
【図3】実施例1に係るGPUの構成を説明する図である。
【図4】実施例1に係るシステム全体の機能構成を説明する図である。
【図5】実施例1に係る処理フローを説明する図である。
【図6】実施例2に係るCPUの構成を示す図である。
【図7】実施例2に係るシステム全体の機能構成を説明する図である。
【図8】実施例2に係る処理フローを説明する図である。
【発明を実施するための形態】
【0012】
以下、本発明の実施形態の一例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施例に限定されるものではない。
【0013】
[実施例1]
<システム全体構成>
図1は、実施例1に係る情報処理システム100の例を示す。情報処理システム100は、CPU101、グラフィックボード102、主メモリ105、メモリコントローラハブ106、入出力コントローラハブ107、NIC108、記憶装置109、及び外部接続ポート110を含む。
【0014】
CPU101は、主メモリ105又は記憶装置109に記録されたプログラム(コンピュータプログラム)に従って、情報処理システム100の動作の少なくとも一部を制御する中央演算装置である。さらに、CPU101は物理的な雑音をビット列(エントロピー)として取得することができる。物理的な雑音は任意のものでありうるが、例えば記憶装置109のシークタイムなどが挙げられる。
【0015】
グラフィックボード102は、GPU103とGPUメモリ104とを含む。グラフィックボード102は通常、画像処理に特化した拡張ボードである。GPU103は、リンク118を介してGPUメモリ104に接続される。GPU103は、リンク113を介してCPU101からGPUメモリ104へと転送されたプログラムに従って、グラフィックボード102の動作の少なくとも一部を制御する演算ユニットを有する。GPUメモリ104は、GPU103を制御するプログラムを格納することができる。GPUメモリ104はまた、GPU103の動作中にデータを一時的に記憶することができる。GPUメモリ104は、例えばRAMでありうる。
【0016】
主メモリ105は、CPU101を制御するプログラムを格納することができる。主メモリ105はまた、CPU101の動作中にデータを一時的に記憶することができる。主メモリ105は、例えばRAMでありうる。
【0017】
メモリコントローラハブ106は、リンク113、114、115及び116を介してそれぞれCPU101、主メモリ105、グラフィックボード102及び入出力コントローラハブ107と接続されている。メモリコントローラハブ106は、主メモリ105、グラフィックボード102及び入出力コントローラハブ107の間のデータ転送を制御する。
【0018】
入出力コントローラハブ107は、リンク117、118及び119を介してそれぞれNIC108、記憶装置109及び外部接続ポート110と接続されている。入出力コントローラハブ107は、メモリコントローラハブ106、NIC108、記憶装置109及び外部接続ポート110の間のデータ転送を制御する。
【0019】
NIC108は、ネットワークに接続するための通信インターフェイスである。NIC108は例えば、有線LAN、無線LAN、又はBluetooth用の通信カード等でありうる。
【0020】
記憶装置109は、CPU101が実行するプログラム、CPU101が処理に用いるデータ、及び外部から取得したデータ等を格納する。記憶装置は例えば、ハードディスクのような磁気記憶装置、又はSSDのようなフラッシュメモリでありうる。情報処理システム100は、複数の記憶装置109を有していてもよい。また記憶装置109を介して、記憶媒体からプログラムを含むデータを読み出すこと、及び記憶媒体にデータを書き出すことが可能であってもよい。プログラムコードを供給するための記憶媒体としては、例えば、ハードディスク、光ディスク、光磁気ディスク、CD−ROM、CD−R、及び不揮発性のメモリカードなどを用いることができる。
【0021】
外部接続ポート110は、外部機器を情報処理システム100に接続するためのポートである。外部接続ポート110は、例えばUSBポート、IEEE1394ポート、HDMIポート等でありうる。この外部接続ポート110に入力装置111を接続することで、情報処理システム100は入力装置111からデータを取得することができる。情報処理システム100は、複数の外部接続ポート110を有していてもよい。
【0022】
入力装置111は、外部接続ポート110を介して情報処理システム100にデータを入力する機器である。入力装置111は例えば、キーボード、マウス等でありうる。出力装置112は、情報処理システム100が出力するデータを視覚的に表示する装置である。出力装置112は、グラフィックボード102が有するポートに接続されることができる。また出力装置112は、外部接続ポート110に接続されてもよい。出力装置112の例としては、例えば液晶モニタ等が挙げられる。出力装置112が接続されるポートの例としては、例えばHDMIポート等が挙げられる。
【0023】
リンク113、114、115、116、117、118、及び119はシリアルバスである。リンク113、114、115、116、117、118、及び119は例えば、PCI又はPCIエクスプレス等などのバスでありうる。
【0024】
以上、本実施例に係る情報処理システム100として利用可能なハードウェア構成の一例を示した。以上説明された情報処理システム100は、例えば、パーソナルコンピュータ等を用いて実現することができる。しかしながら、本実施例に係る情報処理システム100は上述の構成に限定されるものではない。例えば変形例において、情報処理システム100はグラフィックボード102を含まずにGPU103を含んでいてもよい。この場合、GPU103が主メモリ105に対してデータを読み書きできるように、情報処理システム100を構成すればよい。また、CPU101にGPU103を統合してもよい。この場合にも、情報処理システム100はグラフィックボード102を有さなくてもよい。他の実施例として、CPUとGPUとの少なくとも一方として、暗号処理に特化したハードウェアである暗号アクセラレータを用いてもよい。また、CPUとGPUとの少なくとも一方として、演算処理が可能なIPコアを用いてもよい。
【0025】
<CPU101の構成>
以下、図2を参照してCPU101について詳しく説明する。図2は、本実施例に適用可能なCPU101の構成例を示す。図2において、CPU101は2つのCPUコア201,202を含む。しかしながら、CPU101が含むCPUコアの数は2つに限定されない。すなわちCPU101は、2つ以上のCPUコアを含みうる。CPUコア201及び202は、並列動作が可能な処理装置である。例えばCPUコア201及び202は、それぞれ別の命令を実行することができ、また別のデータを扱うことができる。
【0026】
CPUコア201はキャッシュメモリ203を含む。CPUコア201は、キャッシュメモリ203に記録されたプログラム、又はメモリコントローラハブ106を介して主メモリ105から取得したプログラム等に従って、CPU101内の動作の少なくとも一部を制御する。また、CPUコア202はキャッシュメモリ204を含む。CPUコア202は、キャッシュメモリ204に記録されたプログラム、又はメモリコントローラハブ106を介して主メモリ105から取得したプログラム等に従って、CPU101内の動作の少なくとも一部を制御する。キャッシュメモリ203及び204は、高速に読み書き可能な小容量メモリである。
【0027】
<GPU103の構成>
以下、図3を参照してGPU103について詳しく説明する。図3は、本実施例に適用可能なGPU103の構成例を示す。図2において、GPU103は2つのGPUコア301,302を含む。しかしながら、GPU103が含むGPUコアの数は2つに限定されない。GPU103は、2つ以上のGPUコアを含みうる。GPUコア301及び302は、並列動作が可能な演算装置である。例えばGPUコア301及び302は、それぞれ別の命令を実行することができ、また別のデータを扱うことができる。
【0028】
GPUコア301はキャッシュメモリ303を含む。GPUコア301は、GPUメモリ104又はキャッシュメモリ303等に記録されたプログラムに従って、GPU103内の動作の少なくとも一部を制御する。また、GPUコア302はキャッシュメモリ304を含む。GPUコア302は、GPUメモリ104又はキャッシュメモリ304等に記録されたプログラムに従って、GPU103内の動作の少なくとも一部を制御する。キャッシュメモリ303及び304は、高速に読み書き可能な小容量メモリである。
【0029】
<情報処理システム100の構成>
図4を参照して、本実施例に係る情報処理システム100の機能構成について説明する。図4に示すように、情報処理システム100は第1の演算装置と第2の演算装置とを含む。第1の演算装置の例としては前述したCPU101が挙げられる。第2の演算装置の例としては前述したGPU103が挙げられる。もっとも、第1の演算装置及び第2の演算装置はCPU又はGPUには限られず、例えば前述した暗号アクセラレータであってもよい。
【0030】
図4においてCPU101は第1の処理装置A及び第1の処理装置B(生成ユニットとして動作する処理ユニット群)を有する。この例において第1の処理装置A及び第1の処理装置Bは、図2のCPUコア201及びCPUコア202(第1の処理ユニット)に相当する。もっとも、CPU101は並列して動作する3つ以上の第1の処理装置を有していてもよい。また、GPU103は第2の処理装置A及び第2の処理装置B(判定ユニットとして動作する処理ユニット群)を有する。この例において第2の処理装置A及び第2の処理装置Bは、図3のGPUコア301及びGPUコア302(第2の処理ユニット)に相当する。もっとも、GPU103は並列して動作する3つ以上の第2の処理装置を有していてもよい。
【0031】
図4に示す各部の機能は、CPU101又はGPU103が、上述のようにプログラムに従って動作することにより実現される。すなわち、生成時間取得部401及び乱数生成部402の機能は、CPUコア201又は202の動作によって実現される。また、制御部403の機能は、CPU101の動作によって実現される。さらに、判定時間取得部405及び素数判定部406の機能は、GPUコア301又はGPUコア302の動作によって実現される。本実施例において、CPUコア201及び202は、並列して動作可能である。また、GPUコア301及び302は、並列して動作可能である。
【0032】
本実施例において、CPU101はヘテロジニアス型のマルチコアCPUである。しかしながら、CPU101はホモジニアス型のマルチコアCPUであってもよい。CPU101がホモジニアス型のマルチコアCPUである場合、制御部403はCPUコア201,202のそれぞれの動作によって実現される。また、生成時間取得部401の機能はCPUコア201,202によって実現される必要はなく、CPU101が備える他のCPUコア、又は情報処理システム100が備える他の処理部によって実現されてもよい。同様に、判定時間取得部405の機能もGPUコア301,302によって実現される必要はなく、情報処理システム100が備える他の処理部によって実現されてもよい。
【0033】
以下、生成時間取得部401、乱数生成部402、制御部403、保存部404、判定時間取得部405、及び素数判定部406のそれぞれの機能について説明する。
【0034】
<生成時間取得部401>
生成時間取得部401は、乱数生成部402が乱数の生成に要した処理時間を取得する。そして、取得した処理時間を保存部404に出力する。以下、乱数の生成に要した処理時間を乱数生成時間と称する。乱数生成時間は、実際に計測された処理時間であってもよく、例えば乱数生成部402によって計測されてもよい。本実施例において生成時間取得部401は、乱数生成部402がシードを用いてそれぞれの乱数を生成するのに要したそれぞれの時間を取得する。また、乱数生成時間は予め定められた値であってもよく、例えばCPUコア201,202のクロックをもとに算出されていてもよい。
【0035】
<乱数生成部402>
乱数生成部402は、シードと乱数生成器とを用いて乱数を生成し、生成した乱数のビット列を素数判定部406に出力する。乱数生成器とは、シードを用いて乱数を生成する生成器である。乱数生成器の機能は、例えばCPUコア201,202がプログラムに従って動作することにより実現されうる。もっとも、独立した乱数生成器をCPU101が有していてもよい。
【0036】
シードとは乱数の種であり、このシードを乱数生成器に入力することにより乱数が生成される。乱数の生成は公知の方法を用いて行うことができ、例えばハッシュ関数又はブロック暗号アルゴリズムなどを用いることができる(非特許文献1)。シードとしては任意の値を用いることができる。乱数のランダム性を高めるために、シードはエントロピーを用いて生成されてもよい。エントロピーとは、物理的な雑音をビット列に変換したものである。乱数生成部402は、CPU101内で、又はCPU101外から取得されたエントロピーに対して、例えばハッシュ関数を用いることにより、シードを生成することができる(非特許文献1)。もっとも乱数生成部402は、他の公知の方法を用いてエントロピーからシードを生成してもよい。例えば乱数生成部402は、エントロピーに対してナンスなどの付加データを追加し、得られたデータを用いてシードを生成してもよい。(非特許文献1)。また、ハッシュ関数の代わりにブロック暗号アルゴリズムを用いてシードを生成してもよい(非特許文献1)。
【0037】
乱数生成部402は、乱数生成を行うCPUコアの数と、素数判定を行うGPUコアの数と、生成する素数の長さ(所定ビット数)と、に依存した長さの乱数を生成する。本実施例において乱数生成部402は、乱数のビット長が(素数のビット長×GPUコアの数/CPUコアの数)以上となるように、乱数を生成する。例えば、乱数生成を行うCPUコアの数が2であり、素数判定を行うGPUコアの数が100であり、かつ生成する素数のビット長が1024ビットである場合、それぞれの乱数生成部402はビット長が「1024×100÷2」以上である乱数を生成する。この場合、それぞれのCPUコア201,202によって生成された乱数(数値)は、1024ビットずつGPUコア301,302に配分される。
【0038】
このように乱数生成部402は、生成した乱数のビット列の少なくとも一部を、少なくとも1つのGPUコア(素数判定部406)へと送信する。そして素数判定部406は、少なくとも1つの乱数生成部402から送信されたビット列を組み合わせて、所定の長さ(ビット数)の数値を生成する。このように生成された乱数を各GPUコアへと配分することにより、各GPUコアは並列に、取得した数値が素数であるか否かを判定することができる。GPUコア数が増えるほど、それぞれのCPUコアはより大きい乱数を生成することが必要となるため、乱数の生成に要する時間は長くなる。また、CPUコア数が増えるほど、それぞれのCPUコアが生成する必要がある乱数は小さくなるため、乱数の生成に要する時間は短くなる。
【0039】
生成された乱数は、素数判定部406へと送信される。乱数のビット長が(素数のビット長×GPUコアの数/CPUコアの数)より大きい場合、乱数のビット列の一部は素数判定部406には送られない。このため、乱数生成効率を最大化するためには、乱数のビット長を、(素数のビット長×GPUコアの数/CPUコアの数)よりも大きい最小の数にすればよい。
【0040】
<制御部403>
制御部403は、生成時間取得部401が取得した乱数生成時間と、判定時間取得部405が取得した素数判定時間とに応じて、乱数生成部402と素数判定部406との少なくとも一方を制御する。具体的には制御部403は、CPUコアに乱数を生成させるか、すなわち乱数生成部402として動作させるかを制御する。また制御部403は、GPUコアに素数判定を行わせるか、すなわち素数判定部406として動作させるかを制御する。このように制御部403は、CPUコア及びGPUコアの一部若しくは全部の動作制御を行う。
【0041】
そして制御部403は、乱数生成時間が素数判定時間以上である場合、乱数を生成するCPUコアの数を増やすか、又は素数判定を行うGPUコアの数を減らす。一方で制御部403は、乱数生成時間が素数判定時間未満である場合、乱数を生成するCPUコアの数を減らすか、又は素数判定を行うGPUコアの数を増やす。このように制御部403は、乱数生成時間が素数判定時間と近くなるように、CPUコア及びGPUコアの動作を制御する。乱数生成時間が素数判定時間と近くなるほど、素数判定部406のアイドル時間、又は乱数生成部402のアイドル時間が減少するため、より効率的に素数生成を行うことができる。
【0042】
具体的には制御部403は、保存部404から乱数生成時間を取得する。本実施例において乱数生成部402は繰り返し乱数生成を行う。制御部403は、直近に生成された乱数についての生成時間を、保存部404から取得してもよい。本実施例においては複数のCPUコアが乱数を生成するため、それぞれのコアが乱数を生成するのに要する時間はCPUコア毎に異なるかもしれない。この場合制御部403は、それぞれのCPUコアについての乱数生成時間についての最大値、中央値、最頻値、又は平均値を、それぞれの乱数生成についての生成時間として用いることができる。平均の算出方法としては、各CPUコアでの乱数生成時間の和を算出し、その算出結果を乱数生成を行ったCPUコアの数で割る方法がある。
【0043】
また制御部403は、複数回の乱数生成についての生成時間の平均を算出し、乱数生成時間として用いてもよい。例えば制御部403は、より遅い時間に行われた所定回数の乱数生成についての生成時間の平均を算出してもよい。さらには制御部403は、より遅い時間に行われた所定回数の乱数生成についての生成時間のうち最も長いものを、乱数生成時間として用いてもよい。
【0044】
同様に制御部403は、保存部404から素数判定時間を取得する。制御部403は、直近の素数判定における判定時間を、保存部404から取得してもよい。制御部403は、それぞれのGPUコアについての素数判定時間についての最大値、中央値、最頻値、又は平均値を、それぞれの素数判定に要した判定時間として用いることができる。また制御部403は、複数回の素数判定についての判定時間の平均を算出し、素数判定時間として用いてもよい。さらには制御部403は、より遅い時間に行われた所定回数の素数判定についての判定時間のうち最も長いものを、素数判定時間として用いてもよい。
【0045】
複数の素数判定についての判定時間の平均を算出する方法としては、例えば、素数判定時間の和を算出し、その算出結果を素数判定回数で割る方法がある。また別の平均の算出方法としては、素数判定時間の分布特性を用いる方法がある。素数判定時間は判定対象である乱数に依存し、これは一様分布に従う。標本が一様分布に従う場合、平均は標本の最大値と最小値との和を2で割ることで算出できる。
【0046】
そして制御部403は、乱数生成時間と素数判定時間との比に応じて、乱数生成を行うCPUコアの数と素数判定を行うGPUコアの数との少なくとも一方を制御する。本実施例において制御部403は、乱数生成時間と素数判定時間との比Rを求める。ここで、Rは(乱数生成時間/素数判定時間)である。
【0047】
以下に、Rに応じて乱数生成を行うCPUコアの数を制御する方法について説明する。制御部403は、([現在乱数を生成しているCPUコアの数]×R)個のCPUコアに乱数生成を行わせるように、CPU101を制御する。例えば、現在乱数を生成しているCPUコアの数が2個であり、Rが2である場合、次の乱数生成は4個のCPUコアが並列に行う。([現在乱数を生成しているCPUコアの数]×R)が整数ではない場合、制御部403は、([現在乱数を生成しているCPUコアの数]×R)の小数点以下を四捨五入、切り捨て、又は切り上げてもよい。
【0048】
次に、Rに応じて素数判定を行うGPUコアの数を制御する方法について説明する。制御部403は、([現在素数判定を行っているGPUコアの数]/R)個のGPUコアに乱数生成を行わせるように、GPU103を制御する。([現在素数判定を行っているGPUコアの数]×R)が整数ではない場合、制御部403は、([現在素数判定を行っているGPUコアの数]×R)の小数点以下を四捨五入、切り捨て、又は切り上げてもよい。
【0049】
制御部403は、乱数生成を行うCPUコアの数のみを制御してもよいし、素数判定を行うGPUコアの数のみを制御してもよい。CPU101が備えるCPUコアの数は限られている。また、CPU101が他の処理を行っている場合などには、乱数生成のために用いることができるCPUコアの数は、CPU101が備えるCPUコアの数よりも少ないかもしれない。したがって、制御部403が乱数生成を行うCPUコアの数のみを制御する場合に、([現在乱数を生成しているCPUコアの数]×R)が乱数生成のために使用可能なCPUコアの数を超えることがある。このような場合、制御部403は乱数生成のために使用可能な全てのCPUコアに乱数を生成させればよい。また制御部403はこのような場合において、さらに素数判定を行うGPUコアの数を制御してもよい。例えば制御部403は、([現在乱数を生成しているCPUコアの数]/[乱数生成のために使用可能なCPUコアの数])×([現在素数判定を行っているGPUコアの数]/R)個のGPUコアに素数判定を行わせてもよい。制御部403が、素数判定を行うGPUコアの数のみを制御する場合も同様である。
【0050】
制御部403は、乱数生成を行うCPUコアの数と素数判定を行うGPUコアの数とを同時に制御してもよい。この場合、([次に乱数を生成するCPUコアの数]/[現在乱数を生成しているCPUコアの数])/([次に素数判定を行うGPUコアの数]/[現在素数判定を行っているGPUコアの数])がRに近づくように、制御部403は制御を行えばよい。
【0051】
本実施例において制御部403は、乱数生成時間と素数判定時間との比Rに従ってCPUコアとGPUコアとの少なくとも一方を制御したが、制御方法はこれに限られない。例えば、制御部403は以下の制御のうち少なくとも1つを行うように構成されていてもよい。すなわち、乱数生成時間が素数判定時間よりも長い場合、乱数生成を行うCPUコアの数を増やす(第1の制御)か、又は素数判定を行うGPUコアの数を減らす(第2の制御)ように、制御部403はCPUコアとGPUコアとの少なくとも一方を制御すればよい。また、乱数生成時間が素数判定時間よりも短い場合、乱数生成を行うCPUコアの数を減らす(第3の制御)か、又は素数判定を行うGPUコアの数を増やす(第4の制御)ように、制御部403はCPUコアとGPUコアとの少なくとも一方を制御すればよい。
【0052】
<保存部404>
保存部404は、乱数生成時間、素数判定時間、情報処理システム100によって得られた素数、などのデータを保持することができる。本実施例において保存部404はCPU101内に位置するが、保存部404はCPU101の外に存在してもよい。例えば保存部404は、主メモリ105によって実現されてもよい。
【0053】
<判定時間取得部405>
判定時間取得部405は、素数判定部406が素数判定に要した処理時間を取得する。そして、取得した処理時間を保存部404に出力する。既出のように本明細書において、素数判定に要した処理時間を素数判定時間と称する。素数判定時間は、実際に計測された処理時間であってもよく、例えば素数判定部406によって計測されてもよい。本実施例において判定時間取得部405は、それぞれの素数判定部406が乱数生成部402から取得したそれぞれの乱数について素数判定を行うのに要した時間を取得する。また、素数判定時間は予め定められた値であってもよく、例えばGPUコア301,302のクロックをもとに算出されていてもよい。
【0054】
<素数判定部406>
素数判定部406は、上述のように乱数生成部402が出力した乱数が素数であるか否かを判定する。この判定のためには任意の公知の技術を用いることができ、例えばミラーラビン法を用いることができる(非特許文献2)。乱数が素数であれば、素数判定部406はこの素数を出力し、素数生成処理を終了する。素数判定部406は得られた素数を、例えば保存部404又は主メモリ105のような記憶部に出力する。
【0055】
<本実施例に係る処理>
以下、図5を参照して本実施例における素数の生成処理の流れを説明する。図5は本実施例における処理フローを示すフローチャートである。以下の説明では、初期状態において、乱数生成を行うCPUコアはCPUコア201のみであり、素数判定を行うGPUコアはGPUコア301及び302であるものとする。
【0056】
ステップS501においてCPUコア201の乱数生成部402は乱数を生成し、GPUコア301,302に出力する。乱数生成部402は、1つの乱数を生成し、生成した乱数をそれぞれのGPUコアに対して分割して出力してもよい。また乱数生成部402は、素数判定を行うGPUコアの数だけの乱数を生成し、それぞれの乱数を各GPUコアへ出力してもよい。ステップS502において生成時間取得部401は、ステップS501における乱数生成処理に要した時間を取得し、保存部404に出力する。
【0057】
ステップS503においてGPUコア301,302のそれぞれの素数判定部406は、CPUコア201から受け取った乱数が素数であるか否かを判定する。ステップS503ではGPUコア301、302が並列に素数判定を行う。ここで、GPUコア301,302の少なくとも一方が、乱数は素数であると判定した時に、GPUコア301,302は素数を出力し、素数生成処理を終了する。素数生成処理を終了する際には、乱数を生成しているCPUコア、及び素数判定を行っているGPUコアの処理を停止させる。一方で、GPUコア301,302のいずれもが、乱数は素数ではないと判定した場合、処理はステップS504に進む。
【0058】
ステップS504においてGPUコア301,302のそれぞれの判定時間取得部405は、それぞれのGPUコア301,302についてステップS503での素数判定に要した時間を取得し、保存部404に出力する。ステップS505において制御部403は、保存部404に保存されている乱数生成時間と素数判定時間から、上述のようにRを算出する。ステップS506において制御部403は、算出されたRの値に従って、乱数の生成を行うCPUコアの数とGPUコアの数との少なくとも一方を制御する。この例では、制御部403は乱数の生成を行うCPUコアの数を制御するものとする。
【0059】
その後処理はステップS501に戻り、乱数生成及び素数判定を再び行う。このとき、ステップS506における制御に従って、([現在乱数を生成しているCPUコアの数]×R)個のCPUコアのそれぞれが、ステップS501及びS502の処理を行うこととなる。具体的には、例えばRが2のとき、2個のCPUコア201,202のそれぞれの乱数生成部402が並列に乱数を生成し、生成された乱数をGPUコア301,302に出力する。このとき上述のようにCPUコア201,202は、CPUコア201のみが乱数を生成した時と比べて、より小さい乱数を生成すれば十分である。この場合、CPUコア201は生成した乱数をGPUコア301に出力すればよく、CPUコア202は生成した乱数をGPUコア302に出力すればよい。これらの乱数生成、素数判定、及びコア数制御という一連の処理が、ステップS503において素数が発見されるまで繰り返し行われる。
【0060】
素数判定を行うGPUコアがステップS503の素数判定をしている間に、乱数生成を行うCPUコアが次のステップS501の乱数生成を行うことにより、処理効率が向上し、より高速に素数生成を行うことができる。
【0061】
変形例として、ステップS505でRが算出されるたびに、制御部403は、保存部404に格納されている処理時間(乱数生成時間及び素数判定時間)を消去してもよい。この場合制御部403は、最新の処理時間を用いてRを算出することができる。一方で制御部403は、保存部404に格納されている処理時間を消去しなくてもよい。この場合制御部403は、蓄積された処理時間を用いてRを算出することができる。蓄積された処理時間でRを算出することで、Rの値は統計学的により信頼性の高いものとなる。
【0062】
上記説明した処理フローでは、制御部403は、処理時間に応じて乱数生成を行うCPUコアの数を制御した。しかしながら上述のように、制御部403は、GPUコアの数を制御してもよい。一例としては、Rが1以上である場合には制御部403はCPUコアの数を制御し、Rが1未満である場合には制御部403はGPUコアの数を制御してもよい。
【0063】
また上記の処理フローでは、初期状態として、乱数生成を行うCPUコアはCPUコア201だけであり、素数判定を行うGPUコアはGPUコア301,302であるものとしたが、これは例にすぎない。例えば初期状態において、乱数生成を行うCPUコアは2つのCPUコア201,202であってもよい。
【0064】
[実施例2]
実施例1に係る情報処理システム100においては、第1の演算装置(CPU)が乱数を生成し、第2の演算装置(GPU)が素数判定を行った。そして、CPUコアが乱数を生成するのにかかる時間と、GPUコアが素数を判定するのにかかる時間を近づけることにより、各コアで発生する待ち時間を減らすことができた。こうして、並列に素数を生成する場合の処理が効率化される。
【0065】
以下説明する実施例2では、第2の演算装置を用いずに、第1の演算装置(以下、単純に演算装置と称する)が並列に素数生成を行う。具体的には、演算装置が備える複数の処理装置が、乱数生成処理と素数判定処理とを分担する。実施例2においては、この場合に、各処理装置で発生する待ち時間を減らすことにより、処理が効率化される。
【0066】
図1と図6を参照して、本実施例におけるシステム構成を説明する。本実施例における全体のシステム構成は図1のとおりである。しかしながら本実施例においては、グラフィックボード102は存在しなくてもよい。本実施例に係るCPU101は、並列に動作する3つ以上のCPUコアを含む。本実施例に係るCPU101の例を図6に示す。図6のCPU101は、並列に動作する4つのCPUコア(第3の処理ユニット)を含む。
【0067】
図7を参照して、本実施例に係る情報処理システム100の機能構成について説明する。図7に示すように、情報処理システム100は演算装置101を含む。本実施例においても演算装置101はCPUであるものとするが、これには限定されない。図7の処理装置A〜Dは、それぞれ図6のCPUコア601〜604に該当する。キャッシュメモリ605〜608は、図2のキャッシュメモリ203〜204と同様の機能を有する。
【0068】
図7に示す各部の機能は、CPU101が、上述のようにプログラムに従って動作することにより実現される。すなわち、それぞれのCPUコア601〜604についての処理時間取得部701、乱数生成部402、及び素数判定部406の機能は、CPUコア601〜604のそれぞれの動作によって実現される。また、制御部702の機能は、CPU101の動作によって実現される。本実施例においては、CPUコア601〜604のそれぞれは、制御部702の制御に従って、乱数生成部402の機能又は素数判定部406の機能を実現する。すなわち制御部702は、CPUコア601〜604のそれぞれについて、乱数生成処理を行うのか、素数判定処理を行うのかを切り換えることができる。
【0069】
実施例1と同様に、本実施例に係るCPU101は、ヘテロジニアス型のマルチコアCPUであってもホモジニアス型のマルチコアCPUであってもよい。CPU101がホモジニアス型のマルチコアCPUである場合、制御部702の機能はCPUコア601〜604のそれぞれの動作によって実現される。また保存部404は、実施例1と同様にデータを保存し、CPU101の外部に存在しても内部に存在してもよい。
【0070】
以下、処理時間取得部701及び制御部702について説明する。乱数生成部402、保存部404、及び素数判定部406は、実施例1と同様の機能を有するから、これらの機能については説明を省略する。
【0071】
<処理時間取得部701>
処理時間取得部701は、乱数生成部402が乱数を生成するのに要した乱数生成時間、及び素数判定部406が素数判定を行うのに要した素数判定時間を取得する。そして処理時間取得部701は、取得した時間を保存部404に出力する。乱数生成時間の取得及び素数判定時間の取得は、実施例1と同様に行われうる。
【0072】
<制御部702>
制御部702は、処理時間取得部701が取得した時間に応じて、乱数生成部402と素数判定部406とを制御する。具体的には制御部702は、乱数生成時間と素数判定時間との比に応じて、乱数生成部402と素数判定部406とを制御する。例えば制御部702は、乱数を生成するように、すなわち乱数生成部402として動作させるように、CPUコアを制御できる。また制御部702は、素数判定を行うように、すなわち素数判定部406として動作させるように、CPUコアを制御できる。このように制御部403は、CPUコアの一部若しくは全部の動作制御を行う。
【0073】
そして制御部702は、乱数生成時間が素数判定時間以上である場合、乱数を生成するCPUコアの数を増やすか、又は素数判定を行うCPUコアの数を減らせばよい。また制御部702は、乱数生成時間が素数判定時間未満である場合、乱数を生成するCPUコアの数を減らすか、又は素数判定を行うCPUコアの数を増やせばよい。乱数生成時間と素数判定時間との比の算出方法は、実施例2と同様であるから、説明を省略する。
【0074】
以下で、制御部702の具体的な処理の一例について説明する。以下では、制御部702は実施例1と同様に乱数生成時間と素数判定時間との比Rを求めたものとする。ここで制御部702は、得られた値Rに従って、各CPUコア601〜604が行う処理を切り換える。具体的には制御部702は、([現在乱数を生成しているCPUコアの数]×R)個のCPUコアに乱数生成を行わせ、かつ残りのCPUコアに素数判定を行わせるように、各CPUコア601〜604を制御する。実施例1と同様に、乱数生成を行うCPUコアの数には上限(例えば([CPU101が有するCPUコアの数]−1)個)を設けてもよい。また、([現在乱数を生成しているCPUコアの数]×R)の小数点以下を四捨五入、切り捨て、又は切り上げてもよい。
【0075】
さらに、Rが1未満である場合、([現在素数判定を行っているCPUコアの数]/R」個のCPUコアに素数判定を行わせ、かつ残りのCPUコアに乱数生成を行わせるように、各CPUコア601〜604を制御してもよい。この場合にも、素数判定を行うCPUコアの数には上限(例えば([CPU101が有するCPUコアの数]−1)個)を設けてもよい。また、([現在素数判定を行っているCPUコアの数]/R)の小数点以下を四捨五入、切り捨て、又は切り上げてもよい。
【0076】
<本実施例に係る処理>
以下、図8を参照して本実施例における素数の生成処理のフローを説明する。図8は本実施例における処理フローを示すフローチャートである。
【0077】
ステップS801の開始時において、CPUコア601は乱数生成処理を行っており、CPUコア603,604は素数判定処理を行っているものとする。ステップS801においてCPUコア601の乱数生成部402は乱数を生成し、CPUコア603,604に出力する。乱数生成部402は、実施例1と同様に、乱数のビット長が([素数のビット長]×[乱数判定を行うCPUコアの数]/[乱数生成を行うCPUコアの数])の値以上となるように、乱数を生成する。生成された乱数の各CPUコアへの分配は、実施例1と同様に行うことができる。
【0078】
ステップS802でCPUコア601の処理時間取得部701は、ステップS801における乱数生成時間を取得し、保存部404に出力する。
【0079】
ステップS803においてCPUコア603,604のそれぞれの素数判定部406は、受け取った乱数が素数であるか否かを判定する。CPUコア603,604のいずれかが、受け取った乱数が素数であると判定した場合、CPUコア603,604はその素数を保存部404に出力し、素数生成処理は終了する。素数生成処理が終了する際には、制御部702は、各CPUコアに乱数生成処理及び素数判定処理を停止させる。ステップS803において、CPUコア603,604のいずれもが受け取った乱数は素数ではないと判定した場合、処理はステップS804に進む。ステップS804においてCPUコア603,604の処理時間取得部701は、ステップS803における素数判定時間を取得し、保存部404に出力する。
【0080】
ステップS805〜807において、制御部702は上述のように、乱数生成を行うCPUコアの数と素数判定を行うCPUコアの数とを決定する。ステップS805において制御部702は、保存部404内の乱数生成時間と素数判定時間とからRを算出する。ステップS806において制御部702は、Rに応じて乱数生成を行うCPUコアの数を制御する。ステップS807において制御部702は、素数判定を行うCPUコアの数を制御する。
【0081】
以下の例では、ステップS805において算出されたRが2であるものとする。この場合ステップS806において制御部702は、乱数生成を行うCPUコアの数は2個に増やされる。すなわち制御部702は、乱数生成処理を行うようにCPUコア602を制御する。
【0082】
ステップS807からステップS801に戻ると、2個のCPUコア601,602のそれぞれの乱数生成部402は並列に乱数を生成し、生成された素数を残りのCPUコア603,604に出力する。例えば、CPUコア601がCPUコア603に乱数を出力し、CPUコア602がCPUコア604に乱数を出力すればよい。
【0083】
ステップS802においてCPUコア601,602の処理時間取得部701は、乱数生成時間を保存部404に出力する。ステップS803においてCPUコア603,604の素数判定部406は、並列に素数判定を行う。素数が見つかれば素数生成処理は終了し、素数が見つからなければ処理はステップS804に進む。
【0084】
ステップS804においてCPUコア603,604の処理時間取得部701は素数判定時間を保存部404に出力する。ステップ805で制御部702は保存部404に格納された処理時間からRを算出する。ステップS806〜S807で、制御部702は乱数生成を行うCPUコアの数と素数生成を行うCPUコアの数とを制御する。その後、処理はステップS801に戻る。これらの乱数生成、素数判定、コア数制御という一連の処理が、ステップS803で素数が見つかるまで繰り返し行われる。
【0085】
素数判定を行うCPUコアがステップS803の素数判定をしている間に、乱数生成を行うCPUコアが次のステップS801の乱数生成を行うことにより、処理効率が向上し、より高速に素数生成を行うことができる。
【0086】
ステップS805におけるRの算出には、実施例1について説明したのと同様の変形例を用いてもよい。すなわち、Rを算出するたびに保存部404の処理時間を消去することにより、最新の処理時間をもとにRを算出してもよい。また、保存部404の処理時間を消去せずに、蓄積された処理時間を用いてRを算出してもよい。蓄積された処理時間を用いてRを算出することにより、統計学的により信頼性の高い値を求めることができる。また、Rが1未満である場合には、ステップS806及びステップS807において、([現在素数判定を行っているCPUコアの数]×R」個のCPUコアに素数判定を行わせ、残りのCPUコアに乱数生成を行わせるように制御してもよい。
【0087】
本実施例では初期状態において、CPUコア601が乱数生成を行い、CPUコア603,604が素数判定を行った。しかしながら、初期状態において乱数生成又は素数判定を行うCPUコアの組み合わせはこの限りではない。
【0088】
(他の実施形態)
本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア(プログラム)をネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ(又はCPUやMPU等)がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。

【特許請求の範囲】
【請求項1】
複数の処理ユニットと、該処理ユニットを生成ユニット又は判定ユニットとして動作させる制御手段と、を備える情報処理システムであって、
前記生成ユニットとして動作する処理ユニットは、乱数を生成し、かつ前記生成した乱数のビット列の少なくとも一部を、少なくとも1つの前記判定ユニットとして動作する処理ユニットに送信し、
前記判定ユニットとして動作する処理ユニットは、少なくとも1つの前記生成ユニットから送信されたビット列を組み合わせて所定ビット数の数値を生成し、前記生成した数値が素数であるか否かを判定し、かつ素数であると判定された前記数値を出力し、
前記制御手段は、前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要する時間と、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要する時間とが近くなるように、前記複数の処理ユニットの一部若しくは全部のそれぞれを前記生成ユニット又は前記判定ユニットとして動作させる制御を行う
ことを特徴とする、情報処理システム。
【請求項2】
前記制御手段は、
前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要した時間が、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要した時間よりも長い場合に、前記生成ユニットとして動作する処理ユニットの数が増えるように前記制御を行う第1の制御と、
前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要した時間が、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要した時間よりも長い場合に、前記判定ユニットとして動作する処理ユニットの数が減るように前記制御を行う第2の制御と、
前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要した時間が、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要した時間よりも短い場合に、前記生成ユニットとして動作する処理ユニットの数が減るように前記制御を行う第3の制御と、
前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要した時間が、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要した時間よりも短い場合に、前記判定ユニットとして動作する処理ユニットの数が増えるように前記制御を行う第4の制御と、
のうちの少なくとも1つを行うことを特徴とする、請求項1に記載の情報処理システム。
【請求項3】
前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要する前記時間は、前記生成ユニットとして動作する処理ユニットのそれぞれが前記乱数を生成するのに要する時間の最大値、中央値、最頻値、又は平均値であり、
前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要する前記時間は、前記判定ユニットとして動作する処理ユニットのそれぞれが前記数値について素数であるか否かを判定するのに要する時間の最大値、中央値、最頻値、又は平均値である
ことを特徴とする、請求項1又は2に記載の情報処理システム。
【請求項4】
前記処理ユニットはCPUコアであることを特徴とする、請求項1乃至3の何れか1項に記載の情報処理システム。
【請求項5】
前記生成ユニットとして動作する処理ユニットが生成する乱数のビット数は、前記判定ユニットとして動作する処理ユニットの数を、前記生成ユニットとして動作する処理ユニットの数で割り、得られた値に前記所定ビット数をかけることによって得られる値よりも大きくなるように制御されることを特徴とする、請求項1乃至4の何れか1項に記載の情報処理システム。
【請求項6】
複数の生成ユニットと、複数の判定ユニットと、該複数の生成ユニット及び該複数の判定ユニットの動作制御を行う制御手段と、を備える情報処理システムであって、
前記複数の生成ユニットのそれぞれは、乱数を生成し、かつ前記生成した乱数のビット列の少なくとも一部を、少なくとも1つの前記判定ユニットに送信し、
前記複数の判定ユニットのそれぞれは、少なくとも1つの前記生成ユニットから送信されたビット列を組み合わせて所定ビット数の数値を生成し、前記生成した数値が素数であるか否かを判定し、かつ素数であると判定された前記数値を出力し、
前記制御手段は、前記生成ユニットが前記乱数を生成するのに要する時間と、前記判定ユニットが前記数値について素数であるか否かを判定するのに要する時間とが近くなるように、前記生成ユニットと前記判定ユニットとの少なくとも一方について動作させるか否かを制御する
ことを特徴とする、情報処理システム。
【請求項7】
前記生成ユニットはCPUコアであり、前記判定ユニットはGPUコアであることを特徴とする、請求項6に記載の情報処理システム。
【請求項8】
複数の処理ユニットと、該処理ユニットを生成ユニット又は判定ユニットとして動作させる制御手段と、を備える情報処理システムが行う情報処理方法であって、
前記生成ユニットとして動作する処理ユニットは、乱数を生成し、かつ前記生成した乱数のビット列の少なくとも一部を、少なくとも1つの前記判定ユニットとして動作する処理ユニットに送信し、
前記判定ユニットとして動作する処理ユニットは、少なくとも1つの前記生成ユニットから送信されたビット列を組み合わせて所定ビット数の数値を生成し、前記生成した数値が素数であるか否かを判定し、かつ素数であると判定された前記数値を出力し、
前記情報処理方法は、前記情報処理システムの前記制御手段が、前記生成ユニットとして動作する処理ユニットが前記乱数を生成するのに要する時間と、前記判定ユニットとして動作する処理ユニットが前記数値について素数であるか否かを判定するのに要する時間とが近くなるように、前記複数の処理ユニットの一部若しくは全部のそれぞれを前記生成ユニット又は前記判定ユニットとして動作させる制御を行う制御工程を含むことを特徴とする、情報処理方法。
【請求項9】
コンピュータを、請求項1乃至7の何れか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


【公開番号】特開2013−37290(P2013−37290A)
【公開日】平成25年2月21日(2013.2.21)
【国際特許分類】
【出願番号】特願2011−175290(P2011−175290)
【出願日】平成23年8月10日(2011.8.10)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Bluetooth
【出願人】(000001007)キヤノン株式会社 (59,756)
【Fターム(参考)】