(57)【要約】      （修正有）【課題】マルチプロセッサシステムにおいて、複数の並列化可能なタスクをプロセッサユニット（ＰＵ）に効率的に割り当て、また、性能・電力面でのシステム全体の実行効率を上げるために、全体の実行時間に影響を与えるタスクを高速に実行し、電力効率の観点から、全体の実行時間に影響を与えないタスクは低速に実行する。【解決手段】入力プログラムを複数のタスク（ＭＴ０〜ＭＴ３）に分割し、複数のＰＵ（ＰＵ０，ＰＵ１）に割り当てるコンパイラにおいて、全体実行時間を小さくするようタスク割当を行うプロセスと、全体性能に対し影響を与えるタスクを実行するプロセッサの周波数を一時的に向上させる電力制御プロセスと、全体性能に対し影響を与えないタスクを実行するプロセッサの周波数を一時的に低減させる電力制御プロセスを含む。【効果】マルチプロセッサシステムの性能を最大限活用しつつ、低電力にて効率よく処理することが可能となる。【選択図】図１０
2009146243.tif 000002
【特許請求の範囲】
【請求項１】
同種又は異種の複数のプロセッサユニットを具備し、前記複数のプロセッサユニット内に形成されるＭＯＳトランジスタの半導体基板の電圧及び前記複数のプロセッサ供給する動作周波数を夫々独立して制御可能なマルチプロセッサシステムにより実行される実行コードを入力プログラムから生成するコンパイラにおいて、
前記入力プログラムを分割することにより複数のマクロタスクを生成する第１ステップと、
前記複数のマクロタスク毎に前記複数のプロセッサユニットのうちいずれのプロセッサユニットに割り当てるかを決定する第２ステップと、
前記複数のプロセッサユニット毎に、前記第２ステップにおいて割り当てられたマクロタスクの実行時間の余裕度を算出する第３ステップと、
前記第３ステップにおいて算出された余裕度に基づいて前記複数のプロセッサユニットの夫々の半導体基板に供給する電圧及び前記複数のプロセッサユニットの夫々に供給する動作クロック周波数を変更するためのコードを付加する第４ステップとを具備することを特徴とするコンパイラ。
【請求項２】
請求項１において、
前記複数のマクロタスク間のデータ依存性を検出する第５ステップを更に具備し、
前記第４ステップは、前記第５ステップにより検出されたデータ依存性を考慮したとしても、前記複数のマクロタスクを前記複数のプロセッサユニットへの割り当てた際に算出される前記入力プログラム全体の実行時間より、前記半導体基板に順バイアスとなる電圧を印加し、動作クロック周波数を向上させた場合の前記入力プログラム全体の実行時間が短くなる場合に、前記複数のプロセッサユニットのうちマクロタスクを実行するプロセッサユニットに対し、前記半導体基板に順バイアスを印加し、動作クロック周波数を向上させるコードを付加するステップを有することを特徴とするコンパイラ。
【請求項３】
請求項２において、
前記第４ステップは、前記第５ステップにより検出されたデータ依存性を考慮すると、前記複数のマクロタスクを前記複数のプロセッサユニットへの割り当てた際に算出される前記入力プログラム全体の実行時間と、前記半導体基板に逆バイアスとなる電圧を印加し、動作クロック周波数を低下させたとしても前記入力プログラム全体の実行時間が変わらない場合に、前記複数のプロセッサユニットのうちマクロタスクを実行するプロセッサユニットに対し、前記半導体基板に逆バイアスを印加し、動作クロック周波数を低下させるコードを付加するステップを有することを特徴とするコンパイラ。
【請求項４】
請求項１において、
前記複数のプロセッサユニットの夫々は、半導体基板上に、埋め込み酸化膜を介して形成される第１半導体層と、前記第１半導体層に形成され、前記第１半導体層の厚さを有するソース領域およびドレイン領域と、前記ソース領域およびドレイン領域に挟まれるように形成されたチャネル領域と、該チャネル領域の第１主面側に形成された第１ゲートと、前記埋め込み酸化膜の下面に接して形成された導電層からなる第２ゲートと、前記第１半導体層の周囲を囲むように前記半導体基板に形成された絶縁分離層とを有する完全空乏型ＳＯＩ・ＭＯＳトランジスタが形成される第１及び第２回路形成領域とを有し、
前記第１回路形成領域は、前記第１ゲートが前記第２ゲートに電気的に接続された第１のＭＯＳトランジスタで構成された第１の回路が配置され、
前記第２回路形成領域は、前記第１ゲートおよび前記第２ゲートのそれぞれが独立に制御される第２のＭＯＳトランジスタで構成された第２の回路が配置され、
前記半導体基板に印加される電圧は、前記第１のＭＯＳトランジスタにより供給されることを特徴とするコンパイラ。
【請求項５】
同種又は異種の複数のプロセッサユニットと、不揮発性記憶媒体に記憶されたスケジューラプログラムに従って前記複数のプロセッサユニットの制御を行うコントロールプロセッサとを有するプロセッサシステムにおいて、
前記複数のプロセッサユニットの夫々は、半導体基板上に、埋め込み酸化膜を介して形成される第１半導体層と、前記第１半導体層に形成され、前記第１半導体層の厚さを有するソース領域およびドレイン領域と、前記ソース領域およびドレイン領域に挟まれるように形成されたチャネル領域と、該チャネル領域の第１主面側に形成された第１ゲートと、前記埋め込み酸化膜の下面に接して形成された導電層からなる第２ゲートと、前記第１半導体層の周囲を囲むように前記半導体基板に形成された絶縁分離層とを有する完全空乏型ＳＯＩ・ＭＯＳトランジスタが形成される第１及び第２回路形成領域とを有し、
前記第１回路形成領域は、前記第１ゲートが前記第２ゲートに電気的に接続された第１のＭＯＳトランジスタで構成された第１回路が配置され、
前記第２回路形成領域は、前記第１ゲートおよび前記第２ゲートのそれぞれが独立に制御される第２のＭＯＳトランジスタで構成された第２回路が配置され、
前記半導体基板に印加される電圧は、前記第１ＭＯＳトランジスタにより供給され、
前記複数のプロセッサユニットは、前記不揮発性記憶媒体に記憶された実行コードを実行し、
前記実行コードは、複数のマクロタスクに分割され、
前記スケジューラプログラムは、前記複数のマクロタスクの夫々が前記複数のプロセッサユニットのうち何れのプロセッサユニットにより実行されるか示す第１情報と、前記複数のマクロタスク毎に前記複数のプロセッサユニットの夫々の前記半導体基板に印加される電圧に関する第２情報が含まれ、
前記コントロールプロセッサは、前記第２情報に基づいて前記第１ＭＯＳトランジスタが供給する電圧を前記第１回路に指示することを特徴とするプロセッサシステム。
【請求項６】
請求項５において、
前記スケジュールプログラムは、前記実行コードが入力プログラムに従って生成される際に、付加されることを特徴とするプロセッサシステム。
【請求項７】
請求項５において、
前記コントロールプロセッサは、前記複数のプロセッサユニットが前記複数のマクロタスクのうち割り当てられたマクロタスクの実行が終了した際に、前記コントロールプロセッサに前記割り当てられたマクロタスクの実行が終了したことを示す終了情報を通知することを特徴とするプロセッサシステム。
【請求項８】
請求項７において、
前記コントロールプロセッサは、前記終了情報を受けた場合に、前記スケジュールプログラムに従って、前記終了情報を通知したプロセッサユニットが次に実行すべきマクロタスクの情報と、前記半導体基板に印加すべき電圧の情報を指示することを特徴とするプロセッサシステム。
【請求項９】
同種又は異種の複数のプロセッサユニットを有するプロセッサシステムにおいて、
前記複数のプロセッサユニットの夫々は、半導体基板上に、埋め込み酸化膜を介して形成される第１半導体層と、前記第１半導体層に形成され、前記第１半導体層の厚さを有するソース領域およびドレイン領域と、前記ソース領域およびドレイン領域に挟まれるように形成されたチャネル領域と、該チャネル領域の第１主面側に形成された第１ゲートと、前記埋め込み酸化膜の下面に接して形成された導電層からなる第２ゲートと、前記第１半導体層の周囲を囲むように前記半導体基板に形成された絶縁分離層とを有する完全空乏型ＳＯＩ・ＭＯＳトランジスタが形成される第１及び第２回路形成領域と、制御レジスタを有し、
前記第１回路形成領域は、前記第１ゲートが前記第２ゲートに電気的に接続された第１のＭＯＳトランジスタで構成された第１回路が配置され、
前記第２回路形成領域は、前記第１ゲートおよび前記第２ゲートのそれぞれが独立に制御される第２のＭＯＳトランジスタで構成された第２回路が配置され、
前記半導体基板に印加される電圧は、前記第１ＭＯＳトランジスタにより供給され、
前記複数のプロセッサユニットは、前記不揮発性記憶媒体に記憶された実行コードを実行し、
前記実行コードは、複数のマクロタスクに分割されると共に夫々のマクロタスクの前後に付加されたタスク間同期プログラム及び電力モードプログラムを含み、
前記複数のプロセッサユニットの夫々は、前記複数のマクロタスクのうち割り当てられた一つのマクロタスクを実行し、前記割り当てられた一つのマクロタスクの実行が終了した際に、前記タスク間同期プログラムに従って実行すべき次のマクロタスクを判断すると共に前記半導体基板に供給すべき電圧を前記制御レジスタに登録することを特徴とするプロセッサシステム。
【請求項１０】
請求項９において、
前記複数のマクロタスクは、第１マクロタスク及び前記第１マクロタスクの実行結果を用いる第２マクロタスクを含み、
前記第１マクロタスクが前記複数のプロセッサユニットのうち第１プロセッサユニットに割り当れられ、前記第２マクロタスクは前記複数のプロセッサユニットのうち第２プロセッサユニットに割り当てられている場合に、前記第１プロセッサユニットは、前記第１マクロタスクの実行が終了した場合に前記第２プロセッサユニットに通知し、前記第２プロセッサユニットは、前記通知を受けたあとに前記第２マクロタスクを実行することを特徴とするプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイラ及びプロセッサシステムに関するものであり、特に、ＦＤ−ＳＯＩにより製造されるマルチプロセッサシステムにおける、入力プログラムを当該プロセッサシステム上で実行可能なオブジェクトコードに変換する際に、当該マルチプロセッサシステムが持つ複数プロセッサユニットへタスクをスケジューリングすると同時に、基板バイアス制御を組み合わせたプロセッサ周波数の最適調整による電力制御を適用することにより、電力を抑えつつ全体の実行時間を高速化する、電力性能最適化コンパイラ及び、その電力性能最適化コンパイラにより生成された実行コードを実行するマルチプロセッサシステムに関する。
【背景技術】
【０００２】
半導体製造技術の進歩による素子の微細化により、膨大な数のトランジスタを集積することが可能となっている。それと同時にプロセッサの高周波数化も進むが、動作時電力の増加、またリーク電流に起因する待機時電力の増加により、従来のプロセッサが歩んできた動作周波数の向上と論理方式の改善により達成してきた性能向上に限界が見え始めている。一方で、自動車のナビゲーションシステム、携帯電話、デジタルテレビなど、画像、音声、データベース情報など多様なデータを同時に扱うデジタル民生機器が登場し、特性の異なる膨大なデータを短時間にかつ低電力に処理することが強く求められている。そこで現在、性能改善と低電力化を実現する手段として、従来の単一チップで提供されたプロセッサ（ＣＰＵ）を複数個単一チップ上に集積し、処理を並列で行うことで、動作周波数を向上させなくとも、高い演算性能を得ることが可能な、マルチプロセッサシステムが有望となっている。将来、微細化がさらに進むことで、ＣＰＵをオンチップで１００個〜１０００個積載することも可能となると予測される。
【０００３】
また、特に組み込み機器向けシステムにおいては、無線や画像、音声など定型的なデジタル信号処理を扱うことも多く、性能改善と低電力化を両立する手段として、同一の汎用プロセッサ、つまり同一の命令セットで構成及び演算性能が同一な汎用プロセッサを複数個集積したホモジニアスなマルチプロセッサシステム以外に、複数個のＣＰＵに加えある特定の処理を非常に効率良く（高速にかつ低電力に）処理可能な専用プロセッサ、アクセラレータ、といった命令セットが異種である、様々な種類のＰＵを複数個単一チップで搭載し、特に一定のアプリケーションを対象とし、高い演算効率を目指したヘテロジニアスマルチプロセッサも現在提案されている。
【０００４】
以上のような複数個の演算ユニット（ＰＵ）を搭載するマルチプロセッサシステムでは、その性能を引き出すために複数個のＰＵを同時に効率よく動作させるよう、プログラムを作成する必要が生じる。通常の入力プログラムは処理が時系列で逐次的に記述されているため、複数のＰＵを搭載するにも関わらず、当該複数ＰＵに比例して期待される演算性能を得ることができない。この問題点を解決するための一つの方法として、プログラム開発者が自らプログラムの並列性を考慮し、当該プログラムを実行させるマルチプロセッサシステムの構成に基づいて、当該プログラムを複数のＰＵで実行させるためのプログラム分割を行ったり、並列化ライブラリを利用したＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）を付加したりする必要がある。しかしながら、本手法はＰＵが数個のシステムにおいては有効であるが、将来の数十〜数千といった数のＰＵが積載されたシステムにおいては、また特にＰＵが異種で構成される場合は、開発時間、実効性能の点で実用的ではない。特許文献１では、これを解決する一手法として、並列化コンパイラによるプログラムのタスク分割とタスク並列解析、コンパイル時におけるＰＵへの並列タスクケジューリング、並びに並列スケジューリング結果に基づく静的なＰＵの電力制御手法を開示している。
【０００５】
また、以上のプロセッサを実現するためのデバイス技術として、これまでＣＭＯＳ（Ｃｏｍｐｌｅｍｅｎｔａｒｙ  Ｍｅｔａｌ−Ｏｘｉｄｅ−Ｓｅｍｉｃｏｎｄｕｃｔｏｒ）技術が主流であり、上記で述べた通り、トランジスタのスケーリングに併せてトランジスタ数の増加と、スイッチング速度の高速化による周波数向上で、プロセッサの性能向上が実現されてきた。しかしながら、上述の理由により、これ以上の微細化は、リーク電流等の様々な問題により、従来手法での性能向上が見出せなくなっている。そこで、リーク電力を抑えつつ高速化を実現するデバイス技術として、絶縁基板上にシリコン結晶を形成し、当該シリコン上にトランジスタを形成する、ＳＯＩ（Ｓｉｌｉｃｏｎ  ｏｎ  Ｉｎｓｕｌａｔｏｒ）が有望となっている。ＳＯＩ構造を取ることにより、基板容量を抑えられスイッチング速度が向上でき、また従来のシリコン基板では難しかった基板電位の操作（基板バイアス制御）が容易に実現でき、高速化と低電力化を同時に実現される。ＳＯＩには、絶縁膜上のシリコン層の膜厚が薄い完全空乏型トランジスタ（ＦＤ−ＳＯＩ）と、シリコン層の膜厚が厚い部分空乏型トランジスタ（ＰＤ−ＳＯＩ）とに分類される。
【０００６】
特に従来のＳＯＩ構造をとらない、バルクＣＭＯＳでは、基板容量が大きく基板電圧の印加には駆動能力の大きな電圧生成回路が必要、基板電位の制御時間が大きい、トランジスタ素子が分離されていないためラッチアップ現象による過電流が流れてしまう、基板ノイズ発生の要因となる、といった問題が生じていたため、基板電位を正の方向に印加する、短期間で電位を切り替える、といったことは現実的ではなかった。ＳＯＩ技術を利用することにより、さまざまな粒度における高速な基板バイアス制御が実現される。
【０００７】
特許文献２では、薄膜埋め込み酸化膜層を持つＦＤ−ＳＯＩを使用し、薄膜埋め込み酸化膜層の下層半導体領域をバックゲートとし、論理回路ブロックにおいてブロック中の負荷の軽い論理回路にはバックゲートの電圧をブロック活性化に合わせてブロック外から制御することで、回路の動作特性に応じて使い分け、幅広い温度範囲にて高速かつ低電力なＬＳＩを実現する手法を開示している。
【０００８】
【特許文献１】特開２００６−２９３７６８号公報
【特許文献２】特開２００７−４２７３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかしながら、特許文献１では、ＣＭＯＳ技術により形成されたＬＳＩをその対象としており、特許文献２に記載されたようなＦＤ−ＳＯＩ技術については考慮されていない。即ち、前記マルチプロセッサシステムにおいて複数のタスクを実行する際に、ＦＤ−ＳＯＩの特徴を利用したバックゲート電圧制御をどのように行うかについては触れられていない。
【００１０】
そこで本発明の目的は、ＦＤ−ＳＯＩで製造されるマルチプロセッサシステムにおいて、ユーザが作成した入力プログラムを複数のタスクに分割し、前記ＰＵに割り当てるスケジューラを含むコンパイラにおいて、複数個のＰＵにタスク割当を行い、プログラムの実行時間を小さくするようタスク実行順を決定するプロセスと、スケジューリング時に実行タスク間依存により性能に対し影響を与えるタスクを実行する際に実行するプロセッサの周波数を一時的に向上させる電力制御プロセスと、スケジューリング時に実行タスク間依存により性能に対し影響を与えないタスクを実行する際に実行するプロセッサの周波数を一時的に低減させる電力制御プロセス、を行うコンパイラ及びそのコンパイラを用いて生成された実行コードを実行するプロセッサシステムを提供することである。
【課題を解決するための手段】
【００１１】
上述の課題を解決するために本願において開示される発明のうち代表的なものの概要を簡単に説明すれば以下の通りである。
【００１２】
同種又は異種の複数のプロセッサユニットを具備し、前記複数のプロセッサユニット内に形成されるＭＯＳトランジスタの半導体基板を制御可能なマルチプロセッサシステムにより実行される実行コードを入力プログラムから生成するコンパイラにおいて、前記入力プログラムを分割することにより複数のマクロタスクを生成する第１ステップと、前記複数のマクロタスク毎に前記複数のプロセッサユニットのうちいずれのプロセッサユニットに割り当てるかを決定する第２ステップと、前記複数のプロセッサユニット毎に、前記第２ステップにおいて割り当てられたマクロタスクの実行時間の余裕度を算出する第３ステップと、前記第３ステップにおいて算出された余裕度に基づいて前記複数のプロセッサユニットの夫々の半導体基板に供給する電圧及び前記複数のプロセッサユニットに供給する動作クロック周波数を変更するためのコードを付加する第４ステップとを具備する。
【００１３】
また、プロセッサシステムの観点から見ると、同種又は異種の複数のプロセッサユニットと、不揮発性記憶媒体に記憶されたスケジューラプログラムに従って前記複数のプロセッサユニットの制御を行うコントロールプロセッサとを有するプロセッサシステムにおいて、前記複数のプロセッサユニットの夫々は、半導体基板上に、埋め込み酸化膜を介して形成される第１半導体層と、前記第１半導体層に形成され、前記第１半導体層の厚さを有するソース領域およびドレイン領域と、前記ソース領域およびドレイン領域に挟まれるように形成されたチャネル領域と、該チャネル領域の第１主面側に形成された第１ゲートと、前記埋め込み酸化膜の下面に接して形成された導電層からなる第２ゲートと、前記第１半導体層の周囲を囲むように前記半導体基板に形成された絶縁分離層とを有する完全空乏型ＳＯＩ・ＭＯＳトランジスタが形成される第１及び第２回路形成領域とを有し、前記第１回路形成領域は、前記第１ゲートが前記第２ゲートに電気的に接続された第１のＭＯＳトランジスタで構成された第１回路が配置され、前記第２回路形成領域は、前記第１ゲートおよび前記第２ゲートのそれぞれが独立に制御される第２のＭＯＳトランジスタで構成された第２回路が配置され、前記半導体基板に印加される電圧は、前記第１ＭＯＳトランジスタにより供給され、前記複数のプロセッサユニットは、前記不揮発性記憶媒体に記憶された実行コードを実行し、前記実行コードは、複数のマクロタスクに分割され、前記スケジューラプログラムは、前記複数のマクロタスクの夫々が前記複数のプロセッサユニットのうち何れのプロセッサユニットにより実行されるか示す第１情報と、前記複数のマクロタスク毎に前記複数のプロセッサユニットの夫々の前記半導体基板に印加される電圧に関する第２情報が含まれ、前記コントロールプロセッサは、前記第２情報に基づいて前記第１ＭＯＳトランジスタが供給する電圧を前記第１回路に指示する。
【００１４】
また、別のプロセッサシステムの構成においては、同種又は異種の複数のプロセッサユニットを有するプロセッサシステムにおいて、前記複数のプロセッサユニットの夫々は、半導体基板上に、埋め込み酸化膜を介して形成される第１半導体層と、前記第１半導体層に形成され、前記第１半導体層の厚さを有するソース領域およびドレイン領域と、前記ソース領域およびドレイン領域に挟まれるように形成されたチャネル領域と、該チャネル領域の第１主面側に形成された第１ゲートと、前記埋め込み酸化膜の下面に接して形成された導電層からなる第２ゲートと、前記第１半導体層の周囲を囲むように前記半導体基板に形成された絶縁分離層とを有する完全空乏型ＳＯＩ・ＭＯＳトランジスタが形成される第１及び第２回路形成領域と、制御レジスタを有し、前記第１回路形成領域は、前記第１ゲートが前記第２ゲートに電気的に接続された第１のＭＯＳトランジスタで構成された第１回路が配置され、前記第２回路形成領域は、前記第１ゲートおよび前記第２ゲートのそれぞれが独立に制御される第２のＭＯＳトランジスタで構成された第２回路が配置され、前記半導体基板に印加される電圧は、前記第１ＭＯＳトランジスタにより供給され、前記複数のプロセッサユニットは、前記不揮発性記憶媒体に記憶された実行コードを実行し、前記実行コードは、複数のマクロタスクに分割されると共に夫々のマクロタスクの前後に付加されたタスク間同期プログラム及び電力モードプログラムを含み、前記複数のプロセッサユニットの夫々は、前記複数のマクロタスクのうち割り当てられた一つのマクロタスクを実行し、前記割り当てられた一つのマクロタスクの実行が終了した際に、前記タスク間同期プログラムに従って実行すべき次のマクロタスクを判断すると共に前記半導体基板に供給すべき電圧を前記制御レジスタに登録する。
【発明の効果】
【００１５】
本発明により、ＦＤ−ＳＯＩで構成され複数のＰＵを集積するマルチプロセッサシステムにおいて、当該ＰＵを効率よく動作させるタスク分割されたプログラムの配置による実行効率の向上、タスクの実行状態に合わせたきめ細かな電力制御が実現される。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の実施例を用いて、詳細に説明する。
＜実施例の全体構成＞
本発明の実施例として、まず本発明で提供するスケジューラを実行するマルチプロセッサシステム（ＣＭＰ）の構成を説明する。図１に、ＣＭＰの実施構成の一例を示す。ＣＭＰでは、複数のプロセッサユニット（ＰＵ）１０１、共有メモリ（ＣＳＭ）１０４で構成される。各ＰＵは、ＰＵ間並びにＣＳＭを相互に接続する、インタコネクション・ネットワーク（ＢＵＳ）１０５に接続される。また、ＢＵＳにはさらに、タスクスケジューリング、リソース管理制御を行うコントロールプロセッサ（ＣＴＬＰ）１０３が接続される。なお、各ＰＵは、ＣＳＭアクセス時間隠蔽のためのキャッシュメモリやローカルメモリを搭載する。また、各ＰＵには、当該ＰＵのプロセッサコア、メモリ等の各機能部位に対し、基板バイアス電源を供給する、電圧・基板バイアス生成回路（ＢＧＣＴＬ）１０２が接続される。ＢＧＣＴＬは、ＣＴＬＰにより制御（１１０）され、予め定められた基板バイアス電圧が機能部位別にＰＵ内のトランジスタ基板に印加される（１０８，１０９）。また、各ＰＵに対する基板バイアス電圧の状態に応じた周波数のクロックを共有するクロック生成回路も、各ＰＵは内蔵する。本図では示していないが、周波数に応じ電源電圧を切り替えたり、不使用時に電源遮断を行ったり、といった電源制御を行う電力制御回路を各ＰＵが内蔵する構成もある。なお、本図ではＰＵはすべて同一、例えば汎用プロセッサを複数個接続したホモジニアスＣＭＰ構成となっているが、例えば一部のＰＵが信号処理プロセッサ（ＤＳＰ）や動的再構成可能プロセッサ（ＤＲＰ）といったヘテロジニアスＣＭＰ構成となることもできる。つまり、ＰＵの種類と数は、本実施例に示した限りではなく、様々な構成を取り得る。図２は、コントローラプロセッサ（ＣＴＬＰ）を持たず、各ＰＵが持つ制御レジスタ（ＣＲ）１１１でＢＧＣＴＬを制御する構成である。ＣＲはグローバルなメモリ空間にアドレスマッピングし、タスク割り当てと電源管理を行うスケジューラプログラムを実行するＰＵが、対象となるＰＵのＣＲをアクセスして設定することにより、当該ＣＲの値に従ってＢＧＣＴＬは対象となるＰＵ内の機能ブロックに対し基板バイアス電圧を印加する。
【００１７】
図３には同図にはプロセッサユニット１０１の内部回路の一部と共に基板バイアス制御回路１０２が例示される。ＤＣＬは、基板バイアス制御の対象となる回路として例示された論理回路ブロックである。ＰＦＣは、負荷の大きな出力端子ＢＯを駆動する回路として例示されたドライバ回路である。ＤＣＬとＰＦＣは、図１及び図２中のＰＵに当たる。図３に示されるＭＯＳトランジスタは、特に制限されないが、全てＦＤ−ＳＯＩ・ＭＯＳトランジスタとされる。ＤＣＬは、ここでは例としてインバータ回路２段としており、このブロックへの入力がＢＩであり、出力がＣＯである。電源電圧はＶＣＣ、接地電圧はＶＣＳである。ＤＣＬ内のｐチャンネル型ＦＤ−ＳＯＩ・ＭＯＳトランジスタに対する基板バイアス電圧はＢＧＰであり、同ＤＣＬ内のｎチャンネル型ＦＤ−ＳＯＩ・ＭＯＳトランジスタに対する基板バイアス電圧はＢＧＮである。ＢＧＣＬＴ１０２は、入力信号ＣＬに従って電位の基板バイアス電圧ＢＧＰ，ＢＧＮを出力する。ＢＧＣＬＴ、ＰＦＣを構成するＦＤ−ＳＯＩ・ＭＯＳトランジスタの基板バイアス電圧は、夫々のゲートに接続されている。本例では、ＢＧＳＴＬ、ＤＣＬ及びＰＦＣの電源電圧ＶＣＣ、接地電圧ＶＣＳをすべてで共通としているが、それぞれの回路毎に電圧値が異なるよう独立に電源配線を準備し、接続する構成としてもよい。なおＶＣＳは基板バイアス制御のモードにより負電圧も取りえる。また，ＢＧＣＴＬを用いず、チップ外に電源回路を別途設けて変化させても良い。
【００１８】
本実施例によれば、ＤＣＬの中のｎＭＯＳ及びｐＭＯＳのしきい値電圧の状態を変えることができるため、ＤＣＬの動作状態に応じて、ＤＣＬの中のしきい値電圧を選択することができる。これによって、高速化が必要な時には、しきい値電圧を絶対値で低く設定し、低速で良い場合や待機状態ではしきい値電圧を高く設定しリーク電流を低く抑えることができる。このようにして高速化と低電力化を達成することができる。入力信号ＣＬは、図１のＣＴＬＰ１０３から出力される基板バイアス制御信号１１０の対応する１ビットの信号、あるいは図２のＣＲ１１１の設定値に従って出力される基板バイアス制御信号１１０とされる。タスクの処理に応じて信号ＣＬのレベルが制御されることで、基板バイアス電圧を変化させることができる。その結果、制御対象であるＤＣＬのトランジスタのしきい値電圧を、ＤＣＬが低速動作若しくは標準速度で動作するとき基板電圧を負の方向に印加することにより高くすることでリーク電流を減少させ、また高速動作するときは基板バイアス電圧を正の方向に印加することにより低くすることで、大きな駆動電流によって高速スイッチング動作が可能になる。尚、ゲート電極が自らの背面ゲート電極に接続する形態はＦＤ−ＳＩＯ・ＭＯＳトランジスタ特有の接続形態であり、オフ状態において閾値電圧を大きくして電流リークを抑制し、オン状態において閾値電圧を小さくスイッチング動作を高速化する、自律的基板バイアス制御形態とされる。これは、ＦＤ−ＳＯＩ・ＭＯＳトランジスタが半導体基板へのリークが抑制されたＭＯＳデバイス構造を持っているためである。
【００１９】
＜基板バイアス電圧変化の効果＞
基板バイアス電圧印加に対する、トランジスタの駆動電流特性を見ることで、その効果を説明する。図４の（Ａ）にはｎチャンネル型のＦＤ−ＳＯＩ・ＭＯＳトランジスタの縦断面構造が例示される。このＦＤ−ＳＯＩ・ＭＯＳトランジスタは、端子ＳＢを持つｐ型基板であるｐ−ｓｕｂ上に、トレンチアイソレーション（溝堀型絶縁）領域ＳＴＩ、および埋め込み酸化膜ＵＴＢにより隣接トランジスタ、基板から電気的に絶縁された領域に形成される。ＵＴＢの厚さは例えば１０〜２０ｎｍである。Ｓ、Ｇ、Ｄはソース端子、ゲート端子、ドレイン端子であり、それぞれシリサイドＳＣを介してｎ＋領域（ソース）、ｐ領域（チャネル形成領域）、ｎ＋領域（ドレイン）に接続される。個の厚みは例えば２０ｎｍ程度である。ゲートのＳＣとｐ領域の間には酸化膜ＯＸがあり、いわゆるＭＯＳ構造となっている。ＵＴＢの下には端子ＢＧと接続されたｐ領域、および端子ＴＷを持ちｐ領域と基板とを電気的に分離するためのｎ領域がある。本構成によれば、ＢＧはＵＴＢを絶縁膜としてｐ領域を介した形で接続されており、ＵＴＢを第２のゲート酸化膜と見立てると、ＭＯＳ構造の背面に第２のゲートが存在する構造をとることが分かる。
【００２０】
上記ＳＯＩ構造のＭＯＳトランジスタはウェル分離を行なうバルク構造に比べて、トランジスタ個別の閾値電圧制御が容易である。また、ＳＯＩ・ＭＯＳトランジスタはその埋め込み酸化膜上のチャネル形成領域及びソース・ドレインとなるシリコン層ｎ＋、Ｐの膜厚が薄い完全空乏型、又はその膜厚が厚い不完全空乏型として構成することができる。例えば０．２μｍプロセスでは前者の当該膜厚は通常５０ｎｍ程度以下というように極めて薄い。従って、前者は後者に比べてデバイスプロセスが難しくなるが、不完全空乏型のＳＯＩ構造に比べて、ゲート電圧によるチャネル領域内反転層電荷への影響が支配的になり、良好な閾値電圧特性を持ち、後述するスタティック・ノイズ・マージンの設定が更に容易になる。尚、０．２μｍプロセスにおいて不完全型の膜厚は１００〜２００ｎｍ程度にある。図４の（Ｂ）には（Ａ）の構造に対する回路記号が例示される。
【００２１】
図４の（Ｃ）にはｎチャンネル型のＦＤ−ＳＯＩ・ＭＯＳトランジスタにおける基板バイアス電圧ＶＢＧＳを１Ｖ、０Ｖとしたときの、ＩＤ−ＶＧＳ特性を示した図である。この図より、ＶＢＧＳ＝１Ｖと正の方向に基板バイアス印加した場合、ＶＧＳ＞０．５Ｖでのオン状態において、駆動電流の量が増す。また、ＶＢＧＳ＝０Ｖと負の方向に基板バイアス印加した場合、ＶＧＳ＝０Ｖでのオフ状態において、オフ電流すなわちリーク電流が低減する。
【００２２】
＜並列化コンパイラの処理手順＞
続いて、当該マルチプロセッサシステム上で実行される実行コードを生成するためのコンパイラ処理手順を説明する。本発明のコンパイラは、ユーザが作成した入力されたプログラムをその構造的な特徴を利用して自動的に複数タスクに分割し、タスク間の並列性解析、並列実行順の決定、電力制御モードの決定と制御コードの付加、実行コードの生成を行う。これらの処理は、当該コンパイラがインストールされたＰＣ等の開発環境下で行われ、本発明のコンパイラがインストールされた開発環境にユーザが作成したプログラムを入力し、本発明のコンパイラを実行することで行われる。即ち、本発明のコンパイラは、プログラムの一種であり、例えばＤＶＤやＣＤ等の記憶媒体やインターネット等を利用した電子的な伝送により取引される。以下、本発明のコンパイラが行う処理について詳述する。
【００２３】
（１）マクロタスクの生成
ＣやＦｏｒｔｒａｎ等の高級言語で記述された逐次構造の入力プログラム例を図５に示す。コンパイラはまず、当該プログラム構造を解析することで、擬似代入文ブロック（ＢＰＡ：Ｂｌｏｃｋ  ｏｆ  Ｐｓｅｕｄｏ  Ａｓｓｉｇｎｍｅｎｔ  ｓｔａｔｅｍｅｎｔｓ）１．１、繰り返しブロック（ＲＢ：Ｒｅｐｅｔｉｔｉｏｎ  Ｂｌｏｃｋ）１．２、サブルーチン（ＳＢ：Ｓｕｂ  Ｒｏｕｔｉｎｅ）１．３、の３種類の粒度が大きなタスク（以下、マクロタスクＭＴと呼ぶ）に分割、生成する。ＲＢは、ループブロックで各階層での最も外側のループであり、ＢＰＡは、スケジューリングオーバーヘッドあるいは並列性を考慮し、代入文からなる複数の基本ブロックを融合あるいは分割したブロックである。マクロタスクは、ユーザが明示的に分割、定義しても良いし、後述するようなコンパイラが機械的にサブルーチンやループ等のプログラム構造を利用して分割、定義しても良い。なお、ここで言うマクロタスクは、上記のプログラム構造上での分割単位以外でも、ユーザが入力プログラム中にディレクティブで直接タスク単位を指定することで定義しても良い。なお、タスクという用語は、スレッド、プロセスと呼ばれることもある。
【００２４】
（２）データ依存・制御フロー解析
続いて、分割生成された当該マクロタスク間の制御フロー及びデータ依存性を解析し、ＭＴの実行順序関係を抽出する。入力プログラムは逐次的に記述されているため、通常のコンパイラによる実行コードは、当該プログラムの構造と同様に逐次的な順序で実行されるが、ＭＴ間で見ると必ずしも記述された順序で実行する必要がないことが多い。つまり、ＭＴ間において制御またはデータ参照の依存性がない場合、特にマルチプロセッサシステムにおいては、複数のＰＵに複数のＭＴを配置して同時にまたは順序を変更して、全体の実行時間が短くなるようスケジューリングすることが重要となる。このようなスケジューリングを行うためには、ＭＴ間の並列性を解析する必要がある。そこでこれに向けた準備として、データ依存・制御フロー解析処理により、ＭＴ間の実行順序関係を抽出する。
【００２５】
（３）ループレベル並列性解析
続いてマクロタスク内の中粒度レベルの並列性解析として、ループレベル並列化を行う。例えば、図５に示されるマクロタスク１．２には、中粒度レベルのループ１．２．１、１．２．４が含まれており、マクロタスク１．３には、中粒度のループ１．３．２、１．３．４が含まれている。ループレベル並列化では、ループの繰り返し（イタレーション）単位間のデータ依存性を解析して、各イタレーションが独立に処理できるかを判断し、可能な場合は各イタレーションを複数のＰＵに割り当てて並列処理を行う。また、単一のループを複数のループに分割し並列性を高めたり、データのコピーや配列変数の拡張によりループ間のデータ依存性を削除することで並列したり、また複数のループを単一のループに融合することでループ制御に必要なオーバーヘッドを軽減したり、といった様々な手法によりループの並列化を実現する。
【００２６】
（４）処理コスト解析
次に生成されたマクロタスクＭＴを各ＰＵで実行した際に必要となる処理サイクルを、予め付加された処理コスト情報より求める。このコスト情報は、プログラムを実機上単一のＰＵで実行した際の各マクロタスクの処理時間、または各種ツール等での見積もり値を用いる。なお、ＣＰＵの処理サイクルに関しては、コンパイラ内に持たせたＣＰＵ命令コストテーブルを参照することによって求めることも可能である。つまり、例えばＣＰＵなどに関しては乗算や加算など命令レベルで必要とするサイクル数をテーブルに保持しておき、当該テーブルを参照することでＭＴを当該ＰＵで実行する際の逐次処理サイクル数を見積もることができる。なお、ここでの処理時間は、電力制御を適用しない、つまり通常の電源電圧が供給され、通常の動作周波数で動作するＰＵ上の処理時間とする。
【００２７】
なお、コンパイル時にコストを決定できない要素が存在する場合、例えばＭＴが分岐を含む場合は、分岐確率を５０％としてコスト算出を行う。分岐確率を５０％としたのは、分岐はする／しないの２者択一であり、その確率が５０％の時が最もコスト算出が難しいワーストケースだからである。従って、明らかのその確率が偏っていることがわかるのであれば５０％とする必要はない。また、例えばループや配列のサイズが定まらない場合は、ループを固定回数とする、配列宣言時の最大サイズとする、等の方法を適用する。
【００２８】
（５）マクロタスク間並列性解析＝最早実行条件解析
コンパイラはマクロタスクＭＴの処理コストが決定した後、データ依存・制御フロー解析処理で抽出したＭＴ間の制御フローとデータ依存性を同時に解析結果から、ＭＴ間の並列性、つまり各ＭＴの実行を最も早く実行してよい条件（最早実行条件）を決定する。この最早実行条件をグラフで可視的に示したものがマクロタスクグラフ（ＭＴＧ）である。図５の入力プログラムを解析し生成されたＭＴＧを、図６に示す。本グラフ中の各ノードはマクロタスクＭＴを示し、ノード間の実線はマクロタスク間のデータ依存関係を表す。例えば、ＭＴ１．１からＭＴ１．２及びＭＴ１．３に対して実線が伸びているが、これはＭＴ１．２及びＭＴ１．３がＭＴ１．１を実行した結果生じたデータを入力データとして用い処理を実行しているという依存関係があることを示している。そのため、実行順序として、ＭＴ１．２及びＭＴ１．３はＭＴ１．１タスク終了後、実行できることを示す。
【００２９】
また、入力プログラムよりＭＴ１．２は複数のループやサブルーチンで構成されたブロックなので、コンパイラは当該ＭＴをさらに複数のＭＴに階層的に分割する。よって、当該ＭＴＧではＭＴ１．２中に、別階層でＭＴＧを構成する。ＭＴＧ１．３も同様である。なお、本グラフには表現されていないが、各ＭＴＧ内のマクロタスクの末端には終了タスク（ＥＭＴ）が付加され、ＭＴＧ内のタスク終了を判定するために用いられる。
【００３０】
（６）クリティカルパスタスクの抽出
次に、このグラフよりマクロタスク全体、つまり当該プログラムの実行時間に影響するマクロタスクの集合郡であるクリティカルパスを抽出する。言い換えれば、各ＭＴにおいて、ＭＴＧの終了タスクＥＭＴからの最長パス上にあるマクロタスクコストの総和を求め、スタートからＥＭＴまでの最長パスを決定する。この各マクロタスクから見たコスト総和は、マクロタスクをＰＵに割り当てるスケジューリング時に、また電力制御時の制御手法の選択時に使用される。つまり、マクロタスク間の依存関係から当該マクロタスクからの残存マクロタスクのうち、実行時間が最長のパス（クリティカルパス）を求め、クリティカルパス上のマクロタスクに高い優先度を与え、非クリティカルパス上のマクロタスクに低い優先度を与える。これにより、後続タスクの処理量が多いマクロタスクから優先的にＰＵへ割当を行うことで、全体の処理時間に影響あるマクロタスクを優先的に処理でき、全体の実行時間をなるべく最小化することを狙う。
【００３１】
以上のように得たＭＴＧ情報は、テーブルにて管理される。本テーブルを説明するために、図７（ａ）に簡単なマクロタスクグラフ（ＭＴＧ）を、（ｂ）にマクロタスク間の依存関係、つまりＭＴＧを表現するスケジューリングテーブルを例示する。本テーブル例では、マクロタスク毎に、タスクＩＤ（７０１）、依存タスク番号（７０２）、処理時間（７０３）、優先度（７０４）、ターゲットＰＵ（７０５）、マクロタスク間データ共有量（７０６）、の項目（フィールド）を持たせている。各項目を説明すると、タスク番号（７０１）は、あるプログラムを実行する際の各マクロタスクの固有番号であり、マクロタスクを一意に指定できるような番号付けがＭＴＧ生成時にコンパイラによって行われる。
【００３２】
次に依存タスク番号（７０２）は、当該マクロタスクを実行するに際して、当該マクロタスクが実行可能となるために、当該マクロタスクより前に処理すべきタスク番号を表す。つまり、依存タスク番号で指定されたマクロタスクの実行により生成される出力データを、当該マクロタスクが入力データとして使用する（データ依存）、または依存マクロタスク内に分岐処理が含まれており、当該分岐処理の実行結果で次に起動すべきマクロタスクが当該マクロタスクとなる（制御依存）ことを意味する。本例では、マクロタスクＭＴ１実行時に生成されるデータをＭＴ２及びＭＴ３が用い、さらにＭＴ２、ＭＴ３実行時に生成されるデータをＭＴ４が用いるという、データ依存関係があることになる。つまり、ＭＴ１実行終了後ＭＴ２及びＭＴ３が実行可能状態となり、ＭＴ２及びＭＴ３実行終了後ＭＴ４が実行可能となる。また、ＭＴ２とＭＴ３は並列で実行可能なことも本テーブルから判断できる。
【００３３】
次に、処理時間（７０３）は、前述した処理コスト解析で求められたマクロタスク単体の実行時間を示す。本例では、時間単位としてキロサイクルで表示した。続いて優先度（７０４）は、マクロタスクを実行するに際して複数のマクロタスクが割り当て対象となった場合、時間的に優先して割り付けるべきマクロタスクを選出する際に用いる指標値である。前述した、クリティカルパスタスクの抽出で、当該マクロタスクからＥＭＴまでの残りマクロタスクのコスト総和が大きな順に優先度を高く設定する。また優先度はユーザにより指定される場合もありうる。これは、プログラム内のディレクティブ指定により、あるサブルーチンやプログラム部分をユーザが明示することで、指定される。例えば、アプリケーション設計時に、マクロタスクの実行を優先的に行うことでプログラム全体の実行時間が短縮できることがわかる場合は、当該マクロタスクに高い優先度を与えることになる。また、周期タスク等で、時間制約に対し余裕が少ないマクロタスクに高い優先度を与える、割り込み処理を行うタスクで、通常の処理タスクに対し影響を最低限にするよう当該割り込み処理タスクに高い優先度を与える、等がある。また、優先度を基板バイアス制御（正方向）による高速化対象タスクとして、直接指定するためのフラグとして扱う方法もある。本例では、優先度を５段階とし、コンパイラにより残存タスクの最長パス長に基づいて値が設定している。
【００３４】
次に、ターゲットＰＵ（７０５）は、ＣＭＰが搭載するＰＵの一部が信号処理プロセッサＤＳＰなど、特定の処理を高速に実行可能な専用処理ＰＵを持つヘテロジニアス構成において、当該マクロタスクの処理に適しているＰＵを示している。今回の例では、ターゲットをホモジニアスＣＭＰ構成としているため、汎用プロセッサ（ＣＰＵ）がターゲットプロセッサとなる。ターゲットプロセッサは、入力プログラム中でユーザがディレクティブにより直接指定される。または、ヘテロジニアス構成の場合、当該プロセッサが持つ専用プロセッサ向けツール等との連携で対象マクロタスクの当該プロセッサ上での実行コストを見積もっておき、ＣＰＵで処理した場合と比較することで、当該専用プロセッサで処理した場合処理時間が短いと判定される場合は、ターゲットプロセッサの指定を当該専用プロセッサとコンパイラが判断する。
【００３５】
次に、マクロタスク間データ共有量（７０６）は、データ依存が存在する依存マクロタスクと当該マクロタスクでのデータ授受の量を表す。前述の通り、コンパイラはＭＴＧ生成時にマクロタスク間のデータ依存性を解析する。その際に、依存データの共有量を計算しておく。つまり、依存マクロタスクが生成したデータで当該マクロタスクが使用するデータの量、または依存マクロタスクが使用するデータで当該マクロタスクも使用するデータ量を示す。これは、当該マクロタスクを割り当てる際、共有データ量が多いマクロタスクを実行したＰＵと同一のＰＵに割り当てることで、依存マクロタスク処理時にキャッシュに読み込まれたデータ、またはローカルメモリに予め転送されたデータを、当該マクロタスクが最大限活用する。その結果、当該マクロタスクを実行するに際し必要なＣＳＭ等の外部メモリとの転送量をなるべく少なくし、転送に関わる処理時間を低減できる。なお、ローカルメモリにデータを配置する場合には、予め当該データの配置アドレスを固定的に定めておく必要がある。これは、プログラム内で明示的にメモリ配置位置を指定しておくか、コンパイラにデータ配置機能を拡張することにより、実現される。
【００３６】
（７）タスクスケジューリング
以上で得られた情報を用いて、コンパイラは各マクロタスクを実際にＰＵに割り当てるタスクスケジューリングを次に行う。スケジューリング部の処理フローを図８に示す。以下では、このフローの各処理について説明する。まず、ＭＴＧ及びスケジューリングテーブルの生成終了後、開始マクロタスクより実行可能ＭＴの検出を行う（８０１）。本処理では、スケジューリングテーブルより、既にスケジューリング済みのタスクをＰＵに割り当て後、データ依存や制御依存が解決され、次に実行可能となるマクロタスクを抽出する。例えば、図７のスケジューリングテーブル（８１０）よりＭＴ０を割り当て後、実行可能となるマクロタスクはＭＴ１とＭＴ２であり、これらのマクロタスクが本処理にて抽出される。続いて、タスクの優先度を検出し、どのタスクから優先的にＰＵへ割当を行うかを決定する（８０２）。
【００３７】
次に、タスクのＰＵへの割当を実施する（８０３）。本処理では、優先度が高い順にマクロタスクを、アイドル状態になっているＰＵ、またはすでにタスクが割り当て済みのＰＵではアイドル状態に一番早くなるＰＵに割り当てる。このとき、優先度が高いマクロタスクほど、当該マクロタスクを、アイドル状態がより早く訪れる、つまり割り当て済みタスクの実行を一番早く終えるＰＵに割り当てていく。また、もし複数のＰＵに対し当該タスクが割り当て可能な場合は、各ＰＵ上で既に割り当て済みのタスクと当該マクロタスクの共有データ量を図７のテーブルより検索し、なるべく共有データ量が大きくなるタスクがスケジューリング済みのＰＵに当該マクロタスクを割り当てる。なお、割り当て時に、各タスクの開始時間と終了時間を記録しておく。検出されたマクロタスク郡で未割り当てマクロタスクがなくなる（８０５）まで、本処理を繰り返す（８１３）。検出マクロタスクのＰＵへの割り付けが終了した場合、もしプログラムの終了タスクＥＭＴに未達の場合は再度割り当て済みとなったタスクにより依存解決することで検出される実行可能ＭＴの検出を再度実行する（８１２）。
【００３８】
本スケジューリングの実行例として、図７のテーブル情報で示した４個のマクロタスクを、２個のＰＵに割り当てる際のスケジューリング例を図１０（ａ）に示す。開始マクロタスクであるＭＴ０はまず、ＰＵ０に割り当てられ、ＰＵ０の処理時間情報からＰＵ０上で次にタスク処理が開始可能となる時間（ＭＴ０の処理終了時間）が決定される。次にＰＵ０割り当て後、ＭＴ１とＭＴ２が実行可能状態となり、これらのマクロタスクは並列で実行できることになる。優先度が高いＭＴ１から割り当て対象となり、ＭＴ１はＭＴ０と共有データが存在するためＰＵ０に、ＭＴ２は割り当て時にアイドル状態であるＰＵ１に割り当てられる。本例では、ＭＴ１の処理時間がＴ２のそれよりも大きい。次に、ＭＴ１とＭＴ２の実行が終了した時点で、ＭＴ３が実行可能状態となる。このタイミングでは、ＰＵ０、ＰＵ１双方ともアイドル状態でタスク割り当てが可能であるが、割り当て対象となるＭＴ３はＭＴ２とのデータ共有量が大きいため、ＭＴ２を実行したＰＵ１にＭＴ３を割り当てる。この結果、図１０（ａ）に示したスケジューリング結果となる。
【００３９】
このようにＰＵへのマクロタスク割り当て終了後、マクロタスクのＰＵへの割り当て処理終了後、電力制御を適用するために割り当て済みマクロタスクに対し、プログラム全体の実行時間に影響するクリティカルマクロタスク群の抽出と、各マクロタスクの実行開始時間と終了時間よりタスク間依存で生じるタスクの処理余裕度の見積もりを行う（８０６）。具体的には、まずプログラム全体の実行時間に影響するタスクの抽出例として、プログラム全体の処理時間を決定（影響）するクリティカルマクロタスクは、ＭＴ０、ＭＴ１、ＭＴ３と決定される。また、余裕度の見積もりにおいては、例えばＰＵ１上でのＭＴ２は、次に実行されるＭＴ３がＭＴ１に対しデータ依存を持つため、ＰＵ１はＭＴ２処理終了後、ＭＴ１処理終了までアイドル状態となる。このアイドル時間を、ＭＴ２に対する時間余裕度として計算する。
【００４０】
以上の結果を用いて、次に電力モードを決定する（８０７）。電力制御の詳細と具体例は後述するが、概念を説明すると、プログラム全体の処理時間に強く影響すると判断されたマクロタスクをＰＵが実行する際は、実行前に当該ＰＵに対し動作速度を一時的に高速化する電力制御モードを適用する。また、余裕時間があるタスクをＰＵが実行する際は、実行前に当該ＰＵに対し動作速度を一時的に下げ電力を削減する電力制御モードを適用する。またタスクが実行されないＰＵに対しては、クロックや電源電圧をオフとする電力制御モードを適用する。これにより、消費電力を抑えるまたは低減すると同時に、プログラム全体の動作速度を最大化する。電力制御モードは、ターゲットとなるアーキテクチャによって用意されるモードが決まるが、制御モードの例を図９に電力制御テーブル（８１１）として示す。テーブルは、モード名（９００）、電源電圧ＶＤＳ（９０１）、基板バイアス電圧ＶＢＧ（９０２）、クロック周波数ＣＬＫ（９０３）、各モードへの遷移時に必要な安定化時間（９０４）、各モードにおける通常モードＮＯＲＭに対する速度比（９０５）、電力比（９０６）で構成される。算出される余裕度に対し設定モードの速度比で電力制御適用後の実行時間が余裕時間内に納まるか、また電力効果を示す電力比を使って電力が低減するかを算出し、モードを決定することとなる。また、モード切替遷移時間は、クロック、電源の安定時間、また電源をオフとする場合はメモリ、レジスタ等のデータ退避時間等を考慮して決められる。説明の簡略化のため本表中ではモード毎に定義しているが、通常はターゲットアーキテクチャによって、遷移パターン、つまり遷移前・遷移後のモード対応で時間が定義される。以上の電力モード決定後、タスクの実行時間が変わるため、再度各ＭＴの開始・終了時間といった時間情報を更新する（８０８）。
【００４１】
電力制御モード決定後は、実行コードの生成を行う（８０９）。具体的には、スケジューリング結果よりＰＵ毎に実行されるマクロタスクが決定されている。したがって、ＰＵ毎にマクロタスク内のプログラムコードを、各ＰＵ間でのデータ通信、同期通信用のコード及び電力制御コードを付加した上で、ターゲットアーキテクチャが解釈するオブジェクトコードに変換して、実行コードを生成する。ここで、図１に示されるコントロールプロセッサ（ＣＴＬＰ）が存在するプロセッサシステムに対しては、各ＰＵにおいて実行すべきタスク番号と実行順序、電力モード、その他タスク実行に必要な実行情報、例えばキャッシュのプリフェッチやデータ転送指定が定義されるスケジュールプログラムが生成される。このスケジュールプログラムは、図１におけるコントロールプロセッサ（ＣＴＬＰ）に用いられる。また、図２のように各ＰＵに制御レジスタを（ＣＲ）を有するプロセッサシステムにおいては、各マクロタスクの前後に他のタスクとの同期を取るためのタスク間同期プログラム、電力モードやデータ転送を実施する電力モードプログラム、データ転送プログラムを付加する。
【００４２】
また、ターゲットアーキテクチャ向けのコード生成コンパイラを利用する方法もある。これは、入力プログラムに、プログラム分割と対象ＰＵ、及びデータ転送、同期通信、電力制御を明示したＡＰＩを挿入し、このＡＰＩを解釈する機能を付加したコード生成コンパイラで、各ＰＵの実行コードを生成し、処理を終了する。
【００４３】
（８）電力制御の詳細
続いてＦＤ−ＳＯＩの特徴を活用する基板バイアス制御を利用したタスクスケジューリングにおける電力制御手法を、具体例を示し説明する。前述したフローのとおり、マクロタスクをまず電力制御適用なし状態である通常のスケジューリングでＰＵに割り当てる。この際、タスク間依存関係から生じるプロセッサ処理量の不均衡を利用して、並列実行時にプロセッサ処理量の不均衡が低減されるよう、各ＰＵの基板バイアス制御、つまり電力制御を行うことになる。以下の例では、ターゲットアーキテクチャが持つ電力制御モードは図９に示した６種類であるとする。電力制御の効果を再度説明すると、ＨＩＧＨモードではＰＵの基板バイアス制御（順方向バイアス印加）を行うことでしきい値を下げ（場合によっては電源電圧も上昇させ）、ＰＵの速度を高めて処理することで全体の処理時間を短縮できる。また、低速なＭＩＤ、ＬＯＷ、ＯＦＦモードでは、ＰＵの基板バイアス制御（逆方向バイアス印加）を行うことでしきい値を上げ、ＰＵの速度を低減し処理を行うことで、電力を削減できる。
【００４４】
以下実施例として、ＰＵへのマクロタスク割り当て結果より、図１０（ａ）のスケジューリング結果を得たとする。この際、プログラム全体の実行時間に影響を与えるクリティカルマクロタスクはＭＴ０、ＭＴ１、ＭＴ３であるため、まずこれら３個のマクロタスク実行時の各ＰＵの電力モードをＨＩＧＨに設定する。ＰＵの動作速度が変化するため、各マクロタスクの実行開始・終了時間を更新する。次に余裕度を算出する。ＭＴ２は、ＭＴ３が持つＭＴ１及びＭＴ２へのデータ依存により、ＭＴ１の処理が終了するまで時間余裕がある。具体的には、ＭＴ１の処理時間は電力制御適用無しで３０ＫＣｙｃであるが、ＨＩＧＨモードを適用したため、２５Ｋサイクルとなる。またＭＴ２の処理時間は電力制御適用なしで１０Ｋサイクルであり、余裕度は１５Ｋサイクルと計算される。したがって、電力制御モードで動作周波数を１／２とするＭＩＤを適用した場合、ＭＴ２は２０Ｋサイクルとなり、モード切替遷移時間を考慮しても余裕時間に収まるため、ＭＩＤモードが選択される。また、さらにＭＴ２実行前のＰＵ１とＭＴ１実行後のＰＵ０、ＭＴ３実行後のＰＵ１はタスクを実行しないアイドル状態であるため、クロック及び共有電圧をＯＦＦモードとすることで電力が低減できるが、ＭＴ２実行前のＰＵ２では余裕時間が１０ＫＣｙｃであるので、モード切替遷移時間が小さなＯＦＦモードが適用される。ＭＴ２実行前のＰＵ１とＭＴ１実行後のＰＵ０、ＭＴ３実行後のＰＵ１は、マクロタスク処理が終了しているため、より電力削減効果が大きなＤＥＰ−ＯＦＦモードが適用される。その結果、最終的に図１０（ｂ）のようなスケジューリング結果となる。
【００４５】
なお、ユーザによるディレクティブ指定により、意図的に高速に行うべきタスクの指定、周期タスク等で時間余裕があるときに低速に行うべきタスクの指定を行うことも可能である。
【００４６】
以上の本発明のコンパイラにより、ＦＤ−ＳＯＩで構成されたマルチプロセッサシステムにおいて、当該ＰＵを効率よく動作させるためのタスク配置および電力制御を行うコンパイラを提供することにより、当該プロセッサシステムの性能を最大限活用しつつ、低電力にて効率よく処理することが可能となる。その結果、高い演算性能を持ちかつ低電力に処理することが強く望まれる、カーナビや携帯電話、情報家電向けのＬＳＩに本発明を適用することができ、高品質の動画像や音声処理、また画像認識や音声認識といった機能を実現することが可能となる。また、自動車における情報系、制御系システム向けＬＳＩに対しても適用することができ、自動運転や安全運転システム等を実現することが可能となる。
【００４７】
次に、上述のコンパイラにより生成された実行コードにより動作するマルチプロセッサシステムについて図１及び図２のマルチプロセッサシステムを用いて説明する。なお、上述の実行コードは、ハードディスクやフラッシュメモリなどのマルチプロセッサシステムの外部に設けられる不揮発性記憶媒体に記憶され、必要に応じてマルチプロセッサシステムに読み出される。
【００４８】
まず、図１のマルチプロセッサシステム上での動作を説明する。上述のコンパイラがＣＴＬＰ上で動作するスケジューラプログラムを生成する。スケジューラプログラムは、各ＰＵにおいて実行すべきタスク番号と実行順序、電力モード、その他タスク実行に必要な実行情報、例えばキャッシュのプリフェッチやデータ転送指定、が定義されている。ここでは、図１０（ｂ）で示したスケジューリング結果が既に上述のコンパイラにより得られているとする。まず、ＣＴＬＰは本スケジューラプログラムを不揮発記憶媒体等から読み出し実行する。その結果、本例ではまず、ＣＴＬＰはＰＵ０に対しＭＴ０の実行開始を指示する。その際、ＭＴ０がＰＵ０で電力モードＨＩＧＨにて実行されるものと判断し、ＰＵ０に実行を指示すると共に、ＰＵ０のＢＧＣＴＬにＢＧＰ，ＢＧＮを順方向バイアスが印加されるように電圧を制御ように指示する。具体的には、設定する電力モードを電力制御部に指示し、さらに実行すべきタスク番号をＰＵ０上のローカルメモリに対し書き込む。各ＰＵはメモリ上のタスク番号をポーリングし、タスク番号が指定された時点で当該タスクの実行を開始する。同様にプログラム実行開始時は、ＰＵ１は実行すべきタスクがなく電力モードがＯＦＦとされているため、ＣＴＬＰがＰＵ１のＢＧＣＴＬにＢＧＰ，ＢＧＮを逆バイアスが印加されるように電圧を制御する。同様に本プログラム実行にまったく使用されないＰＵ２、ＰＵ３に対しては電力モードＤＥＥＰ−ＯＦＦとし、ＣＴＬＰはＰＵ２、ＰＵ３の電源電圧をカットするよう制御する。これにより、ＭＴ０は、ＰＵ０により高速に処理されると共にＰＵ１、ＰＵ２、ＰＵ３のリーク電流が低減される。
【００４９】
次に、ＭＴ０が終了した時点で、ＰＵ０は、ＣＴＬＰに処理の終了を伝達する。このとき、既に上述のコンパイラにより次にＭＴ１とＭＴ２が並列実行可能であることが解析されており、また実行すべきＰＵ番号も決定されている。従って、ＣＴＬＰはＰＵ０に対する電力モードをＨＩＧＨに設定しＭＴ１の実行をＰＵ０に指示する。続いてＣＴＬＰはＰＵ１に対し電力モードをＭＩＤに設定し、ＭＴ２の実行をＰＵ１に指示する。ＰＵ０はＭＴ１処理終了後、コンパイラが付加したコードを実行することによりＭＴ１の終了をＣＴＬＰに通知する。通知はメモリ上のフラグを書き込む方法でも良いし、プロセッサ間割り込みにより通知する方法でも良い。同様にＰＵ１はＭＴ２処理終了後、ＣＴＬＰに通知する。ＣＴＬＰはＭＴ１とＭＴ２の終了通知を受信後、ＰＵ１の電力モードをＨＩＧＨに設定しＭＴ３の実行を指示する。また同時にＰＵ０は実行タスクが無いため、電力モードがＤＥＥＰ−ＯＦＦとされており、ＣＴＬＰがＰＵ０の電源をＯＦＦとするよう制御する。そして、ＰＵ１はＭＴ２の処理が終了後、同様に当該ＭＴ２の終了をＣＴＬＰに通知する。ＣＴＬＰはＭＴ２の終了通知を受けてＰＵ１の電力モードをＤＥＥＰ−ＯＦＦとするよう制御し、全体実行が完了する。この結果、本提案手法を用いない場合と比較し、実行時間が短縮されると同時に、電力を削減することが可能となる。
【００５０】
次に、図２のマルチプロセッサシステム上での動作を説明する。上述のコンパイラは、各ＰＵで実行すべきタスクを持ったプログラムを生成すると同時に、タスク実行コードの前後に他のタスクとの同期を取るためのタスク間同期プログラム、電力モードやデータ転送を実施する電力モードプログラム、データ転送プログラムを埋め込む。そしてＰＵ毎の実行コードを最終的に生成する。以下、図１０（ｂ）で示したスケジューリング結果が既に上述のコンパイラにより得られているとする。まず、各ＰＵは不揮発媒体から初期状態を定義するプログラムを実行する。ここで、初期状態とはＰＵの電力モードと次に実行すべきタスクが定義される状態である。つまり、ＰＵ０はまずＭＴ０を実行することがコンパイル段階で決定されているため、ＰＵ０は自己の電力モードをＨＩＧＨに設定し、ＭＴ０の実行を始める。またプログラム実行開始時に実行すべきタスクが無いＰＵ１は、自己の電力モードをＯＦＦに設定する。またさらに本プログラム実行で全く使用しないＰＵ２、ＰＵ３は同じく自己の電力モードをＯＦＦに設定する。ＰＵ０はＭＴ１の処理を終了後、コンパイラが付加したコードによりまずＰＵ１の電力モードをＭＩＤに設定する。続いて、ＰＵ１に対しＭＴ２の実行を指示する。ＰＵ１はＰＵ０により電力モードがＭＩＤに設定されたため、次に実行すべきＭＴ２の実行待ち状態となり、ＰＵ０からの通知を受けてＭＴ２の実行を開始する。また、ＰＵ０は続いてＭＴ１の実行を開始する。
【００５１】
ＰＵ１はＭＴ２の実行終了後、実行終了の通知をＰＵ０に行う。なお、通知の方法は例えばＰＵ０のローカルメモリに実行の終了を示すフラグを書き込むことにより実現される。またさらにＰＵ１は次に実行されるＭＴ３の実行通知待ち状態となる。ＰＵ０はＭＴ１処理終了後ＭＴ２の完了をチェックし、ＭＴ２の完了を確認次第、次にＭＴ３を実行するＰＵ１の電力モードをＨＩＧＨに設定する。そしてＰＵ０はＰＵ１に対しＭＴ３の実行開始を指示し、自己の電力モードをＤＥＥＰ−ＯＦＦに設定する。ＰＵ１はＭＴ３実行後、自己の電力モードをＤＥＥＰ−ＯＦＦとし、プログラム全体の実行を終了する。この結果、本提案手法を用いない場合と比較し、実行時間が短縮されると同時に、電力を削減することが可能となる。
【図面の簡単な説明】
【００５２】
【図１】対象となるマルチプロセッサシステムの構成例を示した図である。
【図２】対象となるマルチプロセッサシステムの構成例を示した図である。
【図３】基板電圧制御回路を説明する図である。
【図４】基板バイアス特性を説明する図である。
【図５】コンパイラに入力するプログラム例を示した図である。
【図６】コンパイラが生成したタスク間依存関係図を示した図である。
【図７】スケジューラが用いるスケジューリング情報を説明する図である。
【図８】コンパイラスケジューリング処理部の処理フローを説明する図である。
【図９】電力制御情報テーブルの構成を説明する図である。
【図１０】マクロタスクスケジューリング結果例を示した図である。
【符号の説明】
【００５３】
１０１・・・プロセッサユニット、１０２・・・基板電圧制御回路、１０３・・・制御プロセッサ、１０４・・・共有メモリ、１０５・・・インタコネクション・ネットワーク、１０６・・・接地電源、１０７・・・電源、１０８・・・ｎＭＯＳ基板電源、１０９・・・ｐＭＯＳ基板電源、１１０・・・基板電圧制御線、１１１・・・制御レジスタ、１２０〜１２３、１２５〜１２８・・・タスク、７０１・・・タスクＩＤ、７０２・・・依存タスクＩＤ、７０３・・・処理時間、７０４・・・優先度、７０５・・・ターゲットＰＵ、７０６・・・タスク間共有データ量、８０１、８０２、８０３、８０６、８０７、８０８、８０９・・・処理、８０４、８０５・・・分岐を含む処理、８１０・・・スケジューリングテーブル、８１１・・・電力制御情報テーブル、８１２、８１３・・・フロー、９００・・・電力モード、９０１・・・供給電源電圧、９０２・・・基板バイアス電圧、９０３・・・クロック周波数、９０４・・・モード切替安定化時間、９０５・・・速度比、９０６・・・電力比。
【図１】
2009146243.tif 000003
【図２】
2009146243.tif 000004
【図３】
2009146243.tif 000005
【図４】
2009146243.tif 000006
【図５】
2009146243.tif 000007
【図６】
2009146243.tif 000008
【図７】
2009146243.tif 000009
【図８】
2009146243.tif 000010
【図９】
2009146243.tif 000011
【図１０】
2009146243.tif 000012