"乱数を生成するために用いるシードを保持するメモリと、前記メモリに格納されているシードを用いて乱数を生成する複数の演算ユニットと、前記複数の演算ユニットのうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示する指示手段とを備え、前記複数の演算ユニットのそれぞれは、前記指示手段により乱数発生処理の実行が指示されると、前記メモリに格納されているシードを用いて乱数を生成し、前記メモリに格納されているシードを該生成した乱数で更新する更新手段と、前記更新手段が生成した乱数が素数であれば、該生成した乱数を出力する出力手段とを備え、前記指示手段は、乱数発生処理の実行を指示した演算ユニットの更新手段による更新処理が完了したことを検知すると、該演算ユニットとは別の演算ユニット群のうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示することを特徴とする情報処理装置。シードの初期値を取得し、前記メモリに格納する取得手段をさらに備え、前記メモリは、前記取得手段によって初期値が格納されてから、シードが更新された回数を記録し、前記回数が増加した際に、前記指示手段は前記更新処理が完了したことを検知することを特徴とする、請求項1に記載の情報処理装置。前記情報処理装置はN個の前記演算ユニットを備え、それぞれの演算ユニットは1番からN番までの番号を有し、前記更新手段は、前記メモリに記録されている回数をNで割った余りを番号として有する演算ユニットに対して、前記乱数発生処理の実行を指示することを特徴とする、請求項2に記載の情報処理装置。前記指示手段は、前記回数が所定回数を超える場合に、前記取得手段に新たな初期値を取得して前記メモリに格納させることを特徴とする、請求項2又は3に記載の情報処理装置。前記更新手段は、前記回数が前記所定回数を超えている場合には、前記メモリに格納されているシードを取得せず、前記新たな初期値が前記メモリに格納されるのを待つことを特徴とする、請求項4に記載の情報処理装置。乱数を生成するために用いるシードを保持するメモリと、前記メモリに格納されているシードを用いて乱数を生成する複数の演算ユニットと、を備える情報処理装置が行う情報処理方法であって前記情報処理装置の指示手段が、前記複数の演算ユニットのうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示する指示工程と、前記演算ユニットの更新手段が、前記指示工程で乱数発生処理の実行が指示されると、前記メモリに格納されているシードを用いて乱数を生成し、前記メモリに格納されているシードを該生成した乱数で更新する更新工程と、前記演算ユニットの出力手段が、前記更新工程で生成した乱数が素数であれば、該生成した乱数を出力する出力工程とを備え、前記指示工程では、乱数発生処理の実行を指示された演算ユニットによる更新処理が完了したことを検知すると、該演算ユニットとは別の演算ユニット群のうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示することを特徴とする情報処理方法。コンピュータを、請求項1乃至5の何れか1項に記載の情報処理装置の各手段として機能させるための、コンピュータプログラム。GPUに搭載されている複数の演算ユニットを活用するには、素数の生成を多並列に行う必要がある。しかしながら特許文献1に記載の技術によれば、多並列に素数の生成を行う場合に、複数の演算ユニットが同一の乱数を生成する可能性がある。このことは、素数生成処理速度の低下をもたらしうる。本発明は、複数の演算ユニットを用いた並列処理において、より高速に素数を求めることを目的とする。本発明の目的を達成するために、例えば、本発明の情報処理装置は以下の構成を備える。すなわち、乱数を生成するために用いるシードを保持するメモリと、前記メモリに格納されているシードを用いて乱数を生成する複数の演算ユニットと、前記複数の演算ユニットのうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示する指示手段とを備え、前記複数の演算ユニットのそれぞれは、前記指示手段により乱数発生処理の実行が指示されると、前記メモリに格納されているシードを用いて乱数を生成し、前記メモリに格納されているシードを該生成した乱数で更新する更新手段と、前記更新手段が生成した乱数が素数であれば、該生成した乱数を出力する出力手段とを備え、前記指示手段は、乱数発生処理の実行を指示した演算ユニットの更新手段による更新処理が完了したことを検知すると、該演算ユニットとは別の演算ユニット群のうち何れか1つを選択し、該選択した演算ユニットに対して前記メモリに格納されているシードを用いた乱数発生処理の実行を指示することを特徴とする。複数の演算ユニットを用いた並列処理において、より高速に素数を求めることができる。以下、本発明の実施形態の一例を図面に基づいて説明する。ただし、本発明の範囲は以下の実施例に限定されるものではない。<システム全体構成>図1は、本実施例に係る情報処理システム100の例を示す。情報処理システム100は、CPU101、グラフィックボード102、主メモリ105、メモリコントローラハブ106、入出力コントローラハブ107、NIC108、記憶装置109、及び外部接続ポート110を含む。CPU101は、主メモリ105又は記憶装置109に記録されたプログラムコンピュータプログラムに従って、情報処理システム100の動作の少なくとも一部を制御する中央演算装置である。さらに、CPU101は物理的な雑音をビット列として取得することができる。物理的な雑音は任意のものでありうるが、例えば記憶装置109のシークタイムなどが挙げられる。グラフィックボード102は、GPU103とGPUメモリ104とを含む。グラフィックボード102は通常、画像処理に特化した拡張ボードである。GPU103は、リンク118を介してGPUメモリ104に接続される。GPU103は、リンク113を介してCPU101からGPUメモリ104へと転送されたプログラムに従って、グラフィックボード102の動作の少なくとも一部を制御する演算ユニットを有する。GPUメモリ104は、GPU103を制御するプログラムを格納することができる。GPUメモリ104はまた、GPU103の動作中にデータを一時的に記憶することができる。GPUメモリ104は、例えばRAMでありうる。主メモリ105は、CPU101を制御するプログラムを格納することができる。主メモリ105はまた、CPU101の動作中にデータを一時的に記憶することができる。主メモリ105は、例えばRAMでありうる。メモリコントローラハブ106は、リンク113、114、115及び116を介してそれぞれCPU101、主メモリ105、グラフィックボード102及び入出力コントローラハブ107と接続されている。メモリコントローラハブ106は、主メモリ105、グラフィックボード102及び入出力コントローラハブ107の間のデータ転送を制御する。入出力コントローラハブ107は、リンク117、118及び119を介してそれぞれNIC108、記憶装置109及び外部接続ポート110と接続されている。入出力コントローラハブ107は、メモリコントローラハブ106、NIC108、記憶装置109及び外部接続ポート110の間のデータ転送を制御する。NIC108は、ネットワークに接続するための通信インターフェイスである。NIC108は例えば、有線LAN、無線LAN、又はBluetooth用の通信カード等でありうる。記憶装置109は、CPU101が実行するプログラム、CPU101が処理に用いるデータ、及び外部から取得したデータ等を格納する。記憶装置は例えば、ハードディスクのような磁気記憶装置、又はSSDのようなフラッシュメモリでありうる。情報処理システム100は、複数の記憶装置109を有していてもよい。外部接続ポート110は、外部機器を情報処理システム100に接続するためのポートである。外部接続ポート110は、例えばUSBポート、IEEE1394ポート、HDMIポート等でありうる。この外部接続ポート110に入力装置111を接続することで、情報処理システム100は入力装置111からデータを取得することができる。情報処理システム100は、複数の外部接続ポート110を有していてもよい。入力装置111は、外部接続ポート110を介して情報処理システム100にデータを入力する機器である。入力装置111は例えば、キーボード、マウス等でありうる。出力装置112は、情報処理システム100が出力するデータを視覚的に表示する装置である。出力装置112は、グラフィックボード102が有するポートに接続されることができる。また出力装置112は、外部接続ポート110に接続されてもよい。出力装置112の例としては、例えば液晶モニタ等が挙げられる。出力装置112が接続されるポートの例としては、例えばHDMIポート等が挙げられる。リンク113、114、115、116、117、118、及び119はシリアルバスである。リンク113、114、115、116、117、118、及び119は例えば、PCI又はPCIエクスプレス等などのバスでありうる。以上、本実施例に係る情報処理システム100として利用可能なハードウェア構成の一例を示した。以上説明された情報処理システム100は、例えば、パーソナルコンピュータ等を用いて実現することができる。しかしながら、本実施例に係る情報処理システム100は上述の構成に限定されるものではない。例えば変形例において、情報処理システム100はグラフィックボード102を含まずにGPU103を含んでいてもよい。この場合、GPU103が主メモリ105に対してデータを読み書きできるように、情報処理システム100を構成すればよい。また、CPU101にGPU103を統合してもよい。この場合にも、情報処理システム100はグラフィックボード102を有さなくてもよい。他の実施例として、CPUとGPUとの少なくとも一方として、暗号処理に特化したハードウェアである暗号アクセラレータを用いてもよい。また、CPUとGPUとの少なくとも一方として、演算処理が可能なIPコアを用いてもよい。<GPU103の構成>以下、図2を参照してGPU103について詳しく説明する。図2は、本実施例に適用可能なGPU103の構成例を示す。図2において、GPU103は2つの演算ユニット201,202を含む。しかしながら、GPU103が含む演算ユニットの数は2つに限定されない。GPU103は、2つ以上の演算ユニットを含みうる。演算ユニット201及び202は、並列動作が可能な演算装置である。例えば演算ユニット201及び202は、それぞれ別の命令を実行することができ、また別のデータを扱うことができる。演算ユニット201はキャッシュメモリ203を含む。演算ユニット201は、GPUメモリ104又はキャッシュメモリ203に記録されたプログラムに従って、GPU103内の動作の少なくとも一部を制御する。また、また、演算ユニット202はキャッシュメモリ204を含む。演算ユニット202は、GPUメモリ104又はキャッシュメモリ204に記録されたプログラムに従って、GPU103内の動作の少なくとも一部を制御する。キャッシュメモリ203及び204は、高速に読み書き可能な小容量メモリである。<情報処理システム100の機能構成>以下、図5を参照して、図1に係る情報処理システム100の機能構成について説明する。本実施例に係る情報処理システム100は、並列に素数の生成を行うことができる。図5に示すように、情報処理システム100は演算装置と外部演算装置とを含む。演算装置としては、例えば前述したCPU101を用いることができる。また外部演算装置としては、前述したGPU103を用いることができる。この場合、処理装置0及び処理装置1は、それぞれ演算ユニット201及び演算ユニット202に対応する。しかしながら、本実施例で用いられる演算装置及び外部演算装置は、上述のCPU101及びGPU103には限られない。例えば、演算装置101又は外部演算装置103として、前述した暗号アクセラレータを用いてもよい。以下の説明では、演算装置としてCPU101を用いる。また、外部演算装置としてGPU103を用いる。図5に示すように、演算装置101はシード生成部501を備える。また、外部演算装置103は保存部502、制御部503、シード更新部504、乱数生成部505、及び素数判定部506を備える。また、並列に動作可能な演算ユニット201,202はそれぞれ、シード更新部504、乱数生成部505、及び素数判定部506を備える。以下、これらの各部について説明する。<シード生成部501>以下で、シード生成部501について説明する。シード生成部501は、乱数の種となるシードの初期値を生成し、生成した初期値をGPU103に出力する。シードの生成方法としては任意の公知の方法を用いることができる。本実施例においては、シードの生成のためにエントロピーを用いる。本実施例においてエントロピーとは、物理的な雑音をビット列に変換することによって得られる値である。すなわちシード生成部501は、熱雑音などの物理的な雑音が蓄積されるエントロピーソースから、シードの生成に必要な分のエントロピーを取得する。シードの生成に必要なエントロピーは、生成する乱数のセキュリティ強度によって異なる。例えばセキュリティ強度が128bitの乱数を生成するときは、128bit以上のエントロピーが必要となる非特許文献1を参照。シード生成部501が十分なエントロピーを取得すると、シード生成部501は、エントロピーを用いてシードを生成する。例えば、エントロピーに対してハッシュ関数を適用することにより、シードを生成することができる非特許文献1を参照。また、エントロピーに対してナンスなどの付加データを追加した後に、ハッシュ関数を適用してもよい非特許文献1。また、ハッシュ関数の代わりにブロック暗号アルゴリズムを用いることもできる非特許文献1。そしてシード生成部501は、生成したシードを保存部502に出力する。シード生成部501は、保存部502に格納されているシード更新回数及び限界シード更新回数に従って、シードを生成及び出力する。ここでシード更新回数とは、シードの更新回数を表す値である。シード生成部501が生成したシードを保存部502に格納する際に、シード生成部501は、保存部に格納されているシード更新回数を0に初期化する。その後、シード更新部504が保存部502に格納されているシードを更新する際に、シード更新部504は、保存部502に格納されているシード更新回数を更新する。限界シード更新回数所定回数は、1つのシードから生成できる乱数の総数を示す。1つのシードを更新しながら多数の乱数を生成すると、乱数の周期性が知られる可能性が高くなる。そこで本実施例においては、1つのシードから生成できる乱数の数が予め定められている。限界シード更新回数は、例えばユーザが設定することができる。シード生成部501は、シード更新回数が限界シード更新回数を超えたと判断すると、保存部502に格納されているシードを新しいシードで置き換える。すなわち、シード生成部501は、まず保存部502のシードを削除する。次にシード生成部501は上述のようにエントロピーを用いてシードを生成し、生成したシードを保存部502に格納する。そしてシード生成部501は、保存部502に格納されているシード更新回数を0に初期化する。シード更新回数が限界シード更新回数以下の場合にも、シード生成部501は、エントロピーを用いたシードの生成処理を行ってもよい。この場合、シード更新回数が限界シード更新回数を超えたときに、シード生成部501は生成されたシードを素早く保存部502に格納することができる。<保存部502>保存部502は、上述のように、乱数を生成するために用いるシード、シード更新回数、及び限界シード更新回数などのデータを格納保持することができる。<制御部503>以下で、制御部503について説明する。制御部503は、乱数生成部505の動作を制御する。特に制御部503は、複数の乱数生成部505のそれぞれが同一の乱数を生成しないように、乱数生成部505を制御指示する。本実施例において制御部503は、複数の演算ユニット群201,202のうち何れか1つを選択する。そして、選択した演算ユニットに対して、乱数発生処理の実行を指示する。具体的には制御部503は、保存部502に格納されたシード更新回数と、演算ユニット201,202に予め割り当てられた識別子とに応じて、乱数生成部505を制御する。本実施例において制御部503は、シード更新回数を演算ユニットの総数で割った余りを参照してこの制御を行う。以降、シード更新回数を演算ユニットの総数で割った余りをシード更新回数mod演算ユニット総数と記述する。識別子とは、演算ユニット201,202を特定する数字である。識別子は、各演算ユニットに対して0から順に割り当てられる。本実施例において、演算ユニット201は識別子0を割り当てられており、演算ユニット202は識別子1を割り当てられている。制御部503は、保存部502に格納されているシード更新回数を参照して、1つの演算ユニットに対し、保存部502に格納されているシードを用いて乱数を生成させる。具体的には制御部503は、シード更新回数mod演算ユニット総数に一致する識別子が割り当てられた演算ユニットに対し、保存部502に格納されているシードを用いて乱数を生成させる。このようにして、並列動作を行う演算ユニット201,202が同一の乱数を生成し、演算ユニット201,202が同一の乱数に対して素数判定を行うことを回避できる。より一般的に、情報処理システム100がN個の演算ユニットを有している場合について説明する。この場合、それぞれの演算ユニットには1番からN番までの番号識別子が付される。そして、シード更新回数mod演算ユニット総数と一致する番号を有する演算ユニットに対し、制御部503は保存部502に格納されているシードを用いて乱数を生成させる。<シード更新部504>以下で、シード更新部504について説明する。シード更新部504は、保存部502に格納されているシードを更新する。またシード更新部504は、保存部502に格納されているシードを更新する際に、保存部502に格納されているシード更新回数を変更する。乱数生成器は通常、同一のシードからは同じ乱数を生成する。そこで、複数の乱数を生成するために、シードが更新される。つまりシード更新部504は、乱数生成部505が乱数を生成する度に、保存部502に格納されているシードを更新する。この際シード更新部は、乱数生成部505が生成した乱数を用いて、保存部502に格納されているシードを更新することができる非特許文献1を参照。例えばシード更新部504は、乱数生成部505が生成した乱数で、保存部502に格納されているシードを置換すればよい。またシード更新部504は、保存部502に格納されているシードを更新する際に、保存部502に格納されているシード更新回数を更新する。例えば、シード更新回数をインクリメントすればよく、具体的にはシード更新回数に1を加えればよい。<乱数生成部505>以下で、乱数生成部505について説明する。乱数生成部505は、制御部503に指示されると、保存部502に格納されているシードと、乱数生成器とを用いて乱数を生成する。そして乱数生成部505は、生成した乱数を素数判定部506に出力する。乱数生成器は、シードから乱数を生成する。乱数生成器は任意の公知の方法を用いて乱数を生成することができ、例えば、ハッシュ関数やブロック暗号アルゴリズムなどを用いることができる非特許文献1を参照。なお、保存部502に格納されているシード更新回数が限界シード更新回数を超えている場合には、乱数生成部505は乱数の生成を行わず、シード生成部501によって新しいシードが保存部502に格納されるのを待つ。<素数判定部506>以下で、素数判定部506について説明する。素数判定部506は、乱数生成部505が出力した乱数が素数であるか否かを判定する。素数判定には任意の公知の方法を用いることができ、例えばミラーラビン法を用いることができる非特許文献2。素数判定部506は、乱数生成部505が出力した乱数が素数であると判断すると、素数生成が完了したことをCPU101に通知する。本実施例において素数判定部506は、乱数が素数であると判断すると、CPU101に生成された素数を転送する。また素数判定部506は、乱数が素数であると判断すると、保存部502に格納されている素数生成完了フラグをONにする。素数生成完了フラグは、素数の生成が完了した時にONとなり、素数の生成が完了していないときにOFFとなるフラグである。素数生成完了フラグを参照することにより、CPU101は素数が生成されたことを知ることができる。<本実施例に係る処理フロー>以下、図3及び図4を参照して、本実施例に係る素数の生成処理のフローを説明する。本実施例に係る素数の生成処理は、CPU101での処理とGPU103での処理とに分けられる。そこで本明細書では、CPU101における処理フローと、GPU103における処理フローとについて、それぞれ説明する。<CPU101における処理フロー>図3は本実施例におけるCPU101で実行される処理フローを示すフローチャートである。ステップS301においてシード生成部501は、保存部502に格納されている素数生成完了フラグをOFFにする。ステップS302においてシード生成部501は、エントロピーソースにシードを作るのに十分なエントロピーが溜まっているか否かを確認する。所定量のエントロピーが溜まっていない場合、シード生成部501は所定量のエントロピーがエントロピーソースに溜まるのを待つ。所定量のエントロピーが溜まっている場合、処理はステップS303に進む。ステップS303においてシード生成部501は、エントロピーソースからエントロピーを取得し、上述のようにシードを生成する。ステップS304においてシード生成部501は、限界シード更新回数を設定する。具体的にはシード生成部501は、予め定められた限界シード更新回数を保存部502に格納すればよい。ステップS305においてシード生成部501は、ステップS303で生成したシードを保存部502に格納する。限界シード更新回数及び生成されたシードは、メモリコントローラハブ106を介してGPU103へと転送される。ステップS306においてシード生成部501は、GPU103において素数の生成が完了したか否かを判定する。具体的には、保存部502に格納されている素数生成完了フラグがONであるか否かを判定すればよい。素数生成完了フラグがONであれば、ステップS307においてシード生成部はメモリコントローラハブ106を介して保存部502から生成された素数を取得する。そしてシード生成部501は、GPU103の処理を停止させる。素数生成完了フラグがOFFであれば、処理はステップS308に進む。ステップS308においてシード生成部501は、シードの再生成が必要であるか否かを判定する。具体的には上述のように、シード更新回数が限界シード更新回数を超える場合に、シード生成部501はシードの再生成が必要であると判定する。シードの再生成が必要である場合、処理はステップS302に戻る。シードの再生成が必要ではない場合、処理はステップS306に戻る。<GPU103における処理フロー>GPU103においては、GPU103の構成要素である演算ユニット201及び演算ユニット202が並列に処理を行う。演算ユニット201と202とは同じフローに従って処理を行う。したがって、本明細書においては演算ユニット201の処理フローについてのみ説明する。図4は、本実施例に係る演算ユニット201で実行される処理フローを示すフローチャートである。ステップS401において乱数生成部505は、CPU101から転送されたシードが保存部502に格納されているか否かを確認する。シードが格納されていない場合、乱数生成部505は保存部502にシードが格納されるまで待つ。シードが格納されている場合、ステップS402において乱数生成部505は、格納されているシードで乱数生成器を初期化する。ステップS403において乱数生成部505は、保存部502に格納されているシード更新回数と限界シード更新回数とを比較する。シード更新回数が限界シード更新回数を超えている場合、処理はステップS401に戻る。超えていない場合、処理はステップS404に進む。ステップS404において乱数生成部505は、現在保存部502に格納されているシードを用いて乱数を生成してもよいかを、制御部503に問い合わせる。制御部503の詳細な処理については後述する。乱数を生成してはいけない場合、処理はステップS403に戻る。乱数を生成してもよい場合、処理はステップS405に進む。このステップS404により、複数の演算ユニットが同一のシードを用いて乱数を生成することが防止される。ステップS405において乱数生成部505は、保存部502にシードが格納されているか否かを再び確認する。シードが格納されていない場合、処理はステップS401に戻る。シードが格納されている場合、ステップS406において乱数生成部505は、保存部502に格納されているシードを用いて乱数を生成する。ステップS407において乱数生成部505は、ステップS406で生成された乱数を用いて、保存部502に格納されているシードを更新する。また乱数生成部505は、保存部502に格納されているシード更新回数をインクリメントする。ステップS408において素数判定部506は、ステップS406において生成された乱数が素数かどうかを判定する。生成された乱数が素数でないと判定された場合、処理はステップS403に戻る。生成された乱数が素数であると判定された場合、ステップS409において素数判定部506は保存部502に格納されている素数生成完了フラグをONにし、処理は終了する。次に、複数の演算ユニット201,202が同一のシードを用いて乱数を生成することを防止するステップS404について詳しく説明する。上述のように、演算ユニット201は識別子として0を有し、演算ユニット202は識別子として1を有する。また、本実施例において演算ユニット総数は2である。したがって、シード更新回数は0か1かの何れかの値を持つ。すなわち、演算ユニット201についての識別子0が、シード更新回数と一致しない場合、演算ユニット202についての識別子1は、シード更新回数と一致する。また、この逆も成り立つ。ステップS404において制御部503は、演算ユニットの識別子とシード更新回数とが一致する場合に、演算ユニットに対して乱数の生成を許可する。演算ユニット201は、制御部503によって乱数の生成を許可されるまで、ステップS403~S404を繰り返す。すなわち演算ユニット201は、演算ユニット201の識別子とシード更新回数が一致するまで、ステップS403~S404を繰り返す。一方で演算ユニット201が乱数の生成を許可されていない際に、演算ユニット202は乱数の生成を許可されている。従って演算ユニット202は乱数を生成し、生成された乱数を用いて保存部502に格納されているシードを更新するとともに、シード更新回数に1を加える。シード更新回数が1つ増えると、演算ユニット201の識別子とシード更新回数が一致する。このため、演算ユニット201は制御部503によって乱数の生成を許可される。一方で、今度は演算ユニット202の識別子とシード更新回数が不一致となる。このため、演算ユニット202は保存部502に格納されているシードが更新されるまで、乱数の生成を許可されない。このように、制御部503は保存部502に格納されているシード更新回数を監視する。そして制御部503は、シード更新回数の増加を検出することにより、ある演算ユニットによる乱数生成処理及びシード更新処理が終了したことを検知できる。制御部503は、ある演算ユニットによってシードが更新されたことを検出すると、別の演算ユニットに乱数の生成を許可する。このような処理により、演算ユニット201,202が同一のシードを用いて乱数を生成することを回避することができる。もっとも制御部503は、シードを更新した演算ユニットを特定する情報を参照して、別の演算ユニットに乱数の生成を許可してもよい。また制御部503は、演算ユニットが処理を行っているか否か、例えば素数判定処理を完了しているか否かを示すフラグを参照して、処理を行っていない1つの演算ユニットに対して乱数の生成を許可してもよい。このように制御部503は、様々な方法を用いて、1つのシードを用いた乱数の生成を特定の演算ユニットのみに行わせるように、演算ユニットを制御することができる。以上説明したように本実施例によれば、CPUはエントロピーソースを用いてシードの生成処理を行う。また、GPUは並列にシードから乱数の生成及び素数の判定を行う。このように、エントロピーソースを持たないGPUが素数を生成することが可能となる。本実施例によれば、同一の乱数に対して複数のGPUが素数判定を行うことが回避される。このため、無駄な素数判定処理を回避することができる。さらに、負荷の大きい素数判定をGPUで並列に処理できるため、CPUの負荷を下げることができ、かつ素数生成を高速化することが可能となる。<変形例1>上述の実施例は一例に過ぎず、別の実施例を採用することもできる。例えば、実施例1において乱数生成部505は、保存部502に格納されているシードを用いて乱数を生成してもよいかを、制御部503に問い合わせた。しかしながら素数判定部506が、素数判定を行ってもよいかを、制御部503に問い合わせてもよい。この場合制御部503は、実施例1において乱数生成部505を制御したのと同様に、素数判定部506を制御することができる。またこの場合、乱数生成部505は問い合わせを行うことなく、保存部502に格納されているシードを用いて乱数を生成してもよい。こうすることにより、複数の演算ユニットが、同一のシードを用いて生成された同一の乱数について素数であるか否かを判定することを回避できる。<変形例2>各演算ユニット201,202は別々のシードを用いてもよい。つまり、演算ユニットのそれぞれに対応付けられたシードが、保存部502に格納される。この場合、シード生成部501が生成した1つのシードが、それぞれの演算ユニットによって共通に用いられてもよい。各演算ユニット201,202は、対応付けられたシードを用いて、上述のように乱数生成、シード更新、及び素数判定を行う。このとき素数判定部506は、シード更新回数と識別子とが一致しない時には、乱数生成部505が生成した乱数が素数であるか否かを判定しない。こうすることにより、複数の演算ユニットが、同一のシードを用いて生成された同一の乱数について素数であるか否かを判定することを回避できる。<変形例3>乱数生成部505が、保存部502に格納されているシードを用いて乱数を生成してもよいかを、制御部503に問い合わせることは必ずしも必須ではない。例えば乱数生成部505は、保存部502に格納されているシード更新回数を確認し、保存部502に現在格納されているシードを用いて乱数を生成してもよいかを判定することができる。この判定は、制御部503と同様に行うことができる。<変形例4>各演算ユニット201,202は、ステップS408において素数を見つけた後に、その素数を用いて鍵生成処理を行ってもよい。この場合情報処理システム100は、並列に複数の鍵を生成することができる。他の実施形態本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェアプログラムをネットワーク又は各種記憶媒体を介してシステム或いは装置に供給する。そして、そのシステム或いは装置のコンピュータ又はCPUやMPU等がプログラムコードを読み出して実行する。この場合、そのプログラム、及び該プログラムを記憶した記憶媒体は本発明を構成することになる。"