(57)【要約】  ＣＰＵ（＃０）は、計測部（３０１）によってネットワークの帯域を計測し、比較部（３０２）によって計測された帯域と所定の閾値とを比較する。比較結果に基づいて、ＣＰＵ（＃０）は、決定部（３０３）によって、マルチコアプロセッサシステムを構成するコアのうち、ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定する。決定後、ＣＰＵ（＃０）は、コア数算出部（３０４）によって所定の処理を増減前に実行したコアの数と決定部（３０３）によって決定されたコアの増減数に基づいて、増減後に実行するコアの数を算出する。算出後、ＣＰＵ（＃０）は、特定部（３０５）によって所定の処理を実行するコアを特定し、分配部（３０６）によって所定の処理を実行するコアに、通信されるデータを分配する。所定の処理を実行すると特定されたＣＰＵ（＃１）は、取得部（３１１）により通信されるデータを取得する。
2011111230.tif 000002
【特許請求の範囲】
【請求項１】
複数のコアを備えたマルチコアプロセッサシステムであって、
ネットワークの帯域を計測する計測手段と、
前記計測手段によって計測された帯域と所定の閾値とを比較する比較手段と、
前記比較手段の比較結果に基づいて、前記複数のコアのうち、前記ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定する決定手段と、
前記所定の処理を増減前に実行したコアの数と前記決定手段によって決定されたコアの増減数とに基づいて、増減後に実行するコアの数を算出するコア数算出手段と、
前記コア数算出手段によって算出された増減後に実行するコアの数に基づいて、前記複数のコアのうち、前記所定の処理を実行するコアを特定する特定手段と、
前記特定手段によって特定された前記所定の処理を実行するコアに、前記通信されるデータを分配する分配手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
所定の記憶領域内での空き領域を検出する検出手段と、
前記比較手段によって前記計測された帯域が前記所定の閾値を超えた場合、所定の増加量と、前記検出手段によって検出された空き領域の量を所定の単位に換算した減少量と、前記ネットワークを介して受信されたデータの量に基づいて、前記所定の記憶領域の増減量を算出する増減量算出手段と、
前記増減量算出手段によって算出された前記所定の記憶領域の増減量に基づいて、増減後の記憶領域を前記所定の記憶領域に設定する設定手段と、
前記受信されたデータを前記設定手段によって設定された増減後の記憶領域に格納する格納手段と、を備え、
前記分配手段は、
前記格納手段によって格納された増減後の記憶領域に応じて、前記所定の処理を実行するコアに、前記増減後の記憶領域に格納されたデータを分配することを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記増減量算出手段は、
前記比較手段によって前記計測された帯域が前記所定の閾値を超えない場合、前記検出手段によって検出された空き領域の量を所定の単位に換算した減少量と、前記ネットワークを介して受信されたデータの量に基づいて、前記所定の記憶領域の増減量を算出することを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
複数のコアを備えたマルチコアプロセッサシステムの電力制御方法であって、
ネットワークの帯域を計測する計測工程と、
前記計測工程によって計測された帯域と所定の閾値とを比較する比較工程と、
前記比較工程の比較結果に基づいて、前記複数のコアのうち、前記ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定する決定工程と、
前記所定の処理を増減前に実行したコアの数と前記決定工程によって決定されたコアの増減数とに基づいて、増減後に実行するコアの数を算出するコア数算出工程と、
前記コア数算出工程によって算出された増減後に実行するコアの数に基づいて、前記複数のコアのうち、前記所定の処理を実行するコアを特定する特定工程と、
前記特定工程によって特定された前記所定の処理を実行するコアに、前記通信されるデータを分配する分配工程と、
を実行することを特徴とする電力制御方法。
【請求項５】
複数のコアを備えたマルチコアプロセッサシステムの電力制御プログラムであって、
ネットワークの帯域を計測する計測工程と、
前記計測工程によって計測された帯域と所定の閾値とを比較する比較工程と、
前記比較工程の比較結果に基づいて、前記複数のコアのうち、前記ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定する決定工程と、
前記所定の処理を増減前に実行したコアの数と前記決定工程によって決定されたコアの増減数とに基づいて、増減後に実行するコアの数を算出するコア数算出工程と、
前記コア数算出工程によって算出された増減後に実行するコアの数に基づいて、前記複数のコアのうち、前記所定の処理を実行するコアを特定する特定工程と、
前記特定工程によって特定された前記所定の処理を実行するコアに、前記通信されるデータを分配する分配工程と、
を前記複数のコアのうち、特定のコアに実行させることを特徴とする電力制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電力を制御するマルチコアプロセッサシステム、電力制御方法、および電力制御プログラムに関する。
【背景技術】
【０００２】
近年、ネットワークの高速化にともない、サーバが大容量のストリーミングデータを配信し、受信端末にて受信し、ストリーミングデータを再生するといった動画配信サービスが普及してきている。また、それにともない、ＬＴＥ（Ｌｏｎｇ  Ｔｅｒｍ  Ｅｖｏｌｕｔｉｏｎ）やＷｉＭａｘ（ＩＥＥＥ８０２．１６）に代表される無線ネットワークにて、帯域の高速化が進められている。【０００３】
このような大容量なデータを効率的に受信する技術として、以下の技術が開示されている。具体的には、帯域に余裕がある場合に、複数コンテンツを並行にダウンロードし、全体の効率を向上するという技術が開示されている。（たとえば、下記特許文献１を参照。）。また、複数のＤＭＡ（Ｄｉｒｅｃｔ  Ｍｅｍｏｒｙ  Ａｃｃｅｓｓ）を搭載し、受信されたデータを、並列にアプリケーションに転送するという技術が開示されている。（たとえば、下記特許文献２を参照。）。また、複数のサーバにアクセスする端末装置において、公衆回線とサーバ間の帯域に応じて、スレッドの優先度を変化させるというスケジューリング技術が開示されている。（たとえば、下記特許文献３を参照。）。【０００４】
また、携帯端末においては、様々な省電力技術が適用されている。消費電力を抑えることにより、駆動時間を延ばすことができる。また、同一の駆動時間でも消費電力を抑えることによりバッテリを小型化することができ、携帯端末全体の重量、体積を小さくすることができる。【０００５】
具体的な省電力技術として、電源の接続形態、ヒートセンサーを監視する機構により、動作ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）数を変動させることで、最も効率のよい運用をする技術が開示されている（たとえば、下記特許文献４を参照。）。また、あらかじめ処理に必要な負荷量の統計値を蓄積し、通信量は一定でも内部処理に増減があるようなアプリケーション処理において、統計値を元にＣＰＵの周波数を制御する技術が開示されている（たとえば、下記特許文献５を参照。）。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００４−１５１１４９号公報
【特許文献２】特開２００８−２９９４３９号公報
【特許文献３】特開２０００−１１２８５８号公報
【特許文献４】特開平９−１３８７１６号公報
【特許文献５】特表２００９−５０１４８２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術において、特許文献１では、サーバ側にも処理が必要であり、特許文献１にかかる技術を実施するのが困難であるという問題があった。特許文献２にかかる技術は、複数のＤＭＡを搭載するため、ＤＭＡの処理能力を下回る帯域の場合に、ＤＭＡの処理が過多となる問題があった。特許文献３にかかる技術は、公衆回線と端末間の帯域が保証された環境下であることが前提となっている。携帯端末のように、帯域が不安定となる状態では、特許文献２と同様に、処理が過多となる問題があった。【０００８】
また、省電力技術について、特許文献４にかかる技術では、装置が移動している場合、停止させるＣＰＵの処理を他のＣＰＵに退避させ、停止させるＣＰＵを省電力モードすることで省電力を実現している。しかし、処理を他のＣＰＵに退避させる場合、プログラムカウンタやスタックポインタ等を退避する退避処理を行う必要がある。退避処理は処理が多く、携帯端末などの処理能力が比較的低い組み込み環境では負荷がかかるという問題があった。また、特許文献５にかかる技術は、データの負荷特性を必要としているため、負荷特性がない汎用的なデータに関しては適用できないという問題があった。【０００９】
また、特許文献１〜特許文献５にかかる技術では、公衆回線と端末間の帯域が安定し保証された環境下にて、アクセスのスループットを向上させるかに着目している。携帯端末では、電波状況などにより、帯域が大きく変動する。特許文献１〜特許文献５にかかる技術では、帯域の変動が大きい場合に、アプリケーションを安定的に動作させることができないという問題があった。【００１０】
本発明は、上述した従来技術による問題点を解消するため、通信帯域に応じた最適な数のＣＰＵを動作し、省電力を図ることができるマルチコアプロセッサシステム、電力制御方法、および電力制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、複数のコアを備えたマルチコアプロセッサシステムであって、ネットワークの帯域を計測し、計測された帯域と所定の閾値を比較し、比較結果に基づいて、複数のコアのうち、ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定し、所定の処理を増減前に実行したコアの数と決定されたコアの増減数とに基づいて、増減後に実行するコアの数を算出し、算出された増減後に実行するコアの数に基づいて、複数のコアのうち、所定の処理を実行するコアを特定し、特定された所定の処理を実行するコアに、通信されるデータを分配することを要件とする。
【発明の効果】
【００１２】
本マルチコアプロセッサシステム、電力制御方法、および電力制御プログラムによれば、通信帯域に応じた最適な数のＣＰＵを動作することができ、動作しないＣＰＵの電力制御を行うことで、低電力を図ることができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。
【図２Ａ】マルチコアプロセッサシステム１００の通信帯域を示す説明図である。
【図２Ｂ】マルチコアプロセッサシステム１００の通信帯域に応じたハードウェアの一部とソフトウェアの状態を示す説明図（その１）である。
【図２Ｃ】マルチコアプロセッサシステム１００の通信帯域に応じたハードウェアの一部とソフトウェアの状態を示す説明図（その２）である。
【図３】マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。
【図４】本実施の形態におけるＣＰＵの使用状況と通信バッファの使用状況を示す説明図である。
【図５】従来例と実施の形態における通信バッファの使用状況を示す説明図である。
【図６】帯域監視モジュール２１５の処理を示すフローチャートである。
【図７】ＣＰＵスケジューラ２１６の処理を示すフローチャートである。
【図８】バッファスケジューラ２１７の処理を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、電力制御方法、および電力制御プログラムの好適な実施の形態を詳細に説明する。
【００１５】
（マルチコアプロセッサシステムのハードウェア構成）
図１は、実施の形態にかかるマルチコアプロセッサシステムのハードウェア構成を示すブロック図である。図１において、マルチコアプロセッサシステム１００は、ＣＰＵを複数搭載するＣＰＵｓ１０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３と、を備えている。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ１０４と、フラッシュＲＯＭコントローラ１０５と、フラッシュＲＯＭ１０６と、を備えている。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ１０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）１０８と、キーボード１０９と、を備えている。また、各構成部はバス１１０によってそれぞれ接続されている。
【００１６】
ここで、ＣＰＵｓ１０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ１０１は、シングルコアのプロセッサを並列して接続したすべてのＣＰＵを指している。ＣＰＵｓ１０１の詳細は、図２にて後述する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサであるＣＰＵが並列されているプロセッサ群を例にあげて説明する。
【００１７】
ＲＯＭ１０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ１０３は、ＣＰＵｓ１０１のワークエリアとして使用される。フラッシュＲＯＭ１０４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ１０８によって新しいＯＳを受信し、フラッシュＲＯＭ１０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００１８】
フラッシュＲＯＭコントローラ１０５は、ＣＰＵｓ１０１の制御に従ってフラッシュＲＯＭ１０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ１０６は、フラッシュＲＯＭコントローラ１０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ１０８を通して取得した画像データ、映像データなどである。フラッシュＲＯＭ１０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００１９】
ディスプレイ１０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ１０７は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２０】
Ｉ／Ｆ１０８は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク１１１に接続され、ネットワーク１１１を介して他の装置に接続される。そして、Ｉ／Ｆ１０８は、ネットワーク１１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ１０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２１】
キーボード１０９は、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、キーボード１０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２２】
図２Ａは、マルチコアプロセッサシステム１００の通信帯域を示す説明図である。また、図２Ｂ、図２Ｃは、マルチコアプロセッサシステム１００の通信帯域に応じたハードウェアの一部とソフトウェアの状態を示す説明図である。符号２０１に示す説明図では、通信帯域の取得帯域に基づいて状態を３つに分類することを説明する。符号２０２〜符号２０４に示すブロック図では、符号２０１に示す説明図にて分類した状態の、それぞれの状態におけるハードウェアとソフトウェアの状態を説明する。
【００２３】
符号２０１に示す説明図は、時間経過による通信帯域の変化を示したグラフである。グラフの横軸は時刻を示し、縦軸は、通信帯域のうち取得した取得帯域を示す。通信帯域とは、通信速度を意味し、広帯域とは、通信速度が速いことを、低帯域とは、通信速度が遅いことを表す。取得帯域は、実際の通信速度を表す。破線２０５は、平均実効帯域の値を示す。たとえば、１００［Ｍｂｐｓ］の理論帯域をもつ通信方式を考慮し、実際に使用できる平均の帯域が５０［Ｍｂｐｓ］程度とした場合に、平均実効帯域を５０［Ｍｂｐｓ］とする。
【００２４】
符号２０１に示すグラフでは、破線２０５と取得帯域との位置関係によって、３つの状態に分類できる。符号２０６の範囲で示す状態は、取得帯域と平均実効帯域が等しい状態であり、この状態を定常状態とする。取得帯域と平均実効帯域が完全に一致せずとも、たとえば、平均実効帯域に幅をもうけ、その範囲に含まれていれば定常状態である、としてもよい。たとえば、平均実効帯域を５０±５［Ｍｂｐｓ］とし、取得帯域が４５［Ｍｂｐｓ］〜５５［Ｍｂｐｓ］以内であれば、定常状態である、としてもよい。
【００２５】
符号２０７の範囲で示す状態は、取得帯域が平均実効帯域を上回った状態であり、この状態を帯域上昇状態とする。帯域上昇状態となるケースとしては、たとえば、電波状況がよく、マルチコアプロセッサシステム１００と無線にて接続される基地局に対して、他の接続端末が少なく、マルチコアプロセッサシステム１００が基地局の回線をフルに使用できるときである。
【００２６】
符号２０８の範囲で示す状態は、取得帯域が平均実効帯域を下回った状態であり、この状態を帯域低下状態とする。帯域低下状態となるケースとしては、たとえば、マルチコアプロセッサシステム１００がビルの陰に入って電波状況が悪くなった場合である。また、マルチコアプロセッサシステム１００を保持するユーザが移動中であり、マルチコアプロセッサシステム１００と接続される基地局が変更された場合も、帯域低下状態となる。また、マルチコアプロセッサシステム１００と接続される基地局に対して、他の接続端末が多く、同時利用者数が増えて帯域を分割して利用する場合も、帯域低下状態となる。
【００２７】
図２Ｂの符号２０２で示すブロック図は、符号２０６にて示した定常状態におけるハードウェアの一部とソフトウェアの構成を示すブロック図である。初めに、符号２０２で示すブロック図では、ハードウェアの一部とソフトウェアの構成を説明する。符号２０２で示すブロック図はハードウェア構成として、ＣＰＵｓ１０１とメモリ２０９を図示している。本実施の形態にかかるＣＰＵｓ１０１は、複数のＣＰＵとしてＣＰＵ＃０、ＣＰＵ＃１、ＣＰＵ＃２、ＣＰＵ＃３で構成される。各ＣＰＵとメモリ２０９はバス１１０によってそれぞれ接続されている。メモリ２０９は、ＣＰＵｓ１０１からアクセスする記憶装置であり、ＲＯＭ１０２とＲＡＭ１０３とフラッシュＲＯＭ１０４に相当する。
【００２８】
各ＣＰＵは、前述のハードウェア構成により、ソフトウェアを実行する。実行されるソフトウェアは、クライアントモジュール２１０、アプリケーション２１４、帯域監視モジュール２１５である。各ソフトウェアはメモリ２０９内に存在する、バッファ２１３−０、バッファ２１３−１にアクセスする。
【００２９】
クライアントモジュール２１０は、通信機能におけるＯＳＩ参照モデルにおけるプレゼンテーション層の処理をする機能をもったライブラリである。プレゼンテーション層の処理内容は、通信されるデータに対してアプリケーション２１４が構文の違いを意識しなくてもよいようにデータを変換する。プレゼンテーション層の仕様として、たとえば、ＨＴＭＬ（ＨｙｐｅｒＴｅｘｔ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）やＸＭＬ（Ｅｘｔｅｎｓｉｂｌｅ  Ｍａｒｋｕｐ  Ｌａｎｇｕａｇｅ）が当てはまる。また、クライアントモジュール２１０は、アプリケーションインターフェース部２１１と帯域連動部２１２を内部に含む。また通信されるデータは、Ｉ／Ｆ１０８から受信されたデータでもよいし、Ｉ／Ｆ１０８へ送信されるデータのどちらでもよい。
【００３０】
アプリケーションインターフェース部２１１は、通信帯域に連動せずに、一定間隔でアプリケーション２１４にデータを受け渡す機能を有する。帯域連動部２１２は、帯域監視モジュール２１５によりＣＰＵ数を特定された場合に、動的に動作ＣＰＵ数を変更する機能を有する。また、バッファ数が変更された場合に、現在動作中のＣＰＵに対してバッファを割り当て、バッファ内のデータをＣＰＵに分配する機能を有する。アプリケーションインターフェース部２１１と帯域連動部２１２は、メッセージ通信、ＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）といった非同期インターフェースによって接続されている。
【００３１】
バッファ２１３−０、バッファ２１３−１は、メモリ２０９内にてＩ／Ｆ１０８にて通信されるデータを一時格納する領域である。バッファ２１３−０、バッファ２１３−１は帯域監視モジュール２１５によって確保される。確保されるバッファ数は、通信されるデータがＩ／Ｆ１０８から受信されたデータの場合に、動的に変更される。
【００３２】
また、１つのバッファのサイズは任意であるが、たとえば、Ｉ／Ｆ１０８にてやりとりされるプロトコルの規約に従って設定してもよい。たとえば、Ｉ／Ｆ１０８によって受信されたデータのうち、１つのパケットの最大サイズは、データリンク層に設定される１回の転送で送れる最大転送単位であるＭＴＵ（Ｍａｘｉｍｕｍ  Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｕｎｉｔ）に従っている。ＭＴＵが１５００［ｂｙｔｅ］である場合、パケット内のデータ部分のサイズは最大でも１５００［ｂｙｔｅ］となる。したがって、１つのバッファに３２個のパケットデータを確保できるようにする場合は、バッファサイズは、１５００×３２＝４８０００［ｂｙｔｅ］となる。
【００３３】
また、１つのバッファに対するパケット数の設定方法については、たとえば、ＣＰＵの処理能力によって設定してもよい。たとえば、クライアント処理効率Ｃｌが３８４０００［ｂｐｓ］（ｂｉｔ  ｐｅｒ  ｓｅｃｏｎｄ）であり、１秒間に４８０００［ｂｙｔｅ］処理できるＣＰＵを想定する。また、ＣＰＵはバッファに対して、１秒に１回データを読み込みに行く場合を想定する。この場合、１秒間に処理できるパケット数は、４８０００／１５００＝３２個となるため、パケット数３２を設定する。もし、ＣＰＵが１秒間に２回データを読み込みに行くならば、パケット数は半分の１６でよく、バッファのサイズも２４０００［ｂｙｔｅ］でよい。
【００３４】
アプリケーション２１４は、コンピュータを使用するユーザが実行したい作業を行うソフトウェアである。アプリケーション２１４は、通信機能を使用する際には、クライアントモジュール２１０にアクセスする。アプリケーション２１４の具体例として、たとえば、ストリーミング映像再生ソフトウェアやＷｅｂブラウザなどがある。
【００３５】
帯域監視モジュール２１５は、現在接続中のサーバとの通信帯域の監視を行う機能を有する。帯域監視モジュール２１５は、周期的に起動されるデーモンまたはスレッドで構成される。帯域監視モジュール２１５はＣＰＵスケジューラ２１６とバッファスケジューラ２１７を内部に含む。
【００３６】
ＣＰＵスケジューラ２１６は、通信帯域の監視に基づいて帯域連動部２１２を動作させるために必要なＣＰＵ数を算出する。バッファスケジューラ２１７は、通信帯域の監視に基づいて、帯域連動部２１２の並列度が高くなれば、バッファを確保する機能を有する。また、バッファスケジューラ２１７は、アプリケーションインターフェース部２１１の処理が進み、バッファリングデータの減少に連動してバッファを開放する機能を有する。帯域監視モジュール２１５、ＣＰＵスケジューラ２１６、バッファスケジューラ２１７の処理の詳細は、それぞれ図６、図７、図８にて後述する。
【００３７】
前述したハードウェア、ソフトウェアの構成にて、マルチコアプロセッサシステム１００は、アプリケーション２１４の機能を実現する。また、定常状態におけるＣＰＵは、ＣＰＵ＃０とＣＰＵ＃１が動作中で、ＣＰＵ＃２とＣＰＵ＃３に関しては、停止状態である。ＣＰＵ＃２とＣＰＵ＃３は、アプリケーション２１４に関する処理や、他のアプリケーションが動作していない状態であり、電力制御を受け、省電力モードで動作している状態である。符号２０２で示すブロック図では、バッファ２１３−０は、ＣＰＵ＃０に割り当てられ、バッファ２１３−１は、ＣＰＵ＃１に割り当てられる。
【００３８】
図２Ｃの符号２０３で示すブロック図は、符号２０７にて示した帯域上昇状態におけるハードウェアの一部とソフトウェアの構成を示すブロック図である。帯域監視モジュール２１５は帯域上昇状態を検出し、クライアントモジュール２１０にＣＰＵ＃２、ＣＰＵ＃３の省電力モードの解除制御をする。クライアントモジュール２１０は、ＣＰＵ＃２、ＣＰＵ＃３の省電力モードを解除する。
【００３９】
また、帯域監視モジュール２１５は、クライアントモジュール２１０のアプリケーションインターフェース部２１１にバッファ数を通知し、アプリケーションインターフェース部２１１は、バッファ２１３−２、バッファ２１３−３を確保する。確保されたバッファは、帯域連動部２１２によって各ＣＰＵに割り当てられる。符号２０３で示すブロック図では、バッファ２１３−２は、ＣＰＵ＃２に割り当てられ、バッファ２１３−３は、ＣＰＵ＃３に割り当てられる。
【００４０】
図２Ｃの符号２０４で示すブロック図は、符号２０８にて示した帯域低下状態におけるハードウェアの一部とソフトウェアの構成を示すブロック図である。帯域監視モジュール２１５は帯域低下状態を検出し、クライアントモジュール２１０にＣＰＵ＃２、ＣＰＵ＃３を省電力モードで動作するように制御をする。
【００４１】
また、帯域監視モジュール２１５はバッファ２１３−０、バッファ２１３−１、バッファ２１３−２、バッファ２１３−３の使用状況を監視し、未使用のバッファが存在するかを確認する。符号２０４で示すブロック図では、バッファ２１３−１が未使用であり、アプリケーションインターフェース部２１１によってバッファ２１３−１が開放される。バッファの減少により、各バッファは帯域連動部２１２によって再び各ＣＰＵに割り当てられる。符号２０４で示すブロック図では、バッファ２１３−０は、ＣＰＵ＃０に割り当てられ、バッファ２１３−２とバッファ２１３−３は、ＣＰＵ＃１に割り当てられる。
【００４２】
（マルチコアプロセッサシステム１００の機能的構成）
つぎに、マルチコアプロセッサシステム１００の機能的構成について説明する。図３は、マルチコアプロセッサシステム１００の機能的構成を示すブロック図である。マルチコアプロセッサシステム１００は、計測部３０１と、比較部３０２と、決定部３０３と、コア数算出部３０４と、特定部３０５と、分配部３０６と、検出部３０７と、増減量算出部３０８と、設定部３０９と、格納部３１０と、取得部３１１を含む構成である。この制御部となる機能（計測部３０１〜取得部３１１）は、具体的には、たとえば、図１に示したＲＯＭ１０２、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶装置に記憶されたプログラムをＣＰＵｓ１０１が実行することにより、その機能を実現する。または、Ｉ／Ｆ１０８を経由して他のＣＰＵが実行することにより、その機能を実現してもよい。
【００４３】
また、図３では、ＣＰＵ＃０は計測部３０１〜格納部３１０の機能を有し、ＣＰＵ＃１は取得部３１１の機能を有しているが、ＣＰＵ＃０もクライアントモジュール２１０を実行する場合に、取得部３１１を有している。また、計測部３０１〜コア数算出部３０４、検出部３０７、増減量算出部３０８は、帯域監視モジュール２１５に属し、特定部３０５、分配部３０６、設定部３０９、格納部３１０、取得部３１１はクライアントモジュール２１０に属する。また、本実施の形態では、ＣＰＵ＃０にて帯域監視モジュール２１５が実行されている状態で説明を行う。帯域監視モジュール２１５は、他のＣＰＵとしてＣＰＵ＃１〜ＣＰＵ＃３にて実行されていてもよいし、また、ＣＰＵ＃０〜ＣＰＵ＃３とは異なる、外部のＣＰＵにて実行されていてもよい。
【００４４】
計測部３０１は、ネットワークの帯域を計測する機能を有する。具体的には、たとえば、ＣＰＵ＃０は、Ｉ／Ｆ１０８に対して一定周期にＰｉｎｇを送信し、サーバからの応答によって帯域を計測する。また、ＣＰＵ＃０は、Ｐｉｎｇを使用した計測方法以外にも一定期間に送信されたデータや受信されたデータの量から計測してもよい。なお、計測されたデータは、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４５】
比較部３０２は、計測部３０１によって計測された帯域と所定の閾値を比較する機能を有する。所定の閾値とは平均実効帯域の値である。具体的には、たとえば、平均実効帯域が５０［Ｍｂｐｓ］であった場合に、計測された帯域が６０［Ｍｂｐｓ］で、所定の閾値を上回った場合、マルチコアプロセッサシステム１００の状態は、帯域上昇状態となる。また、計測された帯域が４０［Ｍｂｐｓ］で、所定の閾値を下回った場合、マルチコアプロセッサシステム１００の状態は、帯域低下状態となる。また、計測された帯域が５０［Ｍｂｐｓ］で、所定の閾値と等しい場合、マルチコアプロセッサシステム１００の状態は、定常状態となる。なお、比較結果は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４６】
決定部３０３は、比較部３０２の比較結果に基づいて、複数のコアのうち、ネットワークを介して通信されるデータに関する所定の処理を実行するコアの増減数を決定する機能を有する。複数のコアとは、本実施の形態ではＣＰＵ＃０〜ＣＰＵ＃３である。所定の処理とは、クライアントモジュール２１０が行う処理であり、具体的な処理としては、たとえば、プレゼンテーション層の処理である。また具体的な処理内容は、その他の層の処理でもよい。
【００４７】
たとえば、Ｉ／Ｆ１０８へ送信する場合は、セッション層であるＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔｓ  Ｌａｙｅｒ）を行ってもよい。または、アプリケーション２１４がストリーミング映像再生ソフトであれば、送信または受信されるデータとして、アプリケーション層にてストリーミング映像をコントロールするＲＴＳＰ（Ｒｅａｌ  Ｔｉｍｅ  Ｓｔｒｅａｍｉｎｇ  Ｐｒｏｔｏｃｏｌ）でもよい。また、送信されるデータや受信されるデータは、トランスポート層にて、ストリーミングのデータを管理するＲＴＰ（Ｒｅａｌ−ｔｉｍｅ  Ｔｒａｎｓｐｏｒｔ  Ｐｒｏｔｏｃｏｌ）を使用してもよい。
【００４８】
決定部３０３の具体例としては、たとえば、比較部３０２によってマルチコアプロセッサシステム１００の状態が帯域上昇状態となった場合を想定する。決定部３０３は、クライアントモジュール２１０を実効するＣＰＵの個数を１増加すると決定する。なお、決定されたＣＰＵの個数は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００４９】
コア数算出部３０４は、所定の処理を増減前に実行したコアの数と決定部３０３によって決定されたコアの増減数に基づいて、増減後に実行するコアの数を算出する機能を有する。具体的には、たとえば、増減前となるクライアントモジュール２１０を行っていたＣＰＵの個数が２個であり、決定部３０３によってＣＰＵ数を１増加する場合、増減後のＣＰＵの個数は３個となる。なお、算出された結果は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００５０】
特定部３０５は、コア数算出部３０４によって算出された増減後に実行するコアの数に基づいて、複数のコアのうち、所定の処理を実行するコアを特定する機能を有する。具体的には、たとえば、増減前にＣＰＵ＃０とＣＰＵ＃１がクライアントモジュール２１０を行っており、クライアント実行ＣＰＵである場合を想定する。この時、増減後に実行するＣＰＵが３個と算出された場合、ＣＰＵ＃０は、特定部３０５によって現在クライアントモジュール２１０を実行していないＣＰＵ＃２とＣＰＵ＃３のどちらかを新たなクライアント実行ＣＰＵとして特定する。なお、特定されたＣＰＵの情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶される。
【００５１】
分配部３０６は、特定部３０５によって特定された所定の処理を実行するコアに、通信されるデータを分配する機能を有する。また、分配部３０６は、格納部３１０によって、格納された増減後の記憶領域に応じて、所定の処理を実行するコアに、増減後の記憶領域に格納されたデータを分配してもよい。具体的には、たとえば、ＣＰＵ＃０とＣＰＵ＃１がクライアントモジュール２１０を実行している場合に、分配部３０６は、通信されるデータを格納するバッファ２１３−０をＣＰＵ＃０に、バッファ２１３−１をＣＰＵ＃１に分配する。なお、分配された結果は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶する。
【００５２】
検出部３０７は、所定の記憶領域内での空き領域を検出する機能を有する。所定の記憶領域とは、バッファ２１３−０〜バッファ２１３−３のうち、現在確保されているバッファのことである。具体的には、たとえば、バッファ２１３−０とバッファ２１３−１が確保されており、クライアント実行ＣＰＵにより受信されたデータが解放され、バッファ１つ分の空き領域が発生した場合に、検出部３０７は空き領域バッファ１つ分を検出する。なお、検出された空き領域の情報は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶する。
【００５３】
増減量算出部３０８は、検出部３０７によって検出された空き領域の量を所定の単位に換算した減少量と受信されたデータの量に基づいて、所定の記憶領域の増減量を算出する機能を有する。また、増減量算出部３０８は、比較部３０２によって計測された帯域が所定の閾値を超えた場合、また、所定の増加量を加えて算出してもよい。所定の増加量とは、バッファ１つ分のデータ量であり、所定の単位とは、バッファ１つを単位とした量である。
【００５４】
たとえば、空き領域が６００００［ｂｙｔｅ］で、バッファ１つのバッファサイズが４８０００［ｂｙｔｅ］である場合、減少量は６００００÷４８０００＝１余り１２０００［ｂｙｔｅ］であるため、空き領域の量はバッファ１つとなる。増減量算出部３０８の具体例は、たとえば、計測された取得帯域が平均実効帯域を上回り、検出された空き容量がバッファ１つ分となり、受信されたデータもバッファ１つ分であれば、増減量は１＋（−１）＋１＝１となる。なお、算出された値は、ＲＡＭ１０３、フラッシュＲＯＭ１０４などの記憶領域に記憶する。
【００５５】
設定部３０９は、増減量算出部３０８によって算出された所定の記憶領域の増減量に基づいて、増減後の記憶領域を所定の記憶領域に設定する機能を有する。具体的には、たとえば、マルチコアプロセッサシステム１００が、バッファとしてバッファ２１３−０とバッファ２１３−１の２つを確保している状態を想定する。そして、増減量が１であった場合、ＣＰＵ＃０は、バッファ２１３−２を新たに確保してバッファ数を３とし、バッファ２１３−０〜バッファ２１３−２を増減後の記憶領域とする。また、ＣＰＵ＃０は、増減後の記憶領域を所定の記憶装置と設定して、検出部３０７での検出対象とする。
【００５６】
格納部３１０は、受信されたデータを設定部３０９によって設定された増減後の記憶領域に格納する機能を有する。なお、受信されたデータは、ネットワークを介して送信されるデータでもよい。具体的には、たとえば、ＣＰＵ＃０は、受信されたデータをバッファ２１３−０、またはバッファ２１３−１に格納する。
【００５７】
取得部３１１は、分配部３０６によって分配された通信されたデータを取得する機能を有する。具体的には、たとえば、特定部３０５によってクライアント実行ＣＰＵと特定されたＣＰＵ＃１は、バッファ２１３−１によって通信されるデータを取得する。
【００５８】
図４は、本実施の形態におけるＣＰＵの使用状況と通信バッファの使用状況を示す説明図である。マルチコアプロセッサシステム１００は、時刻ｔ０にてアプリケーション２１４を起動する。また、初期状態として、マルチコアプロセッサシステム１００は、ＣＰＵ＃０〜ＣＰＵ＃３のうち、２つのＣＰＵをクライアントモジュール２１０の処理に割り当てる。また、マルチコアプロセッサシステム１００は、バッファ２１３−０〜バッファ２１３−３のうち、２つのバッファを確保する。
【００５９】
アプリケーション２１４が起動完了した時刻ｔ１以降にて、マルチコアプロセッサシステム１００は、帯域監視モジュール２１５によって帯域監視を開始する。帯域監視の結果、時刻ｔ１と時刻ｔ２では、マルチコアプロセッサシステム１００は取得帯域Ｂｗが平均実効帯域ＢｗＡｖｅと等しい定常状態となり、ＣＰＵ＃０とＣＰＵ＃１をクライアントモジュール２１０の処理に割り当てる。また、マルチコアプロセッサシステム１００は、バッファ２１３−０〜バッファ２１３−３のうち任意の２つのバッファを確保する。
【００６０】
時刻ｔ３と時刻ｔ４では、取得帯域Ｂｗが平均実効帯域ＢｗＡｖｅを上回った広帯域となり、マルチコアプロセッサシステム１００は帯域上昇状態となる。時刻ｔ３では、マルチコアプロセッサシステム１００はＣＰＵ＃２をクライアントモジュール２１０の処理に割り当て、バッファ２１３−０〜バッファ２１３−３のうち、未使用であったバッファの１つを新たに確保する。時刻ｔ４でも同様に、マルチコアプロセッサシステム１００はＣＰＵ＃３をクライアントモジュール２１０の処理に割り当て、バッファ２１３−０〜バッファ２１３−３のうち、未使用であったバッファの１つを新たに確保する。
【００６１】
時刻ｔ５では、帯域監視の結果、マルチコアプロセッサシステム１００は定常状態となる。定常状態となったマルチコアプロセッサシステム１００は、ＣＰＵ＃２とＣＰＵ＃３に対してクライアントモジュール２１０の処理割り当てを解除し、他に処理を行っていない場合、ＣＰＵ＃２とＣＰＵ＃３を停止状態とする。バッファ２１３−０〜バッファ２１３−３については、すべて使用中であるため開放しない。
【００６２】
時刻ｔ６と時刻ｔ７では、取得帯域Ｂｗが平均実効帯域ＢｗＡｖｅを下回った低帯域となり、マルチコアプロセッサシステム１００は帯域低下状態となる。時刻ｔ６では、マルチコアプロセッサシステム１００はＣＰＵ＃１に対してクライアントモジュール２１０の処理割り当てを解除し、他に処理を行っていない場合、停止状態とする。バッファについては、未使用となったバッファが存在すれば開放する。
【００６３】
時刻ｔ７では、マルチコアプロセッサシステム１００はＣＰＵ＃０に対してクライアントモジュール２１０の処理割り当てを解除し、他に処理を行っていない場合、停止状態とする。本実施の形態では、帯域監視モジュール２１５などがＣＰＵ＃０で動作しているため、ＣＰＵ＃０は完全な停止状態とはならず、たとえば、ＣＰＵ＃０はＣＰＵのクロック周波数を低下させ、省電力モードで動作する。また、バッファ２１３−０〜バッファ２１３−３についても、マルチコアプロセッサシステム１００は、未使用となったバッファを検出するたびに開放する。
【００６４】
時刻ｔ８では、取得帯域Ｂｗが平均実効帯域ＢｗＡｖｅと等しくなり、マルチコアプロセッサシステム１００は定常状態となる。マルチコアプロセッサシステム１００は初期状態となりＣＰＵ＃０とＣＰＵ＃１をクライアントモジュール２１０の処理に割り当てる。また、バッファについても、マルチコアプロセッサシステム１００は、バッファ２１３−０〜バッファ２１３−３のうち任意の２つのバッファを確保するよう動作する。時刻ｔ９でも、マルチコアプロセッサシステム１００は定常状態となり、アプリケーション２１４の実行を続ける。マルチコアプロセッサシステム１００は、未使用のバッファを検出すると、未使用のバッファを開放するように動作する。
【００６５】
図示していないが、従来例におけるＣＰＵの使用状況と通信バッファの使用状況では、定常状態や帯域低下状態では、従来例におけるマルチコアプロセッサシステムは、過動作状態となる。過動作状態は、ＣＰＵの処理効率であるクライアント処理効率を下回っている場合に、処理が完全に完了してしまい、データを一定時間待つ状態となる。データ待ちが発生すると、データが獲得できたか否かを定期的にチェックする、というスピンループが発生する。
【００６６】
また、たとえば特許文献２では、ＤＭＡセッティング中に、ｄａｔａ  ｕｎｄｅｒ  ｆｌｏｗなどのエラーが発生し、リカバリのオーバーヘッドが発生する。結果、過動作状態になると前述したオーバーヘッドを行うために、消費電力の無駄が発生することになる。
【００６７】
図５は、従来例と実施の形態における通信バッファの使用状況を示す説明図である。グラフの横軸は、データ受信した開始時刻からの時刻を示し、縦軸はバッファサイズを示す。実線５０１は、本実施の形態における通信バッファの時間変化にともなう使用状況を示しており、破線５０２は、従来例における通信バッファの時間変化にともなう使用状況を示している。また、一点破線５０３は、本実施の形態における通信バッファの最大値ＭａｘＢｕｆｓｉｚｅpropを示し、一点破線５０４は、従来例における通信バッファの最大値ＭａｘＢｕｆｓｉｚｅargを示す。通信バッファの使用量Ｂｕｆｓｉｚｅ（ｔ）は、下記式（１）となる。
【００６８】
【数１】
2011111230.tif 000003
【００６９】
ただし、Ｃｌをクライアント処理効率［ｂｐｓ］、ｔを時刻［ｓ］、Ｎ（ｔ）を動作ＣＵ数、ｆ（ｔ）を受信速度［ｂｐｓ］とする。このとき、最大バッファサイズは、下記式（２）で示される条件を満たす。
【００７０】
【数２】
2011111230.tif 000004
【００７１】
式（２）を満たすｔ＝ｔ’におけるＢｕｆｓｉｚｅ（ｔ’）であり、本実施の形態における最大バッファサイズは、下記式（３）となる。
ＭａｘＢｕｆｓｉｚｅprop＝Ｃｌ・Ｎ（ｔ’）・ｆ（ｔ’）…（３）
【００７２】
同様に、従来例における最大バッファサイズは、下記式（４）となる。
【００７３】
【数３】
2011111230.tif 000005
【００７４】
ただし、Ｄは、データ総量を示している。効果としては、符号５０５で示した差分である、ＭａｘＢｕｆｓｉｚｅarg−ＭａｘＢｕｆｓｉｚｅprop分のバッファを削減することができる。本実施の形態では、符号５０５で示した差分のバッファを減少することができ、一般的なバッファ管理方式よりも効率よく運用することができる。また、クライアント処理効率Ｃｌについては、ＣＰＵ＃０〜ＣＰＵ＃３の処理効率を事前に計測することで求めてもよい。
【００７５】
具体例としては、クライアント処理効率Ｃｌを１０［Ｍｂｐｓ］とし、ｆ（ｔ）を３８４［ｋｂｐｓ］〜１００［Ｍｂｐｓ］、受信完了の時刻ｔを６００［秒］とする。このとき、ＭａｘＢｕｆｓｉｚｅpropは、数メガバイトとなる。ＭａｘＢｕｆｓｉｚｅargは、式（４）よりＤが大きい程バッファサイズを確保するように動作するため、データ量が大きいほど差分が広がることとなる。
【００７６】
図６は、帯域監視モジュール２１５の処理を示すフローチャートである。帯域監視モジュール２１５を実行するＣＰＵ＃０は、アプリケーション２１４によって、通信を開始する（ステップＳ６０１）。続けて、ＣＰＵ＃０は、通信開始時にクライアントモジュール２１０に割り当てる初期ＣＰＵ数と初期バッファ数を設定する（ステップＳ６０２）。たとえば、ＣＰＵ＃０は、すべてのＣＰＵのうち半分を割り当て、バッファもＣＰＵと同数を用意する。本実施の形態では、マルチコアプロセッサシステム１００は、２つのＣＰＵを割り当て、バッファを２つ用意する。設定した値は、帯域連動部２１２とアプリケーションインターフェース部２１１に通知される。
【００７７】
通信開始後、ＣＰＵ＃０は、通信の平均実効帯域ＢｗＡｖｅを取得する（ステップＳ６０３）。平均実効帯域は、開始した通信規格での平均帯域を示しており、たとえば、理論帯域が１００［Ｍｂｐｓ］であれば、平均実効帯域は１００／２＝５０［Ｍｂｐｓ］と定義してもよい。
【００７８】
続けて、ＣＰＵ＃０は、取得帯域Ｂｗを計測する（ステップＳ６０４）。取得帯域とは実際の通信速度であり、たとえばＰｉｎｇを発行して取得帯域を計測する。Ｂｗを計測後、ＣＰＵ＃０は、ＣＰＵスケジューラ２１６を実行する（ステップＳ６０５）。ＣＰＵスケジューラ２１６の処理の詳細は、図７にて後述する。ＣＰＵスケジューラ２１６の処理後、ＣＰＵ＃０は、ＣＰＵスケジューラ２１６の処理にて新たにクライアント実行ＣＰＵを起動したかを確認する（ステップＳ６０６）。
【００７９】
起動した場合（ステップＳ６０６：Ｙｅｓ）、ＣＰＵ＃０は、バッファスケジューラ２１７を実行する（ステップＳ６０７）。バッファスケジューラ２１７の処理の詳細は、図８にて後述する。ステップＳ６０７の処理後、または、クライアント実行ＣＰＵを起動していない場合（ステップＳ６０６：Ｎｏ）、ＣＰＵ＃０は、バッファ内から受信されたデータが解放された結果、未使用のバッファが存在するかを検出する（ステップＳ６０８）。未使用のバッファが存在することを検出した場合（ステップＳ６０８：Ｙｅｓ）、ＣＰＵ＃０は、ステップＳ６０７の処理に移行する。未使用のバッファが存在しなかった場合（ステップＳ６０８：Ｎｏ）、ＣＰＵ＃０は、ステップＳ６０４の処理に移行する。
【００８０】
図７は、ＣＰＵスケジューラ２１６の処理を示すフローチャートである。ＣＰＵ＃０は、ステップＳ７０１とステップＳ７０６にて、ＢｗとＢｗＡｖｅを比較する。ＢｗがＢｗＡｖｅより大きい場合（ステップＳ７０１：Ｙｅｓ）、ＣＰＵ＃０は、すべてのクライアント実行ＣＰＵが稼動中かを確認する（ステップＳ７０２）。稼動中でないクライアント実行ＣＰＵが存在する場合（ステップＳ７０２：Ｎｏ）、ＣＰＵ＃０は、クライアント実行ＣＰＵを１追加する（ステップＳ７０３）。
【００８１】
追加を行った後、ＣＰＵ＃０は、稼動中でないクライアント実行ＣＰＵの１つを新たにクライアント実行ＣＰＵとして起動する（ステップＳ７０４）。起動後、ＣＰＵ＃０は、クライアントモジュール２１０用のコンテキストを生成する（ステップＳ７０５）。ステップＳ７０５の処理終了後、ＣＰＵ＃０はＣＰＵスケジューラ処理を終了する。ステップＳ７０５の処理ルートを行った場合、新たにクライアント実行ＣＰＵを起動しているため、ＣＰＵ＃０は、ステップＳ６０６にてＹｅｓのルートを実行する。
【００８２】
ＢｗがＢｗＡｖｅ以下の場合（ステップＳ７０１：Ｎｏ）、ＣＰＵ＃０は、ＢｗがＢｗＡｖｅより小さいかを確認する（ステップＳ７０６）。ＢｗがＢｗＡｖｅより小さい場合（ステップＳ７０６：Ｙｅｓ）、ＣＰＵ＃０は、すべてのクライアント実行ＣＰＵが停止中かを確認する（ステップＳ７０７）。実行中のＣＰＵが存在する場合（ステップＳ７０７：Ｎｏ）、ＣＰＵ＃０は、クライアント実行ＣＰＵを１減少する（ステップＳ７０８）。
【００８３】
続けてＣＰＵ＃０は、実行中のＣＰＵのうち、停止するクライアント実行ＣＰＵのクライアントモジュール２１０に対し停止要求をする（ステップＳ７０９）。停止要求を行った後、ＣＰＵ＃０は、停止するクライアント実行ＣＰＵを省電力モードに遷移させる（ステップＳ７１０）。
【００８４】
続けて、ＣＰＵ＃０は、帯域連動部２１２へ起動停止制御を行い（ステップＳ７１１）、処理を終了する。ステップＳ７１１の処理では、ＣＰＵ＃０は、ステップＳ７０８、または後述するステップＳ７１２にて決定した実行ＣＰＵの増減数を帯域連動部２１２へ通知する。また、ステップＳ７１１の処理ルートを行った場合、新たにクライアント実行ＣＰＵを起動していないため、ＣＰＵ＃０は、ステップＳ６０６にてＮｏのルートを実行する。
【００８５】
また、通知を受けた帯域連動部２１２にて、ＣＰＵ＃０は、増減前にクライアントモジュール２１０を実行したＣＰＵ数に、通知された増減数を加えることで、増減後に実行するＣＰＵの数を算出する。算出後、ＣＰＵ＃０は、増減後に実行するＣＰＵの数からクライアントモジュール２１０を実行するＣＰＵを特定する。
【００８６】
ここでの特定方法は、たとえば、ＣＰＵ数を増加する場合、ＣＰＵ＃０は、増減前に実行するＣＰＵはそのままで、実行していないＣＰＵのいずれかをクライアントモジュール２１０を実行するＣＰＵとする。また、ＣＰＵ数を減少する場合、ＣＰＵ＃０は、増減前に実行するＣＰＵのうち、ＣＰＵに割り当てられたバッファを参照し、バッファ内の受信されたデータが一番少ないバッファを検出する。ＣＰＵ＃０は、該当のバッファにアクセスするＣＰＵに対してクライアントモジュール２１０の割り当てを解除する。
【００８７】
ＣＰＵの特定後、ＣＰＵ＃０は、クライアントモジュール２１０にて、特定されたＣＰＵに、確保されているバッファを分配する。分配方法は、たとえば、ＣＰＵ数が増加する場合、バッファ数も増加されているため、新しく割り当てられたＣＰＵに対して、新しく確保されたバッファを割り当て、新しく確保されたバッファ分のデータを分配するようにしてもよい。ＣＰＵ数が減少する場合は、ＣＰＵ＃０は、割り当てを解除されたＣＰＵが処理していたバッファを、残っているＣＰＵが処理するように割り当てることで、データをＣＰＵに分配したことになる。
【００８８】
ＢｗがＢｗＡｖｅに等しい場合（ステップＳ７０６：Ｎｏ）、ＣＰＵ＃０は、クライアント実行ＣＰＵを初期化し（ステップＳ７１２）、ステップＳ７１１の処理に移行する。なお、実行ＣＰＵの初期化については、ステップＳ６０２と同様であり、たとえば、ステップＳ７１２の前にＣＰＵが１つ動作していた場合、ＣＰＵ＃０は、初期値である２つのＣＰＵ動作させるようにする。バッファについては初期化を行わないが、もし、初期値を下回っていた場合、ＣＰＵ＃０は、初期値に戻す。
【００８９】
また、ステップＳ７０１、ステップＳ７０６の判断処理において、平均実効帯域と取得帯域の比較を行っていたが、平均実効帯域はある程度の幅があってもよい。具体的には、たとえば、平均実効帯域を５０±５［Ｍｂｐｓ］とすると、ステップＳ７０１の処理は、“Ｂｗ＞（ＢｗＡｖｅ＋５）”となり、ステップＳ７０６の処理は、“Ｂｗ＜（ＢｗＡｖｅ−５）”となる。このように幅をもうけ、平均実効帯域と取得帯域がほぼ等しいときに、ステップＳ７１２の処理を行うようにしてもよい。
【００９０】
図８は、バッファスケジューラ２１７の処理を示すフローチャートである。ＣＰＵ＃０は、新たにクライアント実行ＣＰＵを起動したかを確認する（ステップＳ８０１）。新たにクライアント実行ＣＰＵを起動した場合（ステップＳ８０１：Ｙｅｓ）、ＣＰＵ＃０は、バッファ数を１増加する（ステップＳ８０２）。新たにクライアント実行ＣＰＵを起動していない場合（ステップＳ８０１：Ｎｏ）、バッファ残量を確認した結果、使用していないバッファが存在していることになり、ＣＰＵ＃０は、バッファ数を１減少する（ステップＳ８０３）。
【００９１】
ステップＳ８０２、ステップＳ８０３の処理後、ＣＰＵ＃０は、アプリケーションインターフェース部２１１にバッファ数を通知する（ステップＳ８０４）。通知後、ＣＰＵ＃０は、帯域連動部２１２へ起動停止制御を行い（ステップＳ８０５）、処理を終了する。ステップＳ８０５の処理では、ＣＰＵ＃０は、ステップＳ７０３にて決定した実行ＣＰＵの増減数を帯域連動部２１２へ通知する。
【００９２】
また、通知を受けたアプリケーションインターフェース部２１１や帯域連動部２１２にて、ＣＰＵ＃０は、クライアントモジュール２１０を実行するＣＰＵに、バッファの増減を通知する。通知された増減数を元に、ＣＰＵ＃０は、増減後のバッファを設定する。続けて、ＣＰＵ＃０は、ＣＰＵに分配されていたバッファを増減後のバッファに応じて分配する。たとえば、バッファが増加した場合、ＣＰＵ＃０は、クライアントモジュール２１０を実行する任意のＣＰＵに対して、新しく確保したバッファに格納されたデータを分配する。このとき、新しく確保したバッファにはデータが存在しないため、ＣＰＵ＃０は、既に確保されていたバッファのデータ内の一部を、新しく確保したバッファに格納しなおしてもよい。
【００９３】
以上説明したように、マルチコアプロセッサシステム、電力制御方法、および電力制御プログラムによれば、通信帯域に応じて、通信されるデータの処理をするＣＰＵの数を算出し、通信されるデータをＣＰＵに分配する。これにより、通信帯域に応じた最適な数のＣＰＵを動作することができ、動作しないＣＰＵの電力制御にて低電力を実現することができる。
【００９４】
また、マルチコアプロセッサシステムは、通信帯域が所定の閾値を超えた場合、バッファの所定の増加量と記憶領域の空き領域と受信されたデータ量から増減量を算出し、増減後の記憶領域を設定し、増減後の記憶領域のデータをＣＰＵに分配してもよい。これにより、ＣＰＵの処理能力にあった記憶領域の量を確保することができ、記憶領域の使用領域を少なくすることができる。携帯端末などの組み込み環境では、メモリ２０９が多くないため、メモリの使用量を少なくすることは有用である。
【００９５】
また、マルチコアプロセッサシステムは、通信帯域が所定の閾値を超えない場合、記憶領域の空き領域と受信されたデータ量から増減量を算出し、増減後の記憶領域を設定し、増減後の記憶領域のデータをＣＰＵに分配してもよい。これにより、ＣＰＵの処理能力にあった記憶領域の量を確保することができ、特に定常状態や帯域低下状態の場合に過動作状態に陥ることがなく、低電力を実現することができる。
【００９６】
また、本実施の形態における帯域低下状態にて、移行前のＣＰＵが割り当てられていたバッファを、移行後のＣＰＵに割り当てる場合、処理量を少なくすることができる。具体的に移行するデータは、たとえば、バッファがリングバッファによるＦＩＦＯで実装されていた場合、バッファの開始アドレスと終了アドレス、データの未処理位置を示すアドレスと処理完了アドレスの４つのデータとなる。移行後のＣＰＵには、移行前のＣＰＵと同じ処理を行っているスレッドが存在するため、移行後のＣＰＵに存在するスレッドを使用すればよく、前述の４つ以外のデータの移行処理は不要である。この処理量は、たとえば特許文献４で実装されていた退避処理での処理量に比べて少なくなる。
【００９７】
なお、本実施の形態で説明した電力制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本電力制御プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本電力制御プログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００９８】
＃０  ＣＰＵ
＃１  ＣＰＵ
１１０  バス
２０９  メモリ
２１３−０  バッファ
２１３−１  バッファ
３０１  計測部
３０２  比較部
３０３  決定部
３０４  コア数算出部
３０５  特定部
３０６  分配部
３０７  検出部
３０８  増減量算出部
３０９  設定部
３１０  格納部
３１１  取得部
【図１】
2011111230.tif 000006
【図２Ａ】
2011111230.tif 000007
【図２Ｂ】
2011111230.tif 000008
【図２Ｃ】
2011111230.tif 000009
【図３】
2011111230.tif 000010
【図４】
2011111230.tif 000011
【図５】
2011111230.tif 000012
【図６】
2011111230.tif 000013
【図７】
2011111230.tif 000014
【図８】
2011111230.tif 000015
【国際調査報告】
2011111230.tif 000016
2011111230.tif 000017
2011111230.tif 000018