(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-12-21
(45)【発行日】2023-01-04
(54)【発明の名称】情報処理システム、情報処理プログラム、情報処理装置及び情報処理方法
(51)【国際特許分類】
G01C 21/34 20060101AFI20221222BHJP
H04L 45/00 20220101ALI20221222BHJP
【FI】
G01C21/34
H04L45/00
(21)【出願番号】P 2018093090
(22)【出願日】2018-05-14
【審査請求日】2021-03-25
(73)【特許権者】
【識別番号】500168811
【氏名又は名称】株式会社ナビタイムジャパン
(74)【代理人】
【識別番号】100091982
【氏名又は名称】永井 浩之
(74)【代理人】
【識別番号】100091487
【氏名又は名称】中村 行孝
(74)【代理人】
【識別番号】100082991
【氏名又は名称】佐藤 泰和
(74)【代理人】
【識別番号】100105153
【氏名又は名称】朝倉 悟
(74)【代理人】
【識別番号】100107582
【氏名又は名称】関根 毅
(74)【代理人】
【識別番号】100152205
【氏名又は名称】吉田 昌司
(74)【代理人】
【識別番号】100202429
【氏名又は名称】石原 信人
(72)【発明者】
【氏名】吉 濱 誠
【審査官】藤村 泰智
(56)【参考文献】
【文献】特開2007-306442(JP,A)
【文献】特開2016-116067(JP,A)
【文献】特開2003-075177(JP,A)
【文献】国際公開第2018/025341(WO,A1)
【文献】国際公開第2012/067210(WO,A1)
【文献】特開平11-325935(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G01C 21/26 ~ 21/36
H04L 45/00 ~ 45/128
G08G 1/00 ~ 1/16
(57)【特許請求の範囲】
【請求項1】
内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、GPU(Graphical Processing Unit)と、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段と、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段と、
前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段と、
1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段と、
前記コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段と、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得する、経路取得手段と、
を備え、
前記GPU上に、少なくとも、前記経路ネットワークデータ記憶手段及び前記コスト演算手段、を備え
、
前記リンクは、方向情報を備え、同一の2地点を接続する前記リンクは、双方向で異なるコストを有することができる、
情報処理システム。
【請求項2】
前記演算コアはそれぞれ、前記処理対象リンクのうち1つについてのコストの演算を行う、請求項1に記載の情報処理システム。
【請求項3】
前記処理対象リンク抽出手段は、前記第1地点及び前記第2地点のうち少なくとも1つから所定距離の範囲を、前記経路ネットワークデータに基づいて抽出し、前記所定距離の範囲内についての前記処理対象リンクの抽出粒度を、前記所定距離の範囲外についての前記処理対象リンクの抽出粒度よりも高くする、請求項1又は請求項2に記載の情報処理システム。
【請求項4】
前記GPUは、
前記デバイスメモリ上に、前記経路ネットワークデータ記憶手段と、前記処理対象リンク記憶手段と、を備え、
前記演算コア上に、前記処理対象リンク抽出手段と、前記コスト演算手段と、前記処理対象リンク更新手段と、を備える、
請求項1乃至請求項3のいずれかに記載の情報処理システム。
【請求項5】
内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、GPUを備えるコンピュータを、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得する、経路取得手段、
として機能させ
、
前記リンクは、方向情報を備え、同一の2地点を接続する前記リンクは、双方向で異なるコストを有することができる、
情報処理プログラム。
【請求項6】
通信可能に接続された複数の情報処理装置であって、その少なくとも1つにGPUを備える情報処理装置によって、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得する、経路取得手段、
を備えた情報処理システムであって、前記リンクは、方向情報を備え、同一の2地点を接続する前記リンクは、双方向で異なるコストを有することができる、
情報処理システムを構成するために、上記手段の少なくとも1つを備える情報処理装置。
【請求項7】
GPUを備えるコンピュータを、
経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段、
処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段、
前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段、
1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段、
コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段、
それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得する、経路取得手段、
としてさせるためのプログラムであって、前記リンクは、方向情報を備え、同一の2地点を接続する前記リンクは、双方向で異なるコストを有することができる、
情報処理プログラム。
【請求項8】
GPUを備える情報処理装置において、
経路ネットワークデータ記憶手段が経路ネットワークデータを記憶するステップ、
処理対象リンク記憶手段が処理対象となるリンクである処理対象リンクを記憶するステップ、
処理対象リンク抽出手段が前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出するステップ、
コスト演算手段が1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算するステップ、
処理対象リンク更新手段がコストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定するステップ、
経路取得手段がそれぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得するステップ、
を備え
、
前記リンクは、方向情報を備え、同一の2地点を接続する前記リンクは、双方向で異なるコストを有することができる、
情報処理方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報処理システム、情報処理プログラム、情報処理装置及び情報処理方法に関する。
【背景技術】
【0002】
マルチコアプロセッサの発展に伴い、様々な分野においてマルチコアプロセッサを利用してコストパフォーマンスを向上させるための研究開発が広く行われている。企業内又は家庭内においてこれらのプロセッサを用いることはもちろん、データセンタ内に設置し、各種データの検索やマイニング等に用いることも多くなってきている。
【0003】
経路探索においては、各ノードからのリンクの重みに基づいて、スタートのノードからの経路を徐々に決定していくダイクストラ法が探索法として用いられることが多い。しかしながら、ダイクストラ法は、同じノードに対して異なるタイミング(ステップ)で到達するリンクが発生し、一般的に並列処理を行うことが困難であった。
【先行技術文献】
【非特許文献】
【0004】
【文献】清水翔、他「リコンフィギュラブルプロセッサを用いた最短経路探索に関する一検討」、電気情報通信学会技術研究報告、社団法人電気情報通信学会、平成17年12月、第105巻、第451号、p.1-6
【発明の概要】
【発明が解決しようとする課題】
【0005】
そこで、本発明は、マルチコアプロセッサを用いて経路探索を高速かつ精度よく行うことができる情報処理システム、情報処理プログラム、情報処理装置及び情報処理方法を提案する。
【課題を解決するための手段】
【0006】
一実施形態に係る情報処理システムは、内蔵されたデバイスメモリと、複数の演算処理を並列に実行する複数の演算コアと、を備える、GPUと、経路ネットワークデータを記憶する、経路ネットワークデータ記憶手段と、処理対象となるリンクである処理対象リンクを記憶する、処理対象リンク記憶手段と、前記経路ネットワークデータに基づいて、第1地点における1又は複数の処理対象リンクを抽出する、処理対象リンク抽出手段と、1又は複数の前記処理対象リンクについてそれぞれのコストを並列演算する、コスト演算手段と、コストの演算が終了した前記処理対象リンクを処理済リンクとして更新するとともに、前記処理済リンクに接続する1又は複数の未処理リンクを前記処理対象リンクとして新たに設定する、処理対象リンク更新手段と、それぞれの前記処理済リンクに対して算出されたコストに基づいて前記第1地点から第2地点までの経路を取得する、経路取得手段と、を備え、前記GPU上に、少なくとも、前記経路ネットワークデータ記憶手段及び前記コスト演算手段、を備える。
【発明の効果】
【0007】
マルチコアプロセッサを用いた高速かつ精度のよい経路探索を実現する。
【図面の簡単な説明】
【0008】
【
図1】一実施形態に係る情報処理システムの機能の一例を示すブロック図。
【
図2】一実施形態に係る情報処理システムのハードウェア構成の一例を示す図。
【
図3】一実施形態に係る情報処理システムの処理の流れを示すフローチャート。
【
図4】一実施形態に係るリンク処理の概略の一例を示す図。
【
図5】一実施形態に係るメモリ管理の概略の一例を示す図。
【発明を実施するための形態】
【0009】
まず、本実施形態における用語について説明する。なお、用語の説明においては本実施形態の説明に必要な箇所だけを説明しており、厳密に正確なものに限られず、また、詳しい説明は省略している。
【0010】
「GPU(Graphical Processing Unit)」とは、画像処理に特化したプロセッサである。今日では、その優れた並列演算精度から、GPGPU(General-Purpose computing on GPU)の用途として一般的な演算処理に用いられることが多い。
【0011】
「演算コア」とは、GPUに備えられる1つの演算を行うコアの最小単位のことを言い、1つのGPU内に数100から数1000の演算コアが備えられている。
【0012】
「デバイスメモリ」とは、GPUに備えられる記憶領域のことを言い、演算コアを動かすためのプログラムや、演算コアが使用するデータ及び演算に必要となるバッファ領域を確保するために用いられる。1つのGPUにおいて、数Gから数10Gの容量のデバイスメモリが備えられる。
【0013】
「ホストプログラム」とは、GPUを搭載しているコンピュータにおいて、CPU(Central Processing Unit)に実行させるプログラムのことを言う
【0014】
「カーネル(又はカーネルプログラム)」とは、GPUにおいて演算コア又は制御部に実行させるプログラムのことを言う。
【0015】
「スレッド」とは、演算処理を行う単位のことを言い、ここでは、1つの演算コアが実行する演算処理(プログラム)のことを言う。
【0016】
「ブロック」とは、演算コア又はスレッドの集合の単位を言い、所定数の演算コア又は所定数のスレッドのことを言う。ブロック内では、動作している各スレッドの同期処理を行うことが可能である。
【0017】
「アトミックアクセス」とは、複数のスレッドが並列で動作している場合に、あるメモリにアクセス(書き込む/読み込み動作)を行う際に、他のスレッドから書き込みが行われないようにする処理のことを言う。
【0018】
「ノード」とは、探索における地点情報を示し、例えば、探索中における各時刻における基準点の情報のことを言う。より具体的には、道路における交差点、出発地、目的地などの重要地点、高速道路の入口等、探索においてチェックポイントとなりうる地点のことを言う。
【0019】
「リンク」とは、あるノードと、当該ノードに隣接するノードを接続する情報のことを言う。また、ノード情報を用いずに、各リンクの始点及び終点の情報を用いて経路探索を行うようにしてもよい。この場合、上述と同じ例で言うと、リンクは、一例として、交差点から次の交差点までの道路の情報のことである。
【0020】
「未処理リンク」とは、探索の実行時において、まだ走査されていないリンクのことを言う。初期状態において、全てのリンクが未処理リンクとなる。
【0021】
「処理対象リンク」とは、探索の実行時において、その時点において処理対象となっているリンクのことを言う。未処理リンクは、探索において走査対象となると処理対象リンクとなる。
【0022】
「処理済リンク」とは、探索の実行時において、既に処理対象となり、処理が終了しているリンクのことを言う。処理対象リンクは、探索においてその走査が終了すると処理済リンクとなる。
【0023】
(構造)
図1は、本実施形態に係る情報処理システムの概略を示すブロック図である。本実施形態に係る情報処理システムについて、
図1を参照して説明する。
【0024】
情報処理システム1は、端末装置2と、サーバ3と、を備える。端末装置2と、サーバ3とは、有線又は無線のネットワーク4を介して接続される。
【0025】
端末装置2は、サーバ3により探索された経路探索情報を取得し、出力する装置であり、例えば、クライアントPC、携帯電話、タブレット、スマートホン等の表示又は音声で探索結果を出力するデバイスである。また、端末装置2から、探索条件となる出発地、目的地の情報を入力するようにしてもよい。
【0026】
サーバ3は、ユーザ等により指定された出発地、目的地に基づいて最適な経路を探索し、端末装置2へと探索結果を出力する。
【0027】
ネットワーク4は、端末装置2と、サーバ3と、を接続するネットワークであり、例えば、イントラネット、インターネット、Wi-Fi(登録商標)、Bluetooth(登録商標)等の通信手段により、端末装置2からのリクエストをサーバ3へと、サーバ3からの出力結果を端末装置2へと通信により伝達する。
【0028】
サーバ3は、制御部30と、記憶部32と、通信部34と、を備える。
【0029】
制御部30は、処理対象リンク抽出部300と、コスト演算部302と、経路取得部304と、を備え、サーバ3の制御を行う。これらの他に、サーバ3が起動するため、又は、動作するために必要な制御を行う手段が備えられていてもよい。
【0030】
処理対象リンク抽出部300は、探索において、処理対象リンクを抽出する。例えば、ある処理対象リンクの走査が終了し、リンクの終点のノードへと到達した場合、当該ノードにおける次の処理対象リンクの抽出を行う。探索開始時においては、出発地点を開始点とするリンクを抽出する。すなわち、処理対象リンク抽出部300は、処理対象リンクのコスト演算が終了した後、処理対象リンクを更新する処理対象リンク更新手段として動作する。別の例として、処理対象リンクを更新する処理対象リンク更新手段を、処理対象リンク抽出部300とは別の構成として備えていてもよい。
【0031】
処理対象リンクとして抽出されるリンクが複数ある場合、処理対象リンク抽出部300は、それぞれの処理対象リンクを1つの演算コアに割り当て、各演算コアにおいて各処理対象リンクの演算を実行させる。換言すると、演算コアと処理対象リンクとの関係は、1対1であってもよい。また、1対1には限られず、所定数の処理対象リンクを1つの演算コアで演算するようにしてもよい。すなわち、演算コアと処理対象リンクとの関係は、1対多であってもよい。
【0032】
コスト演算部302は、処理対象リンクのコストを演算する。コストは、後述する経路ネットワークDB 320にリンク情報とともに格納されている。例えば、全ての処理対象リンクに対して、1イテレーションごとにコストを1ずつ減少させていき、コストが0となった時点で当該処理対象リンクの処理を終了させ、処理済リンクへとその状態を更新する。リンクの到達ノードにおいて未処理リンクが存在する場合、当該未処理リンクを新たな処理対象リンクとしてコストの演算を継続する。
【0033】
コストが0となったリンクは、GPUのデバイスメモリ内にそれまでに通過してきたリンク情報とともに記憶される。記憶される場所は、デバイスメモリではなく、GPU外のメモリであっても構わない。また、新たに設定された処理対象リンクに付属する情報として、現在までに通過してきたリンク情報を保持しておいてもよい。
【0034】
このコストの演算は、各処理対象リンクの演算を実行する演算コアごとに並列に処理される。並列処理において、例えば、1イテレーションごとに演算コア同士の同期をとることにより、同じタイミングにおけるリンクの進捗を各演算コアが保持していることとなり、例えば、コストが高くなるようなリンクの組み合わせの演算を行うことが排除される。同期処理は、必須ではなく、例えば、そもそも1ブロック内における所定の領域(例えば、CUDA(登録商標)の処理における1ワープ)内の演算コアの処理が同期されて行われている場合、明示的に同期をとらなくてもよい。
【0035】
なお、コスト演算部302がコストを演算し、コストが0になった場合に、当該処理対象リンクを更新するものとしたが、これには限られない。例えば、コスト演算部302が演算した結果に基づいて、処理対象リンク更新部として動作する処理対象リンク抽出部300が、処理対象リンクを処理済リンクへと更新し、当該処理済リンクの終点を始点とする未処理リンクを新たな処理対象リンクとして更新するようにしてもよい。このように、コストの演算と、処理対象リンクの更新処理は、別々のモジュールにより行われるようにしてもよい。
【0036】
記憶部32は、経路ネットワークDB 320と、処理対象リンク記憶部322と、を備え、サーバ3が探索処理を行う場合に必要となるデータを格納する。
【0037】
経路ネットワークDB 320は、経路の探索に必要な経路ネットワークデータを格納する経路ネットワークデータ記憶手段として機能する。また、探索中に必要となるデータとして、経過時間、探索元リンクのデータ等が格納されていてもよい。経路ネットワークデータとは、例えば、道路における基準点となるノードの情報と、当該ノードから近接するノードへと移動する場合のコストの情報とを紐付けるデータである。経路としては、道路に限られず、公共交通機関の経路情報であってもよい。この経路ネットワークDB 320は、アトミックアクセスされるようにしてもよい。
【0038】
上記のコストとは、ノード間の距離に基づいて決定される値であるが、距離だけには拘わらず、道路の混み具合、坂道であるとか道路の幅であるとかの道路の態様、天候や交通事故により変化する道路の状況等により決定されてもよい。距離以外のパラメータについては、時刻で変化するものであってもよいし、時期、曜日で変化するものであってもよい。公共交通機関の場合には、その運賃を含めてコストを決定してもよい。コストは、ノード間においてユニーク、すなわち、逆方向のリンクに対して同じコストを設定してもよいし、ノード間においても進行方向に沿って別のもの、すなわち、逆方向のリンクに対しても同じコストであるとは限らないように設定してもよい。
【0039】
処理対象リンク記憶部322は、処理対象リンクの情報を格納するバッファである。この処理対象リンク記憶部322は、リングバッファを備えて構成されていてもよい。複数の演算コアにより並列演算を行っている場合、このリングバッファは、アトミックアクセスされるようにしておいてもよい。このようにすることで、複数の演算コアから同じ処理対象リンクにアクセスされることを防止する。
【0040】
図2は、本実施形態に係るサーバ3のハードウェア構成の一例を示す図である。この
図2に示すように、サーバ3は、ホスト36と、デバイス38とを備える。
【0041】
ホスト36は、CPU 360と、ホストメモリ362と、を備え、サーバ3の制御を行う装置である。例えば、ホスト36は、コンピュータ、ワークステーション等を備えて構成される。
【0042】
CPU 360は、ホスト36及びデバイス38を制御するためのプロセッサである。一般的に使用されているCPUであればよく、種類や方式、クロック数等は特に問われるものではない。
【0043】
ホストメモリ362は、プログラムの起動又はデータの保持のために用いられるデータを保持するようにホスト36に備えられているメモリである。例えば、RAM(Random Access Memory)を備えて構成されている。RAMの種類はどのようなものでもよい。
【0044】
ホスト36には、この他に、ホスト36の機能を発揮させるための機能を有する多数のモジュール等が備えられていてもよい。また、ネットワークインタフェースを有し、端末装置2との通信を行う。さらに、入出力インタフェースを有し、例えば、ディスプレイ等へのデータの出力、キーボード等を介したユーザからの入力を受け付けるようにしておいてもよい。
【0045】
デバイス38は、演算部380と、デバイスメモリ382と、を備え、ホスト36からの制御信号に基づいて並列演算処理を行う。デバイス38は、例えば、GPUを備えて構成される。
図2において、ホスト36と、デバイス38とは別の構成として示されているが、これには限られず、ホスト36内にデバイス38が内蔵されている構成であってもよい。
【0046】
演算部380は、多数の演算コア384を備える。この演算コア384は、独立して演算を行うことが可能なコアであり、それぞれのコアにおいて演算を行うことが可能である。独立して演算を行うとは、デバイスメモリ382に記録されているプログラムに基づいて所定数の演算コア384が異なるデータに対して同じ演算処理を行うことを含む。
【0047】
所定数の演算コア384で、1ブロックを構成するようにしてもよい。また、1つの演算コア384における単位を1スレッドと呼ぶ。すなわち、所定数のスレッドの処理を1ブロックで同じタイミングで並列に行うことが可能である。さらに、複数ブロックにおいて同じ処理を同じタイミングで並列に行うようにしてもよい。
【0048】
デバイスメモリ382は、演算コア384から参照することのできるメモリである。このデバイスメモリ382はさらに、全ての演算コア384からアクセス可能である大容量メモリと、例えば、1ブロック単位における演算コア384から高速アクセス可能であるメモリとを備えていてもよい。
【0049】
デバイスメモリ382と、ホストメモリ362は、例えば、PCIe(PCI(Peripheral Component Interconnect) Express)を介して接続される。演算コア384を制御するためのプログラムは、ホスト36からPCIeを介してデバイスメモリ382へと転送され、デバイス38に備えられているコンパイラ等によりコンパイルされ、演算コア384が制御されてもよい。別の例としては、バイナリファイルとしてプログラムが転送され、演算コア384を制御するようにしてもよい。
【0050】
図3は、本実施形態に係る情報処理システム1の動作を示すフローチャートである。この
図3を用いて、情報処理システム1の経路探索の動作について説明する。
【0051】
まず、サーバ3は、通信部34を介して出発地、目的地に関する情報を取得し、経路探索の始点、終点として出発地、目的地を設定する(ステップS100)。
【0052】
次に、設定された出発地から処理対象リンクを抽出する(ステップS102)。これらのステップS100及びステップS102の処理は、例えば、サーバ3のホスト36で処理対象リンクの抽出が実行され、デバイス38の処理対象リンク記憶部322に初期の処理対象リンクを転送するようにしてもよい。別の例として、デバイス38へリンクの始点を転送し、デバイス38において処理対象リンクを抽出し、処理対象リンク記憶部322へと記憶するようにしてもよい。このように、処理対象リンク抽出部300は、ホスト36及びデバイス38の少なくとも1つに備えられていればよく、抽出したリンクを処理対象リンク記憶部322へと格納する。
【0053】
次に、コスト演算部302は、1又は複数の抽出された処理対象リンクのそれぞれについて、設定されているコストをデクリメントする(ステップS104)。処理対象リンクのコストは、経路ネットワークDB 320に格納されているデータに基づいて取得される。このコスト演算部302は、例えば、1つの演算コア384内に1つ備えられ、1スレッドにおいて1つの処理対象リンクについてのコスト演算が行われる。
【0054】
例えば、デバイスとしてGPUを用いる場合、この演算コア384は、数千から数万コアとなり、すなわち、数千から数万スレッドにおいて数千から数万個の処理対象リンクについて個々に同じタイミングでコストの演算を行うことが可能となる。上述したように、1スレッドで演算を行うリンクは、1つには限られず、複数の処理対象リンクについての演算を1スレッドで行うようにしてもよい。
【0055】
次に、コスト演算部302は、処理対象リンクのコストが0になったか否かを判断する(ステップS106)。このコストが0になったか否かの判断についても各々の演算コア384について実行され、同じタイミングで複数の処理対象リンクについて判断が実行される。
【0056】
処理対象リンクのコストが0であるスレッドを備える演算コア384において(ステップS106:YES)、コスト演算部302は、コストが0となった処理対象リンクを処理済リンクとして更新する(ステップS108)。処理済リンクとなった処理対象リンクは、処理対象リンク記憶部322から消去される。消去される代わりに、バッファにおいて空きリンクであることを示すインデクスをスレッドに共通して持たせるようにしてもよい。これは、上述したように、コスト演算部302ではなく、処理対象リンク更新部として機能する処理対象リンク抽出部300が実行してもよい。
【0057】
続いて、処理済リンクの終点ノードを始点ノードとして有する未処理リンクを経路ネットワークDB 320から抽出し、処理対象リンクとして更新する(ステップS110)。新たに抽出された処理対象リンクは、その情報が処理対象リンク記憶部322へと記憶される。記憶する際、アトミックアクセスを行うことにより、他のスレッド、すなわち、他の演算コア384とは排他的なアクセスをすることが可能となり、重複したバッファ(アドレス)への書き込みを防止することができる。
【0058】
あらたに抽出された処理対象リンクが複数である場合、処理対象リンクの演算を行っていない演算コア384のスレッドにおいて当該処理対象リンクの演算を行うようにしてもよい。複数の新たな処理対象リンクのうち1つは、引き続き処理済リンクとなった処理対象リンクの演算をしていた演算コア384が演算を行うようにしてもよい。別の例として、処理済リンクとなった処理対象リンクの演算をしていた演算コア384が複数の新たな処理対象リンクの演算を行うようにしてもよい。
【0059】
処理済リンクの情報、又は、新たに抽出された処理対象リンクには、抽出の基点となった処理済リンクの情報を記憶しておいてもよい。記憶された処理済リンクの情報は、記憶部32に格納されてもよい。このように、処理済リンク、又は、新たな処理対象リンクの情報に、当該リンクに到達するまでに辿ってきたリンクの情報を持たせることにより、当該リンクがどのようなリンク、すなわち、どのような経路を辿ってきたのかが格納される。
【0060】
次に、演算コア384同士の同期を行う(ステップS112)。この同期処理により、コストが0でないと判断されたスレッド(ステップS106:NO)、及び、コストが0となり、処理対象リンクの更新を実行したスレッドが同期され、次の処理を同じタイミングで行うことが可能となる。
【0061】
同期したのち、目的地に到達したリンクが存在するか否かが判断される(ステップS114)。目的地に到達したリンクが存在しない場合(ステップS114:NO)、各演算コア384においてステップS104からステップS112までの処理が繰り返される。このように、コストを-1する処理からの一連の処理を1イテレーションとして各スレッドにおいてループ処理が実行される。
【0062】
一方、目的地に到達したリンクが存在する場合(ステップS114:YES)、経路取得部304は、目的地に到達したリンクの情報を取得する(ステップS116)。
【0063】
次に、経路取得部304は、格納されたリンクの経路情報から、目的地に到達したリンクが、目的地に到達するまでに経由してきたリンクの情報を取得することが可能となる(ステップS118)。
【0064】
次に、経路取得部304は、取得した経路を出力して処理を終了する(ステップS120)。このように、複数の演算コア384においてコストの計算を各々実行し、リンク情報を格納しながらリンクを更新することにより、コストを加味した最適な経路を取得することが可能となる。
【0065】
ステップS104からステップS114の処理は、上述したように、複数の演算コア384により、すなわち、複数のスレッドにより同じタイミングで行われる。ここで、同じタイミングとは、正確に同時である必要は無く、ある程度の時間的なずれが生じていても構わない。同期処理については、1ブロック内にある複数スレッドについては、実行されるが、ブロック同士の同期が行われているか否かは問わない。
【0066】
ブロック同士について同期が行われない場合、例えば、所定の回数のステップS104からステップS114の処理が行われた後に、デバイスでの演算を中断し、いったんホストへと処理を戻すことにより、処理対象リンク全体としての同期をとるようにしてもよい。この場合、演算途中のリンクについては、記憶部32にその状態、すなわち、処理対象リンクの中断タイミングにおける残りコスト等を記憶するようにしてもよい。
【0067】
このように残りのコストを記憶しておくことにより、再度ホスト36がデバイス38における演算処理の制御を実行する際に、スレッドを再配置することが可能となる。スレッドの再配置を行うことにより、例えば、近くにある処理対象リンク同士を同じブロック内に配置することも可能となり、近くにある処理対象リンク同士について、同期を行える状態で処理を行うことが可能となる。
【0068】
探索において最適経路の他に複数の候補となる経路を出力する場合、目的地に到達するリンクについて、目的地の1つ前のノードまでの経路を再度探索するようにしてもよい。
【0069】
別の例として、ある処理対象リンクのコストが0となり、既に当該リンクの終点のノードを終点とする処理済リンクが存在する場合に、そのコストの差を計算し、所定値以内であれば当該リンクを候補リンクとして情報を格納しておくようにしてもよい。すなわち、処理済リンクにおいては、所定数のイテレーション分コストの計算を継続して行っておき、この情報を元に最適経路以外の経路候補の情報を取得するようにしてもよい。
【0070】
図4は、本実施形態に係る情報処理システム1の経路探索の様子を示す図である。○はノードを表し、中に記載されているアルファベットをノードの識別子とする。ノード間を繋ぐ線分がリンクであり、リンクの先に記載されている数値がコストを表す。例えば、
図4(a)のような経路の場合、AからBのリンクは、そのコストは2である。BからCのリンクは、コストは2であり、逆向きのCからBへのリンクは、コストが3であることをしめす。この経路において出発地Aから目的地Hまでの経路を探索する場合について説明する。以下、AからBへのリンクを、AB等と表す。この
図4においては、ノードHに到達するリンク以外の全てにコストが設定されているがこれには限られない。例えば、一方通行の道路を含むリンクである場合、コストを無限大(又は、きわめて大きい数値)にして、リンクを設定しないようにしてもよい。
【0071】
まず、出発地Aと目的地Hの情報が設定される。経路ネットワークDB 320から、Aを始点とするリンク、AB、AC、ADが抽出される。
【0072】
AB、AC、ADに関するコストの演算は、それぞれ別の演算コア384に割り当てられる。各イテレーションでは、コストが1ずつ減算される。概念的に説明すると、AからB、C、Dにそれぞれ同じタイミングで出発した仮想的な車両等が存在し、1イテレーションごとに、1のコスト分リンクを進むと言う処理で置き換えられる。
【0073】
2イテレーション後、
図4(b)に示すように、ABを進んでいた車両がBへと到達する。いっぽう、AC、ADを進んでいた車両は、それぞれのリンクを2進んだ位置に存在し、C、Dには到着していない状態である。
【0074】
ABのリンクの処理を行っていた演算コア384は、Bにおいて処理対象リンクの更新を行う。ABのリンクは、処理対象リンクから、処理済リンクへと更新される。一方で、未処理リンクBA、BC、BEが新たな処理対象リンクとして更新され、それぞれ別の演算コア384において続く処理が行われる。また、このタイミングでBに到達しているリンクは1つであるので、Bへの最適な経路として、ABが記憶される。
【0075】
続いて、1イテレーション後、ACを辿っていた車両がCへと到達し、ACが処理済リンク、CA、CB、CD、CE、CFが新たな処理対象リンクとして更新され、Cへの最適経路は、ACが記憶される。
【0076】
図4(c)は、さらに2イテレーション後の様子を示す図である。破線で示すリンクは、既に他のリンクが到達したノードに到達したリンクであり、到達したタイミングでは、到達ノードにおいて全てのリンクが処理対象リンク又は処理済リンクとなっているリンクを示す。細線の矢印は、処理済リンクを示す。
【0077】
ABを走っていた車両等は、BCのリンクを介してCに到達、及び、BEのリンク上の残りコスト1の箇所に存在する。Cのノードにおいては、ACのリンクを辿った車両が既に存在しているため、Cにおける未処理リンクは、既に存在せず、AB、BCを辿ってきたリンクは、処理対象リンクを処理済リンクとした後、新たな処理対象リンクを更新せずに、処理を終了する。BからBAを辿ったリンクは、Aに到達するが、Aにおけるリンクも同様に全てが処理済リンクとなっているため、処理を終了する。
【0078】
ACのリンクを辿っていた車両等は、まず、初期状態から3イテレーション後にCに到達する。そこから2イテレーションが経過し、CA、CBのリンクは、それぞれ残りコストが1の箇所、CFのリンクは、残りコストが2の箇所まで進行する。CEのリンクを進んでいた車両等は、Eに到達し、この時点でEに到達している車両等が存在しないため、Eに到達するリンクとして、AC、CEを辿るリンクが記憶される。そして、CEのリンクを処理済リンクとし、EB、EHのリンクを新たな処理対象リンクとして更新する。
【0079】
CDのリンクを進行していた車両等は、Dに到着後、Dにおいて処理済リンクに更新され、さらに、DA、DC、DF、DGが新たな処理対象リンクとして更新される。また、Dに到達する最適な経路として、AC、CDを辿る経路が記憶される。経路更新後、1イテレーションの演算がされているため、各リンクを進行する車両は、Dから1コスト分遠ざかった位置に存在する。
【0080】
このような処理が、目的地Hに到達するリンクが発生するまで繰り返し行われる。
図4(a)のような経路ネットワークの場合、上記の処理を繰り返すことにより、AC、CE、EHのリンクを辿る経路が最適経路として取得され、出力される。
【0081】
デバイス38からホスト36への出力、及び、サーバ3から端末装置2への出力は、リンク情報であってもよいが、端末装置2からユーザへの出力は、これらのリンク情報を、例えば、地図上の経路情報へと変換して出力してもよい。ユーザは、例えば、ディスプレイに出力された地図上の情報から最適経路を取得することが可能となる。
【0082】
このように、並列にコストの処理を行い、リンクを未処理リンク、処理対象リンク及び処理済リンクへと変更することにより、演算を行う上でボトルネックとなりがちな重い処理であるソートの処理を省くことが可能となる。すなわち、並列処理を行わないダイクストラ法のように各処理対象リンクのコストのソートを行い、いずれの処理対象リンクが最適経路を構成するかを探索するのではなく、1イテレーションごとにコストを並列演算によりデクリメントすることで、同じタイミングでの各経路における車の位置をシミュレートすることが可能となり比較的重い処理となるソート処理を省略することが可能となる。なお、上述しにおいてはデクリメントにより処理を行ったが、イテレーションごとにインクリメントされるパラメータを備え、当該パラメータと、リンクのコストとを比較するようにしても同じ効果を得ることが可能である。すなわち、デクリメントで処理を行ってもよいし、インクリメントで処理を行ってもよい。
【0083】
次に、メモリ管理について説明する。
図5は、
図4における経路の場合の処理対象リンクの情報のメモリ配置を概念的に示す図である。上述したように、本実施形態において、処理対象リンク記憶部322として、リングバッファを用いてもよい。
【0084】
初期状態において、
図5(a)にしめすように、リングバッファには、何も記録されていない、又は、どのような数値が記録されていてもよい。
【0085】
出発地がAと決まり、処理対象リンクの初期値がAB、AC、ADであると抽出されると、
図5(b)に示すように、AB、AC、AD用のバッファが割り当てられる。なお、説明のためにリンクは記号を用いて示しているが、これらのリンクはユニークに割り当てられたIDを有してもよく、当該IDを用いて管理するようにしてもよい。これは、経路ネットワークDB 320においても同様である。この際、それぞれのタイミングにおいて、どのバッファまでが用いられているかを併せて記憶しておく。例えば、
図5(b)に示す矢印の位置のアドレスを共有して記憶するようにする。
【0086】
1イテレーション後の同期後には、
図5(c)に示すように各バッファに記憶されている数値が1ずつ減少される。各数値の減算処理は、それぞれのリンクの処理を行う演算コア384により実行される。
【0087】
さらに1イテレーション後の同期後には、
図5(d)に示すようにバッファが使用される。ADに続くバッファに、BA、BC、BDの値が格納され、矢印は、BDのバッファの後ろ側のアドレスを示す。なお、Bから派生したリンクは、図のようにBA、BC、BDの順番に割り当てられている必要は無く、メモリの取得処理の早かったスレッドの順番に割り当てられてもよい。複数のスレッドが重複したアドレスを取得しないように、アトミックアクセス、すなわち、アトミック処理によるメモリ領域の確保をしてもよい。
【0088】
次の1イテレーション後の同期後には、
図5(e)に示すようにバッファが使用される。この際、ABに関する数値が0のままであるが、これには限られず、-1となるように処理してもよい。処理済リンクとしてスレッドを破棄し、又は、破棄後さらに新たな処理対象リンクのためのスレッドとして使用する場合は、
図5(e)にしめすように、ABのコストは0のままとなる。
【0089】
最後のバッファまで到達した際には、ABのバッファから順に再利用される。次の1イテレーション後には、BCについてのバッファが、AD、BAについてのバッファよりも先に0となるが、このような場合においても、次の周回のバッファの取得においては、先頭から順番にバッファを確保する。なお、上述したようにデクリメントでは無く、インクリメントで処理をしてもよい。インクリメントの場合、例えば、コストをマイナス値で表し、インクリメントして0になるタイミングで処理済リンクとするようにしてもよいし、上述したようにパラメータを用意し、インクリメントされた値とリンクのコスト値とを比較するようにしてもよい。
【0090】
このように、バッファを処理することにより、バッファの再利用を、スレッド内でのメモリの演算等において複雑な処理を行うことなく、効率よく行うことが可能となる。リングバッファの容量を、処理対象となるリンクの最大値よりも大きくとる、すなわち、現在までに処理対象となったリンク数から、処理済となったリンク数を引いた数よりも十分大きくとることにより、リングバッファにおいて、使用中のリンクとかぶることなく次の処理対象リンクのバッファを割り当てることが可能となる。
【0091】
処理対象リンクをリングバッファに格納できるようにするために、処理対象リンクとなるリンクの制限を加える、所謂枝切りをしてもよい。
【0092】
枝切りの第1例として、目的地と反対側のリンクに関して処理対象リンクとして更新する制限を加えてもよい。例えば、出発地から目的地までの方向及び距離を取得した後、出発地から目的地までの方向と、出発地から見て逆方向に進むリンクについては、出発地から目的地までの距離の1/10以上離れた場合には、処理対象リンクとして抽出しないようにしてもよい。一例として、大阪から東京まで向かう経路を取得する場合、大阪から東京方面と逆方向に60kmを超えてしまうようなリンクを処理対象リンクとして取得しないようにする。
【0093】
なお、割合ではなく、所定の距離、例えば、20km等としてもよい。この場合、大阪から東京都は逆方向に20kmを超えるようなリンクは、処理対象リンクとしないようにする。
【0094】
この枝切りは、出発地と目的地までの距離に基づいて行わないようにしてもよい。例えば、出発地と目的地の距離が10kmである場合に、1km逆走しても早く到着する場合がある。このような場合に処理対象リンクの制限をしない場合に、例えば、出発地と目的地の距離が20km程である場合には、距離に基づいた枝切りをしないように設定してもよい。この他、所定の距離までは、固定の距離を超えると枝切りをするが、当該所定の距離を超えた場合には、割合に基づいた枝切りをするようにしてもよい。
【0095】
枝切りの第2例として、リンクを道の広さに基づいて分類し、出発地及び目的地の付近以外では、例えば、両側1車線ずつも無いような道路(以下、未保証道とよぶ)を除外するように処理対象リンクとするようにしてもよい。未保証道は、両側1車線ずつ無いような道路には限られず、例えば、住宅街を通る道路、又は、道の広さが5m以下等、別の指標を用いてもよい。このように未保証道を設定することにより、出発地及び目的地の付近、例えば、出発地及び目的地のそれぞれ1kmの範囲外においては、未保証道を処理対象リンクから外すようにリンクの抽出を行ってもよい。
【0096】
枝切りの第3例として、リンクの存在する領域を、例えば、都市部、郊外部として分割し、都市部、郊外部で別の指標を用いてリンクの拡散をするようにしてもよい。例えば、都市部においては未保証道も処理対象リンクとして抽出するが、郊外部においては、未保証道は処理対象リンクとして抽出しないようにしてもよい。
【0097】
枝切りの第4例として、現在処理対象リンクの保存領域として用いているバッファ数が所定の数を超えるような場合に、上述した第1例から第3例のような制限を加えるようにしてもよい。
【0098】
これらのように、リングバッファの容量を十分大きくとることに加え、処理対象リンクとして抽出されるリンクに制限を加えるようにしてもよい。
【0099】
もっとも、リングバッファを用いることなく、メモリにおいてメモリの使用状況を、例えば、処理済リンクとなったリンクに関するメモリにコストとして使用しない数値(例えば、2147483647)の値を代入する等して、空きメモリであることを管理するテーブルを記憶部32に備えておき、当該テーブルを参照することにより、あいているアドレスに処理対象リンクを記憶するようにしてもよい。
【0100】
以上のように、本実施形態に係る情報処理システム1は、マルチコアプロセッサを備えるアクセラレータ、例えば、GPGPUを用いるGPUにおいて、並列演算を行うことにより、経路探索の時間を逐次処理を行った場合と比較して大きく減少することを可能とする。この実施形態のように、マルチコアプロセッサを用いることによる並列演算を行えるようにすることにより、サーバにおける処理を軽くするとともに、複数のユーザからの処理を高速に対処することが可能となる。
【0101】
なお、上述した実施形態においては、コストが0になるごとに処理対象リンクを抽出するようにしたが、それには限られない。例えば、現在の処理対象リンクのコストが0になるまで演算処理を行い、まとめて次の処理対象リンクを抽出するようにしてもよい。この際、処理済リンクとして更新する処理対象リンクの情報に基づいて、新たな処理対象リンクに最適な経路を記憶させ、目的地までの最適経路を取得するようにしてもよい。このようにコストではなくリンクで処理を行うと、リンクの拡散ごとにスレッドを管理することが可能となるため、前述した実施形態と比較して、リンクの管理をより簡易なものへと変更することが可能となる。
【0102】
上述した実施形態で説明した情報処理システムの少なくとも一部は、ハードウェアで構成してもよいし、ソフトウェアで構成してもよい。ソフトウェアで構成する場合には、情報処理システムの少なくとも一部の機能を実現するプログラムをフレキシブルディスクやCD-ROM等の記録媒体に収納し、コンピュータに読み込ませて実行させてもよい。記録媒体は、磁気ディスクや光ディスク等着脱可能なものに限定されず、ハードディスク装置やメモリなど固定型の記録媒体でもよい。
【0103】
また、情報処理システムの少なくとも一部の機能を実現するプログラムを、インターネット等の通信回線(無線通信も含む)を介して頒布してもよい。さらに、同プログラムを暗号化したり、変調を掛けたり、圧縮した状態で、インターネット等の有線回線や無線回線を介して、或いは記録媒体に収納して頒布してもよい。
【0104】
さらに、1つ又は複数の情報処理装置によって情報処理システムを機能させてもよい。複数の情報処理装置を用いる場合、情報処理装置のうち1つをコンピュータとし、当該コンピュータが所定のプログラムを実行することにより情報処理システムの少なくとも1つの手段として機能が実現されてもよい。
【0105】
上記の記載に基づいて、当業者であれば、本発明の追加や効果や種々の変形を想到できるかもしれないが、本発明の態様は、上述した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲で種々の追加、変更及び部分的削除が可能である。
【0106】
例えば、上記において、経路探索の範囲を出発地、目的地としているが、これには限られるものではない。例えば、出発地及び目的地までの間に存在する第1地点及び第2地点の経路の探索を上記の実施形態のように求めてもよい。具体的には、出発地、目的地には限られず、任意の第1地点から第2地点までの経路の探索を上記の実施形態のように求めるようにしてもよい。このようにすることにより、区間的に詳細な経路探索を行うことも可能である。すなわち、上述した説明において、出発地を任意の第1地点と、目的地を任意の第2地点と置き換えて実現することも可能である。
【0107】
さらに、上記においては、サーバ側のGPUで経路探索を行うものとしたが、これには限られない。すなわち、端末装置2にGPUが搭載されており、この端末装置2のGPUを用いて経路探索をするようにしてもよい。このような構成である場合、経路探索を行うタイミングにおいてサーバ3及びネットワーク4は、必須の構成ではなく、
図1に示すサーバ3の構成要素のうち経路探索に必要なものが、端末装置2に備えられる構成であってもよい。
【符号の説明】
【0108】
1 情報処理システム
2 端末装置
3 サーバ
30 制御部
300 処理対象リンク抽出部
302 コスト演算部
304 経路取得部
32 記憶部
320 経路ネットワークDB
322 処理対象リンク記憶部
34 通信部
36 ホスト
360 CPU
362 ホストメモリ
38 デバイス
380 演算部
382 デバイスメモリ
384 演算コア