(57)【要約】複数の単位処理を複数のプロセッサで効率よく簡便に並列処理する並列処理装置を提供する。データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し第１の結果を出力する第１のプロセッサ、単位処理を規定した第２のプログラムを入力されたデータに対して実行し第２の結果を出力する第２のプロセッサ、第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいてデータ集合から第１の部分集合および第２の部分集合を選択する選択手段、第１の部分集合に含まれる第１のデータを第１のプロセッサに入力する第１のプロセッサ制御手段、第２の部分集合に含まれる第２のデータを第２のプロセッサに入力する第２のプロセッサ制御手段を備え、第１および第２のプロセッサによって第１および第２のプログラムは並列に実行される。
2014132608.tif 000002
【特許請求の範囲】
【請求項１】
データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを、入力されたデータに対して実行し、第１の結果を出力する第１のプロセッサと、
前記単位処理を規定した第２のプログラムを、入力されたデータに対して実行し、第２の結果を出力する第２のプロセッサと、
前記第１のプロセッサおよび前記第２のプロセッサの性能または機能を示す所定の指標に基づいて、前記データ集合から第１の部分集合および第２の部分集合を選択する選択手段と、
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力する第１のプロセッサ制御手段と、
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力する第２のプロセッサ制御手段と、を備え、
前記第１のプロセッサおよび前記第２のプロセッサによって、前記第１のプログラムおよび前記第２のプログラムは並列に実行される
ことを特徴とする並列処理装置。
【請求項２】
前記第１のプログラムおよび前記第２のプログラムは、第１の前記データ集合に含まれるデータおよび第２の前記データ集合に含まれるデータを入力として実行される前記単位処理を規定し、
前記選択手段は、前記指標に基づいて、前記第１のデータ集合から前記第１の部分集合および前記第２の部分集合を選択し、前記第２のデータ集合から第３の部分集合および第４の部分集合を選択し、
前記第１のプロセッサ制御手段は、前記第１の部分集合に含まれる前記第１のデータおよび前記第３の部分集合に含まれる第３のデータを前記第１のプロセッサに入力し、
前記第２のプロセッサ制御手段は、前記第２の部分集合に含まれる前記第２のデータおよび前記第４の部分集合に含まれる第４のデータを前記第２のプロセッサに入力する、
ことを特徴とする請求項１に記載の並列処理装置。
【請求項３】
前記指標は、前記第１のプロセッサおよび前記第２のプロセッサを用いて並列に実行可能な処理の数である
ことを特徴とする請求項１または２に記載の並列処理装置。
【請求項４】
所定の判断基準に基づいて、前記第１の結果または前記第２の結果を最終結果として出力する出力手段を備える
ことを特徴とする請求項１ないし３のいずれか１項に記載の並列処理装置。
【請求項５】
前記第１のプログラムおよび第２のプログラムは、第１の前記データ集合に含まれるデータおよび少なくとも２個のデータを含む第２の前記データ集合に含まれるデータを入力として実行される前記単位処理を規定し、
前記選択手段は、前記指標に基づいて、前記第２のデータ集合から第３の部分集合および第４の部分集合を選択し、
前記第１のプロセッサ制御手段は、前記第１のデータ集合に含まれる前記第１のデータおよび前記第３の部分集合に含まれる第３のデータを前記第１のプロセッサに入力し、
前記第２のプロセッサ制御手段は、前記第２のデータ集合に含まれる前記第２のデータおよび前記第４の部分集合に含まれる第４のデータを前記第２のプロセッサに入力し、
前記単位処理は、前記第１のデータ集合に含まれる被照合データである前記第１のデータと予め登録された前記第２のデータ集合に含まれる登録済データである前記第２のデータとの照合、および入力された前記被照合データである前記第３のデータと前記登録済データである前記第４のデータとの照合を行い、前記被照合データと前記登録済データとの一致の度合いを示す照合スコアを算出する照合処理であり、
前記照合スコアが最も高い前記登録済データを前記最終結果として出力する出力手段をさらに備える
ことを特徴とする請求項１に記載の並列処理装置。
【請求項６】
前記第１のプロセッサは、所定の第３のプログラムを実行することによって、
前記照合処理の進行状況を管理する照合管理手段と、
前記登録済データ集合から、未照合の前記登録済みデータの集合を、ブロックとして選び出すブロック切り出し手段と、
前記出力手段からの前記最終結果を得て、前記進行状況を前記照合管理手段に伝えるとともに、前記登録済データ集合の全体についての前記照合スコアが最高である前記登録済データを求める結果登録手段と、
前記ブロック切り出し手段、前記結果登録手段と、コプロセッサ上の前記結果登録手段との間の通信を行う第１の通信手段と
を実現し、
前記第２のプロセッサは、所定の第４のプログラムを実行することによって、
１組のデータ間の照合処理を行う単位照合手段と、
前記ブロックの各データと前記被照合データとの前記照合処理を実行し、前記ブロック内での最高の前記照合スコアを前記最終結果として求める単位照合制御手段と
を実現し、
前記第１のプロセッサおよび前記第２のプロセッサは、前記ブロック内の前記登録済みデータと前記被照合データとの照合を並列処理する
ことを特徴とする請求項５に記載の並列処理装置。
【請求項７】
前記第１のプロセッサおよび上で所定の仕様に沿って前記照合処理を行う第１の単位照合手段と、
前記第２のプロセッサ上で前記仕様に沿って前記照合処理を行う第２の単位照合手段と、
前記第１のプロセッサ上にあって前記登録済データ集合の各データと前記被照合データとの照合処理の進行状況を管理する照合管理手段と、を備え、
前記選択手段は、前記第１のプロセッサ上にあって前記登録済データ集合から１つないし複数の未照合のデータの集合をブロックとして選び出すと、
前記第１のプロセッサ制御手段は、前記選び出したブロックの各データと前記被照合データを前記第１のプロセッサに与えて並列に前記照合処理を行わせ、前記ブロック内での最高照合スコアを第１の結果として求め、
前記第２のプロセッサ制御手段は、前記選び出したブロックの各データと前記被照合データを前記第２のプロセッサに与えて並列に前記照合処理を行わせ、前記ブロック内での最高照合スコアを第２の結果として求め、
前記出力手段は、前記第１の結果および第２の結果に基づいて、前記最終結果を求める
ことを特徴とする請求項６に記載の並列処理装置。
【請求項８】
前記第１のプログラムは、所定の共通言語を用いて前記データ処理の手順が規定された共通プログラムから、前記第１のプロセッサ用の第１の言語を用いたプログラムに変換されたものであり、
前記第２のプログラムは、前記共通プログラムから前記第２のプロセッサ用の第２の言語を用いたプログラムに変換されたものである
ことを特徴とする請求項５ないし７のいずれか１項に記載の並列処理装置。
【請求項９】
並列処理装置に備えられた第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいて、データ集合から第１の部分集合および第２の部分集合を選択し、
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力し、
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力し、
前記データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを、前記第１のプロセッサを用いて、前記第１のデータに対して実行して第１の結果を出力し、
前記単位処理を規定した第２のプログラムを、前記第２のプロセッサを用いて、前記第２のデータに対して前記第１のプログラムと並列に実行して第２の結果を出力する
ことを特徴とする並列処理方法。
【請求項１０】
データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し、第１の結果を出力する第１のプロセッサ、および前記単位処理を規定した第２のプログラムを入力されたデータに対して実行し、第２の結果を出力する第２のプロセッサを含む並列処理装置に備えられたプロセッサを、
前記第１のプロセッサおよび前記第２のプロセッサの性能または機能を示す所定の指標に基づいて、前記データ集合から第１の部分集合および第２の部分集合を選択する選択手段、および
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力する第１のプロセッサ制御手段、または
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力する第２のプロセッサ制御手段として機能させるための並列処理プログラムであって、
前記第１のプロセッサおよび前記第２のプロセッサによって、前記第１のプログラムおよび前記第２のプログラムは並列に実行される並列処理プログラム
を格納することを特徴とする非一時的な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセッサを用いた処理装置に関し、特に、複数のプロセッサコアを用いて多数のデータの処理を並列に行う装置に関する。
【背景技術】
【０００２】
監視カメラによる画像認識、指紋や虹彩を使った生体認証など、高度な認識、照合処理に対する要求が高まっている。これらの処理は、事前登録された多数のデータと、入力として与えられた被照合データとを照合し、被照合データに最も近い（一致しているとの尤度の最も高い）登録済みデータを見つけ出すものである。システムの高度化・大規模化により、１つの被照合データの処理時間の短縮だけでなく、多数の被照合データの処理スループットを上げることも求められる。認識アルゴリズムの改良への対応とシステム構成の柔軟性の確保との観点から、こうした大規模照合システムは汎用的なプロセッサ上のソフトウェアによる実現が好適と考えられる。【０００３】
他方、半導体デバイスの観点からみると、プロセッサの動作クロックの向上は近年鈍化しており、複数あるいは多数のプロセッサコアによる並列処理により性能の向上を図る流れが進んでいる。例えば、パーソナルコンピュータやサーバ等、汎用処理装置向けのＣＰＵ（Central Processing Unit）には、２個から８個程度のコアを有するマルチコア構成のものがある。また、画像処理や科学技術計算向けのＧＰＵ（Graphical Processing Unit）では、数百個のシンプルなコアを有する多数コア（メニコア）構成のものがある。【０００４】
大規模照合システムは、照合処理だけでなく、登録データ管理や入出力制御等の汎用的な処理も行う必要があることから、汎用的なホストプロセッサと照合向きのメニコア構成のコプロセッサの組み合わせによって構築されることが好適である。そこで必要になる技術が、高度かつ大規模な照合処理を、ホストプロセッサとコプロセッサに適切に分担させて処理する並列処理技術である。【０００５】
照合や認識にかかわる並列処理技術として次のものがある。【０００６】
特許文献１で開示された技術は、３次元物体の照合処理において、スレッド毎の処理データの量が均等で、かつ所定量以下になるように領域を分割してＧＰＵにデータを投入し、ＧＰＵに並列処理させるものである。【０００７】
特許文献２で開示された技術は、パターン認識処理において、辞書データとの照合を、辞書パターンの個数と同数の複数プロセッサコアで並列に行うものである。【０００８】
特許文献３は、映像音声コンテンツを、それを構成するチャプターデータを単位として比較し、所定のチャプターデータを検出する情報記録装置を開示する。特許文献３の情報記録装置では、並列処理技術の適用は特に考慮されていない。【０００９】
特許文献４は、入力パターンとテンプレートパターンとの類似度を演算してパターンマッチングを行うデータ処理装置を開示する。特許文献４のデータ処理装置は、類似度を演算する際、入力データを１ビットずつシリアルに入力する。特許文献４のデータ処理装置では、並列処理技術を用いた演算は行われない。【００１０】
特許文献５は、将来リードアクセスが予想される画像データをプリフェッチし、キャッシュメモリへ格納する表示制御システムを開示する。【００１１】
非特許文献１で説明されているＯｐｅｎＣＬ（Open Computing Language。登録商標）技術は、ホストプロセッサからコプロセッサ（典型的にはＧＰＵ）を利用するための汎用技術である。ＯｐｅｎＣＬ技術を用いることによって、特定のコプロセッサ製品への依存性が少ないプログラミングが可能である。具体的には、ＯｐｅｎＣＬ技術の利用者は、実行対象の処理（以降、「対象処理」という。）の中枢アルゴリズムに加え、対象処理を並列処理することが可能な単位処理へ分割（以降、「並列分割」という。）するための方式を決める。そして、利用者は、決定した方式に応じたホストプロセッサ−コプロセッサ間の通信指示をＯｐｅｎＣＬの書式に沿って指示する。利用者による以上の操作によって、コプロセッサを利用した並列処理システムが実現される。
【先行技術文献】
【特許文献】
【００１２】
【特許文献１】特開２０１０−１３４６６９号公報
【特許文献２】特開２００１−１２６０３０号公報
【特許文献３】特開２００６−２６２３１１号公報
【特許文献４】特開２００３−２４３９８８号公報
【特許文献５】特開平６−３３２６６４号公報
【非特許文献】
【００１３】
【非特許文献１】Ofer Rosenberg, "OpenCL Overview",［online］, ２０１１年１１月, KHRONOS Group, [２０１３年１月２２日検索], インターネット<URL: http://www.khronos.org/assets/uploads/developers/library/overview/opencl-overview.pdf>
【発明の概要】
【発明が解決しようとする課題】
【００１４】
特許文献１、２の技術は、照合や認識等、特定用途の装置において、中枢処理から並列制御までを一体の処理として実現するものである。従って、装置開発者は、専門分野である対象処理の中枢アルゴリズムに精通することに加え、専門分野外の、いわゆる「並列プログラミング」の知識も求められる。「並列プログラミング」とは、複数のＣＰＵコア、例えば、対象処理を単位処理に並列分割してＧＰＵやＣＰＵの各コアに与え、それらのコア間での処理の同期や排他制御を適宜行うプログラムを作成することである。【００１５】
複数のＣＰＵコアは、各種の形態で処理装置に内蔵される。例えば、ホストプロセッサとコプロセッサ等、複数のプロセッサを備える処理装置では、それぞれのプロセッサに内蔵されたＣＰＵコアを用いた並列プログラミングが行われることがある。あるいは、２個以上のＣＰＵコアを内蔵するプロセッサを備える処理装置では、そのプロセッサに内蔵された複数のＣＰＵコアを用いた並列プログラミングが行われることがある。以上のように、並列プログラミングで用いられる複数のＣＰＵコアが処理装置に内蔵されるときの形態は多様である。【００１６】
しかし、以下のように、並列プログラミングには、専門家以外の技術者にとっては困難な問題がある。【００１７】
第１の問題点は、対象処理の高速化のために、複数のＣＰＵコアを使いこなすことが難しい点である。【００１８】
特許文献１および特許文献２の技術では、上記の並列プログラミング、すなわち、多数コア向けの対象処理の並列分割、ならびにホストプロセッサとコプロセッサとの間のデータ転送およびコプロセッサ制御は、システム開発者の責務とされる。ところが、専門外の技術者にとって、並列プログラミングは非常に複雑である。【００１９】
一方、非特許文献１の技術では、データ転送とコプロセッサ制御についての開発者の負担は、ＯｐｅｎＣＬの仕組みを利用することで軽減される。しかし、コプロセッサに適した処理の並列分割方式の決定、および並列分割の実現は、依然としてシステム開発者の担当業務である。【００２０】
第２の問題点は、コプロセッサにあわせた性能チューニングが難しい点である。ホストプロセッサもしくはコプロセッサに内蔵されたＣＰＵコア、またはホストプロセッサおよびコプロセッサに内蔵されたＣＰＵコア等、複数のＣＰＵコアの性能を余すことなく利用するには、対象処理の全体を、上記の各コアに適切に配分するような制御が新たに必要である。【００２１】
ところが、一般に、システム構成によって、ホストプロセッサとコプロセッサのアーキテクチャや個数に加え、各プロセッサに内蔵されたコアの個数も異なることが多い。さらに、各コアの処理性能やそのコアに適する処理内容も異なることもある。従って、上記のような、処理性能に影響を与えるシステム固有の要因に合わせて、処理の負荷の配分を修正しなければならない。こうしたチューニング作業という負担を、システム開発者が負わなければならない。【００２２】
特許文献３、４、５の技術は、並列処理を対象としたものではない。そのため、並列処理によって達成される高速化という大きなメリットを得ることができない。特に、対象処理が、同時に実行可能な単位処理を含む場合には、並列処理による高速化の効果は絶大であるが、特許文献３、４、５の技術ではそのメリットを受けることができない。たとえ、特許文献３、４、５の技術に並列処理を適用したとしても、並列プログラミングについての上記の問題点は解決できない。【００２３】
以上のような課題は、照合処理や認識処理を並列化する場合には限られない。対象処理が、並列に実行可能な単位処理（以降、「並列化可能処理」という。）を複数含む場合は、並列処理を用いることによって、効率的に対象処理を実行することができる。しかし、並列処理を効果的に行うためには解決すべき課題があることは上記の通りである。【００２４】
例えば、ある画像を構成する個々の画素に共通の演算を行うことによって、画像に対して所望の操作を行ったり、所望の効果を与えたりするような画像処理も、画素単位で並列化可能な処理を含む。従って、このような画像処理を並列化する場合にも、処理速度を向上させるためには、単位処理を実行する個々のプロセッサへの処理負荷の配分等の調整が必要である。しかし、画像処理自体の開発者に、技術的視点の異なる負荷配分まで対応させることは、業務の負荷が増大することのみでなく、専門分野外の処理であることからも決して望ましくない。
（発明の目的）
本発明の目的は、複数の単位処理を、複数のプロセッサで、効率よく簡便に並列処理することができる、並列処理装置、並列処理方法、および並列処理プログラム記憶媒体を提供することにある。
【課題を解決するための手段】
【００２５】
本発明の並列処理装置は、データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し第１の結果を出力する第１のプロセッサと、単位処理を規定した第２のプログラムを入力されたデータに対して実行し第２の結果を出力する第２のプロセッサと、第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいてデータ集合から第１の部分集合および第２の部分集合を選択する選択手段と、第１の部分集合に含まれる第１のデータを第１のプロセッサに入力する第１のプロセッサ制御手段と、第２の部分集合に含まれる第２のデータを第２のプロセッサに入力する第２のプロセッサ制御手段とを備え、第１のプロセッサおよび第２のプロセッサによって第１のプログラムおよび第２のプログラムは並列に実行されることを特徴とする。【００２６】
本発明の並列処理方法は、並列処理装置に備えられた第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいてデータ集合から第１の部分集合および第２の部分集合を選択し、第１の部分集合に含まれる第１のデータを第１のプロセッサに入力し、第２の部分集合に含まれる第２のデータを第２のプロセッサに入力し、データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを第１のプロセッサを用いて第１のデータに対して実行して第１の結果を出力し、単位処理を規定した第２のプログラムを第２のプロセッサを用いて第２のデータに対して第１のプログラムと並列に実行して第２の結果を出力することを特徴とする。【００２７】
本発明の並列処理プログラム記憶媒体は、データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し第１の結果を出力する第１のプロセッサ、および単位処理を規定した第２のプログラムを入力されたデータに対して実行し第２の結果を出力する第２のプロセッサを含む並列処理装置に備えられたプロセッサを、第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいてデータ集合から第１の部分集合および第２の部分集合を選択する選択手段、および第１の部分集合に含まれる第１のデータを第１のプロセッサに入力する第１のプロセッサ制御手段、または第２の部分集合に含まれる第２のデータを第２のプロセッサに入力する第２のプロセッサ制御手段として機能させるための並列処理プログラムであって、第１のプロセッサおよび第２のプロセッサによって、第１のプログラムおよび第２のプログラムは並列に実行される並列処理プログラムを格納することを特徴とする。
【発明の効果】
【００２８】
本発明の並列処理装置、並列処理方法、および並列処理制御プログラム記憶媒体によると、複数の単位処理を、複数のプロセッサで効率よく、簡便に並列処理することができる。
【図面の簡単な説明】
【００２９】
【図１】本発明の第１の実施形態の照合装置の全体構成を示すブロック図である。
【図２】本発明の第１の実施形態の、ホスト側制御手段、コプロセッサ側制御手段、および単位照合手段の内部構成を示すブロック図である。
【図３】登録済データ集合の構造を示す図である。
【図４】本発明の第１の実施形態の照合管理手段の管理対象の情報を示す図である。
【図５】本発明の第１の実施形態の単位照合制御手段の動作の流れ図である。
【図６】本発明の第１の実施形態のブロック切り出し手段の動作の流れ図である。
【図７】本発明の第１の実施形態の結果登録手段の動作の流れ図である。
【図８】切り出し集合の要素データの構造を示す図である。
【図９】照合処理に用いられる各データ間の相関関係を示す図である。
【図１０】第１の実施形態の照合装置を利用した照合処理システムを開発する場合の開発作業の流れを示す図である。
【図１１】本発明の第２の実施形態のブロック切り出し手段の動作の流れ図である。
【図１２】第３の実施形態の照合装置の全体構成を示すブロック図である。
【図１３】第４の実施形態の照合装置の全体構成を示すブロック図である。
【図１４】第５の実施形態の会員照合システムの全体構成を示すブロック図である。
【図１５】第５の実施形態の会員照合システムにおけるソフトウェアの内部構成を示す図である。
【図１６】第５の実施形態の単位照合制御スレッドの動作の流れ図である。
【図１７】第６の実施形態の処理装置の構成を示すブロック図である。
【図１８】第７の実施形態の処理装置の構成を示すブロック図である。
【図１９】第７の実施形態の並列処理装置の変形例の構成を示すブロック図である。
【発明を実施するための形態】
【００３０】
次に、本発明の実施形態について図面を参照して詳細に説明する。 
（第１の実施形態）
［第１の実施形態の構成］
図１は、本発明の第１の実施形態の照合装置１０の、全体構成を示すブロック図である。
【００３１】
照合装置１０は、ホストプロセッサ２０、コプロセッサ３０、記憶手段２４、３４、入出力手段１５を備える。
【００３２】
ホストプロセッサ２０が所定のプログラムを実行することによって、ホスト側制御手段２１、単位照合手段２２、アプリケーションプログラム（以下、「アプリケーション」と略す。）処理手段１２が実現される。
【００３３】
コプロセッサ３０が所定のプログラムを実行することによって、コプロセッサ側制御手段３１、単位照合手段３２が実現される。
【００３４】
記憶手段２４、３４は、それぞれ、登録済みデータ集合２３、３３を記憶する。なお、照合装置１０は、記憶手段２４、３４を備えることなく、照合処理を実行するときに、外部の所定の記憶手段に登録された登録済みデータ集合２３、３３から必要なデータを読み込んでもよい。
【００３５】
照合装置１０は、外部から被照合データ１６を読み込んで照合処理を行い、処理結果１７を出力する。照合処理の内容については後述する。
【００３６】
図２は、ホスト側制御手段２１、コプロセッサ側制御手段３１、および単位照合手段２２、３２の内部構成を示すブロック図である。ホスト側制御手段２１は、アプリケーションインタフェース手段２１１と、進行制御手段２１２と、照合管理手段２１３と、ブロック切り出し手段２１４と、単位照合制御手段２１５と、結果登録手段２１６と、コプロセッサインタフェース手段２１７と、を備える。
【００３７】
アプリケーションインタフェース手段２１１は、アプリケーション処理手段１２とのデータのやりとりを行う。進行制御手段２１２は、照合処理の全体の動作をつかさどる。照合管理手段２１３は、照合処理全体の進行状況を管理する。ブロック切り出し手段２１４は、照合処理すべきデータの全体から、ある一部分のデータを切り出す。単位照合制御手段２１５は、切り出した一部分のデータに対する照合処理（以降、「単位照合処理」という。）を、ホストプロセッサ上の単位照合手段２２を用いて実行する際の実行制御を行う。結果登録手段２１６は、単位照合処理の結果を進行管理表に登録する。コプロセッサインタフェース手段２１７は、コプロセッサ側制御手段３１との通信を行う。
【００３８】
コプロセッサ側制御手段３１は、ホスト側制御呼び出し手段３１１と、単位照合制御手段３１５と、を備える。
【００３９】
ホスト側制御呼び出し手段３１１は、ホスト側制御手段２１との通信を行う。単位照合制御手段３１５は、切り出された一部分のデータに対する照合処理（単位照合処理）をコプロセッサ上の単位照合手段３２を用いて実行する際の実行制御を行う。
【００４０】
コプロセッサ側にある単位照合制御手段３１５および単位照合手段３２の機能は、それぞれ、ホストプロセッサ側にある単位照合制御手段２１５および単位照合手段２２の機能と同じである。
【００４１】
ホストプロセッサ側の単位照合手段３２は、照合処理手段２２１と、データアクセス手段２２２と、結果収集手段２２３と、を備える。コプロセッサ側の単位照合手段３２は、照合処理手段３２１と、データアクセス手段３２２と、結果収集手段３２３と、を備える。
【００４２】
照合処理手段２２１、３２１は、１組のデータ要素に対して単位照合処理を実行する。データアクセス手段２２２、３２２は、指定された番号の登録済みデータ要素が置かれた場所を求める。結果収集手段２２３、３２３は、複数の単位照合処理の結果から、最高の「照合スコア」を与える１つの照合結果を求める。「照合スコア」とは、単位照合処理の処理対象である１組のデータ要素の一致の度合いを示す値である。
【００４３】
ホストプロセッサ側の照合処理手段２２１、データアクセス手段２２２、結果収集手段２２３の各々が単位照合制御手段２１５と連携動作する際のインタフェース仕様は、コプロセッサ側の照合処理手段３２１、データアクセス手段３２２、結果収集手段３２３の各々が単位照合制御手段３１５と連携動作する際のインタフェース仕様と同一である。
【００４４】
図３は、登録済みデータ集合２３、３３の構造を示す。
【００４５】
登録済みデータ集合２３、３３は、インデクシング可能、すなわち、ｉ（ｉはデータ集合に含まれる要素データの個数以下の自然数）番目の要素データにダイレクトにアクセス可能な形で要素データを保持する。登録済みデータ集合２３、３３の各要素データは、照合装置１０に入力される被照合データと１対１に照合されるデータ構造をもつ。
【００４６】
典型的には、登録済みデータ集合２３、３３の各要素データは被照合データと同一のデータ構造をもち、照合に用いられる特徴ベクトルを含む構造体である。また典型的には、登録済みデータ集合２３、３３は、上記のデータ構造を要素とする配列として実現される。
【００４７】
なお、ホストプロセッサ側の記憶手段２４とコプロセッサ側の記憶手段３４のそれぞれに記憶される登録済みデータ集合２３、３３の内容は、同一である。登録済みデータ集合２３、３３は、照合処理の前に作成され、その後のシステム運用時には書き換えられない。そのため、ホストプロセッサ側の記憶手段２４とコプロセッサ側の記憶手段３４のそれぞれに配置された登録済みデータ集合２３、３３に対して一貫性保持制御や排他制御を行う必要はなく、登録済みデータ集合２３、３３は読み取り専用で参照される。
【００４８】
図４は、照合管理手段２１３の管理対象の情報を示す。照合管理手段２１３は、進行管理表２４１と、被照合データ保管領域２４２と、最終照合結果領域２４３とを管理する。進行管理表２４１、被照合データ保管領域２４２、最終照合結果領域２４３は、例えば、第１の記憶手段２４の内部に確保される。
【００４９】
進行管理表２４１は、インデクシング可能な形で要素データを保持する集合データ構造である。進行管理表２４１の各要素データは、登録済みデータ集合２３中の対応要素の照合処理状態を表す、処理状態値を保持する。照合処理状態には、「未着手」、「単位照合中」、「集計中」、「完了」、の４状態があり、それぞれの状態に対応する処理状態値が設定される。進行管理表２４１のインデクス値は、登録済みデータ集合２３、３３のインデクスと同一の値に設定する。
【００５０】
典型的には、進行管理表２４１の各要素データは上記の４状態を表現する整数の処理状態値であり、進行管理表全体２４１は上記の要素データの配列（配列長は登録済みデータ集合２３、３３と同じ）として実現される。
【００５１】
被照合データ保管領域２４２は、入力として与えられた被照合データ１６のコピーを保持する領域である。
【００５２】
最終照合結果領域２４３は、照合処理の進行の過程における、それまでの単位照合処理の結果を保持する領域である。言い換えれば、最終照合結果領域２４３は、照合処理の完了時に最終的な照合結果が格納される領域である。最終照合結果領域２４３には、最良の単位照合結果をもたらした登録済みデータ要素２３、３３のインデクス番号と、そのときの単位照合処理の結果値との、２つの値が格納される。
［第１の実施形態の動作］
本実施形態の動作を、事前準備と照合処理本体に分けて説明する。
（１）事前準備
照合処理を始める前に設定されるパラメータについて説明する。
１）最大切り出しサイズＮch
Ｎchは、ホストプロセッサ２０またはコプロセッサ３０で、一度に照合処理されるデータの個数の最大値である。Ｎchの値が大きいほど、並列処理によるオーバヘッドが小さくなる。逆に、Ｎchの値が小さいほど、並列処理時の負荷が均衡し、プロセッサ資源の無駄が小さくなる。
【００５３】
そのため、Ｎchの値は、ホストプロセッサ２０とコプロセッサ３０の性能、登録済みデータ集合２３、３３の要素データ数、および１回の照合処理の演算量、をふまえて決定される。
【００５４】
Ｎchの値の一つの目安は、登録済みデータ集合２３、３３の要素データ数を、照合装置１０内のプロセッサの総数、すなわち、ホストプロセッサ２０の個数とコプロセッサ３０の個数の合計で割った値の10分の1の値、である。なお、上記のプロセッサの総数とは、ホストプロセッサおよびコプロセッサに内蔵されたプロセッサコアの個数ではなく、独立したホストプロセッサおよびコプロセッサをそれぞれ１台と数えたときの合計の台数である。従って、照合装置１０では、プロセッサの総数は、”２”である。
２）ホストプロセッサスレッド数Ｔh
Ｔhは、ホスト側単位照合手段２２の実行に利用可能なホストプロセッサ２０のスレッドの数である。Ｔhの値は、典型的には、ホストプロセッサ２０が備えるプロセッサコアの個数に等しい値に設定される。ホストプロセッサ２０上で照合装置１０以外の機能やアプリケーションが同時に実行される場合は、Ｔhの値が、ホストプロセッサ２０が備えるプロセッサコアの個数より小さく設定されることもある。
３）コプロセッサスレッド数Ｔc
Ｔcは、コプロセッサ側単位照合手段３２の実行に利用可能なコプロセッサ３０のスレッドの数である。典型的なＴcの値は、上記のホストプロセッサ２０のスレッド数Ｔｈと同様に設定される。すなわち、Ｔcの値は、コプロセッサ３０が備えるプロセッサコアの個数に等しい値に設定される。コプロセッサ３０上で照合装置１０以外の機能やアプリケーションが同時に実行される場合は、Ｔcの値が、コプロセッサ３０が備えるプロセッサコアの個数より小さく設定されることもある。
（２）照合処理本体
続いて、本実施形態の照合処理の本体部分の動作を説明する。動作の説明には、各種のデータ構造、すなわち、登録済みデータ集合２３、３３、進行管理表２４１、被照合データ保管領域２４２、切り出し集合Ｓc（後述）、途中照合結果Ｒi(後述)、切り出し照合結果Ｒch（後述）、最終照合結果領域２４３、が用いられる。本実施形態の理解を助けるため、これらのデータ構造の相関関係を図９に示す。
【００５５】
照合処理は、アプリケーション処理手段１２が、入出力手段１５を介して照合装置１０の外部から被照合データ１６を受け取り、ホスト側制御手段２１内のアプリケーションインタフェース手段２１１に対し被照合データの照合処理を依頼することによって始まる。この依頼は、アプリケーションインタフェース手段２１１から進行制御手段２１２に通知される。初めに、進行制御手段２１２の動作を説明する。
ａ）進行制御手段２１２の動作
進行制御手段２１２は、与えられた被照合データを照合管理手段内の被照合データ保管領域２４２にコピーし、進行管理表２４１の全要素データに「未着手」状態を示す処理状態値を設定する。
【００５６】
また、進行制御手段２１２は、照合結果の二者比較のために、最終照合結果領域２４３を適切な値で初期化する。すなわち、進行制御手段２１２は、インデクスとしては無効インデクス値（例えば、−１）を、照合結果値としては最悪値（例えば、−２１４７４８３６４８ (符号付き３２ビット整数の最小値)）を設定する。以降、進行制御手段２１２は、最終照合結果領域２４３に保存されている照合結果または初期値と、新しく得られた照合結果との二者比較を行う。そして、進行制御手段２１２は、照合スコアの大きい方の照合結果をその時点の最終照合結果として最終照合結果領域２４３に保存する。
【００５７】
続いて、進行制御手段２１２は、ホストプロセッサ側の単位照合制御手段２１５およびコプロセッサ側の単位照合制御手段３１５を始動させる。次に、単位照合制御手段２１５、３１５の動作を説明する。
ｂ）単位照合制御手段の動作
単位照合制御手段２１５、３１５の動作の流れを図５に示す。単位照合制御手段２１５は、ブロック切り出し手段２１４と、単位照合手段２２または単位照合手段３２と、結果登録手段２１６、を呼び出す一連の処理（ステップＳ５０１〜Ｓ５０６）を繰り返す。
【００５８】
ホストプロセッサ２０側の単位照合制御手段２１５は、ホストプロセッサ２０側にあるブロック切り出し手段２１４および結果登録手段２１６を直接呼び出す。
【００５９】
これに対して、コプロセッサ３０側の単位照合制御手段３１５は、ホスト側制御呼び出し手段３１１およびコプロセッサインタフェース手段２１７を介して、間接的にホストプロセッサ２０側のブロック切り出し手段２１４および結果登録手段２１６を呼び出す。
【００６０】
なお、単位照合手段２２、３２は、常に、それぞれ単位照合制御手段２１５、３１５を機能させるプロセッサに対応するものが呼び出される。すなわち、ホストプロセッサ２０側の単位照合制御手段２１５はホストプロセッサ上の単位照合手段２２を、コプロセッサ側単位照合制御手段３１５はコプロセッサ上の単位照合手段３２を、各々呼び出す。
【００６１】
ホストプロセッサ２０側の単位照合制御手段２１５とコプロセッサ３０側の単位照合制御手段３１５の違いは、ブロック切り出し手段２１４および結果登録手段２１６の呼び出し方法が、直接であるか間接であるかだけである。単位照合制御手段２１５と単位照合制御手段３１５の動作の流れは共通である。そこで、図５の単位照合制御部の動作の流れ図を参照しながら、その共通の動作の流れを順に説明する。
１）ステップＳ５０１
まず単位照合制御手段２１５は、ブロック切り出し手段２１４に対し、次に処理すべきデータブロックを要求する。
【００６２】
要求を受けたブロック切り出し手段２１４の動作の流れを図６に示す。ブロック切り出し手段２１４は、単位照合制御手段２１５、３１５から呼び出されるたびに、図６に示す一連の動作（Ｓ４０１〜Ｓ４０３）を行い、次の呼び出しを待つ、という動作を繰り返す。ブロック切り出し手段２１４によるＳ４０１〜Ｓ４０３の動作は以下の通りである。
１−１）ステップＳ４０１
ブロック切り出し手段２１４は、進行管理表２４１の各要素を走査し、処置状態値が「未着手状態」である要素データを、最大Ｎch個見つけ出す。もし「未着手状態」の要素データがＮch個未満しか見つからない場合は、ブロック切り出し手段２１４はそれらすべてを選択する。
１−２）ステップＳ４０２
ブロック切り出し手段２１４は、ステップＳ４０１で見つかった最大Ｎch個の要素データに、「単位照合中」を示す処理状態値を設定する。ステップＳ４０１とＳ４０２の処理は、複数の単位照合制御手段、すなわち単位照合制御手段２２、２３から同時に呼ばれた際であっても正しく動作する必要があるため、排他制御下で実行される。ここで用いられる排他制御の機構は、ホストプロセッサ２０上で正しく動作するものであればよく、排他制御の機構として、例えばmutex（ミューテックス）を用いることができる。
１−３）ステップＳ４０３
次にブロック切り出し手段２１４は、切り出し集合Ｓcを作成する。切り出し集合とは、登録済みデータ集合２３、３３の部分集合を表現するデータ構造であり、ここでは先に選択した最大Ｎch個の要素データを含む集合である。図８は、切り出し集合の要素データの構造を示す図である。切り出し集合は、図８に示すように、インデクシング可能な形で要素データを保持する集合データ構造として実現される。切り出し集合の要素の値は、進行管理表２４１および登録済みデータ集合２３、３３のインデクス値である。ブロック切り出し手段２１４は、ここで作成した切り出し集合Ｓcに、進行管理表２４１内にある被照合データ保管領域２４２に格納されているデータＤinを添えて、呼出元の単位照合制御手段２１５または３１５にその切り出し結果を返す。
２）ステップＳ５０２〜Ｓ５０４
単位照合制御手段２１５、３１５は、ブロック切り出し手段から次データブロック情報、すなわち被照合データＤinと切り出し集合Ｓcを得る。そして、単位照合制御手段２１５、３１５は、切り出し集合Ｓc（その集合に含まれる要素数をＮとする）に含まれる各インデクス値ｉに対し、登録済みデータ集合のｉ番目要素と被照合データＤinとの１対１の照合処理（のべＮ回の照合処理）を、並列に実行する。
【００６３】
上記の「１対１の照合処理」は次のように行う。まず、単位照合手段のデータアクセス手段２２２、３２２を呼び出して、登録済みデータ集合２３、３３のｉ番目要素が置かれた場所Ｆda（ｉ）を得る。次に被照合データＤinの置かれた場所とｉ番目データ要素の置かれた場所を照合処理手段２２１、３２１に送って、被照合データＤinとｉ番目データ要素間の照合処理Ｆmaを行い、その結果として途中照合結果Ｒiを得る。ここまでが１対１の照合処理である。
【００６４】
単位照合制御手段２１５、３１５は、切り出し集合Ｓcに含まれるＮ要素を、単位照合制御手段が動作するプロセッサ（ホストプロセッサ２０またはコプロセッサ３０）で利用可能なスレッド数（ＴhまたはＴc）分に重複なく分割する。そして、単位照合制御手段２１５、３１５は、それらのスレッド各々に、それぞれＮ／Ｔh、Ｎ／Ｔc回の照合処理を分担実行させる。
【００６５】
例えば、ホストプロセッサ２０のスレッドの場合、ホストプロセッサ２０のｊ番目のスレッド（０≦ｊ≦Ｔh−１）は、Ｓcの Ｎ／Ｔh＊ｊ番目からＮ／Ｔh＊（ｊ＋１）−１番目までのＮ／Ｔh個の要素に対応する登録済みデータ要素と被照合データＤin間の１対１照合処理を行う。このとき、Ｎ／ＴhやＮ／Ｔcが整数で割りきれない場合は、一部のスレッドに他より1つ多い要素数が割り当てられる。
３）ステップＳ５０５
ステップＳ５０２〜Ｓ５０４の並列照合処理の結果、Ｎ個の途中照合結果Ｒi（ｉ∈Ｓc）を得ると、単位照合制御手段２１５、３１５は、Ｎ個の途中照合結果Ｒiに対して再帰的に結果収集手段２２３、３２３を呼び出して、Ｎ個の照合に対するただ１つの切り出し照合結果Ｒchを求める。ここで「再帰的な結果収集手段の呼び出し」とは、結果収集手段２２３、３２３を呼び出して照合結果を得るという操作を繰り返し、Ｎ個の途中照合結果Ｒiから最終的に１つの切り出し照合結果Ｒchを求める、という手順を意味する。すなわち、単位照合制御手段２１５、３１５は、Ｎ個の照合結果Ｒiをまず２つずつ組にし、各組に対して結果収集手段２２３、３２３を呼び出して（以降、結果収集手段２２３、３２３の呼び出し処理を「Ｆre」と表記する。）、Ｎ／２個の照合結果を得る。そして、単位照合制御手段２１５、３１５は、次にそれらＮ／２個の照合結果をさらに２つずつ組にして結果収集手段２２３、３２３を呼び出してＮ／４個の照合結果を得る。
４）ステップＳ５０６
最後に単位照合制御手段は、切り出し集合Ｓcと切り出し照合結果Ｒchを結果登録手段２１６に通知（後述）した後、進行制御手段２１２からの次の照合処理始動の指示を待つ「待機状態」に入る。
ｂ）結果登録手段の動作
ステップＳ５０６にて通知を受けた結果登録手段２１６の動作の流れを図７に示す。結果登録手段２１６は、単位照合制御手段２１５、３１５から呼び出されるたびに図７に示す一連の動作（Ｓ６０１〜Ｓ６０５）を行い、次の呼び出しを待つ、という動作を繰り返す。
１）ステップＳ６０１
結果登録手段２１６はまず、通知された切り出し集合Ｓcの要素の値をインデクスとする進行管理表２４１内の要素データの各々に、「集計中状態」を示す処理状態値を設定する。
２）ステップＳ６０２
次に結果登録手段２１６は、最終照合結果領域２４３の値Ｒaと単位照合制御手段２１５、３１５から通知された切り出し照合結果Ｒchを使って、結果収集手段２２３、３２３を呼び出す（Ｆre）。そして、結果登録手段２１６は、結果収集手段２２３、３２３が返した値を、改めて最終照合結果Ｒaとして最終照合結果領域２４３に設定する。
【００６６】
Ｒa値の更新を行う前記一連の処理（Ｓ６０２）は、複数の単位照合制御手段から同時に呼ばれる場合に備え、ホストプロセッサ上の適切な排他制御機構を用いた排他制御区間内で実行される。
３）ステップＳ６０３
続いて結果登録手段は、ステップＳ６０１で「集計中状態」とした進行管理表２４１内の各要素データに、「完了状態」を示す処置状態値を設定する。その結果、もし進行管理表の全要素データが「完了状態」になれば、結果登録手段は進行制御手段２１２に全照合処理完了を通知する。
【００６７】
全照合処理完了の通知を受けた進行制御手段２１２は、最終照合結果領域２４３に格納された内容を、アプリケーションインタフェース手段２１１を介して、呼び出し元のアプリケーション１２に返す。アプリケーション１２は入出力手段１５を介して照合処理結果１７を出力する。
【００６８】
このようにして、入力として与えられた被照合データ１６と登録済みデータ集合２２、３３との照合が、ホストプロセッサ２０およびコプロセッサ３０を用いて並列的に実行される。
【００６９】
以上が本実施形態の動作の説明である。ここで、本実施形態を用いて照合処理システムを開発する場合の作業について説明する。
【００７０】
図１０は、第１の実施形態の照合装置を利用した照合処理システムを開発する場合の開発作業の流れを示す図である。図１０に示すように、システム設計者は、適切な照合処理アルゴリズムを実装した単位照合手段と、ホスト側制御手段を呼び出すアプリケーション処理手段の２つの部分を、並列化されていない逐次プログラムとして設計する（Ｓ７０１、Ｓ７０２）。そして、システム設計者は、単位照合手段およびアプリケーション処理手段をホスト側で結合して、動作確認を行う（Ｓ７０３）。システム設計者が行わなければならない作業は、以上の設計、製造、および動作確認だけである。
【００７１】
その後、システム設計者は、単位照合手段をコプロセッサに実現させるためのコプロセッサ用実行コードを生成する（Ｓ７０４）。そして、システム設計者は、コプロセッサ用実行コードをコプロセッサ側制御手段に結合させる（Ｓ７０５）。
【００７２】
以上の作業が完了すれば、本実施形態のホスト側制御手段２１およびコプロセッサ側制御手段３１が、アプリケーションはホスト側とコプロセッサ側の単位照合手段を自動的に利用できるようになる。つまり、照合装置１０を利用した照合処理を行うためには、システム開発者は、１組の照合を行う単位照合処理用のプログラム（単位照合処理手段２２）を用意し、ホストプロセッサ２０用コードとコプロセッサ３０用コードを生成するだけでよい。
【００７３】
一方、照合装置１０は、進行制御手段２１２と照合管理手段２１３と単位照合制御手段２１５、３１５は連携して、照合処理を並列分割する。すなわち、単位照合制御手段２１５、３１５は、ホストプロセッサ２０とコプロセッサ３０とが照合処理を並列処理できるように、被処理データごとの単位照合処理に分割する。そして、進行制御手段２１２が、システム開発者がホストプロセッサ２０およびコプロセッサ３０用に用意した単位照合処理のコードをそれぞれのプロセッサ上で呼び出す。従って、照合処理全体が、ホストプロセッサ２０とコプロセッサ３０の全コア上で並列処理される。このとき、システム設計者は、煩雑な並列処理の指示を出す必要はない。
【００７４】
このように、照合処理の並列化のための対応、すなわち、アプリケーションが、ホスト側の単位照合手段２２およびコプロセッサ側の単位照合手段３２の両方を利用できるようにする処理は、システム設計者ではなく、ホスト制御手段２１、コプロセッサ制御手段３１によって自動的に行われる。すなわち、本実施形態の照合装置１０を利用することにより、システム開発者は、ホストプロセッサとコプロセッサの全コアを活用した高性能な照合システムを容易に構築することができる。
【００７５】
また、本実施形態によれば、コプロセッサ向けの照合処理プログラムをホストプロセッサ向けとは別に開発するためのコストが不要になる。典型的には、ホストプロセッサ向け照合処理ソースプログラムを、コプロセッサ向けにコンパイルし直すだけで、コプロセッサ向けの照合処理プログラムの開発が完了する。
【００７６】
さらに、照合装置１０においては、コプロセッサインタフェース手段２１７とホスト側制御呼び出し手段３１１が、ホストプロセッサ２０とコプロセッサ３０との間の複雑な通信を代行する。このように、コプロセッサインタフェース手段２１７とホスト側制御呼び出し手段３１１が、ホストプロセッサ２０−コプロセッサ３０間の複雑な通信をシステム設計者から隠蔽する。また、単位照合制御手段２１５、３１５は、ホストプロセッサ２０またはコプロセッサ３０内の、処理実行中ではないコアに、単位照合処理を割り振る。そして、単位照合制御手段２１５、３１５は、並列分割された１単位処理を終えたホストプロセッサ２０やコプロセッサ３０に、新たな１単位処理を与えるための制御を行う。
【００７７】
そのため、システム開発者が、ホストプロセッサ２０とコプロセッサ３０の各々への処理配分のための通信や配分調整等の複雑な性能チューニングをする必要がない。従って、システム開発者の負担が軽減される。
【００７８】
なお、図１０に示すように、ホストプロセッサ側単独、およびホストプロセッサ側とコプロセッサ側連結での動作テストが、必要に応じて適宜行われてもよい。
【００７９】
以上のように、本実施形態によれば、照合装置１０が、システム開発者に代わって、照合処理の効率化や性能向上のための制御を行う。そのため、システム設計者はホストプロセッサ上の逐次処理として所定プログラムを作成するだけよい。従って、本実施形態を適用することによって、ホストプロセッサとコプロセッサを用いた並列高速照合システムを短期間に構築することができる。
（第２の実施形態）
本発明の第２の実施形態は、登録済みデータ集合へのアクセスに先立ってデータプリフェッチを行うものである。
【００８０】
第２の実施形態の照合装置の構成は、第１の実施形態の照合装置１０の構成と同じである。ただし、第２の実施形態と第１の実施形態とでは、ブロック切り出し手段２１４（図２参照）の動作のみが異なる。他の各手段については、第２の実施形態の動作は第１の実施形態と同じである。以下に、適宜、第１の実施形態の図面を参照して、第２の実施形態について説明する。
【００８１】
第２の実施形態におけるブロック切り出し手段の動作２１４は、単位照合制御手段２１５からの要求に先立ってブロックを切り出し、そのデータをプリフェッチしてから要求待ちに入る点に特徴がある。以下、図１１を用いてその動作ステップを説明する。比較のため、図６（第１の実施形態におけるブロック切り出し手段２１４の動作）も適宜参照する。
【００８２】
システムが最初に動作を開始したとき、ブロック切り出し手段２１４は図１１のステップＳ４２4から動作を開始する。
１）ステップＳ４２４
図６のＳ４０１と同様に、進行管理表２４１から「未着手状態」である要素データが最大Ｎch個見つけ出され、その要素集合が切り出し集合Ｓcとなる。
２）ステップＳ４２５
ブロック切り出し手段２１４が単位照合制御手段２１５、３１５に、Ｓcの各要素データが参照している登録済みデータの各要素データのインデクス値を通知する。
【００８３】
指示を受けた単位照合制御手段２１５は、対応する単位照合手段２２、３２内のデータアクセス手段２２２、３２２に、通知されたインデクス値を与えて登録済みデータ要素の配置場所を得る。そして、単位照合制御手段２１５は、登録済みデータ要素の配置場所をプリフェッチ（先読み）する。登録済みデータ要素の配置場所は、典型的には、ホストプロセッサ２０およびコプロセッサ３０の主メモリ（図示なし）である。この場合、ホストプロセッサ２０およびコプロセッサ３０は、主メモリのデータを、それぞれのプロセッサのキャッシュメモリにプリフェッチする。
【００８４】
このプリフェッチは、ホストプロセッサ２０またはコプロセッサ３０の命令セットが専用データプリフェッチ命令を備える場合は、その命令を用いて行うことができる。あるいは、プリフェッチは、通常のメモリロード命令を用いてロードデータを破棄することで行うこともできる。
３）ステップＳ４２１
ブロック切り出し手段２１４は単位照合制御手段２１５から次の要求が来るまで待機する。
４）ステップＳ４２２
ブロック切り出し手段２１４は、次の要求を受けると、ステップＳ４２４で準備済みの切り出し集合Ｓcの各要素に対する進行管理表２４１の要素データの各々に、「単位照合中」を示す処置状態値を設定する（図６のステップＳ４０２に相当）。
５）ステップＳ４２３
ブロック切り出し手段２１４は、切り出し集合Ｓcに、進行管理表２４１内にある被照合データ保管領域２４２に格納されているデータＤinを添えて、呼出元の単位照合制御手段２１５に返す（図６のステップＳ４０３の後半に相当）。
【００８５】
第１の実施形態におけるブロック切り出し手段２１４の動作と異なり、第２の実施形態におけるブロック切り出し手段２１４は、単位照合制御手段２１５からの要求に対して返答した後も、図１１のステップＳ４２４以降へ実行を進める。そして、図１１の各ステップが繰り返し実行される。
【００８６】
第２の実施形態によれば、上述したプリフェッチ動作により、単位照合制御手段２１５が実際の１対１照合処理を開始する時点で、アクセス対象登録済みデータがプロセッサのキャッシュメモリに載っている可能性が高い。そのため１対１照合処理が高速に行われ、結果として照合処理全体の性能向上につながるという効果がある。
【００８７】
なお、ステップＳ４２５でのプリフェッチの方法は、具体的な実現システムや使用するプロセッサアーキテクチャに応じて、上記以外にも種々の方式がありうる。例えば、メモリ空間が高速小容量な領域と低速大容量な領域に分かれており、登録済みデータ集合２３、３３が通常は低速大容量領域に配置されている場合であれば、ステップＳ４２５にて該当データのみ高速小容量領域に転送しておく、といった方式も考えられる。本実施形態では、次に参照する登録済みデータ集合の決定をブロック切り出し手段２１４が担っている。そのため、近い将来、参照されるデータをプロセッサに近い場所にコピーする種々のプリフェッチ技術は、ステップＳ４２５において効果的に行うことができる。
（第３の実施形態）
本発明の第３の実施形態は、照合の本体処理は１台のコプロセッサでのみ行い、ホストプロセッサは全体制御のみを行うものである。図１２は、第３の実施形態の照合装置３０の全体構成を示すブロック図である。第３の実施形態の照合装置３０は、第１の実施形態の照合装置１０と比べ、ホストプロセッサ２０側に、単位照合制御手段（図２の単位照合制御手段２１５）と単位照合手段（図２の単位照合手段２２）が存在しない。照合装置３０の他の構成は、照合装置１０と同様である。
【００８８】
第３の実施形態では、進行制御手段２１２は、照合装置の照合処理開始時に、コプロセッサ側の単位照合制御手段３１５のみを始動させる。ブロックの切り出しは、コプロセッサ側単位照合制御手段３１５からの要求に基づいて行われる。照合処理の本体は、コプロセッサ３０側の単位照合手段３２のみで行われる。単位照合処理の結果の登録は、コプロセッサ３０側の単位照合制御手段３１５からの要求に基づいて行われる。単位照合制御手段３１５、および単位照合制御手段３１５から呼び出されるブロック切り出し手段３１４と結果登録手段２１６の動作は、図５、図６および図７に示したものと同様である。
【００８９】
第１の実施形態では、ブロック切り出し手段動作のステップＳ４０1、Ｓ４０２（図６）および結果登録手段動作のステップＳ６０２（図７）において排他制御が行われる。これに対して、第３の実施形態では、これらの排他制御は不要である。なぜなら、ステップＳ４０1、Ｓ４０２およびＳ６０２が、ホストプロセッサ２０とコプロセッサ３０の両方から同時に呼び出されることがないためである。
【００９０】
第３の実施形態は、ホストプロセッサ２０上で、照合処理以外のアプリケーション処理を行わなければならない場合に適する。なぜなら、ホストプロセッサ２０で照合処理を行わないため、ホストプロセッサ２０の資源を他のアプリケーションに配分することができるからである。
【００９１】
第３の実施形態はまた、照合処理に特化したシステムを低コストに実現する場合にも適用可能である。なぜなら、コプロセッサ３０として、照合処理が得意な並列型プロセッサを採用する一方、全体制御用のホストプロセッサ２０として、比較的低機能で安価なプロセッサを採用することができるからである。このようなプロセッサを用いることによって、照合性能を落とすことなく、システムコストを下げることが可能である。
（第４の実施形態）
図１３は、本発明の第４の実施形態の照合装置４０の全体構成を示すブロック図である。第４の実施形態の照合装置４０の特徴は、１つのホストプロセッサと複数のコプロセッサで実現されていることである。照合処理本体は、ホストプロセッサ２０上の単位照合手段２２に加え、各コプロセッサ３０−１〜３０−ｎ（ｎはコプロセッサの個数）上の各単位照合手段３２−１〜３２−ｎで並列に実行される。
【００９２】
第４の実施形態は、コプロセッサ３０−１〜３０−ｎ側を構成する各要素、ホスト側制御呼び出し手段３１１、単位照合制御手段３１５、単位照合手段３２およびその内部構成要素がコプロセッサの台数分だけ存在する。そして、コプロセッサ３０−１〜３０−ｎ側のホスト側制御呼び出し手段３１１−１〜３１１−ｎが、ホストプロセッサ２０側にただ１つ存在するコプロセッサインタフェース手段２１７と接続されている。以上の点を除き、第４の実施形態の照合装置４０の構成は、第１の実施形態の照合装置１０と同様である。
【００９３】
第４の実施形態では、進行制御手段２１２は、照合装置４０の照合処理開始時に、ホストプロセッサ２０側の単位照合制御手段２１５に加え、コプロセッサ３０−１〜３０−ｎ上の各々の単位照合制御手段３１５−１〜３１５−ｎを始動させる。これら（ｎ＋１）個の単位照合制御手段が、ホストプロセッサ側に１つずつ存在するブロック切り出し手段２１４および結果登録手段２１６を介して照合管理手段２１３にある進行管理表２４１や最終照合結果領域２４３にアクセスし、並列的に照合処理を進める。その際、図６のステップＳ４０1、Ｓ４０２、および図７のステップＳ６０２に課された排他制御により、これら（ｎ＋１）個の単位照合制御手段２１５からの同時アクセスが正しく行われることが保証される。単位照合制御手段２１５、および単位照合制御手段２１５から呼び出されるブロック切り出し手段２１４と結果登録手段２１６の動作は、図５、図６、図７に示したものと同様である。
【００９４】
なお、コプロセッサ３０−１〜３０−ｎ側の登録済みデータ集合３３は、コプロセッサ３０−１〜３０−ｎの各々のための記憶手段３４−１〜３４−ｎに、１セットずつ同内容のものが配置される。そして、コプロセッサ側の各単位照合手段３２−１〜３２−ｎは、対応するコプロセッサ３０−１〜３０−ｎのための記憶手段３４−１〜３４−ｎに記憶された登録済みデータ集合を参照することを基本動作として実行する。しかし、コプロセッサ３０−１〜３０−ｎのすべてからアクセス可能な、共有の記憶部がある場合は、共有の記憶部にコプロセッサ側登録済みデータ集合が１組のみ配置され、コプロセッサ３０−１〜３０−ｎ側の単位照合手段３２−１〜３２−ｎが、その共有の記憶部の登録済みデータ集合をアクセスするようにしてもよい。
（第５の実施形態）
具体的な実施例として、本発明を利用して顔照合による会員照合システムを構築する例を説明する。
【００９５】
会員照合システムの全体構成を図１４に示す。本実施形態の中心は照合装置９１０であり、その照合装置９１０は次のものを含む。
１）ホストプロセッサ
ホストプロセッサ９２０として、サーバ用マイクロプロセッサが１組使用される。例えば、一般に市販されているサーバ用プロセッサで、内部に複数コアを備えるものが使用可能である。
２）コプロセッサ
コプロセッサ９３０として、ホストプロセッサ９２０に接続可能で、ＯｐｅnＣＬでサポートされるコプロセッサが１組使用される。例えば、市販のＧＰＵが使用可能である。
３）ＮＩＣ（ネットワークインタフェースカード）
照合装置９１０の外部との通信用にＮＩＣ（Network Interface Card。ネットワークインタフェースカード）９１５が１組使用される。例えば、市販の有線ＬＡＮ用通信カードが使用可能である。
４）ＯＳ（オペレーティングシステム）
ＯＳ（Operating System。オペレーティングシステム）９２５として、ホストプロセッサ９２０上で動作するＯＳが使用される。市販のサーバ用プロセッサ上で動作するＯＳには、各種のものが市販されている。
５）ＯｐｅｎＣＬ処理系
コプロセッサ９３０の制御機構として、ホストプロセッサ９２０およびコプロセッサ９３０上で動作する、ＯｐｅｎＣＬ処理系９２６が使用される。このような処理系も、各種のものが市販されている。
６）記憶装置および参照データ
事前登録データやプログラムを記憶するハードディスク装置９１１、およびその中に記録された、登録会員の顔特徴量データ集合９１４が使される。登録済顔特徴量データ集合９１４は、会員照合システム起動時にホストプロセッサ９２０およびコプロセッサ９３０の主メモリ上に読み込まれ、メモリ上登録済データ集合９２３、９３３として参照される。
【００９６】
会員照合アプリケーションプロセス９１２、ホスト側制御プロセス９２１、コプロセッサ側制御プロセス９３１は、第１の実施形態におけるアプリケーション１２、ホスト側制御手段２１と単位照合手段２２、コプロセッサ側制御手段３１と単位照合手段３２に相当する機能を、ＯＳ９２５およびＯｐｅｎＣＬ９２６上で動作するソフトウェアプロセスとして実装したものである。これに関しては後述する。
【００９７】
照合装置９１０は、以上の構成要素を含む。
【００９８】
会員照合システムは、照合装置９１０のほか、認識カメラ（図示なし）、ディスプレイ装置（図示なし）を含む。
【００９９】
認識カメラは、会員の顔画像を撮影して顔特徴量データに変換する。そして、認識カメラは、顔特徴量データを、被照合データ９１６として照合装置９１０に入力する。
【０１００】
ディスプレイ装置は、照合装置９１０が照合した結果情報である処理結果９１７を適当な形で表示する。
【０１０１】
次に、ホストプロセッサ９２０およびコプロセッサ９３０上で動作するソフトウェア関連部分について、図１５を参照して詳しく説明する。図１５は、第５の実施形態の会員照合システムにおけるソフトウェアの内部構成を示す図である。
【０１０２】
会員照合アプリケーションプロセス９１２と、ホスト側制御プロセス９２１は、ホストプロセッサのＯＳ９２５上のソフトウェアプロセスであり、Ｓｏｃｋｅｔ等、ＯＳがサポートするプロセス間通信機構を用いて両プロセスは互いにやりとりを行う。
【０１０３】
コプロセッサ側プロセス９３１は、コプロセッサのＯｐｅｎＣＬ  ＡＰＩ（Application Program Interface。アプリケーションプログラムインタフェース）を利用したソフトウェアであり、ＯｐｅｎＣＬ機能を用いてホスト側制御プロセス９２１と通信を行う。
【０１０４】
ホスト側制御プロセス９２１は、進行制御スレッド９４１（図２の進行制御手段２１２に相当）と、単位照合制御スレッド９４３（図２の単位照合制御手段２１５に相当）と、照合管理ライブラリ９４２（図２の照合管理手段２１３に相当）と、対コプロセッサ通信ライブラリ９４４（図２のコプロセッサインタフェース手段２１７に相当）を含む。照合管理ライブラリ９４２と対コプロセッサ通信ライブラリ９４４は、進行制御スレッド９４１と単位照合制御スレッド９４３から呼び出される。進行制御スレッド９４１と単位照合制御スレッド９４３はシステム開始時に生成され、システム稼働期間を通じて生存し続ける。
【０１０５】
照合管理ライブラリ９４２は、ブロック切り出し手段９５２（図２のブロック切り出し手段２１４に相当）と、結果登録手段９５３（図２の結果登録手段２１６に相当）を含む。また、照合管理ライブラリ９４２は進行管理表（図４の進行管理表２４１）と被照合データ（図４の被照合データ２４２）と最終照合結果（図４の最終照合結果２４３）に相当するデータ構造を内部にもつ。
【０１０６】
ホスト側制御プロセス９２１には単位照合プラグイン９２２が結合されている。単位照合プラグイン９２２は、システム開発者が所定の仕様に沿って作成したソフトウェア関数群であって、３つの関数、すなわち、照合処理関数９５７、データアクセス関数９５８、結果収集関数９５９を含む。照合処理関数９５７、データアクセス関数９５８、結果収集関数９５９はそれぞれ、図２の照合処理手段２２１、データアクセス手段２２２、結果収集手段２２３に相当する機能をホストプロセッサ９２０向けソフトウェアで実現したものである。
【０１０７】
コプロセッサ側制御プロセス９３１は、単位照合制御スレッド９６１（図２の単位照合制御手段３１５に相当）と、単位照合制御スレッド９６１から呼び出される対ホスト通信ライブラリ９６２を含む。単位照合制御スレッド９６１はシステム開始時に生成され、システム稼働期間を通じて生存し続ける。
【０１０８】
ホストプロセッサ１側制御プロセス９２１と同様に、コプロセッサ側制御プロセス９３１には単位照合プラグイン９３２が結合されている。単位照合プラグイン９３２は、照合処理関数９６７、データアクセス関数９６８、結果収集関数９６９の各関数を含む。照合処理関数９６７、データアクセス関数９６８、結果収集関数９６９の機能は、それぞれ、ホスト側単位照合プラグイン９２２に含まれる照合処理関数９５７、データアクセス関数９５８、結果収集関数９５９と同様である。ただし、照合処理関数９６７、データアクセス関数９６８、結果収集関数９６９は、それぞれの機能がコプロセッサ向けソフトウェアで実現されたものとなっている。
【０１０９】
なお、コプロセッサ側制御プロセス９３１の単位照合制御スレッド９６１および単位照合プラグイン９３２の各関数による、ホストプロセッサ２０側のデータ構造へのアクセス、あるいはホスト側制御プロセス９２１との制御情報の交換は、直接ＯｐｅｎＣＬ  ＡＰＩは呼び出されず、対ホスト通信ライブラリ９６２を介して行われる。
【０１１０】
進行制御スレッド９４１は、内部にアプリケーションインタフェース機能９５１（図２のアプリケーションインタフェース手段２１１に相当）をもつ。進行制御スレッド９４１は、会員照合アプリケーションプロセス９１２から照合要求を受けると、照合管理ライブラリ９４２を呼び出して照合管理ライブラリ内の進行管理表を初期化する。そして、進行制御スレッド９４１は、ホスト側制御プロセス９２１およびコプロセッサ側制御プロセス９３１のそれぞれの単位照合制御スレッド９４３、９６１に通知し、単位照合制御スレッド９４３、９６１の動作を開始させる。
【０１１１】
ホストプロセッサ９２０側およびコプロセッサ９３０側の各スレッド、ライブラリ、およびそれらのスレッド、ライブラリの中の各機能単位の動作は、第１の実施形態で説明したものと同等である。
【０１１２】
そこで次に、本実施形態で特徴的な、単位照合プラグイン９２２、９３２と、それを制御する単位照合制御スレッド９４３、９６１について説明する。以下では、ホストプロセッサ９３０側を例として説明するが、コプロセッサ９３０側についても同様である。
【０１１３】
単位照合プラグイン９２２は、前述のように、３つの関数、照合処理関数９５７、データアクセス関数９５８、結果収集関数９５９、を含む。
【０１１４】
照合処理関数Ｆmaは、１つの被照合データＤinと１つの登録済データ要素Ｄstを入力とし、被照合データＤinと登録済みデータＤstを照合した結果である照合結果スコア値Ｒを返す関数である。被照合データＤinと登録済みデータＤstは参照渡し、すなわち実データが置かれた場所へのポインタとして照合処理関数Ｆmaに渡される。照合処理関数Ｆmaは、被照合データＤinと登録済みデータＤstの実データを参照するのみで、実データの変更は行わない。また照合処理関数Ｆmaは、マルチスレッドセーフとなるように、一時作業用データの保存にはスタック領域を使う等の措置を講じて実装される。
【０１１５】
データアクセス関数Ｆdaは、登録済データ要素のインデクスｉを入力とし、当該データ要素が置かれた場所の、当該登録済データ集合の先頭からのオフセット値を返す関数である。各データ要素が固定長の場合、このオフセット値は、インデクス値と要素サイズの積として容易に求められるが、データ要素が可変長の場合は別途用意したインデクスデータ等を用いて算出される。
【０１１６】
結果収集関数Ｆreは再帰的な照合結果計算に用いられる関数である。結果収集関数Ｆreは、入力として、ｉとＲiの組（ｉ，Ｒi）が２組与えられる。ここでｉは登録済データ要素のインデクス値、Ｒiは被照合データとｉ番目データ要素との照合結果スコア値、である。結果収集関数Ｆreは、２組の入力を比較して最良スコアをもつ組を選び、その組（ｉ，Ｒi）を返す。
【０１１７】
上記３関数、照合処理関数Ｆma、データアクセス関数Ｆda、結果収集関数Ｆreは、コプロセッサ９３０側についても同じ機能をもつため、コプロセッサ９３０側の関数の説明は省略する。
【０１１８】
次に図１６を参照して単位照合制御スレッド９４３の動作を説明する。
１）ステップＳ５２１
単位照合制御スレッド９４３は、照合管理ライブラリ９４２内のブロック切り出し機能９５２を呼び出して、単位照合制御スレッド９４３が動作しているホストプロセッサ９２０で次に処理すべきブロックの集合Ｓｃと被照合データＤinを得る。Ｓ５２１の処理は、図５のステップＳ５０１に相当する処理である。
２）ステップＳ５２２
単位照合制御スレッド９４３は、単位照合制御スレッド９４３が動作しているホストプロセッサ９２０上でＴh個のスレッドを作業スレッドとして作成する。スレッドは、ＯＳやそのＯＳに関連する既存のミドルウェアが提供するスレッドライブラリ、例えば、ＰＯＳＩＸ（Portable Operating System Interface）スレッドやＯｐｅｎＭＰ（Open Multiprocessing。登録商標）を用いて作成される。Ｔhは、第１の実施形態におけるホスト側単位照合手段２２の実行に利用可能なホストプロセッサ２０のスレッドの数に相当するもので、本実施形態では単位照合プラグイン９２２の実行に利用可能なホストプロセッサ９２０のスレッドの数である。単位照合制御スレッド９４３は、Ｓ５２２で作成されたＴh個のスレッドの各々に、次のステップＳ５２３の処理を行わせた後、Ｔh個のスレッド処理の完了を同期させてから、ステップＳ５２５の処理へ進む。
３）ステップＳ５２３
単位照合制御スレッド９４３は、部分結果Ｒjを初期化した後、部分集合Ｓc［ｊ］の各要素ｉに対し、次の処理（３−１）、（３−２）を実行する。
（３−１）単位照合制御スレッド９４３は、ｉを引数としてデータアクセス関数Ｆdaを呼び出し、さらに、データアクセス関数Ｆdaの返値とＤinを引数として照合処理関数Ｆmaを呼び出し、照合処理関数Ｆmaの返値をＲtmpとする。
（３−２）単位照合制御スレッド９４３は、ＲjとＲtmpを引数として結果収集関数Ｆreを呼び出し、関数Ｆreの返値を再びＲjにセットする。
【０１１９】
ここでＳc［ｊ］は集合Ｓｃのうちｊ番目の作業スレッドに割り当てられた部分集合であり、ＳcのうちＮ／Ｔh＊ｊ番目からＮ／Ｔh＊（ｊ＋１）−１番目までのＮ／Ｔh個の要素からなる集合である（第１の実施形態のステップＳ５０２〜Ｓ５０４の説明参照）。
【０１２０】
ステップＳ５２３の処理により、ｊ番目の作業スレッドが更新したＲjの最終結果として、ｊ番目の作業スレッドが分担した照合処理部分において最良の照合結果を与える要素に関する情報が保持される。
【０１２１】
なお、Ｓ５２２からＳ５２３までの処理は、マルチスレッド実行される。図１５では、マルチスレッド実行される最終ステップがＳ５２４と表記されている。
４）ステップＳ５２５
単位照合制御スレッド９４３は、ステップＳ５２３で求めた各Ｒjに対し再帰的に結果収集関数Ｆreを適用し、与えられたＳcに対する最良の照合結果Ｒchを求める。
【０１２２】
なお、第１の実施形態ではＳcに対する最良の照合結果の算出は、並列処理完了後（図５のステップＳ５０５）で一括して行われる。これに対して、本実施形態では、ｊ番目の作業スレッドが分担した部分の最良照合結果の算出はｊ番目の作業スレッド自身によって行われ（ステップＳ５２３）、その後、各作業スレッドが求めた部分結果（延べＴh個）に対する最良照合結果の算出が行われる（ステップＳ５２５）。以上の所定によって、最良照合結果算出に要する時間の短縮が図られる。
５）ステップＳ５２６
単位照合制御スレッド９４３は、照合管理ライブラリ９４２内の結果登録機能９５３を呼び出して、ステップＳ５２１で与えられたＳcに対する最良照合結果を登録する。Ｓ５２６の処理は、図５のステップＳ５０５に相当する処理である。
【０１２３】
Ｓ５２１からＳ５２６までの各ステップは、ホストプロセッサ９２０側の単位照合制御スレッド９４３の動作である。コプロセッサ９３０側の単位照合制御スレッド９６１の動作も同様である。
【０１２４】
ただし、単位照合制御スレッド９６１は、ホストプロセッサ９２０側のデータ構造へのアクセスを、対ホスト通信ライブラリ９６２を介して行う。すなわち、コプロセッサ９３０側の単位照合制御スレッド９６１の動作は、以下の２点でホストプロセッサ９２０側の単位照合制御スレッド９４３の動作と異なる。
１’）コプロセッサ側ステップＳ５２１
単位照合制御スレッド９６１は、対ホスト通信ライブラリ９６２を介してホストプロセッサ９２０側の照合管理ライブラリ９４２内のブロック切り出し機能９５２を呼び出す。
５’）コプロセッサ側ステップＳ５２６
単位照合制御スレッド９６１は、対ホスト通信ライブラリ９６２を介してホストプロセッサ９２０側の照合管理ライブラリ９４２内の結果登録機能９５３を呼び出す。
【０１２５】
第５の実施形態では顔画像の照合を例として取り上げたが、本実施形態の照合装置が適用可能な処理は顔画像の照合にとどまらない。すなわち、本実施形態の照合装置は、虹彩、指紋等の各種生体情報の照合、文字列情報の照合、波形等の時系列変化情報の照合など、様々な照合システムに適用可能である。
（第６の実施形態）
第１ないし第５の実施形態における照合処理とは、２つの情報の一致の有無を判定したり、類似度を求めたりする処理である。第１ないし第５の実施形態の説明から明らかなように、本発明において照合処理の具体的内容、例えば一致の有無の判定方法、類似度の定義や計算方法は重要ではない。本発明は、「２つの情報の集合」に対して複数回繰り返される所定の「単位処理」を実行する際に、並列処理が可能となるように情報の集合を分割し、複数回の単位処理を、複数のプロセッサを用いて並列に処理する技術に関するものである。例えば、「２つの情報の集合」、「単位処理」とは、それぞれ、第１の実施形態における、切り出し集合および被照合データ、１対１照合処理である。このように、第１の実施形態における単位処理とは、対象処理の全体をなす照合処理が並列分割され、並列処理される処理である。
【０１２６】
単位処理は、同じ内容で繰り返し実行される単独の処理であってもよく、対象処理が並列分割されたものである必要はない。単独処理の単位処理とは、例えば、ｎ個のデータまたはデータの組に対して同一の単位処理を行い、ｎ個の結果を得るような処理である。この場合、ｎ個の結果は独立したものであり、ｎ個より少ない結果に集約される必要はない。実施形態で示した照合処理は、ｎ個の単位処理の結果が１つの最終結果に集約される例である。
【０１２７】
実施形態で示した照合処理の入力は、登録済みデータ集合と、被照合データとの２つの集合である。単位処理への入力は、単位処理の内容に従った、３個以上のデータ集合の、それぞれの要素データからなるデータの組であってもよい。
【０１２８】
単位処理への入力が２個以上のデータ集合の、それぞれの要素データからなるデータの組であるとき、それぞれのデータ集合の要素データの個数が同じである必要もない。例えば、ｍ個の要素データを含むデータ集合と、ｎ個の要素データを含むデータ集合とを入力のデータ集合とし、それぞれの要素データの（ｍ×ｎ）個の組について、単位処理を行ってもよい。実施形態で示された照合処理では、１個の被照合データからなるデータ集合と、ｎ個の登録済みデータ要素を含む登録済みデータ集合を入力として単位処理が実行される。さらに、実施形態で示した照合処理では、ｎ個の単位処理の結果が１つの最終結果に集約される。
【０１２９】
単位処理への入力は、２個以上のデータ集合の、それぞれの要素データからなるデータの組である必要はない。単位処理は、１個のデータ集合の要素データに対して実行されるものであってもよい。このような処理には、例えば、ｎ個の要素データに対して、例えば自乗演算等、同一の演算を行い、ｎ個の結果を得るような処理がある。この場合、ｎ個の演算結果をすべて加算する等、ｎ個より少ない最終結果に集約する処理を行ってもよい。
【０１３０】
上記の、単位処理の複数の結果を、それより個数が少ない最終結果に集約する集約処理は、単位処理とは独立した処理である。従って、集約処理を実行する主体は、並列処理を行ういずれかのプロセッサであっても、並列処理を行うプロセッサ以外のプロセッサであってもよい。
【０１３１】
以上を整理すると、本発明の並列処理装置が備える必須の構成は図１７のようになる。図１７は、第６の実施形態の並列処理装置１００の構成を示すブロック図である。
【０１３２】
並列処理装置１００は、第１のプロセッサ１０１、第２のプロセッサ１０２、選択手段１０３、第１のプロセッサ制御手段１０４、第２のプロセッサ制御手段１０５を備える。
【０１３３】
選択手段１０３は、第１のプロセッサ１０１および第２のプロセッサ１０２の性能または機能を示す所定の指標に基づいて、データ集合１４０から第１の部分集合１５１および第２の部分集合１５２を選択する。プロセッサの、性能または機能を示す指標とは、例えば、第１のプロセッサ１０１および第２のプロセッサ１０２を用いて並列に実行可能な処理の数である。すなわち、指標として、プロセッサの総数（本実施形態では、”２”）や、単位処理の実行に利用可能な第１のプロセッサ１０１および第２のプロセッサ１０２のそれぞれのスレッド数、等を用いることができる。
【０１３４】
第１のプロセッサ制御手段１０４は、第１の部分集合１５１に含まれる第１のデータ１２１を第１のプロセッサ１０１に入力する。第２のプロセッサ制御手段１０５は、第２の部分集合１５２に含まれる第２のデータ１２２を第２のプロセッサ１０２に入力する。
【０１３５】
第１のプロセッサ１０１は、第１のプログラム１１１を実行する。第１のプログラム１１１は、データ集合１４０に含まれるデータを入力として実行される単位処理の処理手順を規定する。第１のプロセッサ１０１は、入力された第１のデータ１２１に対して、第１のプログラム１１１に規定された単位処理を実行し、第１の結果１３１を出力する。
【０１３６】
第２のプロセッサ１０２は、第２のプログラム１１２を実行する。第２のプログラム１１２も、第１のプログラム１１１と同一内容の、データ集合１４０に含まれるデータを入力として実行される単位処理の処理手順を規定する。第２のプロセッサ１０２は、入力された第２のデータ１２２に対して、第２のプログラム１１２に規定された単位処理を実行し、第２の結果１３２を出力する。
【０１３７】
以上のように、並列処理装置１００は、１個のデータ集合１４０に含まれるデータを、第１のプロセッサ１０１および第２のプロセッサ１０２を用いて並列処理する。データ集合１４０の要素データからの、第１のプロセッサ１０１の処理対象の第１の入力データ１２１および第２のプロセッサ１０２の処理対象の第２の入力データ１２２の選択は、選択手段１０３によって行われる。また、第１のプロセッサ１０１および第２のプロセッサ１０２への、第１のデータ１２１、第２のデータ１２２の入力は、それぞれ、第１のプロセッサ制御手段１０４、第２のプロセッサ制御手段１０５によって行われる。
【０１３８】
従って、並列処理装置１００の利用者は、データ集合１４０に含まれる要素データである、第１のデータ１２１および第２のデータ１２２に対して実行すべき処理を、同一内容の第１のプログラム１１１および第２のプログラム１１２として用意すればよい。すなわち、並列処理装置１００によると、複数の単位処理を、複数のプロセッサで効率よく、簡便に並列処理することができる。
【０１３９】
なお、選択手段１０３、第１のプロセッサ制御手段１０４、第２のプロセッサ制御手段１０５の具体的な実現手段は限定されない。
【０１４０】
すなわち、選択手段１０３は、第１のプロセッサ１０１もしくは第２のプロセッサ１０２、または第１のプロセッサ１０１および第２のプロセッサ１０２以外の第３のプロセッサ（図示なし）が所定の処理プログラムを実行することによるソフトウェア処理により実現されてもよい。
【０１４１】
第１のプロセッサ制御手段１０４は、第１のプロセッサ１０１または第３のプロセッサが所定の処理プログラムを実行することによるソフトウェア処理により実現されてもよい。
【０１４２】
第２のプロセッサ制御手段１０５は、第２のプロセッサ１０２または第３のプロセッサが所定の処理プログラムを実行することによるソフトウェア処理により実現されてもよい。
【０１４３】
あるいは、選択手段１０３、第１のプロセッサ制御手段１０４、第２のプロセッサ制御手段１０５のそれぞれは、専用のハードウェアによって実現されてもよい。
（第７の実施形態）
図１８は、第７の実施形態の並列処理装置１６０の構成を示すブロック図である。第７の実施形態の並列処理装置１６０は、２つのデータ集合の要素データを入力とする単位処理を並列に実行する。
【０１４４】
並列処理装置１６０は、第１のプロセッサ１０１、第２のプロセッサ１０２、選択手段１０６、第１のプロセッサ制御手段１０７、第２のプロセッサ制御手段１０８を備える。
【０１４５】
選択手段１０６は、第１のプロセッサ１０１および第２のプロセッサ１０２の性能または機能を示す所定の指標に基づいて、第１のデータ集合１４１から第１の部分集合１５１および第２の部分集合１５２を選択する。同様に、選択手段１０６は、上記指標に基づいて、第２のデータ集合１４２から第３の部分集合１５３および第２の部分集合１５４を選択する。
【０１４６】
第１のプロセッサ制御手段１０７は、第１の部分集合１５１に含まれる第１のデータ１２１、および第３の部分集合１５３に含まれる第３のデータ１２３を第１のプロセッサ１０１に入力する。第２のプロセッサ制御手段１０８は、第２の部分集合１５２に含まれる第２のデータ１２２、および第４の部分集合１５４に含まれる第４のデータ１２４を第２のプロセッサ１０２に入力する。
【０１４７】
第１のプロセッサ１０１は、第１のプログラム１１３を実行する。第１のプログラム１１３は、第１のデータ集合１４１および第２のデータ集合１４２に含まれる、２つのデータを入力として実行される単位処理の処理手順を規定する。第１のプロセッサ１０１は、入力された第１のデータ１２１および第３のデータ１２３に対して、第１のプログラム１１３規定された単位処理を実行し、第１の結果１３１を出力する。
【０１４８】
第２のプロセッサ１０２は、第２のプログラム１１４を実行する。第２のプログラム１１４も、第１のプログラム１１３と同一内容の、第１のデータ集合１４１および第２のデータ集合１４２に含まれる、２つのデータを入力として実行される単位処理の処理手順を規定する。第２のプロセッサ１０２は、入力された第２のデータ１２２および第４のデータ１２４に対して、第２のプログラム１１４に規定された単位処理を実行し、第２の結果１３２を出力する。
【０１４９】
以上のように、並列処理装置１６０は、２個のデータ集合に含まれるデータを、第１のプロセッサ１０１および第２のプロセッサ１０２を用いて並列処理する。第１のデータ集合１４１および第２のデータ集合１４２の要素データからの、第１のプロセッサ１０１および第２のプロセッサ１０２の処理対象の２つの入力データ１２２の選択は、選択手段１０６によって行われる。また、第１のプロセッサ１０１および第２のプロセッサ１０２への２つのデータの入力は、それぞれ、第１のプロセッサ制御手段１０７、第２のプロセッサ制御手段１０８によって行われる。従って、並列処理装置１６０の利用者は、第１のデータ集合１４１および第２のデータ集合１４２のそれぞれに含まれる要素データに対して実行すべき処理を、同一内容の第１のプログラム１１３および第２のプログラム１１４として用意すればよい。すなわち、並列処理装置１６０によると、複数の単位処理を、複数のプロセッサで効率よく、簡便に並列処理することができる。
【０１５０】
図１９は、第７の実施形態の並列処理装置の変形例の構成を示すブロック図である。第７の実施形態の並列処理装置１７０は、２つのデータ集合、第１のデータ集合１４１および第２のデータ集合１４２の要素データを入力とする単位処理を並列に実行するが、第１のデータ集合１４１は、固定されたデータ集合である。固定されたデータ集合とは、選択手段１０３によってデータ要素が選択されない集合であることを意味する。すなわち、第１ないし第５の実施形態の照合装置における、外部からの入力データである被照合データの集合が、本実施形態の第１のデータ集合１４１に相当し、登録済みデータ集合が第２のデータ集合に相当する。
【０１５１】
第１のプロセッサ１０１、第２のプロセッサ１０２は、それぞれ、第１のプログラム１１５、第１のプログラム１１６を実行する。
【０１５２】
さらに、並列処理装置１７０は、並列処理装置１６０の構成要素に加え、出力手段１０９を備える。出力手段１０９は、単位処理が複数回実行された結果得られる複数の処理結果から、所定の基準に従って、１個の最終結果を生成し、出力する。
【０１５３】
ｎ個の単位処理の結果を、１個の最終結果に集約する場合、その集約処理は、単位処理の結果が出力されるごとに処理されてもよい。この場合は、単位処理、集約処理ともに、複数のプロセッサで効率よく、簡便に並列処理することができる。
【０１５４】
あるいは、ｎ個の単位処理の結果がすべて揃った後、集約処理を行ってもよい。この場合は、単位処理のみについて、並列処理が可能である。
【０１５５】
なお、本実施形態においても、選択手段１０６、第１のプロセッサ制御手段１０７、第２のプロセッサ制御手段１０８の具体的な実現手段は限定されない。
【０１５６】
すなわち、選択手段１０３は、第１のプロセッサ１０１もしくは第２のプロセッサ１０２、または第１のプロセッサ１０１および第２のプロセッサ１０２以外の第３のプロセッサ（図示なし）によるソフトウェア処理により実現されてもよい。第１のプロセッサ制御手段１０４は、第１のプロセッサ１０１または第３のプロセッサによるソフトウェア処理により実現されてもよい。第２のプロセッサ制御手段１０５は、第２のプロセッサ１０２または第３のプロセッサによるソフトウェア処理により実現されてもよい。
【０１５７】
あるいは、選択手段１０３、第１のプロセッサ制御手段１０４、第２のプロセッサ制御手段１０５のそれぞれは、専用のハードウェアによって実現されてもよい。
【０１５８】
なお、本発明におけるホストプロセッサとコプロセッサは、各種の形態で処理装置に内蔵されうる。例えば、ホストプロセッサとコプロセッサが、それぞれ別個のプロセッサチップとして処理装置に内蔵されてもよい。あるいは、１個のプロセッサチップに内蔵された、２個以上のＣＰＵコアのうち、１個のＣＰＵコアがホストプロセッサとして、他の１個以上のＣＰＵコアがコプロセッサと用いられてもよい。すなわち、処理装置が論理的に複数個のＣＰＵを内蔵してさえいれば、いずれかのＣＰＵをホストプロセッサとして使用し、他のＣＰＵをコプロセッサとして使用し、本発明を適用することができる。ホストプロセッサとコプロセッサとして用いられる複数のＣＰＵの、具体的なチップ構成は限定されない。
【０１５９】
本発明におけるプログラムは、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、フラッシュメモリ等の半導体記憶装置、光ディスク、磁気ディスク、光磁気ディスク等、非一時的な媒体に格納されてもよい。
【０１６０】
また、以上の実施形態は各々他の実施形態と組み合わせることができる。
【０１６１】
上記の実施形態の一部または全部は、以下の付記のようにも記載されうるが、以下には限られない。
（付記１）
データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを、入力されたデータに対して実行し、第１の結果を出力する第１のプロセッサと、
前記単位処理を規定した第２のプログラムを、入力された２つのデータに対して実行し、第２の結果を出力する第２のプロセッサと、
前記第１のプロセッサおよび前記第２のプロセッサの性能または機能を示す所定の指標に基づいて、前記データ集合から第１の部分集合および第２の部分集合を選択する選択手段と、
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力する第１のプロセッサ制御手段と、
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力する第２のプロセッサ制御手段と、を備え、
前記第１のプロセッサおよび前記第２のプロセッサによって、前記第１のプログラムおよび前記第２のプログラムは並列に実行される
ことを特徴とする並列処理装置。
（付記２）
前記第１のプログラムおよび前記第２のプログラムは、第１の前記データ集合に含まれるデータおよび第２の前記データ集合に含まれるデータを入力として実行される前記単位処理を規定し、
前記選択手段は、前記指標に基づいて、前記第１のデータ集合から前記第１の部分集合および前記第２の部分集合を選択し、前記第２のデータ集合から第３の部分集合および第４の部分集合を選択し、
前記第１のプロセッサ制御手段は、前記第１の部分集合に含まれる前記第１のデータおよび前記第３の部分集合に含まれる第３のデータを前記第１のプロセッサに入力し、
前記第２のプロセッサ制御手段は、前記第２の部分集合に含まれる前記第２のデータおよび前記第４の部分集合に含まれる第４のデータを前記第２のプロセッサに入力する、
ことを特徴とする付記１に記載の並列処理装置。
（付記３）
前記指標は、前記第１のプロセッサおよび前記第２のプロセッサを用いて並列に実行可能な処理の数である
ことを特徴とする付記１または２に記載の並列処理装置。
（付記４）
所定の判断基準に基づいて、前記第１の結果または前記第２の結果を最終結果として出力する出力手段を備える
ことを特徴とする付記１ないし３のいずれか１項に記載の並列処理装置。
（付記５）
前記第１のプログラムおよび第２のプログラムは、第１の前記データ集合に含まれるデータおよび少なくとも２個のデータを含む第２の前記データ集合に含まれるデータを入力として実行される前記単位処理を規定し、
前記選択手段は、前記指標に基づいて、前記第２のデータ集合から第３の部分集合および第４の部分集合を選択し、
前記第１のプロセッサ制御手段は、前記第１のデータ集合に含まれる前記第１のデータおよび前記第３の部分集合に含まれる第３のデータを前記第１のプロセッサに入力し、
前記第２のプロセッサ制御手段は、前記第２のデータ集合に含まれる前記第２のデータおよび前記第４の部分集合に含まれる第４のデータを前記第２のプロセッサに入力し、
前記単位処理は、前記第１のデータ集合に含まれる被照合データである前記第１のデータと予め登録された前記第２のデータ集合に含まれる登録済データである前記第２のデータとの照合、および入力された前記被照合データである前記第３のデータと前記登録済データである前記第４のデータとの照合を行い、前記被照合データと前記登録済データとの一致の度合いを示す照合スコアを算出する照合処理であり、
前記照合スコアが最も高い前記登録済データを前記最終結果として出力する出力手段をさらに備える
ことを特徴とする付記１に記載の並列処理装置。
（付記６）
前記第１のプロセッサは、所定の第３のプログラムを実行することによって、
前記照合処理の進行状況を管理する照合管理手段と、
前記登録済データ集合から、未照合の前記登録済みデータの集合を、ブロックとして選び出すブロック切り出し手段と、
前記出力手段からの前記最終結果を得て、前記進行状況を前記照合管理手段に伝えるとともに、前記登録済データ集合の全体についての前記照合スコアが最高である前記登録済データを求める結果登録手段と、
前記ブロック切り出し手段、前記結果登録手段と、コプロセッサ上の前記結果登録手段との間の通信を行う第１の通信手段と
を実現し、
前記第２のプロセッサは、所定の第４のプログラムを実行することによって、
１組のデータ間の照合処理を行う単位照合手段と、
前記ブロックの各データと前記被照合データとの前記照合処理を実行し、前記ブロック内での最高の前記照合スコアを前記最終結果として求める単位照合制御手段と
を実現し、
前記第１のプロセッサおよび前記第２のプロセッサは、前記ブロック内の前記登録済みデータと前記被照合データとの照合を並列処理する
ことを特徴とする付記５に記載の並列処理装置。
（付記７）
前記第１のプロセッサおよび上で所定の仕様に沿って前記照合処理を行う第１の単位照合手段と、
前記第２のプロセッサ上で前記仕様に沿って前記照合処理を行う第２の単位照合手段と、
前記第１のプロセッサ上にあって前記登録済データ集合の各データと前記被照合データとの照合処理の進行状況を管理する照合管理手段と、を備え、
前記選択手段は、前記第１のプロセッサ上にあって前記登録済データ集合から１つないし複数の未照合のデータの集合をブロックとして選び出すと、
前記第１のプロセッサ制御手段は、前記選び出したブロックの各データと前記被照合データを前記第１のプロセッサに与えて並列に前記照合処理を行わせ、前記ブロック内での最高照合スコアを第１の結果として求め、
前記第２のプロセッサ制御手段は、前記選び出したブロックの各データと前記被照合データを前記第２のプロセッサに与えて並列に前記照合処理を行わせ、前記ブロック内での最高照合スコアを第２の結果として求め、
前記出力手段は、前記第１の結果および第２の結果に基づいて、前記最終結果を求める
ことを特徴とする付記６に記載の並列処理装置。
（付記８）
前記第１のプロセッサ制御手段は、前記第１の部分集合から、前記第１のプロセッサへ入力する前記第２のデータを先読みし、
前記第２のプロセッサ制御手段は、前記第２の全体集合から、前記第２のプロセッサへ入力する前記第２のデータを先読みする
ことを特徴とする、付記１ないし７のいずれか１項に記載の並列処理装置。
（付記９）
前記第１のプログラムは、所定の共通言語を用いて前記データ処理の手順が規定された共通プログラムから、前記第１のプロセッサ用の第１の言語を用いたプログラムに変換されたものであり、
前記第２のプログラムは、前記共通プログラムから前記第２のプロセッサ用の第２の言語を用いたプログラムに変換されたものである
ことを特徴とする付記５ないし８のいずれか１項に記載の並列処理装置。
（付記１０）
並列処理装置に備えられた第１のプロセッサおよび第２のプロセッサの性能または機能を示す所定の指標に基づいて、データ集合から第１の部分集合および第２の部分集合を選択し、
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力し、
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力し、
前記データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを、前記第１のプロセッサを用いて、前記第１のデータに対して実行して第１の結果を出力し、
前記単位処理を規定した第２のプログラムを、前記第２のプロセッサを用いて、前記第２のデータに対して前記第１のプログラムと並列に実行して第２の結果を出力する
ことを特徴とする並列処理方法。
（付記１１）
データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し、第１の結果を出力する第１のプロセッサ、および前記単位処理を規定した第２のプログラムを入力されたデータに対して実行し、第２の結果を出力する第２のプロセッサを含む並列処理装置に備えられたプロセッサを、
前記第１のプロセッサおよび前記第２のプロセッサの性能または機能を示す所定の指標に基づいて、前記データ集合から第１の部分集合および第２の部分集合を選択する選択手段、および
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力する第１のプロセッサ制御手段、または
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力する第２のプロセッサ制御手段として機能させるための並列処理プログラムであって、
前記第１のプロセッサおよび前記第２のプロセッサによって、前記第１のプログラムおよび前記第２のプログラムは並列に実行される並列処理プログラム
を格納することを特徴とする非一時的な記憶媒体。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
この出願は、２０１３年２月２６日に出願された日本出願特願２０１３−０３５７８９を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０１６２】
本発明は、ドアカメラ、虹彩入力機器、指紋入力機器等と組み合わせて入出場管理を行う生体認証セキュリティシステムに、また、銀行や役所の窓口あるいは国境等での本人確認システムに利用可能である。また監視カメラと組み合わせて重要施設や街頭の無人監視システムにも利用可能である。
【符号の説明】
【０１６３】
１２１    第１のデータ
１２２    第２のデータ
１２３    第３のデータ
１２４    第４のデータ
１３１    第１の結果
１３２    第２の結果
１３３    最終結果
１５１    第１の部分集合
１５２    第２の部分集合
１５３    第３の部分集合
１５４    第４の部分集合
【図１】
2014132608.tif 000003
【図２】
2014132608.tif 000004
【図３】
2014132608.tif 000005
【図４】
2014132608.tif 000006
【図５】
2014132608.tif 000007
【図６】
2014132608.tif 000008
【図７】
2014132608.tif 000009
【図８】
2014132608.tif 000010
【図９】
2014132608.tif 000011
【図１０】
2014132608.tif 000012
【図１１】
2014132608.tif 000013
【図１２】
2014132608.tif 000014
【図１３】
2014132608.tif 000015
【図１４】
2014132608.tif 000016
【図１５】
2014132608.tif 000017
【図１６】
2014132608.tif 000018
【図１７】
2014132608.tif 000019
【図１８】
2014132608.tif 000020
【図１９】
2014132608.tif 000021
【手続補正書】
【提出日】平成27年8月21日(2015.8.21)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】請求項１０
【補正方法】変更
【補正の内容】
【請求項１０】
データ集合に含まれるデータを入力として実行される単位処理を規定した第１のプログラムを入力されたデータに対して実行し、第１の結果を出力する第１のプロセッサ、および前記単位処理を規定した第２のプログラムを入力されたデータに対して実行し、第２の結果を出力する第２のプロセッサを含む並列処理装置に備えられたプロセッサを、
前記第１のプロセッサおよび前記第２のプロセッサの性能または機能を示す所定の指標に基づいて、前記データ集合から第１の部分集合および第２の部分集合を選択する選択手段、および
前記第１の部分集合に含まれる第１のデータを前記第１のプロセッサに入力する第１のプロセッサ制御手段、または
前記第２の部分集合に含まれる第２のデータを前記第２のプロセッサに入力する第２のプロセッサ制御手段として機能させるための並列処理プログラムであって、
前記第１のプロセッサおよび前記第２のプロセッサによって、前記第１のプログラムおよび前記第２のプログラムは並列に実行される並列処理プログラム。
【国際調査報告】
2014132608.tif 000022
2014132608.tif 000023