(57)【要約】【課題】情報処理装置に、複数のスレッドを生成するマルチスレッドによる並列処理において動的に複数のプロセッサに処理を行わせるに際して、より効率的に並列処理を行わせる。【解決手段】情報処理装置は、複数種類のプロセッサと、基本モジュールの処理を優先的に割り当てる前記プロセッサが予め指定されている場合に、前記指定に基づいて実際に前記基本モジュールを割り当てるプロセッサを順次特定する処理割当手段と、を備える。【選択図】図１
2012252413.tif 000002
【特許請求の範囲】
【請求項１】
複数種類のプロセッサと、
基本モジュールの処理を優先的に割り当てる前記プロセッサの種類が予め指定可能とされ、前記指定がなされている場合に、前記指定に基づいて実際に前記基本モジュールを割り当てるプロセッサを順次特定する処理割当手段と、
を備えた情報処理装置。
【請求項２】
前記処理割当手段は、前記基本モジュール同士の並列処理の関係及び前記指定に基づいて、前記基本モジュールを割り当てるプロセッサを順次特定する、
請求項１記載の情報処理装置。
【請求項３】
前記基本モジュール同士の並列処理の関係及び前記指定は、予め設定された並列実行制御情報として前記処理割当手段に提供される、
請求項２記載の情報処理装置。
【請求項４】
前記処理割当手段は、同一種類の前記プロセッサが複数設けられている場合には、基本モジュールの処理を行っていない前記同一種類のプロセッサのうち、いずれかに新たな基本モジュールを割り当てる、
請求項１乃至請求項３のいずれかに記載の情報処理装置。
【請求項５】
前記処理割当手段は、割り当て対象の基本モジュールを優先的に割り当てるべき種類のプロセッサが全て処理を実行している場合に、基本モジュールの割当がなされていない他の種類のプロセッサに当該割り当て対象の基本モジュールを割り当てる、
請求項１乃至請求項４のいずれかに記載の情報処理装置。
【請求項６】
前記処理割当手段は、基本モジュールの割当がなされていない他の種類のプロセッサが存在し、当該他の種類のプロセッサに前記割り当て対象の基本モジュールを割り当てた方が、割り当てない場合と比較してトータルの処理コストが低下すると判別した場合に、当該他の種類のプロセッサに当該割り当て対象の基本モジュールを割り当てる、
請求項５記載の情報処理装置。
【請求項７】
前記基本モジュールは、入力データが確定した時点でそれぞれ実行が可能となる、
請求項１乃至請求項６のいずれかに記載の情報処理装置。
【請求項８】
複数種類のプロセッサを備えた情報処理装置において実行される情報処理方法において、
基本モジュールの処理を優先的に割り当てる前記プロセッサの種類が予め指定された並列実行制御情報を取得する過程と、
前記取得下並列実行制御情報に基づいて実際に前記基本モジュールを割り当てるプロセッサを順次特定し、割り当てを行う過程と、
を備えた情報処理方法。
【請求項９】
複数種類のプロセッサを備えた情報処理装置をコンピュータにより制御するための制御プログラムにおいて、
前記コンピュータを、
基本モジュールの処理を優先的に割り当てる前記プロセッサの種類が予め指定された並列実行制御情報を取得する手段と、
前記取得下並列実行制御情報に基づいて実際に前記基本モジュールを割り当てるプロセッサを順次特定し、割り当てを行う手段と、
して機能させる制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置、情報処理方法及び制御プログラムに関する。
【背景技術】
【０００２】
従来のマルチスレッドによる並列プログラムは、複数のスレッドを生成し、生成されたスレッドのそれぞれが、実行順序を適切に保つために同期処理を行う方法を採用していた。
これにより、データの依存関係を保ちながら、各スレッド動作の並列性を確保していた。
しかし、この方法では、同期処理をプログラムのさまざまな場所に埋め込まなければならず、プログラムのデバッグやメンテナンスのコストの増大の要因となっていた。
【０００３】
また、どのスレッドで、どの処理を動かすかや、どのデータ部分を受け持つか、といったスレッドの主体を意識したプログラミングとなるので、プロセッサ数が、２個、４個、８個、…と多くなる場合に、十分な並列性を享受するためには、プログラムの構成を見直したり、並列制御を再設計したりしなければならなかった。
【０００４】
この方法に対して、処理のリクエスト（ワークアイテム）に対して、スレッドを実行するという方法を採ることで、ある程度は、プロセッサ数に対するスケーラビリティや、並列実行指定や同期部分の切り離しを行うことが可能となる。この方法では、スレッドは、必要な数だけ生成してプールしておき、リクエストキューにたまったワークアイテムを、各スレッドが順次取り出して実行していく。この方法は、リクエストの生成方法の自由度が高く複雑になるためデバッグの難易度が高いことや、処理の順序がＦＩＦＯのキューの実装に依存するため、十分な並列度を得られないなどの問題があった。また、各ワークアイテムの処理において、同期処理や排他処理を行うことを妨げないものであった。
【０００５】
従来のマルチスレッドによる並列処理プログラムは複数のスレッドを生成し、そのそれぞれが同期処理を意識したプログラミングを強いられていた。たとえば実行順序を適切に保つためにはプログラムのさまざまな場所に同期を保証する処理をちりばめる必要があり、プログラムのデバッグが困難になるなどメンテナンスコストを押し上げていた。
【０００６】
特許文献１記載の技術は、複数のスレッドを生成したとき、そのスレッドの実行結果とスレッド間の依存関係に基づいて並列処理を実現する方法を開示している。この方法ではあらかじめ重複して実行されるスレッドを定量的に特定しておく必要が生じ、このことからプログラム変更の柔軟性に欠けるという問題がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−２５８９２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、並列処理されるプログラム同士が実行順序を適切に保ちながら処理するには、プログラム間あるいはスレッド間であらかじめ依存関係を固定的に決定しておく必要がある。
【０００９】
本発明は上記問題に鑑みてなされたもので、マルチスレッドによる並列処理において動的に複数のプロセッサに処理を行わせるに際して、より効率的に並列処理を行わせることができ、処理効率の向上を図ることが可能な情報処理装置、情報処理方法及び制御プログラムを提供する。
【課題を解決するための手段】
【００１０】
実施形態の情報処理装置は、複数種類のプロセッサを備える。
そして、処理割当手段は、基本モジュールの処理を優先的に割り当てる前記プロセッサの種類が予め指定可能とされ、指定がなされている場合に、指定に基づいて実際に基本モジュールを割り当てるプロセッサを順次特定する。
【図面の簡単な説明】
【００１１】
【図１】図１は、第１実施形態に係る情報処理装置の概要構成の一例を示す図である。
【図２】図２は、第１実施形態の機能ブロック図である。
【図３】図３は、本第１実施形態に係る基本モジュールの依存関係の一例を説明する図である。
【図４】図４は、第１実施形態に係るノードの一例を説明する図である。
【図５】図５は、ノードの実行可能キューへのキューイングの説明図である。
【図６】図６は、本実施形態に係るノードのバイトコード記述（グラフデータ構造生成記述）の一例を示す図である。
【図７】図７は、第１実施形態の並列制御記述の一例の説明図である。
【図８】図８は、現フレームにおける動きベクトルの説明図である。
【図９】図９は、前フレームにおける動きベクトルの説明図である。
【図１０】図１０は、第２実施形態に係る情報処理装置の概要構成の一例を示す図である。
【図１１】図１１は、実行デバイスのキューの概念説明図である。
【図１２】図１２は、第２実施形態の動作の一例を説明するための図である。
【図１３】図１３は、第２実施形態の処理フローチャートである。
【発明を実施するための形態】
【００１２】
［１］第１実施形態
図１は、第１実施形態に係る情報処理装置の概要構成の一例を示す図である。
情報処理装置１００は、図１に示すように、複数種類に区分される複数のプロセッサ１０１Ａ、１０１Ｂと、各種データを記憶するメモリ部１０２と、外部記憶装置として機能するＨＤＤ１０３と、各種データを各部間で転送するための内部バス１０４と、各種情報を表示するための画像表示装置１０５と、各種データを入力するためのキーボードなどの入出力装置１０６と、を備えている。なお、情報処理装置１００の態様としては、画像表示装置１０５及び入出力装置１０６は、備えていない態様も考えられる。
【００１３】
プロセッサ１０１Ａは、いわゆる汎用プロセッサであり、比較的高度な分岐予測や機能豊富な演算器を用いることにより、複雑な処理を高速に実行することが可能なプロセッサである。例えば、ＣＰＵ（Central Processing Unit）がこの種のプロセッサに相当する。
一方、プロセッサ１０１Ｂは、大量のデータに対して比較的単純な演算処理（例えば、行列演算等）を高速に実行することが可能なプロセッサである。例えば、ＧＰＵ（Graphic Processing Unit）や、ＤＳＰ（Digital Signal Processor）がこの種 のプロセッサに相当する。
メモリ部１０２は、各種データを不揮発的に記憶するＲＯＭ１０２Ａと、各種データを一時的に記憶し、ワーキングエリアを構成するＲＡＭ１０２Ｂと、各種データを更新可能かつ不揮発的に記憶するフラッシュＲＯＭ１０２Ｃと、を備えている。
【００１４】
ＨＤＤ１０３は、比較的大容量のデータを記憶する。したがって、プロセッサ１０１Ａ、１０１Ｂが処理するプログラムコードはＨＤＤ１０３に記憶しておき、処理する部分のみをメモリ部１０２（特にＲＡＭ１０２Ｂ）に展開して、実行するように構成される。
【００１５】
図２は、第１実施形態の機能ブロック図である。
情報処理装置１００で実行される並列プログラム１１０は、大別すると、基本モジュール１１１と、並列実行制御記述１１２と、を含んでいる。
ここで、基本モジュール１１１は、情報処理装置１００で実行されるモジュール化されたプログラムである。
また、並列実行制御記述１１２は、基本モジュール１１１を実行する際に参照されるデータである。すなわち、並列実行制御記述１１２は、基本モジュール１１１のそれぞれについて並列処理時の依存関係についての記述がなされており、情報処理装置１００で実行される前にトランスレータ１１３によってプラットホームに依存しないバイトコード記述１１４にコンパイルされる。
【００１６】
このため、バイトコード記述１１４は、基本モジュール１１１同士の依存関係を表すものとなっている。具体的には、バイトコード記述１１４は、ある実行対象の基本モジュール１１１（以下、便宜上この注目している基本モジュールを基本モジュール１１１Ｘと表す）を想定した場合に、当該基本モジュール１１１Ｘの実行に必要な処理結果を出力する先行して実行される一又は複数の基本モジュール１１１及び当該基本モジュール１１１Ｘの実行結果を利用する後続の一又は複数の基本モジュール１１１と、当該基本モジュール１１１Ｘと、の関係を記述している。
【００１７】
情報処理装置１００上の非対称マルチプロセッサ上で実行されるソフトウェアは、基本モジュール１１１、バイトコード記述１１４、ランタイムライブラリ１１５、マルチスレッドライブラリ１１６及びオペレーティングシステム１１７を含んでいる。
ランタイムライブラリ１１５は、基本モジュール１１１を情報処理装置１００上で実行する際のＡＰＩ（Application Interface）などを含み、また基本モジュール１１１を並列処理する際に必要となる排他制御を実現する。
【００１８】
マルチスレッドライブラリ１１６は、基本モジュール１１１をマルチスレッドで実行する際に用いられるランタイムライブラリであり、基本モジュール１１１をマルチスレッドで処理する際に必要となる排他制御を実現する。
一方、ランタイムライブラリ１１５あるいはマルチスレッドライブラリ１１６からトランスレータ１１３の機能を呼び出すように構成し、基本モジュール１１１の処理の過程で呼び出されるとき、次に処理する部分の並列実行制御記述１１２をその都度変換するようにしても良い。このように構成すればトランスレートするための常駐タスクが不要になり、並列処理をよりコンパクトに実現できる。
【００１９】
オペレーティングシステム１１７は、情報処理装置１００のハードウェアやタスクのスケジューリングなど、システム全体を管理している。オペレーティングシステム１１７を導入することで、基本モジュール１１１を実行する際、プログラマはシステムの雑多な管理から解放されプログラミングに専念できるとともに、一般的に多機種でも稼動可能なソフトウェアを容易に記述することができるというメリットがある。
【００２０】
本実施形態に係る情報処理装置１００では、同期処理やデータの授受の必要な部分で分割し、その間の関連を並列実行制御記述として定義することで基本モジュール１１１の部品化を促進し、並列実行制御記述１１２をコンパクトに管理するようにしている。
【００２１】
図３は、本第１実施形態に係る基本モジュールの依存関係の一例を説明する図である。
一連の処理を行う複数の基本モジュール１１１は、それぞれノードＮ１〜Ｎ８として表現されており、ノードＮ１〜Ｎ８のそれぞれは、処理開始条件が満たされれば、他のノードに対応する基本モジュールの動作状態に関係なく処理を進めることが可能となっている。図５においては、各ノードＮ１〜Ｎ８は、上から下に向かって一方向に処理を行うものとする。
【００２２】
各ノードＮ１〜Ｎ８に接続されているリンクＬ１〜Ｌ１１は、各ノードと他のノードとの依存関係を表しており、入力側（図５では、上側）にリンクがあるノード、例えば、ノードＮ３は、入力側のノードＮ１の処理が完了するまでは、処理開始条件が満たされることはなく、処理を進めることができないようになっている。同様にノードＮ５のように入力側に複数のノードＮ２、Ｎ３がリンクＬ４、Ｌ５により接続されている場合、これらの複数のリンクＬ４、Ｌ５に対応するノードＮ２、Ｎ３の全てにおいて、処理が完了するまでは、処理開始条件が満たされることはなく、待機状態となっている。
【００２３】
図４は、第１実施形態に係るノードの一例を説明する図である。
上述したように、ノードＮｘ（本実施形態では、ｘ＝１〜８）は、個々の基本モジュール１１１に対応しており、並列実行制御記述１１２をトランスレータ１１３によりバイトコード記述１１４に変換後、このバイトコード記述１１４に基づいて基本モジュール１１１をグラフデータ構造化したものである。
【００２４】
上述したように基本モジュール１１１をグラフデータ構造化したノードＮｘは、リンクＬｙ（本実施形態では、ｙ＝１〜１１）により他のノードと依存関係を有している。
図４のように基本モジュール１１１をノードＮｘとしてみたとき、リンクＬｙとしては、先行ノードへのｎ個のリンクＬａ１〜Ｌａｎと、後続ノードへの結合子ｃｔを有するｍ個のリンクＬｂ１〜Ｌｂｍと、の２種類のリンクが存在する。
【００２５】
リンクＬａ１〜Ｌａｎは、ノードＮｘが所定の処理を実行するのに必要なデータを得るために必要な他のノードの出力端に結合されるリンクである。リンクＬａ１〜Ｌａｎのそれぞれは、どのような出力端を有するノードとのリンクが必要かなどの定義情報を持っている。
【００２６】
リンクＬｂ１〜Ｌｂｍの各結合子ｃｔは、ノードＮｘの処理後に出力するデータがいかなるものであるかを示す識別情報を備えている。後続のノードは、このリンクＬｂ１〜Ｌｂｍの各結合子ｃｔの識別情報と並列実行制御記述１１２とに基づいて自身が実行可能な条件がそろったか否かを判別することができる。
【００２７】
図５は、ノードの実行可能キューへのキューイングの説明図である。
ノードＮｘはシステムにより実行可能な条件がそろったとみなされると、図５に示すようにノードの単位で実行可能キュー１２０にキューイングされ、実行可能キュー１２０にキューされたノードの中から次に実行すべきノードが取り出されて処理される。
【００２８】
図６は、本実施形態に係るノードのバイトコード記述（グラフデータ構造生成記述）の一例を示す図である。
図６においては、並列実行制御記述１１２に基づいて、トランスレータ１１３がコンパイルしたバイトコード記述１１４が示されている。
バイトコード記述１１４に含まれる情報としては、基本モジュールＩＤ、先行ノードへの複数のリンク情報、当該ノードの出力バッファの種別、及び当該ノードの処理コスト等が挙げられる。
ここでいう処理コストは、当該ノードに対応する基本モジュール１１１の処理に要する処理時間等を示している。この処理コストについての情報は実行可能キューにキューイングされたノードのうち、次に取り出すノードを選択する際に考慮される。
【００２９】
先行ノードＮｂへのリンク情報には、当該ノードＮｘの先行ノードＮｂとなるべきノードの条件が定義されている。たとえば所定のデータタイプを出力するノード、特定のＩＤを持つノードなどの定義が挙げられる。
【００３０】
このバイトコード記述１１４は、対応する基本モジュール１１１をノードとして表現するとともに、リンク情報などに基づいて図５に示すような既存のグラフデータ構造にこの基本モジュール１１１を追加するための情報として用いる。
【００３１】
次に第１実施形態の動作例を説明する。
以下の説明においては、前フレーム及び現フレームの２つの映像フレームから注目画素の動きベクトルを求める一般的な処理手順について説明する。
図７は、第１実施形態の並列制御記述の一例の説明図である。
図８は、現フレームにおける動きベクトルの説明図である。
図９は、前フレームにおける動きベクトルの説明図である。
まず、データ処理を行うための配列領域を確保する（ステップＳ１、Ｓ２）。
図７の例の場合、画面の解像度は、７２０×４８０ドットであり、前フレームの画素データを格納する配列mv_previousと、現フレームの画素データを格納する配列mv_currentと、の二つの配列領域（それぞれ７２０×４８０画素分）が確保されている。
【００３２】
次にこれらの配列領域に格納された画素データに基づいて、注目画素の動きベクトルを算出する（ステップＳ３）。
まず最初に空間方向の動きベクトルを探索する（ステップＳ４）。
すなわち、空間方向の動きベクトルmv_spaceは、座標(i,j)の注目画素Ｐ１に対して、上に隣接し、座標(i,j-1)に位置する画素Ｐ１１の現フレームの動きベクトルmv_current[i,j-1]と、座標(i,j)の注目画素に対して左に隣接し、座標(i-1,j)に位置する画素Ｐ１２の現フレームの動きベクトルmv_current[i-1,j]と、をパラメータとして、探索中心点の探索関数mv_searchの値を求める。
【００３３】
この場合において、注目画素に隣接する画素（本実施形態では、注目画素Ｐ１の上の画素Ｐ１１及び左の画素Ｐ１２）に同一フレーム内で処理に依存関係があるため逐次処理しかできない。このため、様々な条件分岐を伴うため、プロセッサとしては、汎用プロセッサ１０１Ａに演算を行わせるのに適した処理となっている。したがって、並列実行制御記述１１２においては、当該処理を汎用プロセッサ１０１Ａに行わせる旨の記述<TYPE_CPU>がなされている。この結果、オペレーティングシステム１１７は、当該処理をプロセッサに行わせるに際して、汎用プロセッサ１０１Ａに処理を優先的に割り当てることとなる。
【００３４】
続いて時間方向の動きベクトルを探索する（ステップＳ５）。
すなわち、時間方向の動きベクトルmv_timeは、座標(i,j)の注目画素Ｐ１に対して、下に隣接し、座標(i,j+1)に位置する画素Ｐ２１の前フレームにおける動きベクトルmv_previous(i,j+1)と、座標(i,j)の注目画素Ｐ１に対して、右に隣接し、座標(i+1,j)に位置する画素Ｐ２２の前フレームにおける動きベクトルmv_previous(i+1,j)と、座標(i,j)の注目画素の前フレームにおける動きベクトルmv_previous(i,j)と、をパラメータとして、探索中心点の探索関数mv_searchの値を求める。
【００３５】
次に、得られた空間方向の動きベクトルmv_space及び時間方向の動きベクトルmv_timeをパラメータとして探索中心点の探索関数mv_searchの値を求めて、現フレームの注目画素の動きベクトルmv_current[i,j]を算出する（ステップＳ６）。
この場合においても、この演算は、様々な条件分岐を伴うと考えられるため、プロセッサとしては、汎用プロセッサ１０１Ａに演算を行わせるのに適した処理となる。したがって、並列実行制御記述１１２においては、当該処理を汎用プロセッサに行わせる旨の記述<TYPE_CPU>がなされている。この結果、オペレーティングシステムは、当該処理をプロセッサに行わせるに際して、汎用プロセッサ１０１Ａに処理を優先的に割り当てることとなる。
【００３６】
続いて、算出した現フレームを構成する全ての画素の動きベクトルの値を、前フレームの動きベクトルとして格納し（ステップＳ７）、処理を終了する（ステップＳ８）。
以上の説明のように、本第１実施形態によれば、並列実行制御記述１１２において、処理を実際に行わせるプロセッサを予め指定することが可能であるので、基本モジュール１１１の実行を行うプロセッサ（デバイス）を指定できるので、動的に複数のプロセッサに基本モジュール１１１の処理を行わせるに際して、より効率的に並列処理を行わせることができ、処理効率の向上を図ることが可能となる。
【００３７】
［２］第２実施形態
本第２実施形態は、タスクの実行特性を指定し、プロセッサ（デバイス）の実行特性に応じてランタイムがタスク割り当てを決定する場合の実施形態である。
以下においては、複数のＣＰＵ、複数のＧＰＵ及び複数のＤＳＰ（Digital Signal Processor）を有する情報処理装置を例として説明する。
【００３８】
図１０は、第２実施形態に係る情報処理装置の概要構成の一例を示す図である。
図１０において、図１と同様の部分には、同一の符号を付すものとする。
情報処理装置１００Ａは、図１０に示すように、複数（図１０では、３個）のＣＰＵ１０１Ａと、複数（図１０では、３個）のＧＰＵ１０１Ｂと、複数（図１０では、３個）のＤＳＰ１０１Ｃと、各種データを記憶するメモリ部１０２と、外部記憶装置として機能するＨＤＤ１０３と、各種データを各部間で転送するための内部バス１０４と、各種情報を表示するための画像表示装置１０５と、各種データを入力するためのキーボードなどの入出力装置１０６と、を備えている。なお、情報処理装置１００Ａの態様としては、画像表示装置１０５及び入出力装置１０６は、備えていない態様も考えられる。
一般的に、ＣＰＵ１０１Ａは、計算主体の直列変算が得意であり、ＧＰＵ１０１Ｂ及びＤＳＰ１０１Ｃは、並列演算が得意である。
【００３９】
図１１は、実行デバイスのキューの概念説明図である。
そこで、本第２実施形態においては、図１１に示すように、各プロセッサ１０１Ａ〜１０１Ｃを実行デバイスのキュー１３０に振り分けるに際し、並列実行デバイスのキュー１３１には、並列実行デバイスであるＧＰＵ１０１Ｂ及びＤＳＰ１０１Ｃを振り分け、直列実行デバイスのキュー１３２には、ＣＰＵ１０１Ａを振り分けている。
図１２は、第２実施形態の動作の一例を説明するための図である。
本動作例では、第１実施形態と同様に、前フレーム及び現フレームの２つの映像フレームから注目画素Ｐ１の動きベクトルを求める一般的な処理手順を示している。
【００４０】
まず、データ処理を行うための配列領域を確保する（ステップＳ１１、Ｓ１２）。図１２の例の場合、画面の解像度は、７２０×４８０ドットであり、前フレームの画素データを格納する配列mv_previousと、現フレームの画素データを格納する配列mv_currentと、の二つの配列領域（それぞれ７２０×４８０画素分）が確保されている。
【００４１】
次にこれらの配列領域に格納された画素データに基づいて、注目画素の動きベクトルを算出する（ステップＳ１３）。
まず最初に実行環境のプラットフォームにどのようなデバイスがあるのかを確認する（ステップＳ１４）。
具体的には、デバイス検出関数check_platform_env()を実行して、当該実行環境のプラットフォームに存在するデバイスの種類及び数を検出する。
例えば、図１０の例の場合には、ＣＰＵ１０１Ａが３個、ＧＰＵ１０１Ｂが３個、ＤＳＰ１０１Ｃが３個と検出される。
【００４２】
続いて、空間方向の動きベクトルを探索する（ステップＳ１５）。
上述したように、空間方向の動きベクトルmv_spaceは、注目画素に隣接する画素（本実施形態では、注目画素の左及び上の画素）に同一フレーム内で処理に依存関係があるため逐次処理、すなわち、計算主体のタスクであることを指示することとなる。
より詳細には、並列実行制御記述１１２において、当該空間方向の動きベクトルmv_spaceの算出においては、計算主体のタスクであることを指示する記述<TYPE_COMPUTE>がなされている。この結果、オペレーティングシステムは、当該処理を直列実行デバイスのキュー１３２に登録されているＣＰＵ（汎用プロセッサ）１０１Ａに処理を割り当てることとなる。
【００４３】
続いて時間方向の動きベクトルを探索する（ステップＳ１６）。
上述したように、時間方向の動きベクトルmv_timeは、前フレームで既に算出したデータを用いて演算を行うため、データ並列主体のタスクを指示することとなる。
より詳細には、並列実行制御記述１１２において、当該時間方向の動きベクトルmv_timeの算出は、データ並列主体のタスクであることを指示する記述<TYPE_MASS_PARALLEL>がなされている。この結果、オペレーティングシステムは、当該処理を並列実行デバイスのキュー１３１に登録されているＧＰＵ１０１ＢあるいはＤＳＰ１０１Ｃに処理を割り当てることとなる。
続いて、得られた空間方向の動きベクトルmv_space及び時間方向の動きベクトルmv_timeをパラメータとして探索中心点の探索関数mv_searchの値を求めて、現フレームの注目画素の動きベクトルmv_current[i,j]を算出する（ステップＳ１７）。
【００４４】
この現フレームの注目画素の動きベクトルmv_current[i,j]の算出に際しても、データ並列主体のタスクであることを指示する記述<TYPE_MASS_PARALLEL>がなされている。この結果、オペレーティングシステムは、当該処理を並列実行デバイスのキュー１３１に登録されているＧＰＵ１０１ＢあるいはＤＳＰ１０１Ｃに処理を割り当てることとなる。
【００４５】
続いて、算出した現フレームを構成する全ての画素の動きベクトルの値を、前フレームの動きベクトルとして格納し（ステップＳ１８）、処理を終了する（ステップＳ１９）。
【００４６】
図１３は、第２実施形態の処理フローチャートである。
まず、当該プラットフォームに存在するプロセッサ（デバイス）の個数（本第２実施形態では、９個）に相当する回数だけデバイスの種類を問い合わせるデバイスクエリーを実行し（ステップＳ２１）、デバイスクエリーの回答結果に基づいて、各プロセッサを実行キューに詰める（ステップＳ２２）。
次に処理対象のタスク個数に相当する回数だけ空きデバイスの確認を行い（ステップＳ２３）、空きデバイスの有無を判別する（ステップＳ２４）。
【００４７】
ステップＳ２４の判別において、空きデバイスが存在しない場合には（ステップＳ２３；無）、待機状態となる。
また、ステップＳ２４の判別において空きデバイスが存在する場合には（ステップＳ２３；有）、対応するタスクの実行に移行し（ステップＳ２５）、当該タスクのタイプを判別する（ステップＳ２６）。
【００４８】
ステップＳ２６の判別において、タスクタイプが計算主体の直列実行型のタスクである場合には（ステップＳ２６；直列）、直列実行デバイス（本実施形態では、ＣＰＵ１０１Ａ）を直列実行デバイスのキュー１３２から取得し（ステップＳ２７）、当該直列実行デバイスに当該タスクを実行させる（ステップＳ２８）。
一方、ステップＳの判別において、タスクタイプが並列実行型のタスクである場合には（ステップＳ；並列実行型）、並列実行デバイス（本実施形態では、ＧＰＵ１０１ＢあるいはＤＳＰ１０１Ｃ）を並列実行デバイスのキュー１３１から取得し（ステップＳ２９）、当該並列実行デバイスに当該タスクを実行させる（ステップＳ３０）。
【００４９】
そして、ステップＳ２１〜ステップＳ３０の処理を全てのタスクの実行が完了するまで繰り返すこととなる。
以上の説明のように、本第２実施形態によれば、実行環境のプラットフォームに存在するデバイスの種類及び数を検出し、予め並列実行制御記述において指定されたデバイス種類に相当するデバイスに処理を割り当てるので、実効的な処理効率を向上させることができ、処理コストの低減に貢献することができる。
【００５０】
本実施形態の情報処理装置で実行される制御プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フレキシブルディスク（ＦＤ）、ＣＤ−Ｒ、ＤＶＤ（Digital Versatile Disk）等のコンピュータで読み取り可能な記録媒体に記録されて提供される。
また、本実施形態の情報処理装置で実行される制御ログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。また、本実施形態の情報処理装置で実行される制御プログラムをインターネット等のネットワーク経由で提供または配布するように構成しても良い。
また、本実施形態の情報処理装置の制御プログラムを、ＲＯＭ等に予め組み込んで提供するように構成してもよい。
【００５１】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００５２】
１００…情報処理装置、１００Ａ…情報処理装置、１０１Ａ…プロセッサ（ＣＰＵ）、１０１Ｂ…プロセッサ（ＧＰＵ）、１０１Ｃ…ＤＳＰ、１０２…メモリ部、１０２Ａ…ＲＯＭ、１０２Ｂ…ＲＡＭ、１０２Ｃ…フラッシュＲＯＭ、１０３…ＨＤＤ、１０４…内部バス、１０５…画像表示装置、１０６…入出力装置、１１０…並列プログラム、１１１…基本モジュール、１１１Ｘ…基本モジュール、１１２…並列実行制御記述、１１３…トランスレータ、１１４…バイトコード記述、１１５…ランタイムライブラリ、１１６…マルチスレッドライブラリ、１１７…オペレーティングシステム、１２０…実行可能キュー、１３０…実行デバイスのキュー、１３１…並列実行デバイスのキュー、１３２…直列実行デバイスのキュー。
【図１】
2012252413.tif 000003
【図２】
2012252413.tif 000004
【図３】
2012252413.tif 000005
【図４】
2012252413.tif 000006
【図５】
2012252413.tif 000007
【図６】
2012252413.tif 000008
【図７】
2012252413.tif 000009
【図８】
2012252413.tif 000010
【図９】
2012252413.tif 000011
【図１０】
2012252413.tif 000012
【図１１】
2012252413.tif 000013
【図１２】
2012252413.tif 000014
【図１３】
2012252413.tif 000015
【手続補正書】
【提出日】平成24年6月13日(2012.6.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
並列プログラムを実行する複数種類のプロセッサと、
前記並列プログラムは、基本モジュール及び当該基本モジュールの処理を優先的に割り当てる前記プロセッサの種類を指定した並列実行制御記述を含み、当該並列実行制御記述を参照して、実際に前記基本モジュールを割り当てるプロセッサを順次特定する処理割当手段と、
を備えた情報処理装置。
【請求項２】
前記並列実行制御記述は、前記基本モジュール同士の並列処理の関係を含み、
前記処理割当手段は、前記基本モジュール同士の並列処理の関係及び前記指定に基づいて、前記基本モジュールを割り当てるプロセッサを順次特定する、
請求項１記載の情報処理装置。
【請求項３】
前記処理割当手段は、割り当て対象の基本モジュールを優先的に割り当てるべき種類のプロセッサが全て処理を実行している場合に、基本モジュールの割当がなされていない他の種類のプロセッサに当該割り当て対象の基本モジュールを割り当てる、
請求項１又は請求項２記載の情報処理装置。
【請求項４】
前記複数種類のプロセッサは、直列演算が得意な直列実行デバイスあるいは並列演算が得意な並列実行デバイスに予め分類され、
前記処理割当手段は、同一種類の実行デバイスに分類されるプロセッサが複数設けられている場合には、基本モジュールの処理を行っていない前記同一種類の実行デバイスに分類されるプロセッサのうち、いずれかに新たな基本モジュールを割り当てる、
請求項１または請求項２に記載の情報処理装置。
【請求項５】
前記直列実行デバイスに分類される基本モジュールの処理を行っていないプロセッサが登録される直列実行デバイスのキューと、
前記並列実行デバイスに分類される基本モジュールの処理を行っていないプロセッサが登録される並列実行デバイスのキューと、を備え、
前記処理割当手段は、前記いずれかのキューを参照して対応するプロセッサに順次新たな基本モジュールを割り当てる、
請求項４記載の情報処理装置。
【請求項６】
前記並列実行制御記述は、前記基本モジュールの処理コストの情報を含み、
前記処理割当手段は、前記処理コストを考慮して、次に処理すべき前記基本モジュールを選択する、
請求項１乃至請求項４のいずれかに記載の情報処理装置。
【請求項７】
前記基本モジュールは、入力データが確定した時点でそれぞれ実行が可能となる、
請求項１乃至請求項５のいずれかに記載の情報処理装置。
【請求項８】
並列プログラムを実行する複数種類のプロセッサを備えた情報処理装置において実行される情報処理方法において、
前記並列プログラムは、基本モジュール及び当該基本モジュールの処理を優先的に割り当てる前記プロセッサの種類を指定した並列実行制御記述を含み、
前記並列実行制御記述を取得する過程と、
当該並列実行制御記述を参照して、実際に前記基本モジュールを割り当てるプロセッサを順次特定し、割り当てを行う過程と、
を備えた情報処理方法。
【請求項９】
並列プログラムを実行する複数種類のプロセッサを備えた情報処理装置をコンピュータにより制御するための制御プログラムにおいて、
前記コンピュータを、
前記並列プログラムは、基本モジュール及び当該基本モジュールの処理を優先的に割り当てる前記プロセッサの種類を指定した並列実行制御記述を含み、
前記並列実行制御記述を取得する手段と、
当該並列実行制御記述を参照して、実際に前記基本モジュールを割り当てるプロセッサを順次特定し、割り当てを行う手段と、
して機能させる制御プログラム。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】００１０
【補正方法】変更
【補正の内容】
【００１０】
実施形態の情報処理装置は、並列プログラムを実行する複数種類のプロセッサを備える。
並列プログラムは、基本モジュール及び当該基本モジュールの処理を優先的に割り当てる前記プロセッサの種類を指定した並列実行制御記述を含み、処理割当手段は、当該並列実行制御記述を参照して、実際に前記基本モジュールを割り当てるプロセッサを順次特定する。