(57)【特許請求の範囲】
【請求項１】
実行性能が異なる演算コアを複数持つマルチコアプロセッサと、
前記演算コア毎に備えられ、実行可能なタスクを蓄えるタスクプールと、
新規タスクのタスクプールへの投入と、タスクプールからタスクの取得を行うタスクスケジューラと、
タスク処理結果がいくつの他タスクから参照されるかを示す数であるタスクの参照数を求める参照数解析モジュールとを備え、
前記参照数解析モジュールは、前記演算コアにおいて実行中の状態である実行中タスクから、当該実行中タスクのタイプを示すヒント情報を取得し、当該ヒント情報と同じタイプのタスクである関連タスクのうち、既に参照数が確定している前記関連タスクの参照数を、前記実行中タスクの参照数として推定し、
前記タスクスケジューラは、
前記タスクの投入において、前記参照数が予め設定された閾値を超えるタスクを、前記マルチコアプロセッサが有する第１の演算コアに対応するタスクプールへ投入し、前記参照数が前記閾値以下であるタスクを、前記マルチコアプロセッサが有し、前記第１の演算コアよりも前記実行性能が低い第２の演算コアに対応するタスクプールへ投入し、
前記タスクの取得において、前記第１の演算コアのタスクプールが空の場合、前記第１の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値を超えるタスクを取得し、当該タスクを前記第１の演算コアに割り当て、前記第２の演算コアのタスクプールが空の場合、前記第２の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値以下のタスクを取得し、当該タスクを前記第２の演算コアに割り当てる、タスク割当装置。
【請求項２】
前記タスクは、動画像符号又は復号処理をマクロブロック単位に分割したものであって、
前記参照数解析モジュールは、
前記ヒント情報として該当マクロブロックのビットストリームを取得し、また、
前記実行中タスクの参照数を推定する方法として、ビットストリームからマクロブロックタイプ、画面予測モード、フィルタパラメータなどの符号化パラメータのみをデコードする方法を取得し、
前記符号化パラメータから参照数を推定することを特徴とする請求項１に記載のタスク割当装置。
【請求項３】
実行可能なタスクを蓄えるタスクプールから取得した当該タスクの処理結果が他のいくつのタスクから参照されるかを示す数であるタスクの参照数をタスクの処理実行中に算出し、
前記参照数を基に前記タスクプールへのタスクの投入、及び、前記タスクプールからのタスクの取得を行い、
前記タスクプールは、実行性能が異なる演算コアを複数持つマルチコアプロセッサの前記演算コア毎に備えられ、
前記参照数をタスクの処理実行中に算出する処理では、前記演算コアにおいて実行中の状態である実行中タスクから、当該実行中タスクのタイプを示すヒント情報を取得し、当該ヒント情報と同じタイプのタスクである関連タスクのうち、既に参照数が確定している前記関連タスクの参照数を、前記実行中タスクの参照数として推定し、
前記タスクプールからのタスクの取得を行う処理では、
前記タスクの投入において、前記参照数が予め設定された閾値を超えるタスクを、前記マルチコアプロセッサが有する第１の演算コアに対応するタスクプールへ投入し、前記参照数が前記閾値以下であるタスクを、前記マルチコアプロセッサが有し、前記第１の演算コアよりも前記実行性能が低い第２の演算コアに対応するタスクプールへ投入し、
前記タスクの取得において、前記第１の演算コアのタスクプールが空の場合、前記第１の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値を超えるタスクを取得し、当該タスクを前記第１の演算コアに割り当て、前記第２の演算コアのタスクプールが空の場合、前記第２の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値以下のタスクを取得し、当該タスクを前記第２の演算コアに割り当てる、
ことを特徴とするタスク割当方法。
【請求項４】
前記タスクは、動画像符号又は復号処理をマクロブロック単位に分割したものであり、
前記ヒント情報は、該当マクロブロックのビットストリームであり、
前記実行中タスクの参照数を推定する方法は、ビットストリームからマクロブロックタイプ、画面予測モード、フィルタパラメータなどの符号化パラメータのみをデコードし、前記符号化パラメータから参照数を推定するものであることを特徴とする請求項３に記載のタスク割当方法。
【請求項５】
コンピュータに、
実行可能なタスクを蓄えるタスクプールから取得した当該タスクの処理結果が他のいくつのタスクから参照されるかを示す数であるタスクの参照数をタスクの処理実行中に算出する処理と、
前記参照数を基に前記タスクプールへのタスクの投入、及び、前記タスクプールからのタスクの取得を行う処理と、を実行させ、
前記タスクプールは、実行性能が異なる演算コアを複数持つマルチコアプロセッサの前記演算コア毎に備えられ、
前記参照数をタスクの処理実行中に算出する処理では、前記演算コアにおいて実行中の状態である実行中タスクから、当該実行中タスクのタイプを示すヒント情報を取得し、当該ヒント情報と同じタイプのタスクである関連タスクのうち、既に参照数が確定している前記関連タスクの参照数を、前記実行中タスクの参照数として推定し、
前記タスクプールからのタスクの取得を行う処理では、
前記タスクの投入において、前記参照数が予め設定された閾値を超えるタスクを、前記マルチコアプロセッサが有する第１の演算コアに対応するタスクプールへ投入し、前記参照数が前記閾値以下であるタスクを、前記マルチコアプロセッサが有し、前記第１の演算コアよりも前記実行性能が低い第２の演算コアに対応するタスクプールへ投入し、
前記タスクの取得において、前記第１の演算コアのタスクプールが空の場合、前記第１の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値を超えるタスクを取得し、当該タスクを前記第１の演算コアに割り当て、前記第２の演算コアのタスクプールが空の場合、前記第２の演算コアとは異なる演算コアに対応するタスクプールから、前記参照数が前記閾値以下のタスクを取得し、当該タスクを前記第２の演算コアに割り当てる、
ことを特徴とするプログラム。
【請求項６】
前記タスクは、動画像符号又は復号処理をマクロブロック単位に分割したものであり、
前記ヒント情報は、該当マクロブロックのビットストリームであり、
前記実行中タスクの参照数を推定する方法は、ビットストリームからマクロブロックタイプ、画面予測モード、フィルタパラメータなどの符号化パラメータのみをデコードし、前記符号化パラメータから参照数を推定するものであることを特徴とする請求項５に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチコアプロセッサにおけるタスク割当装置、タスク割当方法、及び、タスク割当プログラムに関する。
【背景技術】
【０００２】
組込みシステムは高機能化が進み，複数のアプリケーションの同時実行や高負荷なアプリケーションの実行が求められている。組込みシステムの中で、特に、携帯電話やＰＮＤ（Portable Navigation Device）などのモバイルデバイスでは高機能化が進み、本来の通信機能やナビゲーション機能などの単一のアプリケーションだけではなく、動画や音楽の再生など複数のアプリケーションが同時に実行することが求められている。動画再生などのマルチメディア処理は演算負荷が高く、高性能なプロセッサが必要とされている。【０００３】
そのような高負荷、複数アプリケーションを実行する高性能プロセッサとして、複数の演算コアを集積するマルチコアプロセッサが使われてきている。マルチコアプロセッサは消費電力を抑え高性能化できるため、バッテリー駆動時間や発熱が問題になるモバイルデバイスでは必須の技術である。【０００４】
マルチコアプロセッサを用い高負荷、複数アプリケーションを効率的に実行するには、アプリケーションの並列化とアプリケーション間の演算資源の配分が必要である。１つのコアでは処理できない高負荷アプリケーションは、並列化を行い複数コアで処理する必要がある。また、複数コアを有効に使うには、各アプリケーションにどのコアの演算資源をどれだけ配分するかの最適化が重要になる。実行するアプリケーション数やアプリケーションの負荷は変動するため、この演算資源配分は実行中に動的に行う必要がある。【０００５】
並列化は、一般に、並列化ライブラリを用いて行われる。並列化ライブラリには、POSIXやWindows（登録商標）などのスレッドを用いるものや、OpenMP、インテルThreading Building Blocks(TBB)などがある。POSIXやWindows（登録商標）などのスレッドライブラリは、アプリケーション処理の分割と分割処理のコアへの割り当てをプログラマが記述する。割り当ては、割り当てるコアの数を意識しプログラマが手動で行う。一方、OpenMPやTBBは、処理分割はプログラマが行うが、コアへの割り当てはライブラリが自動で実行する。このため、プログラマはコアの数を特に意識する必要はない。【０００６】
並列化ライブラリＴＢＢなどでは、アプリ処理を複数タスクに分割し分割タスクをコアに自動で割り当てるタスク並列化を行う。このタスク並列化モデルは、実行可能なタスクを溜めておくタスクプールと、タスクをコアに割り当てるスケジューラを持つ。プログラマは、アプリケーション処理を並列実行可能な複数のタスクに分割し、実行可能なタスクをタスクプールに投入するプログラムを記述する。タスクプールに投入されたタスクは、スケジューラにより自動でコアへ割り当てられる。タスクプールに溜められたタスクの数がコア数に比べ多い場合、負荷分散が容易に実現できることがタスク並列化の特徴である。【０００７】
前記タスク並列化は、割り当てるコアの数(並列度)が実行中に変更でき演算資源の動的配分を容易にする。タスク並列化のスケジューラは、タスクプール中のタスクを動的に処理可能なコアにタスクを割り当てていくため、コアの数に依らない並列化ができる。このため、並列度を実行中に容易に変更でき、当該アプリや他アプリの負荷変動に応じ演算資源の配分が動的に変更できる。【０００８】
本発明では、各コアがタスクプールを持つ並列モデルを前提とする(図１０)。このモデルでは、スケジューラ１２１はタスクプールからタスクを取得しコアに割り当てる動作と、生成されたタスクをタスクプールに投入する動作を行う。今後、これらのコアへのタスクの割当とタスクプールへのタスク投入の２つの動作をタスク割当と呼ぶ。タスク割当装置１００における演算コア１３１へのタスク割り当て動作例を図１１及び図１２を基に説明する。【０００９】
まず、図１１を基にタスクプールからタスクを取得しコアに割り当てる動作の説明をする。
スケジューラ１２１はタスクプール１１１にタスクがあるかどうか調べる（ステップ２０１）。
タスクプール１１１にタスクがある場合、スケジューラ１２１はタスクプール１１１からタスクを取得する。例えば、最初に投入されたタスクから取得するなどである（ステップ２０２）。
タスクプール１１１にタスクがない場合、スケジューラ１２１は他タスクプール１１２、…にタスクがあるか調べ、どのタスクプールにもタスクがない場合はタスク割当を終了する（ステップ２０３）。
他タスクプールにタスクがある場合、スケジューラ１２１は当該タスクプールからタスクを取得する（ステップ２０４）。
スケジューラ１２１は取得したタスクを演算コア１３１へ割り当て、処理を終了する（ステップ２０５）。【００１０】
次に、図１２を基にタスクをタスクプールに投入する動作の説明をする。タスクの生成は実行中のタスクで行われ、タスク生成後にスケジューラ１２１が呼ばれる。
スケジューラ１２１は当該新規タスクをタスクプール１１１に投入する（ステップ２１１）。
マルチコアプロセッサは、各コアが同質の処理性能を持たず性能が異なるヘテロな構成のものある。並列プログラムから見た場合のヘテロ構成として、各コアの物理的な性能が異なるもの(Asymmetric Multiple Processor：ＡＭＰ)の他に(図１３Ａ)、コア性能は同質(Symmetric Multiple Processor：ＳＭＰ)だが該当並列プログラムに割り当てられる演算性能がコア毎に異なるものがある(図１３Ｂ)。図１３Ｂのコア２は、当該プログラムに５０％の演算性能を明示的に割当てる場合や、当該コアで動作する他のプログラムの影響で結果的に５０％の演算性能しか割当てられない場合を含む。【００１１】
ヘテロ構成のマルチコアプロセッサでは、タスクのコア割当はコアの性能とタスク間の依存関係を考慮する必要がある。タスク間に処理結果を参照する依存関係があり、多くのタスクから参照されるタスクが低性能コアに割り当てられると、高性能コアが当該タスクの処理終了を待ち合わせ並列性能が低下する可能性があるためである。この他タスクから参照される数を参照数と呼び、タスク間依存関係の指標とする。【００１２】
さらに、前記参照数が実行時に決定される場合、タスク割り当ては実行時に行う必要がある。実行時の条件判定によってタスクを生成するかしないか、あるタスクの処理結果を参照するかしないかが決定されるような、タスク間に複雑な依存関係が存在する場合がある。このように依存関係が実行時にしか決まらない場合では、当該タスクの処理結果を参照する可能性があるタスク全てが生成された時点で当該タスクの参照数が確定する。【００１３】
特許文献１では、異なる性能のコアを複数持つマルチコアプロセッサにおけるタスクのコア割り当てる技術を開示している。本技術は、複数のタスクプールを持つタスク並列モデルを採用し、実行時にタスクの割当を行うことができる。タスク間の依存関係は予め設定しておき、実行時にタスク処理の演算負荷やタスク間通信コストを計算し、タスクを割り当てる。【００１４】
また、関連技術として、ヘテロジニアスマルチプロセッサシステムに関して、マクロタスクの処理時間が実行時に変動するなどの状況に応じた制御を、実行時にタスクの割り当てを行うことで実現する技術が提案されている（例えば、特許文献２参照）。【００１５】
また、関連技術として、参照数に基づいてスケジューリングする技術が提案されているが、その参照数を利用する目的は参照数が多いタスクを先に実行することで実行可能になるタスクを増やすことにある（例えば、特許文献３参照）。
【先行技術文献】
【特許文献】
【００１６】
【特許文献１】特開２００７−３２８４１５号公報
【特許文献２】特開２００７−３２８４１６号公報
【特許文献３】特開２００８−１７１１５３号公報
【発明の概要】
【発明が解決しようとする課題】
【００１７】
しかし、特許文献１を含む関連技術では、タスク間の依存関係(参照数)が確定した後でないと、タスクの最適なコア割り当てができないという問題があった。前述したように、タスク生成や他タスク参照の有無が実行時の条件判断で変わる場合、関連するタスクが全て生成されない限り、当該タスクの参照数が確定しない。この場合、新規タスク生成時にどのタスクプールに投入すべきか、タスクスチール時にどのタスクを取得するかを決めることができない。このため、参照数の多いタスクが低性能コアに割り当てられると、高性能コアが当該タスクの処理終了を待ち合わせ並列性能が低下する可能性がある。【００１８】
また、特許文献３の関連技術では、タスク数を増やすことはできるが、参照数が多いタスクが低性能なプロセッサで処理されることで終了に時間がかかり多くのタスクが実行できない状態になることを避けることは困難である。【００１９】
本発明の目的は、実行性能が異なるコアを複数持つマルチコアプロセッサで、低性能コアの処理結果を高性能コアが待ち合わせによる性能低下を低減し、並列性能を高めるタスク割当を行うタスク割当装置、タスク割当方法、及び、タスク割当プログラムを提供することにある。
【課題を解決するための手段】
【００２０】
本発明の観点では、タスク割当装置は、
実行可能なタスクを蓄えるタスクプールと、
新規タスクのタスクプールへの投入と、タスクプールからタスクの取得を行うタスクスケジューラと、
当該タスク処理結果がいくつの他タスクから参照されるかを示す数であるタスクの参照数を求める参照数解析モジュールとを備え、
前記参照数解析モジュールは、参照数を実行中に解析し、
前記スケジューラは、前記参照数を基にタスクの投入、及び、取得を行う。ここで、前記参照数解析モジュールは、実行中タスクからヒント情報と参照数推定方法を取得し、指定された方法を基に当該ヒント情報から参照数を推定しても良い。【００２１】
また、本発明のタスク割当方法は、実行可能なタスクを蓄えるタスクプールから取得した当該タスクの処理結果が他のいくつのタスクから参照されるかを示す数であるタスクの参照数をタスクの処理実行中に算出し、前記参照数を基に前記タスクプールへのタスクの投入、及び、前記タスクプールからのタスクの取得を行うことを特徴とする。【００２２】
また、本発明のタスク割当プログラムは、実行可能なタスクを蓄えるタスクプールから取得した当該タスクの処理結果が他のいくつのタスクから参照されるかを示す数であるタスクの参照数をタスクの処理実行中に算出し、前記参照数を基に前記タスクプールへのタスクの投入、及び、前記タスクプールからのタスクの取得を行う処理をコンピュータに実行させるプログラムである。
【発明の効果】
【００２３】
本発明によれば、実行性能が異なるコアを複数持つマルチコアプロセッサで、低性能コアの処理結果を高性能コアが待ち合わせによる性能低下を低減し、並列性能を高めるタスク割当を行うタスク割当装置、タスク割当方法、及び、タスク割当プログラムを提供することができる。
【図面の簡単な説明】
【００２４】
【図１】本発明の第１の実施の形態に係るタスク割当装置の構成を示す図である。
【図２】本発明の第１の実施の形態に係るタスク割当装置の構成を示す図である。
【図３】ソフトウェア・プログラムとして実現される場合を示す図である。
【図４】タスクプールからタスクを取得しコアに割り当てる動作を示すフローチャートである。
【図５】タスクプールに投入する動作を示すフローチャートである。
【図６】参照数を推定する動作を示すフローチャートである。
【図７Ａ】イントラ予測図である。
【図７Ｂ】デブロッキングフィルタ結果を参照した際のイントラ予測図である。
【図８】予測画像生成タスクのタスク割当における新規タスクのタスクプールへの投入動作を示すフローチャートである。
【図９Ａ】１フレームに適用した予測画像生成処理の動作を示す図である。
【図９Ｂ】１フレームに適用した予測画像生成処理の動作を示す図である。
【図１０】各コアがタスクプールを持つ多数並列モデルを示す図である。
【図１１】タスクプールからタスクを取得しコアに割り当てる動作を示すフローチャートである。
【図１２】タスクをタスクプールに投入する動作を示す図である。
【図１３Ａ】並列プログラムから見た場合のヘテロ構成を示す図である。
【図１３Ｂ】並列プログラムから見た場合のヘテロ構成を示す図である。
【発明を実施するための形態】
【００２５】
実施の形態１
以下、図面を参照し、本発明を実施するための最良の形態が説明される。
図１乃至図２に、第１の実施の形態に係るタスク割当装置の構成が示される。
図１におけるタスク割当装置２００は、
演算コア毎に実行可能なタスクを蓄えるタスクプール１１１、１１２、…と、
新規タスクのタスクプールへの投入とタスクプールからタスクの取得を行うタスクスケジューラ２４１と、
当該タスクの参照数を求める参照数解析モジュール２５１とを備える。
【００２６】
前記スケジューラは、コアの性能と前記参照数を主に用いることでタスク割当を行う。
【００２７】
新規タスクの投入を行う場合、参照数が多いタスクは高性能コアのタスクプールに、参照数が少ないタスクは低性能コアのタスクプールに新規タスクを投入する。参照数の多少は、閾値を決定しておきその閾値を超すか否かで判断する。演算コア数が２より多い場合も、閾値を複数用意しその値に応じ投入すべきタスクプールを決定する。
【００２８】
また、タスクのスチールを行う場合、低性能コアのタスクプールが空の場合、他プールからの参照数の少ないタスクを取得し低性能コアに割当て、高性能コアのタスクプールが空の場合、他プールからの参照数の多いタスクを取得し高性能コアに割当てる。タスク投入と同様に、参照数の閾値を決定しておき参照数の多少を判断する。
【００２９】
前記参照数解析モジュールは、新規にタスクプールに投入されるタスク、または、タスクプール滞在中のタスクの参照数を実行中に解析する。本来、参照数は、当該タスクを参照する可能性のあるタスク(関連タスク)が全て生成された時点で確定する。しかし、新規タスクを生成時にどのタスクプールに投入すべきかや、タスクスチール時にどのタスクを取得するかなど、参照数が決定する前に判断する必要がある。このため、当該モジュールは通常のプログラム進行に先行してタスク間の依存関係を解析することで参照数を推定し、当該タスクに関連付ける。具体的には、タスクを投入する時やタスクをスチールするときに推定を行う。
【００３０】
この参照数解析モジュールによる参照数推定は、例えば、既に参照数が確定しているタスクを参考に行う。解析を行うタスクと同じタイプのタスクの参照数は似た傾向にあると仮定し、当該タスクの参照数としてその同タイプタスクの参照数を用いるなどである。
【００３１】
しかし、前述のような同タイプタスクからの参照数推定では、推定精度が不十分であることが考えられる。このため、図２のタスク割当装置３００に示すように、実行中のタスクから参照数解析モジュールに推定に必要なヒント情報と参照数推定方法を与えても良い。参照数解析モジュールは、当該ヒント情報と参照数推定方法が与えられた時に参照数を推定し、当該タスクに関連付ける。これらの情報は、実行中のタスクが新規タスクを生成する際に与えても良く、また、ヒント情報が準備できた時点で与えても良い。
【００３２】
例えば、ヒント情報としては生成するタスクと関連タスクのタイプ情報を取得し、参照数推定方法として前記生成タスクと関連タスクのタイプの関係に基づき参照数を推定するなどである。また、関連タスクのタスク生成判断やタスク参照有無の条件判断のみを先行して行う方法を参照数推定方法として取得しても良い。この指定された方法を基に参照数を推定することで、参照数の推定精度を上げることができる。以下は、参照数解析モジュールがヒント情報と参照数推定方法を取得する図６の構成に基づいて説明する。
【００３３】
なお、図１乃至図２に示される各モジュールは、本実施の形態に係るタスク割当装置を実現する場合において、ソフトウェア・プログラム及びハードウェアの何れかによって実現される所定の機能単位である。したがって、これら各処理部の一部または全部をソフトウェア又はハードウェアとして実現しても良い。
【００３４】
ソフトウェア・プログラムとして実現される場合、図３に示されるように、メインメモリ１３１、演算コア１１１、１１２、…、インターフェース部２４１を備えるコンピュータ装置１０００上でソフトウェア・プログラムは実行される。ソフトウェア・プログラムは、読み書き可能なメインメモリ１３１（記憶媒体）に格納されている。プロセッサ１１１、１１２、…は、ソフトウェア・プログラムをメインメモリ１３１から読み出して実行する。このような場合、本発明は、係るソフトウェア・プログラムのコード或いは記憶媒体によって構成される。
【００３５】
より具体的には、タスク割当装置の各モジュールの処理を、ＣＰＵ（Central Processing Unit）にコンピュータプログラムを実行させることにより実現する。この場合、コンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の通信媒体を介して伝送することにより提供することも可能である。また、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ＤＶＤ、ＲＯＭカートリッジ、バッテリバックアップ付きＲＡＭメモリカートリッジ、フラッシュメモリカートリッジ、不揮発性ＲＡＭカートリッジ等が含まれる。また、通信媒体には、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等が含まれる。
【００３６】
次に、図４乃至図６を参照して、第１の実施形態の動作手順が説明される。図４はタスクプールからタスクを取得しコアに割り当てる動作、図５はタスクプールに投入する動作、図６は参照数を推定する動作を説明するフローチャートである。図４乃至図６に示されるフローチャートは、図３に示されるコンピュータ装置１０００におけるプロセッサ１１１、１１２、…が実行するソフトウェア・プログラムの処理手順を表す。したがって、図２に示される機能モジュールは、プロセッサ１１１、１１２、…によって実行されるソフトウェア・プログラムとして説明される。以下は、演算コア１３１に対するタスク割当として説明する。
【００３７】
まず、図４を基に、タスクプールからタスクを取得しコアに割り当てる動作の説明をする。
スケジューラ１２１はタスクプール１１１にタスクがあるかどうか調べる（ステップ１０１）。
タスクプール１１１にタスクがある場合、スケジューラ１２１はタスクプール１１１からタスクを取得する。例えば、最初に投入されたタスクから取得するなどである（ステップ１０２）。
タスクプール１１１にタスクがない場合、スケジューラ１２１は調べていない他タスクプールにタスクがあるか調べ、どのタスクプールにも該当するタスクがない場合はタスク割当を終了する（ステップ１０３）。
他タスクプールにタスクがある場合、スケジューラ１２１は当該タスクプールの属する演算コアと演算コア１３１の性能を比較する（ステップ１０４）。
演算コア１３１の方が高性能の場合、当該タスクプールに参照数が予め決めた閾値より多いタスクがあるか調べ（ステップ１０５）、あれば取得し（ステップ１０６）、なければステップステップ１０３に戻る。
演算コア１３１の方が低性能の場合、当該タスクプールに参照数が予め決めた閾値より少ないタスクがあるか調べ（ステップ１０７）、あれば取得し（ステップ１０８）、なければ上記と同様にステップステップ１０３に戻る。
スケジューラ１２１は取得したタスクを演算コア１３１へ割り当て、処理を終了する（ステップ１０７）。
【００３８】
次に、図５を基に、新規タスクをタスクプールに投入する動作の説明をする。ここでは、前記ヒント情報と前記参照数推定方法が新規タスク生成時に与えられ、参照数推定する場合の説明をする。
参照数解析モジュール２５１は、得られたヒント情報と参照数推定方法を基に参照数推定を行う（ステップ１１１）。
スケジューラ１２１は、得られた参照数を基に投入するタスクプールを決定する（ステップ１１２）。例えば演算コア数が２の場合、前記参照数が予め与えられた閾値より多い場合は高性能コアのタスクプールを、少ない場合は高性能コアのタスクプールを選択する。
スケジューラ１２１は、当該新規タスクを前記タスクプールに投入する（ステップ１１３）。
【００３９】
次に、図６を基に、新規タスクをタスクプールに投入する時以外に参照数を推定する動作の説明をする。この動作は、実行中のタスクにおいてヒント情報が準備できた時点で、実行中タスクが参照数解析モジュールに当該ヒント情報と参照数推定方法を与え開始される。
参照数解析モジュール２５１は、得られたヒント情報と参照数推定方法を基に参照数推定を行う（ステップ１２１）。
【００４０】
このように、与えられたヒント情報と推定方法を用いることで関連タスクが全て生成される以前に該当タスクの参照数が推定でき、タスクの割当を効果的に行える。これにより、低性能コアの処理結果を高性能コアが待ち合わせるような無駄なタスク割当を低減でき、並列性能を高めることができる。
【００４１】
次に、第２の実施の形態が説明される。本実施の形態は、第１の実施の形態を動画像処理装置に適用したものである。つまり、本実施の形態に係るタスク割当装置が割り当てるタスクは、動画像処理を複数に分割したものとする。以下では、動画像処理として、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣ(以下Ｈ．２６４と記載する)方式の復号処理をマクロブロック(ＭＢ)単位に分割した例を用いて説明する。さらに、フレーム内での並列処理を想定し、フレームをまたいで並列処理はしないものとする。
【００４２】
第２の実施の形態に係る構成要素は、タスク割当装置３００における構成要素と同じであり、
前記参照数解析モジュールは、
前記ヒント情報として該当ＭＢのビットストリームを取得し、また、
前期参照数推定方法として、ビットストリームからマクロブロックタイプ、画面予測モード、フィルタタイプなどの符号化パラメータのみをデコードする方法を取得する。
【００４３】
動画復号処理は、以前に復号処理したＭＢの処理結果を参照し、現在のＭＢの復号処理を行う。Ｈ．２６４動画復号処理では、予測画像生成とデブロッキングフィルタにおいて以前のＭＢ処理結果の参照を行う。どのＭＢを参照するかは、ビットストリームの可変長復号(ＶＬＤ)処理結果して得られる、ＭＢタイプや、画面予測モード、フィルタパラメータなどの符号化パラメータを基に決定される。
【００４４】
予測画像生成は、動き補償処理、又は、イントラ予測処理から成り、ＭＢタイプでＭＢ毎にどちらの処理が適用されるか決定される。動き補償処理は同じフレーム内のＭＢを参照しない。一方、イントラ予測は図７Ａに示すように、左、上、右上、及び、左上のＭＢのイントラ予測結果を参照し得る。どのＭＢを参照するかは、ＭＢタイプ及びイントラ予測モードなどの画面予測モードから決定される。
【００４５】
デブロッキングフィルタは、フィルタパラメータ(deblocking_filter_control_present_flagやdisable_deblocking_filter_idcなど)で参照関係が決定される。デブロッキングフィルタは、左、上、及び、右上のＭＢのデブロッキングフィルタ結果を参照し得る(図７Ｂ)。
【００４６】
これらの符号化パラメータは、実行時にしかわからない。通常、ＶＬＤ処理は決められた手順でＭＢ毎に適用される。つまり、関連ＭＢのＶＬＤが全て終わるまで参照関係がわからないことになり、当該ＭＢ処理のタスク生成時点ではどのＭＢから参照されているか確定しないことになる。
【００４７】
このため、前期参照数推定方法として、ビットストリームからマクロブロックタイプ、画面予測モード、フィルタタイプなどのＭＢ参照関係を決定する符号化パラメータのみを先行高速復号する方法を指定する。前記ヒント情報としては、該当ＭＢのビットストリームを指定する。
【００４８】
次に、第２の実施形態の動作手順が説明される。第２の実施形態におけるフローチャートは、図４乃至図６に示される第１の実施形態のフローチャートと同じである。図８は、予測画像生成タスクのタスク割当における新規タスクのタスクプールへの投入動作を図５に適用したものである。
【００４９】
図８、図９を基に、予測画像生成タスクのタスク割当における新規タスクをタスクプールに投入する動作の説明をする。図９は、１フレームに適用した予測画像生成処理の動作を示している。図９Ａにおいて、ＭＢタスクI、IIは処理が終了しており、ＭＢタスクIIIが高性能コアで実行中、ＭＢタスクIVは高性能コアのタスクプールに投入されており、ＭＢタスクVがＭＢタスクIIIから生成された状態を表している。また、ＭＢタスクVI〜IXはまだ生成されておらず、参照関係がわかっていない。以下では、ＭＢタスクVをタスク割当する動作の説明をする。
【００５０】
ＭＢタスクIIIは、ＭＢタスクVの生成時に、前記ヒント情報としてＭＢVI〜IXに該当するビットストリーム、及び、前記参照数推定方法として前記ビットストリームからＭＢタイプ、イントラ予測モードを先行復号する方法を、参照数解析モジュール２５１に与えているとする。
【００５１】
まず、参照数解析モジュール２５１は、得られたＭＢVI〜IXのビットストリームから、該当ＭＢのマクロブロックタイプ、イントラ予測モードを復号する（ステップ１４１）。この結果、ＭＢVIIのみがイントラ予測処理をするＭＢで、さらに、上方向の参照をすることがわかったとする(図９Ｂ)。つまり、ＭＢタスクVはどのＭＢタスクからも参照されず、参照数０となる。この場合、ＭＢタスクIVは参照数１である。
【００５２】
次に、スケジューラ１２１は、得られたＭＢタスクVの参照数を基に投入するタスクプールを決定する（ステップ１４２）。例えば、参照数判断の閾値を１としておくと、ＭＢタスクVは低性能コアのタスクプールに投入すると決定される。
【００５３】
スケジューラ１２１は、ＭＢタスクVは低性能コアのタスクプールに投入する（ステップ１４３）。ＭＢタスクIVは参照数１であるため、高性能コアのタスクプールに投入されている(図９Ｂ)。
【００５４】
上記では、関連ＭＢのマクロブロックタイプ、イントラ予測モードの先行復号を、タスク生成時に毎回行うように記述した。しかし、全ての先行復号をせず、以前に行った復号結果を用いても良い。例えば、ＭＢタスクIV割当て時に行っているＭＢVIIの先行復号結果を、ＭＢタスクVの割当て時に用いても良い。
【００５５】
このように、関連ＭＢタスクのビットストリームから参照関係決定に必要な符号化パラメータのみを先行高速復号することで、関連タスクが全て生成される以前に該当ＭＢタスクの参照数が決定でき、タスクの割当を効果的に行える。これにより、低性能コアの処理結果を高性能コアが待ち合わせるような無駄なタスク割当を低減でき、並列性能を高めることができる。
【００５６】
なお、本実施の形態は、動画像処理としてＨ．２６４方式の復号処理を例に説明したが、本発明はＨ．２６４方式の復号処理に限らず、ＭＰＥＧやＪＰＥＧ、ＶＣ−１などの動画像復号及び符号化処理についても適用可能である。
【００５７】
なお、上述する各実施の形態は、本発明の好適な実施の形態であり、本発明の要旨を逸脱しない範囲内において種々変更実施が可能である。
【００５８】
この出願は、２００９年２月１８日に出願された日本出願特願２００９−０３５０７５を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００５９】
本発明は、例えば、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣ方式の動画像データを復号する処理に利用可能である。また、動画像処理のみならず、データの符号化処理を要する様々なシステムにおいて利用可能性を有する。
【符号の説明】
【００６０】
１００、２００、３００    タスク割当装置
１１１、１１２    タスクプール
１２１    スケジューラ
１３１、１３２    演算コア
２５１    参照数解析モジュール
【図１】
0005545288.tif 000002
【図２】
0005545288.tif 000003
【図３】
0005545288.tif 000004
【図４】
0005545288.tif 000005
【図５】
0005545288.tif 000006
【図６】
0005545288.tif 000007
【図７Ａ】
0005545288.tif 000008
【図７Ｂ】
0005545288.tif 000009
【図８】
0005545288.tif 000010
【図９Ａ】
0005545288.tif 000011
【図９Ｂ】
0005545288.tif 000012
【図１０】
0005545288.tif 000013
【図１１】
0005545288.tif 000014
【図１２】
0005545288.tif 000015
【図１３Ａ】
0005545288.tif 000016
【図１３Ｂ】
0005545288.tif 000017