(57)【要約】【課題】OSの制御なしで、マルチプロセッサのリソースをプロセッサ毎に割り当てる。【解決手段】メインプログラムを実行するサブプロセッサユニット１２−１が、分散並列処理を実行すると判定した場合、DMAC５４−１は、分散並列処理を行うサブプログラムをメインメモリ１４に記憶させて、さらに、メインメモリ１４に記憶されているステータスを管理するテーブルに格納されているステータスフラグを実行希望に変更する。メインプログラムを実行するサブプロセッサユニット１２−１以外のサブプロセッサユニットが、メインメモリ１４から、実行希望であるステータスフラグに対応したサブプログラムをロードし、ロードしたサブプログラムを実行することで分散並列処理を行うことができるので、OSの制御なしで、マルチプロセッサのリソースをプロセッサ毎に割り当てることができる。本発明は、制御システムに適用できる。【選択図】図１
2006024124.tif 000002
【特許請求の範囲】
【請求項１】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する第１の制御装置、および前記第１の制御装置と接続され、分散処理を実行する第２の制御装置からなる制御システムにおいて、
前記第１の制御装置は、
前記メインプログラムを実行する第１の処理手段と、
前記第２のプログラムの記憶装置への記憶を制御する記憶制御手段と、
前記第２のプログラムの実行を要求しているか否かを示す情報である状態情報を前記記憶装置に設定する設定手段と、
前記第２の制御装置から、前記第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する第１の判定手段と
を含み、
前記第１の処理手段は、さらに、前記第１の判定手段により前記分散処理通知が通知されたと判定された場合、前記メインプログラムのうち、前記第１のプログラムのみを実行し、
前記第２の制御装置は、
前記記憶装置に記憶された前記状態情報が前記第２のプログラムの実行の要求を示しているか否かを判定する第２の判定手段と、
前記第２の判定手段により前記第２のプログラムの実行を要求していると判定された場合、前記記憶装置から、前記第２のプログラムを取得する取得手段と、
前記取得手段により前記第２のプログラムを取得したとき、前記分散処理通知を前記第１の制御装置に通知する分散処理通知手段と、
前記取得手段により取得した前記第２のプログラムを実行する第２の処理手段と
を含むことを特徴とする制御システム。
【請求項２】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する制御装置において、
前記メインプログラムを実行する処理手段と、
前記第２のプログラムの記憶装置への記憶を制御する記憶制御手段と、
前記第２のプログラムの実行を要求しているか否かを示す情報である状態情報を前記記憶装置に設定する設定手段と、
前記第１の制御装置と接続され、前記分散処理を実行する他の制御装置から、前記第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定手段と
を含み、
前記処理手段は、前記判定手段により前記分散処理通知が通知されたと判定された場合、前記メインプログラムのうち、前記第１のプログラムのみを実行する
ことを特徴とする制御装置。
【請求項３】
前記記憶制御手段は、前記第２のプログラムが記憶されている領域であって、前記記憶装置における領域を示す情報の前記記憶装置への記憶を制御する
ことを特徴とする請求項２に記載の制御装置。
【請求項４】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する制御装置の制御方法において、
前記メインプログラムを実行する処理ステップと、
前記第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、
前記第２のプログラムの実行を要求しているか否かを示す情報である状態情報を前記記憶装置に設定する設定ステップと、
前記第１の制御装置と接続され、前記分散処理を実行する他の制御装置から、前記第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップと
を含み、
前記処理ステップにおいては、前記判定ステップにより前記分散処理通知が通知されたと判定された場合、前記メインプログラムのうち、前記第１のプログラムのみが実行される
ことを特徴とする制御方法。
【請求項５】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する制御処理用のプログラムであって、
前記メインプログラムを実行する処理ステップと、
前記第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、
前記第２のプログラムの実行を要求しているか否かを示す情報である状態情報を前記記憶装置に設定する設定ステップと、
前記第１の制御装置と接続され、前記分散処理を実行する他の制御装置から、前記第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップと
を含み、
前記処理ステップにおいては、前記判定ステップにより前記分散処理通知が通知されたと判定された場合、前記メインプログラムのうち、前記第１のプログラムのみが実行される
ことを特徴とするコンピュータが読み取り可能なプログラムが記録されている記録媒体。
【請求項６】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する制御装置のコンピュータに、制御処理を行なわせるプログラムにおいて、
前記メインプログラムを実行する処理ステップと、
前記第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、
前記第２のプログラムの実行を要求しているか否かを示す情報である状態情報を前記記憶装置に設定する設定ステップと、
前記第１の制御装置と接続され、前記分散処理を実行する他の制御装置から、前記第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップと
を含み、
前記処理ステップにおいては、前記判定ステップにより前記分散処理通知が通知されたと判定された場合、前記メインプログラムのうち、前記第１のプログラムのみが実行される
ことを特徴とするプログラム。
【請求項７】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する他の制御装置と接続され、分散処理を実行する制御装置において、
記憶装置に記憶された状態情報が前記第２のプログラムの実行の要求を示しているか否かを判定する判定手段と、
前記判定手段により前記第２のプログラムの実行を要求していると判定された場合、前記記憶装置から、前記第２のプログラムを取得する取得手段と、
前記取得手段により前記第２のプログラムを取得したとき、前記第２のプログラムの実行の開始を示す通知である分散処理通知を前記他の制御装置に通知する分散処理通知手段と、
前記取得手段により取得した前記第２のプログラムを実行する処理手段と
を含むことを特徴とする制御装置。
【請求項８】
前記取得手段は、前記判定手段により前記第２のプログラムの実行を要求していると判定した場合、前記第２のプログラムが記憶されている領域であって、前記記憶装置における領域を示す情報を基に、前記第２のプログラムを取得する
ことを特徴とする請求項７に記載の制御装置。
【請求項９】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する他の制御装置と接続され、分散処理を実行する制御装置の制御方法において、
記憶装置に記憶された状態情報が前記第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、
前記判定ステップにより前記第２のプログラムの実行を要求していると判定された場合、前記記憶装置から、前記第２のプログラムを取得する取得ステップと、
前記取得ステップにより前記第２のプログラムを取得したとき、前記第２のプログラムの実行の開始を示す通知である分散処理通知を前記他の制御装置に通知する分散処理通知ステップと、
前記取得ステップにより取得した前記第２のプログラムを実行する処理ステップと
を含むことを特徴とする制御方法。
【請求項１０】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する他の制御装置と接続され、分散処理を実行する制御処理用のプログラムであって、
記憶装置に記憶された状態情報が前記第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、
前記判定ステップにより前記第２のプログラムの実行を要求していると判定された場合、前記記憶装置から、前記第２のプログラムを取得する取得ステップと、
前記取得ステップにより前記第２のプログラムを取得したとき、前記第２のプログラムの実行の開始を示す通知である分散処理通知を前記他の制御装置に通知する分散処理通知ステップと、
前記取得ステップにより取得した前記第２のプログラムを実行する処理ステップと
を含むことを特徴とするコンピュータが読み取り可能なプログラムが記録されている記録媒体。
【請求項１１】
第１のプログラムおよび第２のプログラムからなるメインプログラムを実行する他の制御装置と接続され、分散処理を実行する制御装置のコンピュータに、制御処理を行なわせるプログラムにおいて、
記憶装置に記憶された状態情報が前記第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、
前記判定ステップにより前記第２のプログラムの実行を要求していると判定された場合、前記記憶装置から、前記第２のプログラムを取得する取得ステップと、
前記取得ステップにより前記第２のプログラムを取得したとき、前記第２のプログラムの実行の開始を示す通知である分散処理通知を前記他の制御装置に通知する分散処理通知ステップと、
前記取得ステップにより取得した前記第２のプログラムを実行する処理ステップと
を含むことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は制御システム、制御装置および方法、記録媒体、並びにプログラムに関し、特に、分散並列処理を行うことができるようにした制御システム、制御装置および方法、記録媒体、並びにプログラムに関する。
【背景技術】
【０００２】
マルチプロセッサを用いた技術が一般的に普及しつつある。マルチプロセッサとは、一般に、複数のプロセッサにより構成される装置またはシステムをいう。マルチプロセッサでは、ソフトウェアの実行時において、OS（Operating System）の制御に基づいて、プロセッサ毎に、スレッドまたはプロセスを割り当てることができる。これにより、プロセッサのリソースに依存しないアプリケーションプログラムの実装が可能になっている。
【０００３】
また、スレッドまたはプロセス単位ではなく、特定のアプリケーションプログラムが、１または複数のプロセッサを独占して使用する形態も想定できる。この場合にも、OSの制御に基づいて、特定のプロセッサに特化してパフォーマンスが最大となるように最適化されているアプリケーションプログラムを実行することができる。
【０００４】
さらに、複数のプロセッサを具備し、複数のプロセッサが、単一のOSによって制御されるマルチプロセッサシステムにおいて、プロセスを管理するプロセス管理テーブルに従って、OSのプロセススケジューラが、プロセスに何れかのプロセッサを割り当てるプロセススケジューリング方式によって、同一のグループに属するプロセスは、同一のプロセッサで実行するマルチプロセッサシステムもある（例えば、特許文献１参照）。
【０００５】
【特許文献１】特開平３−１１３５６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記のマルチプロセッサを用いた場合、プロセッサ毎に、アプリケーションプログラムを実行することはできるが、OSの制御なしでは、マルチプロセッサのリソース状況に応じて、アプリケーションが独占できるプロセッサを動的に割り当てることが困難となっていた。
【０００７】
本発明はこのような状況に鑑みてなされたものであり、OSの制御なしで、アプリケーションプログラムに対して、マルチプロセッサのリソースを、プロセッサ毎に動的に割り当てることができるようにするものである。
【課題を解決するための手段】
【０００８】
本発明の制御システムは、第１の制御装置が、メインプログラムを実行する第１の処理手段と、第２のプログラムの記憶装置への記憶を制御する記憶制御手段と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定手段と、第２の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する第１の判定手段とを含み、第１の処理手段は、さらに、第１の判定手段により分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行し、第２の制御装置が、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する第２の判定手段と、第２の判定手段により第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得手段と、取得手段により第２のプログラムを取得したとき、分散処理通知を第１の制御装置に通知する分散処理通知手段と、取得手段により取得した第２のプログラムを実行する第２の処理手段とを含むことを特徴とする。
【０００９】
本発明の第１の制御装置は、メインプログラムを実行する処理手段と、第２のプログラムの記憶装置への記憶を制御する記憶制御手段と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定手段と、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定手段とを含み、処理手段は、判定手段により分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行することを特徴とする。
【００１０】
記憶制御手段は、第２のプログラムが記憶されている領域であって、記憶装置における領域を示す情報の記憶装置への記憶を制御することを特徴とする。
【００１１】
本発明の第１の制御方法は、メインプログラムを実行する処理ステップと、第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定ステップと、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップとを含み、処理ステップにおいては、判定ステップにより分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみが実行されることを特徴とする。
【００１２】
本発明の第１の記録媒体のプログラムは、メインプログラムを実行する処理ステップと、第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定ステップと、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップとを含み、処理ステップにおいては、判定ステップにより分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみが実行されることを特徴とする。
【００１３】
本発明の第３のプログラムは、メインプログラムを実行する処理ステップと、第２のプログラムの記憶装置への記憶を制御する記憶制御ステップと、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定ステップと、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップとを含み、処理ステップにおいては、判定ステップにより分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみが実行されることを特徴とする。
【００１４】
本発明の第２の制御装置は、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定手段と、判定手段により第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得手段と、取得手段により第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知手段と、取得手段により取得した第２のプログラムを実行する処理手段とを含むことを特徴とする。
【００１５】
取得手段は、判定手段により第２のプログラムの実行を要求していると判定した場合、第２のプログラムが記憶されている領域であって、記憶装置における領域を示す情報を基に、第２のプログラムを取得することを特徴とする。
【００１６】
本発明の第２の制御方法は、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、判定ステップにより第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得ステップと、取得ステップにより第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知ステップと、取得ステップにより取得した第２のプログラムを実行する処理ステップとを含むことを特徴とする。
【００１７】
本発明の第２の記録媒体のプログラムは、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、判定ステップにより第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得ステップと、取得ステップにより第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知ステップと、取得ステップにより取得した第２のプログラムを実行する処理ステップとを含むことを特徴とする。
【００１８】
本発明の第４のプログラムは、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定ステップと、判定ステップにより第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得ステップと、取得ステップにより第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知ステップと、取得ステップにより取得した第２のプログラムを実行する処理ステップとを含むことを特徴とする。
【００１９】
本発明の制御システムにおいては、第１の制御装置が、メインプログラムを実行する第１の処理手段と、第２のプログラムの記憶装置への記憶を制御し、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定し、第２の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定し、第１の処理手段は、さらに、分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行し、第２の制御装置が、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定し、第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得し、第２のプログラムを取得したとき、分散処理通知を第１の制御装置に通知し、取得した第２のプログラムを実行する。
【００２０】
本発明の第１の制御装置および方法、第１の記録媒体、並びに第１のプログラムにおいては、メインプログラムを実行する処理手段と、第２のプログラムの記憶装置への記憶を制御し、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定し、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定し、分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行する。
【００２１】
本発明の第２の制御装置および方法、第２の記録媒体、並びに第２のプログラムにおいては、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定し、第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得し、第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知し、取得した第２のプログラムを実行する。
【発明の効果】
【００２２】
本発明によれば、アプリケーションプログラムをマルチプロセッサで実行することができる。また、本発明によれば、OSの管理なしで、アプリケーションプログラムに対して、マルチプロセッサのリソースを、複数のプロセッサに対して動的に割り当てることができるようになる。さらに、そのとき、同一のシステム内であれば、OSに管理されているアプリケーションプログラムとも同居することもできる。
【００２３】
また、本発明によれば、プロセッサが、適宜、自分でプログラムまたは各種のデータの転送を行うので、OSなど他の処理を実行しているプロセッサに対して、余計な負荷を与えることがなく、プロセッサ単位で処理を割り当てるので、プロセッサ固有の命令の実行、またはプロセッサコア若しくはレジスタなどをアプリケーションプログラムが最大限に利用することができる。
【発明を実施するための最良の形態】
【００２４】
以下に本発明の最良の形態を説明するが、開示される発明と実施の形態との対応関係を例示すると、次のようになる。本明細書中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応していないものであることを意味するものではない。
【００２５】
さらに、この記載は、明細書に記載されている発明の全てを意味するものではない。換言すれば、この記載は、明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現し、追加される発明の存在を否定するものではない。
【００２６】
本発明によれば、制御システムが提供される。この制御システム（例えば、図１の制御システム１）は、第１の制御装置（例えば、図１のサブプロセッサユニット１２−１）は、メインプログラムを実行する第１の処理手段（例えば、図３のプログラム処理部２１１）と、第２のプログラムの記憶装置への記憶を制御する記憶制御手段（例えば、図３のプログラム記憶制御部２１２）と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定手段（例えば、図３のステータスフラグ設定部２１３）と、第２の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する第１の判定手段（例えば、図３の分散フラグ判定部２１５）とを含み、第１の処理手段は、さらに、第１の判定手段により分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行し、第２の制御装置（例えば、図１のサブプロセッサユニット１２−２）が、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する第２の判定手段（例えば、図４のステータスフラグ判定部２６４）と、第２の判定手段により第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得手段（例えば、図４のプログラム取得部２６１）と、取得手段により第２のプログラムを取得したとき、分散処理通知を第１の制御装置に通知する分散処理通知手段（例えば、図４の分散フラグ通知部２６５）と、取得手段により取得した第２のプログラムを実行する第２の処理手段（例えば、図４のプログラム処理部２６２）とを含む。
【００２７】
本発明によれば、制御装置が提供される。この制御装置（例えば、図１のサブプロセッサユニット１２−１）は、メインプログラムを実行する処理手段（例えば、図３のプログラム処理部２１１）と、第２のプログラムの記憶装置への記憶を制御する記憶制御手段（例えば、図３のプログラム記憶制御部２１２）と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定手段（例えば、図３のステータスフラグ設定部２１３）と、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定手段（例えば、図３の分散フラグ判定部２１５）とを含み、処理手段は、判定手段により分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行することができる。
【００２８】
記憶制御手段は、第２のプログラムが記憶されている領域であって、記憶装置における領域を示す情報の記憶装置への記憶を制御することができる。
【００２９】
本発明によれば、制御方法が提供される。この制御方法は、メインプログラムを実行する処理ステップ（例えば、図８のステップＳ２０６乃至ステップＳ２０９の処理）と、第２のプログラムの記憶装置への記憶を制御する記憶制御ステップ（例えば、図８のステップＳ２０３の処理）と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定ステップ（例えば、図９のステップＳ２５５の処理）と、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップ（例えば、図８のステップＳ２０５の処理）とを含み、処理ステップにおいては、判定ステップにより分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみが実行される。
【００３０】
本発明によれば、プログラムが提供される。このプログラムは、メインプログラムを実行する処理ステップ（例えば、図８のステップＳ２０６乃至ステップＳ２０９の処理）と、第２のプログラムの記憶装置への記憶を制御する記憶制御ステップ（例えば、図８のステップＳ２０３の処理）と、第２のプログラムの実行を要求しているか否かを示す情報である状態情報を記憶装置に設定する設定ステップ（例えば、図９のステップＳ２５５の処理）と、第１の制御装置と接続され、分散処理を実行する他の制御装置から、第２のプログラムの実行の開始を示す通知である分散処理通知が通知されたか否かを判定する判定ステップ（例えば、図８のステップＳ２０５の処理）とを含み、処理ステップにおいては、判定ステップにより分散処理通知が通知されたと判定された場合、メインプログラムのうち、第１のプログラムのみを実行することをコンピュータに実行させる。
【００３１】
制御処理のプログラムは、記録媒体（例えば、図１の磁気ディスク３１）に記録することができる。
【００３２】
本発明によれば、制御装置が提供される。この制御装置（例えば、図１のサブプロセッサユニット１２−２）は、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定手段（例えば、図４のステータスフラグ判定部２６４）と、判定手段により第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得手段（例えば、図４のプログラム取得部２６１）と、取得手段により第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知手段（例えば、図４の分散フラグ通知部２６５）と、取得手段により取得した第２のプログラムを実行する処理手段（例えば、図４のプログラム処理部２６２）とを含む。
【００３３】
取得手段は、判定手段により第２のプログラムの実行を要求していると判定した場合、第２のプログラムが記憶されている領域であって、記憶装置における領域を示す情報を基に、第２のプログラムを取得することができる。
【００３４】
本発明によれば、制御方法が提供される。この制御方法は、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定ステップ（例えば、図１０のステップＳ３０２の処理）と、判定ステップにより第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得ステップ（例えば、図１０のステップＳ３０３の処理）と、取得ステップにより第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知ステップ（例えば、図１０のステップＳ３０８の処理）と、取得ステップにより取得した第２のプログラムを実行する処理ステップ（例えば、図１０のステップＳ３０９乃至ステップＳ３１１の処理）とを含む。
【００３５】
本発明によれば、プログラムが提供される。このプログラムは、記憶装置に記憶された状態情報が第２のプログラムの実行の要求を示しているか否かを判定する判定ステップ（例えば、図１０のステップＳ３０２の処理）と、判定ステップにより第２のプログラムの実行を要求していると判定された場合、記憶装置から、第２のプログラムを取得する取得ステップ（例えば、図１０のステップＳ３０３の処理）と、取得ステップにより第２のプログラムを取得したとき、第２のプログラムの実行の開始を示す通知である分散処理通知を他の制御装置に通知する分散処理通知ステップ（例えば、図１０のステップＳ３０８の処理）と、取得ステップにより取得した第２のプログラムを実行する処理ステップ（例えば、図１０のステップＳ３０９乃至ステップＳ３１１の処理）とをコンピュータに実行させる。
【００３６】
制御処理のプログラムは、記録媒体（例えば、図１の磁気ディスク３１）に記録することができる。
【００３７】
以下、図面を参照しながら本発明の実施の形態について説明する。
【００３８】
図１は、本発明を適用したパーソナルコンピュータ１の一実施の形態を示すブロック図である。
【００３９】
パーソナルコンピュータ１は、内部に複数のプロセッサを備える情報処理装置の一例である。以下、パーソナルコンピュータ１を例にして説明するが、これに限らず、本発明は、例えば、ノート型のパーソナルコンピュータなどに適用することができる。また、パーソナルコンピュータ１は、複数のプロセッサから構成される制御システムであるともいえる。
【００４０】
メインプロセッサユニット１１、サブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎ、メインメモリ１４、ROM１５、BIOS（Basic Input Output System）１６を記憶しているメモリ、および入出力インターフェイス１７は、バス１３を介して、相互に接続されている。
【００４１】
メインプロセッサユニット１１は、パーソナルコンピュータ１が行う処理のうち、主となる処理を実行する。例えば、メインプロセッサユニット１１は、後述するBIOS１６によってロードされたOSを実行する。
【００４２】
メインプロセッサユニット１１は、プロセッサコア４１、レジスタ４２、ローカルストレージ４３、およびDMAC（Direct Memory Access Controller）４４を含む。
【００４３】
プロセッサコア４１は、例えば、命令発行器または演算器などから構成され、算術演算若しくは論理演算などの演算処理、または装置を制御する制御処理などを行う。例えば、プロセッサコア４１は、メインメモリ１４または後述するローカルストレージ４３に記憶されているプログラムを基に、各種の処理を実行する。
【００４４】
レジスタ４２は、例えば、プロセッサコア４１が実行する例えば、演算処理または制御処理などに用いる一時的な記憶領域である。
【００４５】
ローカルストレージ４３は、後述するDMAC４４の制御に基づいて、メインメモリ１４からロードされたプログラムを記憶する。
【００４６】
DMAC４４は、プロセッサコア４１の制御に基づいて、メインメモリ１４に記憶されているプログラムまたは各種のデータへのアクセスを管理する。
【００４７】
サブプロセッサユニット１２−１は、パーソナルコンピュータ１が行う処理のうち、主となる処理の一部を実行する。例えば、サブプロセッサユニット１２−１は、後述するBIOS１６がロードしたプログラムを実行する。
【００４８】
サブプロセッサユニット１２−１は、プロセッサコア５１−１、レジスタ５２−１、ローカルストレージ５３−１、およびDMAC５４−１から構成される。
【００４９】
プロセッサコア５１−１は、例えば、命令発行器または演算器などから構成され、算術演算若しくは論理演算などの演算処理、または装置を制御する制御処理などを行う。例えば、プロセッサコア５１−１は、後述するローカルストレージ５３−１に記憶されているプログラムを基に、各種の処理を実行する。
【００５０】
レジスタ５２−１は、プロセッサコア５１−１が実行する、例えば、演算処理または制御処理などに用いる一時的な記憶領域である。
【００５１】
ローカルストレージ５３−１は、後述するDMAC５４−１の制御に基づいて、メインメモリ１４からロードされたプログラムを記憶する。例えば、ローカルストレージ５３−１は、DMAC５４−１の制御に基づいて、メインメモリ１４からロードされた分散並列処理用のプログラムを記憶する。
【００５２】
DMAC５４−１は、プロセッサコア５１−１の制御に基づいて、メインメモリ１４に記憶されているプログラムまたは各種データへのアクセスを管理する。
【００５３】
サブプロセッサユニット１２−２乃至サブプロセッサユニット１２−Ｎのそれぞれは、パーソナルコンピュータ１が行う処理のうち、主となる処理の一部を実行する。例えば、サブプロセッサユニット１２−２乃至サブプロセッサユニット１２−Ｎのそれぞれは、後述するBIOS１６がロードしたプログラムを実行する。
【００５４】
サブプロセッサユニット１２−２乃至サブプロセッサユニット１２−Ｎのそれぞれは、プロセッサコア５１−２乃至プロセッサコア５１−Ｎ、レジスタ５２−２乃至レジスタ５２−Ｎ、ローカルストレージ５３−２乃至ローカルストレージ５３−Ｎ、およびDMAC５４−２乃至DMAC５４−Ｎのそれぞれから構成される。
【００５５】
プロセッサコア５１−２乃至プロセッサコア５１−Ｎのそれぞれは、例えば、命令発行器または演算器などから構成され、算術演算若しくは論理演算などの演算処理、または装置を制御する制御処理などを行う。
【００５６】
レジスタ５２−２乃至レジスタ５２−Ｎのそれぞれは、プロセッサコア５１−２乃至プロセッサコア５１−Ｎのそれぞれが実行する、例えば、演算処理または制御処理などに用いる一時的な記憶領域である。
【００５７】
ローカルストレージ５３−２乃至ローカルストレージ５３−Ｎのそれぞれは、後述するDMAC５４−２乃至DMAC５４−Ｎのそれぞれの制御に基づいて、メインメモリ１４からロードされたプログラムを記憶する。
【００５８】
DMAC５４−２乃至DMAC５４−Ｎのそれぞれは、プロセッサコア５１−２乃至プロセッサコア５１−Ｎのそれぞれの制御に基づいて、メインメモリ１４に記憶されているプログラムまたは各種データへのアクセスを管理する。
【００５９】
メインメモリ１４は、例えば、RAM（Random Access Memory）から構成され、メインプロセッサユニット１１またはサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎが実行する各種のプログラムまたはデータなどを適宜記憶する。また、メインメモリ１４は、１つに限らず、複数を設けるようにしてもよい（図示せず）。
【００６０】
例えば、メインメモリ１４は、サブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎのいずれかが実行する分散処理用のプログラム、およびステータフラグ管理テーブルを記憶している。
【００６１】
ROM（Read Only Memory）１５は、メインプロセッサユニット１１またはサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎが実行するプログラムや各種のデータを記録する。
【００６２】
メインプロセッサユニット１１およびサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Nには、バス１３を介して、入出力インターフェイス１７が接続されている。入出力インターフェイス１７には、キーボード、マウス、マイクロフォンなどからなる入力部１８、ディスプレイ、スピーカなどよりなる出力部１９が接続されている。例えば、メインプロセッサユニット１１およびサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Nは、入力部１８から入力される指令に対して各種の処理を実行する。そして、メインプロセッサユニット１１およびサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Nは、処理の結果得られた画像や音声などを出力部１９に出力する。
【００６３】
BIOS１６は、例えば、ROM１５などに記憶される、パーソナルコンピュータ１の基本動作命令を集めたプログラム群である。BIOS１６は、パーソナルコンピュータ１の起動時に所定の処理を実行したり、OSまたはアプリケーションプログラムと周辺機器との間でのデータの受け渡し（入出力）を制御したりする。例えば、BIOS１６は、パーソナルコンピュータ１の起動時に、OSをメインプロセッサユニット１１にロードする。
【００６４】
入出力インターフェイス１７に接続されている記録部２０は、例えば、ハードディスクなどで構成され、メインプロセッサユニット１１およびサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Nが実行するプログラムや各種のデータを記録する。
【００６５】
通信部２１は、例えば、インターネット、その他のネットワーク、または通信媒体を介して外部の装置と通信をする。また、通信部２１を介してプログラムを取得し、取得したプログラムを記録部２０に記録してもよい。
【００６６】
入出力インターフェイス１７に接続されているドライブ２２は、磁気ディスク３１、光ディスク３２、光磁気ディスク３３、または半導体メモリ３４などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて記録部２０に転送され、記録され、メインプロセッサユニット１１またはサブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎのいずれかに実行される。
【００６７】
以下、サブプロセッサユニット１２−１乃至サブプロセッサユニット１２−Ｎを個々に区別する必要がないとき、単に、サブプロセッサユニット１２と称する。また、プロセッサコア５１−１乃至プロセッサコア５１−Ｎを個々に区別する必要がないとき、単に、プロセッサコア５１と称する。さらに、レジスタ５２−１乃至レジスタ５２−Ｎを個々に区別する必要がないとき、単に、レジスタ５２と称する。さらにまた、ローカルストレージ５３−１乃至ローカルストレージ５３−Ｎを個々に区別する必要がないとき、単に、ローカルストレージ５３と称する。
【００６８】
図２は、本発明を適用したパーソナルコンピュータ１により実現される機能の構成例を示すブロック図である。この機能により、本実施例において、パーソナルコンピュータ１は、MPEG（Moving Picture Experts Group）のデコードの処理を実行する。
【００６９】
以下、本発明の分散並列処理の例として、MPEGのデコードの処理を説明する。
【００７０】
MPEGのデコードの処理は、ビットストリームに対して、VLD（Variable Length Decode）、IQ（Inverse Quantization）、IDCT（Inverse Discrete Cosign Transform）、およびMC（Motion Compensation）の処理を順次実行することで、ビットストリームを画像データにデコードする。
【００７１】
また、以下、分散並列処理において、VLD、IQ、IDCT、およびMCの処理、または、VLD、IQ、およびIDCTの処理を実行させるプログラムをデコードメインプログラムと称し、MCの処理を実行させるプログラムをデコードサブプログラムと称する。
【００７２】
すなわち、デコードメインプログラムは、VLD処理部１０１、IQ処理部１０２、IDCT処理部１０３、およびMC処理部１０４を含み、さらに、IDCTの処理結果とデコードサブプログラムが実行するMCの処理結果とを合成するデータ合成部１０５も含む。一方、デコードサブプログラムは、MC処理部１０４のみを含む。
【００７３】
換言すれば、デコードサブプログラムは、デコードメインプログラムの一部を含むプログラムである。
【００７４】
なお、以降の説明においては、サブプロセッサユニット１２のうち、デコードメインプログラムを実行するサブプロセッサユニット１２をサブプロセッサユニット１２ｉと称し、サブプロセッサユニット１２のうち、ローダプログラムをロードした（すなわち、デコードサブプログラムを実行する）サブプロセッサユニット１２をサブプロセッサユニット１２ｊと称するものとする。
【００７５】
ここで、ローダプログラムとは、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたステータスフラグのうち、「実行希望」であるステータスフラグをポーリングし、「実行希望」であるステータスフラグに対応したプログラム（例えば、デコードサブプログラム）をロードするプログラムである。
【００７６】
また、サブプロセッサユニット１２ｉのコアプロセッサ５１をコアプロセッサ５１ｉと称し、サブプロセッサユニット１２ｉのレジスタ５２をレジスタ５２ｉと称するものとする。さらに、サブプロセッサユニット１２ｉのローカルストレージ５３をローカルストレージ５３ｉと称し、サブプロセッサユニット１２ｉのDMAC５４をDMAC５４ｉと称するものとする。
【００７７】
さらにまた、サブプロセッサユニット１２ｊのコアプロセッサ５１をコアプロセッサ５１ｊと称し、サブプロセッサユニット１２ｊのレジスタ５２をレジスタ５２ｊと称するものとする。また、サブプロセッサユニット１２ｊのローカルストレージ５３をローカルストレージ５３ｊと称し、サブプロセッサユニット１２ｊのDMAC５４をDMAC５４ｊと称するものとする。
【００７８】
デコードメインプログラムを実行するサブプロセッサユニット１２ｉの処理は、図２のVLD処理部１０１、IQ処理部１０２、IDCT処理部１０３により実行される処理であり、また、デコードサブプログラムを実行するサブプロセッサユニット１２ｊの処理は、図２のMC処理部１０４により実行される処理である。
【００７９】
デコードメインプログラムのVLD処理部１０１は、ビットストリームを基に、可変長符号の復号し、復号したビットストリーム（以下、復号データと称する）をデコードメインプログラムのIQ処理部１０２およびデコードサブプログラムのMC処理部１０４に供給する。
【００８０】
デコードメインプログラムのIQ処理部１０２は、デコードメインプログラムのVLD処理部１０１から供給される復号データを基に、逆量子化の処理を行い、逆量子化の処理をした復号データ（逆量子化データと称する）をデコードメインプログラムのIDCT処理部１０３に供給する。
【００８１】
デコードメインプログラムのIDCT処理部１０３は、デコードメインプログラムのIQ処理部１０２から供給される逆量子化データを基に、逆離散コサイン変換の処理を行い、逆離散コサイン変換の処理をした逆量子化データ（以下、変換データと称する）をデコードメインプログラムのデータ合成部１０５に供給する。
【００８２】
デコードサブプログラムのMC処理部１０４は、デコードメインプログラムのVLD処理部１０１から供給される復号データおよびデータ合成部１０５から出力された１つ前のフレームの画像データを基に、動き補償の処理を行い、動き補償の処理をしたデータ（以下、動き補償データと称する）をデコードメインプログラムのデータ合成部１０５に供給する。
【００８３】
デコードメインプログラムのデータ合成部１０５は、デコードメインプログラムのIDCT処理部１０３から供給される変換データおよびデコードサブプログラムのMC処理部１０４から供給される動き補償データを基に、画像データを生成し、生成した画像データを出力する。
【００８４】
すなわち、上述した処理をまとめると、サブプロセッサユニット１２ｉが実行するデコードメインプログラムは、単体で動作可能なプログラムであるが、処理を分散させて、並列処理を行なう（すなわち、分散並列処理）こともできる。分散並列処理を行なう場合、サブプロセッサユニット１２ｊが実行するデコードサブプログラムは、デコードメインプログラムと連携して実行される。すなわち、デコードメインプログラムのVLD処理部１０１から供給される復号データを基に、デコードサブプログラムのMC処理部１０４がMCの処理により、動き補償データを生成する。デコードサブプログラムのMC処理部１０４は、生成した動き補償データをデコードメインプログラムのデータ合成部１０５に供給する。
【００８５】
そのとき、デコードメインプログラムのIQ処理部１０２およびIDCT処理部１０３は、デコードサブプログラムのMC処理部１０４がMCの処理を行っている間、並行して、IQおよびIDCTの処理をそれぞれ行う。そして、デコードメインプログラムのデータ合成部１０５は、デコードサブプログラムのMC処理部１０４から供給される動き補償データを基にして、デコードメインプログラムのIDCT処理部１０３から供給される変換データを合成することで、ビットストリームをデコードすることができる。
【００８６】
サブプロセッサユニット１２ｉが、デコードメインプログラムを基に、MPEGのデコードの処理のうち、VLDの処理、IQの処理、およびIDCTの処理を実行し、一方、サブプロセッサユニット１２ｊが、デコードサブプログラムを基に、MPEGのデコードの処理のうち、MCの処理を実行することで、MPEGのデコードの処理を分散並列処理ですることができる。
【００８７】
図３は、サブプロセッサユニット１２ｉにより実現される機能の構成の例を示すブロック図である。
【００８８】
制御プログラム２０１は、ローカルストレージ５３ｉに適宜記憶され、サブプロセッサユニット１２ｉによって実行されるプログラムである。例えば、制御プログラム２０１は、メインメモリ１４に記憶されているステータスフラグ管理テーブルのステータスフラグを設定する。
【００８９】
制御プログラム２０１は、プログラム処理部２１１、プログラム記憶制御部２１２、ステータスフラグ設定部２１３、ステータスフラグ判定部２１４、分散フラグ判定部２１５、および処理状況監視部２１６を含む。
【００９０】
プログラム処理部２１１は、デコードメインプログラムを基に、MPEGのデコードの処理を実行する。また、プログラム処理部２１１は、所定の監視の処理を後述する処理状況監視部２１６に開始させる。例えば、プログラム処理部２１１は、ロードされたデコードメインプログラムを基に、VLDの処理を実行する。
【００９１】
プログラム記憶制御部２１２は、デコードサブプログラムをメインメモリ１４にセットする。例えば、プログラム記憶制御部２１２は、MPEGのデコードの処理におけるMCの処理をデコードサブプログラムとして、メインメモリ１４にセットする。なお、プログラム記憶制御部２１２がメインメモリ１４にセットするデコードサブプログラムは、デコードメインプログラムと同一のコード（デコードメインプログラムの複製）でも異なるコード（デコードサブプログラム）のいずれでもよいし、また、デコードサブプログラムの実体そのものではなく、デコードサブプログラムを示すポインタであってもよい。
【００９２】
ステータスフラグ設定部２１３は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを設定する。例えば、ステータスフラグ設定部２１３は、デコードサブプログラムを他のサブプロセッサユニットに実行させたい場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムに対応するステータスフラグを「実行不要」から「実行希望」に変更して設定するする。
【００９３】
ここで、ステータスフラグとは、例えば、「実行希望」、「準備中」、「実行不要」、「実行中」、または「未使用」など、サブプログラムの状態を示す情報であり、ステータスフラグを格納するテーブルがステータス管理テーブルである。ステータスフラグとステータスフラグ管理テーブルの詳細については図６を参照して後述する。
【００９４】
ステータスフラグ判定部２１４は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグの状態を判定する。例えば、ステータスフラグ判定部２１４は、メインメモリ１４に記憶されているステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグが「実行中」であるか否かを判定する。
【００９５】
分散フラグ判定部２１５は、サブプロセッサユニット１２ｉがデコードメインプログラムを実行している間に、他のサブプロセッサユニット１２（例えば、サブプロセッサユニット１２ｊ）が実行するデコードサブプログラムから分散フラグが通知されたか否かを判定する。
【００９６】
ここで、分散フラグとは、メインメモリ１４にセットしたデコードサブプログラムの実行の開始を示すフラグである。すなわち、分散フラグ判定部２１５が、分散フラグが通知されたと判定した場合、デコードメインプログラム（サブプロセッサユニット１２ｉ）とデコードサブプログラム（サブプロセッサユニット１２ｊ）とが連携をし、MPEGのデコードの分散並列処理を実行できることがわかる。
【００９７】
処理状況監視部２１６は、例えば、上述したMPEGのデコードの処理の監視をする。例えば、処理状況監視部２１６は、入力部１８へのユーザの操作による再生速度の変更（すなわち、MPEGのデコードの処理速度）などを監視する。
【００９８】
図４は、サブプロセッサユニット１２ｊにより実現される機能の構成の例を示すブロック図である。
【００９９】
制御プログラム２５１は、ローカルストレージ５３ｊに適宜記憶され、サブプロセッサユニット１２ｊによって実行される。例えば、制御プログラム２５１は、メインメモリ１４に記憶されているステータスフラグ管理テーブルのステータスフラグの設定を行う。
【０１００】
制御プログラム２５１は、プログラム取得部２６１、プログラム処理部２６２、ステータスフラグ設定部２６３、ステータスフラグ判定部２６４、および分散フラグ通知部２６５を含む。
【０１０１】
プログラム取得部２６１は、メインメモリ１４に記憶されているステータス管理テーブルに格納されている「実行希望」であるステータスフラグに対応したデコードサブプログラムをローカルストレージ５３ｊにロードする。
【０１０２】
プログラム処理部２６２は、デコードサブプログラムに基づいて、所定の処理を実行する。例えば、プログラム処理部２６２は、デコードサブプログラムに基づいて、MCの処理を実行する。
【０１０３】
ステータスフラグ設定部２６３は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを設定する。例えば、ステータスフラグ設定部２６３は、プログラム取得部２６１がメインメモリ１４からデコードサブプログラムをローカルストレージ５３ｊにロードした場合、メインメモリ１４に記憶されているステータス管理テーブルに格納されているデコードサブプログラムに対応したステータスフラグを「実行希望」から「実行中」に変更して設定する。
【０１０４】
ステータスフラグ判定部２６４は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグをポーリングして、ステータスフラグ管理テーブルに「実行希望」であるステータスフラグが格納されているか否かを判定する。
【０１０５】
分散フラグ通知部２６５は、サブプロセッサユニット１２ｊがデコードサブプログラムを実行する場合、「TRUE」である分散フラグをサブプロセッサユニット１２ｉが実行するデコードメインプログラムに通知する。すなわち、分散フラグ通知部２６５が、分散フラグを通知した場合、デコードメインプログラム（サブプロセッサユニット１２ｉ）とデコードサブプログラム（サブプロセッサユニット１２ｊ）とが連携して、MPEGのデコードの分散並列処理を実行することが可能となったことが示されることになる。
【０１０６】
図５は、サブプロセッサユニット１２の状態遷移とサブプロセッサユニット１２が実行する処理との対応の例を示す図である。
【０１０７】
サブプロセッサユニット１２の状態には、スリープ（Sleep）、アウェイク（Awake）、アクティブ（Active）、またはフィニッシュ（Finish）の４つの状態があり、スリープは、サブプロセッサユニット１２の動作が停止している状態を示し、アウェイクは、サブプロセッサユニット１２の動作が開始したことを示し、アクティブは、サブプロセッサユニット１２が動作していることを示し、フィニッシュは、サブプロセッサユニット１２の動作が終了したことを示す。
【０１０８】
すなわち、サブプロセッサユニット１２の状態は、スリープ、アウェイク、アクティブ、フィニッシュの順に遷移し、フィニッシュの次にスリープに戻り、さらに、上述した遷移を繰り返す。すなわち、サブプロセッサユニット１２は、状態を、スリープ、アウェイク、アクティブ、フィニッシュの順に繰り返すことで、一連の処理を実行することができる。
【０１０９】
次に、ローダプログラムをロードしたサブプロセッサユニット１２が実行する処理について説明する。以下、サブプロセッサユニット１２が実行する処理をサブプロセッサ１２ｊが実行する処理として説明する。上述したように、サブプロセッサユニット１２ｊは、状態を、スリープ、アウェイク、アクティブ、フィニッシュの順に繰り返すことで、一連の処理を実行することができる。
【０１１０】
まず、サブプロセッサユニット１２ｊの状態がスリープである場合、サブプロセッサユニット１２ｊは、ローダプログラムがステータスフラグをポーリングすることで、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを監視する。すなわち、ローダプログラムは、「実行可能」であるステータスフラグを監視する。
【０１１１】
次に、サブプロセッサユニット１２ｊの状態がアウェイクである場合、サブプロセッサユニット１２ｊは、ローダプログラムが、メインメモリ１４から、「実行可能」であるステータスフラグに対応するデコードサブプログラムをロードする。
【０１１２】
次に、サブプロセッサユニット１２ｊの状態がアクティブである場合、サブプロセッサユニット１２ｊは、ロードしたデコードサブプログラムの処理を実行する。すなわち、サブプロセッサユニット１２ｊは、上述したMCの処理を実行する。
【０１１３】
次に、サブプロセッサユニット１２ｊの状態がフィニッシュである場合、サブプロセッサユニット１２ｊは、デコードサブプログラムの処理が終了し、後処理として、デコードサブプログラムがローダプログラムをロードする。すなわち、ロードしたローダプログラムにより、再度、サブプロセッサユニット１２ｊの状態がスリープとなり、上述した処理を繰り返すことになる。
【０１１４】
このように、サブプロセッサユニット１２は、適宜、自分でプログラムをロードし、ロードしたプログラムを実行するので、例えば、0Sまたは他の処理などを実行しているメインプロセッサユニット１１または別のサブプロセッサユニット１２に対して、余計な負荷を与えないようにすることができる。
【０１１５】
図６は、ステータスフラグ管理テーブルの例を示す図である。
【０１１６】
図６で示されるステータスフラグ管理テーブルの例において、１行目は項目を示し、２行目以降は各サブプログラムのそれぞれのデータを示す。また、１列目は“アドレス”、２列目は“ステータスフラグ”、３行目は“プログラムのデータ”を示す。すなわち、ステータスフラグ管理テーブルには、分散並列処理をさせたいプログラムを一意に特定するアドレスに対応させて、そのアドレスのステータスフラグ、およびプログラムデータ（プログラムの実体そのもの）が格納されている。
【０１１７】
例えば、図６で示されるステータスフラグ管理テーブルの例においては、２行目に“0x00040000”であるアドレスに対して、“実行希望”であるステータスフラグ、および“0123456789abcdef0123456789abcdef000000000000000”であるプログラムデータが格納されている。また、３行目には“0x00080000”であるアドレスに対して、“準備中”であるステータスフラグ、および“0000222222abcdef0000222222abcdef000000000000000”であるプログラムデータが格納されている。さらに、４行目には“0x000c0000”であるアドレスに対して、“未使用”であるステータスフラグ、および“1111333333abcdef1111333333abcdef000000000000000”であるプログラムデータが格納されている。
【０１１８】
ここで、ステータスフラグについてより詳細に説明する。ステータスフラグは、例えば、「実行希望」、「準備中」、「実行不要」、「実行中」、または「未使用」など、サブプログラム（例えば、デコードサブプログラム）の状態を示す情報である。
【０１１９】
例えば、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、デコードサブプログラムを他のサブプロセッサユニット１２に実行させたい場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムデータ（プログラムデータ）に対応したステータスフラグを「実行希望」に変更して設定する。また、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、デコードサブプログラムをメインメモリ１４にセットする場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムデータに対応したステータスフラグを「準備中」に変更して設定する。さらに、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、処理状況監視部２１６が、例えば、入力部１８へのユーザの操作による再生速度の変更などにより、ステータスフラグを「実行希望」に変更しないと判定した場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムデータに対応したステータスフラグを「実行不要」に変更して設定する。
【０１２０】
また、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ設定部２６３は、プログラム取得部２６１がメインメモリ１４からデコードサブプログラムをローカルストレージ５３ｊにロードした場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムデータに対応したステータスフラグを「実行中」に変更して設定する。さらに、サブプロセッサユニット１２ｉの制御プログラム２５１のステータスフラグ設定部２１３は、分散並列処理が完了した場合、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているデコードサブプログラムデータに対応したステータスフラグを「未使用」に変更して設定する。
【０１２１】
なお、「未使用」であるステータスフラグは、処理が完全に終了したことを意味するので、ステータスフラグ管理テーブルに格納されたステータスフラグのうち、「未使用」であるステータスフラグの記憶領域には、次にセットされるサブプログラムの情報が上書きされることになる。例えば、新たに、デコードサブプログラムをステータスフラグ管理テーブルにセットする場合、４行目の“0x000c0000”であるアドレスに対して、“未使用”であるステータスフラグ、および“1111333333abcdef1111333333abcdef000000000000000”であるプログラムデータが格納されている記憶領域に、“0x000c0000”であるアドレスに対して、“準備中”であるステータスフラグ、および“2222444444abcdef2222444444abcdef000000000000000”であるデコードサブプログラムデータが格納されることになる。
【０１２２】
また、アドレスおよびステータスフラグに対応するプログラムの情報をプログラムデータ（プログラムの実体そのもの）として説明したが、プログラムデータに限らず、プログラムのポインタであってもよい。
【０１２３】
このように、サブプロセッサユニット１２ｉは、デコードサブプログラムをメインメモリ１４にセットし、サブプロセッサユニット１２ｊは、メインメモリ１４に記憶されているステータス管理テーブルに格納されたステータスフラグに基づいて、デコードサブプログラムをロードし、ロードしたデコードサブプログラムを実行するので、OSの制御なしで、分散並列処理を実行することができる。
【０１２４】
次に、図７のフローチャートを参照して、パーソナルコンピュータ１のシステム起動時の処理を説明する。
【０１２５】
ステップＳ１０１において、BIOS１６は、システムを初期化する。例えば、BIOS１６は、パーソナルコンピュータ１に設けられた入出力機器の認識や入出力機器の環境を設定する。
【０１２６】
ステップＳ１０２において、BIOS１６は、OSをメインプロセッサユニット１１にロードする。
【０１２７】
ステップＳ１０３において、BIOS１６は、デコーダメインプログラムをサブプロセッサユニット１２（サブプロセッサユニット１２ｉ）にロードする。
【０１２８】
ステップＳ１０４において、BIOS１６は、ローダプログラムを、デコーダメインプログラムをロードしたサブプロセッサユニット１２とは別のサブプロセッサユニット１２（サブプロセッサユニット１２ｊ）にロードする。
【０１２９】
なお、ステップＳ１０３の処理およびステップＳ１０４の処理については、パーソナルコンピュータ１のシステム起動時に行うとして説明したが、ステップＳ１０２の処理によって、OSをロードしたメインプロセッサユニット１１が、ステップＳ１０３の処理およびステップＳ１０４の処理を実行するようにしてもよい。すなわち、メインプロセッサユニット１１が、デコーダメインプログラムをサブプロセッサユニット１２（サブプロセッサユニット１２ｉ）にロードし、さらに、メインプロセッサユニット１１が、ローダプログラムを、デコーダメインプログラムをロードしたサブプロセッサユニット１２（サブプロセッサユニット１２ｉ）とは別のサブプロセッサユニット１２（サブプロセッサユニット１２ｊ）にロードするようにしてもよい。
【０１３０】
次に、図８のフローチャートを参照して、サブプロセッサユニット１２ｉが実行するデコードメインプログラムの処理を説明する。
【０１３１】
ステップＳ２０１において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムを基に、初期化の処理を行う。例えば、プログラム処理部２１１は、デコードメインプログラムを基に、ローカルストレージ５３ｉの所定の領域の初期化を行う。また、プログラム処理部２０１は、分散フラグに、初期値として、「FALSE」を設定する。
【０１３２】
ステップＳ２０２において、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、デコードサブプログラムをメインメモリ１４にセットするために、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを「未使用」から「準備中」に変更して設定する。すなわち、ローダプログラムをロードしたサブプロセッサユニット１２ｊは、ステータスフラグが「準備中」であるので（すなわち、ステータスフラグが「実行希望」ではないので）、デコードサブプログラムをロードすることはできない。
【０１３３】
ステップＳ２０３において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム記憶制御部２１２は、デコードサブプログラムをメインメモリ１４にセットする。このとき、メインメモリ１４にセットするデコードサブプログラム（すなわち、処理を行っていないサブプロセッサユニット１２に実行させたいプログラム）は、デコードメインプログラムと同一のコード（デコードメインプログラムの複製）でも異なるコード（特定の処理が記述されているデコードサブプログラム）のいずれでもよいし、また、デコードサブプログラムの実体そのものではなく、デコードサブプログラムを示すポインタであってもよく、いずれの場合であっても、ステップＳ２０２の処理において設定された「準備中」であるステータスフラグに対応させて記憶される。
【０１３４】
例えば、プログラム記憶制御部２１２は、ステップＳ２０２の処理において設定された「準備中」であるステータスフラグに対応させて、MPEGのデコードの処理におけるMCの処理をデコードサブプログラムとして、メインメモリ１４にセットする。
【０１３５】
ステップＳ２０４において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、所定の監視の処理をサブプロセッサユニット１２ｉの制御プログラム２０１の処理状況監視部２１６に開始させる。例えば、処理状況監視部２１６が、再生速度の変更などにより、MPEGのデコードの処理時間を短縮する必要があると判定した場合、ステータスフラグ設定部２１３は、ステータスフラグ管理テーブルに格納されているデコードサブプログラムに対応したステータスフラグを「実行希望」に変更して設定する。
【０１３６】
すなわち、サブプロセッサユニット１２ｉの制御プログラム２０１の処理状況監視部２１６は、再生速度の変更などにより、MPEGのデコードの処理時間を短縮する必要があると判定した場合、ステータスフラグ管理テーブルのステータスフラグを「実行希望」に設定することにより、ローダプログラムをロードしたサブプロセッサ１２ｊにデコードサブプログラムの処理を実行させることができる。
【０１３７】
ここでは、まず、MPEGのデコードの処理時間を短縮する必要がない場合、すなわち、処理状況監視部２１６が、MPEGのデコードの処理時間を短縮する必要がないと判定し、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３が、ステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグを「準備中」から「実行不要」に変更して設定した場合について説明する。
【０１３８】
ステップＳ２０５において、サブプロセッサユニット１２ｉの制御プログラム２０１の分散フラグ判定部２１５は、分散フラグが「TRUE」であるか否かを判定する。
【０１３９】
例えば、分散フラグ判定部２１５は、サブプロセッサユニット１２ｊ（デコードサブプログラム）から分散フラグが通知された場合、「TRUE」である分散フラグが通知されたと判定する。すなわち、メインメモリ１４にセットしたデコードサブプログラムを基に、所定の処理が実行されている場合、「TRUE」である分散フラグが通知される。より具体的には、サブプロセッサユニット１２ｊがデコードサブプログラムをロードして、デコードサブプログラムを基に、MCの処理を行う場合、サブプロセッサユニット１２ｊは、「TRUE」である分散フラグをサブプロセッサユニット１２ｉ（デコードメインプログラム）に通知する。
【０１４０】
換言すれば、ステータスフラグ設定部２１３がステータスフラグを「実行希望」に変更して設定した場合にのみ、「TURE」である分散フラグが通知されるとも言える。また、分散フラグの初期値は、「FALSE」として設定される。
【０１４１】
ステップＳ２０５において、分散フラグが「TRUE」でない（すなわち、サブプロセッサユニット１２ｊがデコードサブプログラムを実行していないので、分散フラグが初期値の「FALSE」から変更していない）と判定された場合、ステップＳ２０６に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのVLD処理部１０１に基づいて、VLDの処理（可変長符号の復号の処理）を行い、VLDの処理結果である復号データをデコードメインプログラムのIQ処理部１０２に供給する。
【０１４２】
ステップＳ２０７において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのIQ処理部１０２に基づいて、デコードメインプログラムのVLD処理部１０１から供給された復号データに対して、IQの処理（逆量子化の処理）を行い、IQの処理結果である逆量子化データをデコードメインプログラムのIDCT処理部１０３に供給する。
【０１４３】
ステップＳ２０８において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのIDCT処理部１０３に基づいて、デコードメインプログラムのIQ処理部１０２から供給された逆量子化データに対して、IDCTの処理（逆離散コサイン変換の処理）を行い、IDCTの処理結果である変換データをデコードメインプログラムのMC処理部１０４に供給する。
【０１４４】
ステップＳ２０９において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのMC処理部１０４に基づいて、デコードメインプログラムのIDCT処理部１０３から供給された変換データに対して、MCの処理（動き補償の処理）を行い、MCの処理結果である動き補償データをデコードメインプログラムのデータ合成部１０５に供給する。
【０１４５】
ステップＳ２１０において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのデータ合成部１０５に基づいて、デコードメインプログラムのMC処理部１０４から供給された動き補償データから、画像データを生成し、生成した画像データを出力する。
【０１４６】
このように、ステップＳ２０６の処理乃至ステップＳ２１０の処理を繰り返すことによって、サブプロセッサユニット１２ｉ単独で、MPEGのデコードの処理のすべてを行うことができる。
【０１４７】
ステップＳ２１１において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムの処理（MPEGのデコードの処理）が完了したか否かを判定する。
【０１４８】
ステップＳ２１１において、デコードメインプログラムの処理が完了していないと判定された場合、まだMPEGのデコードの処理が残っているので、ステップＳ２０５に戻り、上述した処理を繰り返す。
【０１４９】
ステップＳ２０５において、例えば、後述する図９のフローチャートにおけるステップＳ２５５において、ステータス設定部２１３により、ステータスフラグが「実行不要」から「実行希望」に変更して設定された場合、ローダプログラムを実行するサブプロセッサユニット１２ｊは、デコードサブプログラムをロードし、ロードしたデコードサブプログラムを基に、MCの処理を行うが、そのとき、サブプロセッサユニット１２ｊ（デコーダサブプログラム）は、メインメモリ１４のステータスフラグ管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグを「実行希望」から「実行中」に変更して設定し、さらに、「TRUE」である分散フラグをサブプロセッサユニット１２ｉ（デコードメインプログラム）に通知する。
【０１５０】
ステップＳ２０５において、サブプロセッサユニット１２ｉの制御プログラム２０１の分散フラグ判定部２１５は、分散フラグが「TRUE」であるか否かを判定する。例えば、分散フラグ判定部２１５は、サブプロセッサユニット１２ｊ（デコーダサブプログラム）から「TURE」である分散フラグが通知された場合、分散フラグが「TURE」であると判定する。
【０１５１】
ステップＳ２０５において、サブプロセッサユニット１２ｊ（デコーダサブプログラム）から「TURE」である分散フラグが通知され、分散フラグが「TURE」であると判定された場合、分散並列処理が可能であるとみなし、ステップＳ２１２に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのVLD処理部１０１に基づいて、VLDの処理（可変長符号の復号の処理）を行い、VLDの処理結果である復号データをデコードメインプログラムのIQ処理部１０２に供給する。
【０１５２】
ステップＳ２１３において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコーダメインプログラムのVLD処理部１０１に基づいて、ステップＳ２１２の処理によって生成したVLDの処理結果である復号データを、さらに、デコードサブプログラムのMC処理部１０４（サブプロセッサユニット１２ｊ）に供給する。
【０１５３】
ステップＳ２１４において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのIQ処理部１０２に基づいて、VLD処理部１０１から供給された復号データに対して、IQの処理（逆量子化の処理）を行い、IQの処理結果である逆量子化データをデコードメインプログラムのIDCT処理部１０３に供給する。
【０１５４】
ステップＳ２１５において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのIDCT処理部１０３に基づいて、IQ処理部１０２から供給された逆量子化データに対して、IDCTの処理（逆離散コサイン変換の処理）を行い、IDCTの処理結果である変換データをデコードメインプログラムのデータ合成部１０５に供給する。
【０１５５】
ステップＳ２１６において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのデータ合成部１０５に基づいて、デコードサブプログラムのMC処理部１０５（サブプロセッサユニット１２ｊ）から、MCの処理結果である動き補償データを取得する。
【０１５６】
ステップＳ２１０において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムのデータ合成部１０５に基づいて、ステップＳ２１４の処理（デコードメインプログラムのIDCT処理部１０３から供給される変換データ）およびステップＳ２１５（デコードサブプログラムのMC処理部１０４から供給される動き補償データ）を基に、画像データを生成し、生成した画像データを出力する。
【０１５７】
換言すれば、デコードサブプログラムのMC処理部１０４（サブプロセッサユニット１２ｊ）は、ステップＳ２１３の処理によって、デコードメインプログラムのVLD処理部１０１（サブプロセッサユニット１２ｉ）から、VLDの処理結果である復号データを取得する。サブプロセッサユニット１２ｊは、デコードサブプログラムのMC処理部１０４に基づいて、取得した復号データに対して、MCの処理（動き補償の処理）を行い、MCの処理結果である動き補償データをデコードメインプログラムのデータ合成部１０５（デコーダプロセッサユニット１２ｉ）に供給している。
【０１５８】
このように、ステップＳ２１２の処理乃至ステップＳ２１６の処理、およびステップＳ２１０の処理を繰り返すことによって、サブプロセッサユニット１２ｉが、デコードメインプログラムを基に、MPEGのデコードの処理のうち、VLDの処理、IQの処理、およびIDCTの処理を実行し、一方、サブプロセッサユニット１２ｊが、デコードサブプログラムを基に、MPEGのデコードの処理のうち、MCの処理を実行することで、MPEGのデコードの処理を分散並列処理で行うことができる。
【０１５９】
ステップＳ２１１において、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、デコードメインプログラムの処理（MPEGのデコードの処理）が完了したか否かを判定する。
【０１６０】
ステップＳ２１２において、デコードメインプログラムの処理が完了したと判定された場合、MPEGのデコードの処理は終了しているので、ステップＳ２１７に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、ステータスフラグ管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグを「実行中」から「未使用」に変更して設定し、処理は終了する。
【０１６１】
すなわち、上述したように、ステータスフラグを「未使用」に変更して設定することで、処理が完全に終了したことを意味するので、ステータスフラグ管理テーブルに格納されたステータスフラグのうち、「未使用」であるステータスフラグに対応する記憶領域には、次にセットされるサブプログラムの情報が上書きされることになる。
【０１６２】
次に、図９のフローチャートを参照して、監視の処理を説明する。
【０１６３】
ステップＳ２５１において、サブプロセッサユニット１２ｉの制御プログラム２０１の処理状況監視部２１６は、上述したMPEGのデコードの処理の監視をする。例えば、処理状況監視部２１６は、入力部１８へのユーザの操作による再生速度の変更（すなわち、MPEGのデコードの処理速度）などの監視をする。
【０１６４】
ステップＳ２５２において、サブプロセッサユニット１２ｉの制御プログラム２０１の処理状況監視部２１６は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを「実行希望」に変更するか否かを判定する。例えば、処理状況監視部２１６は、入力部１８へのユーザの操作による再生速度の変更により、MEPGのデコードの処理時間を短縮する必要がある場合（すなわち、再生速度が上がった場合）、ステータスフラグを「実行希望」に変更すると判定し、逆に、MPEGのデコードの処理時間を短縮しなくてもよい場合（すなわち、再生速度が下がった場合）、ステータスフラグを「実行希望」には変更しないと判定する。
【０１６５】
なお、MPEGのデコードの処理を短縮する必要があるが、処理時間の短縮に必要な空きリソースがない場合、すわわち、ステータスフラグを「実行希望」としたが、サブプロセッサユニット１２ｊが別の処理中で、MPEGのデコードサブプログラムが実行されなかった場合、サブプロセッサユニット１２ｉの制御プログラム２０１のプログラム処理部２１１は、入力されるビットストリームに含まれるイントラフレームのみをデコードし、インターフレームをデコードしないようにしてもよい。
【０１６６】
ステップＳ２５２において、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを「実行希望」に変更しないと判定された場合、ステップＳ２５３に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたデコードサブプログラム対応したステータスフラグを「実行不要」に変更して設定する。
【０１６７】
このように、ステータスフラグを「実行不要」に変更して設定することで、デコードサブプログラムは、サブプロセッサユニット１２ｊでは実行されなくなる。すなわち、サブプロセッサユニット１２ｉ単独で、MPEGのデコードの処理を実行する。
【０１６８】
一方、ステップＳ２５２において、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグを「実行希望」に変更すると判定された場合、ステップＳ２５４に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ判定部２１４は、メインメモリ１４に記憶されているステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグが「実行中」であるか否かを判定する。
【０１６９】
ステップＳ２５４において、メインメモリ１４に記憶されているステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグが「実行中」であると判定された場合、デコードサブプログラムは、既に、サブプロセッサユニット１２により実行されており、デコードサブプログラムを他のサブプロセッサユニット１２に実行させる必要がないので、ステップＳ２５１に戻り、上述した処理を繰り返す。
【０１７０】
一方、ステップＳ２５４において、メインメモリ１４に記憶されているステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグが「実行中」ではないと判定された場合、ステップＳ２５５に進み、サブプロセッサユニット１２ｉの制御プログラム２０１のステータスフラグ設定部２１３は、メインメモリ１４に記憶されているステータス管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグを「実行希望」に変更して設定する。
【０１７１】
このようにすることで、ローダプログラムをロードしたサブプロセッサユニット１２ｊは、デコードサブプログラムをロードして、デコードサブプログラムを実行することができるようになる。
【０１７２】
次に、図１０のフローチャートを参照して、ローダプログラムをタウンロードしたサブプロセッサユニット１２ｊの処理を説明する。
【０１７３】
ステップＳ３０１において、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ判定部２６４は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグに対して、いわゆるポーリングをする。すなわち、ステータスフラグ判定部２６３は、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されているステータスフラグの中に、「実行希望」であるステータスフラグが格納されているかをポーリングする。
【０１７４】
ステップＳ３０２において、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ判定部２６４は、メインメモリ１４に記憶されているステータス管理テーブルに格納されているステータスフラグに「実行希望」であるステータスフラグが格納されているか否かを判定する。
【０１７５】
ステップＳ３０２において、メインメモリ１４に記憶されているステータス管理テーブルに格納されているステータスフラグに「実行希望」であるステータスフラグが格納されていないと判定された場合、分散並列処理を実行するプログラムは存在しないので、ステップＳ３０１に戻り、上述した処理を繰り返す。
【０１７６】
一方、ステップＳ３０２において、メインメモリ１４に記憶されているステータス管理テーブルに格納されているステータスフラグに「実行希望」であるステータスフラグが格納されていると判定された場合、ステップＳ３０３に進み、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム取得部２６１は、メインメモリ１４に記憶されているステータス管理テーブルに格納されている「実行希望」であるステータスフラグに対応したデコードサブプログラムをローカルストレージ５３ｊにロードする。
【０１７７】
なお、プログラム取得部２６１が、メインメモリ１４から、デコードサブプログラムを取得する場合、ローダプログラムが、ロードするデコードサブプログラムに上書きされないように、ローダプログラムをローカルストレージ５３ｊの上書きされない領域に退避させるようにしてもよい。
【０１７８】
ステップＳ３０４において、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ設定部２６３は、メインメモリ１４に記憶されているステータス管理テーブルに格納されているステップＳ３０３の処理でロードしたデコードサブプログラムに対応したステータスフラグを「実行希望」から「実行中」に変更して設定する。
【０１７９】
ステップＳ３０５において、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ設定部２６３は、ステップＳ３０４の処理で行ったメインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたデコードサブプログラムに対応したステータスフラグの変更（すなわち、ステータスフラグを「実行希望」から「実行中」に変更して設定した処理）に成功したか否かを判定する。
【０１８０】
例えば、ステップＳ３０５において、ステータスフラグ設定部２６３は、他のサブプロセッサユニット１２が同時に、ステータスフラグを「実行希望」から「実行中」に変更して設定した場合（すなわち、他のサブプロセッサユニット１２においても、デコードサブプログラムがロードされた場合）、または、サブプロセッサユニット１２ｉによって、デコードサブプログラムのステータスフラグが「実行希望」から、「実行不要」または「未使用」に変更して設定された場合、いわゆるアトミックオペレーションにより、他のサブプロセッサユニット１２と同時にステータスフラグの変更を行わないようにする。
【０１８１】
すわなち、アトミックオペレーションでは、サブプロセッサユニット１２ｊがメインメモリ１４に記憶されているステータスフラグ管理テーブルのステータスフラグを読み出し、読み出したステータスフラグを変更する場合、他のサブプロセッサユニット１２による同様の操作によって、データの不整合を起こす可能性があるので、ステータスフラグの読み出しから変更までのプロセスが保証されないとき、再度、ステータスフラグの読み出しから行わせる。本発明を適用したパーソナルコンピュータ１においては、上述した処理を、いわゆるキャッシュコヒーレンシ（Cache Coherency）と組み合わせることによって、アトミックオペレーションとして実装している。
【０１８２】
ステップＳ３０５において、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたステータスフラグの変更に失敗したと判定された場合、デコードサブプログラムを実行しないので、ステップＳ３０１に戻り、上述した処理を繰り返す。
【０１８３】
一方、ステップＳ３０５において、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたステータスフラグの変更に成功したと判定された場合、ステップＳ３０６に進み、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム処理部２６２は、ロードしたデコードサブプログラムを実行するために、プログラムカウンタをセットする。なお、プログラムカウンタをセットすることによって、デコードサブプログラムが開始される。
【０１８４】
ステップＳ３０７において、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム処理部２６２は、デコードサブプログラムを基に、初期化の処理を行う。例えば、プログラム処理部２６２は、デコードサブプログラムを基に、ローカルストレージ５３ｊの所定の領域を初期化する。
【０１８５】
ステップＳ３０８において、サブプロセッサユニット１２ｊの制御プログラム２５１の分散フラグ通知部２６５は、「TRUE」である分散フラグをデコードメインプログラム（サブプロセッサユニット１２ｉ）に通知する。
【０１８６】
上述したように、分散フラグ通知部２６５が「TRUE」である分散フラグをデコードメインプログラムに通知することで、「TRUE」である分散フラグを通知されたデコードメインプログラム（サブプロセッサユニット１２ｉ）は、他のサブプロセッサユニット（サブプロセッサユニット１２ｊ）がデコードサブプログラムを実行しているので、連携を開始することができる。すなわち、デコードメインプログラムを実行するサブプロセッサユニット１２iとデコードサブプログラムを実行するサブプロセッサユニット１２ｊとが連携して分散並列処理を開始することができる。
【０１８７】
ステップＳ３０９において、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム処理部２６２は、デコードメインプログラムのVLD処理部１０１（サブプロセッサユニット１２ｉ）から、VLDの処理結果である復号データを取得する。
【０１８８】
ステップＳ３１０において、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム処理部２６２は、デコードサブプログラムのMC処理部１０４に基づいて、デコードメインプログラムから取得した復号データに対して、MCの処理（動き補償の処理）を行う。
【０１８９】
ステップＳ３１１において、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム処理部２６２は、MCの処理結果である動き補償データをデコードメインプログラムのデータ合成部１０５（サブプロセッサユニット１２ｉ）に供給する。
【０１９０】
すなわち、プログラム処理部２６２が、デコードサブプログラムのMC処理部１０４に基づいて、動き補償データをデコードメインプログラムのデータ合成部１０５（サブプロセッサユニット１２ｉ）に供給することで、デコードメインプログラムのデータ合成部１０５（サブプロセッサユニット１２ｉ）は、供給された動き補償データを基に、画像データを生成し、生成した画像データを出力する。
【０１９１】
このように、サブプロセッサユニット１２ｊが、デコードサブプログラムを基に、MPEGのデコードの処理のうち、MCの処理を実行し、サブプロセッサユニット１２ｉが、デコードメインプログラムを基に、MPEGのデコードの処理のうち、VLDの処理、IQの処理、およびIDCTの処理を実行することで、MPEGのデコードの処理を分散並列処理で行うことができる。
【０１９２】
ステップＳ３１２において、サブプロセッサユニット１２ｊの制御プログラム２５１のステータスフラグ設定部２６３は、メインメモリ１４のステータスフラグ管理テーブルに格納されたデコードサブプログラムに対応するステータスフラグを「実行中」から「実行不要」に変更して設定する。
【０１９３】
ステップＳ３１３において、サブプロセッサユニット１２ｊの制御プログラム２５１のプログラム取得部２６１は、予め定められた記憶領域（例えば、メインメモリ１４）から、再度、ローダプログラムをローカルストレージ５３ｊにロードし、ステップＳ３０１の処理に戻り、上述した処理を繰り返す。すなわち、再度、ローダプログラムの処理が開始され、上述した処理を繰り返すことで、適宜、分散並列処理が実行される。
【０１９４】
なお、上述した処理において、サブプロセッサユニット１２ｊは、ローダプログラムを基に、ステップＳ３０１の処理乃至ステップＳ３０６の処理を実行し、ロードしたデコードサブプログラムを基に、ステップＳ３０７の処理乃至ステップＳ３１３の処理を実行する。
【０１９５】
また、上述した例においては、MPEGのデコードの処理について説明したが、上述した例に限らず、例えば、MPEGのエンコードの処理など、サブプロセッサユニット１２が実行する処理であれば、何れであってもよい。
【０１９６】
さらに、上述した例においては、デコードメインプログラムと連携するデコードサブプログラムは、１つとして説明したが、上述した例に限らず、複数のデコードサブプログラムと連携して実行するようにしてもよい。さらにまた、そのとき、複数のデコードサブプログラムは、複数のサブプロセッサユニット１２にそれぞれ実行されるようにしてもよい。
【０１９７】
すなわち、デコードメインプログラム（サブプロセッサユニット１２ｉ）が、複数のデコードサブプログラムと複数のステータスフラグとをそれぞれ対応させて、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納する。そのとき、サブプロセッサユニット１２ｉ以外のサブプロセッサユニット１２が、ステータス管理テーブルに格納された複数のステータスフラグをそれぞれポーリングし、「実行希望」であるステータスフラグに対応したデコードサブプログラムをロードして、ロードしたサブプログラムをそれぞれ実行するようにすればよい。
【０１９８】
さらにまた、デコードサブプログラムとデコードサブプログラムで処理するためのデータとを関連付けて、メインメモリ１４に記憶させることもできる。より具体的には、サブプロセッサユニット１２ｉは、デコードサブプログラム（MC処理部１０４）とデコードメインプログラムのVLD処理部１０１により、復号したビットストリームである復号データとを関連付けてメインメモリ１４に記憶させて、メインメモリ１４に記憶されているステータスフラグ管理テーブルに格納されたステータスフラグを「実行希望」に変更して設定する。そのとき、サブプロセッサユニット１２ｊは、ローダプログラムにより、デコードサブプログラムと復号データとを同時にロードし、ロードしたデコードサブプログラムのMC処理部１０４に基づいて、ロードされた復号データに対して、MCの処理を行い、MCの処理結果である動き補償データをデコードメインプログラムのデータ合成部１０５に供給する。
【０１９９】
すなわち、デコードサブプログラムと復号データを関連付けてメインメモリ１４に記憶させることにより、サブプロセッサユニット１２ｉが実行するデコードメインプログラムと、サブプロセッサユニット１２ｊが実行するデコードサブプログラムには、タイムラグができるが、その場合でも、デコードメインプログラムは、デコードサブプログラムから処理結果を取得することで、デコードの分散処理を実行することができる。
【０２００】
このようにすることで、OSの管理なしで、アプリケーションプログラムに対して、マルチプロセッサのリソースを、複数のプロセッサに対して動的に割り当てることができるようになる。また、そのとき、同一のシステム内であれば、OSに管理されているアプリケーションプログラムとも同居することもできる。
【０２０１】
また、サブプロセッサユニット１２が、適宜、自分でプログラムまたは各種のデータの転送を行うので、OSなど他の処理を実行しているメインプロセッサユニット１１または他のサブプロセッサユニット１２に対して、余計な負荷を与えることがなく、プロセッサ単位で処理を割り当てるので、プロセッサ固有の命令の実行、またはプロセッサコア（例えば、プロセッサコア５１）若しくはレジスタ（例えば、レジスタ５２）などをアプリケーションプログラムが最大限に利用することができる。
【０２０２】
上述した一連の処理は、ハードウェアにより実行させることもできるが、ソフトウェアにより実行させることもできる。一連の処理をソフトウェアにより実行させる場合には、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
【０２０３】
この記録媒体は、図１に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク３１（フレキシブルディスクを含む）、光ディスク３２（CD-ROM(Compact Disc-Read Only Memory)を含む）、光磁気ディスク３３（MD（商標）を含む）、若しくは半導体メモリ３４などよりなるパッケージメディアにより構成されるだけでなく、コンピュータに予め組み込まれた状態でユーザに提供される、プログラムが記録されているROM１５などで構成される。
【０２０４】
また、上述した一連の処理を実行させるプログラムは、必要に応じてルータ、モデムなどのインタフェースを介して、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の通信媒体を介してコンピュータにインストールされるようにしてもよい。
【０２０５】
なお、本明細書において、記録媒体に格納されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
【０２０６】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【図面の簡単な説明】
【０２０７】
【図１】本発明を適用したパーソナルコンピュータの一実施の形態を示すブロック図である。
【図２】本発明を適用したパーソナルコンピュータにより実現される機能の例を示すブロック図である。
【図３】サブプロセッサユニットにより実現される機能の構成の例を示すブロック図である。
【図４】サブプロセッサユニットにより実現される機能の構成の例を示すブロック図である。
【図５】サブプロセッサユニットの状態遷移とサブプロセッサユニットが実行する処理との対応の例を示す図である。
【図６】ステータスフラグ管理テーブルの例を示す図である。
【図７】システム起動時の処理を説明するフローチャートである。
【図８】デコードメインプログラムの処理を説明するフローチャートである。
【図９】監視の処理を説明するフローチャートである。
【図１０】ローダプログラムをタウンロードしたサブプロセッサユニットの処理を説明するフローチャートである。
【符号の説明】
【０２０８】
１  パーソナルコンピュータ，  １１  メインプロセッサユニット，  １２，１２−１乃至１２−Ｎ  サブプロセッサユニット，  １３  バス，  １４  メインメモリ，  １５  ROM，  １６  BIOS，  １７  入出力インターフェイス，  １８  入力部，  １９  出力部，  ２０  記録部，  ２１  通信部，  ２２  ドライブ，  ３１  磁気ディスク，  ３２  光ディスク，  ３３  光磁気ディスク，  ３４  半導体メモリ，  ４１  プロセッサコア，  ４２  レジスタ，  ４３  ローカルストレージエリア，  ４４  DMAC，  ５１，５１−１乃至５１−Ｎ  プロセッサコア，  ５２，５２−１乃至５２−Ｎ  レジスタ，  ５３，５３−１乃至５３−Ｎ  ローカルストレージ，  ５４，５４−１乃至５４−Ｎ  MDAC，  １０１  VLD処理部，  １０２  IQ処理部，  １０３  IDCT処理部，  １０４  MC処理部，  １０５  データ合成部，  ２０１  制御プログラム，  ２１１  プログラム処理部，  ２１２  プログラム記憶制御部，  ２１３  ステータスフラグ設定部，  ２１４  ステータスフラグ判定部，  ２１５  分散フラグ判定部，  ２１６  処理状況監視部，  ２５１  制御プログラム，  ２６１  プログラム取得部，  ２６２  プログラム処理部，  ２６３  ステータスフラグ設定部，  ２６４  ステータスフラグ判定部，  ２６５  分散フラグ通知部
【図１】
2006024124.tif 000003
【図２】
2006024124.tif 000004
【図３】
2006024124.tif 000005
【図４】
2006024124.tif 000006
【図５】
2006024124.tif 000007
【図６】
2006024124.tif 000008
【図７】
2006024124.tif 000009
【図８】
2006024124.tif 000010
【図９】
2006024124.tif 000011
【図１０】
2006024124.tif 000012