(57)【要約】【課題】性能が異なる複数のＣＰＵで構成されたシステムの性能を維持あるいは向上させる。【解決手段】半導体集積回路１００は、異なる性能を有する複数のＣＰＵ(big CPUおよびLITTLE CPU）を備える。半導体集積回路は、複数の機能ブロックと複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義したデバイステーブル２に従って、複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定する。【選択図】図２
2019219931.tif 000002
【特許請求の範囲】
【請求項１】
異なる性能を有する複数のＣＰＵと、
複数の機能ブロックと、
前記複数の機能ブロックと前記複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、前記複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定する割当判定部とを備える、半導体集積回路。
【請求項２】
前記割当判定部は、前記複数の機能ブロックの中から稼働状態にある機能ブロックを判定して、前記稼働状態の機能ブロックにより実現される前記タスクに割り当てられる前記実効ＣＰＵを判定する、請求項１に記載の半導体集積回路。
【請求項３】
前記割当判定部は、前記複数の機能ブロックの各々への電源の供給の状況を取得して、前記稼働状態を判定する、請求項２に記載の半導体集積回路。
【請求項４】
前記割当判定部は、クロックが供給されている機能ブロックが前記稼働状態の機能ブロックであると判定する、請求項３に記載の半導体集積回路。
【請求項５】
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち高い性能を有する高性能ＣＰＵに対応付けられた第１の機能ブロックと、
前記定義情報によって前記複数のＣＰＵのうち低い性能を有する低性能ＣＰＵに対応付けられた第２の機能ブロックとを含み、
前記第１の機能ブロックと前記第２の機能ブロックとが前記稼働状態である場合に、前記割当判定部は、前記高性能ＣＰＵが、前記第１の機能ブロックにより実現されるタスクおよび前記第２の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項２に記載の半導体集積回路。
【請求項６】
前記第１の機能ブロックが非稼働状態であり、かつ前記第２の機能ブロックが稼働状態である場合に、前記割当判定部は、前記低性能ＣＰＵが、前記第２の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項５に記載の半導体集積回路。
【請求項７】
前記割当判定部は、
前記複数の機能ブロックのいずれも非稼働状態である場合には、前記タスクを動作させるためのＣＰＵ負荷に関する情報に従って、前記実効ＣＰＵを判定する、請求項１に記載の半導体集積回路。
【請求項８】
前記割当判定部は、
前記ＣＰＵ負荷が大きい場合には、前記複数のＣＰＵのうち高い性能を有する高性能ＣＰＵが前記実効ＣＰＵであると判定し、
前記ＣＰＵ負荷が小さい場合には、前記複数のＣＰＵのうち低い性能を有する低性能ＣＰＵが前記実効ＣＰＵであると判定する、請求項７に記載の半導体集積回路。
【請求項９】
前記割当判定部は、
前記ＣＰＵ負荷に関する前記情報が取得できない場合には、前記複数のＣＰＵのうち高い性能を有するＣＰＵが前記実効ＣＰＵであると判定する、請求項７に記載の半導体集積回路。
【請求項１０】
前記定義情報は、さらに、前記複数の機能ブロックの各々の処理時間の閾値を含み、
前記割当判定部は、前記機能ブロックの前記処理時間に関する情報を取得し、
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち高い性能を有する高性能ＣＰＵに対応付けられた少なくとも１つの第１の機能ブロックを含み、
前記少なくとも１つの第１の機能ブロックの前記処理時間が前記閾値を超える場合に、前記割当判定部は、前記高性能ＣＰＵが、前記少なくとも第１の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項１に記載の半導体集積回路。
【請求項１１】
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち低い性能を有する低性能ＣＰＵに対応付けられた少なくとも１つの第２の機能ブロックをさらに含み、
前記少なくとも１つの第１の機能ブロックが非稼働状態であり、かつ、前記少なくとも１つの第２の機能ブロックが稼働状態である場合、前記割当判定部は、前記低性能ＣＰＵが、前記少なくとも１つの第２の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項１０に記載の半導体集積回路。
【請求項１２】
前記割当判定部は、前記複数の機能ブロックのうち、実行状態に遷移したタスクに使用される機能ブロックを判別して、前記使用される機能ブロックが前記定義情報に定義されているか否かを判定する、請求項１に記載の半導体集積回路。
【請求項１３】
前記定義情報は、さらに、前記複数の機能ブロックの各々の処理時間の閾値を含み、
前記割当判定部は、前記機能ブロックの前記処理時間に関する情報を取得し、
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち高い性能を有する高性能ＣＰＵに対応付けられた少なくとも１つの第１の機能ブロックを含み、
前記少なくとも１つの第１の機能ブロックの前記処理時間が前記閾値を超える場合に、前記割当判定部は、前記高性能ＣＰＵが、前記少なくとも１つの第１の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項１２に記載の半導体集積回路。
【請求項１４】
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち低い性能を有する低性能ＣＰＵに対応付けられた少なくとも１つの第２の機能ブロックをさらに含み、
前記少なくとも１つの第１の機能ブロックが非稼働状態であり、かつ、前記少なくとも１つの第２の機能ブロックが稼働状態である場合、前記割当判定部は、前記低性能ＣＰＵが、前記少なくとも１つの第２の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定する、請求項１３に記載の半導体集積回路。
【請求項１５】
異なる性能を有する複数のＣＰＵと複数の機能ブロックとを備えた半導体集積回路における、ＣＰＵの割り当て方法であって、
前記複数の機能ブロックと前記複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、前記複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定するステップを備える、ＣＰＵの割り当て方法。
【請求項１６】
前記複数の機能ブロックのいずれも非稼働状態である場合には、前記タスクを動作させるためのＣＰＵ負荷に関する情報に従って、前記実効ＣＰＵを判定するステップをさらに備える、請求項１５に記載のＣＰＵの割り当て方法。
【請求項１７】
前記複数の機能ブロックは、
前記定義情報によって前記複数のＣＰＵのうち高い性能を有する高性能ＣＰＵに対応付けられた第１の機能ブロックと、
前記定義情報によって前記複数のＣＰＵのうち低い性能を有する低性能ＣＰＵに対応付けられた第２の機能ブロックとを含み、
前記実効ＣＰＵを判定するステップは、
前記高性能ＣＰＵが、前記第１の機能ブロックにより実現されるタスクおよび前記第２の機能ブロックにより実現されるタスクに割り当てられる前記実効ＣＰＵであると判定するステップを含む、請求項１５に記載のＣＰＵの割り当て方法。
【請求項１８】
異なる性能を有する複数のＣＰＵと複数の機能ブロックとを備えた半導体集積回路によって実行されるプログラムであって、
前記複数の機能ブロックと前記複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、前記複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定するステップを、前記複数のＣＰＵのうちの少なくとも１つに実行させる、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、半導体集積回路、ＣＰＵの割り当て方法、およびプログラムに関し、たとえば複数のＣＰＵを含む半導体集積回路に関する。
【背景技術】
【０００２】
高性能な処理を低消費電力でプロセッサに実行させるために、複数のプロセッサを並列に動作させるマルチプロセッサシステムが提案されている。マルチプロセッサシステムには、対称型マルチプロセッサ（ＳＭＰ：Symmetric Multiple Processor）システムと、非対称型マルチプロセッサ（ＡＳＭＰ：Asymmetric Multiple Processor）システムとがある。ＳＭＰは、同じ性能を有する複数のプロセッサにより構成される。一方、ＡＳＭＰは、異なる性能を有する複数のプロセッサの組み合わせによって構成される。
【０００３】
たとえば、特許文献１はＳＭＰの例を開示する。非特許文献１および特許文献２は、ＡＳＭＰの例を開示する。非特許文献１は、高い性能を有するＣＰＵ（Central Processing Unit)コア(big)と、低消費電力のＣＰＵコア(LITTLE)とを組み合わせた技術（big.LITTLE）を提案する。big.LITTLEは、モバイルなどのバッテリ駆動の端末装置において、高性能と低消費電力との両方を実現するための技術である。big.LITTLEでは、タスクのＣＰＵ負荷に応じて、そのタスクを処理すべきＣＰＵを、bigとLITTLEとの間で動的に割り当てる。これにより、処理すべきタスクごとに最適なＣＰＵが割り当てられる。
【０００４】
特許文献２は、ＣＰＵの種類と個数の組み合わせの複数の形態を定義する定義情報を有するマルチＣＰＵシステムを開示する。定義情報において、全体的なデータ処理性能と電力消費量の最大値が多段階に相違するように、複数の形態が定義される。マルチＣＰＵシステムは、データ処理の環境に応じて、定義情報から選択した形態で特定されるＣＰＵにデータ処理を割り当てる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００６−３３８１８４号公報
【特許文献２】国際公開第２０１４／１８８５６１号
【非特許文献】
【０００６】
【非特許文献１】"big.LITTLE Technology: The Future of Mobile"、［online］、2013年、ARM Limited、［2018年2月23日検索］、インターネット<URL:https://www.arm.com/files/pdf/big_LITTLE_Technology_the_Futue_of_Mobile.pdf>
【発明の概要】
【発明が解決しようとする課題】
【０００７】
たとえば、性能と消費電力との両方の要求に応えるため、非特許文献１に開示されたようなbig.LITTLE構成が必要となる場合がある。一般的なbig.LITTLEでは、ＣＰＵ負荷のみに基づいてbig CPUおよびLITTLE CPUのどちらかが割り当てられる。ＣＰＵおよび関連する機能ブロックを含むシステム全体の負荷が高いにもかかわらず、ＣＰＵ負荷が低いタスクには、低性能ＣＰＵが割り当てられる。ＣＰＵ負荷のみに基づいてタスクを動作させるＣＰＵを決定した場合、要求される処理性能を達成できない。
【０００８】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００９】
一実施形態による半導体集積回路は、異なる性能を有する複数のＣＰＵを備える。半導体集積回路は、複数の機能ブロックと複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定する。
【００１０】
一実施形態によるＣＰＵの割り当て方法は、異なる性能を有する複数のＣＰＵと複数の機能ブロックとを備えた半導体集積回路における、ＣＰＵの割り当て方法である。方法は、複数の機能ブロックと複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定するステップを備える。
【００１１】
一実施形態によるプログラムは、異なる性能を有する複数のＣＰＵと複数の機能ブロックとを備えた半導体集積回路によって実行されるプログラムである。プログラムは、複数の機能ブロックと複数のＣＰＵのうちのいずれかのＣＰＵとの関係を定義した定義情報に従って、複数の機能ブロックのうちの少なくとも１つの機能ブロックにより実現されるタスクに割り当てられる実効ＣＰＵを判定するステップを、複数のＣＰＵのうちの少なくとも１つに実行させる。
【発明の効果】
【００１２】
一実施の形態によれば、性能が異なる複数のＣＰＵで構成されたシステムの性能を維持あるいは向上させることができる。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る半導体集積回路の構成例を示したブロック図である。
【図２】図１に示した半導体集積回路のハードウェアおよびソフトウェアの構成を階層的に例示した図である。
【図３】実施の形態１に係る定義情報のデータ構造を示した図である。
【図４】実施の形態１に係るＣＰＵ割当判定部（ガバナ）の概要を説明した概略図である。
【図５】非対称型マルチプロセッサシステムにおける、ＣＰＵ処理時間のみに基づいたスケジューリングを模式的に示した図である。
【図６】非対称型マルチプロセッサシステムにおいて、LITTLE CPUにタスクが割り当てられることによる性能の低下の例を示した模式図である。
【図７】実施の形態１に係るＣＰＵ割当判定部（ガバナ）の動作フローを説明するフローチャートである。
【図８】実施の形態２に係る半導体集積回路のハードウェアおよびソフトウェアの構成を階層的に例示した図である。
【図９】実施の形態２に係る定義情報のデータ構造を示した図である。
【図１０】実施の形態２に係るＣＰＵ割当判定部（ガバナ）の概要を説明した概略図である。
【図１１】実施の形態２に係るＣＰＵ割当判定部（ガバナ）の動作フローを説明するフローチャートである。
【図１２】実施の形態３に係る半導体集積回路のハードウェアおよびソフトウェアの構成を階層的に例示した図である。
【図１３】実施の形態３に係る定義情報のデータ構造を示した図である。
【図１４】実施の形態３に係るＣＰＵ割当判定部（ガバナ）の動作フローを説明するフローチャートである。
【発明を実施するための形態】
【００１４】
以下、各実施形態について図面を参照して詳しく説明する。なお、同一または相当する部分には同一の参照符号を付して、その説明を繰返さない。
【００１５】
＜実施形態１＞
図１は、実施の形態１に係る半導体集積回路の構成例を示したブロック図である。図１に示すように、半導体集積回路１００は、データ処理性能の異なる複数のＣＰＵを搭載した非対称マルチプロセッサとして構成される。半導体集積回路１００はシングルチップにより構成されてもよく、あるいはマルチチップにより構成されてもよい。一実施形態では、半導体集積回路１００は、車載情報システムを構成する。このシステムは、ＳｏＣ（System-On-a-Chip）の形態で半導体集積回路１００に実現することができる。
【００１６】
半導体集積回路１００は、バス１０２を介して周辺デバイス１０１に接続されている。周辺デバイス１０１は、たとえばディスプレイ１０１Ａ、ＵＳＢデバイス１０１Ｂ、ＳＤカード１０１Ｃ、通信デバイス（たとえばＩ２Ｃ  ＩＣ１０１Ｄ）等を含み得る。
【００１７】
半導体集積回路１００は、データ処理性能が高くかつ消費電力の大きい第１のＣＰＵグループ（big CPU）８と、データ処理性能が低くかつ消費電力の小さい第２のＣＰＵグループ（LITTLE CPU）９とを含む。第１のＣＰＵグループ８は、「ＣＰＵ０」、「ＣＰＵ１」、「ＣＰＵ２」、「ＣＰＵ３」とそれぞれ表記されたＣＰＵ８Ａ，８Ｂ，８Ｃ，８Ｄを含む。ＣＰＵ８Ａ，８Ｂ，８Ｃ，８Ｄの各々は、高性能ＣＰＵである。第２のＣＰＵグループ９は、「ＣＰＵ０」、「ＣＰＵ１」、「ＣＰＵ２」、「ＣＰＵ３」とそれぞれ表記されたＣＰＵ９Ａ，９Ｂ，９Ｃ，９Ｄを含む。ＣＰＵ９Ａ，９Ｂ，９Ｃ，９Ｄの各々は、低性能ＣＰＵである。各ＣＰＵグループに含まれるＣＰＵの数は特に制限されるものではない。
【００１８】
第１のＣＰＵグループ８のＣＰＵ８Ａ〜８Ｄ、および第２のＣＰＵグループ９のＣＰ９Ａ〜９Ｄは、バス１０を介して、メモリ１１、入出力インタフェース回路（Ｉ／Ｏ）１２、および機能ブロック群１３に接続される。さらに、第１のＣＰＵグループ８のＣＰＵ８Ａ〜８Ｄ、および第２のＣＰＵグループ９のＣＰＵ９Ａ〜９Ｄは、内部クロックバス１４を介して、クロックパルス発振器（ＣＰＧ）６に接続される。
【００１９】
入出力インタフェース回路１２は、バス１０２を介して周辺デバイス１０１に接続される。機能ブロック群１３は、各種の機能を実現する複数の機能ブロックを含む。本明細書では、「機能ブロック」とは、回路すなわちハードウェアによって構成される。以下において「デバイス」との名称は、機能ブロックを指す。限定されないが、機能ブロック群１３は、ＶＣＰ(Video Coding Processor）１１３Ａ、ＧＰＵ(Graphic Processing Unit)１１３Ｂ、ＵＳＢコントローラ１１３Ｃ、ＳＤホストコントローラ１１３Ｄ、Ｉ２Ｃコントローラ１１３Ｅ、クロック制御器１１３Ｆ等を含んでもよい。機能ブロック群１３の各機能ブロックは、周辺クロックバス１５を介してクロックパルス発振器６に接続される。
【００２０】
クロックパルス発振器６は、水晶発振器１０５からの源クロックを受けて、内部クロックおよび周辺クロックを生成する。クロックパルス発振器６は、内部クロックバス１４を介して、第１のＣＰＵグループ８および第２のＣＰＵグループ９に内部クロックを供給する。さらに、クロックパルス発振器６は、周辺クロックバス１５を介して、機能ブロック群１３の各機能ブロックに周辺クロックを供給する。
【００２１】
電源１０６は、半導体集積回路１００に電源電圧を供給する。タスクが実行状態に移行するときに、そのタスクを実現するための機能ブロックの電源がオンされる。さらに、機能ブロックには周辺クロックが供給される。これにより機能ブロックが稼働状態となる。クロック制御器１１３Ｆは、各機能ブロックへのクロックの供給を管理する。したがって、クロック制御器１１３Ｆは、各機能ブロックのオン状態およびオフ状態を把握することができる。
【００２２】
第１のＣＰＵグループ８および第２のＣＰＵグループ９はプログラムを実行する。「プログラム」とは、オペレーティングシステム（ＯＳ）およびアプリケーションプログラムである。各ＣＰＵによりオペレーティングシステムと、アプリケーションプログラムとが実行される。
【００２３】
図２は、図１に示した半導体集積回路１００のハードウェアおよびソフトウェアの構成を階層的に例示した図である。図２に示すように、半導体集積回路１００のハードウェアおよびソフトウェアの構成を、ハードウェア層（Hardware）１２１、ソフトウェア層（So１２２およびユーザスペース層（Userspace）１２３の３つの階層によって表すことができる。
【００２４】
上述のように、ハードウェア層１２１は、第１のＣＰＵグループ８、第２のＣＰＵグループ９、および機能ブロック群１３を含む。機能ブロック群１３は、各機能ブロックへのクロックの供給状況（クロックＯＮ／クロックＯＦＦ）を管理するクロック制御器１１３Ｆを含む。
【００２５】
ソフトウェア層１２２は、ＣＰＵ上で動作するオペレーティングシステムである。オペレーティングシステムとして、たとえばLinux（登録商標）を挙げることができる。ソフトウェア層１２２は、スケジューラ（Scheduler）４およびデバイスドライバ（Device Driver）５の各機能を実現する。スケジューラ４は、タスク管理に用いられる機能であり、タスクをＣＰＵに割当てるスケジューリングあるいはディスパッチを行う。デバイスドライバ５は、機能ブロック群１３に含まれる各機能ブロックを制御する。さらにデバイスドライバ５は、各機能ブロックへのクロックの供給に関する情報をクロック制御器１１３Ｆから受けて、その機能ブロックがオンおよびオフのいずれの状況にあるかを検知する。なお、デバイスドライバは機能ブロックごとに存在する。図示を簡単にするため、図２および以下に説明する図では、複数のデバイスドライバを一括してデバイスドライバ５と表す。
【００２６】
ユーザー層１２３は、ＣＰＵ上で動作するアプリケーションプログラムである。ガバナ（Governor）１は、タスクをbig CPU（ＣＰＵ８Ａ〜８Ｄ）およびLittle CPU（ＣＰＵ９Ａ〜９Ｄ）のどちらに割り当てるかを判定する。すなわちガバナ１はＣＰＵ割当判定部として機能する。
【００２７】
デバイステーブル（Device Table）２は、複数の機能ブロック（デバイス）と複数のＣＰＵとの間の対応関係を定義した定義情報を保持する。すなわちデバイステーブル２は、タスクの動作に割り当てられる実効ＣＰＵに関する情報（実効ＣＰＵ情報）を有する。複数の機能ブロックの各々に割り当てられるＣＰＵは、機能ブロックの処理時間に応じて予め定義される。
【００２８】
デバイステーブル２に含まれる定義情報は、たとえばシステムのプロファイリングを実行することによって事前に定義される。デバイステーブル２は、たとえば、不揮発性メモリに記憶される。デバイステーブル２は、プログラムの実行時にＣＰＵによって不揮発性メモリから呼び出されて、ＣＰＵ内部の揮発性メモリに一時的に格納される。
【００２９】
ガバナ１は、実効ＣＰＵ指定部１Ａと実効ＣＰＵ計算部１Ｂとを有する。実効ＣＰＵ指定部１Ａは、デバイスドライバ５から、各機能ブロックの状況（オンまたはオフ）に関する情報を受けるとともにデバイステーブル２を参照して、第１のＣＰＵグループ８および第２のＣＰＵグループ９の中から、実行状態のタスクを割り当てるべきＣＰＵグループを決定する。あるいは、実効ＣＰＵ指定部１Ａは、実効ＣＰＵ計算部１Ｂによって計算されたＣＰＵの処理時間に基づいて、第１のＣＰＵグループ８および第２のＣＰＵグループ９の中から、実行状態のタスクを割り当てるべきＣＰＵグループを決定する。実効ＣＰＵ指定部１Ａは、決定されたＣＰＵグループをスケジューラ４にインプットする。これにより、実行状態のタスクを指定されたＣＰＵグループのＣＰＵにて動作させる。図２には、実行状態のタスクとして「ＴＡＳＫ０」、「ＴＡＳＫ１」とそれぞれ表されるタスク２０，２１を示す。なお、１つのタスクは１つの機能ブロックを制御する。
【００３０】
図２は、複数のタスクがほぼ同時に実行状態にあることを表す。ＣＰＵを割り当てる処理はタスクごとに実行されるので、複数のタスクにそれぞれＣＰＵを割り当てるための複数の処理が並列して実行される。
【００３１】
実効ＣＰＵ計算部１Ｂは、第１のＣＰＵグループ８および第２のＣＰＵグループ９の各ＣＰＵの処理時間あるいは使用率を計算する。たとえば実効ＣＰＵ計算部１Ｂは、スケジューラ４からＣＰＵ負荷に関する情報（CPU Load）を取得して、ＣＰＵの処理時間あるいは使用率を計算する。スケジューラ４は、big CPUまたはLittle CPUの負荷に関する情報を生成して、ガバナ１にその情報を送る。ＣＰＵの負荷に関する情報とは、上述したＣＰＵの処理時間、またはＣＰＵの使用率である。
【００３２】
ガバナ１およびスケジューラ４は、第１のＣＰＵグループ８（big CPU）および第２のＣＰＵグループ９（Little CPU）のどちらで実行されてもよい。これらのＣＰＵの負荷状況に応じて、ガバナ１およびスケジューラ４を、big CPUおよびLittle CPUのどちらで実行するかを決定してもよい。デバイスドライバ５は、タスクに割り当てられるＣＰＵと同じＣＰＵにより実行されてもよい。
【００３３】
図３は、実施の形態１に係る定義情報のデータ構造を示した図である。図３に示すように、定義情報では、複数の機能ブロック（ＶＣＰ，ＵＳＢコントローラ、ＧＰＵ、ＳＤホストコントローラ、Ｉ２Ｃコントローラ等）と、複数のＣＰＵ（big CPUまたはLITTLE CPU）との間の対応関係が定義付けられる。図３の例において、ＶＣＰ、ＵＳＢコントローラ、ＧＰＵの各々の機能ブロックはbig CPUに対応付けられている。これらの機能ブロックは、高性能ＣＰＵを必要とする（高い処理性能を必要とする）機能ブロックである。一方、ＳＤホストコントローラ、Ｉ２ＣコントローラはLITTLE CPUに対応付けられている。これらの機能ブロックは、高性能ＣＰＵを必ずしも必要としない（LITTLE CPUでタスクを動作させてもシステム全体の性能への影響が少ない）ブロックである。
【００３４】
図４は、実施の形態１に係るＣＰＵ割当判定部（ガバナ１）の概要を説明した概略図である。図４を参照して、ＣＰＵ割当判定部（ガバナ１）は、実行状態のタスクごとに、各機能ブロックの状況（オンまたはオフ）に関する情報を取得する。
【００３５】
ガバナ１は、さらにデバイステーブル２を参照する。稼働状態にある機能ブロックがデバイステーブル２に登録された機能ブロックである場合、デバイステーブル２から実効ＣＰＵ情報が得られる。ガバナ１は、実効ＣＰＵ情報に基づいて、実行状態のタスクに割り当てられるＣＰＵ（実効ＣＰＵ）を決定する。図２に示すように、複数のタスクが同時に実行状態に遷移している場合には、ガバナ１は、タスクごとに、そのタスクに割り当てられる実効ＣＰＵがbig CPUおよびLITTLE CPUのいずれであるかを判定する。複数のタスクが同時に実行状態に遷移している場合、複数のタスクでそれぞれ制御されるべき複数の機能ブロックが同時に稼働状態にある。実施形態１では、ガバナ１は各機能ブロックが稼働状態にあるかどうかを確認するものの、稼働状態にある機能ブロックとタスクとの関係は確認しない。稼働状態にある機能ブロックの中に、big CPUに対応付けられた機能ブロックが含まれる場合、ガバナ１は、そのタスクにbig CPUを割り当てる。一方、稼働状態にある機能ブロックの中にbig CPUに対応付けられた機能ブロックが存在しない場合、ガバナ１は、タスクにLITTLE CPUを割り当てる。
【００３６】
複数のタスクが実行状態であるものの、デバイステーブル２に登録された機能ブロックのいずれも非稼働状態である場合（すなわち、デバイステーブル２に登録されていない機能ブロックが稼働する場合）、ＣＰＵ割当判定部（ガバナ１）は、ＣＰＵ負荷に基づいて、実効ＣＰＵを判定する。たとえば、ガバナ１は、ＣＰＵ処理時間に基づいて、実効ＣＰＵを判定する。ＣＰＵ処理時間が長い（ＣＰＵ負荷が大きい）場合には、big CPUが割り当てられ、ＣＰＵ処理時間が短い（ＣＰＵ負荷が小さい）場合には、LITTLE CPUが割り当てられる。ＣＰＵ処理時間に代えてＣＰＵ使用率を実効ＣＰＵの判定に用いることができる。
【００３７】
対称型マルチプロセッサ（ＳＭＰ）システムの場合、システムは複数の同一種類のＣＰＵにより構成されるので、それらＣＰＵの処理性能は、基本的に同じである。したがってＳＭＰでは、ＣＰＵ処理時間のみに基づいて実効ＣＰＵを決定したとしても性能低下の問題は顕著には表れない。一方、本実施の形態では、非対称型マルチプロセッサシステム（ＡＳＭＰ）が適用される。ＡＳＭＰにおいて、ＣＰＵ負荷（たとえばＣＰＵ処理時間）のみに基づいて実効ＣＰＵを決定した場合、動作するユースケースによっては、システムの性能を維持あるいは向上したい場合においても、性能が低下するように制御が実行される可能性がある。
【００３８】
図５は、非対称型マルチプロセッサシステムにおける、ＣＰＵ処理時間のみに基づいたスケジューリングを模式的に示した図である。図５に示すように、たとえば２つのタスク（「タスク１」および「タスク２」）を仮定する。「ＣＰＵ負荷」は、ＣＰＵが処理するタスクの重さを表す。タスク１のほうがタスク２よりもＣＰＵ負荷が大きい。
【００３９】
ＣＰＵ負荷のみに基づいてＣＰＵが割り当てられるようにスケジューリングを実行するものとする。この場合、タスク１にはbig CPUが割り当てられ、タスク２にLITTLE CPUが割り当てられる。しかしながら、ユースケースは、ＣＰＵだけで成立するのではなく、ＣＰＵおよびＣＰＵと関わる機能ブロックを含むシステム全体によって成立する。したがって、システム全体の負荷は、ＣＰＵの負荷およびハードウェア（ＨＷ）の負荷から成り立つ。アプリケーションが必要とする性能（スループット／ローレイテンシ）を実現するためにはＣＰＵ処理時間だけでなく、機能ブロックの負荷（たとえば機能ブロックの処理時間）も考慮して実効ＣＰＵを選択する必要がある。たとえばタスク２をLITTLEで動作させることにより、システムの性能が低下する可能性がある。
【００４０】
図６は、非対称型マルチプロセッサシステムにおいて、LITTLE CPUにタスクが割り当てられることによる性能の低下の例を示した模式図である。図６では、一例として、ＣＰＵ(big またはLITTLE)およびＧＰＵ（HW Device）による描画処理が示される。なお、以下に記載した数値は説明のために用いた例であって、この実施の形態を限定するものではない。
【００４１】
big CPUによりタスクを動作させることによって処理時間が短くなるため、ＧＰＵの処理時間を確保できる。この場合には、全体の処理時間が短くなるので、より高いフレームレートを実現できる。一方、LITTLE CPUによりタスクを動作させることによって、処理時間が長くなる。この場合、処理がある一定の時間内に終わらないことが考えられる。したがって、全体の処理時間が長くなる。すなわちフレームレートが低下する。big CPUとＧＰＵとの組み合わせでは、フレームレートがたとえば６０ｆｐｓ(１フレームの描画時間が１６．６ｍｓ）である。一方、LITTLE CPUとＧＰＵとの組み合わせでは、フレームレートがたとえば５０ｆｐｓ(１フレームの描画時間が２０．０ｍｓ）となる。
【００４２】
この実施の形態では、デバイステーブル２に記憶された定義情報によって、実効ＣＰＵを決定する。定義情報は、機能ブロックと実効ＣＰＵとの対応関係の情報である。この対応関係は、タスクのＣＰＵ処理時間だけでなく機能ブロックの処理時間も考慮した上で設定される。定義情報に従って、タスクに対して割り当てられる実効ＣＰＵを決定する。これにより、性能が異なる複数のＣＰＵで構成されたシステムにおいて、システムの性能の低下を防ぐことができる。
【００４３】
図７は、実施の形態１に係るＣＰＵ割当判定部（ガバナ１）の動作フローを説明するフローチャートである。big CPUまたはLITTLE CPUにより、このフローチャートに示す処理が実行される。図７のフローチャートは、１つのタスクに対するＣＰＵの割り当て処理を示している。以下、複数のタスクが同時に実行状態にある場合について説明する。この場合、図７に示すフローチャートの処理が、タスクの数だけ並列に実行される。
【００４４】
図７を参照して、あるタスクが実行可能状態から実行状態へと移行する。ステップＳ１において、ガバナ１は、各機能ブロックのオンまたはオフの状況に関する情報を取得する。具体的には、クロック制御器１１３Ｆが、各機能ブロックへのクロックの供給状況に関する情報をデバイスドライバ５に送信する。デバイスドライバ５は、その情報に基づいて、各機能ブロックがオンまたはオフのいずれかであることを示す情報を生成する。デバイスドライバ５は、その情報をガバナ１に送信する。すなわち、ガバナ１は、複数の機能ブロックの各々への電源の供給の状況を取得して、各機能ブロックの稼働状態を判定する。より具体的には、ガバナ１は、クロックが供給されている機能ブロックが稼働状態の機能ブロックであると判定する。機能ブロックのクロックを管理することによって、その機能ブロックが稼働状態であるかどうかを容易に判別することができる。したがって、その機能ブロックに電源が供給されているかどうかも容易に判別できる。実施の形態１では、比較的簡易な方法により、機能ブロックが稼働状態であるかどうかを容易に判別することができる。
【００４５】
ステップＳ２において、ガバナ１は、テーブル判定処理を実行する。ガバナ１は、稼働状態にある複数の機能ブロックの各々について、その機能ブロックがデバイステーブル２において指定された機能ブロックであるかどうかを判定する。稼働状態にある複数の機能ブロックの中に、デバイステーブル２において指定された機能ブロックが少なくとも１つ含まれる場合（ステップＳ２において、「指定あり」の場合）、ステップＳ３においてガバナ１は、実効ＣＰＵ判定処理を実行する。
【００４６】
ステップＳ３の判定処理において、稼働状態にある複数の機能ブロックの中に、デバイステーブル２において、big CPUと対応付けられた機能ブロックが少なくとも１つ含まれる場合、ガバナ１は、タスクに割り当てられる実効ＣＰＵがbig CPUであると判定する。ステップＳ４において、ガバナ１は、big CPUを実効ＣＰＵに設定する。ガバナ１は、スケジューラ４に実効ＣＰＵ（big CPU）をインプットする。一方、稼働状態にある複数の機能ブロックの中に、デバイステーブル２に登録された機能ブロックが含まれるものの、その登録された機能ブロックにはbig CPUが対応づけられていない（言い換えるとLITTLE CPUが対応付けられている）場合、ガバナ１は、タスクに割り当てられる実効ＣＰＵがbig CPUであると判定する。ステップＳ５において、ガバナ１は、LITTLE CPUを実効ＣＰＵに設定する。ステップＳ４と同じく、ガバナ１は、スケジューラ４に実効ＣＰＵ(LITTLE CPU）をインプットする。ステップＳ４またはステップＳ５において実効ＣＰＵがスケジューラ４にインプットされると、実効ＣＰＵの割り当て処理は終了する。以後、そのタスクの動作のためのソフトウェア処理が実行される。
【００４７】
複数のタスクが実行状態に遷移している場合、各タスクの実効ＣＰＵを判定するタイミングがほぼ同じになる。稼働状態にある複数の機能ブロックの中に、big CPUと対応付けられた少なくとも１つの機能ブロックが含まれる場合には、全タスクをbig CPUで実行させるように実効ＣＰＵが設定される。図３を参照して、たとえば、ＶＣＰ１１３Ａと、ＧＰＵ１１３Ｂと、ＳＤホストコントローラ１１３Ｄとが稼働状態である場合、それらの機能ブロックにより実現されるすべてのタスクをbig CPUで動作させる。したがって、システムの性能が低下することが防がれる。一方、ステップＳ３において、稼働状態にある複数の機能ブロックがすべてLITTLE CPUに対応付けられている場合、すべての実行状態のタスクをLITTLE CPUで動作させるように実効ＣＰＵが設定される。図３を参照して、たとえば、ＳＤホストコントローラ１１３ＤとＩ２Ｃコントローラ１１３Ｅとが稼働状態である。big CPUに関連付けられたすべての機能ブロックは非稼働状態である。この場合、稼働状態にある複数の機能ブロックにより実現されるすべてのタスクをLITTLE CPUで動作させる。高性能が要求されない処理をLITTLE CPUによって実行することにより、システムの消費電力を低減することができる。
【００４８】
稼働状態にある複数の機能ブロックのいずれもデバイステーブル２において指定されていない場合（ステップＳ２において「指定なし」の場合）、ガバナ１は、タスクを動作させるためのＣＰＵ負荷に関する情報に従って、その機能ブロックによって実現されるタスクに割り当てられる実効ＣＰＵを判定する。「ステップＳ２において「指定なし」の場合」とは、デバイステーブル２に登録された機能ブロックがすべて非稼働状態である場合に相当する。詳細には、ガバナ１は、スケジューラ４によるスケジューリングに基づいてＣＰＵ処理時間を取得する（ステップＳ６）。次にＣＰＵ処理時間が判定される（ステップＳ７）。ステップＳ６，Ｓ７の処理は、実効ＣＰＵ計算部１Ｂによって実行される。
【００４９】
ステップＳ７において、実効ＣＰＵ計算部１Ｂは、ＣＰＵ処理時間が予め設定された基準時間より長いかどうかを判定する。ＣＰＵ処理時間が基準時間よりも長いと判定された場合、処理はステップＳ４に進む。したがって、big CPUが実効ＣＰＵに設定される。一方、ＣＰＵ処理時間が基準時間よりも短いと判定された場合、処理はステップＳ５に進み、LITTLE CPUが実効ＣＰＵに設定される。ＣＰＵの負荷に応じて実効ＣＰＵを設定するので、高い処理性能が要求される場合には、高性能ＣＰＵによりタスクを動作させることによって要求される性能を満たすことができる。一方、高い処理性能が必ずしも要求されない場合には、低性能ＣＰＵによりタスクを動作させることによって、消費電力を低減することができる。
【００５０】
ステップＳ７の処理では、ＣＰＵ処理時間に代えてＣＰＵ使用率が用いられてもよい。この場合、ＣＰＵ使用率が基準の使用率と比較される。ＣＰＵ使用率が基準の使用率を上回る場合、ステップＳ４においてbig CPUが実効ＣＰＵに設定される。ＣＰＵ使用率が基準の使用率を下回る場合、ステップＳ５においてLITTLE CPUが実効ＣＰＵに設定される。
【００５１】
ステップＳ７からステップＳ４またはステップＳ５に処理が進み、実効ＣＰＵがスケジューラ４にインプットされると、実効ＣＰＵの割り当て処理は終了する。以後、そのタスクの動作のためのソフトウェア処理が実行される。
【００５２】
タスクに関連付けられる機能ブロックが不明な場合（たとえば全く新規のタスクが実行状態に移行した場合）には、ガバナ１は、実効ＣＰＵに関する情報を有していない。この場合、ガバナ１は、big CPUを実効ＣＰＵに設定する。これにより、システムの性能を維持することができる。機能ブロックが不明な場合には、機能ブロックが判明した後に、稼働状況に応じてガバナ１が実効ＣＰＵを設定してもよい。
【００５３】
実施の形態１では、デバイステーブル２によって、機能ブロックと実効ＣＰＵとが対応付けられる。ガバナ１はデバイステーブル２を参照して、実効ＣＰＵを判定する。システム（機能ブロックと実効ＣＰＵとの組み合わせ）に高い処理性能が要求される場合には、デバイステーブル２において、その機能ブロックと高性能のＣＰＵとが対応付けられる。ＣＰＵの負荷が低いタスクであっても、デバイステーブル２に従って、そのタスクに高性能のＣＰＵを割り当てることができる。特に、稼働状態にある複数の機能ブロックの中に、big CPUと対応付けられた少なくとも１つの機能ブロックが含まれる場合には、動作中の全タスクをbig CPUで一括して実行させるように実効ＣＰＵが設定される。これにより、システムの処理性能を維持あるいは向上することができる。一方、稼働状態にある複数の機能ブロックがすべてLITTLE CPUに対応付けられている場合、すべての実行状態のタスクをLITTLE CPUで動作させるように実効ＣＰＵが設定される。必ずしも高い性能が要求されない場合には、低性能のＣＰＵがタスクを動作させることによって、システムの消費電力を低減できる。
【００５４】
たとえば近年の車載情報システムにおいては、複数のアプリケーションを同時に動作させながら操作レスポンスを向上させるといった、性能に関する強い要求が求められている。そのため、たとえば車載情報システムにおいては、複数の処理を並列的に処理するためにマルチプロセッサが求められている。一方で、ハードウェア（ダイ）のサイズの制限等の理由によって、複数の高性能ＣＰＵをシステムに搭載することが技術的に難しいことが多い。したがって、車載情報システムにおいては、高性能なＣＰＵだけでなく、チップ面積の点で有利な低性能ＣＰＵも必要とされる。実施の形態１では、定義情報あるいはＣＰＵ処理時間に基づいて、タスクを適切なＣＰＵに割り当てることができる。したがって異なる性能を有する複数のＣＰＵから構成されたシステムにおいて、性能低下を防ぎつつ、並列処理の性能を向上することができる。
【００５５】
また、実施の形態１によれば、デバイステーブル２の設定により、実効ＣＰＵを割り当てることができる。実施の形態１に係る実効ＣＰＵの割り当ては、システムに容易に実装可能であるという点において有利である。
【００５６】
＜実施の形態２＞
実施の形態２に係る半導体集積回路の構成は、図１に示した半導体集積回路１００の構成と基本的に同じであるので以後の説明は繰り返さない。図８は、実施の形態２に係る半導体集積回路１００のハードウェアおよびソフトウェアの構成を階層的に例示した図である。
【００５７】
図８を参照して、実施の形態２では、ガバナ１は、デバイスドライバ５から、機能ブロックの処理時間を取得する。図８では、機能ブロック群１３に含まれる機能ブロック１３１，１３２が例示される。機能ブロック１３１，１３２の種類は特に限定されず、たとえば図１に示した、ＶＣＰ１１３Ａ、ＧＰＵ１１３Ｂ、ＵＳＢコントローラ１１３Ｃ、ＳＤホストコントローラ１１３Ｄ、Ｉ２Ｃコントローラ１１３Ｅ等であってもよい。
【００５８】
デバイスドライバ５は、対応の機能ブロックの処理時間をモニタする。モニタされた処理時間の値は、デバイスドライバ５からガバナ１へと送られる。
【００５９】
図９は、実施の形態２に係る定義情報のデータ構造を示した図である。図９に示すように、実施の形態２では、実効ＣＰＵに加えて処理時間の閾値が、機能ブロックに対応付けられる。図９において、「Ａ」、「Ｂ」、「Ｃ」、「Ｄ」、「Ｅ」は、それぞれ、ＶＣＰ１１３Ａ、ＧＰＵ１１３Ｂ、ＵＳＢコントローラ１１３Ｃ、ＳＤホストコントローラ１１３Ｄ、およびＩ２Ｃコントローラ１１３Ｅの処理時間の閾値を表す。たとえば、事前にユースケースの稼働率をプロファイリングすることによって、各機能ブロックに対して閾値を設定することができる。なお、LITTLE CPUに対応付けられた機能ブロックに割り当てられた処理時間閾値は、デバイステーブル２を構成するために必要とされるものであり、実効ＣＰＵの割り当てに必須のものではない。
【００６０】
図１０は、実施の形態２に係るＣＰＵ割当判定部（ガバナ１）の概要を説明した概略図である。図１０を参照して、実施の形態２では、ＣＰＵ割当判定部（ガバナ１）は、タスクのＣＰＵ処理時間に加えて、機能ブロックの処理時間をモニタする。ガバナ１は、デバイステーブル２を参照して、アプリケーションの実行のための機能ブロックがデバイステーブル２に登録されているかどうかを判定する。ガバナ１は、ＣＰＵ処理時間、および、機能ブロックの処理時間とからタスクを動作させるＣＰＵグループを決定する。
【００６１】
図８に示すように複数のタスクが同時に実行状態に遷移している場合には、ガバナ１は、タスクごとに、そのタスクに割り当てられる実効ＣＰＵがbig CPUおよびLITTLE CPUのいずれであるかを判定する。複数のタスクでそれぞれ制御されるべき複数の機能ブロックが同時に稼働状態にある。実施形態１と同様に、ガバナ１は各機能ブロックが稼働状態にあるかどうかを確認するものの、稼働状態にある機能ブロックとタスクとの関係は確認しない。稼働状態にある機能ブロックの中に、big CPUに対応付けられた機能ブロックが含まれており、かつ、その機能ブロックの処理時間が閾値を超える場合、ガバナ１は、そのタスクにbig CPUを割り当てる。実効ＣＰＵを判定するタイミングが複数のタスクの間でほぼ同じであるので、複数のタスクの全てにbig CPUが割り当てられる。
【００６２】
図１１は、実施の形態２に係るＣＰＵ割当判定部（ガバナ１）の動作フローを説明するフローチャートである。このフローチャートに示す処理は、big CPUまたはLITTLE CPUにより実行される。図７に示すフローチャートと同じく、図１１のフローチャートは、１つのタスクに対するＣＰＵの割り当て処理を示している。したがって、複数のタスクが同時に実行状態にある場合、図１１に示すフローチャートの処理が、タスクの数だけ並列に実行される。図１１を参照して、タスクが実行可能状態から実行状態へと移行する。
【００６３】
次に、図７に示すステップＳ１の処理に替えてステップＳ１１の処理が実行される。ステップＳ１１では、ＣＰＵ割当判定部（ガバナ１）が、稼働状態にある機能ブロックの処理時間をデバイスドライバ５から取得する。
【００６４】
次に、ステップＳ２の処理が実行される。ガバナ１は、デバイステーブル２を参照して、稼働状態にある機能ブロックの中に、デバイステーブル２において指定された機能ブロックが含まれているかどうかを判定する。稼働状態にある機能ブロックの中に、デバイステーブル２において指定された機能ブロックが含まれる場合（ステップＳ２において、「指定あり」の場合）、ステップＳ３Ａにおいて、ガバナ１は、実効ＣＰＵ判定処理を実行する。
【００６５】
稼働状態にある機能ブロックの中に、big CPUと対応付けられた機能ブロックがあり、かつ、その機能ブロックの処理時間が閾値を超える場合には、処理はステップＳ４に進む。この場合、タスクをbig CPUで実行させるように実効ＣＰＵが設定される。
【００６６】
稼働状態にある機能ブロックの中にbig CPUと対応付けられた機能ブロックが含まれるものの、その機能ブロックの処理時間が閾値未満である場合、あるいは、稼働状態にある機能ブロックがいずれもLITTLE CPUと対応付けられている場合には、処理はステップＳ５に進む。ガバナ１は、タスクに対する実効ＣＰＵをLITTLE CPUに設定する。
【００６７】
実施の形態１と同様に、デバイステーブル２に登録された機能ブロックのすべてが稼働してない場合には、処理がステップＳ２，Ｓ６，Ｓ７の順に進む。ステップＳ４またはステップＳ５において、ＣＰＵ処理時間に基づいてタスクを動作させる実効ＣＰＵが決定される。
【００６８】
ＵＳＢを例とすると、ＵＳＢデバイスには、ＵＳＢマウスのような、タスクを動作させるときのＣＰＵの負荷が比較的小さいデバイスがある。一方、ＵＳＢデバイスには、ＵＳＢメモリのように、ＣＰＵの負荷が比較的大きいデバイスもある。実施の形態１によれば、ＵＳＢデバイスにbig CPUが割り当てられるようにデバイステーブル２に定義されているので、ＵＳＢデバイスの種類によらずbig CPUが実効ＣＰＵに設定される。したがって、実施の形態１では、ＵＳＢマウスの操作のように、高性能のＣＰＵを必ずしも必要とされないタスクが複数のタスクの中に含まれていたとしても、デバイステーブル２に定義された情報に基づき、そのタスク（ＵＳＢマウス操作）にbig CPUが割り当てられる。実施の形態１では、複数のタスクが同時に実行状態にあり、その複数のタスクの中にＵＳＢマウスの操作というタスクが含まれる場合には、複数のタスクのすべてにbig CPUが割り当てられる。
【００６９】
実施の形態２において、ガバナ１は、ＣＰＵ処理時間に加えて、機能ブロックの処理時間を把握する。さらに、デバイステーブル２には、機能ブロックと実効ＣＰＵとが対応付けられるだけでなく、その機能ブロックの処理時間の閾値も登録される。実施の形態２によれば、複数の機能ブロックの中に、big CPUと対応付けられた機能ブロックが含まれる場合であっても、その機能ブロックの処理時間が閾値未満であれば、動作中の全タスクがLITTLE CPUに割り当てられる。
【００７０】
たとえばＵＳＢメモリ、ＳＤカードおよびＩ２Ｃ  ＩＣを使用する場合、機能ブロックとしてＵＳＢコントローラ、ＳＤホストコントローラおよびＩ２Ｃコントローラが用いられる。図９に示すように、デバイステーブル２において、ＵＳＢコントローラとbig CPUとが対応付けられ、ＳＤホストコントローラおよびＩ２ＣコントローラがLITTLE CPUに対応付けられる。ＵＳＢコントローラ、ＳＤホストコントローラ、およびＩ２Ｃコントローラによってそれぞれ実現される複数のタスクが同時に実行状態にあり、ＵＳＢコントローラの処理時間が閾値Ｂを上回る場合には、複数のタスクのすべてに対してbig CPUが割り当てられる。次に、ＵＳＢマウス、ＳＤカードおよびＩ２Ｃ  ＩＣを使用する場合を説明する。この場合に使用される機能ブロックは、上述の例において説明した機能ブロックと同じである。しかしＵＳＢコントローラ、ＳＤホストコントローラ、およびＩ２Ｃコントローラによってそれぞれ実現される複数のタスクが同時に実行状態にあり、ＵＳＢコントローラの処理時間が閾値Ｂを下回る場合、複数のタスクのすべてに対してLITTLE CPUが割り当てられる。実施の形態２では、同じ機能ブロックを使用する場合であっても、処理時間および消費電力の観点から、より適切なＣＰＵにタスクを割り当てることができる。したがって異なる性能を有する複数のＣＰＵを備えたシステムにおいて、並列処理性能を向上することができる。
【００７１】
＜実施の形態３＞
実施の形態３に係る半導体集積回路の構成は、図１に示した半導体集積回路１００の構成と基本的に同じであるので以後の説明は繰り返さない。図１２は、実施の形態３に係る半導体集積回路１００のハードウェアおよびソフトウェアの構成を階層的に例示した図である。
【００７２】
図１２を参照して、実施の形態３では、ガバナ１は、使用ブロック確認部１Ｃをさらに含む点において、図８に示した構成と相違する。使用ブロック確認部１Ｃは、実行状態に移行したタスクが使用している機能ブロックを判別する。使用ブロック確認部１Ｃは、実行状態に移行したタスクを実行するためのアプリケーションを特定し、アプリケーションテーブル３を用いて、その特定されたアプリケーションソフトから、使用される機能ブロックを特定してもよい。図１２に示した構成のうち、使用ブロック確認部１Ｃ以外の部分は、図８に示された対応する部分の構成と同じであるので以後の説明は繰り返さない。
【００７３】
アプリケーションテーブル３は、アプリケーションの実行に用いられる機能ブロックが登録されたテーブルである。たとえば、アプリケーションが一度実行されると、そのアプリケーションのために使用された機能ブロックがアプリケーションテーブル３に登録される。そのアプリケーションの２回目以後の実行時には、アプリケーションテーブル３に登録された情報から、使用される機能ブロックを特定することができる。しかしながらアプリケーションと機能ブロックとを紐づけるための手段および方法は、上述の方法に限定されるものではない。
【００７４】
図１３は、実施の形態３に係る定義情報のデータ構造を示した図である。図１３に示したデータ構造は、基本的に図９に示した定義情報のデータ構造と同じである。実施の形態２との区別のため、図１３では、ＶＣＰ１１３Ａ、ＧＰＵ１１３Ｂ、ＵＳＢコントローラ１１３Ｃ、ＳＤホストコントローラ１１３Ｄ、およびＩ２Ｃコントローラ１１３Ｅの処理時間の閾値を、それぞれ「ａ」、「ｂ」、「ｃ」、「ｄ」、「ｅ」と表す。
【００７５】
図１４は、実施の形態３に係るＣＰＵ割当判定部（ガバナ１）の動作フローを説明するフローチャートである。このフローチャートに示す処理は、big CPUまたはLITTLE CPUがプログラムを実行することにより実行される。図７および図１１に示すフローチャートと同じく、図１４のフローチャートは、１つのタスクに対するＣＰＵの割り当て処理を示している。したがって、複数のタスクが同時に実行状態にある場合、図１４に示すフローチャートの処理が、タスクの数だけ並列に実行される。
【００７６】
図１４を参照して、タスクが実行可能状態から実行状態へと移行すると、ステップＳ１０の処理が実行される。ステップＳ１０において、ガバナ１（使用ブロック確認部１Ｃ）は、タスクが処理に使用する機能ブロックを確認する。ステップＳ１１において、ＣＰＵ割当判定部（ガバナ１）がデバイスドライバ５からタスクに関する機能ブロックの処理時間を取得する。次に、ステップＳ２の処理が実行される。ガバナ１は、デバイステーブル２を参照して、実行状態のタスクに関連する機能ブロックが、デバイステーブル２において指定された機能ブロックであるかどうかを判定する。判定の対象となる機能ブロックがデバイステーブル２において指定されている場合（ステップＳ２において、「指定あり」の場合）、ステップＳ３Ｂにおいて、ガバナ１は、実効ＣＰＵ判定処理を実行する。
【００７７】
ステップＳ３Ｂにおいて、ガバナ１は、機能ブロックに対応付けられた実効ＣＰＵおよび閾値の情報を、デバイステーブル２から取得する。big CPUと対応付けられた機能ブロックの処理時間が閾値を超えている場合、ガバナ１は、ステップＳ４において、タスクをbig CPUで実行させるように実効ＣＰＵを設定する。したがって、システムの性能が低下することが防がれる。一方、指定された機能ブロックに対応する実効ＣＰＵがbig CPUであっても機能ブロックの処理時間が閾値未満の場合、あるいは、指定された機能ブロックに対応する実効ＣＰＵとしてLITTLE CPUが登録されている場合、処理はステップＳ５に進む。ガバナ１は、タスクに対する実効ＣＰＵをLITTLE CPUに設定する。これによりシステムの消費電力を低減することができる。
【００７８】
実施の形態３では、実効状態のタスクごとに機能ブロックの処理時間を把握して処理性能を必要とするタスクを特定する。ガバナ１は、そのタスクを動作させる実効ＣＰＵにbig CPUを割り当てる。これによって、システムの性能劣化を避けることが可能となる。一方、処理性能を必要としないタスクを特定して、そのタスクを動作させる実効ＣＰＵにLITTLE CPUを割り当てる。これにより消費電力を低減することができる。同時に実行状態にある複数のタスクを、要求される処理性能の点から、big CPUおよびLITTLE CPUに分担させることができるので、消費電力の増大を抑えつつ並列処理性能を向上させることができる。さらに、実施の形態３では、ガバナ１が、使用される機能ブロックを確認する。これにより、ガバナ１は、その機能ブロックが、デバイステーブル２に登録された機能ブロックであるかどうかを確実に判定することができる。これにより、big CPUおよびLITTLE CPUの中から最適なＣＰＵをタスクの動作のために割り当てることができる。
【００７９】
なお、上記の各実施の形態によれば、半導体集積回路１００は、性能が互いに異なる２つのＣＰＵのグループを有する。しかし本実施の形態は、このように限定されない。半導体集積回路１００は、性能が互いに異なる３以上のＣＰＵのグループを有してもよい。
【００８０】
また、上記各実施の形態に係る半導体集積回路は車載システムに適用されるように限定されるものではない。たとえばサーバシステムにも上記各実施の形態に係る半導体集積回路を適用することが可能である。サーバシステムには高い性能が要求される一方で、発熱を抑制することも求められる。上記各実施の形態によれば、処理性能が要求される一方でＣＰＵ負荷が低いタスクを動作させる際に高性能ＣＰＵを割り当てることができる。したがってサーバシステムの処理性能を維持または向上することができる。一方で、上記の各実施の形態によれば、高い処理性能を必ずしも必要としないタスクを動作させる際に低性能ＣＰＵを割り当てることができる。この場合には、サーバシステムの発熱を抑制することができる。
【００８１】
なお、複数のタスクが１つずつ順番に実行される場合には、稼働中の機能デバイスの数は１つである。したがって、実施の形態１および実施の形態２でも稼働中の機能デバイスを特定することができる。このような場合、実効ＣＰＵの割り当てに関する処理は、実施形態２と実施形態３との間で実質的に同じである。また、実施形態１における実効ＣＰＵの割り当ては、big CPUと対応付けられた機能ブロックの処理時間を閾値と比較する処理が省略される点で、実施形態２および実施形態３における実効ＣＰＵの割り当てと異なっている。
【００８２】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は上記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることは言うまでもない。
【符号の説明】
【００８３】
１  ガバナ、１Ａ  実効ＣＰＵ指定部、１Ｂ  実効ＣＰＵ計算部、１Ｃ  使用ブロック確認部、２  デバイステーブル、３  アプリケーションテーブル、４  スケジューラ、５  デバイスドライバ、６  クロックパルス発振器、８  第１のＣＰＵグループ、９  第２のＣＰＵグループ、１１  メモリ、１２  入出力インタフェース回路、１３  機能ブロック群、１４  内部クロックバス、１５  周辺クロックバス、１００  半導体集積回路、１０１  周辺デバイス、１０１Ａ  ディスプレイ、１０１Ｂ  ＵＳＢデバイス、１０１Ｃ  ＳＤカード、１０２，１１０  バス、１０５  水晶発振器、１０６  電源、１１１Ａ  ＶＣＰ、１１３Ｂ  ＧＰＵ、１１３Ｃ  ＵＳＢコントローラ、１１３Ｄ  ＳＤホストコントローラ、１１３Ｅ  Ｉ２Ｃコントローラ、１１３Ｆ  クロック制御器、１２１  ハードウェア層、１２２  ソフトウェア層、１２３  ユーザー層、１３１，１３２  機能ブロック、Ｓ１〜Ｓ７，Ｓ３Ａ，Ｓ３Ｂ，Ｓ１０，Ｓ１１  ステップ。
【図１】
2019219931.tif 000003
【図２】
2019219931.tif 000004
【図３】
2019219931.tif 000005
【図４】
2019219931.tif 000006
【図５】
2019219931.tif 000007
【図６】
2019219931.tif 000008
【図７】
2019219931.tif 000009
【図８】
2019219931.tif 000010
【図９】
2019219931.tif 000011
【図１０】
2019219931.tif 000012
【図１１】
2019219931.tif 000013
【図１２】
2019219931.tif 000014
【図１３】
2019219931.tif 000015
【図１４】
2019219931.tif 000016