(57)【要約】      （修正有）【課題】電源遮断機構を有する、複数のＰＥで構成された動的再構成回路において、リーク電力を抑制するように当該ＰＥへの処理のマッピングを行うデータ処理装置及びデータ処理方法を提供する。【解決手段】タスク割り当て部１０４は演算器１０８に処理を割り当てる際に、電源制御領域である回路ブロック１０７ａ〜ｂに電源供給する時間が少なくなるように回路ブロック１０７ａ〜ｂ内の演算器１０８にデータ処理を割り当てる。構成情報生成部１０６は割り当てられた結果に沿って構成情報を生成する。【選択図】図１
2016103240.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ処理を並列に実行する複数の演算要素を含む複数の回路ブロックと、
前記複数の回路ブロックへの電源供給を個別に制御する電源制御手段と、
前記データ処理に関する情報と前記演算要素に関する情報を取得する取得手段と、
前記取得手段で取得した情報に基づき、回路ブロックに電源供給する時間が少なくなるように回路ブロック内の演算要素にデータ処理を割り当てる割り当て手段と、
前記割り当て手段によって割り当てた処理を回路ブロックが実行できるように構成情報を生成する生成手段と、
を有することを特徴とするデータ処理装置。
【請求項２】
前記取得手段は、データ処理の処理開始時間、処理完了時間に関する情報を取得することを特徴とする請求項１記載のデータ処理装置。
【請求項３】
前記割り当て手段は、
前記処理開始時間と前記処理完了時間が近いデータ処理を同一の回路ブロック内の演算要素に割り当てることを特徴とする請求項２記載のデータ処理装置。
【請求項４】
前記割り当て手段は、
回路ブロックで消費されるリーク電力が少なくなるように
回路ブロック内の演算要素にデータ処理を割り当てることを特徴とする請求項１記載のデータ処理装置。
【請求項５】
複数のデータ処理を並列に実行する複数の演算要素を含む複数の回路ブロックへの電源供給を個別に制御する電源制御工程と、
前記データ処理に関する情報と前記演算要素に関する情報を取得する取得工程と、
前記取得工程で取得した情報に基づき、回路ブロックに電源供給する時間が少なくなるように回路ブロック内の演算要素にデータ処理を割り当てる割り当て工程と、
前記割り当て工程によって割り当てた処理を回路ブロックが実行できるように構成情報を生成する生成工程と、
を有することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算要素で構成される動的再構成可能なデータ処理装置に関する。
【背景技術】
【０００２】
半導体製造技術の進歩による素子の微細化に伴い、膨大な数のトランジスタがＬＳＩ上に集積されるようになった。
【０００３】
この微細化・トランジスタ数の増加に起因してスタティック電力が増加し、さらにプロセッサの高周波化に伴って動作時電力が増加するため、性能と低消費電力化のトレードオフが生じ、性能向上に限界が見え始めている。
【０００４】
そこで、さらなる性能向上を実現する手段として、ＣＰＵ、ＤＳＰ、単体の演算器、もしくは演算ユニットなどのプロセッサエレメント（以下、ＰＥとする）をＬＳＩ上に複数搭載させたアレイ型演算装置が注目されている。これは複数のＰＥを用いて処理を並列で行うことで、プロセスの微細化による動作周波数の向上が従来ほど見込めない状況であっても、高い演算性能を得ることができるためである。
【０００５】
しかしながら、今後、大規模化・集積化が進むことによって搭載するＰＥ数を増やし理論性能を向上させることができるが、同時に増大する消費電力を抑制する手段・対策を講じなければ、性能向上と省電力化を両立させることができない。
【０００６】
ここで、機能動作により消費するダイナミック電力と、トランジスタに電源を供給するだけで生じるスタティック電力の省電力化対策について述べる。
【０００７】
ダイナミック電力は、信号変化に伴い駆動する寄生容量の充放電で流れる電流と、貫通電流のようなトランジスタのスイッチング時に流れる電流のために消費される電力である。従って、機能動作に支障の無い範囲で信号変化を抑えるとダイナミック電力を削減することが出来る。このような原理に基づく代表的な省電力化の手法としてクロックゲーティングがあり、一般に広く用いられている。
【０００８】
一方、スタティック電力は、トランジスタの寄生容量に充電される電荷とリーク電流のために消費される電力である。プロセスの微細化に伴い寄生容量は削減する傾向があり、リーク電流は増加する傾向にある。特に、ポリシリコンのゲート酸化膜の薄膜化に伴い、一時期、リーク電流は指数関数的な増加傾向を示していた。このリーク電流を削減するにはトランジスタに供給する電圧を小さく制限するか、または、遮断してしまう方法が有効である。このためリーク電力削減を目的とした技術として、同一電源で駆動されるブロックの電源遮断が一般に広く用いられるようになった。半導体集積回路における電源遮断とは、電源遮断対象箇所への電源供給経路と電源をトランジスタで構成された電源スイッチを用いて接続し、必要に応じて導通と遮断を半導体集積回路内で切り替える技術である。現在では、材料や製造方法の改善によりリーク電流は以前のような指数関数的な増加傾向を示すことはなくなったが、依然、線形的な増加傾向を保っており、電源遮断はこれからも電力削減の手段として重要な位置を占める。なお、所望の領域内に配置された素子への電力の供給と遮断の制御が可能な集積回路上の一部分を電源制御領域と定義する。
【０００９】
よって、大規模化したアレイ型演算装置においてもリーク電力を効率的に削減するために、この電源遮断技術が用いられる。
【００１０】
複数の電源制御領域を構成し、稼働していないＰＥを部分的に電源遮断するきめ細かい電源管理を行うことで消費電力を抑制させることが可能になる。
【００１１】
このような状況に対して、これまで動的再構成可能なアレイ型演算装置の消費電力を削減する方法が考えられてきた。
【００１２】
例えば、従来はコンパイルしてＰＥにタスクを割り当てるときにタスク実行時間のデッドラインに合わせて周波数を最適化する方法が提案されている（特許文献１）。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００６−２９３７６８
【発明の概要】
【発明が解決しようとする課題】
【００１４】
しかしながら、従来の動的再構成回路では多種多様な分割形態で実装される電源制御領域を考慮して処理のマッピング制御をおこなっていない。そのため、従来の手法では処理時間に差があるタスクを電源制御領域内のＰＥにバラバラに割り当てられ、処理時間が長いタスクが完了するまで電源オフすることができなくなり、リーク電力を無駄に消費してしまう。特許文献１の方法は周波数を低減したぶんだけダイナミック電力を削減できるが、リーク電流のために消費される電力を削減できるものではない。
【００１５】
このように従来の動的再構成回路では、プロセッサアレイへの処理マッピングは電源制御領域を考慮したものではないため、消費電力を削減する処理マッピングをおこなうことができない。
【００１６】
本発明は上記の課題に鑑みてなされたものである。すなわち、複数のＰＥで構成された動的再構成回路において、リーク電力を抑制するように当該ＰＥへの処理のマッピングをおこなうデータ処理装置を提供することを目的とする。また、データ処理方法を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上述の課題を解決するために、本発明に係るデータ処理装置は、
複数のデータ処理を並列に実行する複数の演算要素を含む複数の回路ブロックと、
前記複数の回路ブロックへの電源供給を個別に制御する電源制御手段と、
前記データ処理に関する情報を取得する処理情報取得手段と、
前記演算要素に関する情報を取得する演算要素情報取得手段と、
前記処理情報取得手段と演算要素情報取得手段で取得した情報に基づき、
回路ブロックに電源供給する時間が少なくなるように
回路ブロック内の演算要素にデータ処理を割り当てる処理割り当て手段と、
前記処理割り当て手段によって割り当てた処理を
回路ブロックが実行できるように構成情報を生成する手段と、
を有することを特徴とする。
【発明の効果】
【００１８】
本発明によれば、回路ブロックに電源供給する時間が少なくなるように回路ブロック内の演算器にデータ処理を割り当てることで、データ処理装置が消費するリーク電力を削減することができる。
【図面の簡単な説明】
【００１９】
【図１】実施形態１におけるデータ処理装置のブロック構成図
【図２】データ処理装置に入力する構成情報の一例
【図３】実施形態１における回路ブロックの内部構成
【図４】実施形態１における演算器の内部構成
【図５】実施形態１におけるルータの内部構成
【図６】演算器情報取得部が保持する演算器情報の一例
【図７】タスク情報取得部が保持するタスク情報の一例
【図８】実施形態１におけるタスク割り当ての動作を示すフローチャート１
【図９】タスク割り当て部が生成するテーブルの一例
【図１０】実施形態１におけるタスク割り当ての動作を示すフローチャート２
【図１１】実施形態１におけるタスク割り当ての動作を示すフローチャート３
【図１２】実施形態１におけるタスクの割り当ての動作を示す説明図１
【図１３】実施形態１におけるタスクの割り当ての動作を示す説明図２
【図１４】構成情報生成部が生成する構成情報の一例
【図１５】演算器・ルータのＩＤ設定の一例
【図１６】構成情報生成装置のブロック構成図
【図１７】半導体装置のブロック構成図
【図１８】半導体装置のメモリ内部に格納する構成情報の配置例
【図１９】実施形態２におけるデータ処理装置のブロック構成図
【図２０】実施形態２におけるタスク割り当ての動作を示す説明図
【図２１】実施形態３におけるタスク情報取得部が保持するタスク情報の一例
【図２２】実施形態３におけるタスク割り当て部が生成するテーブルの一例
【発明を実施するための形態】
【００２０】
［実施形態１］
以下、構成情報を入力として動作するデータ処理装置の実施形態を説明する。
【００２１】
以下で説明するデータ処理装置は、構成情報を入力とし、構成情報に沿って演算処理の割り当てをおこなうものである。データ処理装置に入力する構成情報は、構成情報を生成する装置によって生成される。
【００２２】
ここで述べる演算処理の割り当ては、タスクと、タスクを実行する演算器とを関連付けることを意味する。演算器はタスクを並列実行している。
【００２３】
＜データ処理装置の構成と動作＞
以下、データ処理装置の構成と動作を説明する。
【００２４】
図１は、本実施形態のデータ処理装置（１００）の全体構成を表す図である。なおデータ処理装置（１００）の構成は、本実施形態に限定するものではなく他の構成でも良い。
【００２５】
図１のデータ処理装置（１００）は、動的再構成回路（１０１）、電源制御手段（１０２）、タスク情報取得部（１０３）、タスク割り当て部（１０４）、演算器情報取得部（１０５）、構成情報生成部（１０６）で構成される。
【００２６】
動的再構成回路（１０１）は、複数の演算器（１０８）を含む複数の回路ブロック（１０７）からなる。演算器と演算要素は同義である。各演算器（１０８）と各ルータ（１０９）は結線（１１２）によって一方向に接続されている。結線（１１２）は、図１に示すように回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）に別々に設ける。
【００２７】
回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）は、演算器（１０８）とルータ（１０９）を含むブロックである。回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）の内部構成と動作は同じである。
【００２８】
回路ブロック（１０７ａ）には、不図示の電源回路ブロックから電源電圧ＶＤＤが電源スイッチ（１１０）を介して供給されている。回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）は、それぞれ個別に電源遮断と電源供給を切り替えることができる。回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）には、電源遮断と電源供給を切り替えるための電源スイッチ（１１０）を接続する。
【００２９】
演算器情報取得部（１０５）は、タスク割り当て部（１０４）から演算器情報の送信を要求する信号を受信したときに、演算器情報をタスク割り当て部（１０４）に送信する。演算器情報には、演算器（１０８）が属している回路ブロックの識別番号（回路ブロックＩＤ）、演算器（１０８）が演算処理を実行中であるかを示すフラグ、および演算器（１０８）が実行しているタスクの識別番号（タスクＩＤ）が含まれる。また、演算器情報取得部（１０５）は、タスク割り当て部（１０４）から演算器ＩＤを受信して、電源制御部（１０２）へ結線（１１５）を介して演算器ＩＤに対応する回路ブロックＩＤを送信する。更に演算器情報取得部（１０５）は、演算器（１０８）からタスクの実行開始を通知する信号とタスクの実行完了を通知する信号を受信し、タスクＩＤをタスク情報取得部（１０３）へ送信する。
【００３０】
電源制御部（１０２）は、演算器情報取得部（１０５）から回路ブロックＩＤを受信した後、結線（１１７）を介して電源スイッチ（１１０）のオン・オフを切り替える。電源制御部（１０２）は、回路ブロックへの電源供給に充分な時間が経過した後、構成情報生成部（１０６）に結線（１１８）を介して回路ブロックへの電源供給が完了したことを通知する。
【００３１】
タスク情報取得部（１０３）は、演算器情報取得部（１０５）からタスクＩＤを受信する。タスク情報取得部（１０３）は、タスク割り当て部（１０４）からタスクＩＤを受信したときに、受信したタスクＩＤに対応するタスクの処理開始時間と処理完了時間をタスク割り当て部（１０４）へ送信する。タスク情報には、タスクのＩＤ、タスクの処理開始時間、タスクの処理完了時間が含まれる。
【００３２】
タスク割り当て部（１０４）は、演算器情報取得部（１０５）へ演算器情報の送信を要求する信号を送信した後、演算器情報取得部（１０５）から演算器情報を受信する。またタスク割り当て部（１０４）は、タスク情報取得部（１０３）へタスク情報の送信を要求する信号を送信した後、タスク情報取得部（１０３）からタスク情報を受信する。その後、タスク割り当て部（１０４）は、演算器（１０８）へのタスク割り当てを変更して、割り当てを変更する前後の演算器ＩＤを構成情報生成部（１０６）へ送信する。更に、タスク割り当て部（１０４）は、割り当てを変更する前後の演算器ＩＤとタスクＩＤを演算器情報取得部（１０５）へ送信する。タスク割り当ての変更の詳細な動作については後述する。
【００３３】
構成情報生成部（１０６）は、データ処理装置（１００）の外部へ構成情報（１１１）の送信を要求する信号を送信した後、データ処理装置（１００）の外部から構成情報（１１１）を受信する。また、構成情報生成部（１０６）はタスク割り当て部（１０４）からタスク割り当てを変更する前と後の演算器ＩＤを受信する。その後、構成情報生成部（１０６）は、構成情報（１１１）に含まれる演算器ＩＤをタスク割り当て変更後の演算器ＩＤに変更して、構成情報（１１１）を再生成する。
【００３４】
構成情報生成部（１０６）は、電源制御部（１０２）から電源スイッチ（１１０）の切り替えが完了したことを通知された後、再生成した構成情報を動的再構成回路（１０１）に送信する。構成情報生成部（１０６）は回路ブロック内を一巡してきた構成情報（１１１）を受信した後、構成情報（１１１）の送信が完了したと判定する。
【００３５】
動的再構成回路（１０１）は、構成情報生成部（１０６）から構成情報（１１１）を受信して、動的再構成回路（１０１）の動作設定をおこなう。その後、動的再構成回路（１０１）は、構成情報（１１１）を構成情報生成部（１０６）に送信する。動的再構成回路（１０１）の内部構成と動作については後述する。
【００３６】
＜構成情報の説明＞
ここで、図２は構成情報（１１１）の一例を示したものである。この構成情報（１１１）は、データ処理装置（１００）の動的構成を規定するものである。
【００３７】
図２（ａ）に示すように、構成情報（１１１）は、演算器の設定データ（２０１）とルータの設定データ（２０２）を組み合わせた情報である。演算器と演算要素は同義であるので、図面には演算器を演算要素と記載している。図２（ａ）は、演算器の設定データ（２０１）がＸ個、ルータの設定データ（２０２）がＹ個である場合を示している。つまり、図２（ａ）の構成情報（１１１）は、Ｘ個の演算器、Ｙ個のルータに対する設定を含むデータである。また、図２（ａ）は一つの構成情報がＮビットのバイナリデータである場合を示している。
【００３８】
ここで、図２（ｂ）は演算器の設定データ（２０１）とルータの設定データ（２０２）の具体的なフォーマットの例を示したものである。
【００３９】
図２（ｂ）に示す設定データは、ＩＤ（２０３）、アドレス（２０４）、設定値（２０５）を含むデータである。
【００４０】
ＩＤ（２０３）は、各演算器、またはルータに固有に設定される識別番号である。ＩＤ（２０３）は、データ処理装置（１００）の構成を決定するときに設定すれば良い。
【００４１】
アドレス（２０４）は、各演算器、またはルータの内部にあるメモリの書き込み領域を指定するものである。
【００４２】
設定値（２０５）は、演算器（１０８）とルータ（１０９）の動作を設定する値である。
【００４３】
＜回路ブロックの構成説明＞
ここで、図３は回路ブロック（１０７ａ）の内部構成を示した図である。回路ブロック（１０７ｂ）の内部構成は、回路ブロック（１０７ａ）の内部構成と同様である。
【００４４】
以下で、回路ブロック（１０７ａ）の内部構成について、図３を用いて具体的に説明する。図３の演算器（１０８）は４系統の入力部と出力部を持ち、ルータ（１０９）は８系統の入力部と出力部を持つ。なお、本提案の内容は図３に示した回路ブロックの構成に限定されるものではない。
【００４５】
演算器（１０８）は、結線（３０１）〜（３０８）によって、ルータと接続されている。演算器（１０８）は、データ入力用の結線（３０１）〜（３０４）から供給されるデータを処理し、データ出力用の結線（３０５）〜（３０８）から処理データを出力する処理部である。演算器（１０８）は、構成情報生成部（１０６）から結線（１１３）を介して演算処理の開始を指示する信号を受信する。本実施形態では、結線（１１３）は演算器（１０８）の数だけ設ける構成としているが、他の結線方法であっても良い。演算器（１０８）は処理を開始した後、結線（１１４）を介して演算器情報取得部（１０５）に処理開始を通知する信号を送信する。また、演算器（１０８）は処理が完了した後、結線（１１４）を介して演算器情報取得部（１０５）に処理完了を通知する信号を送信する。
【００４６】
ルータ（１０９）は、上下左右にある他のルータと結線（３０９）〜（３１６）で接続されている。結線（３０９）〜（３１２）は、他のルータからデータを受信するための結線である。結線（３１３）〜（３１６）は、他のルータへデータを送信するための結線である。
【００４７】
ここで、図４は演算器（１０８）の内部構成の一例を示した図である。
【００４８】
演算器（１０８）は、構成情報設定部（４０１）、演算処理部（４０２）、データ入力部（４０３）、データ出力部（４０４）で構成される。構成情報設定部（４０１）は結線（１１２）を介して構成情報（１１１）を受信した後、構成情報（１１１）の設定値を内部で保持する。構成情報設定部（４０１）は、内部に不図示のメモリを備えており、構成情報（１１１）の設定値を内部で保持する。
【００４９】
構成情報設定部（４０１）は、結線（４０５）を介してデータ入力部（４０３）へ入力の切り替えのための設定値を送信する。また、構成情報設定部（４０１）は、結線（４０６）を介して演算処理部（４０２）へ処理の内容を決めるための設定値を送信する。更に、構成情報設定部（４０１）は、結線（４０７）を介してデータ出力部（４０４）へ、出力の切り替えのための設定値を送信する。
【００５０】
以下、図４に示した演算器の動作を説明する。
【００５１】
演算器（１０８）は、結線（１１２）を介して送信された構成情報（１１１）を受信する。その後、演算器（１０８）の内部の構成情報設定手段（４０１）によって構成情報（１１１）のＩＤ（２０３）が演算器（１０８）に設定されているＩＤと一致するか判別する。
【００５２】
ＩＤが一致した場合、構成情報設定部（４０１）は構成情報（１１１）で指定されているアドレスにしたがって、構成情報設定部（４０１）の内部のメモリに構成情報（１１１）の設定値（２０５）の書き込みをおこなう。
【００５３】
ＩＤが一致しない場合、構成情報設定部（４０１）は構成情報（１１１）を結線（１１２）に出力する。
【００５４】
演算器（１０８）の内部の構成情報設定部（４０１）は、上記書き込みが完了した後に、データ入力部（４０３）、データ出力部（４０４）、演算処理部（４０２）に設定値（２０５）を送信する。その後、データ入力部（４０３）の入力の切り替え、データ出力部（４０４）の出力の切り替え、演算処理部（４０２）の処理設定が完了する。
【００５５】
この設定によって、データ入力部（４０３）が結線（４０８）に示すいずれかの結線からデータを入力するかが設定され、データ出力部（４０４）が結線（４０９）に示すいずれかの結線のうち、どの結線からデータを出力するかが設定される。
【００５６】
構成情報（１１１）の送信が完了した後、各演算器は演算処理を開始する。各演算器はタスクの実行を開始後、演算器情報取得部（１０５）へ結線（１１４）を介してタスクの実行開始を通知する信号を送信し、タスクの実行を完了後、演算器情報取得部（１０５）へ結線（１１４）を介してタスクの実行完了を通知する信号を送信する。
【００５７】
ここで、図５はルータ（１０９）の内部構成の一例を示した図である。
【００５８】
ルータ（１０９）は、構成情報設定部（５０１）、入出力切り替え部（５０２）で構成する。構成情報設定部（５０１）は結線（１１２）を介して構成情報（１１１）を受信して、内部で構成情報（１１１）を保持する。構成情報設定部（４０１）は、内部に不図示のメモリを備えており、構成情報（１１１）の設定値を内部で保持する。
【００５９】
構成情報設定部（５０１）は入出力切り替え部（５０２）へ入出力の切り替えをするための設定値を送信する。
【００６０】
以下で、図５に示したルータの動作を説明する。
【００６１】
ルータ（１０９）は、結線（１１２）を介して送信された構成情報（１１１）を受信した後、ルータ（１０９）の内部の構成情報設定部（５０１）によって構成情報（１１１）のＩＤ（２０３）がルータ（１０９）に設定されているＩＤと一致するか判別する。
【００６２】
ＩＤが一致した場合、構成情報設定部（５０１）は構成情報（１１１）で指定されているアドレスにしたがって、ルータ（１０９）の内部のメモリに構成情報（１１１）の設定値（２０５）の書き込みをおこなう。
【００６３】
ＩＤが一致しない場合、構成情報設定部（５０１）は構成情報（１１１）を結線（１１２）に出力する。
【００６４】
構成情報設定部（５０１）は上記書き込みが完了した後に、入出力切り替え部（５０３）に設定値（２０５）を送信する。その後、入出力切り替え部（５０２）の入出力の切り替えがおこなわれる。
【００６５】
この設定値によって、入出力切り替え部（５０２）が、結線（５０３）に示したいずれかの結線からデータを入力して、結線（５０４）に示したいずれかの結線からデータを出力するかが設定される。
【００６６】
ここで図６は演算器情報取得部（１０５）の内部で保持する演算器情報の一例を示したものである。本実施形態では、演算器情報取得部（１０５）は内部に図６に示すようなテーブルを保持する。
【００６７】
演算器情報取得部（１０５）は、タスク割り当て部（１０４）から、演算器情報の送信を要求する信号を受信したときに、図６に示す情報を送信する。図６の第１のカラムは、演算器（１０８）に設定されているＩＤである。図６の第２のカラムは、各演算器（１０８）が属している回路ブロックを示すＩＤである。図６の第３のカラムは、各演算器（１０８）が演算処理を実行中であるかを示すフラグである。フラグが１である場合は、演算器（１０８）は演算処理を実行中であり、フラグが０である場合は、演算器（１０８）は演算処理を実行中でないことを示す。図６の第４のカラムは、各演算器（１０８）が実行中のタスクを示すＩＤである。図６の第５のカラムは、各演算器（１０８）の電源オン・オフの状態を示すフラグである。フラグが１である場合は、演算器（１０８）は電源オン状態であり、フラグが０である場合は、演算器（１０８）は電源オフ状態であることを示す。
【００６８】
演算器情報取得部（１０５）は、タスク割り当て部（１０４）から演算器ＩＤとタスクＩＤを受信した後、受信した演算器ＩＤと第１のカラムを順に比較する。演算器情報取得部（１０５）は、受信した演算器ＩＤと第１のカラムが一致したときに、一致した行の第４のカラムの値を変更して、電源制御部（１０２）へ一致した行の第２のカラムの値を送信する。例えば、演算器情報取得部（１０５）がタスク割り当て部（１０４）から演算器ＩＤ２、タスクＩＤ４を受信した場合は、第４のカラムの３番目の行に４を設定する。また、演算器情報取得部（１０５）は第２のカラムの３番目の値を電源制御部（１０２）へ送信する。
【００６９】
また、演算器情報取得部（１０５）は、構成情報生成部（１０６）から演算器（１０８）が処理を開始したことを通知する信号を受信したときに、第３のカラムを１に設定する。例えば、ＩＤが６である演算器（１０８）が処理を開始したときには、第３のカラムの７番目の行の値を１とする。また、構成情報生成部（１０６）から演算器（１０８）が処理を完了したことを通知する信号を受信したときに、第３のカラムの値を０に設定する。例えば、ＩＤが６である演算器（１０８）が処理を完了したときには、第３のカラムの７番目の行の値を０とする。
【００７０】
演算器情報取得部（１０５）は、演算器（１０８）からタスクの実行開始、または完了を通知する信号を受信後、タスク情報取得部（１０３）へ第４のカラムの値を送信する。例えば、演算器情報取得部（１０５）が、演算器ＩＤが１である演算器（１０８）からタスクの実行開始、または完了を通知する信号を受信した場合は、第４のカラムの２番目の行の値をタスク情報取得部（１０３）へ送信する。
【００７１】
ここで図７はタスク情報取得部（１０３）の内部で保持するタスク情報の一例を示したものである。タスク情報取得部（１０３）は、図７に示すようなテーブルを内部で保持する。図７の第１のカラムはタスクＩＤ、第２のカラムはタスクの開始時間、第３のカラムはタスクの完了時間を示す。
【００７２】
タスク情報取得部（１０３）は、演算器情報取得部（１０５）からタスクＩＤを受信後、タスクの実行開始時間を計測する。タスク情報取得部（１０３）は、演算器情報取得部（１０５）から同様のタスクＩＤを再受信した後、タスクの実行完了時間を計測する。例えばタスク情報取得部（１０３）の内部に備えて、タイマーで時間を計測するようにしても良い。なお、タスクの実行開始時間、完了時間を得る方法に限定はなく、例えば見積もりによって得られた処理時間を予めタスク情報取得部（１０３）の内部に設定しておくようにしても良い。
【００７３】
タスク情報取得部（１０３）は、演算器情報取得部（１０５）からタスクＩＤを受信後、受信したタスクＩＤと第１のカラムのタスクＩＤを順に比較する。タスク情報取得部（１０３）は、受信したタスクＩＤと第１のカラムのタスクＩＤが一致したときに、一致した行の第２のカラムと第３のカラムの値を計測したタスクの処理開始時間、完了時間に設定する。
【００７４】
タスク情報取得部（１０３）は、タスク割り当て部（１０４）からタスクＩＤを受信後、受信したタスクＩＤと第１のカラムのタスクＩＤを順に比較する。タスク情報取得部（１０３）は、受信したタスクＩＤと第１のカラムのタスクＩＤが一致したときに、一致した行の第２のカラムと第３のカラムの値をタスク割り当て部（１０４）へ送信する。
【００７５】
ここで図８はタスク割り当て部（１０４）の内部の処理を示すフローチャートである。また、図９はタスク割り当て部（１０４）が内部で生成するテーブルである。図９に示すテーブルは、演算器ＩＤ、回路ブロックＩＤ、使用フラグ、タスクＩＤ、タスクの実行開始時間、完了時間、電源フラグの情報が含まれる。タスクの実行開始時間、完了時間が不定の場合は、図９のテーブルの値はｘとする。なお、タスク割り当て部（１０４）の内部の処理フローは本実施形態に限定するものではなく他の処理フローでも良い。以下でタスク割り当て部（１０４）が実行する処理の内容を図８と図９を用いて説明する。
【００７６】
図８の処理では、タスク割り当て部（１０４）がタスク情報取得部（１０３）からタスク情報を受信後、タスク情報を用いて回路ブロック（１０７ａ）、（１０７ｂ）の電源供給時間が短くなるようなタスク割り当てをおこなう。
【００７７】
ステップＳＴ８０１で、タスク割り当て部（１０４）は演算器情報取得部（１０５）へ演算器情報の送信を要求する信号を送信して、演算器情報取得部（１０５）から図６に示した演算器情報を受信する。次に、タスク割り当て部（１０４）は演算器情報に含まれるタスクＩＤをタスク情報取得部（１０３）へ送信して、タスク情報取得部（１０３）からタスクの処理開始時間と処理完了時間を受信する。次に、タスク割り当て部（１０４）は、タスク情報取得部（１０３）から実行を予定しているタスクの処理開始時間と処理完了時間を受信する。ここで受信するタスクの処理開始時間と処理完了時間は、例えばユーザが予め設定した時間の範囲内にあるものを受信するようにすれば良い。その後、タスク割り当て部（１０４）は図９のようなテーブルを内部で生成する。なお、実行を予定しているタスクに対しては演算器が割り当てられていないため、図９のテーブルの第１のカラムの値は０とする。
【００７８】
ステップＳＴ８０２で、タスク割り当て部（１０４）は図９のテーブルを参照して、演算器ＩＤが０であるタスクの処理開始時間のうち最も処理開始時間が早いタスクのタスクＩＤをリスト化し、第１のタスクＩＤリストを生成する。また、タスク割り当て部（１０４）はリスト化したタスクの処理開始時間を記憶する。
【００７９】
ステップＳＴ８０３で、タスク割り当て部（１０４）は電源オン状態である演算器（１０８）のなかに、ステップＳＴ８０２で取得した処理開始時間にタスクが割り当てられていないものがあるか判定する。以下、タスクが割り当てられていない演算器（１０８）を空き演算器と呼ぶ。タスク割り当て部（１０４）は図９のテーブルを参照して、電源フラグが１であるタスクの処理完了時間を取得する。タスク割り当て部（１０４）は、取得したタスクの処理完了時間が、ステップＳＴ８０２で記憶した処理開始時間よりも早い場合に空き演算器があると判定する。また、タスク割り当て部（１０４）は、取得したタスクの処理完了時間が、ステップＳＴ８０２で記憶したタスクの処理開始時間よりも遅い場合に空き演算器がないと判定する。判定した結果、空き演算器があれば、ステップＳＴ８０５の処理に進む。判定した結果、空き演算器がなければ、ステップＳＴ８０４の処理に進む。
【００８０】
ステップＳＴ８０４で、タスク割り当て部（１０４）は電源オフ状態である演算器（１０８）のうち、ステップＳＴ８０２で取得した処理開始時間にタスクが割り当てられていないものがあるか判定する。タスク割り当て部（１０４）は図９のテーブルを参照して、電源フラグが０であるタスクの処理完了時間を取得する。タスク割り当て部（１０４）は、取得したタスクの処理完了時間が、ステップＳＴ８０２で記憶した処理開始時間よりも早い場合に空き演算器があると判定する。また、タスク割り当て部（１０４）は、取得したタスクの処理完了時間が、ステップＳＴ８０２で記憶したタスクの処理開始時間よりも遅い場合に空き演算器がないと判定する。判定した結果、空き演算器があれば、ステップＳＴ８０５の処理に進む。判定した結果、空き演算器がなければ、タスク割り当ての処理を終了する。
【００８１】
ステップＳＴ８０５で、タスク割り当て部（１０４）は図９のテーブルの中から空き演算器が属している回路ブロックＩＤを選択する。
【００８２】
ステップＳＴ８０６で、タスク割り当て部（１０４）はステップＳＴ８０５で選択した回路ブロックＩＤが複数存在するか判定する。判定した結果、回路ブロックＩＤが複数存在する場合はステップＳＴ８０７の処理に進み、回路ブロックＩＤが複数存在しない場合はステップＳＴ８０９の処理に進む。
【００８３】
ステップＳＴ８０７で、タスク割り当て部（１０４）はステップＳＴ８０５で選択した回路ブロックＩＤのリストを生成する。
【００８４】
ステップＳＴ８０８で、タスク割り当て部（１０４）はステップＳＴ８０７で生成した回路ブロックＩＤのリストの中から、タスク割り当て先となる回路ブロックのＩＤを一つ選択する。ステップＳＴ８０８の処理の詳細については後述する。
【００８５】
ステップＳＴ８０９で、タスク割り当て部（１０４）は図９のテーブルからタスクＩＤが設定されている行から回路ブロックＩＤを取得して、回路ブロックＩＤのリストに追加する。
【００８６】
ステップＳＴ８１０で、タスク割り当て部（１０４）はステップＳＴ８０９の直前に選択した回路ブロックを回路ブロックＩＤのリストから除外する。
【００８７】
ステップＳＴ８１１で、タスク割り当て部（１０４）は回路ブロック間でタスクの交換をおこない、タスクを割り当てる回路ブロックを設定する。ステップＳＴ８１１の処理の詳細については後述する。
【００８８】
ステップＳＴ８１２で、タスク割り当て部（１０４）は図９のテーブルの処理開始時間を参照して、ステップＳＴ８０２で記憶した処理開始時間の後に実行するタスクがあるかを判定する。判定の結果、次に実行するタスクがあれば、タスク割り当て部（１０４）はステップＳＴ８０２の処理を再実行する。また、判定の結果、次に実行するタスクがなければ、タスク割り当て部（１０４）はタスク割り当ての処理を終了する。
【００８９】
タスク割り当て部（１０４）は、タスク割り当ての処理を終了した後、タスク割り当てを変更する前後の演算器ＩＤを構成情報生成部（１０６）へ送信する。更に、タスク割り当て部（１０４）は、タスク割り当てを変更する前後の演算器ＩＤとタスクＩＤを演算器情報取得部（１０５）へ送信する。
【００９０】
なお、演算器（１０８）でタスクを実行する際に、他の演算器（１０８）からデータを送受信する場合がある。この場合、タスク割り当て部（１０４）は、ステップＳＴ８０３、ステップＳＴ８０４で空き演算器であると判定した演算器（１０８）が、データを送受信する演算器（１０８）と通信できる位置にあるかを判定する。例えば、空き演算器が複数ある場合に、データの送信元である演算器（１０８）がデータを出力する位置にある空き演算器を選択するようにすれば良い。
【００９１】
以下で、ステップＳＴ８０８の詳細な処理を説明する。
【００９２】
ここで図１０はステップＳＴ８０８の詳細な処理を示すフローチャートである。
【００９３】
ステップＳＴ１００１で、タスク割り当て部（１０４）は図９のテーブルを参照して、ステップＳＴ８０２で生成したタスクＩＤのリストの中から、最も処理完了が早いタスクのタスクＩＤを一つ選択する。
【００９４】
ステップＳＴ１００２で、タスク割り当て部（１０４）は回路ブロックＩＤのリストに含まれる回路ブロックに対して、回路ブロック内に割り当てられているタスクが全て完了する時間を判定する。タスク割り当て部（１０４）は、回路ブロックＩＤのリストのＩＤを順次選択して、図９のテーブルを参照して、回路ブロックＩＤに対応するタスクの処理完了時間を取得する。その後、タスク割り当て部（１０４）は、取得したタスクの処理完了時間のうち、最も遅い処理完了時間を回路ブロック内に割り当てられているタスクが全て完了する時間と判定する。
【００９５】
ステップＳＴ１００３で、タスク割り当て部（１０４）は回路ブロックＩＤのリストに含まれる回路ブロックに対して、ステップＳ１００１で選択したタスクの処理完了時間とステップＳＴ１００２で判定した時間の差を算出する。例えば、ステップＳＴ１００２で判定した時間から、ステップＳ１００１で選択したタスクの処理完了時間を引き算すれば良い。
【００９６】
ステップＳＴ１００４で、ステップＳＴ１００３で算出した結果を基に、ステップＳＴ１００１で選択したタスクを割り当てる回路ブロックを設定する。本実施形態では、ステップＳＴ１００４で、ステップＳＴ１００３の算出結果で正の値となったものがあれば、正の値となったもののうち、絶対値が最小である回路ブロックにステップＳＴ１００１で選択したタスクを割り当てる。また、ステップＳＴ１００３の算出結果で正の値のものがなければ、絶対値が最小となった回路ブロックにステップＳＴ１００１で選択したタスクを割り当てる。
【００９７】
ステップＳＴ１００５で、タスク割り当て部（１０４）はステップＳＴ１００１で選択したタスクＩＤを第１のタスクＩＤリストから除外する。
【００９８】
ステップＳＴ１００６で、タスク割り当て部（１０４）は第１のタスクＩＤリストが空であるか判定する。タスク割り当て部（１０４）は第１のタスクＩＤリストが空である場合に、図１０の処理を終了する。タスク割り当て部（１０４）は第１のタスクＩＤリストが空でない場合に、ステップＳ１００１の処理を再実行する。
【００９９】
ここで図１１はステップＳＴ８１１の詳細な処理を示すフローチャートである。以下、ステップＳＴ８１１の詳細な処理を説明する。図１１に示すフローチャートは、タスク割り当て部（１０４）が回路ブロック（１０７ａ）（１０７ｂ）で消費するリーク電力が少なくなるよう、タスクの割り当て先を網羅的に探索して、タスクを割り当てる処理を示す。
【０１００】
ステップＳＴ１１０１で、タスク割り当て部（１０４）は第１のタスクＩＤのリストから任意のタスクＩＤを一つ選択する。
【０１０１】
ステップＳＴ１１０２で、タスク割り当て部（１０４）は図８のステップＳＴ８０７で生成した回路ブロックＩＤのリストの中から任意のＩＤを一つ選択する。
【０１０２】
ステップＳＴ１１０３で、タスク割り当て部（１０４）はステップＳＴ１１０１で選択した回路ブロックＩＤに対応するタスクＩＤを図９のテーブルから取得してリスト化し、第２のタスクＩＤリストを生成する。
【０１０３】
ステップＳＴ１１０４で、タスク割り当て部（１０４）はステップＳＴ１１０２で生成した第２のタスクＩＤリストから任意のタスクＩＤを一つ選択する。
【０１０４】
ステップＳＴ１１０５で、タスク割り当て部（１０４）は図９のテーブルに対して、ステップＳＴ１１０１で選択したタスクＩＤに対応する回路ブロックＩＤと、ステップＳＴ１１０４で選択したタスクＩＤに対応する回路ブロックＩＤの交換をおこなう。
【０１０５】
ステップＳＴ１１０６で、タスク割り当て部（１０４）はステップＳＴ１１０５の処理をおこなった後、ステップＳＴ１１０１で選択した回路ブロックＩＤに対応するタスクを選択する。次に、タスク割り当て部（１０４）は選択したタスクの中で処理開始時間が最も早いものを選択し、処理開始時間Ｔｓを取得する。また、タスク割り当て部（１０４）は選択したタスクの中で処理完了時間が最も遅いものを選択し、処理完了時間Ｔｆを取得する。その後、タスク割り当て部（１０４）は処理完了時間Ｔｆと処理開始時間Ｔｓの差Ｔ１を算出する。
【０１０６】
ステップＳＴ１１０７で、タスク割り当て部（１０４）はステップＳＴ１１０５の処理をおこなった後、ステップＳＴ８０９の直前に選択した回路ブロックＩＤに対応するタスクを選択する。その後、タスク割り当て部（１０４）はステップＳＴ１１０６と同様にして、処理完了時間Ｔｆと処理開始時間Ｔｓの差Ｔ２を算出する。
【０１０７】
ステップＳＴ１１０８で、タスク割り当て部（１０４）はステップＳＴ１１０６で算出した時間Ｔ１とステップＳＴ１１０７で算出した時間Ｔ２を加算する。
【０１０８】
ステップＳＴ１１０９で、タスク割り当て部（１０４）はステップＳＴ１１０３で選択したタスクを第２のタスクＩＤリストから除外する。
【０１０９】
ステップＳＴ１１１０で、タスク割り当て部（１０４）は第２のタスクＩＤリストの中が空であるか判定する。判定の結果、第２のタスクＩＤリストが空であればタスク割り当て部（１０４）はステップＳＴ１１１１の処理に進む。判定の結果、第２のタスクＩＤリストが空でなければタスク割り当て部（１０４）はステップＳＴ１１０４の処理を再実行する。つまり、タスク割り当て部（１０４）は、第２のタスクＩＤリストに格納されているタスクＩＤに対して、ステップＳＴ１１０４からステップＳＴ１１１０までの処理を繰り返し実行する。
【０１１０】
ステップＳＴ１１１１で、タスク割り当て部（１０４）はステップＳＴ１１０８で算出した時間Ｔ１＋Ｔ２を比較して、最小となった割り当て結果を保持する。
【０１１１】
ステップＳＴ１１１２で、タスク割り当て部（１０４）はステップＳＴ１１０２で選択した回路ブロックＩＤを回路ブロックＩＤのリストから除外する。
【０１１２】
ステップＳＴ１１１３で、タスク割り当て部（１０４）は回路ブロックＩＤのリストが空であるかを判定する。判定の結果、回路ブロックＩＤのリストが空であればステップＳＴ１１１４の処理に進み、回路ブロックＩＤのリストが空でなければステップＳＴ１１０２の処理を再実行する。つまり、タスク割り当て部（１０４）は、回路ブロックＩＤのリストに格納されている回路ブロックに対して、ステップＳＴ１１０２からステップＳＴ１１１３までの処理を繰り返し実行する。
【０１１３】
ステップＳＴ１１１４で、タスク割り当て部（１０４）はステップＳＴ１１０８で保持した値をそれぞれ比較し、値が最小となったタスクＩＤと回路ブックＩＤの設定を保持する。
【０１１４】
ステップＳＴ１１１５で、タスク割り当て部（１０４）はステップＳＴ１１０１で選択したタスクＩＤを第１のタスクＩＤリストから除外する。
【０１１５】
ステップＳＴ１１１６で、タスク割り当て部（１０４）は第１のタスクＩＤリストが空であるかを判定する。判定の結果、第１のタスクＩＤリストが空であればＳＴ８１１の処理を終了し、空でなければステップＳＴ１１０１の処理を再実行する。つまり、タスク割り当て部（１０４）は、第１のタスクＩＤリストに格納されているタスクＩＤに対して、ステップＳＴ１１０１からステップＳＴ１１１６までの処理を繰り返し実行する。
【０１１６】
以上のようにして、タスク割り当て部（１０４）は回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）で消費するリーク電力が少なくなるよう、タスクの割り当て先を網羅的に探索していき、タスクを割り当てる回路ブロックを設定する。
【０１１７】
ここで図１２は、タスク割り当て部（１０４）が割り当てるタスクの一例を示したものである。以下、図１２を用いて、タスク割り当て部（１０４）が図１０の処理によって、タスクを割り当てる回路ブロックを設定する動作を具体的に説明する。
【０１１８】
図１２（ａ）のタスクは実行中であるタスクの処理開始時間と完了時間を示す。図１２（ａ）に示すタスク（１２０１）〜（１２０４）は回路ブロック（１０７ａ）内の演算器（１０８）で処理実行中であり、タスク（１２０５）〜（１２０７）は回路ブロック（１０７ｂ）内の演算器（１０８）で処理実行中である。回路ブロック（１０７ａ）内の４つの演算器（１０８）は全てタスクを実行中である。回路ブロック（１０７ｂ）内の３つの演算器（１０８）はタスクを実行中であり、１つは空き演算器である。
【０１１９】
また、図１２（ｂ）のタスクは図１２（ａ）のタスクよりも後に実行するタスクの処理開始時間と完了時間を示す。以下、図８、図１２を用いて、タスク割り当て部（１０４）の具体的な動作を説明する。
【０１２０】
タスク割り当て部（１０４）はステップＳＴ８０２で図１２（ｂ）のタスクに対応するタスクＩＤのリスト化して、第１のタスクＩＤリストを生成する。また、タスク割り当て部（１０４）は、図８のステップＳＴ８０１〜ＳＴ８０７までの処理をおこない、回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）のＩＤを選び、回路ブロックＩＤのリストを生成する。
【０１２１】
タスク割り当て部（１０４）は図１０の処理で図１２（ｂ）のタスクを割り当てる回路ブロックを設定する。以下、図１０、図１２を用いて、図１０に示すタスク割り当て部（１０４）の具体的な動作を順に説明する。
【０１２２】
ステップＳＴ１００１で、タスク割り当て部（１０４）は図１２（ｂ）のタスクのうち最も処理完了時間が早いタスク（１２１０）を選択する。
【０１２３】
ステップＳＴ１００２で、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）に対して、回路ブロック内のタスクが全て完了する時間を判定する。図１２（ａ）で示す例では、回路ブロック（１０７ａ）内のタスクが全て完了する時間はＴ１であり、回路ブロック（１０７ｂ）内のタスクが全て完了する時間はＴ２である。
【０１２４】
ステップＳＴ１００３で、タスク割り当て部（１０４）はステップＳＴ１００１で選択したタスク（１２１０）の処理完了時間Ｔ３と、ステップＳＴ１００２で判定した時間Ｔ１、Ｔ２の差を算出する。タスク（１２１０）の処理完了時間とＴ１の差はＴ１−Ｔ３であり、タスク（１２１０）の処理完了時間とＴ２の差はＴ２−Ｔ３である。算出した結果、Ｔ１−Ｔ３＞０、Ｔ２−Ｔ３＜０であるため、差が正の値となった同一の回路ブロック（１０７ａ）をタスク（１２１０）の割り当て先とする。
【０１２５】
ステップＳＴ１００４で、ステップＳ１００１で選択したタスクのＩＤを第１のタスクＩＤリストから削除する。
【０１２６】
ステップＳＴ１００５で、タスク割り当て部（１０４）は第１のタスクＩＤのリストが空であるかを判定する。判定した結果、タスクＩＤのリストが空であれば図１０の処理を終了する。判定した結果、タスクＩＤのリストが空でなければステップＳＴ１００１の処理を再実行する。すなわち、タスク割り当て部（１０４）は図１２（ｂ）のタスク全てに対してステップＳＴ１００１〜ＳＴ１００６の処理を実行し、タスク（１２１０）〜（１２１２）を割り当てる回路ブロックを設定する。
【０１２７】
以上のようにして、タスク割り当て部（１０４）は図１２に示したタスクを割り当てる回路ブロックを設定する。
【０１２８】
ここで図１３は図１１の処理の具体的な動作例を示したものである。以下、図１３を用いて、タスク割り当て部（１０４）が図１１の処理によって、タスクを割り当てる回路ブロックを設定する動作を具体的に説明する。
【０１２９】
図１３に示すように、ステップＳＴ８０１〜ＳＴ８１０を実行した結果、図１３（ａ）のようなタスク割り当てになっているものとする。すなわち、タスク（１３０１）〜（１３０４）は回路ブロック（１０７ａ）に割り当てられ、タスク（１３０５）〜（１３０８）は回路ブロック（１０７ｂ）に割り当てられている状態である。また、回路ブロックＩＤのリストには、回路ブロック（１０７ａ）のＩＤのみが含まれている状態である。
【０１３０】
以下、図１３を用いて、図１１の処理の内容を具体的に説明する。図１１の処理では、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）に割り当てられているタスクの交換を繰り返し、双方の回路ブロックが電源オン状態である時間を少なくなるようにする。以下に説明する処理は、全てタスク割り当て部（１０４）の内部で実行される。
【０１３１】
ステップＳＴ１１０１で、任意のタスクのタスクＩＤを選択する。ここでは、タスク（１３０５）のタスクＩＤを選択する。
【０１３２】
ステップＳＴ１１０２で、回路ブロック（１０７ａ）の回路ブロックＩＤを選択する。
【０１３３】
ステップＳＴ１１０３で、回路ブロック（１０７ａ）内のタスク（１３０１）〜（１３０４）のタスクＩＤのリスト（第２のタスクＩＤリスト）を生成する。
【０１３４】
ステップＳＴ１１０４で、ステップＳＴ１１０３で生成した第２のタスクＩＤリストの中から任意のタスクＩＤを選択する。ここでは、タスク（１３０１）を選択する。
【０１３５】
ステップＳＴ１１０５で、ステップＳＴ１１０１で選択したタスク（１３０５）と、ステップＳＴ１１０４で選択したタスク（１３０１）を交換する。タスク交換した結果を図１３（ｂ）に示す。
【０１３６】
ステップＳＴ１１０６で、タスク交換後の回路ブロック（１０７ａ）内のタスクの処理開始時間のうち最も早いＴｓと、処理完了時間のうち最も遅いＴｆの差Ｔｄを算出する。
【０１３７】
ステップＳＴ１１０７で、タスク交換後の回路ブロック（１０７ｂ）内のタスクの処理開始時間のうち最も早いＴｓと、処理完了時間のうち最も遅いＴｆの差Ｔｄを算出する。
【０１３８】
ステップＳＴ１１０８で、ステップＳＴ１１０６で算出したＴｄとステップＳＴ１１０７で算出したＴｄの合計値Ｔｔを算出する。
【０１３９】
ステップＳＴ１１０９で、ステップＳＴ１１０４で選択したタスク（１３０１）のＩＤを第２のタスクＩＤリストから除外する。
【０１４０】
ステップＳＴ１１０４〜Ｓ１１１０を、タスク（１３０１）〜（１３０４）に対して実行する。つまり、タスク（１３０１）〜（１３０４）とタスク（１３０５）の交換を繰り返して、全てのタスク交換のパターンについてＴｔを算出する。
【０１４１】
ステップＳＴ１１１１で、ステップＳＴ１１０８で算出したＴｔを比較し、Ｔｔが最小になったタスクの交換結果を記憶する。この場合、Ｔｔが最小となるタスクの交換結果は図１３（ｂ）に示したものとなる。
【０１４２】
ステップＳＴ１１１２で、回路ブロックＩＤのリストから回路ブロック（１０７ａ）のＩＤを削除する。したがって、回路ブロックＩＤのリストは空となる。
【０１４３】
ステップＳＴ１１１３で、回路ブロックＩＤのリストは空であるので、ステップＳＴ１１１４の処理に進む。
【０１４４】
ステップＳＴ１１０２〜ＳＴ１１１３を、回路ブロックＩＤのリストが空になるまで繰り返し実行する。図１３の例では、回路ブロックＩＤのリストには、回路ブロック（１０７ａ）だけが含まれるので、ＳＴ１１０２〜ＳＴ１１１３の処理を１回だけ実行する。
【０１４５】
ステップＳＴ１１１４では、ステップＳＴ１１１１で記憶したＴｔをそれぞれ比較する。図１３の例では、ステップＳＴ１１１１で記憶したＴｔは一つだけであるので、ステップＳＴ１１１１で記憶したタスクＩＤと演算器ＩＤの設定を記憶する。
【０１４６】
ステップＳＴ１１１５では、ステップＳＴ１１０１で選択したタスク（１３０３）のタスクＩＤを第１のタスクＩＤリストから除外する。このとき、第１のタスクＩＤリストにはタスク（１３０６）〜（１３０８）のタスクＩＤが格納されている状態となる。したがって、ステップＳＴ１１６では、第１のタスクＩＤリストは空ではないと判定する。よって、ステップＳＴ１１０１以降の処理を再実行する。つまり、第１のタスクＩＤリストに格納されているタスク（１３０５）〜（１３０８）のタスクＩＤに対して図１１の処理を繰り返し実行する。図１１の処理を実行した結果、タスク割り当ては図１３（ｃ）のようになる。
【０１４７】
以上のようにして、タスク割り当て部（１０４）は、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）が電源オン状態である時間が少なくなるようなタスクの割り当てを実行する。これにより、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）で消費されるリーク電力を小さくすることができる。
【０１４８】
ここで図１４は構成情報生成部（１０６）の内部で再生成する構成情報の具体例を示したものである。図１４（ａ）は構成情報生成部（１０６）によって再生成する前の構成情報（１１１）を示す。図１４（ｂ）は構成情報生成部（１０６）によって再生成した後の構成情報を示す。
【０１４９】
構成情報生成部（１０６）は、データ処理装置（１００）の外部から構成情報（１１１）を受信し、タスク割り当て部（１０４）からタスク割り当ての変更前後の演算器ＩＤを受信する。その後、構成情報生成部（１０６）は、構成情報（１１１）に含まれる演算器ＩＤをタスク割り当て変更後のＩＤに変更して、構成情報（１１１）を再生成する。すなわち、構成情報生成部（１０６）は図１４（ａ）に示す構成情報（１１１）のＩＤを図１４（ｂ）に示す構成情報（１１１）のＩＤに変更する。図１５に構成情報（１１１）のＩＤと演算器（１０８）の対応の一例を示す。構成情報（１１１）のＩＤを変更前は、図１４（ａ）のＩＤ設定にしたがい、回路ブロック（１０７ａ）に構成情報（１１１）の設定値が反映される。また、構成情報（１１１）のＩＤを変更後は、図１４（ｂ）のＩＤ設定にしたがい、回路ブロック（１０７ｂ）に構成情報（１１１）の設定値が反映される。
【０１５０】
次に、構成情報生成部（１０６）はタスク割り当て変更後の演算器間のデータ送受信の経路を特定して、ルータ（１０９）の設定を変更する。例えば、次のような処理を構成情報生成部（１０６）が実行するようにすれば良い。構成情報生成部（１０６）は構成情報（１１１）のＩＤを変更後、データを送受信する演算器のＩＤを構成情報（１１１）に含まれる演算器（１０８）、ルータ（１０９）の設定値から検出する。次に構成情報生成部（１０６）は、演算器間のデータ送受信の経路上にあるルータ（１０９）を選び、演算器間でデータ送受信をする経路に沿ってルータ（１０９）の設定値を変更する。
【０１５１】
以上のようにしてデータ処理装置（１００）を構成することにより、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）に電源供給する時間が少なくなるように回路ブロック内の演算器（１０８）にタスクを割り当てることができる。したがって、本提案手法により、データ処理装置（１００）で消費するリーク電力を削減することができる。
【０１５２】
＜構成情報生成装置の構成と動作＞
以下では、本実施形態のデータ処理装置（１００）に入力する構成情報（１１１）を生成する構成情報生成装置（１６００）について説明する。
【０１５３】
図１６は、データフローからデータフローへ処理を切り替えるための構成情報（１１１）を生成するための装置のブロック構成図を示している。
【０１５４】
１６０１は装置全体の制御を司るＣＰＵである。
【０１５５】
１６０２はブートプログラムやＢＩＯＳを記憶しているＲＯＭ、１６０３はＣＰＵ（１６０１）のワークエリアとして利用され、且つ、ＯＳ（オペレーティングシステム）、アプリケーションを格納するためのＲＡＭである。
【０１５６】
１６０４はＯＳ、構成情報（１１１）を作成するためのアプリケーション、ならびに、様々なデータを格納するためのハードディスクドライブ（ＨＤＤ）である。
【０１５７】
１６０５はキーボード、１６０６はマウスであり、ユーザインタフェースとして機能する。１６０７は内部にビデオメモリ及び表示コントローラを内蔵する表示制御部であり、１６０８は表示制御部（１６０７）からの映像信号を受信し、表示するための表示装置である。
【０１５８】
１６０９は各種外部デバイスと通信するインタフェースであり、例えば、図１８に示した外部メモリ（１６１０）を接続することで、本装置が作成した構成情報（１１１）をその外部メモリ（１６１０）に書き込むことになる。
【０１５９】
以下、図１６に示した構成情報生成装置（１６００）の動作を説明する。
【０１６０】
構成情報生成装置（１６００）に電源が投入されると、ＣＰＵ（１６０１）はＲＯＭ（１６０２）に格納されたブートプログラムを実行し、ＨＤＤ（１６０４）に格納されたＯＳをＲＡＭにロードする。その後、構成情報（１１１）を作成するアプリケーションを起動することで、本装置が構成情報作成装置として機能することになる。
【０１６１】
本装置で作成した構成情報（１１１）は、外部メモリ（１６１０）に書き込まれる。
【０１６２】
＜半導体装置の構成と動作＞
図１７に、本実施形態のデータ処理装置（１００）を搭載した半導体装置（１６１２）の構成例を示す。半導体装置（１６１２）の構成は、本実施形態に限定するものではなく他の構成でも良い。
【０１６３】
図１７の半導体装置（１６１２）は、再構成デバイス（１７００）と外部メモリ（１７０５）で構成される。再構成デバイス（１７００）は、データ処理装置（１００）、ＣＰＵ（１７０１）、バス（１７０２）、Ｉ／Ｆ（１７０３）、Ｉ／Ｏ（１７０４）で構成される。
【０１６４】
図中、１７０１は再構成デバイス全体の制御を司るＣＰＵである。１７０５は構成情報（１１１）、ブートプログラム、ＯＳ（オペレーティングシステム）、アプリケーションを格納するためのメモリ（ＲＯＭ／ＲＡＭ）である。
【０１６５】
ここで、図１８は外部メモリ（１７０５）の内部で保持している構成情報の配置を示す。
【０１６６】
図１８に示すように、各構成情報は構成情報の切り替え順に従って、外部メモリ（１７０５）の上位アドレスから順番に格納されている。
【０１６７】
１８０１は第１のデータ処理を実現するための第１の構成情報であり、１８０２は第２のデータ処理を実現するための第２の構成情報である。
【０１６８】
第１の構成情報（１８０１）は、第１のアドレス領域（１８０３）に保持され、第２の構成情報（１８０２）は、第２のアドレス領域（１８０４）に保持される。なお図１８に示した構成情報の配置方法は、本実施形態に限定するものではなく、他の方法でも良い。
【０１６９】
１７０３は外部メモリ（１７０７）と通信するインタフェースである。１７０４は再構成デバイス（１７００）が構成情報（１１１）や処理対象となるデータ（画像データ等）を入出力するためのインタフェースである。１７０２はＣＰＵ（１７０１）、データ処理装置（１００）、Ｉ／Ｆ（１７０３）、Ｉ／Ｏ（１７０４）との間で通信をするためのバスである。
【０１７０】
以下、図１７の半導体装置の動作を説明する。
【０１７１】
本装置に電源が投入されると、ＣＰＵ（１７０１）は外部メモリ（１７０５）に格納されたブートプログラムを実行し、システムを起動する。次に、ＣＰＵ（１７０１）はＩ／Ｏ（１７０４）から構成情報（１１１）の読み込みをして、外部メモリ（１７０５）へ構成情報（１１１）を格納するよう指示する。ＣＰＵ（１７０１）は、外部メモリ（１７０５）に構成情報（１１１）を格納した後、構成情報（１１１）の読み出しをデータ処理装置（１００）に指示する。
【０１７２】
データ処理装置（１００）は、外部メモリ（１７０５）へ構成情報（１１１）の読み出しの要求をして、バス（１７０２）を介して外部メモリ（１７０５）から構成情報（１１１）を受信する。構成情報（１１１）は、第１の構成情報（１６０１）、第２の構成情報（１６０２）という順番で読み込まれる。
【０１７３】
以降、データ処理装置（１００）の内部で、構成情報（１１１）に沿った処理の割り当てがおこなわれる。処理の割り当てが完了した後、Ｉ／Ｏ（１７０４）から処理対象データが入力され、データ処理装置（１００）の内部でデータ処理が実行される。
【０１７４】
本提案のデータ処理装置（１００）は、第１の構成情報（１８０１）から順番に読み込んでいき、動的再構成回路（１０１）の動作を切り替える。
【０１７５】
［実施形態２］
実施形態１では、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）を処理性能と消費電力が同等である演算器（１０８）で構成する実施形態を示したが、図１９に示すように各回路ブロックを処理性能と消費電力が異なる演算器で構成しても良い。
【０１７６】
図１９に示すデータ処理装置（１００）は、回路ブロック（１０７ａ）を処理性能が高く、消費電力が大きい第１の演算器（１９０１）で構成し、回路ブロック（１０７ｂ）を処理性能が低く、消費電力が小さい第２の演算器（１９０２）で構成する。他の構成は、実施形態１で示したデータ処理装置（１００）と同様である。本実施形態では、回路ブロックは２つとしているが、回路ブロックの数を３つ以上としても良い。
【０１７７】
以下、図１９に示す回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）に電源供給する時間が少なくなるようにタスクを割り当てるときのデータ処理装置（１００）の動作を説明する。図１９のデータ処理装置（１００）は、タスク割り当て部（１０４）以外のブロックの動作は、実施形態１で示したデータ処理装置（１００）と同様である。以下、図１９のデータ処理装置（１００）におけるタスク割り当て部（１０４）の動作を説明する。
【０１７８】
本実施形態におけるタスク割り当て部（１０４）の動作は、図８に示したステップＳＴ８０８とステップＳＴ８１１を除き、実施形態１と同様である。
【０１７９】
本実施形態におけるタスク割り当て部（１０４）は、図８に示したステップＳＴ８０８とステップＳＴ８１１で、タスクを第１の演算器（１９０１）で実行する場合と第２の演算器（１９０２）で実行する場合の２通りのタスクの実行完了時間を取得する。なお、演算器の種類は２つに限定する必要はなく、演算器の種類を３つ以上としても良い。その場合は、図８に示したステップＳＴ８０８とステップＳＴ８１１で、演算器の種類に対応する数のタスクの実行完了時間を取得すれば良い。
【０１８０】
ここで、図２０は図１９のタスク割り当て部（１０４）の具体的な動作例を示したものである。以下、図２０を用いてタスク割り当て部（１０４）の動作を説明する。
【０１８１】
図２０（ａ）は、タスク割り当て部（１０４）がタスク割り当てを実行する前の状態を示す。図２０（ａ）に示すように、回路ブロック（１０７ａ）にはタスク（２００１）〜（２００３）が割り当てられており、回路ブロック（１０７ｂ）にはタスク（２００４）〜（２００６）が割り当てられており、各タスクは実行中の状態である。回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）には、それぞれ一つの空き演算器がある状態である。
【０１８２】
また、タスク割り当て部（１０４）が図８の処理でステップＳＴ８０７まで実行した結果、第１のタスクＩＤリストには次に実行するタスク（２００７）のＩＤが格納されている状態である。回路ブロックＩＤのリストには、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）のＩＤが含まれている状態である。
【０１８３】
タスク割り当て部（１０４）は、図８のステップＳＴ８０８の処理でタスク（２００７）を回路ブロック（１０７ａ）、回路ブロック（１０７ｂ）のどちらに割り当てるかを選択する。以下、図１０と図２０を用いて、タスク割り当て部（１０４）の動作を説明する。
【０１８４】
ステップＳＴ１００１では、第１のタスクＩＤリストからタスク（２００７）のＩＤを選択する。
【０１８５】
ステップＳＴ１００２では、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）内でタスクが全て完了する時間を判定する。図２０（ａ）に示すように、回路ブロック（１０７ａ）内でタスクが全て完了する時間はＴａであり、回路ブロック（１０７ｂ）内でタスクが全て完了する時間はＴｂである。
【０１８６】
ステップＳＴ１００３では、回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）に対して、タスク（２００７）の処理完了時間をそれぞれ取得する。つまり、タスク（２００７）を回路ブロック（１０７ａ）内の第１の演算器（１９０１）で実行する場合の処理完了時間と、タスク（２００７）を回路ブロック（１０７ｂ）内の第２の演算器（１９０２）で実行する場合の処理完了時間をそれぞれ取得する。タスク（２００７）を第１の演算器（１９０１）、第２演算器（１９０２）で実行する場合の処理時間を図２０（ｂ）、図２０（ｃ）に示す。図２０（ｂ）に示すように、タスク（２００７）を第２の演算器（１９０２）で実行する場合、処理完了時間はＴｂ’となる。また、図２０（ｃ）に示すように、タスク（２００７）を第１の演算器（１９０１）で実行する場合、処理完了時間はＴａ’となる。次に、ステップＳＴ１００２で判定した時間Ｔａと先に取得したＴａ’の差、ステップＳＴ１００２で判定した時間Ｔｂと先に取得したＴｂ’の差を算出する。
【０１８７】
ステップＳＴ１００４では、ステップＳＴ１００３で算出した結果を基にタスク（２００７）を回路ブロック（１０７ａ）と回路ブロック（１０７ｂ）のどちらかに割り当てる。図２０の例では、ステップＳＴ１００３で算出した結果はＴａ’−Ｔａ＜０、Ｔｂ’−Ｔｂ＞０であるため、タスク（２００７）を回路ブロック（１０７ｂ）に割り当てる。なお、回路ブロック（１０７ａ）（１０７ｂ）で消費するリーク電力が異なる場合は、回路ブロック（１０７ａ）にタスク（２００７）を割り当てた場合のリーク電力と、回路ブロック（１０７ｂ）にタスク（２００７）を割り当てた場合のリーク電力を算出する。例えば、回路ブロックごとに単位時間あたりに消費するリーク電力値を予めタスク割り当て部（１０４）の内部に設定しておき、単位時間あたりに消費するリーク電力値にタスクの実行時間を乗算するようにすれば良い。タスクの実行時間は、図２０（ｂ）、図２０（ｃ）に示すように各回路ブロックで各々の回路ブロックごとに最も処理開始が早いタスクの処理開始時間と最も処理完了が遅いタスクの処理完了時間の差Ｔｄとする。
【０１８８】
以降、ステップＳＴ１００５、ステップＳＴ１００６の処理は実施形態１と同様である。
【０１８９】
図１１のＳＴ１１０６〜ＳＴ１１０８についても、同様の処理を追加すれば良い。
【０１９０】
以上のようにして、回路ブロックを処理性能と消費電力が異なる演算器で構成した場合でも、本提案手法によりデータ処理装置（１００）が消費するリーク電力を削減することができる。
【０１９１】
［実施形態３］
実施形態１では、タスクを割り当てる演算器（１０８）が固定されてない場合の実施形態を示したが、タスクを割り当てる演算器（１０８）が固定されている場合にも本提案を適用することができる。以下に、その実施形態を示す。
【０１９２】
以下に示す実施形態は、タスク情報取得部（１０３）とタスク割り当て部（１０６）の内部処理のみが実施形態１と異なる。タスク情報取得部（１０３）とタスク情報取得部（１０４）の内部処理を除く部分は実施形態１と同様である。
【０１９３】
以下で、本実施形態におけるタスク情報取得部（１０３）の内部処理を説明する。ここで、図２１はタスク情報取得部（１０３）の内部で保持するタスク情報の一例である。本実施形態では、実施形態１で示したタスク情報に演算器ＩＤのカラムを加える。この演算器ＩＤは、予め割り当てるタスクが決められている演算器（１０８）のＩＤを示す。図２１に示す例では、演算器ＩＤが６である演算器（１０８）に、タスクＩＤが３であるタスクが予め割り当てられている。また、演算器ＩＤが０であるタスクＩＤは、タスクを割り当てる演算器（１０８）を任意に設定できる。なお、この演算器ＩＤは、データ処理装置（１００）を動作させる前にユーザによって設定しておけば良い。
【０１９４】
タスク情報取得部（１０３）は、タスク割り当て部（１０６）からタスク情報の送信を要求する信号を受信した後、図２１に示すタスク情報を送信する。
【０１９５】
以下で、本実施形態におけるタスク割り当て部（１０６）の内部処理を説明する。
【０１９６】
ここで図２２はタスク割り当て部（１０６）の内部で保持するテーブルである。本実施形態では、実施形態１で示したテーブルに固定フラグを加える。固定フラグが１である場合、演算器ＩＤは固定であり、固定フラグが０である場合、演算器ＩＤは固定ではないことを示す。
【０１９７】
タスク割り当て部（１０６）は、タスク情報取得部（１０３）から図２１のタスク情報を受信し、演算器情報取得部（１０５）から演算器情報を受信した後、図２２のテーブルを生成する。タスク割り当て部（１０６）はタスク情報取得部（１０３）から受信したタスク情報で演算器ＩＤが設定されている場合は、図２２に示すテーブルの演算器ＩＤに演算器ＩＤを設定して、演算器ＩＤを設定した行にタスクＩＤを設定する。更に、タスク割り当て部（１０６）は、演算器ＩＤを設定した行の固定フラグを１とする。タスク割り当て部（１０６）はタスク情報取得部（１０３）から受信したタスク情報に演算器ＩＤが設定されていない場合は、図２２に示すテーブルの演算器ＩＤを０とし、演算器ＩＤを設定した行のタスクＩＤを設定する。更に、演算器ＩＤを設定した行の固定フラグを０とする。
【０１９８】
以降、タスク割り当て部（１０６）は固定フラグが１であるタスクＩＤの割り当ては変更せず、固定フラグが０であるタスクＩＤに対してタスク割り当てを実行する。タスク割り当て部（１０６）が実行するタスク割り当ての処理は、実施形態１と同様である。
【０１９９】
以上のようにして、タスクを割り当てる演算器（１０８）が固定されている場合にも本提案を適用することができ、データ処理装置（１００）が消費するリーク電力を削減することができる。
【符号の説明】
【０２００】
１００  データ処理装置
１０１  動的再構成回路
１０２  電源制御部
１０３  タスク情報取得部
１０４  タスク割り当て部
１０５  演算器情報取得部
１０６  構成情報生成部
１０７ａ、１０７ｂ  回路ブロック
１０８  演算器
１０９  ルータ
１１０  電源スイッチ
１１１  構成情報
２０１  演算器の設定データ
２０２  ルータの設定データ
２０３  ＩＤ
２０４  アドレス
２０５  設定値
３０１〜３０４  データ入力用の結線
３０５〜３０８  データ出力用の結線
３０９〜３１２  データ受信用の結線
３１３〜３１６  データ送信用の結線
４０１  構成情報設定部
４０２  演算処理部
４０３  データ入力部
４０４  データ出力部
５０１  構成情報設定部
５０２  入出力切り替え部
１２０１〜１２１２  タスク
１３０１〜１３０８  タスク
１６００  構成情報生成装置
１６０１  ＣＰＵ
１６０２  ＲＯＭ
１６０３  ＲＡＭ
１６０４  ＨＤＤ
１６０５  キーボード
１６０６  マウス
１６０７  表示制御部
１６０８  表示装置
１６０９  Ｉ／Ｆ
１６１０  外部メモリ
１６１１  バス
１６１２  半導体装置
１７００  再構成デバイス
１７０１  ＣＰＵ
１７０２  バス
１７０３  Ｉ／Ｆ
１７０４  Ｉ／Ｏ
１７０５  外部メモリ
１７０８  半導体装置
１８０１  第１の構成情報
１８０２  第２の構成情報
１８０３  第１のアドレス領域
１８０４  第２のアドレス領域
１９０１  第１の演算器
１９０２  第２の演算器
【図１】
2016103240.tif 000003
【図２】
2016103240.tif 000004
【図３】
2016103240.tif 000005
【図４】
2016103240.tif 000006
【図５】
2016103240.tif 000007
【図６】
2016103240.tif 000008
【図７】
2016103240.tif 000009
【図８】
2016103240.tif 000010
【図９】
2016103240.tif 000011
【図１０】
2016103240.tif 000012
【図１１】
2016103240.tif 000013
【図１２】
2016103240.tif 000014
【図１３】
2016103240.tif 000015
【図１４】
2016103240.tif 000016
【図１５】
2016103240.tif 000017
【図１６】
2016103240.tif 000018
【図１７】
2016103240.tif 000019
【図１８】
2016103240.tif 000020
【図１９】
2016103240.tif 000021
【図２０】
2016103240.tif 000022
【図２１】
2016103240.tif 000023
【図２２】
2016103240.tif 000024