(57)【要約】【課題】マルチコアプロセッサを用いた高速かつ精度のよい経路探索を提供する【解決手段】情報処理システム１は、デバイスメモリ３８２と複数の演算コア３８４とを備えるＧＰＵ３８と、経路ネットワークデータを記憶する経路ネットワークデータ記憶手段３２０と、処理対象リンクを記憶する処理対象リンク記憶手段３２２と、前記経路ネットワークデータに基づいて第１地点における処理対象リンクを抽出する処理対象リンク抽出手段３００と、前記処理対象リンクのコストを並列演算するコスト演算手段３０２と、コスト演算が終了した前記処理対象リンクを処理済リンクとして更新し、新たな前記処理対象リンクを設定する処理対象リンク更新手段３００と、算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する経路取得手段３０４とを備え、前記ＧＰＵ３８上に前記経路ネットワークデータ記憶手段３２０と前記コスト演算手段３０２を備える。【選択図】図１
2019200058.tif 000002
【特許請求の範囲】
【請求項１】
内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、ＧＰＵ（Graphical Processing Unit）と、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段と、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段と、
前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段と、
１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段と、
前記コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段と、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段と、
を備え、
前記ＧＰＵ上に、少なくとも、前記経路ネットワークデータ記憶手段及び前記コスト演算手段、を備える、
情報処理システム。
【請求項２】
前記演算コアはそれぞれ、前記処理対象リンクのうち１つについてのコストの演算を行う、請求項１に記載の情報処理システム。
【請求項３】
前記処理対象リンク抽出手段は、前記第１地点及び前記第２地点のうち少なくとも１つから所定距離の範囲を、前記経路ネットワークデータに基づいて抽出し、前記所定距離の範囲内についての前記処理対象リンクの抽出粒度を、前記所定距離の範囲外についての前記処理対象リンクの抽出粒度よりも高くする、請求項１又は請求項２に記載の情報処理システム。
【請求項４】
前記ＧＰＵは、
前記デバイスメモリ上に、前記経路ネットワークデータ記憶手段と、前記処理対象リンク記憶手段と、を備え、
前記演算コア上に、前記処理対象リンク抽出手段と、前記コスト演算手段と、前記処理対象リンク更新手段と、を備える、
請求項１乃至請求項３のいずれかに記載の情報処理システム。
【請求項５】
内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、ＧＰＵを備えるコンピュータを、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段、
として機能させる情報処理プログラム。
【請求項６】
通信可能に接続された複数のコンピュータによって構成される情報処理システムであって、
複数の前記コンピュータのうち少なくとも１つは、ＧＰＵを備え、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段、
を備えて情報処理システムを機能させるために、上記コンピュータの少なくとも１つを上位手段の少なくとも１つとして機能させる情報処理プログラム。
【請求項７】
通信可能に接続された複数のコンピュータであって、少なくとも１つにＧＰＵを備えるコンピュータによって、請求項１乃至請求項６のいずれかに記載の情報処理システムを機能させるために、
上記コンピュータのうち１つを請求項１乃至請求項６のいずれかに記載の情報処理システムにおける各手段の少なくとも１つとして機能させる情報処理プログラム。
【請求項８】
ＧＰＵを備えるコンピュータを、請求項１乃至請求項７のいずれかに記載の情報処理システムにおける各手段の少なくとも１つとして機能させる情報処理プログラム。
【請求項９】
通信可能に接続された複数の情報処理装置であって、その少なくとも１つにＧＰＵを備える情報処理装置によって、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段、
を備えた情報処理システムを構成するために、上記手段の少なくとも１つを備える情報処理装置。
【請求項１０】
ＧＰＵを備えるコンピュータを、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段、
として機能させるための情報処理プログラム。
【請求項１１】
ＧＰＵを備える情報処理装置において、
経路ネットワークデータ記憶手段が経路ネットワークデータを記憶するステップ、
処理対象リンク記憶手段が処理対象となるリンクである処理対象リンクを記憶するステップ、
処理対象リンク抽出手段が前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出するステップ、
コスト演算手段が１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算するステップ、
処理対象リンク更新手段がコストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定するステップ、
経路取得手段がそれぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得するステップ、
を備える情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理システム、情報処理プログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
マルチコアプロセッサの発展に伴い、様々な分野においてマルチコアプロセッサを利用してコストパフォーマンスを向上させるための研究開発が広く行われている。企業内又は家庭内においてこれらのプロセッサを用いることはもちろん、データセンタ内に設置し、各種データの検索やマイニング等に用いることも多くなってきている。
【０００３】
経路探索においては、各ノードからのリンクの重みに基づいて、スタートのノードからの経路を徐々に決定していくダイクストラ法が探索法として用いられることが多い。しかしながら、ダイクストラ法は、同じノードに対して異なるタイミング（ステップ）で到達するリンクが発生し、一般的に並列処理を行うことが困難であった。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】清水翔、他「リコンフィギュラブルプロセッサを用いた最短経路探索に関する一検討」、電気情報通信学会技術研究報告、社団法人電気情報通信学会、平成17年12月、第105巻、第451号、p.1-6
【発明の概要】
【発明が解決しようとする課題】
【０００５】
そこで、本発明は、マルチコアプロセッサを用いて経路探索を高速かつ精度よく行うことができる情報処理システム、情報処理プログラム、情報処理装置及び情報処理方法を提案する。
【課題を解決するための手段】
【０００６】
一実施形態に係る情報処理システムは、内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、ＧＰＵと、経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段と、処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段と、前記経路ネットワークデータに基づいて、第１地点における１又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段と、１又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段と、コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する１又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段と、それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第１地点から第２地点までの経路を取得する、経路取得手段と、を備え、前記ＧＰＵ上に、少なくとも、前記経路ネットワークデータ記憶手段及び前記コスト演算手段、を備える。
【発明の効果】
【０００７】
マルチコアプロセッサを用いた高速かつ精度のよい経路探索を実現する。
【図面の簡単な説明】
【０００８】
【図１】一実施形態に係る情報処理システムの機能の一例を示すブロック図。
【図２】一実施形態に係る情報処理システムのハードウェア構成の一例を示す図。
【図３】一実施形態に係る情報処理システムの処理の流れを示すフローチャート。
【図４】一実施形態に係るリンク処理の概略の一例を示す図。
【図５】一実施形態に係るメモリ管理の概略の一例を示す図。
【発明を実施するための形態】
【０００９】
まず、本実施形態における用語について説明する。なお、用語の説明においては本実施形態の説明に必要な箇所だけを説明しており、厳密に正確なものに限られず、また、詳しい説明は省略している。
【００１０】
「ＧＰＵ（Graphical Processing Unit）」とは、画像処理に特化したプロセッサである。今日では、その優れた並列演算精度から、ＧＰＧＰＵ（General-Purpose computing on GPU）の用途として一般的な演算処理に用いられることが多い。
【００１１】
「演算コア」とは、ＧＰＵに備えられる１つの演算を行うコアの最小単位のことを言い、１つのＧＰＵ内に数１００から数１０００の演算コアが備えられている。
【００１２】
「デバイスメモリ」とは、ＧＰＵに備えられる記憶領域のことを言い、演算コアを動かすためのプログラムや、演算コアが使用するデータ及び演算に必要となるバッファ領域を確保するために用いられる。１つのＧＰＵにおいて、数Ｇから数１０Ｇの容量のデバイスメモリが備えられる。
【００１３】
「ホストプログラム」とは、ＧＰＵを搭載しているコンピュータにおいて、ＣＰＵ（Central Processing Unit）に実行させるプログラムのことを言う
【００１４】
「カーネル（又はカーネルプログラム）」とは、ＧＰＵにおいて演算コア又は制御部に実行させるプログラムのことを言う。
【００１５】
「スレッド」とは、演算処理を行う単位のことを言い、ここでは、１つの演算コアが実行する演算処理（プログラム）のことを言う。
【００１６】
「ブロック」とは、演算コア又はスレッドの集合の単位を言い、所定数の演算コア又は所定数のスレッドのことを言う。ブロック内では、動作している各スレッドの同期処理を行うことが可能である。
【００１７】
「アトミックアクセス」とは、複数のスレッドが並列で動作している場合に、あるメモリにアクセス（書き込む／読み込み動作）を行う際に、他のスレッドから書き込みが行われないようにする処理のことを言う。
【００１８】
「ノード」とは、探索における地点情報を示し、例えば、探索中における各時刻における基準点の情報のことを言う。より具体的には、道路における交差点、出発地、目的地などの重要地点、高速道路の入口等、探索においてチェックポイントとなりうる地点のことを言う。
【００１９】
「リンク」とは、あるノードと、当該ノードに隣接するノードを接続する情報のことを言う。また、ノード情報を用いずに、各リンクの始点及び終点の情報を用いて経路探索を行うようにしてもよい。この場合、上述と同じ例で言うと、リンクは、一例として、交差点から次の交差点までの道路の情報のことである。
【００２０】
「未処理リンク」とは、探索の実行時において、まだ走査されていないリンクのことを言う。初期状態において、全てのリンクが未処理リンクとなる。
【００２１】
「処理対象リンク」とは、探索の実行時において、その時点において処理対象となっているリンクのことを言う。未処理リンクは、探索において走査対象となると処理対象リンクとなる。
【００２２】
「処理済リンク」とは、探索の実行時において、既に処理対象となり、処理が終了しているリンクのことを言う。処理対象リンクは、探索においてその走査が終了すると処理済リンクとなる。
【００２３】
（構造）
図１は、本実施形態に係る情報処理システムの概略を示すブロック図である。本実施形態に係る情報処理システムについて、図１を参照して説明する。
【００２４】
情報処理システム１は、端末装置２と、サーバ３と、を備える。端末装置２と、サーバ３とは、有線又は無線のネットワーク４を介して接続される。
【００２５】
端末装置２は、サーバ３により探索された経路探索情報を取得し、出力する装置であり、例えば、クライアントＰＣ、携帯電話、タブレット、スマートホン等の表示又は音声で探索結果を出力するデバイスである。また、端末装置２から、探索条件となる出発地、目的地の情報を入力するようにしてもよい。
【００２６】
サーバ３は、ユーザ等により指定された出発地、目的地に基づいて最適な経路を探索し、端末装置２へと探索結果を出力する。
【００２７】
ネットワーク４は、端末装置２と、サーバ３と、を接続するネットワークであり、例えば、イントラネット、インターネット、Ｗｉ-Ｆｉ（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）等の通信手段により、端末装置２からのリクエストをサーバ３へと、サーバ３からの出力結果を端末装置２へと通信により伝達する。
【００２８】
サーバ３は、制御部３０と、記憶部３２と、通信部３４と、を備える。
【００２９】
制御部３０は、処理対象リンク抽出部３００と、コスト演算部３０２と、経路取得部３０４と、を備え、サーバ３の制御を行う。これらの他に、サーバ３が起動するため、又は、動作するために必要な制御を行う手段が備えられていてもよい。
【００３０】
処理対象リンク抽出部３００は、探索において、処理対象リンクを抽出する。例えば、ある処理対象リンクの走査が終了し、リンクの終点のノードへと到達した場合、当該ノードにおける次の処理対象リンクの抽出を行う。探索開始時においては、出発地点を開始点とするリンクを抽出する。すなわち、処理対象リンク抽出部３００は、処理対象リンクのコスト演算が終了した後、処理対象リンクを更新する処理対象リンク更新手段として動作する。別の例として、処理対象リンクを更新する処理対象リンク更新手段を、処理対象リンク抽出部３００とは別の構成として備えていてもよい。
【００３１】
処理対象リンクとして抽出されるリンクが複数ある場合、処理対象リンク抽出部３００は、それぞれの処理対象リンクを１つの演算コアに割り当て、各演算コアにおいて各処理対象リンクの演算を実行させる。換言すると、演算コアと処理対象リンクとの関係は、１対１であってもよい。また、１対１には限られず、所定数の処理対象リンクを１つの演算コアで演算するようにしてもよい。すなわち、演算コアと処理対象リンクとの関係は、１対多であってもよい。
【００３２】
コスト演算部３０２は、処理対象リンクのコストを演算する。コストは、後述する経路ネットワークＤＢ  ３２０にリンク情報とともに格納されている。例えば、全ての処理対象リンクに対して、１イテレーションごとにコストを１ずつ減少させていき、コストが０となった時点で当該処理対象リンクの処理を終了させ、処理済リンクへとその状態を更新する。リンクの到達ノードにおいて未処理リンクが存在する場合、当該未処理リンクを新たな処理対象リンクとしてコストの演算を継続する。
【００３３】
コストが０となったリンクは、ＧＰＵのデバイスメモリ内にそれまでに通過してきたリンク情報とともに記憶される。記憶される場所は、デバイスメモリではなく、ＧＰＵ外のメモリであっても構わない。また、新たに設定された処理対象リンクに付属する情報として、現在までに通過してきたリンク情報を保持しておいてもよい。
【００３４】
このコストの演算は、各処理対象リンクの演算を実行する演算コアごとに並列に処理される。並列処理において、例えば、１イテレーションごとに演算コア同士の同期をとることにより、同じタイミングにおけるリンクの進捗を各演算コアが保持していることとなり、例えば、コストが高くなるようなリンクの組み合わせの演算を行うことが排除される。同期処理は、必須ではなく、例えば、そもそも１ブロック内における所定の領域（例えば、ＣＵＤＡ（登録商標）の処理における１ワープ）内の演算コアの処理が同期されて行われている場合、明示的に同期をとらなくてもよい。
【００３５】
なお、コスト演算部３０２がコストを演算し、コストが０になった場合に、当該処理対象リンクを更新するものとしたが、これには限られない。例えば、コスト演算部３０２が演算した結果に基づいて、処理対象リンク更新部として動作する処理対象リンク抽出部３００が、処理対象リンクを処理済リンクへと更新し、当該処理済リンクの終点を始点とする未処理リンクを新たな処理対象リンクとして更新するようにしてもよい。このように、コストの演算と、処理対象リンクの更新処理は、別々のモジュールにより行われるようにしてもよい。
【００３６】
記憶部３２は、経路ネットワークＤＢ  ３２０と、処理対象リンク記憶部３２２と、を備え、サーバ３が探索処理を行う場合に必要となるデータを格納する。
【００３７】
経路ネットワークＤＢ  ３２０は、経路の探索に必要な経路ネットワークデータを格納する経路ネットワークデータ記憶手段として機能する。また、探索中に必要となるデータとして、経過時間、探索元リンクのデータ等が格納されていてもよい。経路ネットワークデータとは、例えば、道路における基準点となるノードの情報と、当該ノードから近接するノードへと移動する場合のコストの情報とを紐付けるデータである。経路としては、道路に限られず、公共交通機関の経路情報であってもよい。この経路ネットワークＤＢ  ３２０は、アトミックアクセスされるようにしてもよい。
【００３８】
上記のコストとは、ノード間の距離に基づいて決定される値であるが、距離だけには拘わらず、道路の混み具合、坂道であるとか道路の幅であるとかの道路の態様、天候や交通事故により変化する道路の状況等により決定されてもよい。距離以外のパラメータについては、時刻で変化するものであってもよいし、時期、曜日で変化するものであってもよい。公共交通機関の場合には、その運賃を含めてコストを決定してもよい。コストは、ノード間においてユニーク、すなわち、逆方向のリンクに対して同じコストを設定してもよいし、ノード間においても進行方向に沿って別のもの、すなわち、逆方向のリンクに対しても同じコストであるとは限らないように設定してもよい。
【００３９】
処理対象リンク記憶部３２２は、処理対象リンクの情報を格納するバッファである。この処理対象リンク記憶部３２２は、リングバッファを備えて構成されていてもよい。複数の演算コアにより並列演算を行っている場合、このリングバッファは、アトミックアクセスされるようにしておいてもよい。このようにすることで、複数の演算コアから同じ処理対象リンクにアクセスされることを防止する。
【００４０】
図２は、本実施形態に係るサーバ３のハードウェア構成の一例を示す図である。この図２に示すように、サーバ３は、ホスト３６と、デバイス３８とを備える。
【００４１】
ホスト３６は、ＣＰＵ  ３６０と、ホストメモリ３６２と、を備え、サーバ３の制御を行う装置である。例えば、ホスト３６は、コンピュータ、ワークステーション等を備えて構成される。
【００４２】
ＣＰＵ  ３６０は、ホスト３６及びデバイス３８を制御するためのプロセッサである。一般的に使用されているＣＰＵであればよく、種類や方式、クロック数等は特に問われるものではない。
【００４３】
ホストメモリ３６２は、プログラムの起動又はデータの保持のために用いられるデータを保持するようにホスト３６に備えられているメモリである。例えば、ＲＡＭ（Random Access Memory）を備えて構成されている。ＲＡＭの種類はどのようなものでもよい。
【００４４】
ホスト３６には、この他に、ホスト３６の機能を発揮させるための機能を有する多数のモジュール等が備えられていてもよい。また、ネットワークインタフェースを有し、端末装置２との通信を行う。さらに、入出力インタフェースを有し、例えば、ディスプレイ等へのデータの出力、キーボード等を介したユーザからの入力を受け付けるようにしておいてもよい。
【００４５】
デバイス３８は、演算部３８０と、デバイスメモリ３８２と、を備え、ホスト３６からの制御信号に基づいて並列演算処理を行う。デバイス３８は、例えば、ＧＰＵを備えて構成される。図２において、ホスト３６と、デバイス３８とは別の構成として示されているが、これには限られず、ホスト３６内にデバイス３８が内蔵されている構成であってもよい。
【００４６】
演算部３８０は、多数の演算コア３８４を備える。この演算コア３８４は、独立して演算を行うことが可能なコアであり、それぞれのコアにおいて演算を行うことが可能である。独立して演算を行うとは、デバイスメモリ３８２に記録されているプログラムに基づいて所定数の演算コア３８４が異なるデータに対して同じ演算処理を行うことを含む。
【００４７】
所定数の演算コア３８４で、１ブロックを構成するようにしてもよい。また、１つの演算コア３８４における単位を１スレッドと呼ぶ。すなわち、所定数のスレッドの処理を１ブロックで同じタイミングで並列に行うことが可能である。さらに、複数ブロックにおいて同じ処理を同じタイミングで並列に行うようにしてもよい。
【００４８】
デバイスメモリ３８２は、演算コア３８４から参照することのできるメモリである。このデバイスメモリ３８２はさらに、全ての演算コア３８４からアクセス可能である大容量メモリと、例えば、１ブロック単位における演算コア３８４から高速アクセス可能であるメモリとを備えていてもよい。
【００４９】
デバイスメモリ３８２と、ホストメモリ３６２は、例えば、ＰＣＩｅ（PCI（Peripheral Component Interconnect） Express）を介して接続される。演算コア３８４を制御するためのプログラムは、ホスト３６からＰＣＩｅを介してデバイスメモリ３８２へと転送され、デバイス３８に備えられているコンパイラ等によりコンパイルされ、演算コア３８４が制御されてもよい。別の例としては、バイナリファイルとしてプログラムが転送され、演算コア３８４を制御するようにしてもよい。
【００５０】
図３は、本実施形態に係る情報処理システム１の動作を示すフローチャートである。この図３を用いて、情報処理システム１の経路探索の動作について説明する。
【００５１】
まず、サーバ３は、通信部３４を介して出発地、目的地に関する情報を取得し、経路探索の始点、終点として出発地、目的地を設定する（ステップＳ１００）。
【００５２】
次に、設定された出発地から処理対象リンクを抽出する（ステップＳ１０２）。これらのステップＳ１００及びステップＳ１０２の処理は、例えば、サーバ３のホスト３６で処理対象リンクの抽出が実行され、デバイス３８の処理対象リンク記憶部３２２に初期の処理対象リンクを転送するようにしてもよい。別の例として、デバイス３８へリンクの始点を転送し、デバイス３８において処理対象リンクを抽出し、処理対象リンク記憶部３２２へと記憶するようにしてもよい。このように、処理対象リンク抽出部３００は、ホスト３６及びデバイス３８の少なくとも１つに備えられていればよく、抽出したリンクを処理対象リンク記憶部３２２へと格納する。
【００５３】
次に、コスト演算部３０２は、１又は複数の抽出された処理対象リンクのそれぞれについて、設定されているコストをデクリメントする（ステップＳ１０４）。処理対象リンクのコストは、経路ネットワークＤＢ  ３２０に格納されているデータに基づいて取得される。このコスト演算部３０２は、例えば、１つの演算コア３８４内に１つ備えられ、１スレッドにおいて１つの処理対象リンクについてのコスト演算が行われる。
【００５４】
例えば、デバイスとしてＧＰＵを用いる場合、この演算コア３８４は、数千から数万コアとなり、すなわち、数千から数万スレッドにおいて数千から数万個の処理対象リンクについて個々に同じタイミングでコストの演算を行うことが可能となる。上述したように、１スレッドで演算を行うリンクは、１つには限られず、複数の処理対象リンクについての演算を１スレッドで行うようにしてもよい。
【００５５】
次に、コスト演算部３０２は、処理対象リンクのコストが０になったか否かを判断する（ステップＳ１０６）。このコストが０になったか否かの判断についても各々の演算コア３８４について実行され、同じタイミングで複数の処理対象リンクについて判断が実行される。
【００５６】
処理対象リンクのコストが０であるスレッドを備える演算コア３８４において（ステップＳ１０６：ＹＥＳ）、コスト演算部３０２は、コストが０となった処理対象リンクを処理済リンクとして更新する（ステップＳ１０８）。処理済リンクとなった処理対象リンクは、処理対象リンク記憶部３２２から消去される。消去される代わりに、バッファにおいて空きリンクであることを示すインデクスをスレッドに共通して持たせるようにしてもよい。これは、上述したように、コスト演算部３０２ではなく、処理対象リンク更新部として機能する処理対象リンク抽出部３００が実行してもよい。
【００５７】
続いて、処理済リンクの終点ノードを始点ノードとして有する未処理リンクを経路ネットワークＤＢ  ３２０から抽出し、処理対象リンクとして更新する（ステップＳ１１０）。新たに抽出された処理対象リンクは、その情報が処理対象リンク記憶部３２２へと記憶される。記憶する際、アトミックアクセスを行うことにより、他のスレッド、すなわち、他の演算コア３８４とは排他的なアクセスをすることが可能となり、重複したバッファ（アドレス）への書き込みを防止することができる。
【００５８】
あらたに抽出された処理対象リンクが複数である場合、処理対象リンクの演算を行っていない演算コア３８４のスレッドにおいて当該処理対象リンクの演算を行うようにしてもよい。複数の新たな処理対象リンクのうち１つは、引き続き処理済リンクとなった処理対象リンクの演算をしていた演算コア３８４が演算を行うようにしてもよい。別の例として、処理済リンクとなった処理対象リンクの演算をしていた演算コア３８４が複数の新たな処理対象リンクの演算を行うようにしてもよい。
【００５９】
処理済リンクの情報、又は、新たに抽出された処理対象リンクには、抽出の基点となった処理済リンクの情報を記憶しておいてもよい。記憶された処理済リンクの情報は、記憶部３２に格納されてもよい。このように、処理済リンク、又は、新たな処理対象リンクの情報に、当該リンクに到達するまでに辿ってきたリンクの情報を持たせることにより、当該リンクがどのようなリンク、すなわち、どのような経路を辿ってきたのかが格納される。
【００６０】
次に、演算コア３８４同士の同期を行う（ステップＳ１１２）。この同期処理により、コストが０でないと判断されたスレッド（ステップＳ１０６：ＮＯ）、及び、コストが０となり、処理対象リンクの更新を実行したスレッドが同期され、次の処理を同じタイミングで行うことが可能となる。
【００６１】
同期したのち、目的地に到達したリンクが存在するか否かが判断される（ステップＳ１１４）。目的地に到達したリンクが存在しない場合（ステップＳ１１４：ＮＯ）、各演算コア３８４においてステップＳ１０４からステップＳ１１２までの処理が繰り返される。このように、コストを−１する処理からの一連の処理を１イテレーションとして各スレッドにおいてループ処理が実行される。
【００６２】
一方、目的地に到達したリンクが存在する場合（ステップＳ１１４：ＹＥＳ）、経路取得部３０４は、目的地に到達したリンクの情報を取得する（ステップＳ１１６）。
【００６３】
次に、経路取得部３０４は、格納されたリンクの経路情報から、目的地に到達したリンクが、目的地に到達するまでに経由してきたリンクの情報を取得することが可能となる（ステップＳ１１８）。
【００６４】
次に、経路取得部３０４は、取得した経路を出力して処理を終了する（ステップＳ１２０）。このように、複数の演算コア３８４においてコストの計算を各々実行し、リンク情報を格納しながらリンクを更新することにより、コストを加味した最適な経路を取得することが可能となる。
【００６５】
ステップＳ１０４からステップＳ１１４の処理は、上述したように、複数の演算コア３８４により、すなわち、複数のスレッドにより同じタイミングで行われる。ここで、同じタイミングとは、正確に同時である必要は無く、ある程度の時間的なずれが生じていても構わない。同期処理については、１ブロック内にある複数スレッドについては、実行されるが、ブロック同士の同期が行われているか否かは問わない。
【００６６】
ブロック同士について同期が行われない場合、例えば、所定の回数のステップＳ１０４からステップＳ１１４の処理が行われた後に、デバイスでの演算を中断し、いったんホストへと処理を戻すことにより、処理対象リンク全体としての同期をとるようにしてもよい。この場合、演算途中のリンクについては、記憶部３２にその状態、すなわち、処理対象リンクの中断タイミングにおける残りコスト等を記憶するようにしてもよい。
【００６７】
このように残りのコストを記憶しておくことにより、再度ホスト３６がデバイス３８における演算処理の制御を実行する際に、スレッドを再配置することが可能となる。スレッドの再配置を行うことにより、例えば、近くにある処理対象リンク同士を同じブロック内に配置することも可能となり、近くにある処理対象リンク同士について、同期を行える状態で処理を行うことが可能となる。
【００６８】
探索において最適経路の他に複数の候補となる経路を出力する場合、目的地に到達するリンクについて、目的地の１つ前のノードまでの経路を再度探索するようにしてもよい。
【００６９】
別の例として、ある処理対象リンクのコストが０となり、既に当該リンクの終点のノードを終点とする処理済リンクが存在する場合に、そのコストの差を計算し、所定値以内であれば当該リンクを候補リンクとして情報を格納しておくようにしてもよい。すなわち、処理済リンクにおいては、所定数のイテレーション分コストの計算を継続して行っておき、この情報を元に最適経路以外の経路候補の情報を取得するようにしてもよい。
【００７０】
図４は、本実施形態に係る情報処理システム１の経路探索の様子を示す図である。○はノードを表し、中に記載されているアルファベットをノードの識別子とする。ノード間を繋ぐ線分がリンクであり、リンクの先に記載されている数値がコストを表す。例えば、図４（ａ）のような経路の場合、ＡからＢのリンクは、そのコストは２である。ＢからＣのリンクは、コストは２であり、逆向きのＣからＢへのリンクは、コストが３であることをしめす。この経路において出発地Ａから目的地Ｈまでの経路を探索する場合について説明する。以下、ＡからＢへのリンクを、ＡＢ等と表す。この図４においては、ノードＨに到達するリンク以外の全てにコストが設定されているがこれには限られない。例えば、一方通行の道路を含むリンクである場合、コストを無限大（又は、きわめて大きい数値）にして、リンクを設定しないようにしてもよい。
【００７１】
まず、出発地Ａと目的地Ｈの情報が設定される。経路ネットワークＤＢ  ３２０から、Ａを始点とするリンク、ＡＢ、ＡＣ、ＡＤが抽出される。
【００７２】
ＡＢ、ＡＣ、ＡＤに関するコストの演算は、それぞれ別の演算コア３８４に割り当てられる。各イテレーションでは、コストが１ずつ減算される。概念的に説明すると、ＡからＢ、Ｃ、Ｄにそれぞれ同じタイミングで出発した仮想的な車両等が存在し、１イテレーションごとに、１のコスト分リンクを進むと言う処理で置き換えられる。
【００７３】
２イテレーション後、図４（ｂ）に示すように、ＡＢを進んでいた車両がＢへと到達する。いっぽう、ＡＣ、ＡＤを進んでいた車両は、それぞれのリンクを２進んだ位置に存在し、Ｃ、Ｄには到着していない状態である。
【００７４】
ＡＢのリンクの処理を行っていた演算コア３８４は、Ｂにおいて処理対象リンクの更新を行う。ＡＢのリンクは、処理対象リンクから、処理済リンクへと更新される。一方で、未処理リンクＢＡ、ＢＣ、ＢＥが新たな処理対象リンクとして更新され、それぞれ別の演算コア３８４において続く処理が行われる。また、このタイミングでＢに到達しているリンクは１つであるので、Ｂへの最適な経路として、ＡＢが記憶される。
【００７５】
続いて、１イテレーション後、ＡＣを辿っていた車両がＣへと到達し、ＡＣが処理済リンク、ＣＡ、ＣＢ、ＣＤ、ＣＥ、ＣＦが新たな処理対象リンクとして更新され、Ｃへの最適経路は、ＡＣが記憶される。
【００７６】
図４（ｃ）は、さらに２イテレーション後の様子を示す図である。破線で示すリンクは、既に他のリンクが到達したノードに到達したリンクであり、到達したタイミングでは、到達ノードにおいて全てのリンクが処理対象リンク又は処理済リンクとなっているリンクを示す。細線の矢印は、処理済リンクを示す。
【００７７】
ＡＢを走っていた車両等は、ＢＣのリンクを介してＣに到達、及び、ＢＥのリンク上の残りコスト１の箇所に存在する。Ｃのノードにおいては、ＡＣのリンクを辿った車両が既に存在しているため、Ｃにおける未処理リンクは、既に存在せず、ＡＢ、ＢＣを辿ってきたリンクは、処理対象リンクを処理済リンクとした後、新たな処理対象リンクを更新せずに、処理を終了する。ＢからＢＡを辿ったリンクは、Ａに到達するが、Ａにおけるリンクも同様に全てが処理済リンクとなっているため、処理を終了する。
【００７８】
ＡＣのリンクを辿っていた車両等は、まず、初期状態から３イテレーション後にＣに到達する。そこから２イテレーションが経過し、ＣＡ、ＣＢのリンクは、それぞれ残りコストが１の箇所、ＣＦのリンクは、残りコストが２の箇所まで進行する。ＣＥのリンクを進んでいた車両等は、Ｅに到達し、この時点でＥに到達している車両等が存在しないため、Ｅに到達するリンクとして、ＡＣ、ＣＥを辿るリンクが記憶される。そして、ＣＥのリンクを処理済リンクとし、ＥＢ、ＥＨのリンクを新たな処理対象リンクとして更新する。
【００７９】
ＣＤのリンクを進行していた車両等は、Ｄに到着後、Ｄにおいて処理済リンクに更新され、さらに、ＤＡ、ＤＣ、ＤＦ、ＤＧが新たな処理対象リンクとして更新される。また、Ｄに到達する最適な経路として、ＡＣ、ＣＤを辿る経路が記憶される。経路更新後、１イテレーションの演算がされているため、各リンクを進行する車両は、Ｄから１コスト分遠ざかった位置に存在する。
【００８０】
このような処理が、目的地Ｈに到達するリンクが発生するまで繰り返し行われる。図４（ａ）のような経路ネットワークの場合、上記の処理を繰り返すことにより、ＡＣ、ＣＥ、ＥＨのリンクを辿る経路が最適経路として取得され、出力される。
【００８１】
デバイス３８からホスト３６への出力、及び、サーバ３から端末装置２への出力は、リンク情報であってもよいが、端末装置２からユーザへの出力は、これらのリンク情報を、例えば、地図上の経路情報へと変換して出力してもよい。ユーザは、例えば、ディスプレイに出力された地図上の情報から最適経路を取得することが可能となる。
【００８２】
このように、並列にコストの処理を行い、リンクを未処理リンク、処理対象リンク及び処理済リンクへと変更することにより、演算を行う上でボトルネックとなりがちな重い処理であるソートの処理を省くことが可能となる。すなわち、並列処理を行わないダイクストラ法のように各処理対象リンクのコストのソートを行い、いずれの処理対象リンクが最適経路を構成するかを探索するのではなく、１イテレーションごとにコストを並列演算によりデクリメントすることで、同じタイミングでの各経路における車の位置をシミュレートすることが可能となり比較的重い処理となるソート処理を省略することが可能となる。なお、上述しにおいてはデクリメントにより処理を行ったが、イテレーションごとにインクリメントされるパラメータを備え、当該パラメータと、リンクのコストとを比較するようにしても同じ効果を得ることが可能である。すなわち、デクリメントで処理を行ってもよいし、インクリメントで処理を行ってもよい。
【００８３】
次に、メモリ管理について説明する。図５は、図４における経路の場合の処理対象リンクの情報のメモリ配置を概念的に示す図である。上述したように、本実施形態において、処理対象リンク記憶部３２２として、リングバッファを用いてもよい。
【００８４】
初期状態において、図５（ａ）にしめすように、リングバッファには、何も記録されていない、又は、どのような数値が記録されていてもよい。
【００８５】
出発地がＡと決まり、処理対象リンクの初期値がＡＢ、ＡＣ、ＡＤであると抽出されると、図５（ｂ）に示すように、ＡＢ、ＡＣ、ＡＤ用のバッファが割り当てられる。なお、説明のためにリンクは記号を用いて示しているが、これらのリンクはユニークに割り当てられたＩＤを有してもよく、当該ＩＤを用いて管理するようにしてもよい。これは、経路ネットワークＤＢ  ３２０においても同様である。この際、それぞれのタイミングにおいて、どのバッファまでが用いられているかを併せて記憶しておく。例えば、図５（ｂ）に示す矢印の位置のアドレスを共有して記憶するようにする。
【００８６】
１イテレーション後の同期後には、図５（ｃ）に示すように各バッファに記憶されている数値が１ずつ減少される。各数値の減算処理は、それぞれのリンクの処理を行う演算コア３８４により実行される。
【００８７】
さらに１イテレーション後の同期後には、図５（ｄ）に示すようにバッファが使用される。ＡＤに続くバッファに、ＢＡ、ＢＣ、ＢＤの値が格納され、矢印は、ＢＤのバッファの後ろ側のアドレスを示す。なお、Ｂから派生したリンクは、図のようにＢＡ、ＢＣ、ＢＤの順番に割り当てられている必要は無く、メモリの取得処理の早かったスレッドの順番に割り当てられてもよい。複数のスレッドが重複したアドレスを取得しないように、アトミックアクセス、すなわち、アトミック処理によるメモリ領域の確保をしてもよい。
【００８８】
次の１イテレーション後の同期後には、図５（ｅ）に示すようにバッファが使用される。この際、ＡＢに関する数値が０のままであるが、これには限られず、−１となるように処理してもよい。処理済リンクとしてスレッドを破棄し、又は、破棄後さらに新たな処理対象リンクのためのスレッドとして使用する場合は、図５（ｅ）にしめすように、ＡＢのコストは０のままとなる。
【００８９】
最後のバッファまで到達した際には、ＡＢのバッファから順に再利用される。次の１イテレーション後には、ＢＣについてのバッファが、ＡＤ、ＢＡについてのバッファよりも先に０となるが、このような場合においても、次の周回のバッファの取得においては、先頭から順番にバッファを確保する。なお、上述したようにデクリメントでは無く、インクリメントで処理をしてもよい。インクリメントの場合、例えば、コストをマイナス値で表し、インクリメントして０になるタイミングで処理済リンクとするようにしてもよいし、上述したようにパラメータを用意し、インクリメントされた値とリンクのコスト値とを比較するようにしてもよい。
【００９０】
このように、バッファを処理することにより、バッファの再利用を、スレッド内でのメモリの演算等において複雑な処理を行うことなく、効率よく行うことが可能となる。リングバッファの容量を、処理対象となるリンクの最大値よりも大きくとる、すなわち、現在までに処理対象となったリンク数から、処理済となったリンク数を引いた数よりも十分大きくとることにより、リングバッファにおいて、使用中のリンクとかぶることなく次の処理対象リンクのバッファを割り当てることが可能となる。
【００９１】
処理対象リンクをリングバッファに格納できるようにするために、処理対象リンクとなるリンクの制限を加える、所謂枝切りをしてもよい。
【００９２】
枝切りの第１例として、目的地と反対側のリンクに関して処理対象リンクとして更新する制限を加えてもよい。例えば、出発地から目的地までの方向及び距離を取得した後、出発地から目的地までの方向と、出発地から見て逆方向に進むリンクについては、出発地から目的地までの距離の１／１０以上離れた場合には、処理対象リンクとして抽出しないようにしてもよい。一例として、大阪から東京まで向かう経路を取得する場合、大阪から東京方面と逆方向に６０ｋｍを超えてしまうようなリンクを処理対象リンクとして取得しないようにする。
【００９３】
なお、割合ではなく、所定の距離、例えば、２０ｋｍ等としてもよい。この場合、大阪から東京都は逆方向に２０ｋｍを超えるようなリンクは、処理対象リンクとしないようにする。
【００９４】
この枝切りは、出発地と目的地までの距離に基づいて行わないようにしてもよい。例えば、出発地と目的地の距離が１０ｋｍである場合に、１ｋｍ逆走しても早く到着する場合がある。このような場合に処理対象リンクの制限をしない場合に、例えば、出発地と目的地の距離が２０ｋｍ程である場合には、距離に基づいた枝切りをしないように設定してもよい。この他、所定の距離までは、固定の距離を超えると枝切りをするが、当該所定の距離を超えた場合には、割合に基づいた枝切りをするようにしてもよい。
【００９５】
枝切りの第２例として、リンクを道の広さに基づいて分類し、出発地及び目的地の付近以外では、例えば、両側１車線ずつも無いような道路（以下、未保証道とよぶ）を除外するように処理対象リンクとするようにしてもよい。未保証道は、両側１車線ずつ無いような道路には限られず、例えば、住宅街を通る道路、又は、道の広さが５ｍ以下等、別の指標を用いてもよい。このように未保証道を設定することにより、出発地及び目的地の付近、例えば、出発地及び目的地のそれぞれ１ｋｍの範囲外においては、未保証道を処理対象リンクから外すようにリンクの抽出を行ってもよい。
【００９６】
枝切りの第３例として、リンクの存在する領域を、例えば、都市部、郊外部として分割し、都市部、郊外部で別の指標を用いてリンクの拡散をするようにしてもよい。例えば、都市部においては未保証道も処理対象リンクとして抽出するが、郊外部においては、未保証道は処理対象リンクとして抽出しないようにしてもよい。
【００９７】
枝切りの第４例として、現在処理対象リンクの保存領域として用いているバッファ数が所定の数を超えるような場合に、上述した第１例から第３例のような制限を加えるようにしてもよい。
【００９８】
これらのように、リングバッファの容量を十分大きくとることに加え、処理対象リンクとして抽出されるリンクに制限を加えるようにしてもよい。
【００９９】
もっとも、リングバッファを用いることなく、メモリにおいてメモリの使用状況を、例えば、処理済リンクとなったリンクに関するメモリにコストとして使用しない数値（例えば、２１４７４８３６４７）の値を代入する等して、空きメモリであることを管理するテーブルを記憶部３２に備えておき、当該テーブルを参照することにより、あいているアドレスに処理対象リンクを記憶するようにしてもよい。
【０１００】
以上のように、本実施形態に係る情報処理システム１は、マルチコアプロセッサを備えるアクセラレータ、例えば、ＧＰＧＰＵを用いるＧＰＵにおいて、並列演算を行うことにより、経路探索の時間を逐次処理を行った場合と比較して大きく減少することを可能とする。この実施形態のように、マルチコアプロセッサを用いることによる並列演算を行えるようにすることにより、サーバにおける処理を軽くするとともに、複数のユーザからの処理を高速に対処することが可能となる。
【０１０１】
なお、上述した実施形態においては、コストが０になるごとに処理対象リンクを抽出するようにしたが、それには限られない。例えば、現在の処理対象リンクのコストが０になるまで演算処理を行い、まとめて次の処理対象リンクを抽出するようにしてもよい。この際、処理済リンクとして更新する処理対象リンクの情報に基づいて、新たな処理対象リンクに最適な経路を記憶させ、目的地までの最適経路を取得するようにしてもよい。このようにコストではなくリンクで処理を行うと、リンクの拡散ごとにスレッドを管理することが可能となるため、前述した実施形態と比較して、リンクの管理をより簡易なものへと変更することが可能となる。
【０１０２】
上述した実施形態で説明した情報処理システムの少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、情報処理システムの少なくとも一部の機能を実現するプログラムをフレキシブルディスクやＣＤ−ＲＯＭ等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等着脱可能なものに限定されず、ハードディスク装置やメモリなど固定型の記録媒体でもよい。
【０１０３】
また、情報処理システムの少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線（無線通信も含む）を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調を掛けたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、或いは記録媒体に収納して頒布してもよい。
【０１０４】
さらに、１つ又は複数の情報処理装置によって情報処理システムを機能させてもよい。複数の情報処理装置を用いる場合、情報処理装置のうち１つをコンピュータとし、当該コンピュータが所定のプログラムを実行することにより情報処理システムの少なくとも１つの手段として機能が実現されてもよい。
【０１０５】
上記の記載に基づいて、当業者であれば、本発明の追加や効果や種々の変形を想到できるかもしれないが、本発明の態様は、上述した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲で種々の追加、変更及び部分的削除が可能である。
【０１０６】
例えば、上記において、経路探索の範囲を出発地、目的地としているが、これには限られるものではない。例えば、出発地及び目的地までの間に存在する第１地点及び第２地点の経路の探索を上記の実施形態のように求めてもよい。具体的には、出発地、目的地には限られず、任意の第１地点から第２地点までの経路の探索を上記の実施形態のように求めるようにしてもよい。このようにすることにより、区間的に詳細な経路探索を行うことも可能である。すなわち、上述した説明において、出発地を任意の第１地点と、目的地を任意の第２地点と置き換えて実現することも可能である。
【０１０７】
さらに、上記においては、サーバ側のＧＰＵで経路探索を行うものとしたが、これには限られない。すなわち、端末装置２にＧＰＵが搭載されており、この端末装置２のＧＰＵを用いて経路探索をするようにしてもよい。このような構成である場合、経路探索を行うタイミングにおいてサーバ３及びネットワーク４は、必須の構成ではなく、図１に示すサーバ３の構成要素のうち経路探索に必要なものが、端末装置２に備えられる構成であってもよい。
【符号の説明】
【０１０８】
１  情報処理システム
２  端末装置
３  サーバ
３０  制御部
３００  処理対象リンク抽出部
３０２  コスト演算部
３０４  経路取得部
３２  記憶部
３２０  経路ネットワークＤＢ
３２２  処理対象リンク記憶部
３４  通信部
３６  ホスト
３６０  ＣＰＵ
３６２  ホストメモリ
３８  デバイス
３８０  演算部
３８２  デバイスメモリ
３８４  演算コア
【図１】
2019200058.tif 000003
【図２】
2019200058.tif 000004
【図３】
2019200058.tif 000005
【図４】
2019200058.tif 000006
【図５】
2019200058.tif 000007