(57)【要約】【課題】ヘテロジーニアスプロセッサ方式を用いた情報処理装置において、省電力制御を行いつつパフォーマンスを向上させる。【解決手段】ヘテロジーニアスプロセッサ方式による情報処理装置で実行されるプログラムの実行制御方法であって、コンパイラが、初期タスクスケジューリングの結果に基づき、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であるか否か判断する工程と、振り分けることが可能である場合に、前記コンパイラが、前記タスクを分割する工程と、前記情報処理装置が、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数を変更して実行する工程とを備える。【選択図】図２
2011197803.tif 000002
【特許請求の範囲】
【請求項１】
ヘテロジーニアスプロセッサ方式による情報処理装置で実行されるプログラムの実行制御方法であって、
コンパイラが、初期タスクスケジューリングの結果に基づき、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であるか否か判断する工程と、
振り分けることが可能である場合に、前記コンパイラが、前記タスクを分割する工程と、
前記情報処理装置が、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数を変更して実行する工程と
を備えたことを特徴とするプログラム実行制御方法。
【請求項２】
請求項１に記載のプログラム実行制御方法において、
前記コンパイラが、前記汎用プロセッサもしくは前記アクセラレータプロセッサのクロック周波数を変更する処理を前記汎用プロセッサもしくは前記アクセラレータプロセッサで実行されるプログラムに挿入する工程
を備えたことを特徴とするプログラム実行制御方法。
【請求項３】
請求項１または２のいずれか一項に記載のプログラム実行制御方法において、
前記コンパイラが、前記汎用プロセッサもしくは前記アクセラレータプロセッサで実行される分割タスクのプログラムに実行の進捗を検出するためのチェックポイントを挿入する工程
を備えたことを特徴とするプログラム実行制御方法。
【請求項４】
請求項３に記載のプログラム実行制御方法において、
前記情報処理装置が、前記チェックポイントの検出タイミングに基づき、前記汎用プロセッサもしくは前記アクセラレータプロセッサのクロック周波数を動的に変更する工程
を備えたことを特徴とするプログラム実行制御方法。
【請求項５】
ヘテロジーニアスプロセッサ方式による情報処理装置であって、
各プロセッサに供給するクロック周波数および電源電圧を制御する省電力制御手段と、
当該省電力制御手段の制御に従い、各プロセッサへのクロックおよび電源を生成するクロック・電源生成手段と
を備え、
前記省電力制御手段は、タスクスケジューリングの結果、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であった場合に、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数をプログラム実行時に変更する
ことを特徴とする情報処理装置。
【請求項６】
ヘテロジーニアスプロセッサ方式による情報処理装置で実行されるプログラムの実行制御プログラムであって、
コンピュータに、
初期タスクスケジューリングの結果に基づき、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であるか否か判断する手順、
振り分けることが可能である場合に、前記タスクを分割する手順、
前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数を変更して実行する手順
を実行させるためのプログラム実行制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサ方式を用いた情報処理装置の制御技術に関する。
【背景技術】
【０００２】
これまでマイクロプロセッサは動作周波数の向上により性能向上が進んできたが、現状ではその方法での性能向上は望めない状況となっている。近年では性能向上と低消費電力化のため、１つのチップ上に複数のプロセッサを集積するマルチプロセッサ方式が導入されてきている。
【０００３】
この種のマルチプロセッサ方式を用いた情報処理装置においては、省電力化を目的に、状態監視手段がシステムの動作状態を常に検知し、状態制御手段が各々のＣＰＵごとに状態遷移制御を行う技術が知られている。ここで、状態遷移制御には、ＣＰＵの動作状態を通常状態から待機状態に遷移させる省電力制御と、ＣＰＵの動作状態を待機状態から通常状態に遷移させる復帰制御が含まれる。特に、省電力制御に際しては、システム全体における消費電力があらかじめ定めた最小電力より小さくなるまで、あるいは、通常状態にあるＣＰＵがひとつになるまで、繰り返し省電力制御が行われる。省電力制御には、周波数・電源制御やプロセスのプロセッサ割当制御（コア割当制御）等が含まれる。
【０００４】
特許文献１には、省電力効率を高める目的で、マルチプロセッサ方式の情報処理装置に適応される省電力制御システムに関して、全体的な動作の整合性を損なわずに待機状態のシステムの消費電力が抑制されるように、各々のプロセッサの状態遷移制御およびその動作状態に応じた個別の省電力制御を行う方法が開示されている。
【０００５】
一方、当初のマルチプロセッサ方式は同種の汎用プロセッサを複数搭載するホモジーニアスプロセッサ方式であったが、メディアアプリケーション等を汎用プロセッサ以上に高速に動作させるため、動的に再構成可能な汎用プロセッサやアクセラレータプロセッサを集積したヘテロジーニアスプロセッサ方式が開発されている。このようなヘテロジーニアスプロセッサ方式では、通常、アクセラレータプロセッサは最速実行を目的に特定の処理を高速化する構造となっている。そのため、汎用プロセッサと比較してチップ上に占めるサイズは小さく、比較的消費電力が少ない構成で高速に特定処理を実行可能であるという特徴がある。アクセラレータプロセッサで実行できる命令（タスク）は、多少の実行速度の低下が懸念されるが、汎用プロセッサで実行することが可能であるが、その逆はサポートしている命令数の関係で困難な場合が多い。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
前述した従来の状態遷移制御は、同種のプロセッサを複数搭載するホモジーニアスプロセッサ方式では特に問題にならなかったが、異種のプロセッサが混在するヘテロジーニアスプロセッサ方式においては、省電力制御がより複雑になるため、パフォーマンスダウンを招く場合があるという問題があった。省電力制御が複雑になるのは、ヘテロジーニアスプロセッサ方式ではプロセッサによって処理能力も消費電力も異なり、単純にプロセッサの空き状態等に基づいて制御することができないためである。
【０００７】
本発明は上記の従来の問題点に鑑み提案されたものであり、その目的とするところは、ヘテロジーニアスプロセッサ方式を用いた情報処理装置において、省電力制御を行いつつパフォーマンスを向上させることのできるプログラム実行制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
上記の課題を解決するため、本発明にあっては、請求項１に記載されるように、ヘテロジーニアスプロセッサ方式による情報処理装置で実行されるプログラムの実行制御方法であって、コンパイラが、初期タスクスケジューリングの結果に基づき、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であるか否か判断する工程と、振り分けることが可能である場合に、前記コンパイラが、前記タスクを分割する工程と、前記情報処理装置が、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数を変更して実行する工程とを備えるプログラム実行制御方法を要旨としている。
【０００９】
また、請求項２に記載されるように、請求項１に記載のプログラム実行制御方法において、前記コンパイラが、前記汎用プロセッサもしくは前記アクセラレータプロセッサのクロック周波数を変更する処理を前記汎用プロセッサもしくは前記アクセラレータプロセッサで実行されるプログラムに挿入する工程を備えるようにすることができる。
【００１０】
また、請求項３に記載されるように、請求項１または２のいずれか一項に記載のプログラム実行制御方法において、前記コンパイラが、前記汎用プロセッサもしくは前記アクセラレータプロセッサで実行される分割タスクのプログラムに実行の進捗を検出するためのチェックポイントを挿入する工程を備えるようにすることができる。
【００１１】
また、請求項４に記載されるように、請求項３に記載のプログラム実行制御方法において、前記情報処理装置が、前記チェックポイントの検出タイミングに基づき、前記汎用プロセッサもしくは前記アクセラレータプロセッサのクロック周波数を動的に変更する工程を備えるようにすることができる。
【００１２】
また、請求項５に記載されるように、ヘテロジーニアスプロセッサ方式による情報処理装置であって、各プロセッサに供給するクロック周波数および電源電圧を制御する省電力制御手段と、当該省電力制御手段の制御に従い、各プロセッサへのクロックおよび電源を生成するクロック・電源生成手段とを備え、前記省電力制御手段は、タスクスケジューリングの結果、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であった場合に、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数をプログラム実行時に変更する情報処理装置として構成することができる。
【００１３】
また、請求項６に記載されるように、ヘテロジーニアスプロセッサ方式による情報処理装置で実行されるプログラムの実行制御プログラムであって、コンピュータに、初期タスクスケジューリングの結果に基づき、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサに振り分けることが可能であるか否か判断する手順、振り分けることが可能である場合に、前記タスクを分割する手順、前記汎用プロセッサで実行することになった分割タスクを前記アクセラレータプロセッサで実行する分割タスクと同時に完了するように前記汎用プロセッサのクロック周波数を変更して実行する手順を実行させるためのプログラム実行制御プログラムとして構成することができる。
【発明の効果】
【００１４】
本発明のプログラム実行制御方法にあっては、ヘテロジーニアスプロセッサ方式を用いた情報処理装置において、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサで並列実行させることでトータルの処理時間を短縮させ、更に汎用プロセッサでの待ち期間が生じないように汎用プロセッサのクロック周波数を変更することで、省電力制御を行いつつパフォーマンスを向上させることができる。
【図面の簡単な説明】
【００１５】
【図１】本発明の一実施形態にかかる情報処理装置の配置パターン例を示す図である。
【図２】ヘテロジーニアスプロセッサ方式の情報処理装置の構成例を示す図である。
【図３】実施形態の全体的な処理例を示すフローチャートである。
【図４】通常コンパイルによりスケジューリングされたタスクの状態の例を示す図である。
【図５】通常コンパイルにより生成されるスケジューリングデータの例を示す図である。
【図６】タスク分割可否判断の処理例を示すフローチャートである。
【図７】タスク分割の処理例を示すフローチャートである。
【図８】タスク分割によるスケジューリングデータの変更の例を示す図である。
【図９】タスク分割により再配置されたタスクの状態の例を示す図である。
【図１０】ＦＶ制御処理の埋め込みの例を示す図（その１）である。
【図１１】ＦＶ制御処理の埋め込みの例を示す図（その２）である。
【図１２】チェックポイントの埋め込みの例を示す図（その１）である。
【図１３】チェックポイントの埋め込みの例を示す図（その２）である。
【図１４】チェックポイントの埋め込みの例を示す図（その３）である。
【図１５】チェックポイントの埋め込みの例を示す図（その４）である。
【発明を実施するための形態】
【００１６】
以下、本発明の好適な実施形態につき説明する。
【００１７】
＜構成＞
図１は本発明の一実施形態にかかる情報処理装置の配置パターン例を示す図である。
【００１８】
図１（ａ）では、開発側の情報処理装置２においてソースプログラムのコンパイルを行い、タスクスケジューリングされたオブジェクトプログラムをヘテロジーニアスプロセッサ方式の情報処理装置１で実行するようにしている。オブジェクトプログラムには、後述するＦＶ制御処理（実行時のプロセッサの周波数・電源を制御する命令等）やチェックポイント（プログラムの処理が当該チェックポイントに到達したことを制御側に知らせる命令等）が含まれる。開発側の情報処理装置２はヘテロジーニアスプロセッサ方式である必要はない。
【００１９】
図１（ｂ）では、ヘテロジーニアスプロセッサ方式の情報処理装置１においてソースプログラムのコンパイルを行い、更にタスクスケジューリングされたオブジェクトプログラムを同じ情報処理装置１内において実行するようにしている。
【００２０】
図２はヘテロジーニアスプロセッサ方式の情報処理装置１の構成例を示す図である。なお、メモリ、ＨＤＤ（Hard Disk Drive）、ペリフェラルＩ／Ｆ（Interface）等については省略してある。
【００２１】
図２において、情報処理装置１は、ｍ個の汎用プロセッサ１１（１１−１〜１１−ｍ）と、ｎ個のアクセラレータプロセッサ１２（１２−１〜１２−ｎ）と、省電力制御部１３と、クロック・電源生成部１４とを備えている。
【００２２】
省電力制御部１３は、予めコンパイラ（図１）が行ったタスクスケジューリングに基づき、必要に応じて各プロセッサ（１１、１２）に供給するクロック周波数・電源電圧を制御する機能を有している。また、省電力制御部１３は、プログラム実行時の各プロセッサ（１１、１２）の動作状況を監視し、必要に応じて動的に各プロセッサ（１１、１２）に提供するクロック周波数・電源電圧を制御する機能も有している。
【００２３】
クロック・電源生成部１４は、省電力制御部１３の制御に従い、各プロセッサ（１１、１２）へのクロック・電源を生成する機能を有している。
【００２４】
図１（ａ）における情報処理装置２の内部構成については省略するが、一般的なコンピュータ装置の構成（ＣＰＵ、メモリ、ＨＤＤ、ペリフェラルＩ／Ｆ等）を有している。
【００２５】
＜動作＞
図３は上記の実施形態の全体的な処理例を示すフローチャートである。
【００２６】
図３において、先ず、図１（ａ）の情報処理装置２もしくは図１（ｂ）の情報処理装置１においてコンパイルが行われる。
【００２７】
そのコンパイルにおいては、先ず、通常のヘテロジーニアスプロセッサ方式に対するコンパイル（スタティックスケジューリング）を行う（ステップＳ１）。この通常コンパイルでは、画像処理等の高い性能の要求される処理を含むタスクについてはアクセラレータプロセッサ１２に割り当てが行われる。
【００２８】
図４は通常コンパイル（図３のステップＳ１）によりスケジューリングされたタスクの状態の例を示す図である。ここでは、説明を簡略化するため、汎用プロセッサ１１とアクセラレータプロセッサ１２がそれぞれ１つずつ搭載された場合の例としている。
【００２９】
図４においては、コンパイラによる最初のスタティックスケジューリングによって、汎用プロセッサ１１にタスク＃１（処理コストの見積り「２０」（参考値）、クロック周波数・電源電圧は「通常値」）、アクセラレータプロセッサ１２にタスク＃２（処理コストの見積り「７０」（参考値）、分割可能、クロック周波数・電源電圧は「通常値」）、汎用プロセッサ１１にタスク＃３（処理コストの見積り「３０」（参考値）、クロック周波数・電源電圧は「通常値」、タスク＃１・タスク＃２の後に実行する必要）がスケジューリングされた場合を示している。この場合、タスク＃１に続いて長い待ち時間（ＩＤＬＥ状態）が続いている。タスク＃２は処理コストは大きいが、並列化を視野に分割することが可能な状態となっている。
【００３０】
図５は通常コンパイル（図３のステップＳ１）により生成されるスケジューリングデータの例を示す図であり、「タスク名」「処理コスト（タスクサイズ）」「実行順序」「分割可否」「分割後サイズ」「実行プロセッサ」「ＦＶ制御」「チェックポイント」等の項目を有している。「分割後サイズ」は、タスクが分割可能である場合、分割した場合の各部分のサイズを示している。ＦＶ制御は、クロック周波数・電源電圧の制御を意味している。図５に示したタスク＃１〜＃３は図４に示したものと対応している。
【００３１】
図３に戻り、通常コンパイル（ステップＳ１）に続き、タスク分割可否判断を行う（ステップＳ２）。
【００３２】
図６はタスク分割可否判断（図３のステップＳ２）の処理例を示すフローチャートである。すなわち、アクセラレータプロセッサ１２で実行するタスクを分割し、汎用プロセッサ１１へタスクを割り振ることができるか否かを判断する処理である。なお、汎用プロセッサ１１で実行するタスクは、サポートしている命令数の関係でアクセラレータプロセッサ１２へ割り振ることは困難であるため、分割の対象としていない。
【００３３】
図６において、タスク分割可否判断の処理を開始すると、汎用プロセッサ１１に長時間の待ちが発生する箇所があるか否か判断する（ステップＳ２１）。具体的には、図５のスケジューリングデータから、タスク＃１とタスク＃２が汎用プロセッサ１１とアクセラレータプロセッサ１２でそれぞれ同時に実行開始し、タスク＃１が処理コスト「２０」で完了するのに対し、タスク＃２が処理コスト「７０」まで続き、タスク＃３はタスク＃１およびタスク＃２の後でなければ開始できないため、「７０−２０＝５０」の待ちが汎用プロセッサ１１に発生することが判断できる。ここで、長時間の待ちと判断する閾値が「５０」未満に設定されていれば、長時間の待ちが発生すると判断する。
【００３４】
図６に戻り、汎用プロセッサ１１に長時間の待ちが発生する箇所がないと判断した場合（ステップＳ２１のＮＯ）、処理を終了する。
【００３５】
汎用プロセッサ１１に長時間の待ちが発生する箇所があると判断した場合（ステップＳ２１のＹＥＳ）、続いて、その時のアクセラレータプロセッサ１２のタスクは分割可能か否か判断する（ステップＳ２２）。具体的には、図５のスケジューリングデータから、長時間の待ちが発生する時のアクセラレータプロセッサ１２のタスクはタスク＃２であることがわかり、その分割可否の項目「○」から分割可能であると判断する。
【００３６】
図６に戻り、長時間の待ちが発生する時のアクセラレータプロセッサ１２のタスクが分割可能でないと判断した場合（ステップＳ２２のＮＯ）、処理を終了する。
【００３７】
長時間の待ちが発生する時のアクセラレータプロセッサ１２のタスクが分割可能であると判断した場合（ステップＳ２２のＹＥＳ）、続いて、分割後の一方（後半）のタスクは汎用プロセッサ１１の待ち時間で実行可能か否か判断する（ステップＳ２３）。具体的には、図５のスケジューリングデータから、分割可能と判断したタスク＃２の分割後のサイズ「５０、２０」から後半の分割部分のサイズ「２０」を取得し、タスク＃１の後の長時間の待ち「５０」と比較し、分割部分のサイズ「２０」の方が小さいため、待ち時間で実行可能であると判断する。
【００３８】
図６に戻り、分割後の一方のタスクが汎用プロセッサ１１の待ち時間で実行可能でないと判断した場合（ステップＳ２３のＮＯ）、処理を終了する。
【００３９】
分割後の一方のタスクが汎用プロセッサ１１の待ち時間で実行可能であると判断した場合（ステップＳ２３のＹＥＳ）、その分割後の一方のタスクを汎用プロセッサ１１で並列化を行う対象とする（ステップＳ２４）。具体的には、その分割後の一方のタスクを汎用プロセッサ１１で並列化を行う対象とする旨のデータを内部的に設定して保持する。そして、処理を終了する。
【００４０】
図３に戻り、タスク分割可否判断（ステップＳ２）の後、タスク分割を行う（ステップＳ３）。
【００４１】
図７はタスク分割（図３のステップＳ３）の処理例を示すフローチャートである。
【００４２】
図７において、タスク分割の処理を開始すると、先ず、タスクのプログラムを解析し、分割ポイントを決定する（ステップＳ３１）。ここでは、処理の高速化を目的に、対象タスクに含まれる処理単位で分割ポイントを決定するものとする。
【００４３】
次いで、タスクのプログラムを解析し、分割後の依存関係をチェックする（ステップＳ３２）。例えば、逐次処理では、処理＃１→処理＃２→処理＃３と順番に実行させている処理が、タスク分割により処理順序がずれてしまう場合があるため、このことに注意してチェックを行う。分割後の依存関係が不正である場合には、適正な依存関係となるように処理に待ちを挿入する等のプログラムの修正を行う。
【００４４】
次いで、タスクの並列化を行う（ステップＳ３３）。タスクの並列化は処理単位でタスクを分割した際に有効な並列化手法であり、手順並列法とも呼ばれるものである。具体的には、図８に示すように、タスク＃２を分割の対象とした場合、それまでのタスク＃２のスケジューリングデータに代え、分割後のタスク＃２−１とタスク＃２−２のスケジューリングデータを新たに生成する。
【００４５】
図７に戻り、並列化（ステップＳ３３）の後、同期するタイミングのチェックを行う（ステップＳ３４）。例えば、資源を共有する際に、同時にアクセスすることで発生する不具合を防ぐため、排他制御を行う必要があることから、これをチェックしている。同期するタイミングが不正である場合には、適正なタイミングとなるように処理に待ちを挿入する等のプログラムの修正を行う。
【００４６】
次いで、データ依存の除去を行う（ステップＳ３５）。データ依存性の種類としては、フロー依存、逆依存、出力依存の３種類がある。フロー依存は、書き込んだデータをその後で読み出すものである。逆依存は、フロー依存と逆で、読み込み後に書き込みを行うものである。出力依存は、書き込みが行われた後に、また別の値の書き込みを行うものである。フロー依存の場合は、アクセス順序が重要なため、セマフォ等により同期をとるようにプログラムを修正する。逆依存と出力依存は、それぞれ違う変数を使用するリネーミングを行う。そして、処理を終了する。
【００４７】
図９はタスク分割（図３のステップＳ３）により再配置されたタスクの状態の例を示す図であり、図８に示したスケジューリングデータに対応している。
【００４８】
図９においては、アクセラレータプロセッサ１２にてタスク＃２として実行するはずであったタスクがタスク＃２−１およびタスク＃２−２として分割されている。そして、タスク＃２−２を汎用プロセッサ１１にて実行するようにスケジューリングの見直しがされ、ここまでのタスク＃１およびタスク＃２の実行完了までに必要とされる処理コストは各プロセッサとも「５０」以内となっている。これによりスケジューリングの見直しをする前より処理コスト「２０」に相当する分のタスクを効率的に各プロセッサに割り当て、パフォーマンス向上が達成できていることが確認できる。
【００４９】
図３に戻り、タスク分割（ステップＳ３）の後、分割タスクはプロセッサ間で同時完了できるか否か判断する（ステップＳ４）。具体的には、図８のスケジューリングデータから、分割したタスク＃２−２の完了は、その前のタスク＃１に続くものであることから、処理コスト「２０＋２０＝４０」であることがわかり、タスク＃１と同時に実行開始するタスク＃２−１は処理コスト「５０」で完了することから、同時完了できないと判断する。
【００５０】
図３に戻り、分割タスクはプロセッサ間で同時完了できると判断した場合（ステップＳ４のＹＥＳ）、ＦＶ制御処理の埋め込み（ステップＳ５）をスキップする。
【００５１】
分割タスクはプロセッサ間で同時完了できないと判断した場合（ステップＳ４のＮＯ）、ＦＶ制御処理の埋め込みを行う（ステップＳ５）。より具体的には、汎用プロセッサ１１で実行されるタスクがアクセラレータプロセッサ１２で実行されるタスクよりも早く完了してしまう場合、汎用プロセッサ１１で実行されるタスクのクロック周波数を低くする制御命令をプログラムに挿入し、アクセラレータプロセッサ１２で実行されるタスクと同時完了できるようにする。反対に、アクセラレータプロセッサ１２で実行されるタスクが汎用プロセッサ１１で実行されるタスクよりも早く完了してしまう場合、アクセラレータプロセッサ１２の待ち期間においてクロック周波数を変更（周波数を「０」とすることによるＯＦＦ状態）する制御命令をタスクのプログラム（直前のタスクのプログラム終端等）あるいは追加プログラムに挿入する。
【００５２】
図１０はＦＶ制御処理の埋め込み（図３のステップＳ５）の例を示す図である。すなわち、並列化して汎用プロセッサ１１で実行することになった分割タスクを、アクセラレータプロセッサ１２で実行される分割タスクと同時に完了するように汎用プロセッサ１１の周波数を変更するものである。
【００５３】
図９にて示した、パフォーマンス向上を目的にしたタスクスケジューリングの例では、汎用プロセッサ１１にて実行するタスク＃１、タスク＃２−２の後に待ち（ＩＤＬＥ）状態が存在することが分かる。この待ち区間において、汎用プロセッサ１１の周波数を低くしたり、周波数ＯＦＦまたは電源ＯＦＦにしたりして無駄な消費電力の削減を行うことも考えられるが、ここではタスク＃２−２全体の実行区間を汎用プロセッサ１１の周波数を低く、かつアクセラレータプロセッサ１２のタスク＃２−１と同じタイミングで完了するように設定している。
【００５４】
図１０（ａ）は、タスク＃２−２のＦＶ制御を「通常」とし、その後の待ち区間においてＦＶ制御を「ＯＦＦ」とした場合を示しているが、図１０（ｂ）に示すように、タスク＃２−２のＦＶ制御を「低」とすることで、後のプログラム実行時（図３のステップＳ７〜Ｓ９）においては、タスク＃２−２の完了とタスク＃２−１の完了とを同時に行えるようにする。
【００５５】
これにより、タスク＃２−２を実行している区間において、Ｆ（周波数）が低減されるため、次式
電力Ｐ［Ｗ］＝αＣＦＶ２
（α：スイッチング確率、Ｃ：静電容量、Ｆ：周波数、Ｖ：電圧）
で示されるような、周波数Ｆに比例し、電圧Ｖの二乗に比例する電力を削減することができる。この電力削減の大きさは、場合によっては単に発生する待ち区間に対して汎用プロセッサ１１の周波数を低くしたり、周波数ＯＦＦまたは電源ＯＦＦにしたりして削減される電力よりも大きくなる。もちろん、より大きな電力削減が期待できない場合は単に発生する待ち区間に対してのみ省エネ制御を行うことになるが、このあたりはコンパイラによるスケジューリングの際に見積もり、最適な方式を選択することになる。
【００５６】
図１１はＦＶ制御処理の埋め込み（図３のステップＳ５）の他の例を示す図である。すなわち、並列化してアクセラレータプロセッサ１２で実行することになった分割タスクを、汎用プロセッサ１１で実行される分割タスクと同時に完了するようにアクセラレータプロセッサ１２を周波数ＯＦＦまたは電源ＯＦＦする場合の例を示している。なお、この例ではこれまでのタスクとはサイズ等が異なる例を用いている。
【００５７】
ヘテロジーニアスプロセッサ方式においては、アクセラレータプロセッサは特定の処理を高速化する目的で搭載している。そのため、周波数制御を行って低周波数で動作させることはせずに、周波数ＯＦＦまたは電源ＯＦＦを行うことで省電力制御をすることが多い。そのため、図１１（ａ）に示すように、タスク＃２がタスク＃２−１およびタスク＃２−２に分割されアクセラレータプロセッサ１２で実行されるタスク＃２−１が処理コスト「４０」（参考値）となり、汎用プロセッサ１１にて実行されるタスク＃１およびタスク＃２−２の合計「２０＋３０＝５０」よりも少なくなる場合には、図１１（ｂ）に示すように、アクセラレータプロセッサ１２で待ち区間（ＩＤＬＥ状態）となる区間は周波数ＯＦＦまたは電源ＯＦＦを行うように設定することで省電力制御を実施する。
【００５８】
図３に戻り、分割タスクがプロセッサ間で同時完了できる場合（ステップＳ４のＹＥＳ）、あるいは、ＦＶ制御処理の埋め込み（ステップＳ５）の後、チェックポイントの埋め込みを行う（ステップＳ６）。より具体的には、ＦＶ制御処理の埋め込み（ステップＳ５）により汎用プロセッサ１１で実行されるタスクのクロック周波数を低くする制御命令をプログラムに挿入した場合は、その汎用プロセッサ１１で実行されるタスクの進捗を判断できるように、そのタスク内に複数のチェックポイントとなる命令を挿入する。アクセラレータプロセッサ１２の待ち期間においてＯＦＦ状態にする制御命令をプログラムに挿入した場合は、そのアクセラレータプロセッサ１２で実行されるタスクの進捗を判断できるように、そのタスク内に複数のチェックポイントとなる命令を挿入する。
【００５９】
図１２はチェックポイントの埋め込み（図３のステップＳ６）の例を示す図である。すなわち、並列化して汎用プロセッサ１１で実行することになった分割タスクを、アクセラレータプロセッサ１２で実行される分割タスクと同時に完了するように汎用プロセッサ１１の周波数を変更してプログラムを実行した際に、コンパイル時に見積もった処理コストよりも実実行コストが大きくなってしまう場合の例である。タスクの具体例としては、図１０（ｂ）の場合に対応している。
【００６０】
図１２において、タスク＃２−２を汎用プロセッサ１１にて実行する際に、タスクはデータや制御依存によって逐次実行をする部分が存在するため、実際にはプロセッサが常時プログラム実行に使用されるということはなく、見積りと比べて誤差が生じることがある。ここでは、この問題に対処するために、タスク＃２−２に予め見積り値と実際の処理コストに差が生じていないかチェックを行うチェックポイントＰ１、Ｐ２を設けている。
【００６１】
例えば、後のプログラム実行時（図３のステップＳ７〜Ｓ９）において、区間Ｂで上記問題が顕在化し、チェックポイントＰ２にて予定していた完了時刻が区間Ｃではなく区間Ｄまで長引く可能性が確認された場合（この確認は図２の省電力制御部１３がオペレーティングシステムの機能を用いて実現）は、区間Ｃにおける汎用プロセッサ１１の周波数を動的に再度高めに設定することで（電源電圧は低めに設定することが可能）（図３のステップＳ９）、予定のタスク実行完了時刻を満たすように調整することができる。
【００６２】
図１３はチェックポイントの埋め込み（図３のステップＳ６）の他の例を示す図である。すなわち、並列化して汎用プロセッサ１１で実行することになった分割タスクを、アクセラレータプロセッサ１２で実行される分割タスクと同時に完了するように汎用プロセッサ１１の周波数を変更してプログラムを実行した際に、コンパイル時に見積もった処理コストよりも実実行コストが小さくなってしまう場合の例である。
【００６３】
図１３では、図１２とは逆に、例えば、区間Ａにて上記問題が顕在化（見積りが減る方向のため、実際にはコンパイラの見積りミスの要因が多いことが考えられる）して、チェックポイントＰ１の段階でコンパイラが見積もった処理コストより実際の実行コストが小さくなる可能性が確認された場合は、区間Ｂにおける汎用プロセッサ１１の周波数を動的にさらに遅めに設定することで（図３のステップＳ９）、予定のタスク実行完了時刻（区間Ｃまで）を満たすように調整することができる。
【００６４】
図１４はチェックポイントの埋め込み（図３のステップＳ６）の他の例を示す図である。すなわち、並列化してアクセラレータプロセッサ１２で実行することになった分割タスクを、汎用プロセッサ１１で実行される分割タスクと同時に完了するようにアクセラレータプロセッサ１２の周波数を変更（実際には周波数ＯＦＦもしくは電源電圧ＯＦＦ）してプログラムを実行した際に、コンパイル時に見積もった処理コストよりも実実行コストが大きくなってしまう場合の例である。タスクの具体例としては、図１１（ｂ）の場合に対応している。
【００６５】
図１４において、タスク＃２−１をアクセラレータプロセッサ１２にて実行する際に、タスクはデータや制御依存によって逐次実行をする部分が存在するため、実際にはプロセッサが常時プログラム実行に使用されるということはなく、見積りと比べて誤差が生じることがある。ここでは、この問題に対処するために、タスク＃２−１に予め見積り値と実際の処理コストに差が生じていないかチェックを行うチェックポイントＰ１、Ｐ２を設けている。
【００６６】
例えば、後のプログラム実行時（図３のステップＳ７〜Ｓ９）において、区間Ｂで上記問題が顕在化し、チェックポイントＰ２にて予定していた完了時刻が区間Ｃではなく区間Ｄまで長引く可能性が確認された場合（この確認は図２の省電力制御部１３がオペレーティングシステムの機能を用いて実現）は、区間Ｃおよび区間Ｄに相当する汎用プロセッサ１１の周波数を動的に低めに設定することで（図３のステップＳ９）、汎用プロセッサ１１とアクセラレータプロセッサ１２のタスク実行完了時刻を合わせるように調整することができる。
【００６７】
図１５はチェックポイントの埋め込み（図３のステップＳ６）の他の例を示す図である。すなわち、並列化してアクセラレータプロセッサ１２で実行することになった分割タスクを、汎用プロセッサ１１で実行される分割タスクが完了するまでアクセラレータプロセッサ１２の周波数を変更（実際には周波数ＯＦＦもしくは電源電圧ＯＦＦ）してプログラムを実行した際に、コンパイル時に見積もった処理コストよりも実実行コストが小さくなってしまう場合の例である。
【００６８】
図１５では、図１４とは逆に、例えば、区間Ａにて上記問題が顕在化（見積りが減る方向のため、実際にはコンパイラの見積りミスの要因が多いことが考えられる）して、チェックポイントＰ１の段階でコンパイラが見積もった処理コストより実際の実行コストが小さくなる可能性が確認された場合は、区間Ｄにおけるアクセラレータプロセッサ１２の周波数（および電源電圧）を動的にＯＦＦに設定することで（図３のステップＳ９）、汎用プロセッサ１１にて実行されているタスク＃２−２の実行完了時刻までアクセラレータプロセッサ１２の動作を止めて省電力効果を大きくするように調整することができる。なお、アクセラレータプロセッサ１２で実行されるタスク＃２−１の終端部でＯＦＦ設定のＦＶ制御処理を埋め込んでいる場合には、タスク＃２−１の完了とともにアクセラレータプロセッサ１２はＯＦＦとなるので、特に対処する必要はない。
【００６９】
図３に戻り、コンパイルの後、情報処理装置１においてプログラム実行を行う。すなわち、プログラムの実行過程でチェックポイントからの通知がなければ（ステップＳ７のＮＯ）、通常のプログラム実行を行う（ステップＳ８）。プログラムの実行過程でチェックポイントからの通知があれば（ステップＳ７のＹＥＳ）、ＦＶ制御処理を見直し、動的にＦＶ制御を行ってプログラム実行を行う（ステップＳ９）。
【００７０】
＜総括＞
以上説明したように、本実施形態によれば、ヘテロジーニアスプロセッサ方式を用いた情報処理装置において、アクセラレータプロセッサで実行されるタスクを分割して汎用プロセッサで並列実行させることでトータルの処理時間を短縮させ、更に汎用プロセッサでの待ち期間が生じないように汎用プロセッサのクロック周波数を変更することで、省電力制御を行いつつパフォーマンスを向上させることができる。
【００７１】
また、アクセラレータプロセッサに待ち期間が発生する場合はアクセラレータプロセッサのクロック周波数を「０」に変更することで、より一層の省電力化を図ることができる。
【００７２】
以上、本発明の好適な実施の形態により本発明を説明した。ここでは特定の具体例を示して本発明を説明したが、特許請求の範囲に定義された本発明の広範な趣旨および範囲から逸脱することなく、これら具体例に様々な修正および変更を加えることができることは明らかである。すなわち、具体例の詳細および添付の図面により本発明が限定されるものと解釈してはならない。
【符号の説明】
【００７３】
１                      情報処理装置
１１、１１−１〜ｍ      汎用プロセッサ
１２、１２−１〜ｎ      アクセラレータプロセッサ
１３                    省電力制御部
１４                    クロック・電源生成部
２                      情報処理装置
【先行技術文献】
【特許文献】
【００７４】
【特許文献１】特開平８−６６８１号公報
【図１】
2011197803.tif 000003
【図２】
2011197803.tif 000004
【図３】
2011197803.tif 000005
【図４】
2011197803.tif 000006
【図５】
2011197803.tif 000007
【図６】
2011197803.tif 000008
【図７】
2011197803.tif 000009
【図８】
2011197803.tif 000010
【図９】
2011197803.tif 000011
【図１０】
2011197803.tif 000012
【図１１】
2011197803.tif 000013
【図１２】
2011197803.tif 000014
【図１３】
2011197803.tif 000015
【図１４】
2011197803.tif 000016
【図１５】
2011197803.tif 000017