以下に本発明の実施の形態を説明するが、本明細書に記載の発明と、発明の実施の形態との対応関係を例示すると、次のようになる。この記載は、本明細書に記載されている発明をサポートする実施の形態が、本明細書に記載されていることを確認するためのものである。したがって、発明の実施の形態中には記載されているが、発明に対応するものとして、ここには記載されていない実施の形態があったとしても、そのことは、その実施の形態が、その発明に対応するものではないことを意味するものではない。逆に、実施の形態が発明に対応するものとしてここに記載されていたとしても、そのことは、その実施の形態が、その発明以外の発明には対応しないものであることを意味するものでもない。
更に、この記載は、本明細書に記載されている発明の全てを意味するものでもない。換言すれば、この記載は、本明細書に記載されている発明であって、この出願では請求されていない発明の存在、すなわち、将来、分割出願されたり、補正により出現、追加される発明の存在を否定するものではない。
請求項1に記載の情報処理装置は、第1の情報処理手段(例えば、図1のメインプロセッサ42)と、 複数の第2の情報処理手段(例えば、図1のサブプロセッサ43)とを備え、第1の情報処理手段は、アプリケーションプログラムの実行を制御するアプリケーションプログラム実行制御手段(例えば、図8のアプリケーション実行制御部101)と、第2の情報処理手段の動作に関する動作情報を取得する動作情報取得手段(例えば、図8の動作情報取得部104)と、アプリケーションプログラム実行制御手段の処理により実行が制御されるアプリケーションプログラムによって、第1の情報処理手段および複数の第2の情報処理手段に割り当てられる複数の処理をまとめて一つの機能を提供する処理単位とし、動作情報取得により取得された動作情報に基づいて、手段処理単位に対応する機能を提供するための分散処理を制御する分散処理制御手段(例えば、図8の論理スレッド実行制御部102)とを備え、分散処理制御手段は、第1の情報処理手段および第2の情報処理手段において、全処理能力に対する使用中の処理能力の比率が1以上にならないように、処理単位に対応する分散処理を制御することを特徴とする。
第1の情報処理手段は、分散処理制御手段による制御に基づいて、第1の情報処理手段および第2の情報処理手段が動作可能な最大動作クロック数に対する、現在動作可能なクロック数の比(例えば、プロセッサ動作率SCPU_RATE[k])を設定するクロック数比設定手段(例えば、図8の動作率設定部103)を更に備えることができる。
請求項6に記載の情報処理方法は、第1の情報処理手段(例えば、メインプロセッサ42)と、複数の第2の情報処理手段(例えば、サブンプロセッサ43)とを備える情報処理装置の情報処理方法であって、第1の情報処理手段によるアプリケーションプログラムの実行によって、複数の第2の情報処理手段に割り当てられる複数の処理をまとめて一つの機能を提供する処理単位とし、処理単位に対応する機能を提供するための分散処理の開始を要求する分散処理開始要求ステップ(例えば、図11のステップS1または図15のステップS31の処理)と、第1の情報処理手段および第2の情報処理手段の動作に関する動作情報を基に、第1の情報処理手段および第2の情報処理手段において、全処理能力に対する使用中の処理能力の比率が1以上にならないように、処理単位に対応する分散処理の割り当てを制御する割り当て制御ステップ(例えば、図11のステップS2乃至ステップS13の処理または図16および図17を用いて説明される処理)とを含むことを特徴とする。
また、請求項7に記載のプログラムにおいても、各ステップが対応する実施の形態(但し一例)は、請求項6に記載の情報処理方法と同様である。
以下、図を参照して、本発明の実施の形態について説明する。
図1は、分散処理を実行することが可能な、通信システムの一実施の形態を示す図である。この通信システムにおいては、例えば、ホームネットワーク、LAN(Local Area Network),WAN(Wide Area Network),または、インターネットなどの広域ネットワークなどに対応するネットワーク2を介して、情報処理装置1−1乃至情報処理装置1−nとが相互に接続されている。
情報処理装置1−1は、複数の情報処理装置による分散処理の実行を指示されると、要求された処理を実行するために必要なデータおよびプログラムを含むソフトウェアセルを生成し、生成したソフトウェアセルを、ネットワーク2を介して、情報処理装置1−2乃至情報処理装置1−nのうちのいずれかの装置あてに送信する。
情報処理装置1−2乃至情報処理装置1−nは、それぞれ、情報処理装置1−1から送信されてきたソフトウェアセルを受信し、受信したソフトウェアセルを基に、要求された処理を実行する。情報処理装置1−2乃至情報処理装置1−nは、それぞれ、要求された処理を実行してから、要求された処理の結果得られたデータを、ネットワーク2を介して情報処理装置1−1あてに送信する。以下、情報処理装置1−1乃至情報処理装置1−nを個々に区別する必要のないとき、単に情報処理装置1と称する。
情報処理装置1−1は、情報処理装置1−2乃至情報処理装置1−nのうちのいずれかから送信されてきたデータを受信し、受信したデータを基に、所定の処理を実行するか、受信したデータを記録する。
情報処理装置1−1は、少なくとも1つの情報処理コントローラ11、メインメモリ12、記録部13−1、記録部13−2、バス14、操作入力部15、通信部16、表示部17、およびドライブ18を含むように構成される。
情報処理コントローラ11は、メインメモリ12に記録されている各種のプログラムを実行し、情報処理装置1−1全体を制御する。情報処理コントローラ11は、ソフトウェアセルを生成し、生成したソフトウェアセルを、バス14を介して、通信部16に供給する。情報処理コントローラ11は、通信部16から供給されたデータを記録部13−1または記録部13−2に供給する。情報処理コントローラ11は、操作入力部15から入力されるユーザの指令に基づいて、指定されたデータを、メインメモリ12、記録部13−1または記録部13−2から取得し、取得したデータを、バス14を介して通信部16に供給する。
また、情報処理コントローラ11には、情報処理装置1−1を、ネットワーク2全体を通して一意的に特定できる情報処理装置IDが割り当てられている。
情報処理コントローラ11は、バス41、メインプロセッサ42、サブプロセッサ43−1乃至サブプロセッサ43−m、DMAC(Direct Memory Access Controller)44、キー管理テーブル記録部45、およびDC(Disk Controller)46を備えている。
メインプロセッサ42、サブプロセッサ43−1乃至サブプロセッサ43−m、DMAC44、キー管理テーブル記録部45、およびDC46は、バス41を介して、相互に接続されている。また、メインプロセッサ42には、メインプロセッサ42を特定するためのメインプロセッサIDが識別子として割り当てられる。同様に、サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれには、サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれを特定するためのサブプロセッサIDのそれぞれが識別子として割り当てられる。
メインプロセッサ42は、ネットワーク2を介して接続されている、情報処理装置1−2乃至情報処理装置1−nに分散処理を実行させる場合、ソフトウェアセルを生成し、生成したソフトウェアセルをバス41およびバス14を介して、通信部16に供給する。また、メインプロセッサ42は、管理のためのプログラム以外のプログラムを実行するように構成することもできる。この場合、メインプロセッサ42は、サブプロセッサとして機能する。
メインプロセッサ42は、サブプロセッサ43−1乃至サブプロセッサ43−mに対して、それぞれのサブプロセッサに独立したプログラムを実行させ、論理的に1つの機能(論理スレッド)として結果を求めるようにすることができる。すなわち、メインプロセッサ42は、サブプロセッサ43−1乃至サブプロセッサ43−mによるプログラムの実行のスケジュール管理および情報処理コントローラ11(情報処理装置1−1)の全体の管理を行う。
メインプロセッサ42は、ローカルストレージ51−1を備え、メインメモリ12からロードしたデータおよびプログラムを、ローカルストレージ51−1に一時的に記憶させる。メインプロセッサ42は、ローカルストレージ51−1からデータおよびプログラムを読み込み、読み込んだデータおよびプログラムを基に、各種の処理を実行する。
サブプロセッサ43−1乃至サブプロセッサ43−mは、メインプロセッサ42の制御に基づいて、並列的かつ独立に、プログラムを実行し、データを処理する。更に、必要に応じて、メインプロセッサ42が実行するプログラムが、サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれが実行するプログラムのそれぞれと連携して動作するように構成することも可能である。
サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−(m+1)のそれぞれを備える。サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−(m+1)のそれぞれに、必要に応じて、データおよびプログラムを一時的に記憶させる。サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれは、ローカルストレージ51−2乃至ローカルストレージ51−(m+1)のそれぞれからデータおよびプログラムを読み込み、読み込んだデータおよびプログラムを基に、各種の処理を実行する。
以下、サブプロセッサ43−1乃至サブプロセッサ43−mのそれぞれを個々に区別する必要のないとき、単にサブプロセッサ43と称する。同様に、以下、ローカルストレージ51−1乃至ローカルストレージ51−(m+1)のそれぞれを個々に区別する必要のないとき、単にローカルストレージ51と称する。
DMAC44は、キー管理テーブル記録部45に記録されている、メインプロセッサキー、サブプロセッサキー、およびアクセスキーを基に、メインプロセッサ42およびサブプロセッサ43からのメインメモリ12に記憶されているプログラムおよびデータへのアクセスを管理する。
キー管理テーブル記録部45は、メインプロセッサキー、サブプロセッサキー、およびアクセスキーを記録している。なお、メインプロセッサキー、サブプロセッサキー、およびアクセスキーの詳細は後述する。
DC46は、メインプロセッサ42およびサブプロセッサ43からの記録部13−1および記録部13−2へのアクセスを管理する。
なお、ここでは、情報処理装置1-1に、情報処理コントローラ11が1つだけ備えられているものとして説明したが、情報処理コントローラ11は、情報処理装置1-1に複数個備えられているようにしてもよい。
メインメモリ12は、例えば、RAMから構成される。メインメモリ12は、メインプロセッサ42およびサブプロセッサ43が実行する各種のプログラムおよびデータを一時的に記憶している。
記録部13−1および記録部13−2は、それぞれ、例えば、ハードディスクなどにより構成される。記録部13−1および記録部13−2は、メインプロセッサ42およびサブプロセッサ43が実行する各種のプログラムおよびデータを記録している。また、記録部13−1および記録部13−2は、情報処理コントローラ11から供給されたデータを記録する。以下、記録部13−1および記録部13−2を個々に区別する必要のないとき、単に記録部13と称する。
また、情報処理コントローラ11には、バス14を介して、操作入力部15、通信部16、表示部17、およびドライブ18が接続されている。操作入力部15は、例えば、キー、ボタン、タッチパッド、マウスなどよりなり、ユーザによる操作入力を受け、操作入力に対応する情報を、バス14を介して、情報処理コントローラ11に供給する。
通信部16は、情報処理コントローラ11から供給されたソフトウェアセルを、ネットワーク2を介して情報処理装置1−2乃至情報処理装置1−nあてに送信する。また、通信部16は、情報処理装置1−2乃至情報処理装置1−nから送信されてきたデータを、バス14を介して、情報処理コントローラ11に供給する。
表示部17は、例えば、CRT(cathode ray tube)やLCD(Liquid Crystal Display)などで構成されており、バス14を介して供給された情報処理コントローラ11の処理により生成された情報(例えば、アプリケーションプログラムの実行により生成されたデータや、アプリケーションプログラムの実行に必要なユーザへの通知などの情報を含む)を表示させる。
ドライブ18は、磁気ディスク61、光ディスク62、光磁気ディスク63、あるいは半導体メモリ64などが装着されたとき、それらを駆動し、そこに記録されているプログラムやデータなどを取得する。取得されたプログラムやデータは、必要に応じて、バス14を介して、情報処理コントローラ11に転送され、情報処理コントローラ11によって、記録部13に記録される。
また、情報処理装置1には、情報処理装置1の全体に電源供給を行うために、電源部19が設けられている。
なお、情報処理装置1−2乃至情報処理装置1−nは、情報処理装置1−1と同様に構成されるので、その説明は省略する。情報処理装置1−2乃至情報処理装置1−nは上述した構成に限らず、必要に応じて、機能を追加したり削除したりすることは可能であり、その機能に対応した構成をもつことが可能である。
次に、図2乃至図4を参照して、サブプロセッサ43がメインメモリ12にアクセスする場合の処理について説明する。
図2で示されるように、メインメモリ12には、複数のアドレスを指定できるメモリロケーションが配置される。各メモリロケーションに対しては、データの状態を示す情報を格納するための追加セグメントが割り振られる。追加セグメントは、F/Eビット、サブプロセッサIDおよびLSアドレス(ローカルストレージアドレス)を含む。また、各メモリロケーションには、後述するアクセスキーが割り振られる。
“0”であるF/Eビットは、サブプロセッサ43によって読み出されている処理中のデータ、または空き状態であるため最新データではない無効データであり、そのメモリロケーションから読み出し不可であることを示す。また、“0”であるF/Eビットは、そのメモリロケーションにデータ書き込み可能であることを示し、データが書き込まれると、F/Eビットは“1”に設定される。
“1”であるF/Eビットは、そのメモリロケーションのデータがサブプロセッサ43によって読み出されておらず、未処理の最新データであることを示す。F/Eビットが“1”であるメモリロケーションのデータは読み出し可能であり、サブプロセッサ43によって読み出されてから、F/Eビットは“0”に設定される。また、“1”であるF/Eビットは、メモリロケーションがデータ書き込み不可であることを示す。
更に、F/Eビットが“0”(読み出し不可/書き込み可)である状態において、メモリロケーションについて読み出し予約を設定することが可能である。F/Eビットが“0”であるメモリロケーションに対して読み出し予約を行う場合には、サブプロセッサ43は、読み出し予約を行うメモリロケーションの追加セグメントに、読み出し予約情報としてサブプロセッサ43のサブプロセッサIDおよびLSアドレスを書き込む。そして、データを書き込むサブプロセッサ43によって、読み出し予約されたメモリロケーションにデータが書き込まれ、F/Eビットが“1”(読み出し可/書き込み不可)に設定されたとき、予め読み出し予約情報として追加セグメントに書き込まれているサブプロセッサIDおよびLSアドレスによって特定されるローカルストレージ51に読み出される。
複数のサブプロセッサ43によってデータを多段階に処理する必要がある場合、このように各メモリロケーションのデータの読み出しおよび書き込みを制御することによって、前段階の処理を行うサブプロセッサ43が、処理済みのデータをメインメモリ12における所定のアドレスに書き込んだ後に即座に、後段階の処理を行う別のサブプロセッサ43が前処理後のデータを読み出すことが可能となる。
また、図3で示されるように、サブプロセッサ43のローカルストレージ51は、複数のアドレスを指定できるメモリロケーションによって構成される。各メモリロケーションに対しては、同様に追加セグメントが割り振られる。追加セグメントは、ビジービットを含む。
サブプロセッサ43がメインメモリ12に記憶されているデータをサブプロセッサ43のローカルストレージ51のメモリロケーションに読み出すときには、対応するビジービットを“1”に設定して予約する。ビジービットが“1”であるメモリロケーションには、他のデータを格納することができない。ローカルストレージ51のメモリロケーションにデータが読み出されると、ビジービットは“0”に設定され、他のデータを格納することができるようになる。
更に、図2で示すように、情報処理コントローラ11に接続されているメインメモリ12には、複数のサンドボックスが含まれる。サンドボックスは、メインメモリ12内の領域を画定するものであり、各サンドボックスは、各サブプロセッサ43に割り当てられ、割り当てられたサブプロセッサ43が排他的に使用することができる。すなわち、サブプロセッサ43は、割り当てられたサンドボックスを使用できるが、この領域を超えてデータにアクセスすることはできない。
メインメモリ12は、複数のメモリロケーションから構成されるが、サンドボックスは、これらのメモリロケーションの集合である。
更に、メインメモリ12の排他的な制御を実現するために、図4で示されるキー管理テーブルが用いられる。キー管理テーブルは、キー管理テーブル記録部45に記録され、DMAC44と関連付けられる。キー管理テーブル内の各エントリには、サブプロセッサID、サブプロセッサキーおよびキーマスクが含まれる。
サブプロセッサ43がメインメモリ12にアクセスする場合、サブプロセッサ43はDMAC44に、読み出しまたは書き込みのコマンドを出力する。このコマンドには、サブプロセッサ43を特定するサブプロセッサIDおよびアクセス要求先であるメインメモリ12のアドレスが含まれる。
DMAC44は、サブプロセッサ43から供給されたコマンドを実行する場合、キー管理テーブルを参照して、アクセス要求元のサブプロセッサ43のサブプロセッサキーを調べる。そして、DMAC44は、調べたアクセス要求元のサブプロセッサキーと、アクセス要求先であるメインメモリ12のメモリロケーションに割り振られたアクセスキーとを比較して、2つのキーが一致した場合にのみ、サブプロセッサ43から供給されたコマンドを実行する。
図4に示されるキー管理テーブルに記録されているキーマスクは、その任意のビットが“1”になることによって、そのキーマスクと関連付けられたサブプロセッサキーの対応するビットを“0”または“1”にすることができる。
例えば、サブプロセッサキーが“1010”であるとする。通常、このサブプロセッサキーによって“1010”のアクセスキーを持つサンドボックスへのアクセスだけが可能になる。しかし、このサブプロセッサキーと関連付けられたキーマスクが“0001”に設定されている場合には、キーマスクのビットが“1”に設定された桁のみにつき、サブプロセッサキーとアクセスキーとの一致判定がマスクされ(キーマスクのビットが“1”に設定された桁について、判定されず)、このサブプロセッサキー“1010”によってアクセスキーが“1010”または“1011”のいずれかであるアクセスキーを持つサンドボックスへのアクセスが可能となる。
以上のようにして、メインメモリ12のサンドボックスの排他性が実現される。すなわち、複数のサブプロセッサ43によってデータを多段階に処理する必要がある場合、以上のように構成することによって、前段階の処理を行うサブプロセッサ43と、後段階の処理を行うサブプロセッサ43のみが、メインメモリ12の所定のアドレスにアクセスできるようになり、データを保護することができる。
例えば、キーマスクの値は、以下のように変更されることが考えられる。まず、情報処理装置1−1の起動直後においては、キーマスクの値は全て“0”である。メインプロセッサ42にロードされたプログラムが実行され、サブプロセッサ43にロードされたプログラムと連携動作するものとする。サブプロセッサ43−1により出力された処理結果データを、メインメモリ12に記憶させ、メインメモリ12に記憶させた処理結果データを、サブプロセッサ43−2に入力したいときには、サブプロセッサ43−1により出力された処理結果データを記憶しているメインメモリ12の領域は、サブプロセッサ43−1およびサブプロセッサ43−2からアクセス可能である必要がある。そのような場合に、メインプロセッサ42は、キーマスクの値を適切に変更し、複数のサブプロセッサ43からアクセスできるメインメモリの領域を設けることにより、サブプロセッサ43による多段階的の処理を可能にする。
より具体的には、例えば、情報処理装置1−2乃至情報処理装置1−nから送信されてきたデータを基に、サブプロセッサ43−1が所定の処理実行し、処理が施されたデータをメインメモリ12の第1の領域に記憶させる。そして、サブプロセッサ43−2は、メインメモリ12の第1の領域から、記憶されているデータを読み出し、読み出したデータを基に、所定の処理を実行し、処理が施されたデータをメインメモリ12の第1の領域とは、異なる第2の領域に記憶させる。
ここで、サブプロセッサ43−1のサブプロセッサキーが“0100”であり、メインメモリ12の第1の領域のアクセスキーが“0100”であり、サブプロセッサ43−2のサブプロセッサキーが“0101”であり、メインメモリ12の第2の領域のアクセスキーが“0101”である場合、サブプロセッサ43−2は、メインメモリ12の第1の領域にアクセスすることができない。そこで、サブプロセッサ43−2のキーマスクを“0001”にすることによって、サブプロセッサ43−2は、メインメモリ12の第1の領域にアクセスすることができるようになる。
次に、図5および図6を参照して、情報処理装置1−1がソフトウェアセルを生成し、生成したソフトウェアセルを基に、情報処理装置1−2乃至情報処理装置1−nに分散処理を実行させる場合の処理について説明する。
情報処理装置1−1のメインプロセッサ42は、処理を実行するために必要なコマンド、プログラム、およびデータを含むソフトウェアセルを生成し、ネットワーク2を介して情報処理装置1−2乃至情報処理装置1−nあてに送信する。
図5は、ソフトウェアセルの構成の例を示す図である。
ソフトウェアセルは、送信元ID、送信先ID、応答先ID、セルインターフェース、DMAコマンド、プログラム、およびデータを含むように構成される。
送信元IDには、ソフトウェアセルの送信元である情報処理装置1−1のネットワークアドレスおよび情報処理装置1−1の情報処理コントローラ11の情報処理装置ID、更に、情報処理装置1−1の情報処理コントローラ11が備えるメインプロセッサ42およびサブプロセッサ43の識別子(メインプロセッサIDおよびサブプロセッサID)が含まれる。
送信先IDには、ソフトウェアセルの送信先である情報処理装置1−2乃至情報処理装置1−nのネットワークアドレス、情報処理装置1−2乃至情報処理装置1−nの情報処理コントローラの情報処理装置ID、および情報処理装置1−2乃至情報処理装置1−nの情報処理コントローラが備えるメインプロセッサおよびサブプロセッサの識別子が含まれる。
また、応答先IDには、ソフトウェアセルの実行結果の応答先である情報処理装置1−1のネットワークアドレス、情報処理装置1−1の情報処理コントローラ11の情報処理装置ID、および情報処理コントローラ11が備えるメインプロセッサ42およびサブプロセッサ43の識別子が含まれる。
セルインターフェースは、ソフトウェアセルの利用に必要な情報であり、グローバルID、必要なサブプロセッサの情報、サンドボックスサイズ、および前回のソフトウェアセルIDから構成される。
グローバルIDは、ネットワーク2全体を通してソフトウェアセルを一意的に識別できるものであり、送信元ID、およびソフトウェアセルの生成または送信の日時(日付および時刻)を基に、生成される。
必要なサブプロセッサの情報には、ソフトウェアセルの実行に必要なサブプロセッサの数などが設定される。サンドボックスサイズには、ソフトウェアセルの実行に必要なメインメモリおよびサブプロセッサのローカルストレージのメモリ量が設定される。
前回のソフトウェアセルIDは、ストリーミングデータなどのシーケンシャルな実行を要求する1つのグループを構成するソフトウェアセル内の、前回のソフトウェアセルの識別子である。
ソフトウェアセルの実行セクションは、DMAコマンド、プログラムおよびデータから構成される。DMAコマンドには、プログラムの起動に必要な一連のDMAコマンドが含まれ、プログラムには、サブプロセッサによって実行されるサブプロセッサプログラムが含まれる。ここでのデータは、このサブプロセッサプログラムを含むプログラムによって処理されるデータである。
更に、DMAコマンドには、ロードコマンド、キックコマンド、機能プログラム実行コマンド、ステータス要求コマンド、およびステータス返信コマンドが含まれる。
ロードコマンドは、メインメモリ12に記憶されている情報をサブプロセッサのローカルストレージにロードさせるコマンドであり、ロードコマンドのほかに、メインメモリアドレス、サブプロセッサIDおよびLSアドレスを含む。メインメモリアドレスは、情報のロード元であるメインメモリの所定の領域のアドレスを示す。サブプロセッサIDおよびLSアドレスは、情報のロード先であるサブプロセッサの識別子およびローカルストレージのアドレスを示す。
キックコマンドは、プログラムの実行を開始するコマンドであり、キックコマンドのほかに、サブプロセッサIDおよびプログラムカウンタを含む。サブプロセッサIDは、キック対象のサブプロセッサを識別し、プログラムカウンタは、プログラム実行用プログラムカウンタのためのアドレスを与える。
機能プログラム実行コマンドは、ある装置(例えば、情報処理装置1−1)が他の装置(例えば、情報処理装置1−2乃至情報処理装置1−nのうちのいずれか)に対して、機能プログラムの実行を要求するコマンドである。機能プログラム実行コマンドを受信した装置(例えば、情報処理装置1−2乃至情報処理装置1−nのうちのいずれか)の情報処理コントローラは、機能プログラムIDによって、起動すべき機能プログラムを識別する。
ステータス要求コマンドは、送信先IDで示される情報処理装置1−2乃至情報処理装置1−nの現在の動作状態(状況)に関する装置情報を、応答先IDで示される情報処理装置1−1あてに送信要求するコマンドである。
ステータス返信コマンドは、ステータス要求コマンドを受信した情報処理装置1−2乃至情報処理装置1−nが、装置情報をステータス要求コマンドに含まれる応答先IDで示される情報処理装置1−1に応答するコマンドである。ステータス返信コマンドは、実行セクションのデータ領域に装置情報を格納する。
図6は、DMAコマンドがステータス返信コマンドである場合におけるソフトウェアセルのデータ領域の構造を示す図である。
情報処理装置IDは、情報処理コントローラを備える情報処理装置1を識別するための識別子であり、ステータス返信コマンドを送信する情報処理装置1−2乃至情報処理装置1−nのIDを示す。情報処理装置IDは、例えば、情報処理装置1−2乃至情報処理装置1−nのそれぞれの電源がオンされたとき、情報処理装置1−2乃至情報処理装置1−nの情報処理コントローラ11に含まれるメインプロセッサ42によって、電源がオンされたときの日時、情報処理装置1−2乃至情報処理装置1−nのネットワークアドレス、および、情報処理装置1−2乃至情報処理装置1−nの情報処理コントローラ11に含まれるサブプロセッサ43の数などに基づいて生成される。
情報処理装置種別IDには、情報処理装置1−2乃至情報処理装置1−nの特徴を表す値が含まれる。情報処理装置1−2乃至情報処理装置1−nの特徴とは、情報処理装置1−2乃至情報処理装置1−nがどのような装置であるかを示す情報であり、例えば、情報処理装置1−2乃至情報処理装置1−nが、ハードディスクレコーダ、PDA(Personal Digital Assistants)、ポータブルCD(Compact Disc)プレーヤなどであることを示す情報である。また、情報処理装置種別IDは、映像音声記録、映像音声再生など、情報処理装置1−2乃至情報処理装置1−nが有する機能を表すものであってもよい。情報処理装置1−2乃至情報処理装置1−nの特徴や機能を表す値は予め決定されているものとし、ステータス返信コマンドを受信した情報処理装置1−1は、情報処理装置種別IDを読み出すことにより、情報処理装置1−2乃至情報処理装置1−nの特徴や機能を把握することが可能である。
MS(マスタ/スレーブ)ステータスは、情報処理装置1−2乃至情報処理装置1−nがマスタ装置またはスレーブ装置のいずれで動作しているかを表すもので、これが0に設定されている場合にはマスタ装置として動作していることを示し、1に設定されている場合にはスレーブ装置として動作していることを示す。
メインプロセッサ動作周波数は、情報処理コントローラ11のメインプロセッサ42の動作周波数を表す。メインプロセッサ使用率は、メインプロセッサ42で現在動作している全てのプログラムについての、メインプロセッサ42での使用率を表す。メインプロセッサ使用率は、メインプロセッサ42の全処理能力に対する使用中の処理能力の比率を表した値で、例えば、プロセッサ処理能力評価のための単位であるMIPSを単位として算出され、または単位時間あたりのプロセッサ使用時間に基づいて算出される。
サブプロセッサ数は、情報処理コントローラ11が備えるサブプロセッサ43の数を表す。サブプロセッサIDは、情報処理コントローラ11のサブプロセッサ43を識別するための識別子である。
サブプロセッサステータスは、サブプロセッサ43の状態を表すものであり、“unused”、“reserved”、および“busy”などの状態がある。“unused”は、サブプロセッサ43が現在使用されてなく、使用の予約もされていないことを示す。“reserved”は、現在は使用されていないが、予約されている状態を示す。“busy”は、現在使用中であることを示す。
サブプロセッサ使用率は、サブプロセッサ43で現在実行している、またはサブプロセッサ43に実行が予約されているプログラムについての、サブプロセッサ43での使用率を表す。すなわち、サブプロセッサ使用率は、サブプロセッサステータスが“busy”である場合には、現在の使用率を示し、サブプロセッサステータスが“reserved”である場合には、後に使用される予定の推定使用率を示す。
サブプロセッサID、サブプロセッサステータスおよびサブプロセッサ使用率は、1つのサブプロセッサ43に対して一組設定され、1つの情報処理コントローラ11のサブプロセッサ43に対応する組数が設定される。
メインメモリ総容量およびメインメモリ使用量は、それぞれ、情報処理コントローラ11に接続されているメインメモリ12の総容量および現在使用中の容量を表す。
記録部数は、情報処理コントローラ11に接続されている記録部13の数を表す。記録部IDは、情報処理コントローラ11に接続されている記録部13を一意的に識別する情報である。記録部種別IDは、記録部13の種類(例えば、ハードディスク、CD±RW、DVD±RW、メモリディスク、SRAM、ROMなど)を表す情報である。
記録部総容量および記録部使用量は、それぞれ、記録部IDによって識別される記録部13の総容量および現在使用中の容量を表す。
記録部ID、記録部種別ID、記録部総容量および記録部使用量は、1つの記録部13に対して一組設定されるものであり、情報処理コントローラ11に接続されている記録部13の数の組数だけ設定される。すなわち、1つの情報処理コントローラ11に複数の記録部13が接続されている場合、それぞれの記録部13には異なる記録部IDが割り当てられ、記録部種別ID、記録部総容量および記録部使用量も個別に管理される。
このようにして、情報処理装置1−1は、情報処理装置1−2乃至情報処理装置1−nに分散処理を実行させる場合、ソフトウェアセルを生成し、生成したソフトウェアセルを、ネットワーク2を介して情報処理装置1−2乃至情報処理装置1−nあてに送信する。
なお、以下、情報処理装置1−1から情報処理装置1−2乃至情報処理装置1−nあてに送信される各種データは、ソフトウェアセルに格納されて送信されるものとし、繰り返しになるので、その説明は省略する。
情報処理装置−2乃至情報処理装置1−nのうちのいずれかの情報処理コントローラ11に含まれるメインプロセッサ42は、以上のような構成のソフトウェアセルを生成し、ネットワーク2を介して他の情報処理装置1の情報処理コントローラ11に、生成されたソフトウェエアセルを送信する。送信元の情報処理装置1、送信先の情報処理装置1、応答先の情報処理装置1、および、それぞれに設けられている情報処理コントローラ11は、それぞれ、上述した送信元ID、送信先IDおよび応答先IDによって識別される。
ソフトウェアセルを受信した情報処理装置1の情報処理コントローラ11に含まれるメインプロセッサ42は、そのソフトウェアセルをメインメモリ12に格納する。更に、送信先のメインプロセッサ42は、ソフトウェアセルを読み出し、それに含まれるDMAコマンドを処理する。
具体的に、送信先のメインプロセッサ42は、まず、ロードコマンドを実行する。これによって、メインメモリ12の、ロードコマンドで指示されたアドレスから、ロードコマンドに含まれるサブプロセッサIDおよびLSアドレスで特定されるサブプロセッサ43のローカルストレージ51の所定領域に、情報がロードされる。ここでロードされる情報は、受信したソフトウェアセルに含まれるサブプロセッサプログラムやプログラムの実行に必要なデータ、または、その他の指示されたデータである。
次に、メインプロセッサ42は、キックコマンドを、これに含まれるサブプロセッサIDで指示されたサブプロセッサ43に、同様にキックコマンドに含まれるプログラムカウンタとともに出力する。
指示されたサブプロセッサは、そのキックコマンドおよびプログラムカウンタに従って、サブプロセッサプログラムを実行する。そして、実行結果をメインメモリ12に格納した後、実行を完了したことをメインプロセッサ42に通知する。
なお、送信先の情報処理装置1の情報処理コントローラ11において、ソフトウェアセルを実行するプロセッサは、サブプロセッサ43に限定されなくてもよく、メインプロセッサ42を、ソフトウェアセルに含まれる機能プログラムなどを実行するプロセッサとして指定することも可能である。
この場合には、送信元の情報処理装置1は、送信先の情報処理装置1宛に、サブプロセッサプログラムの代わりに、メインメモリ用プログラムおよびそのメインメモリ用プログラムによって処理されるデータを含み、かつ、DMAコマンドがロードコマンドであるソフトウェアセルを送信し、メインメモリ12にメインメモリ用プログラムおよびそれによって処理されるデータを記憶させる。次に、送信元の情報処理装置1は、送信先の情報処理装置1宛に、送信先の情報処理装置1の情報処理コントローラ11についてのメインプロセッサID、メインメモリアドレス、メインメモリ用プログラムを識別するための機能プログラムIDなどの識別子、およびプログラムカウンタを含み、かつ、DMAコマンドがキックコマンドまたは機能プログラム実行コマンドであるソフトウェアセルを送信して、メインプロセッサ42にメインメモリ用プログラムを実行させるようにすることができる。
以上のように、本発明を適用したネットワークシステムでは、ソフトウェアセルの送信元の情報処理装置1は、サブプロセッサプログラムまたはメインメモリ用プログラムをソフトウェアセルによって送信先の情報処理装置1に送信するとともに、サブプロセッサプログラムを、送信先の情報処理装置1の情報処理コントローラ11に設けられているサブプロセッサ43にロードさせることにより、サブプロセッサプログラムまたはメインメモリ用プログラムを、送信先の情報処理装置1に実行させることができる。
ソフトウェアセルの送信先の情報処理装置1の情報処理コントローラ11では、受信したソフトウェアセルに含まれるプログラムがサブプロセッサプログラムである場合、このサブプロセッサプログラムを指定されたサブプロセッサ43にロードさせる。そして、指定されたサブプロセッサ43に、ソフトウェアセルに含まれるサブプロセッサプログラムまたはメインメモリ用プログラムを実行させる。
したがって、ユーザは、ソフトウェアセルの送信先の情報処理装置1を操作することなく、自動的に、サブプロセッサプログラムまたはメインメモリ用プログラムが、ソフトウェアセルの送信元の情報処理装置1から、送信先の情報処理装置1に割り当てられ、ソフトウェアセルの送信先の情報処理装置1の情報処理コントローラ11により、実行させることができる。また、それぞれのサブプロセッサ43間では、DMA方式によりデータ転送が行われ、上述したサンドボックスを使用することによって、1つの情報処理コントローラ11において、データを多段階に処理する必要がある場合においても、高速かつ高セキュリティに処理を実行することができる。
図7に、情報処理コントローラ11のメインメモリ12が記憶するソフトウェアの構成を表すソフトウェアスタックを示す。これらのソフトウェア(プログラム)は、情報処理装置1に電源が投入される前においては、情報処理コントローラ11に接続される記録部13に記録されているものである。
ドライバソフト81-1乃至81-pは、ハードウェアを動作させるための専用ソフトウェアである。ドライバソフト81-1乃至81-pには、例えば、操作入力部15に接続されているマウスを動作させるためのマウスドライバ、表示部17に画像を表示させるためのビデオカードを動作させるためのディスプレイドライバ、通信部16を介して接続されている図示しないプリンタを動作させるためのプリンタドライバなどがある。
カーネル(OS)82は、情報処理コントローラ11の基本的な動作を制御しているものであり、各種資源を管理し、例えば、アプリケーションプログラム87が発生した命令を、ドライバソフト81-1乃至81-pに伝える。また、カーネル82は、アプリケーションプログラム87の実行コンテキスト(あるアプリケーションプログラム87が利用しているレジスタセットやメインメモリイメージ、ファイルハンドルなど)やGUIの部品などのソフトウェア資源の管理も行なうようになされている。
デバイスドライバ83は、情報処理コントローラ11または情報処理装置1へのデータの入出力(送受信)機能を実行するためのドライバであり、例えば、放送受信、モニタ出力、ビットストリーム入出力、ネットワーク入出力など、情報処理コントローラ11ごとに、情報処理装置1が有する機能に応じたものが備えられるようになされている。
ライブラリ84は、DLL(Dynamic Link Library)とも称され、いくつかの関数を書庫のようにまとめ、ソフトウェアの実行に必要な機能を独立したファイルとして共通化したものであり、通常はファイルそのものをDLLと称する。サブルーチンはプログラム内部のものだが、ライブラリ84はプログラムとは別に実行時にロードされるものとして区別される。ライブラリ84として提供されている機能は新たに開発せずにすむので、アプリケーションプログラム87の開発効率が高まり、更に、同じプログラム部品を複数のアプリケーションプログラム87で共有することができるので、ディスクやメモリの容量を節約することができる。
パワーマネージャ85は、デバイスドライバ83により管理されているメインプロセッサ42およびサブプロセッサ43のそれぞれの動作状況と、実行を要求されたアプリケーションプログラム87の実行に必要な条件を判断して、それぞれのプロセッサの消費電力を管理し、分散処理の割り当てを決定したり、分散処理の割り当てが可能でなかったときには、要求された処理の実行のキャンセルを、システムサービス/フレームワーク86に通知する。すなわち、パワーマネージャ85は、情報処理コントローラ11のメインプロセッサ42およびサブプロセッサ43が実行する分散処理を制御するものであり、メインプロセッサ42およびサブプロセッサ43のそれぞれの動作状況を管理し、アプリケーションプログラム87により要求される論理スレッドを実行するための分散処理の割り当てを決定して、プログラムおよびデータを、対応するメインプロセッサ42およびサブプロセッサ43のそれぞれ対応するものにロードさせて実行させる。
具体的には、パワーマネージャ85は、アプリケーションプログラム87により要求される処理が実行可能で、かつ、情報処理コントローラ11の消費電力を下げることができるように、メインプロセッサ42およびサブプロセッサ43の動作クロック数を最適な値に制御する。ここで、それぞれのプロセッサの最大動作クロック数に対して、現在設定されているクロック数の比を、プロセッサ動作率と定義する。プロセッサ動作率は、それぞれのメインプロセッサ42およびサブプロセッサ43において、独立して制御することも、同一であるものとして制御することも可能である。すなわち、メインプロセッサ42およびサブプロセッサ43は、潜在的には、最大動作クロック数で動作することが可能であるが、実質的にはパワーマネージャ85により設定されたプロセッサ動作率に基づく上限動作クロック数で動作するようになされている。
すなわち、プロセッサ動作率SCPU_RATE[k](kは、パワーマネージャ85により制御されるプロセッサを区別可能なように割り当てられた番号)は、上限動作クロック数/最大動作クロック数SCPU_CK[k]で表され、プロセッサ動作率が、それぞれのメインプロセッサ42およびサブプロセッサ43において、同一であるものとして制御されている場合、プロセッサ動作率SCPU_RATE[k]=SYSTEM_RATEである。
また、プロセッサ使用率SCPU_STAT[k]は、各プロセッサにおいて、規定時間内にアプリケーションプログラムの実行に使用するサイクル数(但し1サイクルの周期は、CPU最大動作クロック数の逆数とする)/規定時間/最大動作クロック数SCPU_CK[k]で表される。
例えば、メインプロセッサ42およびサブプロセッサ43が、潜在的には最大動作クロック数1.2MHzで動作可能であるものとする。この時、プロセッサ動作率として、例えば、1.0、0.5、0.25を設定することができるならば、上限動作クロック数は、1.2MHz、600Hz、300Hzとなる。具体的には、プロセッサ動作率が0.5に設定された場合、上限動作クロック数は、1.2MHz×0.5=600Hzとなる。そして、規定時間1sec内に、アプリケーションプログラムの実行に300サイクルが使用される場合、プロセッサ使用率SCPU_STAT[k]は、300サイクル/1sec/1.2MHz=0.25となる。
すなわち、プロセッサ使用率と、プロセッサ動作率とは、常に、次の式(1)の関係が成立する。
0≦プロセッサ使用率(SCPU_STAT[k])≦プロセッサ動作率(SCPU_RATE[k])≦1.0・・・(1)
また、パワーマネージャ85は、処理が割り当てられていないサブプロセッサ43に対してサスペンド(Suspend)モードを設定し、対応するサブプロセッサには処理が割り当てられないようにすることにより、情報処理コントローラ11の消費電力を下げることができるものとする。
システムサービス/フレームワーク86は、アプリケーションプログラム87により実行される処理を、情報処理装置1の複数のサブプロセッサ43にそれぞれ割り当てて分散処理を実行させたり、または、複数の情報処理装置1によって分散処理を実行させるシステムサービスを提供するソフトウェアモジュール群である。
アプリケーションプログラム87は、情報処理コントローラ11を用いて、例えば、放送波の受信の制御、コンテンツの記録または再生、3次元グラフィックスの演算処理、電子メールの授受、ウェブページの閲覧など、それぞれの目的を実現するためのソフトウェアプログラムである。例えば、3次元グラフィックスを処理するためのアプリケーションプログラム87が実行される場合、1画面分の処理を画素ごとに分割して、同じプログラム、同じモデルデータを基に、複数のプロセッサで並列に演算させるようにすることができる。すなわち、情報処理コントローラ11を用いて、3次元グラフィックスを処理するためのアプリケーションプログラム87が実行される場合、システムサービス/フレームワーク86により、画素ごとに分割された処理が、複数のサブプロセッサ43にそれぞれ割り当てられ、並列して演算されるようにすることができる。
図8は、情報処理コントローラ11が、それぞれのプロセッサの消費電力を管理し、分散処理の割り当てを制御する機能について説明するための機能ブロック図である。
図8において、アプリケーション実行制御部101、論理スレッド実行制御部102、動作率設定部103、動作情報取得部104、および、動作情報メモリ105は、基本的に、情報処理装置1のメインプロセッサ42により実現される機能である。
なお、図8において、これらの機能を実現するハードウェアが、上述するとおりではない場合、例えば、メインプロセッサ42により実現される機能のうちの一部が、異なるハードウェアにより実現される場合なども、本発明は適用可能であることは言うまでもない。
また、これらの構成は、全てが1つのチップ内にあってもよいし、個別のチップとして構成されていてもよい。
アプリケーション実行制御部101は、所定のアプリケーションプログラムを実行するための演算処理を実行する。また、アプリケーション実行制御部101は、サブプロセッサ43のうちのいずれかに分散処理を実行させる場合、論理スレッド実行制御部102に、論理スレッドの設定情報として、図9に示されるREQUEST_information(アプリ要求条件)を供給して、論理スレッドの生成を要求する。論理スレッドとは、複数のサブプロセッサ43のそれぞれに必要に応じて割り当てられた複数のプログラム(それらのプログラムは、同一のアプリケーションプログラムに対応するものであっても、異なるアプリケーションプログラムに対応するものであってもかまわない)をまとめて一つの機能を提供する処理単位と定義したものである。換言すれば、複数のサブプロセッサ43のそれぞれに必要に応じて割り当てられた複数のプログラムは、メインメモリ12の所定の記憶領域に記憶されているプログラムであり、アプリケーション実行制御部101により実行が制御されているアプリケーションプログラムの要求により、メインメモリ12から対応するサブプロセッサ43のローカルストレージ51にロードされて実行されるものである。
図9に示される、アプリケーション実行制御部101から論理スレッド実行制御部102に供給されるREQUEST_information(アプリ要求条件)には、アプリケーションを識別するための16バイトのID(アプリケーションID)、規定時間内に処理を終わらせる必要性の有無を示す1バイトのREQ_REAL情報、サブプロセッサの割り当てを決定する場合において優先してほしいサブプロセッサのサブプロセッサIDを示す1バイトのPRIORITY_ID、要求する処理に必要なサブプロセッサの数を示すREQ_NUM情報が先頭にあり、その後、処理が割り当てられるプロセッサに要求される、要求する処理によって占有されるメモリ容量を示すREQ_MEM情報、処理が割り当てられるプロセッサに要求される、要求する処理によって占有される規定時間内処理サイクル数を示すREQ_PC情報が、メインプロセッサ42に割り当てられる処理と、REQ_NUM情報に示される、処理に必要なサブプロセッサの数と同数格納される。具体的には、REQ_MEM0およびREQ_PC0として、メインプロセッサ42に要求されるメモリ容量とサイクル数が格納され、続いて、REQ_MEM1およびREQ_PC1、REQ_MEM2およびREQ_PC2・・・として、それぞれのサブプロセッサに要求されるメモリ容量とサイクル数が格納され格納されている。サブプロセッサに対応するREQ_MEMおよびREQ_PCのそれぞれの情報が格納される順番は、必要なサイクル数が大きい順番に配列され、サイクル数が同じ場合には必要なメモリ量が大きい順番に配列されるものとすると好適である。
ここでは、REQ_REAL=1のときリアルタイム処理が必要であることを示し、処理サイクル数とは、アプリケーションの実行に必要な処理量に対応する値である。また、アプリケーションプログラムの実行要求およびREQUEST_informationの供給は、ネットワーク2を介して、自分自身とは異なる他の情報処理装置1の情報処理コントローラ11から供給される場合もある。
図8の説明に戻る。
論理スレッド実行制御部102は、内部に、レジスタおよびメモリを有し、アプリケーション実行制御部101により実行されるアプリケーションプログラムに対応する論理スレッドの生成および削除を行う。具体的には、論理スレッド実行制御部102は、アプリケーション実行制御部101から供給される、図9に示されるREQUEST_informationと、動作情報メモリ105に記憶されるサブプロセッサ43のそれぞれの動作状態を基に、サブプロセッサ43に対して、分散処理を適切に割り当てることにより、消費電力量の増加を抑制しつつ、生成した論理スレッドの状態監視と動作制御を行う。論理スレッド実行制御部102は、情報処理コントローラ101の全体の管理情報が記載されたテーブルと、実行される論理スレッドごとに、論理スレッドの実行に必要な情報が記載されたテーブルを作成し、必要に応じて、テーブルの情報を参照し、更新することにより、論理スレッドの実行を制御する。
論理スレッド実行制御部102において管理される情報としては、上述したREQUEST_information以外に、情報処理コントローラ11が有するサブプロセッサ43の数を示すNUM_SCPU、例えば、1secなど、分散処理の割り当ての判別を行う場合の基準時間として用いられる規定時間を示すTIME_DEF、メモリ使用率に対する余裕分(マージン)を示すMEM_MAGINE、k番目のプロセッサでスレッド(アプリケーション)を切り替えた場合のオーバーヘッド量を示すTHREAD_OVERHEAD[k]、k番目のプロセッサのプロセッサ動作率の設定値(0乃至1の値)を示すSCPU_RATE[k]、k番目のプロセッサのプロセッサ使用率に対するプロセッサ動作率の余裕分(マージン)を示すRATE_MAGINE、および、リアルタイム処理が要求されていないアプリケーションにおいて、割り当て処理が成功しない場合に、割り当て処理ループを打ち切る回数を示すN_GIVEUPがある。
ここで、k番目のプロセッサとは、0番目がメインプロセッサ42を、1番目以降がサブプロセッサ43のうちのいずれかを示すものとする。また、MEM_MAGINEには、例えば、10Kbytesなどの値が用いられ、RATE_MAGINEには、例えば、0.1などの値が用いられ、それぞれ、分散処理の割り当ての判別を行う場合に用いられる。また、スレッドを切り替えた場合のオーバーヘッド量とは、具体的には、現在プロセッサにおいて実行されている処理のコンテキストを、ローカルストレージ51から退避させ、また、元の状態に戻す前に必要なサイクル数である。
なお、全てのプロセッサにおいてプロセッサ動作率を共通であるものとして制御されている場合、プロセッサ動作率の設定値は、SYSTEM_RATEとあらわされる。また、次の式(2)が成り立つ。
プロセッサ上限動作クロック数=プロセッサ最大動作クロック数×プロセッサ動作率
・・・(2)
動作率設定部103は、論理スレッド実行制御部102の制御に基づいて、メインプロセッサ42およびサブプロセッサ43のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEを設定するとともに、設定されたプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEの値を、動作情報メモリ105に供給して登録する。
動作情報取得部104は、サブプロセッサ43の動作情報を取得し、動作情報メモリ105に供給する。
動作情報メモリ105は、ローカルストレージ51-1の記憶領域のうちの少なくとも一部に対応し、動作情報取得部104の処理により取得されたサブプロセッサ43の動作情報、および、メインプロセッサ42の動作情報と、動作率設定部103により設定された、メインプロセッサ42およびサブプロセッサ43のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEを記憶する。
動作情報メモリ105に記録される情報には、例えば、メインプロセッサ42およびサブプロセッサ43が利用できるメモリの容量を示すMEM_CPU[k](kbytes)、情報処理コントローラ11に設けられているk番目のメインプロセッサ42またはサブプロセッサ43の最大動作クロック数を示すSCPU_CK[k]、k番目のメインプロセッサ42またはサブプロセッサ43のプロセッサ使用率を示すSCPU_STAT[k]、k番目のメインプロセッサ42またはサブプロセッサ43で現在動作しているアプリケーションの数を示すSCPU_APPNUM[k]、k番目のメインプロセッサ42またはサブプロセッサ43にプログラムを割り当てることが可能か否かを示すフラグであるSCPU_SUSPEND[k]などがある。ここで、SCPU_SUSPEND[k]=0のとき、k番目のメインプロセッサ42またはサブプロセッサ43にプログラムを割り当てることが可能であることが示され、SCPU_SUSPEND[k]=1のとき、例えば、k番目のメインプロセッサ42またはサブプロセッサ43にプログラムを割り当てることが禁止されていることが示される。
ここで、現在のk番目のメインプロセッサ42またはサブプロセッサ43の動作クロック数は、SCPU_CK[k]×SCPU_RATE[k]で表される。また、プロセッサ動作率とプロセッサ使用率との関係は、次の式(3)を満たす。すなわち、全てのプロセッサにおいてプロセッサ動作率を共通であるものとして制御されている場合、プロセッサ動作率とプロセッサ使用率との関係は、次の式(4)を満たす。
0≦SCPU_STAT[k]≦SCPU_RATE[k]≦1・・・(3)
0≦SCPU_STAT[k]≦SYSTEM_RATE≦1・・・(4)
また、k番目のメインプロセッサ42またはサブプロセッサ43のプロセッサ使用率を示すSCPU_STAT[k]は、新たなアプリケーションプログラムによる分散処理が行われるごとに増加する。例えば、1つめのアプリケーションの場合、SCPU_STAT[k]の増加分は、次の式(5)で表され、2つめ以降のアプリケーションの場合、SCPU_STAT[k]の増加分は、次の式(6)で表される。
SCPU_STAT[k]の増加分=(REQ_PC[k]÷TIME_DEF)÷SCPU_CK[k]・・・(5)
SCPU_STAT[k]の増加分
=((REQ_PC[k]+THREAD_OVERHEAD[k])÷TIME_DEF)÷SCPU_CK[k]・・・(6)
次に、情報処理コントローラ11に含まれるメインプロセッサ42およびサブプロセッサ43の消費電力について説明する。
情報処理コントローラ11に含まれるメインプロセッサ42およびサブプロセッサ43の個々の消費電力は、現在のプロセッサ動作率に比例して増加する消費電力量と、現在のプロセッサ使用率に比例して増加する消費電力量とによって決まる。現在のプロセッサ動作率に比例して増加する消費電力量PT-Aは、メインプロセッサ42またはサブプロセッサ43が分散処理により使用されていなくても消費される電力量であり、次の式(7)で示される。ここで、PAは動作クロック数比例係数であり、ハードウェアの構成によって予め決められている値である。そして、現在のプロセッサ使用率に比例して増加する消費電力量PT-Bは、次の式(8)で示される。ここで、Kは使用クロック数比例係数でハードウェアの構成によって予め決められている値である。
PT-A=PA(W/Cycle)×SCPU_RATE[k]×SCPU_CK[k]・・・(7)
PT-B=K(W/Cycle)×SCPU_STAT[k]×SCPU_CK[k] ・・・(8)
したがって、情報処理コントローラ11に含まれるメインプロセッサ42およびサブプロセッサ43の合計の消費電力ΣPTは、次の式(9)で表される。また、プロセッサ動作率SCPU_RATE[k]が、プロセッサごとに独立して設定されているのではなく、全て共通の値(SYSTEM_RATE)として扱われる場合には、情報処理コントローラ11に含まれるメインプロセッサ42およびサブプロセッサ43の合計の消費電力ΣPTは、次の式(10)で表される。
ΣPT=Σ(PA×SCPU_RATE[k]×SCPU_CK[k]+K×SCPU_STAT[k]×SCPU_CK[k])・・・(9)
ΣPT=Σ(PA×SYSTEM_RATE×SCPU_CK[k]+K×SCPU_STAT[k]×SCPU_CK[k])・・・(10)
図10は、情報処理コントローラ11に含まれるメインプロセッサ42およびサブプロセッサ43の個々の消費電力消費電力PTと、動作クロック数との関係を示す図である。
図10に示されるように、プロセッサの使用率が大きいほど、消費電力PTは大きくなるが、プロセッサの使用率が0であっても、プロセッサにクロックが供給されている限り、プロセッサおよびバスの制御のために消費される電力量など、アプリケーションの処理に依存しない固定の消費電力が発生してしまう。メインプロセッサ42およびサブプロセッサ43に供給されているクロックは、SYSTEM_RATE×SCPU_CKで表される。すなわち、同一のプロセッサ使用率(SCPU_STAT)であっても、プロセッサ動作率(SYSTEM_RATEまたはSCPU_RATE[k])が大きい方が、固定分だけ消費電力は増加してしまう。
次に、図11および図12のフローチャートを参照して、本発明を適用した情報処理装置1において実行される、分散処理割り当て決定処理1について説明する。
ステップS1において、論理スレッド実行制御部102は、アプリケーション実行制御部101から、REQUEST_informationの供給を受け、新たな分散処理の割り当てが指令されたか否かを判断する。ステップS1において、新たな分散処理の割り当てが指令されていないと判断された場合、新たな分散処理の割り当てが指令されたと判断されるまで、ステップS1の処理が繰り返される。
ステップS1において、新たな分散処理の割り当てが指令されたと判断された場合、ステップS2において、論理スレッド実行制御部102は、供給されたREQUEST_informationに含まれる情報から、割り当てが指令された分散処理の実行に必要なサブプロセッサの数jを取得する
ステップS3において、論理スレッド実行制御部102は、各プロセッサへの処理の割り当て計算過程における暫定値を格納する内部のレジスタの値に対応するものとして、プロセッサ使用率TEMP_STAT[k]およびプロセッサ動作率TEMP_RATE[k]を定義する。
ステップS4において、論理スレッド実行制御部102は、動作情報メモリ105に記憶されている、分散処理の割り当て前、すなわち、現在の各プロセッサのプロセッサ使用率SCPU_STAT[k]およびプロセッサ動作率SCPU_RATE[k]の値を取得して、プロセッサ使用率TEMP_STAT[k]およびプロセッサ動作率TEMP_RATE[k]に代入する。
ここでは、サブプロセッサ43が複数設けられている情報処理コントローラ11において、既になんらかのアプリケーションプログラムを実行している状態において、ネットワーク2を介して接続されている他の情報処理装置1から、新たに別のアプリケーションプログラムの実行が要求された場合について説明する。また、論理スレッド実行制御部102または動作情報メモリ105が現在管理している設定値は、REQ_REAL=1(リアルタイム処理を要求)、NUM_SCPU=3、TIME_DEF=1(1秒)、RATE_MARGINE=0.1、MEM_MARGINE=10であるものとする。
図13を用いて、既になんらかのアプリケーションプログラムを実行している状態のメインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3のプロセッサ動作率SYSTEM_RATE(ここでは、全てのプロセッサにおいてプロセッサ動作率を共通であるものとして説明する)と、プロセッサ使用率SCPU_STAT[k]の関係を説明する。ここで、説明を簡略化するために、THREAD_OVERHEADは0であるものとして説明する。
ここで、メインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3のプロセッサ動作率SYSTEM_RATEは0.5である。そして、k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.3であるので、プロセッサ使用率SCPU_STAT[0]/プロセッサ動作率SYSTEM_RATEは、0.3/0.5であり、メインプロセッサ42が利用できるメモリの容量MEM_CPU[0]は、5000(kbytes)であり、現在使用中のメモリ容量は1000(kbytes)であり、最大動作クロック数を示すSCPU_CK[0]は、1000である。k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.4であるので、プロセッサ使用率SCPU_STAT[1]/プロセッサ動作率SYSTEM_RATEは、0.4/0.5であり、サブプロセッサ43−1が利用できるメモリの容量MEM_CPU[1]は、100(kbytes)であり、現在使用中のメモリ容量は20(kbytes)であり、最大動作クロック数を示すSCPU_CK[1]は、1000である。また、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.2であるので、プロセッサ使用率SCPU_STAT[2]/プロセッサ動作率SYSTEM_RATEは、0.2/0.5であり、サブプロセッサ43−2が利用できるメモリの容量MEM_CPU[2]は、100(kbytes)であり、現在使用中のメモリ容量は10(kbytes)であり、最大動作クロック数を示すSCPU_CK[2]は、1000である。更に、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.1であるので、プロセッサ使用率SCPU_STAT[3]/プロセッサ動作率SYSTEM_RATEは、0.1/0.5であり、サブプロセッサ43−3が利用できるメモリの容量MEM_CPU[3]は、100(kbytes)であり、現在使用中のメモリ容量は5(kbytes)であり、最大動作クロック数を示すSCPU_CK[3]は、1000である。
そして、REQUEST_informationに記載されている、新たに実行が要求されているアプリケーションプログラムの動作条件は、必要なサブプロセッサ数REQ_NUMが2であり、メインプロセッサ42に求められる処理サイクル数REQ_PC[0]は100、求められるメモリ容量REQ_MEM[0]が100(kbytes)、1つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[1]は400、求められるメモリ容量REQ_MEM[1]が50(kbytes)、2つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[2]は200、求められるメモリ容量REQ_MEM[2]が30(kbytes)であるものとする。
以上の条件に基づいて、以下の処理において、条件を満たすような分散処理の割り当てが行われる。
ステップS5において、論理スレッド実行制御部102は、要求する処理に必要なサブプロセッサの数を示すREQ_NUMに対して、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=0とする。ここで、t=0のプロセッサは、メインプロセッサ42を示し、t≧1のプロセッサは、サブプロセッサ43のうちのいずれかを示す。
ステップS6において、論理スレッド実行制御部102は、情報処理コントローラ11に設けられているプロセッサのうち、何番目のプロセッサに処理の割り当てが可能か否かを判定しているかを示すレジスタの値sを、s=0とする
ステップS7において、論理スレッド実行制御部102は、REQ_NUM(t)の処理は、s番目のプロセッサで実行可能か否かを判断する。
具体的には、論理スレッド実行制御部102は、REQ_NUM(t)の処理によるプロセッサ使用率SCPU_STAT[s]の増加分を加算した上で、プロセッサ使用率SCPU_STAT[s]+RATE_MAGINEが1を超えないこと、および、REQ_NUM(t)の処理により要求されるメモリ容量について、(REQ_MEM[s]+MEM_MARGIN)<(MEM[s]_CPU−現在のメモリの使用量)が成立することを条件として、REQ_NUM(t)の処理は、s番目のプロセッサで実行可能か否かを判断する。
ステップS7において、REQ_NUM(t)の処理は、s番目のプロセッサで実行可能ではないと判断された場合、ステップS8において、論理スレッド実行制御部102は、レジスタの値sを、s=s+1とする。
ステップS9において、論理スレッド実行制御部102は、s>(情報処理コントローラ11に設けられているサブプロセッサ43の数)であるか否かを判断する。ステップS9において、s>(情報処理コントローラ11に設けられているサブプロセッサ43の数)ではないと判断された場合、処理は、ステップS7に戻り、それ以降の処理が繰り返される。ステップS9において、s>(情報処理コントローラ11に設けられているサブプロセッサ43の数)であると判断された場合、処理は、後述するステップS19に進む。
ステップS7において、REQ_NUM(t)の処理は、s番目のプロセッサで実行可能であると判断された場合、ステップS10において、論理スレッド実行制御部102は、必須条件を満たすプロセッサの識別番号を示す内部のレジスタに対応するSET_CPUID[t]に、割り当てられたs番目のプロセッサのプロセッサID(メインプロセッサIDまたはサブプロセッサID)を記載する。
ステップS11において、論理スレッド実行制御部102は、割り当てられたs番目のプロセッサの処理分のプロセッサ使用率が加算されるように、割り当て計算過程における暫定値を格納する内部のレジスタの値に対応するプロセッサ使用率TEMP_STAT[s]を更新する。
ステップS12において、論理スレッド実行制御部102は、レジスタtの値を、t=t+1とする。
ステップS13において、論理スレッド実行制御部102は、レジスタtの値を参照し、t>j(jは、分散処理に必要なサブプロセッサの数)であるか否かを判断する。ステップS13において、t>jではないと判断された場合、要求された処理の割り当てが終了していないので、処理は、ステップS6に戻り、それ以降の処理が繰り返される。
ステップS13において、t>jであると判断された場合、要求された処理の割り当てが終了したので、ステップS14において、論理スレッド実行制御部102は、割り当てが成功したことを示すフラグをたてる、すなわち、SET_NG=0とする。
ステップS15において、論理スレッド実行制御部102は、すべてのプロセッサのプロセッサ動作率TEMP_RATE[k]、および、最新のプロセッサ使用率TEMP_STAT[k]を比較することにより、新たな分散処理の割り当てによって、プロセッサ動作率の設定を変更する必要があるか否かを判断する。
ステップS15において、プロセッサ動作率の設定を変更する必要があると判断された場合、すなわち、いずれかのプロセッサにおいて、プロセッサ動作率TEMP_RATE[k]<プロセッサ使用率TEMP_STAT[k]であった場合、ステップS16において、論理スレッド実行制御部102は、新たなプロセッサ動作率を算出し、算出結果を、動作率設定部103に供給する。動作率設定部103は、メインプロセッサ42またはサブプロセッサ43のうちの対応するものに、プロセッサ動作率の設定変更を行う。
ステップS17において、論理スレッド実行制御部102は、動作情報メモリ105に記憶されている、各プロセッサのプロセッサ使用率SCPU_STAT[k]、および、プロセッサ動作率SCPU_RATE[k]の値を、それぞれ、割り当て計算により得られたプロセッサ使用率TEMP_STAT[k]、および、TEMP_RATE[k]に更新する。
図14を用いて、新たな分散処理の割り当て結果と、プロセッサ動作率の設定について説明する。
図13を用いて説明した状態において、上述したように、必要なサブプロセッサ数REQ_NUMが2であり、メインプロセッサ42に求められる処理サイクル数REQ_PC[0]は100、求められるメモリ容量REQ_MEM[0]が100(kbytes)、1つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[1]は400、求められるメモリ容量REQ_MEM[1]が50(kbytes)、2つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[2]は200、求められるメモリ容量REQ_MEM[2]が30(kbytes)である分散処理の割り当てが要求された場合、図14に示されるように、k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.4となり、k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.8となり、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.4となり、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.1のままである。
RATE_MARGINE=0.1であることから、新たな分散処理の割り当ての後、プロセッサ動作率が個々に制御されるようになされている場合、サブプロセッサ43−1のプロセッサ動作率SCPU_RATE[1]のみが、0.9に変更され、新たな分散処理の割り当ての後も、プロセッサ動作率が共通となるように制御されている場合、全てのプロセッサのプロセッサ動作率RATE_MARGINE=0.1であることから、SYSTEM_RATEは0.9に変更される。また、それぞれのプロセッサにおいて、新たな分散処理が割り当てられたことにより、メインプロセッサ42が利用できるメモリの容量(MEM_CPU[0]−現在のメモリの使用量)は、3900(kbytes)となり、サブプロセッサ43−1が利用できるメモリの容量(MEM_CPU[1]−現在のメモリの使用量)は、30(kbytes)となり、サブプロセッサ43−2が利用できるメモリの容量(MEM_CPU[2]−現在のメモリの使用量)は、60(kbytes)となり、サブプロセッサ43−3が利用できるメモリの容量(MEM_CPU[3]−現在のメモリの使用量)は、95(kbytes)のままとなる。
ステップS15において、プロセッサ動作率の設定を変更する必要がないと判断された場合、または、ステップS17の処理の終了後、ステップS18において、論理スレッド実行制御部102は、設定された割り当てに基づいて、プログラムおよびデータを対応するプロセッサにロードし、論理スレッドの処理を制御する。メインプロセッサ42およびサブプロセッサ43は、割り当てられたスレッドの処理を実行し、処理が終了される。
ステップS9において、s>(情報処理コントローラ11に設けられているサブプロセッサ43の数)であると判断された場合、ステップS19において、論理スレッド実行制御部102は、SET_NG=1とし、分散処理の割り当てが不可であることを、ユーザおよび分散処理の要求元の情報処理装置1に通知し、処理が終了される。
このような処理により、本発明を適用した情報処理装置1においては、プロセッサ(またはプロセッサ群)の消費電力を抑制することができるように、分散される処理の割り当て先を適切に選択することができる。
上述した処理により分散処理が割り当てられた状態が、上述した図14における状態であり、プロセッサ動作率が共通となるように制御されている場合の消費電力は、次の式(11)により求められる。
ΣPT=Σ(PA×SYSTEM_RATE[k]+K×SCPU_STAT[k])×SCPU_CK[k]
=(0.9×4×PA+(0.4+0.8+0.4+0.1)×K)×1000
=(3.6×PA+1.7×K)×1000 ・・・(11)
ところで、特に、プロセッサ動作率が共通となるように制御されている場合、図14に示されるサブプロセッサ43−3においては、プロセッサ使用率が低いのにもかかわらず、プロセッサ動作率が高くなってしまい、消費電力的には無駄な割り当てになってしまっている。
そこで、更に消費電力を抑制することができるように、新たな分散処理が割り当てられる前のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEと、プロセッサ使用率SCPU_STAT[k]との関係を基に、分散処理の割当先を決定するようにしてもよい。
次に、図15のフローチャートを参照して、新たな分散処理が割り当てられる前のプロセッサ動作率とプロセッサ使用率との関係を基に分散処理の割当先を決定する、分散処理割り当て決定処理2について説明する。
ステップS31において、論理スレッド実行制御部102は、アプリケーション実行制御部101から、REQUEST_informationの供給を受け、新たな分散処理の割り当てが指令されたか否かを判断する。ステップS31において、新たな分散処理の割り当てが指令されていないと判断された場合、新たな分散処理の割り当てが指令されたと判断されるまで、ステップS31の処理が繰り返される。
ここでは、サブプロセッサ43が複数設けられている情報処理コントローラ11において、既になんらかのアプリケーションプログラムを実行している状態のメインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3の状態は、図13を用いて説明した場合と同様であるものとする。
すなわち、プロセッサ動作率SYSTEM_RATEが0.5であり、k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.3であるので、プロセッサ使用率SCPU_STAT[0]/プロセッサ動作率SYSTEM_RATE[0]は、0.3/0.5であり、メインプロセッサ42が利用できるメモリの容量MEM_CPU[0]は、5000(kbytes)であり、最大動作クロック数を示すSCPU_CK[0]は、1000である。k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.4であるので、プロセッサ使用率SCPU_STAT[1]/プロセッサ動作率SYSTEM_RATE[1]は、0.4/0.5であり、サブプロセッサ43−1が利用できるメモリの容量MEM_CPU[1]は、100(kbytes)であり、最大動作クロック数を示すSCPU_CK[1]は、1000である。また、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.2であるので、プロセッサ使用率SCPU_STAT[2]/プロセッサ動作率SYSTEM_RATE[2]は、0.2/0.5であり、サブプロセッサ43−2が利用できるメモリの容量MEM_CPU[2]は、100(kbytes)であり、最大動作クロック数を示すSCPU_CK[2]は、1000である。更に、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.1であるので、プロセッサ使用率SCPU_STAT[3]/プロセッサ動作率SYSTEM_RATE[3]は、0.1/0.5であり、サブプロセッサ43−3が利用できるメモリの容量MEM_CPU[3]は、100(kbytes)であり、最大動作クロック数を示すSCPU_CK[3]は、1000であるものとして説明する。また、説明を簡略化するために、THREAD_OVERHEADは0であるものとして説明する。
このような状態において、ネットワーク2を介して接続されている他の情報処理装置1から、新たに別のアプリケーションプログラムの実行が要求された場合について説明する。また、論理スレッド実行制御部102または動作情報メモリ105が現在管理している設定値は、REQ_REAL=1(リアルタイム処理を要求)、NUM_SCPU=3、TIME_DEF=1(1秒)、RATE_MARGINE=0.1、MEM_MARGINE=10であるものとする。
そして、REQUEST_informationに記載されている、新たに実行が要求されているアプリケーションプログラムの動作条件は、必要なサブプロセッサ数REQ_NUMが2であり、メインプロセッサ42に求められる処理サイクル数REQ_PC[0]は100、求められるメモリ容量REQ_MEM[0]が100(kbytes)、1つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[1]は400、求められるメモリ容量REQ_MEM[1]が50(kbytes)、2つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[2]は200、求められるメモリ容量REQ_MEM[2]が30(kbytes)であるものとする。
ステップS31において、新たな分散処理の割り当てが指令されたと判断された場合、ステップS32において、論理スレッド実行制御部102は、割り当て条件を満たしているか否かを示すフラグSET_NGを初期化、すなわち、SET_NG=0とする。
ステップS33において、論理スレッド実行制御部102は、現在の各プロセッサのプロセッサ使用率SCPU_STAT[k]を取得して、TEMP_STAT[k]に代入する。
ステップS34において、論理スレッド実行制御部102は、現在の各プロセッサのプロセッサ動作率SCPU_RATE[k]を取得して、TEMP_RATE[k]に代入する。
ステップS35において、論理スレッド実行制御部102は、処理の割り当てが決定したプロセッサを示すフラグSET_CPUID[t]を初期化、すなわち、SET_CPUID[t]=0とする。
ステップS36において、図16および図17のフローチャートを用いて後述するプロセッサ割り当て決定処理が実行される。
ステップS37において、論理スレッド実行制御部102は、図16および図17のフローチャートを用いて後述するプロセッサ割り当て決定処理の処理結果であるSET_NGの値に基づいて、新たな分散処理の割り当てが成功したか否かを判断する。
ステップS37において、新たな分散処理の割り当てが成功したと判断された場合、ステップS38において、論理スレッド実行制御部102は、すべてのプロセッサのプロセッサ動作率TEMP_RATE[k]、および、最新のプロセッサ使用率TEMP_STAT[k]を比較することにより、新たな分散処理の割り当てによって、プロセッサ動作率の設定を変更する必要があるか否かを判断する。
ステップS38において、プロセッサ動作率の設定を変更する必要があると判断された場合、すなわち、いずれかのプロセッサにおいて、プロセッサ動作率TEMP_RATE[k]<プロセッサ使用率TEMP_STAT[k]であった場合、ステップS39において、論理スレッド実行制御部102は、新たなプロセッサ動作率を算出し、算出結果を、動作率設定部103に供給する。動作率設定部103は、メインプロセッサ42またはサブプロセッサ43のうちの対応するものに、プロセッサ動作率の設定を行う。
ステップS40において、論理スレッド実行制御部102は、動作情報メモリ105に記録されている、各プロセッサのプロセッサ使用率SCPU_STAT[k]、および、プロセッサ動作率SCPU_RATE[k]の値を、それぞれ、割り当て計算により得られたプロセッサ使用率TEMP_STAT[k]、および、TEMP_RATE[k]の値に更新する。新たな分散処理の割り当て結果と、動作率の設定については、図18乃至図20を用いて後述する。
ステップS38において、プロセッサ動作率の設定を変更する必要がないと判断された場合、または、ステップS39の処理の終了後、ステップS41において、論理スレッド実行制御部102は、設定された割り当てに基づいて、プログラムおよびデータを対応するプロセッサにロードし、論理スレッドの処理を制御する。メインプロセッサ42およびサブプロセッサ43は、割り当てられたスレッドの処理を実行し、処理が終了される。
ステップS37において、分散処理の割り当てが成功しなかったと判断された場合、ステップS42において、論理スレッド実行制御部102は、分散処理の割り当てが不可であることを、ユーザおよび分散処理の要求元の情報処理装置1に通知し、処理が終了される。
このような処理により、本発明を適用した情報処理装置1においては、図11および図12を用いて説明した分散処理割り当て決定処理1が実行された場合と比較して、更に、プロセッサ(またはプロセッサ群)の消費電力を抑制することができるように、分散される処理の割り当て先を適切に選択することができる。
次に、図16および図17のフローチャートを参照して、図15のステップS36において実行されるプロセッサ割り当て決定処理について説明する。
ステップS61において、論理スレッド実行制御部102は、供給されたREQUEST_informationに含まれる情報から、割り当てが指令された分散処理の実行に必要なサブプロセッサの数jを取得する。
ステップS62において、論理スレッド実行制御部102は、分散処理の割り当ての可否を判断するためにそれぞれのプロセッサを区別するための内部のレジスタの値に対応するものとして、SCPU_NBを定義する。
ステップS63において、論理スレッド実行制御部102は、SCPU_NB[0]をメインプロセッサ42であるものとする。
ステップS64において、論理スレッド実行制御部102は、供給されたREQUEST_informationに含まれる情報から、実行要求を受けた処理には、PRIORITY_IDが指定されているか否かを判断する。ステップS64において、PRIORITY_IDが指定されていないと判断された場合、処理は、後述するステップS67に進む。
ステップS64において、PRIORITY_IDが指定されていると判断された場合、ステップS65において、論理スレッド実行制御部102は、SCPU_NB[1]をPRIORITY_IDで指定されるサブプロセッサ43であるものとする。
ステップS66において、論理スレッド実行制御部102は、供給されたREQUEST_informationに含まれる情報を参照して、2≦i≦(情報処理コントローラ11に含まれるサブプロセッサ43の数)となるSCPU_NB[i]において、サスペンド指定されているサブプロセッサ43を省いたうえで、現在のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEに対するプロセッサ使用率SCPU_STAT[k]の余裕度が高い順にソートしたサブプロセッサ43のサブプロセッサIDを対応付けて、処理は、後述するステップS68に進む。
ステップS64において、PRIORITY_IDが指定されていないと判断された場合、ステップS67において、論理スレッド実行制御部102は、供給されたREQUEST_informationに含まれる情報を参照して、1≦i≦(情報処理コントローラ11に含まれるサブプロセッサ43の数)となるSCPU_NB[i]において、サスペンド指定されているサブプロセッサを省いたうえで、現在のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEに対するプロセッサ使用率SCPU_STAT[k]の余裕度が高い順にソートしたサブプロセッサ43のサブプロセッサIDを対応付ける。
すなわち、ステップS63乃至ステップS67の処理によって、SCPU_NB[0]にメインプロセッサ42が対応付けられるとともに、SCPU_NB[1],SCPU_NB[2],SCPU_NB[3]・・・SCPU_NB[k]に、PRIORITY_IDが指定されている場合、指定されているサブプロセッサ43が優先され、サスペンド指定されているサブプロセッサ43が省かれた状態で、現在のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEに対するプロセッサ使用率SCPU_STAT[k]の余裕度が高い順にソートされたサブプロセッサ43が順次対応付けられる。
すなわち、図13を用いて説明した場合において、PRIORITY_IDおよびサスペンドの指定がないとき、SCPU_NB[0]にメインプロセッサ42が対応付けられるとともに、SCPU_NB[1]にサブプロセッサ43−3が対応付けられ、SCPU_NB[2]にサブプロセッサ43−2が対応付けられ、SCPU_NB[3]にサブプロセッサ43−1が対応付けられる。
ステップS66またはステップS67の処理の終了後、ステップS68において、論理スレッド実行制御部102は、要求する処理に必要なサブプロセッサの数を示すREQ_NUMに対して、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=0とする。ここで、t=0のプロセッサは、メインプロセッサ42を示し、t≧1のプロセッサは、サブプロセッサ43のうちのいずれかを示す。
ステップS69において、論理スレッド実行制御部102は、SCPU_NB[i]における変数iを、i=0とする。
ステップS70において、論理スレッド実行制御部102は、REQUEST_informationに含まれる情報を参照して、サブプロセッサ43のうちのいずれかに分散して割り当てられることが要求されているREQ_NUM(t)の処理は、SCPU_NB[i]で示されるプロセッサ43で実行可能か否かを判断する。
具体的には、論理スレッド実行制御部102は、REQ_NUM(t)の処理による、SCPU_NB[i]で示されるプロセッサにおけるプロセッサ使用率SCPU_STAT[k]の増加分を加算したうえで、プロセッサ使用率SCPU_STAT[k]+RATE_MAGINEが1を超えないこと、および、REQ_NUM(t)の処理により要求されるSCPU_NB[i]で示されるプロセッサにおけるメモリ容量について、(REQ_MEM[k]+MEM_MARGIN)<(MEM_CPU[k]−現在のメモリ使用量)が成立することを条件として、REQ_NUM(t)の処理は、SCPU_NB[i]で示されるプロセッサで実行可能か否かを判断する。
ステップS70において、REQ_NUM(t)の処理は、SCPU_NB[i]で示されるプロセッサで実行可能ではないと判断された場合、ステップS71において、論理スレッド実行制御部102は、SCPU_NB[i]における変数iを、i=i+1とする。
ステップS72において、論理スレッド実行制御部102は、i>(サスペンドなどを除いた、実質的に処理が割り当て可能なサブプロセッサ43の数)であるか否かを判断する。ステップS72において、i>(サスペンドなどを除いた、実質的に処理が割り当て可能なサブプロセッサ43の数)ではないと判断された場合、処理は、ステップS70に戻り、それ以降の処理が繰り返される。ステップS72において、i>(サスペンドなどを除いた、実質的に処理が割り当て可能なサブプロセッサ43の数)であると判断された場合、処理は、後述するステップS78に進む。
ステップS70において、REQ_NUM(t)の処理は、SCPU_NB[i]で示されるプロセッサで実行可能であると判断された場合、ステップS73において、論理スレッド実行制御部102は、処理の割り当てが決定したプロセッサを示すレジスタの値SET_CPUID[t]を、SCPU_NB[i]で示されるプロセッサのプロセッサIDとする。
ステップS74において、論理スレッド実行制御部102は、SCPU_NB[i]で示されるプロセッサのTEMP_STAT[k]に、新たに割り当てられた処理に対応するプロセッサ使用率を加算して更新する。
ステップS75において、論理スレッド実行制御部102は、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=t+1とする。
すなわち、図13を用いて説明した場合と同様の状態のメインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3に対して、必要なサブプロセッサ数REQ_NUMが2であり、メインプロセッサ42に求められる処理サイクル数REQ_PC[0]は100、求められるメモリ容量REQ_MEM[0]が100(kbytes)である新たな分散処理が要求されたとき、i=0において、論理スレッド実行制御部102は、次の式(12)に示されるように、メインプロセッサ42に新たに分散処理が割り当てられたとき、プロセッサ使用率SCPU_STAT[0]+RATE_MAGINEは1を超えず、また、次の式(13)に示されるように、(REQ_MEM[0]+MEM_MARGIN)<(MEM_CPU[0]−現在のメモリ使用量)が成立するので、REQ_NUM(0)の処理は、SCPU_NB[0]で示されるメインプロセッサ42で実行可能であると判断する。
TEMP_STAT[0](割り当て後)
=(REQ_PC[0]÷TIME_DEF)÷SCPU_CK[0]+TEMP_STAT[0](割り当て前)+RATE_MAGINE
=(100÷1)÷1000+0.3+0.1
=0.5 ・・・(12)
MEM_CPU[0]−現在のメモリ使用量−MEM_MARGINE(=4890)>REQ_MEM[0](=100)
・・・(13)
したがって、論理スレッド実行制御部102は、SET_CPUID[0]にメインプロセッサ42のプロセッサIDを記載し、TEMP_STAT[0]=0.4とし、現在のメモリ使用量を1000+100=1100とするとともに、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=1とする。
ステップS76において、論理スレッド実行制御部102は、t>j(jは、新たな処理の割り当てに必要なサブプロセッサの数)であるか否かを判断する。ステップS76において、t>jではないと判断された場合、処理は、ステップS69に戻り、それ以降の処理が繰り返される。
例えば、t=1であるとき、t>jではないと判断されるので、上述した場合と同様に、要求された新たな分散処理において、必要なサブプロセッサ数REQ_NUMが2であり、1つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[1]は400、求められるメモリ容量REQ_MEM[1]が50(kbytes)であるとき、i=1において、論理スレッド実行制御部102は、次の式(14)に示されるようにSCPU_NB[1]で示されるサブプロセッサ43−3で、プロセッサ使用率SCPU_STAT[3]+RATE_MAGINEは1を超えず、また、次の式(15)に示されるように、(REQ_MEM[1]+MEM_MARGIN)<(MEM_CPU[3]−現在のメモリ使用量)が成立するので、REQ_NUM(1)の処理は、SCPU_NB[1]で示されるサブプロセッサ43−3で実行可能であると判断する。
TEMP_STAT[3](割り当て後)
=(REQ_PC[1]÷TIME_DEF)÷SCPU_CK[3]+TEMP_STAT[3](割り当て前)+RATE_MAGINE
=(400÷1)÷1000+0.1+0.1
=0.6 ・・・(14)
MEM_CPU[3]−現在のメモリ使用量−MEM_MARGINE(=85)>REQ_MEM[1](=50)
・・・(15)
したがって、論理スレッド実行制御部102は、SET_CPUID[1]にサブプロセッサ43−3のプロセッサIDを記載し、TEMP_STAT[1]=0.5とし、現在のメモリ使用量を55(kbytes)とするとともに、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=2とする。
更に、同様に、要求された新たな分散処理において、2つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[2]は200、求められるメモリ容量REQ_MEM[2]が30(kbytes)であるとき、i=2において、論理スレッド実行制御部102は、次の式(16)に示されるようにSCPU_NB[2]で示されるサブプロセッサ43−2で、プロセッサ使用率SCPU_STAT[2]+RATE_MAGINEは1を超えず、また、次の式(17)に示されるように、(REQ_MEM[2]+MEM_MARGIN)<(MEM_CPU[2]−現在のメモリ使用量)が成立するので、REQ_NUM(2)の処理は、SCPU_NB[2]で示されるサブプロセッサ43−2で実行可能であると判断する。
TEMP_STAT[2](割り当て後)
=(REQ_PC[2]÷TIME_DEF)÷SCPU_CK[2]+TEMP_STAT[2](割り当て前)+RATE_MAGINE
=(200÷1/)÷1000+0.2+0.1
=0.5 ・・・(16)
MEM_CPU[2]−現在のメモリ使用量−MEM_MARGINE(=80)>REQ_MEM[2](=30)
・・・(17)
したがって、論理スレッド実行制御部102は、SET_CPUID[2]にサブプロセッサ43−2のプロセッサIDを記載し、TEMP_STAT[2]=0.4とし、現在のメモリ使用量を40(kbytes)とするとともに、何番目のプロセッサの割り当て決定処理を行っているかを示すレジスタの値tを、t=3とする。
ステップS76において、t>jであると判断された場合、ステップS77において、論理スレッド実行制御部102は、割り当てが成功したことを示すフラグを立てて、SET_NG=0とし、処理は、図15のステップS36に戻り、ステップS37に進む。
ステップS72において、i>(サスペンドなどを除いた、実質的に処理が割り当て可能なサブプロセッサ43の数)であると判断された場合、ステップS78において、論理スレッド実行制御部102は、割り当てが失敗したことを示すようにフラグをOFFして、SET_NG=1とし、処理は、図15のステップS36に戻り、ステップS37に進む。
このような処理により、本発明を適用した情報処理装置1においては、図11および図12を用いて説明した分散処理割り当て決定処理1が実行された場合と比較して、更に、プロセッサ(またはプロセッサ群)の消費電力を抑制することができるように、分散される処理の割り当て先を適切に選択することができる。
図13を用いて説明した場合と同様の状態のメインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3において、プロセッサ動作率SYSTEM_RATEが共通であるものとして制御されている場合の割り当て結果を、図18に示す。
k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.4となり、k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.4のままであり、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.4となり、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.5となる。ここで、RATE_MAGINEが0.1であるので、プロセッサ動作率SYSTEM_RATEは、0.6に制御される。
上述した処理により分散処理が割り当てられた状態が、上述した図18における状態であり、プロセッサ動作率が共通となるように制御されている場合の消費電力は、次の式(18)により求められる。
ΣPT=Σ(PA×SYSTEM_RATE+K×SCPU_STAT[k])×SCPU_CK[k]
=(0.6×4×PA+(0.4+0.4+0.4+0.5)×K) ×1000
=(2.4×PA+1.7×K)×1000 ・・・(18)
すなわち、図14を用いて説明した割り当て処理後と比較して、1200×PA分の消費電力を減少させることができる。
図18は、プロセッサ動作率SYSTEM_RATEが共通であるものとして制御されている場合の割り当て結果を示しているが、図15乃至図17のフローチャートを用いて説明した処理は、プロセッサ動作率SCPU_RATE[k]が個別に設定されているときに、特に、効率的に消費電力量を抑制することができる。
例えば、既になんらかのアプリケーションプログラムを実行している状態のメインプロセッサ42およびサブプロセッサ43-1乃至サブプロセッサ43-3のプロセッサ動作率SCPU_RATE[k]と、プロセッサ使用率SCPU_STAT[k]の関係が、図19に示されるように、k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.3で、プロセッサ使用率SCPU_STAT[0]/プロセッサ動作率SCPU_RATE[0]は、0.3/0.5であり、k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.4で、プロセッサ使用率SCPU_STAT[1]/プロセッサ動作率SCPU_RATE[1]は、0.4/0.9であり、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.2で、プロセッサ使用率SCPU_STAT[2]/プロセッサ動作率SCPU_RATE[2]は、0.2/0.3であり、更に、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.1で、プロセッサ使用率SCPU_STAT[3]/プロセッサ動作率SCPU_RATE[3]は、0.1/0.5である状態において、上述した場合と同様に、REQUEST_informationに記載されている、新たに実行が要求されているアプリケーションプログラムの動作条件が、必要なサブプロセッサ数REQ_NUMが2であり、メインプロセッサ42に求められる処理サイクル数REQ_PC[0]は100、1つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[1]は400、2つ目のサブプロセッサ43に求められる処理サイクル数REQ_PC[2]は200である分散処理が要求された場合の割り当てについて考える。
SCPU_NB[0]で示されるメインプロセッサ42に求められる処理の割り当ては、式(12)を用いて説明した場合と同様であるが、SCPU_NB[1]に割り当てられるのは、現在のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEに対するプロセッサ使用率SCPU_STAT[k]の余裕度が最も高いサブプロセッサ43−1となり、SCPU_NB[2]に割り当てられるのは、現在のプロセッサ動作率SCPU_RATE[k]またはSYSTEM_RATEに対するプロセッサ使用率SCPU_STAT[k]の余裕度が次に高いサブプロセッサ43−3となる。すなわち、SCPU_NB[1]であるサブプロセッサ43−1にREQ_NUM(1)の処理が割り当てられ、SCPU_NB[2]であるサブプロセッサ43−3にREQ_NUM(2)の処理が割り当てられる。
したがって、割り当て結果は、図20に示されるように、k=0で示されるメインプロセッサ42のプロセッサ使用率SCPU_STAT[0]は0.4となり、k=1で示されるサブプロセッサ43−1のプロセッサ使用率SCPU_STAT[1]は0.8となり、k=2で示されるサブプロセッサ43−2のプロセッサ使用率SCPU_STAT[2]は0.2のままであり、k=3で示されるサブプロセッサ43−3のプロセッサ使用率SCPU_STAT[3]は0.3となる。ここで、RATE_MAGINEが0.1であるので、プロセッサ動作率SCPU_RATE[i]は、図19を用いて説明した処理の割り当て前の状態のままで、変更する必要がないため、新たな処理の割り当てによる消費電力量の増加を、大幅に抑制することができる。
なお、REQ_REALが0(リアルタイム処理が不要)であると設定されているアプリケーションに対応する論理スレッドは、アプリケーション実行のタスクの優先度を、リアルタイム処理が必要なタスクより下げてスケジューリングすることで、余った時間に処理をさせるようにしてもよい。例えば、REQ_REALが0(リアルタイム処理が不要)であると設定されているアプリケーションに対応する論理スレッドを、最初はリアルタイム処理が必要な論理スレッドと同様の条件で割り当て処理を行い、割り当てが失敗した場合には、処理に必要な処理サイクル数を1/M(規定時間をM倍)にして、再度割り当て処理を実行するようにしてもよい。
このような処理により、消費電力量を抑制しつつ、要求された機能を提供することができる情報処理装置を実現することができる。特に、CE(Consumer electronics)機器においては、消費電力量の削減が、商品としての競争力としての大きなポイントとなるため、本発明を適用するメリットは非常に大きい。
上述した一連の処理は、ソフトウェアにより実行することもできる。そのソフトウェアは、そのソフトウェアを構成するプログラムが、専用のハードウェアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、記録媒体からインストールされる。
この記録媒体は、図1に示すように、コンピュータとは別に、ユーザにプログラムを提供するために配布される、プログラムが記録されている磁気ディスク61(フレキシブルディスクを含む)、光ディスク62(CD-ROM(Compact Disk-Read Only Memory),DVD(Digital Versatile Disk)を含む)、光磁気ディスク63(MD(Mini-Disk)(商標)を含む)、もしくは半導体メモリ64などよりなるパッケージメディアなどにより構成される。
また、本明細書において、記録媒体に記録されるプログラムを記述するステップは、記載された順序に沿って時系列的に行われる処理はもちろん、必ずしも時系列的に処理されなくとも、並列的あるいは個別に実行される処理をも含むものである。
なお、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
1 情報処理装置, 2 ネットワーク, 3 情報処理装置, 11 情報処理コントローラ, 12 メインメモリ, 15 操作入力部, 16 通信部, 19 電源部, 42 メインプロセッサ, 43 サブプロセッサ,51 ローカルストレージ, 101 アプリケーション実行制御部, 102 論理スレッド実行制御部, 103 動作率設定部, 104 動作情報取得部, 105 動作情報メモリ