(57)【要約】【課題】マルチプロセッサシステムにおける効率的なタスクの分配技術を提供する。【解決手段】複数のプロセッサにタスクを分配する方法が提供される。複数のタスクを含んで構成されるアプリケーション９０のプログラムコード中に、複数のタスクのサブプロセッサ１０ａ〜１０ｄもしくはメインプロセッサ２０への分配規則を予め記述しておく。アプリケーション９０の実行時において、メインプロセッサ２０は、分配規則を読み取り、その規則に従って複数のタスクを指定されたサブプロセッサ１０ａ〜１０ｄもしくはメインプロセッサ２０へ分配する。【選択図】図２
2008117313.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサにタスクを分配する方法であって、
複数のタスクを含んで構成されるアプリケーションプログラムのプログラムコード中に、前記複数のタスクのプロセッサへの分配規則を予め記述しておく過程と、
前記アプリケーションプログラムの実行時において、前記分配規則を読み取り、その規則に従って前記複数のタスクを指定されたプロセッサへ分配する過程と、
を含むことを特徴とする分配方法。
【請求項２】
複数のプロセッサにタスクを分配する方法であって、
複数のタスクを含んで構成されるアプリケーションプログラムのプログラムコード中に予め記述されている、前記複数のタスクのプロセッサへの分配規則を検出する過程と、
検出された分配規則に従って前記複数のタスクを指定されたプロセッサへ分配する過程と、
を含むことを特徴とする分配方法。
【請求項３】
前記複数のタスクは、同一のプログラムコードにもとづく処理であって、処理対象とするデータごとに実行されるタスクであることを特徴とする請求項１または２に記載の分配方法。
【請求項４】
前記分配規則は、所定の処理単位に含まれるデータの個数をパラメータとして、それぞれのデータを処理するタスクを前記複数のプロセッサのいずれに割り当てるかを記述したものであって、
本分配方法は、所定の処理単位に含まれる、処理すべきデータの個数を検出する過程をさらに含み、
検出したデータの個数に応じて、各タスクをプロセッサに分配することを特徴とする請求項３に記載の分配方法。
【請求項５】
前記プロセッサがＮ（Ｎは２以上の整数）個であり、処理すべきデータがＭ（Ｍは自然数）個である場合に、
Ｍが、２以上Ｎ以下の整数Ｌを約数として有するとき、前記分配規則は、前記Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定されることを特徴とする請求項４に記載の分配方法。
【請求項６】
複数のプロセッサにタスクを分配する方法であって、
処理すべきタスクを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向に優先して分配する第１の方式と、
処理すべきタスクを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配する第２の方式と、
を備え、前記第１、第２の方式を適宜切り替えることを特徴とする分配方法。
【請求項７】
前記第１、第２の方法はアプリケーションプログラムより下位のレイヤで規定されており、そのレイヤ上で実行されるアプリケーションプログラムは、そのプログラムに含まれる所定のタスクを複数処理すべき場合に、各タスクを、前記第１、第２のいずれにより分配すべきかを指定するプログラムコードを含むことを特徴とする請求項６に記載の分配方法。
【請求項８】
分配されたデータに対して、所定の処理を実行する複数のプロセッサと、
所定の処理単位に含まれる前記データの個数を検出するデータ数検出部と、
前記所定の処理単位に含まれる前記データの個数をパラメータとして定められた所定の分配規則に従って、各データを前記複数のプロセッサに分配する分配部と、
を備えることを特徴とする情報処理装置。
【請求項９】
前記プロセッサがＮ（Ｎは２以上の整数）個であり、前記所定の処理単位に含まれるデータがＭ（Ｍは自然数）個である場合に、
Ｍが、２以上Ｎ以下の整数Ｌを約数として有するとき、前記分配規則は、前記Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定されることを特徴とする請求項８に記載の情報処理装置。
【請求項１０】
前記分配部は、
前記データを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向に優先して分配する第１の方式と、
前記データを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配する第２の方式と、
のうち、選択されたいずれかの方式にもとづき、前記データを分配することを特徴とする請求項８に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセッサを備えたマルチプロセッサシステムにおいて、タスクをプロセッサに分配する技術に関する。
【背景技術】
【０００２】
近年のコンピュータゲームやデジタル放送などの分野に利用されるコンピュータグラフィックス技術や画像処理技術の著しい進歩に伴い、コンピュータ、ゲーム機器、テレビなどの情報処理装置は高精細の画像データをより高速に処理する能力を求められている。これらの情報処理装置において高性能な演算処理を実現するためには、複数のプロセッサを備えた情報処理装置において、それぞれのプロセッサにタスクを割り当ることにより、複数のタスクを並列処理したりパイプライン処理する方法が採用される。
【発明の開示】
【発明が解決しようとする課題】
【０００３】
マルチプロセッサシステムにおいて、たとえば、音楽再生や、動画再生、ゲームの画面の生成など、リアルタイム性が要求される処理を実行する場合、各プロセッサを有効に利用しながら、各タスクを所定の時間内に完了させる必要がある。したがって、マルチプロセッサシステムにおいては、各プロセッサにどのようにタスクを分配するかが重要な課題となる。
【０００４】
本発明は、このような課題に鑑みてなされたものであり、その目的のひとつは、マルチプロセッサシステムにおける効率的なタスクの分配技術を提供することにある。
【課題を解決するための手段】
【０００５】
本発明のある態様によれば、複数のプロセッサにタスクを分配する方法が提供される。この分配方法では、複数のタスクを含んで構成されるアプリケーションプログラムのプログラムコード中に、複数のタスクのプロセッサへの分配規則を予め記述しておく。そして、アプリケーションプログラムの実行時において、分配規則を読み取り、その規則に従って複数のタスクを指定されたプロセッサへ分配する。
本明細書において、「タスク」とは、ある目的を達成するためにプログラムされたアプリケーションプログラムまたはそれに含まれる情報処理の内容をいい、アプリケーションプログラムと対応してもよいし、入出力制御やユーザが指定したコマンドなどアプリケーションプログラムよりも小さい単位と対応してもよく、何らかの処理または機能の単位に対応すればよい。タスクは、処理対象となるデータを単位としてもよい。また、「複数のプロセッサ」は、物理的に別個に構成されていてもよいし、ひとつのプロセッサ内に設けられた複数の演算コアユニットであってもよい。
【０００６】
「分配規則」とは、各タスクをどのプロセッサに割り当てるかを具体的に記述したものであってもよいし、アプリケーションプログラムの外部で記述されたいくつかの分配規則から、いずれかの方式を選択するかを記述したものであってもよい。すなわち、「分配規則」は、タスクのプロセッサの分配に影響を及ぼす記述を含んでいればよい。
この態様によれば、アプリケーションプログラムのプログラマが、あるタスクをどのプロセッサにおいて処理すべきかを指定できるため、効率的なタスクの分配が可能となる。
【０００７】
なお、本発明を装置、システム、ソフトウェアにより表現したものもまた、本発明の態様として有効である。
【発明の効果】
【０００８】
本発明によれば、マルチプロセッサシステムにおいて効率的にタスクを分配することができる。
【発明を実施するための最良の形態】
【０００９】
はじめに、本発明の実施の形態に係るタスクの分配方法およびそれを利用した情報処理装置の概要について説明する。本実施の形態に係るタスクの分配技術は、複数のプロセッサを備えるパーソナルコンピュータ、ゲーム機器、ＨＤＤレコーダ、ＤＶＤレコーダなどの情報処理装置において、各プロセッサにタスクを分配するために利用される。
【００１０】
本発明のある実施の形態によれば、複数のプロセッサにタスクを分配する方法が提供される。この分配方法は、複数のタスクを含んで構成されるアプリケーションプログラムのプログラムコード中に、複数のタスクのプロセッサへの分配規則を予め記述しておく過程と、アプリケーションプログラムの実行時において、分配規則を読み取り、その規則に従って複数のタスクを指定されたプロセッサへ分配する過程と、を含む。
【００１１】
この実施の形態によれば、アプリケーションプログラムのプログラマが、あるタスクをどのプロセッサにおいて処理すべきかを指定できるため、効率的なタスクの分配が可能となる。また、所定の処理が完了するまでの時間を見積もることができる。
【００１２】
本発明の別の実施の形態もまた、分配方法に関する。この方法は、複数のプロセッサにタスクを分配する方法であって、複数のタスクを含んで構成されるアプリケーションプログラムのプログラムコード中に予め記述されている、複数のタスクのプロセッサへの分配規則を検出する過程と、検出された分配規則に従って複数のタスクを指定されたプロセッサへ分配する過程と、を含む。
【００１３】
上述のいずれかの分配方法において、複数のタスクは、同一のプログラムコードにもとづく処理であって、処理対象とするデータごとに実行されるタスクであってもよい。
この場合、複数のデータに対して、ある所定の処理を実行する場合に、これらのデータごとのタスクが、分配規則にもとづいて各プロセッサに分配されることになる。その結果、複数のデータを処理する場合に、それらの処理に要する時間を見積もることができる。
また、複数のタスクは、その処理に略同一の時間を要する処理であってもよい。この場合、複数のタスクは、異なるプログラムコードにもとづく処理であってもよい。
【００１４】
ある実施の形態において、分配規則は、所定の処理単位に含まれるデータの個数をパラメータとして、それぞれのデータを処理するタスクを複数のプロセッサのいずれに割り当てるかを記述したものであってもよい。この場合に、本分配方法は、所定の処理単位に含まれる処理すべきデータの個数を検出する過程をさらに含み、検出したデータの個数に応じて、各タスクをプロセッサに分配してもよい。
「所定の処理単位」とは、一定時間を単位としてもよいし、複数のデータを含んで構成されるデータ群を単位としてもよく、所定の規則によってひとまとまりとされた処理の単位をいう。なお、本明細書において、「ひとつのデータ」は、所定のフォーマットにより区分されるデータ、所定のビット数、バイト数を有するデータ、など、予め決めれられた方法によって抽出可能なデータの単位をいう。
【００１５】
ある実施の形態において、プロセッサがＮ（Ｎは２以上の整数）個であり、処理すべきデータがＭ（Ｍは自然数）個である場合に、Ｍが、２以上Ｎ以下の整数Ｌを約数として有するとき、分配規則は、Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定されてもよい。
この場合、各プロセッサのタスクによる占有時間がばらつくのを防止することができるとともに、データの個数によっては、タスクに占有されない空きプロセッサを設けることができるため、その他の処理を、空きプロセッサに分配することができる。
【００１６】
本発明のさらに別の態様もまた、複数のプロセッサにタスクを分配する方法に関する。この分配方法は、処理すべきタスクを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向に優先して分配する第１の方式と、処理すべきタスクを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配する第２の方式と、を備え、第１、第２の方式を適宜切り替えることを特徴とする。
【００１７】
タスクの内容によっては、ある程度時間を要しても、なるべく少ない個数のプロセッサで処理を行いたい場合や、プロセッサを多く使用して、なるべく短時間で処理を完了させたい場合がある。この実施の形態によれば、プログラマは、処理内容に応じて２つの分配方式を選択できるため、ソフトウェアの設計の自由度を高めることができる。
【００１８】
ある実施の形態において、第１、第２の方法はアプリケーションプログラムより下位のレイヤで規定されており、そのレイヤ上で実行されるアプリケーションプログラムは、そのプログラムに含まれる所定のタスクを複数処理すべき場合に、各タスクを、第１、第２のいずれにより分配すべきかを指定するプログラムコードを含んでもよい。
アプリケーションプログラムより下位のレイヤとは、ＯＳ（Operating System）レイヤ、ミドルウェア、あるいはカーネルなどを含み、そのレイヤを前提として、アプリケーションプログラムが動作するレイヤをいう。
【００１９】
本発明のさらに別の態様は、情報処理装置である。この情報処理装置は、分配されたデータに対して、所定の処理を実行する複数のプロセッサと、所定の処理単位に含まれるデータの個数を検出するデータ数検出部と、所定の処理単位に含まれるデータの個数をパラメータとして定められた所定の分配規則に従って、各データを複数のプロセッサに分配する分配部と、を備える。
【００２０】
この態様によると、プログラマは、プロセッサの占有状態をデータの個数をパラメータとして制御することができる。
【００２１】
ある実施の形態において、プロセッサがＮ（Ｎは２以上の整数）個であり、所定の処理単位に含まれるデータがＭ（Ｍは自然数）個である場合に、Ｍが、２以上Ｎ以下の整数Ｌを約数として有する場合に、分配規則は、Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定されてもよい。
【００２２】
分配部は、データを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向に優先して分配する第１の方式と、データを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配する第２の方式と、のうち選択されたいずれかの方式にもとづき、データを分配してもよい。
【００２３】
以下、本発明を好適な実施の形態をもとに図面を参照しながら説明する。各図面に示される同一または同等の構成要素、部材、処理には、同一の符号を付するものとし、適宜重複した説明は省略する。また、実施の形態は、発明を限定するものではなく例示であって、実施の形態に記述されるすべての特徴やその組み合わせは、必ずしも発明の本質的なものであるとは限らない。
【００２４】
図１は、実施の形態に係る情報処理装置２００の機能ブロック図である。情報処理装置２００は、統括制御部１００、メインメモリ１０２、メディアプロセッサ１１０、サウスブリッジ１１２、ディスク装置１１４を備える。情報処理装置２００の外部には、表示装置１２０とスピーカやヘッドホンなどの音声出力部１２２が接続される。表示装置１２０および音声出力部１２２はそれぞれ、統括制御部１００およびメディアプロセッサ１１０によるデータ処理の結果得られた映像および音声を出力する。
【００２５】
以降の図において、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、ＣＰＵ（Central Processing Unit）、メモリ、その他のＬＳＩ(Large Scale Integration)で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
また、この情報処理装置２００では、情報処理装置２００を効率よく使用するための機能、環境を提供し、装置全体を統括的に制御するオペレーティングシステム（以下、単に「ＯＳ」とよぶ）が実行される。
【００２６】
情報処理装置２００の全体構成の概略は以下の通りである。統括制御部１００は、情報処理装置２００において、アプリケーションプログラム（以下、単にアプリケーションともいう）によって規定された汎用的な演算処理を実行する演算ユニットである。一方、メディアプロセッサ１１０は、グラフィックスプロセッサとも呼ばれるユニットであり、グラフィックスに関連する演算処理に特化された演算ユニットである。さらに、メディアプロセッサ１１０は、情報処理装置２００において生成されたオーディオ信号を、音声出力部１２２に出力する機能を有する。統括制御部１００およびメディアプロセッサ１１０は、互いに協働しながら、表示装置１２０に表示すべき画像データやオーディオデータを生成する。
【００２７】
次に、統括制御部１００の構成について説明する。
統括制御部１００は、演算処理機能を有するユニットとして、１つのメインプロセッサ２０と複数のサブプロセッサ１０ａ〜１０ｄを備えるマルチプロセッサシステムとして構成される。さらに、統括制御部１００は、サブプロセッサ１０ａ〜１０ｄごとに設けられた複数のローカルメモリ１２ａ〜１２ｄ、メモリコントローラ２２、Ｉ／Ｏ制御部２４を含む。各ブロックは、バス２６を介して接続されており、相互通信可能である。なお、図１では、サブプロセッサ１０が４個示されるが、これに限定されるものではなく、６個、８個、１０個などであってもよく、その個数は任意である。また、メインプロセッサ２０が複数設けられていてもよい。
【００２８】
メインプロセッサ２０およびサブプロセッサ１０は、それぞれに割り当てられたタスクを処理する。本実施の形態において、メインプロセッサ２０およびサブプロセッサ１０は、異なる特性を有するものとする。そこで、メインプロセッサ２０およびサブプロセッサ１０の特性について説明する。
１．メモリアクセスについて
メインプロセッサ２０は、汎用的な処理を実行するプロセッサであり、キャッシュメモリを備えている。これに対して、サブプロセッサ１０は、キャッシュメモリを備えていない。メインプロセッサ２０は、キャッシュメモリを利用して投機的な命令実行を行うため、高速な処理が可能であるが、キャッシュヒット、キャッシュミスにより、ある処理もしくはタスクを実行するのに要するサイクル数がばらつく。これに対して、サブプロセッサ１０はキャッシュメモリを有さないため、ある処理を実行するのに要する時間を確実に見積もることができる。
また、メインプロセッサ２０は、メインメモリ１０２を利用してデータ処理が可能であるため大容量のデータ処理に適している。一方、サブプロセッサ１０は、メインメモリ１０２を直接使用できず、ローカルメモリ１２を使用しての処理となるため、大容量のデータ処理には適していない。
【００２９】
２．命令のサポートについて
メインプロセッサ２０は、汎用命令セットをサポートする。これに対して、サブプロセッサ１０は、特定の演算に特化した命令セットをサポートする。特定の演算は、たとえば算術演算、ビット演算であり、これらの演算処理に関して言えば、サブプロセッサ１０の方が高速である。メインプロセッサ２０は、汎用命令セットをサポートしていることにより、ある特定の演算に関して言えば、メインプロセッサ２０の方が処理速度は遅くなる。
また、サブプロセッサ１０は、ＳＩＭＤ（Single Instruction Multi-Data）方式を採用している。これにより、データの並列演算処理に向いている。
【００３０】
その他、メインプロセッサ２０よりもサブプロセッサ１０の方がパイプラインの段数が深く、サブプロセッサ１０の方がリアルタイム処理に適した構成となっている。
【００３１】
このような特性を有するサブプロセッサ１０およびメインプロセッサ２０に対するタスクの分配については後に詳述する。メインプロセッサ２０およびサブプロセッサ１０がそれぞれ割り当てられたタスクを実行することにより、複数のタスクが並列処理され、あるいはパイプライン処理される。
【００３２】
なお、後述する各プロセッサに対するタスクの分配技術は、ある側面において、このような特性を前提として好適に利用されるものである。しかしながら、上述のメインプロセッサ２０およびサブプロセッサ１０の特性は以下で説明するタスクの分配技術についての理解を深めるための例示でもあり、本実施の形態に係るタスクの分配技術の適用範囲は、このような特性を有するプロセッサに限定されるものではない。
【００３３】
メインプロセッサ２０やサブプロセッサ１０に含まれる図示しないＤＭＡＣ（Direct Memory Access Controller）は、メインメモリ１０２やメディアプロセッサ１１０のグラフィックスメモリ（不図示）との間のデータ転送、データ退避などを、メインプロセッサ２０またはサブプロセッサ１０それぞれからの命令によって制御する。
【００３４】
メインメモリ１０２は、主に統括制御部１００によって使用される記憶領域である。メインメモリ１０２には、タスクの実行状態に関連するデータが格納される。たとえば、統括制御部１００によりコンピュータグラフィックスに関するタスクが処理されて得られたモデリングデータなどが一時的に格納される。また、このメインメモリ１０２には、メディアプロセッサ１１０により生成されたデータが退避される場合もある。メモリコントローラ２２は、統括制御部１００内の各ユニットからメインメモリ１０２へのデータアクセスを制御する。
【００３５】
上述したように、統括制御部１００は、メディアプロセッサ１１０およびサウスブリッジ１１２と接続される。Ｉ／Ｏ制御部２４は、メディアプロセッサ１１０やサウスブリッジ１１２と、統括制御部１００内部のブロックとのデータの送受信を制御するブロックである。サウスブリッジ１１２には、ディスク装置１１４や、ネットワークとの接続デバイス、ＵＳＢメモリなどが接続される。サウスブリッジ１１２は、これらのデバイスと統括制御部１００との間のデータ転送を制御するブロックである。
ディスク装置１１４は、ＢＤ（Blu-Ray Disc）や、ＤＶＤ(Digital Versatile Disc)、ＣＤ（Compact Disc）などの光ディスクを読み込み可能な光ディスク装置である。また、ディスク装置１１４は、ハードディスク装置であってもよい。ディスク装置１１４には、静止画および動画を含む画像データや、オーディオデータが所定のフォーマットで記録されている。
【００３６】
メディアプロセッサ１１０は、統括制御部１００と協働して、主として画像処理を専用に実行するユニットであり、たとえば、レンダリング処理を実行する。メディアプロセッサ１１０は、統括制御部１００により処理されるそれぞれのタスクに関連する画像処理を行い、生成した画像、映像を表示装置１２０に出力する。メディアプロセッサ１１０は、複数の画像処理を時分割して並列的に実行してもよい。さらに、メディアプロセッサ１１０は、統括制御部１００により生成されたオーディオデータを、音声出力部１２２に出力する機能も有している。
【００３７】
メディアプロセッサ１１０は、たとえば、図示しないグラフィックスメモリ、メモリコントローラ、演算ユニット、制御ブロック、ディスプレイコントローラ等を備える。これらのブロック同士は、バスを介して接続されており、各ブロック間でデータの送受信、共有が可能である。
【００３８】
制御ブロックは、メディアプロセッサ１１０全体を制御するブロックである。制御ブロックは、演算ユニット、グラフィックスメモリ、ディスプレイコントローラを統括的に制御し、各ブロック間のデータ転送の同期管理やタイマー管理等を行う。演算ユニットは、制御ブロックからの命令にしたがって、グラフィックに関する様々な演算処理を行う。その処理の一例としては、３次元モデリングデータをもとに座標変換、陰面消去、シェーディングを行って画像フレームデータを作成し、フレームバッファに書き込む一連のレンダリング処理などが挙げられる。
【００３９】
グラフィックスメモリは、メディアプロセッサ１１０により使用、管理されるグラフィックスデータを記憶するためのメモリ領域である。グラフィックスメモリには、画像フレームデータが格納されるフレームバッファやＺバッファに加えて、画像フレームデータを描画する際に参照される基本データである頂点データ、テクスチャデータ、カラールックアップテーブルなどのデータに対応する領域が用意されている。
【００４０】
ディスプレイコントローラは、水平および垂直同期信号を生成し、表示装置１２０の表示タイミングにしたがって、グラフィックスメモリに格納されるフレームバッファから画像フレームデータのピクセルデータをライン状に順次読み込んでいく。さらにディスプレイコントローラは、ライン状に読み込まれたピクセルデータを、ＲＧＢのカラー値を含むデジタルデータから表示装置１２０に対応したフォーマットに変換して出力する。
【００４１】
以上が、情報処理装置２００の全体構成および動作の概要である。以下、統括制御部１００の内部のサブプロセッサ１０およびメインプロセッサ２０に対するタスクの分配に着目し、それを実現するための技術について詳細に説明する。
【００４２】
以下では、ＳＡＣＤ（Super Audio Compact Disc）の再生を例にして、本実施の形態に係るタスクの分配技術について説明する。ＳＡＣＤの再生は、通常は専用のＤＳＰ（Digital Signal Processor）を用いて行われるものであり、情報処理装置２００に搭載されるような、汎用的なマルチプロセッサシステムを利用して処理する場合には、そのリアルタイム性から、各プロセッサに対して必要なタスクを効率的に分散する必要がある。また、ＳＡＣＤ専用の再生装置であれば、その他の処理を実行する必要はないが、情報処理装置２００においては、ＳＡＣＤの再生と並列して、別のアプリケーション（たとえば、テレビ番組の録画用のアプリケーション）が実行される場合があるため、それらの処理のために、使用可能なハードウェア資源が限定されてしまうという事情がある。
【００４３】
図２は、本実施の形態に係る情報処理装置２００をソフトウェアの観点から表現したブロック図である。情報処理装置２００は、ハードウェアレイヤ５０に、上述したサブプロセッサ１０ａ〜１０ｄ、メインプロセッサ２０、ディスク装置１１４が存在する。
ソフトウェアレイヤ６０は、コアレイヤ７０およびアプリケーションプログラム（以下、単にアプリケーションという）９０を含む。コアレイヤ７０は、ＯＳ７２、ライブラリ７４、デバイスアクセスレイヤ７６、バーチャルＯＳ７８、アプリケーションフレームワーク（以下、ＡＦＷという）８０を含む。コアレイヤ７０は、アプリケーション９０の下位のレイヤであり、アプリケーションは、コアレイヤを前提としてプログラムされ、実行される。
【００４４】
ＯＳ７２は、情報処理装置２００を効率よく使用するための機能、環境を提供し、メインプロセッサ２０、ディスク装置１１４等を統括的に制御するソフトウェアである。ライブラリ７４は、サブプロセッサ１０に実行させる命令などを規定する。ＯＳ７２およびライブラリ７４を含めて、ＯＳとして認識してもよい。
ＯＳ７２自体は、それより上位のレイヤから与えられたタスクを、ＯＳレベルで規定された方法によって、メインプロセッサ２０およびサブプロセッサ１０ａ〜１０ｄに実行させる。ＯＳ７２は、処理すべきタスクが複数ある場合、従来の一般的な手法に従って、複数のサブプロセッサ１０ａ〜１０ｄの占有状態を監視し、占有されていないサブプロセッサ１０に対して順次タスクを投入する。特殊なタスク分配を必要としない一般的なアプリケーションであれば、以下で述べるバーチャルＯＳ７８およびＡＦＷ８０を介さずに、ＯＳ７２上で実行されるため、アプリケーションのプログラマは、サブプロセッサ１０やメインプロセッサ２０の存在を意識せずにプログラムを記述できる。
【００４５】
バーチャルＯＳ７８は、ＯＳ７２とライブラリ７４の上位レイヤに設けられる。上述したように、ＯＳ７２自体は、あるタスクを内部のカーネルに規定された規則にもとづいて、メインプロセッサ２０およびサブプロセッサ１０に対して分配する。これに対して、バーチャルＯＳ７８は、アプリケーション９０がハードウェアに依存しないように設けられたレイヤである。このバーチャルＯＳ７８は、異なる特性を有するサブプロセッサ１０とメインプロセッサ２０のハードウェア的、あるいはソフトウェア的な相違点を隠蔽する。バーチャルＯＳ７８によって、上位のＡＦＷ８０は、サブプロセッサ１０およびメインプロセッサ２０を、同種のプロセッサとしてアクセス可能となる。
【００４６】
ＡＦＷ８０は、バーチャルＯＳ７８上に設けられる。ＡＦＷ８０は、従来の手法におけるＯＳ７２に代わって、メインプロセッサ２０およびサブプロセッサ１０ａ〜１０ｄの状態遷移を管理する。また、ＡＦＷ８０には、所定の処理単位が規定されている。ＡＦＷ８０は、所定の処理単位ごとに、所定の分配規則に従ってメインプロセッサ２０やサブプロセッサ１０に対してタスクを分配する。ＡＦＷ８０には、予め複数の分配規則が定められており、上位のアプリケーション９０からの指示にもとづいて、いずれかの分配規則が選択される。また、ＡＦＷ８０は、内部で規定された分配規則ではなく、上位のアプリケーション９０により指定された規則にもとづいて、タスクを分配してもよい。ＡＦＷ８０は、タスクの分配に際し、各タスクにともなうデータの入出力や、タイミング等の管理も行う。さらに、ＡＦＷ８０は、上位のレイヤに対して、各種のユーティリティを提供する。
【００４７】
ＳＡＣＤのディスクメディアに記録された情報は暗号化されている。デバイスアクセスレイヤ７６は、ディスク装置１１４からのデータの読み出しと、暗号の復号処理を実行するレイヤである。
【００４８】
アプリケーション９０は、本実施の形態では、ＳＡＣＤを再生する。アプリケーション９０は、デバイスアクセスレイヤ７６において復号されたビットストリームデータを受け、必要な処理を実行してＰＣＭ（Pulse Code Modulation）データに変換する。アプリケーション９０は、ＳＡＣＤ再生のために必要なデータ読出モジュール９２、フレームデコードモジュール９４、フィルタモジュール９６、エフェクタモジュール９８、データ出力モジュール９９を含む。各モジュールの機能については後述する。
【００４９】
従来のＯＳを利用した場合、アプリケーション９０において処理すべきタスクが複数ある場合に、各タスクを複数のプロセッサのいずれに分配するかを指定することは行われていなかった。これに対して、図２に示すように、バーチャルＯＳ７８およびＡＦＷ８０を設けたことにより、アプリケーション９０において発生するタスクが、アプリケーション９０からの指示にもとづいて、サブプロセッサ１０およびメインプロセッサ２０に分配することが可能となる。なお、本実施の形態では、従来のソフトウェア資源の承継の観点から、従来型のＯＳの上位レイヤにバーチャルＯＳ７８やＡＦＷ８０を設けることにより、アプリケーション９０からのタスク分配の指示を可能としているが、ＯＳを新たに設計する場合には、あらかじめＯＳ７２およびＡＦＷ８０の機能をＯＳ自身に実装してもよい。
【００５０】
以下では、ハードウェア、ソフトウェア的に上述の構成を有する情報処理装置２００において実行されるＳＡＣＤの再生処理について説明する。
図３は、図１、図２に示す情報処理装置２００により構成されるＳＡＣＤ再生装置３００の構成を示すブロック図である。ＳＡＣＤ再生装置３００は、ディスク装置１１４、デバイスドライバ３０２、暗号復号器３０４、再生処理部３１０を含む。
ディスク装置１１４には、所定のフォーマットで圧縮されたオーディオデータが記録されたＳＡＣＤのメディアが挿入される。デバイスドライバ３０２は、ディスク装置１１４の回転を制御し、メディアから所定数ごと、たとえば１２８個のセクタごとのデータを、順次読み出す。この機能は、図２のＯＳ７２のドライバと、図１のサウスブリッジ１１２、ディスク装置１１４の協働によって実現される。
【００５１】
デバイスドライバ３０２により読み出されたデータは、暗号化されている。暗号復号器３０４は、暗号化されたデータを復号する。この処理は、メインプロセッサ２０、メモリコントローラ２２、メインメモリ１０２、Ｉ／Ｏ制御部２４等が図２のデバイスアクセスレイヤ７６によって制御されることで実行される。暗号復号器３０４からは、ＤＳＤ(Direct Stream Digital)方式で変調されたオーディオデータが出力される。以下の説明では、このオーディオデータは、ＤＳＴ(Direct Stream Transfer)方式により可逆圧縮されている場合について説明する。すなわち、暗号復号器３０４からの出力されるオーディオデータＳ１は、ＤＳＴ方式で圧縮されたＤＳＤフォーマットのデータである。なお、ＤＳＴ方式で圧縮されていない場合には、伸張処理がスキップされる。
【００５２】
再生処理部３１０は、図２のアプリケーション９０を含むソフトウェアレイヤ６０と、図１の統括制御部１００の内部ブロックの協働により実現される。再生処理部３１０は、ＤＳＴ方式で圧縮されたデータを伸張し、ＰＣＭデータに変換して出力する。以下、再生処理部３１０の構成について説明する。ＳＡＣＤ再生の過程においては、さまざまなタスクが実行されるため、本実施の形態に係るＳＡＣＤ再生装置３００は、各タスクに応じて、使用するプロセッサを選択し分配する。
【００５３】
データ読出部３１２は、暗号復号器３０４から出力されるＤＳＴ形式で圧縮されたオーディオデータＳ１を読み出す。データ読出部３１２はディスク上の１２８セクタのデータをひとつのデータ単位として読み出し、読み出したデータを解析して、オーディオフレームに関するデータ（以下、フレームデータＤｆｒｍとよぶ）のみを抽出し、ある所定の処理単位ごとに、後段のオーディオフレームバッファ３１４に格納する。なお、一つのフレームデータＤｆｒｍには、２チャンネルから６チャンネル分のオーディオデータが含まれる。オーディオフレームバッファ３１４をはじめとするＳＡＣＤ再生装置３００に設けられたバッファは、図１のメインメモリ１０２、ローカルメモリ１２ａ〜１２ｄなどの記憶領域に設けられる。
【００５４】
所定の処理単位に含まれるフレームデータＤｆｒｍの個数は、再生すべきオーディオ信号の内容に応じて、所定の範囲で変動する。所定の処理単位自体は、ＳＡＣＤ再生装置３００において任意に設定される。以下の説明では、ひとつの所定の処理単位に含まれるフレームデータＤｆｒｍの個数は、１〜４の範囲で変動するものとする。たとえば、曲の始まりや終わりでは、フレームデータＤｆｒｍは、１個、２個と少なく、通常の再生時では３個であり、早送りなどのトリックプレー時において最大で４個となる。なお、ひとつのフレームデータＤｆｒｍは、再生時間に換算して、１／７５秒（以下、単にフレーム時間Ｔｆともいう）の情報量を有している。データ読出部３１２によるデータ処理は、メインプロセッサ２０に分配される。すなわち、データ読出部３１２は、主としてメインプロセッサ２０と、アプリケーション９０のデータ読出モジュール９２により実現される。
【００５５】
フレームデコード部３１６は、オーディオフレームバッファ３１４から、オーディオフレームバッファ３１４から、所定の処理単位に含まれるフレームデータＤｆｒｍを読み出す。つまり、フレームデコード部３１６に一度に入力されるフレームデータＤｆｒｍの個数は１〜４個となる。フレームデコード部３１６は、ＤＳＴ形式で圧縮された各フレームデータＤｆｒｍを伸張し、ＤＳＤ形式のオーディオデータに変換する。
この伸張処理は、入力データ自体は圧縮されているためデータ量は小さいが、データの処理内容は非常に多くなる。したがって、この伸張処理は、少ないデータを高速に処理可能な特性を有している複数のサブプロセッサ１０を利用して実行する。本実施の形態に係るＳＡＣＤ再生装置３００では、フレームデータＤｆｒｍを、複数のサブプロセッサ１０に分配する分配方式にひとつの特徴を有している。
【００５６】
前提として、ひとつのフレームデータＤｆｒｍについて伸張処理を完了するには、フレーム時間Ｔｆより長い時間を要するものとする。以下、伸張処理に要する時間を、実処理時間Ｔｐｒｃという。説明を簡略化するため、実処理時間Ｔｐｒｃは、フレーム時間Ｔｆの整数ａ倍であるとする。
実処理時間Ｔｐｒｃが、フレーム時間Ｔｆのａ倍であるとき、リアルタイムに再生を行うためには、処理能力をａ倍以上に高める必要があるため、ひとつのフレームデータＤｆｒｍに対して、平均してａ個以上のプロセッサを利用すればよい。以下では、具体的にはａ＝２の場合のタスクの分配処理について説明する。
【００５７】
一度に処理すべきフレームデータＤｆｒｍの個数は最大で４個であるため、もし仮に４個のサブプロセッサ１０ａ〜１０ｄを利用できれば各サブプロセッサ１０にそれぞれのフレームデータＤｆｒｍに対応するタスクを割り当てればよいことになる。この場合、実時間にして４Ｔｆ相当のデータが、Ｔｐｒｃ＝２Ｔｆの時間で処理できるためリアルタイム性の観点から言えば望ましいが、サブプロセッサ１０がすべて占有されるため、その他のタスクが実行できなくなるという問題がある。その他のタスクの一例としては、後述するエフェクト処理が挙げられる。
【００５８】
そこで本実施の形態に係る情報処理装置２００においては、その他のタスクを実行するために、伸張処理に、最大で３個のサブプロセッサ１０ａ〜１０ｃを割り当てる。すなわち、ここで説明するタスク分配技術は、一度に処理すべきフレームデータの最大数ｂ（この例ではｂ＝４である）よりも、使用可能なサブプロセッサ１０の個数ｃ（この例ではｃ＝３）の方が少ないという前提がある。
【００５９】
上述したように、本実施の形態では、アプリケーション９０が、処理すべきタスクが複数ある場合に、どのタスクをどのプロセッサに分配するかを指定できるようになっている。フレームデコード部３１６の機能を実現するためのプログラムモジュールであるフレームデコードモジュール９４は、フレームデータＤｆｒｍを伸張するタスクを、３つのサブプロセッサ１０ａ〜１０ｃに分配する。複数のタスク、すなわち、複数のフレームデータＤｆｒｍごとのデータ伸張のタスクを含んで構成されるフレームデコードモジュール９４は、そのプログラムコード中に、複数のタスクの各プロセッサへの分配規則が予め記述されている。
【００６０】
図４（ａ）〜（ｄ）は、フレームデコードモジュール９４に記述されるタスクの分配規則を模式的に示す図である。タスクの分配処理は、ＯＳ７２の直下で動作するメインプロセッサ２０が行ってもよい。この場合、メインプロセッサ２０は、フレームデコードモジュール９４に関するタスクの実行時に、この分配規則を読み出し、この規則にもとづいて各サブプロセッサ１０ａ〜１０ｃにタスクを分配する。
【００６１】
ここでの圧縮データの伸張処理は、サブプロセッサ１０に分配されるタスクは、同一のプログラムコードにもとづく処理であって、処理対象とするフレームデータＤｆｒｍごとに実行されるタスクである。
図４（ａ）〜（ｄ）に示される分配規則は、所定の処理単位に含まれるフレームデータＤｆｒｍの個数をパラメータとして、それぞれのフレームデータＤｆｒｍを伸張処理するタスクを、３つのサブプロセッサ１０ａ〜１０ｃのいずれに割り当てるかを記述したものとなっている。
【００６２】
図４（ａ）〜（ｄ）はそれぞれ、一度に処理すべきフレームデータ、すなわち、処理すべきタスクの個数Ｍが、１個〜４個の場合の分配規則を示している。この分配規則では、Ｍ＝１〜３の範囲において、原則として、処理すべきタスクを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向、言い換えれば処理の並列度が上がるように優先して分配している。すなわち、図４（ａ）〜（ｃ）に示すように、フレームデータＤｆｒｍの個数が増加するに従って、占有されるプロセッサの個数はそれにともなって増加する。Ｍ＝１〜３の場合、再生時間にしてＭ×Ｔｆ分のデータが、Ｔｐｒｃ＝２Ｔｆの時間で処理される。なお、Ｍ＝１の場合には、再生時間Ｔｆのデータが、Ｔｐｒｃ＝２Ｔｆの時間で処理されることになるが、処理バランスを考慮して最低でＴｆ分のデータをバッファリングして処理することにより、再生に支障をきたすことはない。
【００６３】
この分配規則では、例外として、プロセッサがＮ（Ｎは２以上の整数）個であり、処理すべきデータがＭ（Ｍは自然数）個である場合に、Ｍが、２以上Ｎ以下の整数Ｌを約数として有するとき、分配規則は、Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定される。
具体的にはサブプロセッサ１０がＮ＝３個であり、処理すべきフレームデータはＭ＝４個である。このとき、Ｍ＝４は、約数としてＬ＝２を有している。そこで、図４（ｄ）に示すＭ＝４の場合には、２個のサブプロセッサ１０ａ、１０ｂに、それぞれ２個ずつのタスクを分配し、各サブプロセッサ１０ａ、１０ｂにバッチ処理させる。
【００６４】
もし、この例外規則を設けない場合には、Ｍ＝４個の場合、３つのサブプロセッサ１０のうち、いずれかひとつが、たとえばサブプロセッサ１０ａに２つのタスクが投入され、残りのサブプロセッサ１０ｂ、１０ｃに、１つにタスクが投入されることになる。したがって、各プロセッサが同期処理を行う場合には、サブプロセッサ１０ｂ、１０ｃは、サブプロセッサ１０ａが２つめのタスク処理を実行する間、処理を行わない状況が発生し、プロセッサの利用効率は低下してしまう。すなわち、３個のサブプロセッサ１０が２Ｔｐｒｃ（＝４Ｔｆ）の期間だけ占有されるから、処理コストは、３×２Ｔｐｒｃとなる。これに対して、実質的に処理を行っている時間は、４×Ｔｐｒｃであるから、プロセッサの使用率は、４Ｔｐｒｃ／６Ｔｐｒｃ＝２／３となり、無駄が発生することになる。
【００６５】
これに対して、図４（ｄ）に示すタスク分配を行った場合、２個のサブプロセッサ１０ａ、１０ｂが２Ｔｐｒｃの期間占有されるから処理コストは２×２Ｔｐｒｃ＝４Ｔｐｒｃとなり、実際に処理されるデータ量は、４×Ｔｐｒｃであるから、４Ｔｐｒｃ／４Ｔｐｒｃ＝１の高効率でデータ処理が実行できることになる。
さらに、３つのサブプロセッサ１０ａ〜１０ｃのうち、１個のサブプロセッサは、占有されないため、フレームデコード部３１６以外による別のタスクを並列して処理することが可能となる。たとえば、空きプロセッサを利用して並列処理されるタスクとしては、再生中のオーディオデータにもとづいて映像を生成するタスクなど例示される。
【００６６】
図５は、図３のフレームデコード部３１６の機能ブロック図である。フレームデコード部３１６は、複数のサブプロセッサ１０ａ〜１０ｃと、データ数検出部４００と、タスク分配部４０２と、を含む。
サブプロセッサ１０ａ〜１０ｃは、分配されたフレームデータＤｆｒｍに対して、所定のアルゴリズムにもとづく伸張処理を実行する。伸張処理は、アプリケーション９０のフレームデコードモジュール９４に記述される。データ数検出部４００は、所定の処理単位に含まれるフレームデータＤｆｒｍの個数Ｍを検出する。タスク分配部４０２は、検出したフレームデータＤｆｒｍの個数Ｍをパラメータとして定められた所定の分配規則に従って、各データをサブプロセッサ１０ａ〜１０ｃに分配する。アプリケーション９０のフレームデコードモジュール９４は、メインプロセッサ２０にフレームデータＤｆｒｍの個数の検出を実行させ、データ数検出部４００として機能させる。また、フレームデコードモジュール９４は、メインプロセッサ２０に、フレームデコードモジュール９４の内部に記述された分配規則にもとづき、フレームデータごとのタスクの分配を実行させ、タスク分配部４０２として機能させる。
サブプロセッサ１０ａ〜１０ｃは、ＤＳＴ方式で圧縮されたフレームデータＤｆｒｍを伸張する。伸張されたフレームデータは、ＤＳＤ形式のビットストリームデータであり、サブプロセッサ１０ａ〜１０ｃは、４７０４バイト単位のパケットデータＤｐｋｔとして出力する。このパケットデータＤｐｋｔは、図３に示すデータバッファ３１８に格納される。
【００６７】
このように、本実施の形態に係るＳＡＣＤ再生装置３００において、フレームデコード部３１６は、そのプログラムコードの中に、ＤＳＴ方式で圧縮されたフレームデータＤｆｒｍごとの伸張処理をサブプロセッサに実行させるソースコードと、所定の処理単位に含まれるフレームデータＤｆｒｍの個数Ｍを検出するコードと、フレームデータＤｆｒｍをサブプロセッサに分配するための分配規則を、フレームデータＤｆｒｍの個数Ｍをパラメータとして定めたコードと、分配規則に応じてサブプロセッサにタスクを分配するコードと、を含んでいる。
【００６８】
従来のように、複数のタスクの分配をＯＳに任せた場合、必要なタスク処理が後回しにされる場合が起こりえるため、処理のリアルタイム性が損なわれる場合があった。一方、本実施の形態に係るＳＡＣＤ再生装置３００では、データごとのタスクを、どのプロセッサにより実行するかをアプリケーションプログラムのプログラム時に指定できるため、アプリケーション９０のプログラマは、タスクを完了するまでの時間を確実に見積もることができる。その結果、特にリアルタイム性が要求される処理に好適に利用可能である。
【００６９】
図３に戻り、続くデシメーションフィルタ３２０以降の処理について説明する。デシメーションフィルタ３２０は、パケットデータＤｐｋｔをデータバッファ３１８から読み出す。デシメーションフィルタ３２０は、パケットデータＤｐｋｔの高周波成分を除去し、ダウンサンプリングしてＰＣＭ形式のデータに変換する。デシメーションフィルタ３２０によるフィルタ処理は、畳み込み（convolution）演算、すなわちビットデータの遅延と四則演算が主な処理となるため、処理すべきデータは固定量であってそれほど多くはないが、計算量が多いという性質を有している。したがって、このフィルタ処理は、メインプロセッサ２０よりも、ＳＩＭＤ演算をサポートし、算術演算、ビット演算が高速なサブプロセッサ１０が適しており、アプリケーション９０は、フィルタ処理に関するタスクをサブプロセッサ１０に実行させるようにコーディングされることが望ましい。デシメーションフィルタ３２０は、主としてアプリケーション９０のフィルタモジュール９６およびサブプロセッサ１０によって実現される。
サブプロセッサ１０ｄに設けられた専用のローカルメモリ１２ｄの容量に制限がある場合には、パケットデータＤｐｋｔを分割して、ソフトウェアパイプラインによってバッチ処理させてもよい。
【００７０】
図６（ａ）〜（ｄ）は、デシメーションフィルタ３２０に記述されるタスクの分配規則を模式的に示す図である。タスクの分配処理は、ＯＳ７２の直下で動作するメインプロセッサ２０が行ってもよい。この場合、メインプロセッサ２０は、フィルタモジュール９６に関するタスクの実行時に、この分配規則を読み出し、この規則にもとづいてサブプロセッサ１０ｄにタスクを分配する。
【００７１】
サブプロセッサ１０ｄに分配される処理は、同一のプログラムコードにもとづく処理であって、処理対象とするパケットデータＤｐｋｔごとに実行されるタスクである。
図６（ａ）〜（ｄ）はそれぞれ、所定の処理単位に含まれる一度に処理すべきパケットデータＤｐｋｔ、すなわち、処理すべきタスクの個数Ｐが、１個〜４個の場合の分配規則を示している。この分配規則では、Ｐ＝１〜４の範囲において、処理すべきタスクを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配し、パイプライン方式にてバッチ処理を行う。
【００７２】
すなわち、図６（ａ）〜（ｄ）に示すように、処理されるパケットデータＤｐｋｔの個数Ｐが増加するに従って、サブプロセッサ１０ｄの占有時間が長くなる。バッチ処理可能なデータ数の上限は、リアルタイム性を損ねない範囲に制限することが望ましい。
たとえば、ひとつのパケットデータＤｐｋｔの処理に要する時間をＴｐｒｃ’とし、ひとつのパケットデータＤｐｋｔに対応するオーディオデータの実再生時間がＴｐｌｙであるとすると、ｄ≦Ｔｐｌｙ／Ｔｐｒｃ’を満たすｄ個のパケットデータについてパイプライン方式によるバッチ処理を行うことができる。なお、仮に処理すべきデータ数がｄを超えた場合には、別のサブプロセッサ１０にもタスクを分配してもよい。
【００７３】
図６（ａ）〜（ｄ）に示す分配規則は、アプリケーション９０のアプリケーションコードとして記述されていてもよい。また、図２のＡＦＷ８０やバーチャルＯＳ７８のレイヤの中に、コードとして分配規則を記述しておき、アプリケーション９０のフレームデコードモジュール９４が、この分配規則にもとづくタスク処理を指示してもよい。
【００７４】
このように、デシメーションフィルタ３２０においては、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先してタスクが分配される。その結果、同時並列的に実行されるフレームデコード部３１６の処理に、多くのサブプロセッサ１０を割り当てることが可能となる。
【００７５】
デシメーションフィルタ３２０によるフィルタ処理の結果、ＰＣＭ形式のデータ（以下ＰＣＭデータＤｐｃｍという）が生成される。ＰＣＭデータＤｐｃｍは、第１ＰＣＭバッファ３２２に格納される。
続いて、エフェクタ３２４は、ＰＣＭデータＤｐｃｍに対して、所定のエフェクト処理を実行する。エフェクト処理としては、フェードイン・フェードアウトや、ボリューム制御、ＬチャンネルとＲチャンネルにデータを振り分けるパンニングなどを実行する。
エフェクト処理は、処理内容は単純であるが、扱うデータ量が多くなり一時的に使用するメモリ空間が大きくなる傾向がある。そこで、エフェクタ３２４は、上述した各プロセッサの特性を考慮して、エフェクト処理に関するタスクをメインプロセッサ２０に分配する。この場合、エフェクタ３２４は、主としてメインプロセッサ２０およびエフェクタモジュール９８の協働によって構成される。
ただし、使用可能なサブプロセッサ１０の個数に余裕がある場合には、ＳＩＭＤ方式の命令セットをサポートするサブプロセッサ１０にタスクを割り当て、バッチ処理してもよい。この場合、エフェクタ３２４は、サブプロセッサ１０およびエフェクタモジュール９８で構成される。バッチ処理する場合には、図６（ａ）〜（ｄ）の分配規則を適用してもよい。
【００７６】
エフェクタ３２４によりエフェクト処理されたＰＣＭデータＤｐｃｍは、第２ＰＣＭバッファ３２６に格納される。出力部３２８は、第２ＰＣＭバッファ３２６からＰＣＭデータＤｐｃｍを読み出し、音声出力部１２２に対して出力する。データ出力モジュール９９は、データ出力に関するタスクを、サブプロセッサ１０に分配する。したがって、出力部３２８は、主として、アプリケーション９０のデータ出力モジュール９９およびサブプロセッサ１０により構成される。
【００７７】
以上、実施の形態に係る情報処理装置２００およびＳＡＣＤ再生装置３００について説明した。ＳＡＣＤ再生装置３００を例として実現されるタスクの分配処理技術をまとめると以下の通りである。
【００７８】
実施の形態では、アプリケーションプログラムより下位のレイヤが、アプリケーションプログラムに対して、アプリケーションプログラムで実行されるタスクをどのプロセッサにより分配するかを指定できる機能を提供している点がひとつの特徴である。アプリケーションプログラムのプログラムコード中には、複数のタスクのプロセッサへの分配規則を記述し、アプリケーションが各タスクの分配先を指定する構成となっている。
その結果、アプリケーションプログラムのプログラマは、各タスクをどのプロセッサに割り当てるかを、処理内容なプロセッサの特性に応じて、適切に設定可能となっている。実施の形態においては、アプリケーションプログラムにより処理されるタスクとして、「データ読出処理」、「フレームデコード処理」、「デジタルフィルタ処理」、「エフェクタ処理」、「データ出力処理」が例示されている。これらのタスクは、その内容に応じて、サブプロセッサ１０もしくはメインプロセッサ２０のいずれで実行すべきかが、アプリケーション９０により指定されている。
【００７９】
さらに、実施の形態では、複数のデータに対して同一の処理を行う場合、たとえば「フレームデコード処理」や、「デジタルフィルタ処理」においては、複数のデータごとのタスクの複数のサブプロセッサ１０に対する分配規則が規定される。
【００８０】
図７は、第１、第２のタスクの分配方式を模式的に示す図である。図７のマトリクスの横軸は、占有されるプロセッサの個数に対応し、縦軸は、各プロセッサの占有時間を示している。図７は、３個のプロセッサにタスクを割り当てる場合の規則である。第１の分配方式では、処理すべきタスクの数が増加すると、アラビア数字に示す規則にしたがって、横軸方向にタスクを分配する。つまり、第１の方式では、処理すべきデータごとのタスクを、各プロセッサの占有時間が短くなるように、プロセッサの個数方向、言い換えれば処理の並列度が上がるように優先して分配する。図４（ａ）〜（ｄ）に示すように、「フレームデコード処理」では、第１の方式に準拠してタスクの分配を行っている。第１の方式における横軸の長さは、使用可能なプロセッサの個数に応じて規定される。
【００８１】
第２の分配方式では、処理すべきタスクの数が増加すると、ローマ数字に示す規則に従って時間軸方向にタスクを分配する。つまり、第２の方式では、処理すべきデータごとのタスクを、占有されるプロセッサの個数が少なくなるように、時間軸方向に優先して分配している。図６（ａ）〜（ｄ）に示すように、「デジタルフィルタ処理」では、第２の方式に準拠してタスクの分配を行っている。第２の方式における時間軸（縦軸）の長さ、つまりひとつのプロセッサにいくつのタスクをバッチ処理させるかについては、処理時間に応じて決めればよい。図７の例ではひとつのプロセッサに３つのタスクをバッチ処理させる例が示されている。
【００８２】
実施の形態では、プロセッサの利用効率についても着目した。たとえば図７に示される第１の分配規則に従った場合、４個のタスクを処理する場合、３つのプロセッサのうち、１個に対して２つのタスクが分配され、残りの２つのプロセッサには、１つのタスクしか分配されない。したがって、残りの２つのプロセッサは、アラビア数字の５、６で示される領域が空き領域となってしまう。このようなプロセッサの無駄な占有を防止するため、「フレームデコード処理」では、処理すべきデータの個数Ｍが約数Ｌを有する場合に、分配規則は、Ｍ個のデータに対応したＭ個のタスクを、Ｌ個のプロセッサに並列に分配するように規定している。すなわち、図７において、アラビア数字１、２、３’、４’で示される形態でプロセッサが占有される。この場合、２つのプロセッサが等しい時間占有され、残りの１つのプロセッサは空きとなるため、他の処理を実行させることができる。
【００８３】
「フレームデコード処理」、「デジタルフィルタ処理」における分配規則は、所定の処理単位に含まれるデータの個数をパラメータとして、それぞれのデータを処理するタスクを複数のプロセッサのいずれに割り当てるかを記述したものとなっている。すなわちｉ番目のデータが、どのプロセッサに割り当てられるかが、１対１で対応づけられている。
ただし、タスクの分配規則は、図７に示される第１、第２の方式に限定されるものではなく、アプリケーションプログラムにおいて自由に規定すればよい。
【００８４】
また、第１、第２の分配方式を、アプリケーションレベルで規定するのではなく、システムレベル、つまりＯＳやＶＯＳ、あるいはＡＦＷなどのアプリケーションプログラムより下位のレイヤで規定してもよい。つまり、アプリケーション９０より下位のレイヤであるコアレイヤ７０において、第１の方式と、第２の方式が切り替え可能となる。第１、第２の分配規則を、ライブラリや関数、オブジェクトとして記述し、ＯＳやＶＯＳ、ＡＦＷにより提供してもよい。この場合、アプリケーションプログラムのコードには、タスクの種類ごとに、第１、第２の分配方式のいずれで処理すべきかを記述すればよいため、アプリケーションの開発効率を改善することができる。実施の形態に当てはめれば、「フレームデコード処理」を規定するフレームデコードモジュール９４には、コアレイヤ７０に対して第１の方式を指示するコードを記述すればよく、「デジタルフィルタ処理」を規定するフィルタモジュール９６には、コアレイヤ７０に対して第２の方式を指示するコードを記述すればよい。
この場合、アプリケーションのプログラマは、処理内容に応じて２つの分配方式を選択できるため、ソフトウェアの設計の自由度を高めることができる。
【００８５】
以上、本発明を実施の形態をもとに説明した。この実施の形態はあくまで例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８６】
実施の形態では、ＳＡＣＤ再生を例として、タスクの分配技術について説明したが、タスクの分配技術は、コンピュータを用いたさまざまなシミュレーション、画像処理、その他さまざまな用途に利用することができる。
【図面の簡単な説明】
【００８７】
【図１】実施の形態に係る情報処理装置の機能ブロック図である。
【図２】図１の情報処理装置をソフトウェアの観点から表現したブロック図である。
【図３】図１、図２に示す情報処理装置により実現されるＳＡＣＤ再生装置の構成を示すブロック図である。
【図４】図４（ａ）〜（ｄ）は、図２のフレームデコードモジュールに記述されるタスクの分配規則を模式的に示す図である。
【図５】図３のフレームデコード部の機能ブロック図である。
【図６】図６（ａ）〜（ｄ）は、図２のフィルタモジュールに記述されるタスクの分配規則を模式的に示す図である。
【図７】第１、第２のタスクの分配方式を模式的に示す図である。
【符号の説明】
【００８８】
２００  情報処理装置、  １００  統括制御部、  １０２  メインメモリ、  １０  サブプロセッサ、  １２  ローカルメモリ、  ２０  メインプロセッサ、  ２２  メモリコントローラ、  ２４  Ｉ／Ｏ制御部、  ２６  バス、  ５０  ハードウェアレイヤ、  ６０  ソフトウェアレイヤ、  ７０  コアレイヤ、  ７２  ＯＳ、  ７４  ライブラリ、  ７６  デバイスアクセスレイヤ、  ７８  バーチャルＯＳ、  ８０  ＡＦＷ、  ９０  アプリケーション、  ９２  データ読出モジュール、  ９４  フレームデコードモジュール、  ９６  フィルタモジュール、  ９８  エフェクタモジュール、  ９９  データ出力モジュール、  １１０  メディアプロセッサ、  １１２  サウスブリッジ、  １１４  ディスク装置、  １２０  表示装置、  １２２  音声出力部、  ３００  ＳＡＣＤ再生装置、  ３０２  デバイスドライバ、  ３０４  暗号復号器、  ３１０  再生処理部、  ３１２  データ読出部、  ３１４  オーディオフレームバッファ、  ３１６  フレームデコード部、  ３１８  データバッファ、  ３２０  デシメーションフィルタ、  ３２２  第１ＰＣＭバッファ、  ３２４  エフェクタ、  ３２６  第２ＰＣＭバッファ、  ３２８  出力部。
【図１】
2008117313.tif 000003
【図２】
2008117313.tif 000004
【図３】
2008117313.tif 000005
【図４】
2008117313.tif 000006
【図５】
2008117313.tif 000007
【図６】
2008117313.tif 000008
【図７】
2008117313.tif 000009