(57)【要約】  実行先決定部（１１１）は、処理の実行をＣＰＵあるいはアクセラレータに決定する。この決定のために、実行先決定部（１１１）は、ＣＰＵが第１処理を完了するまでの第１処理時間とアクセラレータが第１処理を完了するまでの第２処理時間とに基づく第１値と、ＣＰＵおよびアクセラレータを駆動するバッテリの使用状態に基づく第２値とを比較する指標値比較部（１２６ｂ）と、指標値比較部（１２６ｂ）の比較結果に基づいて、ＣＰＵまたはアクセラレータのいずれかを選択する割り付け先決定部（１２９）と、を含む。
2012124125.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
アクセラレータと、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と前記アクセラレータが前記第１処理を完了するまでの第２処理時間とに基づく第１値と、前記ＣＰＵおよび前記アクセラレータを駆動するバッテリの使用状態に基づく第２値とを比較する比較ユニットと、
前記比較ユニットの比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択する選択ユニットと、
を含むことを特徴とするシステム。
【請求項２】
前記第１処理時間、前記第２処理時間、前記第１値、および前記第２値を算出する算出ユニットを含むこと
を特徴とする請求項１に記載のシステム。
【請求項３】
前記第１値は、前記第１処理時間と、前記ＣＰＵが前記第１処理を完了する第１終了時刻と、前記ＣＰＵが前記第１処理を実行するときの第１消費電力と、前記第２処理時間と、前記アクセラレータが前記第１処理を完了する第２終了時刻と、前記アクセラレータが前記第１処理を実行するときの第２消費電力とに基づいて、算出されること
を特徴とする請求項１または２に記載のシステム。
【請求項４】
前記第１処理時間と前記第２処理時間とを記録するメモリを含むこと
を特徴とする請求項１〜３のいずれか一つに記載のシステム。
【請求項５】
前記選択ユニットは、
前記第１値が第２値よりも大きいときに前記ＣＰＵを選択し、
前記第１値が前記第２値よりも小さいときに前記アクセラレータを選択すること
を特徴とする請求項１〜４のいずれか一つに記載のシステム。
【請求項６】
前記ＣＰＵの負荷を監視する監視ユニットを含み、
前記監視ユニットは、前記負荷に変動があるときは、前記選択ユニットに対し、前記ＣＰＵおよび前記アクセラレータの選択の見直しを指示すること
を特徴とする請求項１〜５のいずれか一つに記載のシステム。
【請求項７】
前記監視ユニットが前記負荷の増加を検出したとき、
前記選択ユニットは、前記第１値が前記第２値よりも小さければ前記ＣＰＵが実行する前記第１処理をキャンセルさせること
を特徴とする請求項６に記載のシステム。
【請求項８】
前記バッテリの使用状態を取得する取得部を備え、
当該取得部は、前記バッテリの残量、および当該バッテリ残量に関わる機器の使用状態を取得し、前記比較ユニットに前記第２値の算出用の情報として出力する
ことを特徴とする請求項１〜７のいずれか一つに記載のシステム。
【請求項９】
ＣＰＵとアクセラレータを備え、バッテリ駆動されるシステムにおけるスケジューリング方法であって、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と、前記アクセラレータが前記第１処理を完了するまでの第２処理時間とをメモリから読み出し、
前記第１処理時間と前記第２処理時間とに基づいて第１値を計算し、
前記バッテリ残量に基づいて第２値を計算し、
前記第１値と前記第２値を比較し、
比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択し、
選択された前記ＣＰＵまたは前記アクセラレータに前記第１処理を割り当てること
を特徴とするスケジューリング方法。
【請求項１０】
前記第１処理の処理要求に基づいて当該第１処理の開始時刻を取得し、
前記第１処理の開始時刻に基づいて、前記ＣＰＵが前記第１処理を完了する第１終了時刻と前記アクセラレータが前記第１処理を完了する第２終了時刻と算出し、
前記第１終了時刻と前記第２終了時刻とに基づいて前記第１値を計算すること
を特徴とする請求項９に記載のスケジューリング方法。
【請求項１１】
前記ＣＰＵが前記第１処理を実行するときの第１消費電力と前記アクセラレータが前記第１処理を実行するときの第２消費電力とを前記メモリから読み出し、
前記第１消費電力と前記第２消費電力とに基づいて前記第１値を算出すること
を特徴とする請求項９または１０に記載のスケジューリング方法。
【請求項１２】
前記第１値が第２値よりも大きいときに前記ＣＰＵを選択し、
前記第１値が前記第２値よりも小さいときに前記アクセラレータを選択すること
を特徴とする請求項９〜１１のいずれか一つに記載のスケジューリング方法。
【請求項１３】
前記ＣＰＵの負荷を監視し、
前記負荷に変動があるときは、前記第１処理の開始時刻を取得して、前記ＣＰＵが第１処理を完了する新たな第１終了時刻と前記アクセラレータが前記第１処理を完了する新たな第２終了時刻と算出し、
前記新たな第１終了時刻と前記新たな第２終了時刻に基づいて前記第１値を計算すること
を特徴とする請求項９〜１２のいずれか一つに記載のスケジューリング方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理に適した実行先としてプロセッサあるいはアクセラレータを選択するシステムおよびスケジューリング方法に関する。
【背景技術】
【０００２】
システムには汎用のプロセッサが設けられ、多数の処理をプロセッサで実行する。動画処理や音声処理、３Ｄグラフィック処理、信号処理のような高い処理性能が求められるが処理の内容は決まっているといった特定の処理については、システムにハードウェアエンジンやアクセラレータと呼ばれる処理専用回路を設け、このアクセラレータにより特定の処理をおこなわせている。【０００３】
一般に、プロセッサは汎用性が高い反面、消費電力や処理性能の面ではアクセラレータに劣る。このため、アクセラレータを有効活用することで高性能かつ低消費電力を実現できる。単一の処理に関してだけみれば、この単一処理がアクセラレータで実行可能なら、アクセラレータで実行した方が電力面でも性能面でも優れていることになる。【０００４】
ここで、非常に多くの処理がアクセラレータで実行可能であるが、プロセッサでのみおこなえる処理がごく少数しかなかったと仮定する。この場合、アクセラレータで実行可能な処理を、全てアクセラレータでおこなうとアクセラレータ側が非常に混雑し、アクセラレータでの処理が遅延する結果、システム全体の処理効率を低下させるおそれがある。このため、アクセラレータで実行可能な処理であっても一部をプロセッサでおこなう手法が開示されている（たとえば、下記特許文献１，２参照。）。【０００５】
特許文献１の技術は、新たにアクセラレータに処理を要求するときに、現在アクセラレータで処理待ちの処理の予想処理時間と、要求しようとしている処理のアクセラレータでの予想処理時間と開始時刻から、要求しようとしている処理の終了時刻を推定する。そして、アクセラレータでは期待している時刻までに処理が終了しない場合は、その処理をプロセッサでおこなうというものである。【０００６】
また、特許文献２の技術は、アクセラレータで実行可能なそれぞれの処理に、処理時間の指標値を設定しておき、まず処理をプロセッサで実行しておく。そして、設定された処理時間以内にプロセッサでの処理が終わらないといった指標値を満たさない場合に、アクセラレータで実行するというものである。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３０２１６８号公報
【特許文献２】特開２０１０−７２７３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
処理時間の観点でみれば、アクセラレータが混んでいる場合に一部をプロセッサでおこなった方が効率が良いこともあるが、消費電力の観点でみれば、アクセラレータで実行可能な処理は全てアクセラレータでおこなった方が消費電力量は少なくなる。【０００９】
このため、必要な処理時間（性能）と、消費電力との兼ね合い（トレードオフ）を考慮して最適な動作点を決定する必要があるが、従来はこれをおこなうことができなかった。【００１０】
たとえば、携帯電話端末のようなバッテリで動作する携帯端末の場合、この最適な動作点はバッテリの残量等の状況により常に変化する。携帯端末での使用を想定すると、バッテリ残量が豊富にある場合には、消費電力が増えたとしても性能を優先する処理で良い。しかし、バッテリ残量が少なくなってきた場合には、携帯端末のバッテリを充電するまでの間は、バッテリでの駆動が持続できるように消費電力は極力抑えたい状況となる。【００１１】
上記従来の特許文献１の技術では、性能しか指標として利用できず、また、特許文献２の技術では、固定の指標を前提としているため、携帯端末のようにバッテリ残量に応じて最適な動作点が動的に変化する機器には適用できない。【００１２】
開示のシステムおよびスケジューリング方法は、上述した問題点を解消するものであり、ＣＰＵとアクセラレータで処理した際の処理速度と消費電力を推定して実行先を決定し、処理効率と低消費電力化を両立することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、開示技術は、ＣＰＵと、アクセラレータとを備え、実行先決定部により処理（第１処理）をＣＰＵあるいはアクセラレータのいずれでおこなうかを決定し実行させる。この実行先決定部は、ＣＰＵが第１処理を完了するまでの第１処理時間とアクセラレータが第１処理を完了するまでの第２処理時間とに基づく第１値と、バッテリ残量に基づく第２値とを比較する指標値比較部と、指標値比較部の比較結果に基づいて、ＣＰＵまたはアクセラレータのいずれかを選択する割り付け先決定部と、を含む。
【発明の効果】
【００１４】
開示のシステムおよびスケジューリング方法によれば、ＣＰＵとアクセラレータで処理した際の処理速度と消費電力を推定して実行先を決定し、処理効率と低消費電力化を両立できるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施の形態にかかるシステムの構成例を示すブロック図である。
【図２】図２は、オペレーティングシステムの内部構成例を示すブロック図である。
【図３】図３は、実行先別の終了時刻を説明するための図である。
【図４】図４は、負荷量に対する電力性能指標値の一例を示す図表である。
【図５】図５は、バッテリ残量に対する消費電力優先指標値の一例を示す図表である。
【図６】図６は、携帯端末での実行先決定にかかる処理概要を示すフローチャートである。
【図７】図７は、設計フェーズによりＲＯＭに記録される情報を示す図である。
【図８】図８は、実行フェーズにおけるメモリに記録される情報を示す図である。
【図９】図９は、ＣＰＵが複数の処理を実行する状態を示すタイムチャートである。
【図１０】図１０は、実行先決定部による実行先決定の処理内容を示すフローチャートである。
【図１１】図１１は、実行先決定部によるアクセラレータでの処理終了後の処理を示すフローチャートである。
【図１２−１】図１２−１は、処理の負荷増加を検出する処理の流れを示すフローチャートである。
【図１２−２】図１２−２は、処理の負荷減少を検出する処理の流れを示すフローチャートである。
【図１３−１】図１３−１は、負荷が増加した場合の処理要求の流れを示す図である。
【図１３−２】図１３−２は、負荷が増加した場合の処理の終了時刻を説明する図である。
【図１４−１】図１４−１は、時間経過により負荷が増加した場合の処理要求の流れを示す図である。
【図１４−２】図１４−２は、時間経過により負荷が増加した場合の処理の終了時刻を説明する図である。
【図１５】図１５は、処理の負荷増加時における実行先決定の処理例を示すフローチャートである。
【図１６−１】図１６−１は、負荷が減少した場合の処理要求の流れを示す図である。
【図１６−２】図１６−２は、負荷が減少した場合の処理の終了時刻を説明する図である。
【図１７−１】図１７−１は、時間経過により負荷が減少した場合の処理要求の流れを示す図である。
【図１７−２】図１７−２は、時間経過により負荷が減少した場合の処理の終了時刻を説明する図である。
【図１８】図１８は、処理の負荷減少時における実行先決定の処理例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。
【００１７】
（実施の形態）
開示のシステムは、データ処理の汎用性が高く消費電力が大きいプロセッサ（ＣＰＵ）と、汎用性が低いがＣＰＵよりも特定の処理の処理速度が早く、消費電力が小さいハードウェア・アクセラレータとを備えたシステムである。そして、これらＣＰＵとアクセラレータの処理性能に関する電力性能指標値（第１値）と、システムを駆動するバッテリの消費状態等に関する消費電力優先指標値（第２値）とをあらかじめ求めておくことにより、これからおこなおうとする処理をＣＰＵあるいはアクセラレータのいずれの処理先で実行させるかを選択する。これにより、システムが搭載された機器がたとえばバッテリ駆動される場合において、バッテリ残量の変化に対応した処理先を適切に選択でき、処理効率と低消費電力化を両立させる。以下、システムが、バッテリで動作する携帯端末に搭載された例を用いて説明する。
【００１８】
（システムの構成例）
図１は、実施の形態にかかるシステムの構成例を示すブロック図である。開示のシステム１００は、ＣＰＵ１０１と、ＣＰＵ１０１を介して利用可能なアクセラレータ（ＡＣＣ）１０２と、メモリ１０３と、ＲＯＭ１０４と、現在時刻を計時するタイマ１０５と、バッテリ管理部１０６と、これらＣＰＵ１０１〜バッテリ管理部１０６を接続するバス（ＢＵＳ）１０７とを含む。ＲＯＭ１０４には、ＣＰＵ１０１およびアクセラレータ１０２別の処理時間と消費電力の情報等が記録される。ＣＰＵ１０１は、オペレーティングシステム（ＯＳ）１１０によりアプリケーションの処理の実行を制御する。
【００１９】
アプリケーションの実行先は、ＯＳ１１０によりＣＰＵ１０１あるいはアクセラレータ１０２が指定される。ＣＰＵ１０１が実行先として決定されたときには、図中Ａの経路でＣＰＵ用実行コードがＣＰＵ１０１に出力される。アクセラレータ１０２が実行先として決定されたときには図中Ｂの経路でＣＰＵ１０１を経由し、アクセラレータ１０２にアクセラレータ用実行コードが出力される。
【００２０】
図２は、オペレーティングシステムの内部構成例を示すブロック図である。ＯＳ１１０は、実行先決定部１１１と、プロセス管理部１１３と、を含む。実行先決定部１１１は、アプリケーションの処理の実行先をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれかに決定する。プロセス管理部１１３は、アプリケーション実行時のプロセスおよびプロセスのスレッドを管理する。また、稼働スレッド数を実行先決定部１１１の稼働スレッド数取得部１２２に通知し、稼働スレッド数の増減毎に通知する。このプロセス管理部１１３は、ＣＰＵ１０１の処理の負荷を監視する監視ユニットとして機能する。
【００２１】
より詳細に説明すると、実行先決定部１１１は、処理要求受付部１２１と、稼働スレッド数取得部１２２と、キュー管理部１２３と、ＲＯＭ情報取得部１２４と、処理スレッド管理部１２５と、指標値処理部１２６と、端末状態取得部１２７と、アクセラレータ管理部１２８と、割り付け先決定部（選択ユニット）１２９と、を含む。指標値処理部１２６は、電力性能指標値（第１値）と消費電力優先指標値（第２値）とを算出する指標値算出部（算出ユニット）１２６ａと、電力性能指標値（第１値）と消費電力優先指標値（第２値）とを比較する指標値比較部（比較ユニット）１２６ｂとを含む。
【００２２】
処理要求受付部１２１は、実行するアプリケーションのスレッドからの処理要求追加、もしくは負荷増減の通知を受け取って実行先決定部１１１による処理を開始させる。稼働スレッド数取得部１２２は、プロセス管理部１１３から現在稼働しているスレッド数を取得する。キュー管理部１２３は、アクセラレータ１０２の実行キューへの処理要求の追加・削除、およびキューイングされている処理要求情報の取得をおこなう。ＲＯＭ情報取得部１２４は、ＲＯＭ１０４に記録された処理時間や消費電力の情報を取得する。処理スレッド管理部１２５は、処理要求をＣＰＵ１０１で実行する場合における処理スレッドの起動、処理割り当て、終了検出、キャンセル、残り処理時間の取得などをおこなう。
【００２３】
指標値処理部１２６は、アプリケーションの実行先を決定するために必要な指標である電力性能指標値と消費電力優先指標値を算出する。端末状態取得部１２７は、バッテリ管理部１０６からバッテリ残量を取得する。そのほか、携帯端末の使用状態（使用の有無に応じて開閉する蓋の開閉状態、電源への接続状態の有無など）を携帯端末に設けられた検出部（不図示）から取得する。アクセラレータ管理部１２８は、キュー先頭の処理要求のアクセラレータへの割り当て、およびアクセラレータでの処理の終了検出などのアクセラレータでおこなう処理を管理する。割り付け先決定部１２９は、処理要求をＣＰＵ１０１で実行するかアクセラレータ１０２で実行するかを決定する。
【００２４】
（アプリケーションの実行先の決定の概要）
ここで、実行先決定部１１１によるアプリケーションの実行先をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれに決定するかの概要について説明する。
【００２５】
図３は、実行先別の終了時刻を説明するための図である。実行先決定部１１１は、アプリケーションの一つの処理（第１処理）をＣＰＵ１０１でおこなった場合の処理の終了時刻と、アクセラレータ１０２でおこなった場合の処理の終了時刻と、をそれぞれ推定する。そして、第１処理をＣＰＵ１０１でおこなった場合の処理時間（第１処理時間）と、第１処理をアクセラレータ１０２でおこなった場合の処理時間（第２処理時間）とをそれぞれ算出する。
【００２６】
そして、これら第１処理時間と第２処理時間から、第１処理時間と第２処理時間（それぞれの終了時刻）の差を比較する。この際、第１処理時間によって必要なＣＰＵ１０１の処理にかかる消費電力（第１消費電力）と、第２処理時間によって必要なアクセラレータ１０２の処理にかかる消費電力（第２消費電力）の差を求め、この差により電力性能指標値を求める。実行先決定部１１１（割り付け先決定部１２９）は、この電力性能指標値と、端末状態取得部１２７により取得したバッテリ残量等の携帯端末の電力消費に関する消費電力優先指標値により、上記第１処理をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれでおこなうかを選択し、処理の実行先を割り当てる。消費電力優先指標値は、実行先決定のために電力性能指標値と比較するための閾値として用いられる。
【００２７】
図３にはＣＰＵ１０１とアクセラレータ（ＡＣＣ）１０２でおこなった場合のスレッド単位の処理時間をケース別に図示してある。ケース１では、アクセラレータ１０２には４つのスレッド３０１があり、第４スレッドをＣＰＵ１０１で実行させようとした場合であるが、この第４スレッドをＣＰＵ１０１で実行すると、ＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２より遅くなる。この場合、電力性能指標値はマイナスとする。すなわち、全てのスレッドをアクセラレータ１０２で実行した方が早く処理が終わる。
【００２８】
ケース２では、アクセラレータ１０２には９つのスレッド３０１があり、第９スレッドをＣＰＵ１０１で実行させようとした場合であるが、この第９スレッドをＣＰＵ１０１で実行したときのＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２よりやや早い。この場合、電力性能指標値は小とする。すなわち、性能優先であれば、ＣＰＵ１０１を実行先とするが、消費電力を考えるとアクセラレータ１０２で実行した方が良い。
【００２９】
ケース３では、アクセラレータ１０２には多数（ｎ）のスレッド３０１があり、第ｎスレッドをＣＰＵ１０１で実行させようとした場合であるが、この第ｎスレッドをＣＰＵ１０１で実行したときのＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２より早くできる。この場合、電力性能指標値は大とする。そして、性能優先であるか消費電力を優先するかにより実行先を決定する。
【００３０】
上記のケース１〜３は、いずれも閾値（後述する消費電力優先指標値）を０としてプラスの値の大小、あるいは値がマイナスとなる場合を想定している。そして、この閾値を携帯端末の状態、たとえば、現在のバッテリ残量等により変更させる構成としても良い。この点は、後述する消費電力優先指標値において説明する。
【００３１】
つぎに、上記の電力性能指標値について説明する。電力性能指標値は、指標値処理部１２６が下記演算により求める。
電力性能指標値＝（アクセラレータでの終了時刻ｔ２−ＣＰＵでの終了時刻ｔ１）／（ＣＰＵでの消費電力量ＰＨ１−アクセラレータでの消費電力量ＰＨ２）
【００３２】
なお、ＣＰＵ１０１での消費電力量ＰＨ１＝ＣＰＵの消費電力Ｐ１×ＣＰＵでの処理にかかる処理時間Ｔ１であり、アクセラレータ１０２での消費電力量ＰＨ２＝アクセラレータの消費電力Ｐ２×アクセラレータの処理にかかる処理時間Ｔ２である。
Ｐ１，Ｐ２と、Ｔ１，Ｔ２、あるいはＰＨ１とＰＨ２は、予め後述する設計フェーズの際の測定により、ＲＯＭ１０４に記録しておく固定値である。
【００３３】
ＣＰＵ１０１の終了時刻ｔ１は、下記の１．２．いずれかにより推定する。
１．ＣＰＵ１０１の終了時刻ｔ１＝開始時刻ｔ０＋割り当て処理の残り時間合計ｔｍ＋処理対象の処理時間Ｔ１
２．ＣＰＵ１０１の終了時刻ｔ１＝開始時刻ｔ０＋処理対象の処理時間Ｔ１／（１−ＣＰＵ１０１の稼働率）
１．２．のいずれを選択するかは、他の全処理の処理時間が判明しているか否かに基づき選択すればよい。
【００３４】
図４は、負荷量に対する電力性能指標値の一例を示す図表である。図示の例では、アクセラレータ１０２の負荷量と電力性能指標値とが比例する例を図示した。アクセラレータ１０２の負荷量が増加するほど、電力性能指標値は高くなる。
【００３５】
アクセラレータ１０２の終了時刻ｔ２は、下記式により推定する。
アクセラレータ１０２の終了時刻ｔ２＝開始時刻ｔ０＋実行中処理の残り時間ｔｎ１、未実行処理の処理時間合計ｔｎ２＋対象処理の処理時間Ｔ２
【００３６】
上記の消費電力優先指標値の決定について説明する。指標値処理部１２６は、下記１．〜３．のいずれかにより消費電力優先指標値を算出する。バッテリ残量、電源接続状態、携帯端末の開閉状態等は、端末状態取得部１２７から取得する。
１．バッテリ残量のみで消費電力優先指標値を算出。
消費電力優先指標値ａ＝α／バッテリ残量
（α：任意の係数）
この消費電力優先指標値は、携帯端末をバッテリで駆動する場合に用いる。
【００３７】
２．電源接続の有無により算出。
電源接続中は、消費電力優先指標値ｂ＝０（性能最優先とする）
バッテリ動作中は、消費電力優先指標値ａ＝α／バッテリ残量
この場合、携帯端末が電源接続中であるか否かを端末状態取得部１２７により取得し、消費電力優先指標値ａ，ｂを選択する。たとえば、携帯端末を充電するクレードルに置いた電源接続中（バッテリ充電中）であれば、消費電力優先指標値ｂを選択する。携帯端末がクレードルから取り外されバッテリ駆動中であれば、消費電力優先指標値ａを選択する。
【００３８】
３．携帯端末の開閉状態（操作状態）により算出。折りたたみ式の携帯端末の蓋が開閉自在であり、開状態で操作使用するものである場合。
携帯端末が開状態であれば、消費電力優先指標値ａ＝α／バッテリ残量
携帯端末が閉状態であれば、消費電力優先指標値ｂ＝β／バッテリ残量
（α，β：任意の係数、α＜βとする。開状態で性能優先とする）
【００３９】
上記１．〜３．のほかに固定値（上述した値０など）としても良い。なお、固定値や係数の値は、後述する設計フェーズの際に携帯端末の要求稼働時間と要求性能等から決定しておき、電力性能指標値と、閾値である消費電力優先指標値とを比較できる値に整合させておく。このように、端末状態取得部１２７により、バッテリの残量、あるいはバッテリの残量に関わる携帯端末の使用状態を取得し、指標値処理部１２６により消費電力優先指標値を求める。
【００４０】
図５は、バッテリ残量に対する消費電力優先指標値の一例を示す図表である。図示の例では、バッテリ残量が少ないほど消費電力優先指標値の変化の割合を高くしてある。
【００４１】
（設計フェーズと実行フェーズについて）
ＲＯＭ１０４には、携帯端末運用前の設計時（設計フェーズ）において必要な情報が記録される。設計フェーズでは、実行先決定部１１１は、アクセラレータ１０２で実行可能な処理をＣＰＵ１０１でおこなった場合と、アクセラレータ１０２でおこなった場合の処理時間と、消費電力を測定してＲＯＭ１０４に記録しておく。
【００４２】
また、携帯端末運用時の処理実行時（実行フェーズ）には、実行先決定部１１１（指標値処理部１２６）は、ＲＯＭ１０４に記録された情報に基づいて電力性能指標値を算出し、割り付け先決定部１２９は、この電力性能指標値と消費電力優先指標値に基づいて、ＣＰＵ１０１、あるいはアクセラレータ１０２のいずれを実行先とするか決定する。
【００４３】
（実行先決定の処理概要）
図６は、携帯端末での実行先決定にかかる処理概要を示すフローチャートである。設計フェーズＳ６００の段階では、ＣＰＵ１０１とアクセラレータ１０２の消費電力を測定する（ステップＳ６０１）。また、アクセラレータ１０２に実行させる処理を決定する（ステップＳ６０２）。また、ＣＰＵ１０１とアクセラレータ１０２での処理時間をそれぞれ測定する（ステップＳ６０３）。また、ＣＰＵ１０１用とアクセラレータ１０２用の実行オブジェクトを用意する（ステップＳ６０４）。
【００４４】
この設計フェーズＳ６００における処理を具体的に説明すると、はじめに、携帯端末で動かすアプリケーション（プログラム）を開発して、アプリケーションでおこなう処理の中からアクセラレータ１０２でおこなう処理を決定する。アクセラレータ１０２でおこなう処理が決定したら、アプリケーションのプログラムからアクセラレータ１０２を利用した処理をおこなうプログラムコードと、アクセラレータ１０２での処理と同内容の処理をＣＰＵ１０１でおこなうプログラムコードを作成しておく。
【００４５】
この後、実際にこれらのプログラムコードを実行してアクセラレータ１０２で処理した場合と、ＣＰＵ１０１で処理した場合の処理時間を実測定する。同じアクセラレータ１０２に対して異なる使い方をする場合は、使い方毎に処理時間を測定する。また、この処理時間中におけるＣＰＵ１０１とアクセラレータ１０２のそれぞれの消費電力を電力測定器等を利用して測定する。測定した消費電力と、使い方毎の処理時間をＲＯＭ１０４に記録する。また、作成したアプリケーションと、アクセラレータ１０２を利用して処理をおこなうプログラムコードと、アクセラレータ１０２と同じ処理をＣＰＵ１０１でおこなうプログラムコードについてもＲＯＭ１０４に記録しておく。
【００４６】
図７は、設計フェーズによりＲＯＭに記録される情報を示す図である。ＲＯＭ１０４には、アプリケーションの処理毎の処理要求情報（１〜ｎ）７０１と、ＣＰＵ消費電力７２１と、アクセラレータ消費電力７２２とが記録される。たとえば、アプリケーションの処理１の処理要求は、ＣＰＵ処理時間７１１と、アクセラレータ処理時間７１２と、ＣＰＵ用実行コード７１３と、アクセラレータ用実行コード７１４とを含む。
【００４７】
図６に戻り説明すると、上記設計フェーズＳ６００によりＲＯＭ１０４に情報が記録された後、携帯端末を運用する実行フェーズＳ６１０となる。実行フェーズＳ６１０における処理は、はじめに、アプリケーションから処理の起動をＯＳ１１０に要求する（ステップＳ６１１）。これにより、ＯＳ１１０は、処理の実行先をＣＰＵ１０１あるいはアクセラレータ１０２に決定して割り付け（ステップＳ６１２）、一連の処理を終了する。
【００４８】
この実行フェーズＳ６１０では、アプリケーション（プログラム）中にアクセラレータ１０２で処理をおこなう場合は、ＯＳ１１０はアクセラレータ１０２へ処理を要求する。ＯＳ１１０ではアクセラレータ１０２が空いていれば、ＲＯＭ１０４に記録されたアクセラレータを利用するプログラムコードを実行してアクセラレータ１０２での処理を開始する。このとき、起動する処理の種別と起動時刻をメモリ１０３に記録しておく。アクセラレータ１０２が利用中の場合は、ＯＳ１１０は、キュー状のデータ構造により、処理要求毎に記録しておく。アクセラレータ１０２での実行が完了すると、ＯＳ１１０は、キューの先頭の処理要求に基づいてアクセラレータ１０２を利用するプログラムコードを実行する。
【００４９】
図８は、実行フェーズにおけるメモリに記録される情報を示す図である。メモリ１０３には、複数の処理要求がそれぞれ処理要求キュー８０１（８０１ａ〜８０１ｎ）に記録され、先頭の処理要求キュー８０１ａから順番に処理される。また、ＣＰＵ１０１に関するＣＰＵ実行中処理情報８１１と、アクセラレータ１０２に関するアクセラレータ実行中処理情報８１２と、がそれぞれ記録される。ＣＰＵ実行中処理情報８１１としては、処理要求、開始時刻等がある。アクセラレータ実行中処理情報８１２としては、処理要求、開始時刻、終了時刻等がある。
【００５０】
ここで、実際に処理要求を処理要求キュー８０１に追加するか否かはＯＳ１１０内の実行先決定部１１１で決定する。実行先決定部１１１では、電力性能指標値と、消費電力優先指標値から要求された処理を処理要求キュー８０１に追加するかＣＰＵ１０１でおこなうかを決定する。
【００５１】
（ＣＰＵでの複数処理時の処理別の終了時刻について）
一つのＣＰＵ１０１で複数の処理（スレッド）が動作する場合、ＯＳ１１０の処理スレッド管理部１２５は、数ミリ秒単位で実行するスレッドを切り替えて、一つのＣＰＵ１０１であたかも複数のスレッドが同時に動作しているように見せている。単位時間あたりどのスレッドにどれだけの時間を割り振るかは、全て処理スレッド管理部１２５がそれぞれのスレッドに設定された優先度情報などに基づき決定している。優先度が同じであれば、全てのスレッドは均等に時間が割り振られる。
【００５２】
図９は、ＣＰＵが複数の処理を実行する状態を示すタイムチャートである。図示の例のように、３つのスレッド１〜３が同時に動いていれば、単位時間あたりそれぞれのスレッド１〜３が３分の１ずつ実行時間を取得することになる。すなわち、ＣＰＵそれぞれのスレッド１〜３を処理開始してから処理終了するまでの時間は３倍かかることになる。また、ＯＳ１１０の処理スレッド管理部１２５は、現在どれだけのスレッドが処理されているか、およびスレッドがこれまでにどれだけの時間実行処理したかについて全て管理している。
【００５３】
したがって、図９に示すように、ＣＰＵ１０１で複数の処理（スレッド）が動作している状況であっても、処理スレッド管理部１２５が管理するスレッド毎の実行時間と、稼働スレッド数取得部１２２が取得した稼働スレッド数から、指標値処理部１２６は、各スレッドの終了時刻ｔ１を算出することができる。
【００５４】
（実行先決定の処理内容）
図１０は、実行先決定部による実行先決定の処理内容を示すフローチャートである。図１０を用いて、ＯＳ１１０の実行先決定部１１１による処理を説明する。
【００５５】
実行先決定部１１１の処理要求受付部１２１は、アプリケーションからの処理要求を受け付ける毎に（ステップＳ１００１）、処理要求毎に処理の実行先を決定するために以下の処理をおこなう。はじめに、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４から処理要求に対応する処理についてのＣＰＵ１０１とアクセラレータ１０２での処理時間Ｔ１，Ｔ２を取得する（ステップＳ１００２）。また、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４からＣＰＵ１０１とアクセラレータ１０２の消費電力Ｐ１，Ｐ２を取得する（ステップＳ１００３）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１００４）。
【００５６】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１００５）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１００６）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の終了時刻ｔ１と、アクセラレータ１０２の終了時刻ｔ２と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１００７）。この電力性能指標値は、上述したように、要求された処理をＣＰＵ１０１でおこなった場合の終了時刻ｔ１と、アクセラレータ１０２でおこなった場合の終了時刻ｔ２と、これらＣＰＵ１０１およびアクセラレータ１０２のそれぞれでおこなった場合の推定消費電力量ＰＨ１，ＰＨ２に基づき算出する。
【００５７】
この際、ＣＰＵ１０１でおこなった場合の処理対象の処理時間Ｔ１は、設計フェーズＳ６００で測定してＲＯＭ１０４に記録してあるため、該当する処理に対応する処理時間をＲＯＭ１０４から取得する。一方、アクセラレータ１０２でおこなった場合の終了時刻ｔ２は、上述したように、アクセラレータ１０２で現在おこなっている実行中処理の残り時間ｔｎ１と、処理要求キュー８０１にたまっている未実行処理の処理時間合計ｔｎ２と、該当する処理をアクセラレータ１０２でおこなった場合の処理時間Ｔ２と開始時刻ｔ０を加算したものとなる。
【００５８】
このように、ＣＰＵ１０１およびアクセラレータ１０２のそれぞれの処理の処理時間Ｔ１，Ｔ２は、設計フェーズで測定してＲＯＭ１０４に記録されているため、それぞれの処理要求に対応する処理時間Ｔ１，Ｔ２をＲＯＭ１０４から取得する。消費電力量ＰＨ１，ＰＨ２についても、ＲＯＭ１０４から読み出して用いる。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１００８）。
【００５９】
消費電力優先指標値は、算出するに限らず、固定値（たとえば０）を用いることもできる。値が０であれば、電力性能指標値だけに基づき処理の実行先を決定することになる。この消費電力優先指標値は、電力性能指標値の値を判断するための閾値として用いるため、消費電力優先指標値と電力性能指標値を単純に比較するだけで処理の実行先を決定できる。
【００６０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１００９）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１００９：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１００９：Ｎｏ）、アプリケーションからの処理要求をアクセラレータ１０２で処理することを決定する。
【００６１】
処理の実行をＣＰＵ１０１に決定した場合は（ステップＳ１００９：Ｙｅｓ）、ＯＳ１１０のプロセス管理部１１３は、ＲＯＭ１０４に記録されている対象処理の処理要求に対応するＣＰＵ用実行コード（プログラムコード）７１３を取得し（ステップＳ１０１０）、新規プロセスを生成して取得した実行コードをそのプロセスで実行させる（ステップＳ１０１１）。そして、プロセス管理部１１３は、ＣＰＵ１０１で実行した処理要求と、現在時刻と、算出した終了時刻をメモリ１０３のＣＰＵ実行中処理情報８１１に記録し（ステップＳ１０１２）、一つの処理を終了する。
【００６２】
一方、処理の実行をアクセラレータ１０２に決定した場合は（ステップＳ１００９：Ｎｏ）、プロセス管理部１１３は、アクセラレータ管理部１２８からアクセラレータ１０２の稼働状況を取得し（ステップＳ１０１３）、アクセラレータ１０２が稼働中であるか否かを判断する（ステップＳ１０１４）。アクセラレータ１０２が稼働中であれば（ステップＳ１０１４：Ｙｅｓ）、最後の処理要求キュー８０１ｎに処理要求を追加し（ステップＳ１０１５）、アクセラレータ１０２での処理をおこなわせ、一つの処理を終了する。
【００６３】
ステップＳ１０１４の判断にてアクセラレータ１０２が稼働中でなければ（ステップＳ１０１４：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１０１６）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１０１７）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１０１８）、一つの処理を終了する。
【００６４】
図１１は、実行先決定部によるアクセラレータでの処理終了後の処理を示すフローチャートである。実行先決定部１１１のアクセラレータ管理部１２８によりアクセラレータ１０２での処理終了を検出すると（ステップＳ１１０１）、プロセス管理部１１３は、先頭の処理要求キュー８０１ａから処理要求を取得し（ステップＳ１１０２）、取得が成功したか確認する（ステップＳ１１０３）。取得が成功すれば（ステップＳ１１０３：Ｙｅｓ）、処理を終了する。
【００６５】
ステップＳ１１０３にて、先頭の処理要求キュー８０１ａからの処理要求が取得できなかったときには（ステップＳ１１０３：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１１０４）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１１０５）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１１０６）、一つの処理を終了する。
【００６６】
（処理の負荷変動時の処理について）
つぎに、処理の負荷変動時における処理の実行先の決定について説明する。負荷の増加は、たとえば、すでに起動しているアプリケーションとは別のアプリケーションの起動や、ＣＰＵ１０１の負荷の監視時に設定以上のスレッド数（負荷）の増加となったときに負荷の増加であると判断する。一方、負荷の減少は、たとえば、すでに起動しているアプリケーションとは別のアプリケーションの終了や、ＣＰＵ１０１の負荷の監視時に設定以上のスレッド数（負荷）の減少となったときに負荷の減少であると判断する。
【００６７】
図１２−１は、処理の負荷増加を検出する処理の流れを示すフローチャートである。処理の負荷増加時には、アプリケーションから新規スレッドの生成要求またはスレッド起動要求が出力される（ステップＳ１２０１）。これにより、プロセス管理部１１３は、スレッドを生成またはスレッドを起動させ（ステップＳ１２０２）、稼働スレッド数の増加を実行先決定部１１１に通知する（ステップＳ１２０３）。実行先決定部１１１は、通知された稼働数スレッドの増加に基づき、負荷増加時における実行先決定の処理をおこなう（ステップＳ１２０４）。
【００６８】
図１２−２は、処理の負荷減少を検出する処理の流れを示すフローチャートである。処理の負荷減少時には、アプリケーションからスレッド終了通知またはスレッド停止要求が出力される（ステップＳ１２１１）。これにより、プロセス管理部１１３は、スレッドを削除またはスレッドを停止させ（ステップＳ１２１２）、稼働スレッド数の減少を実行先決定部１１１に通知する（ステップＳ１２１３）。実行先決定部１１１は、通知された稼働数スレッドの減少に基づき、負荷減少時における実行先決定の処理をおこなう（ステップＳ１２１４）。
【００６９】
上記のように、処理の負荷の増加および減少は、アプリケーションからスレッドの追加、終了、停止、起動等の要求によりプロセス管理部１１３で稼働するスレッド数を変更したことを検出する。
【００７０】
そして、実行先決定部１１１は、新たな処理をＣＰＵ１０１で実行するのに比してアクセラレータ１０２で実行した方が良い場合には、ＣＰＵ１０１での処理をキャンセルし、アクセラレータ１０２でこの処理を実行する。逆に、ＣＰＵ１０１での処理に空きができ、アクセラレータ１０２よりもＣＰＵ１０１で実行した方が良い場合には、アクセラレータ１０２の処理をＣＰＵ１０１で実行する。具体的には、ＣＰＵ１０１とアクセラレータ１０２のいずれで処理を実行した方が全体の処理の終了時刻を早めることができるか、により決定する。
【００７１】
（処理の負荷増加時の処理について）
つぎに、処理の負荷増加時に、処理対象の割り当てが変化する状態を説明する。図１３−１は、負荷が増加した場合の処理要求の流れを示す図、図１３−２は、負荷が増加した場合の処理の終了時刻を説明する図である。時刻ｔ１でスレッドが処理要求をおこなったとき、実行先決定部１１１では、要求された処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合の終了時刻をそれぞれ推定し算出する。
【００７２】
ＣＰＵ１０１で実行した場合には終了時刻ｔ２であると算出されたとする。一方で、アクセラレータ１０２で実行した場合は、すでに多数の処理要求１３０１がキューイングされているため、処理を開始できるのは時刻ｔ３となり、終了時刻ｔ４となる。指標値処理部１２６は、これら終了時刻ｔ２，ｔ４を用いて電力性能指標値を算出する。そして、割り付け先決定部１２９は、ＣＰＵ１０１で処理をした方が効率が良いと判断して、ＣＰＵ１０１の処理要求に対しスレッドＳ１を起動して、ＣＰＵ１０１で処理をおこなう。
【００７３】
つぎに、上記処理後の時間経過による負荷の変動時について説明する。図１４−１は、時間経過により負荷が増加した場合の処理要求の流れを示す図、図１４−２は、時間経過により負荷が増加した場合の処理の終了時刻を説明する図である。
【００７４】
図１３−１、図１３−２を用いて説明した処理時から、一定時間経過した図１４−２の時刻ｔ１’（ｔ１＜ｔ１’＜ｔ２）で新しくスレッドＳ２が起動されたとする。これにより、ＣＰＵ１０１の負荷が上がるため、実行先決定部１１１は、負荷増加の処理を実行する。この負荷増加の処理では、時刻ｔ１’を基準として、処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合のそれぞれの終了時刻ｔ２’，ｔ４’を再計算する。
【００７５】
アクセラレータ１０２側では、時刻ｔ３からｔ３’の間でいくつかの処理要求１４０２が処理要求キュー８０１に追加されている。これにより、時刻ｔ１’の時点からアクセラレータ１０２に処理を追加した場合は、再計算の結果、アクセラレータ１０２で処理が開始できるのが時刻ｔ３’となり終了時刻は時刻ｔ４’に変更になったとする。
【００７６】
一方で、ＣＰＵ１０１で実行した場合は、すでにｔ１からｔ１’の間で処理が進んでいるが、時刻ｔ１’で新しくスレッドＳ２（１４０１）が追加されたことにより、ＣＰＵ１０１の負荷が上昇するため、時刻ｔ１’の時点でまだ処理が済んでいない部分に対して、現在のＣＰＵ１０１の負荷から終了時刻を再計算の結果、終了時刻ｔ２’に変更になったとする。これにより、割り付け先決定部１２９は、今からでもアクセラレータ１０２で処理をおこなった方が効率が良いと判断して、ＣＰＵ１０１のスレッドＳ２の処理をキャンセルし、処理要求キュー８０１に処理要求Ｓ３を追加する。
【００７７】
（処理の負荷増加時の実行先決定処理について）
図１５は、処理の負荷増加時における実行先決定の処理例を示すフローチャートである。実行先決定部１１１がおこなう処理を以下に説明する。プロセス管理部１１３が処理の負荷増加を検出すると（ステップＳ１５０１）、実行先決定部１１１の処理要求受付部１２１は、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４からＣＰＵ１０１で実行している処理要求を取得する（ステップＳ１５０２）。そして、処理要求が取得できたか判断する（ステップＳ１５０３）。処理要求が取得できなければ（ステップＳ１５０３：Ｎｏ）、処理を終了し、処理要求が取得できれば（ステップＳ１５０３：Ｙｅｓ）、つぎに、メモリ１０３からＣＰＵ１０１で実行している処理の開始時刻と、終了時刻を取得する（ステップＳ１５０４）。
【００７８】
また、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４から、処理要求に対応する処理のＣＰＵ１０１と、アクセラレータ１０２での処理時間を取得する（ステップＳ１５０５）。また、ＲＯＭ１０４からＣＰＵ１０１と、アクセラレータ１０２の消費電力を取得する（ステップＳ１５０６）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１５０７）。
【００７９】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１５０８）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１５０９）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の新たな終了時刻（図１４−２の例では終了時刻ｔ２’）と、アクセラレータ１０２の新たな終了時刻（図１４−２の例では、終了時刻ｔ４’）と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１５１０）。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１５１１）。
【００８０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１５１２）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１５１２：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。そして、終了時刻を算出した新たな終了時刻に更新し、ＣＰＵ実行中処理情報８１１を更新し（ステップＳ１５１３）、処理を終了する。
【００８１】
また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１５１２：Ｎｏ）、アプリケーションからの処理要求をアクセラレータ１０２で処理することを決定する。そして、プロセス管理部１１３は、ＣＰＵ１０１で処理をおこなっているプロセスの実行をキャンセルし（ステップＳ１５１４）、アクセラレータ管理部１２８からアクセラレータ１０２の稼働状況を取得する（ステップＳ１５１５）。この後、アクセラレータ１０２が稼働中であるか否かを判断する（ステップＳ１５１６）。アクセラレータ１０２が稼働中であれば（ステップＳ１５１６：Ｙｅｓ）、最後の処理要求キュー８０１ｎに処理要求を追加し（ステップＳ１５１７）、アクセラレータ１０２での処理をおこなわせ、一つの処理を終了する。
【００８２】
一方、アクセラレータ１０２が稼働中でなければ（ステップＳ１５１６：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１５１８）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１５１９）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１５２０）、一つの処理を終了する。
【００８３】
（処理の負荷減少時の処理について）
つぎに、処理の負荷減少時に、処理対象の割り当てが変化する状態を説明する。図１６−１は、負荷が減少した場合の処理要求の流れを示す図、図１６−２は、負荷が減少した場合の処理の終了時刻を説明する図である。時刻ｔ１でスレッドが処理要求をおこなったとき、実行先決定部１１１では、要求された処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合の終了時刻をそれぞれ推定し算出する。
【００８４】
ＣＰＵ１０１で実行した場合には多くのスレッドの処理があるため、終了時刻ｔ２になると算出されたとする。一方で、アクセラレータ１０２では、先にキューイングされている処理要求１６０１の数が少なく終了時刻ｔ４になるとする。指標値処理部１２６は、これら終了時刻ｔ２，ｔ４を用いて電力性能指標値を算出する。そして、割り付け先決定部１２９は、アクセラレータ１０２で処理をした方が効率が良いと判断して、処理要求Ｓ１１を処理要求キュー８０１に追加する。
【００８５】
つぎに、上記処理後の時間経過による負荷の変動時について説明する。図１７−１は、時間経過により負荷が減少した場合の処理要求の流れを示す図、図１７−２は、時間経過により負荷が減少した場合の処理の終了時刻を説明する図である。
【００８６】
図１６−１、図１６−２を用いて説明した処理時から、一定時間経過した図１７−２の時刻ｔ１’で今度はＣＰＵ１０１のスレッドの処理が終了したとすると、ＣＰＵ１０１の負荷が減少するため、上述した負荷増加時と同じように、実行先決定部１１１は、終了時刻の再計算をおこなう。図１６−１および図１６−２の例では、時刻ｔ１でアクセラレータ１０２で処理を実行することが決定され、処理要求がキューイングされているため、アクセラレータ１０２での開始時刻ｔ３と終了時刻ｔ４は変化しないままとなる。
【００８７】
一方、ＣＰＵ１０１で実行する場合は、ＣＰＵ１０１での処理の負荷が減少しているため終了時刻はｔ２’に変更になる。ここで、指標値処理部１２６により電力優先指標値を再計算した結果、ＣＰＵ１０１で処理を実行した方が効率が良いと判断した場合は、最後の処理要求キュー８０１ｎから処理要求Ｓ１２を取り出し（削除し）てスレッドで実行する。
【００８８】
（処理の負荷減少時の実行先決定処理について）
図１８は、処理の負荷減少時における実行先決定の処理例を示すフローチャートである。実行先決定部１１１がおこなう処理を以下に説明する。プロセス管理部１１３が処理の負荷減少を検出すると（ステップＳ１８０１）、実行先決定部１１１のキュー管理部１２３は、メモリ１０３の最後の処理要求キュー８０１ｎから処理要求を取得する（ステップＳ１８０２）。そして、処理要求が取得できたか判断する（ステップＳ１８０３）。処理要求が取得できなければ（ステップＳ１８０３：Ｎｏ）、処理を終了し、処理要求が取得できれば（ステップＳ１８０３：Ｙｅｓ）、つぎに、ＲＯＭ１０４から処理要求に対応する処理のＣＰＵ１０１と、アクセラレータ１０２での処理時間を取得する（ステップＳ１８０４）。また、ＲＯＭ１０４からＣＰＵ１０１と、アクセラレータ１０２の消費電力を取得する（ステップＳ１８０５）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１８０６）。
【００８９】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１８０７）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１８０８）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の新たな終了時刻（図１７−２の例では終了時刻ｔ２’）と、アクセラレータ１０２の新たな終了時刻（図１７−２の例では、終了時刻ｔ４）と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１８０９）。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１８１０）。
【００９０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１８１１）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１８１１：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。そして、対象の処理を処理要求キュー８０１から削除し（ステップＳ１８１２）、ＲＯＭ１０４からＣＰＵ用実行コード７１３を取得する（ステップＳ１８１３）。
【００９１】
そして、プロセス管理部１１３は、処理に対応する新規プロセスを生成して取得したＣＰＵ用実行コード７１３を実行するよう設定する（ステップＳ１８１４）。そして、ＣＰＵ実行中処理情報８１１におけるＣＰＵ１０１で実行した処理要求と、開始時刻と、算出した終了時刻を記録し（ステップＳ１８１５）、処理を終了する。
【００９２】
また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１８１１：Ｎｏ）、処理要求キュー８０１の一つ前の処理要求を取得し（ステップＳ１８１６）、ステップＳ１８０３に戻り、この処理要求に対する上記処理を実行する。
【００９３】
上述したように、処理の負荷変動により、ＣＰＵ１０１で処理できる場合は、アクセラレータ１０２でおこなうために処理要求キュー８０１に積んでいた処理がＣＰＵ１０１でできないか再検討をおこなっている。この際、最後の処理要求キュー８０１ｎの処理から順番にＣＰＵ１０１で稼働しているスレッド数（空き率を用いても良い）に基づいて、新たに処理を要求したときと同様の処理で判断を繰り返す。そして、ＣＰＵ１０１で処理することになった場合には、処理要求キュー８０１から取り出してＣＰＵ１０１で実行する。
【００９４】
以上説明した開示技術では、処理をアクセラレータとプロセッサで実行した場合にいずれでおこなった方が早く処理が終了するか処理の実行先を決定しているので、複数の処理ごとの処理効率を向上させることができる。さらに、処理をアクセラレータとプロセッサで実行した場合のそれぞれの消費電力を求め、この消費電力を含め電力性能指標値として用い、処理の実行先を判断するため、処理効率だけではなく、消費電力を含めて効率的な実行先を決定できるようになる。
【００９５】
さらに、携帯端末の現在の状態、たとえば、バッテリの残量等から決定される消費電力優先指標値を用い、上記の電力性能指標値とともに実行先を決定している。これにより、経時的に変化する携帯端末のバッテリ残量に対応し、現在のバッテリ残量に対応した処理の実行先を決定することができる。このため、処理効率だけではなく、処理実行にかかる消費電力とのバランスが取れた最適な実行先を処理ごとに決定でき、システム全体の処理効率と低消費電力化を両立できるようになる。
【符号の説明】
【００９６】
１００  システム
１０２  アクセラレータ
１０３  メモリ
１０６  バッテリ管理部
１１１  実行先決定部
１１３  プロセス管理部
１２１  処理要求受付部
１２２  稼働スレッド数取得部
１２３  キュー管理部
１２４  ＲＯＭ情報取得部
１２５  処理スレッド管理部
１２６  指標値処理部
１２６ａ  指標値算出部
１２６ｂ  指標値比較部
１２７  端末状態取得部
１２８  アクセラレータ管理部
１２９  割り付け先決定部
８０１  処理要求キュー
８１１  ＣＰＵ実行中処理情報
８１２  アクセラレータ実行中処理情報
【図１】
2012124125.tif 000003
【図２】
2012124125.tif 000004
【図３】
2012124125.tif 000005
【図４】
2012124125.tif 000006
【図５】
2012124125.tif 000007
【図６】
2012124125.tif 000008
【図７】
2012124125.tif 000009
【図８】
2012124125.tif 000010
【図９】
2012124125.tif 000011
【図１０】
2012124125.tif 000012
【図１１】
2012124125.tif 000013
【図１２−１】
2012124125.tif 000014
【図１２−２】
2012124125.tif 000015
【図１３−１】
2012124125.tif 000016
【図１３−２】
2012124125.tif 000017
【図１４−１】
2012124125.tif 000018
【図１４−２】
2012124125.tif 000019
【図１５】
2012124125.tif 000020
【図１６−１】
2012124125.tif 000021
【図１６−２】
2012124125.tif 000022
【図１７−１】
2012124125.tif 000023
【図１７−２】
2012124125.tif 000024
【図１８】
2012124125.tif 000025
【手続補正書】
【提出日】平成25年9月10日(2013.9.10)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＣＰＵと、
アクセラレータと、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と前記アクセラレータが前記第１処理を完了するまでの第２処理時間とに基づく第１値と、前記ＣＰＵおよび前記アクセラレータを駆動するバッテリの使用状態に基づく第２値とを比較する比較ユニットと、
前記比較ユニットの比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択する選択ユニットと、
を含むことを特徴とするシステム。
【請求項２】
前記第１処理時間、前記第２処理時間、前記第１値、および前記第２値を算出する算出ユニットを含むこと
を特徴とする請求項１に記載のシステム。
【請求項３】
前記第１値は、前記第１処理時間と、前記ＣＰＵが前記第１処理を完了する第１終了時刻と、前記ＣＰＵが前記第１処理を実行するときの第１消費電力と、前記第２処理時間と、前記アクセラレータが前記第１処理を完了する第２終了時刻と、前記アクセラレータが前記第１処理を実行するときの第２消費電力とに基づいて、算出されること
を特徴とする請求項１または２に記載のシステム。
【請求項４】
前記第１処理時間と前記第２処理時間とを記録するメモリを含むこと
を特徴とする請求項１〜３のいずれか一つに記載のシステム。
【請求項５】
前記選択ユニットは、
前記第１値が第２値よりも大きいときに前記ＣＰＵを選択し、
前記第１値が前記第２値よりも小さいときに前記アクセラレータを選択すること
を特徴とする請求項１〜４のいずれか一つに記載のシステム。
【請求項６】
前記ＣＰＵの負荷を監視する監視ユニットを含み、
前記監視ユニットは、前記負荷に変動があるときは、前記選択ユニットに対し、前記ＣＰＵおよび前記アクセラレータの選択の見直しを指示すること
を特徴とする請求項１〜５のいずれか一つに記載のシステム。
【請求項７】
前記監視ユニットが前記負荷の増加を検出したとき、
前記選択ユニットは、前記第１値が前記第２値よりも小さければ前記ＣＰＵが実行する前記第１処理をキャンセルさせること
を特徴とする請求項６に記載のシステム。
【請求項８】
ＣＰＵとアクセラレータを備え、バッテリ駆動されるシステムにおけるスケジューリング方法であって、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と、前記アクセラレータが前記第１処理を完了するまでの第２処理時間とをメモリから読み出し、
前記第１処理時間と前記第２処理時間とに基づいて第１値を計算し、
バッテリ残量に基づいて第２値を計算し、
前記第１値と前記第２値を比較し、
比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択し、
選択された前記ＣＰＵまたは前記アクセラレータに前記第１処理を割り当てること
を特徴とするスケジューリング方法。
【請求項９】
前記第１処理の処理要求に基づいて当該第１処理の開始時刻を取得し、
前記第１処理の開始時刻に基づいて、前記ＣＰＵが前記第１処理を完了する第１終了時刻と前記アクセラレータが前記第１処理を完了する第２終了時刻と算出し、
前記第１終了時刻と前記第２終了時刻とに基づいて前記第１値を計算すること
を特徴とする請求項８に記載のスケジューリング方法。
【請求項１０】
前記ＣＰＵが前記第１処理を実行するときの第１消費電力と前記アクセラレータが前記第１処理を実行するときの第２消費電力とを前記メモリから読み出し、
前記第１消費電力と前記第２消費電力とに基づいて前記第１値を算出すること
を特徴とする請求項８または９に記載のスケジューリング方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、処理に適した実行先としてプロセッサあるいはアクセラレータを選択するシステムおよびスケジューリング方法に関する。
【背景技術】
【０００２】
システムには汎用のプロセッサが設けられ、多数の処理をプロセッサで実行する。動画処理や音声処理、３Ｄグラフィック処理、信号処理のような高い処理性能が求められるが処理の内容は決まっているといった特定の処理については、システムにハードウェアエンジンやアクセラレータと呼ばれる処理専用回路を設け、このアクセラレータにより特定の処理をおこなわせている。
【０００３】
一般に、プロセッサは汎用性が高い反面、消費電力や処理性能の面ではアクセラレータに劣る。このため、アクセラレータを有効活用することで高性能かつ低消費電力を実現できる。単一の処理に関してだけみれば、この単一処理がアクセラレータで実行可能なら、アクセラレータで実行した方が電力面でも性能面でも優れていることになる。
【０００４】
ここで、非常に多くの処理がアクセラレータで実行可能であるが、プロセッサでのみおこなえる処理がごく少数しかなかったと仮定する。この場合、アクセラレータで実行可能な処理を、全てアクセラレータでおこなうとアクセラレータ側が非常に混雑し、アクセラレータでの処理が遅延する結果、システム全体の処理効率を低下させるおそれがある。このため、アクセラレータで実行可能な処理であっても一部をプロセッサでおこなう手法が開示されている（たとえば、下記特許文献１，２参照。）。
【０００５】
特許文献１の技術は、新たにアクセラレータに処理を要求するときに、現在アクセラレータで処理待ちの処理の予想処理時間と、要求しようとしている処理のアクセラレータでの予想処理時間と開始時刻から、要求しようとしている処理の終了時刻を推定する。そして、アクセラレータでは期待している時刻までに処理が終了しない場合は、その処理をプロセッサでおこなうというものである。
【０００６】
また、特許文献２の技術は、アクセラレータで実行可能なそれぞれの処理に、処理時間の指標値を設定しておき、まず処理をプロセッサで実行しておく。そして、設定された処理時間以内にプロセッサでの処理が終わらないといった指標値を満たさない場合に、アクセラレータで実行するというものである。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００６−３０２１６８号公報
【特許文献２】特開２０１０−７２７３１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
処理時間の観点でみれば、アクセラレータが混んでいる場合に一部をプロセッサでおこなった方が効率が良いこともあるが、消費電力の観点でみれば、アクセラレータで実行可能な処理は全てアクセラレータでおこなった方が消費電力量は少なくなる。
【０００９】
このため、必要な処理時間（性能）と、消費電力との兼ね合い（トレードオフ）を考慮して最適な動作点を決定する必要があるが、従来はこれをおこなうことができなかった。
【００１０】
たとえば、携帯電話端末のようなバッテリで動作する携帯端末の場合、この最適な動作点はバッテリの残量等の状況により常に変化する。携帯端末での使用を想定すると、バッテリ残量が豊富にある場合には、消費電力が増えたとしても性能を優先する処理で良い。しかし、バッテリ残量が少なくなってきた場合には、携帯端末のバッテリを充電するまでの間は、バッテリでの駆動が持続できるように消費電力は極力抑えたい状況となる。
【００１１】
上記従来の特許文献１の技術では、性能しか指標として利用できず、また、特許文献２の技術では、固定の指標を前提としているため、携帯端末のようにバッテリ残量に応じて最適な動作点が動的に変化する機器には適用できない。
【００１２】
開示のシステムおよびスケジューリング方法は、上述した問題点を解消するものであり、ＣＰＵとアクセラレータで処理した際の処理速度と消費電力を推定して実行先を決定し、処理効率と低消費電力化を両立することを目的とする。
【課題を解決するための手段】
【００１３】
上述した課題を解決し、目的を達成するため、開示技術は、ＣＰＵと、アクセラレータとを備え、実行先決定部により処理（第１処理）をＣＰＵあるいはアクセラレータのいずれでおこなうかを決定し実行させる。この実行先決定部は、ＣＰＵが第１処理を完了するまでの第１処理時間とアクセラレータが第１処理を完了するまでの第２処理時間とに基づく第１値と、バッテリ残量に基づく第２値とを比較する指標値比較部と、指標値比較部の比較結果に基づいて、ＣＰＵまたはアクセラレータのいずれかを選択する割り付け先決定部と、を含む。
【発明の効果】
【００１４】
開示のシステムおよびスケジューリング方法によれば、ＣＰＵとアクセラレータで処理した際の処理速度と消費電力を推定して実行先を決定し、処理効率と低消費電力化を両立できるという効果を奏する。
【図面の簡単な説明】
【００１５】
【図１】図１は、実施の形態にかかるシステムの構成例を示すブロック図である。
【図２】図２は、オペレーティングシステムの内部構成例を示すブロック図である。
【図３】図３は、実行先別の終了時刻を説明するための図である。
【図４】図４は、負荷量に対する電力性能指標値の一例を示す図表である。
【図５】図５は、バッテリ残量に対する消費電力優先指標値の一例を示す図表である。
【図６】図６は、携帯端末での実行先決定にかかる処理概要を示すフローチャートである。
【図７】図７は、設計フェーズによりＲＯＭに記録される情報を示す図である。
【図８】図８は、実行フェーズにおけるメモリに記録される情報を示す図である。
【図９】図９は、ＣＰＵが複数の処理を実行する状態を示すタイムチャートである。
【図１０】図１０は、実行先決定部による実行先決定の処理内容を示すフローチャートである。
【図１１】図１１は、実行先決定部によるアクセラレータでの処理終了後の処理を示すフローチャートである。
【図１２−１】図１２−１は、処理の負荷増加を検出する処理の流れを示すフローチャートである。
【図１２−２】図１２−２は、処理の負荷減少を検出する処理の流れを示すフローチャートである。
【図１３−１】図１３−１は、負荷が増加した場合の処理要求の流れを示す図である。
【図１３−２】図１３−２は、負荷が増加した場合の処理の終了時刻を説明する図である。
【図１４−１】図１４−１は、時間経過により負荷が増加した場合の処理要求の流れを示す図である。
【図１４−２】図１４−２は、時間経過により負荷が増加した場合の処理の終了時刻を説明する図である。
【図１５】図１５は、処理の負荷増加時における実行先決定の処理例を示すフローチャートである。
【図１６−１】図１６−１は、負荷が減少した場合の処理要求の流れを示す図である。
【図１６−２】図１６−２は、負荷が減少した場合の処理の終了時刻を説明する図である。
【図１７−１】図１７−１は、時間経過により負荷が減少した場合の処理要求の流れを示す図である。
【図１７−２】図１７−２は、時間経過により負荷が減少した場合の処理の終了時刻を説明する図である。
【図１８】図１８は、処理の負荷減少時における実行先決定の処理例を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下に添付図面を参照して、開示技術の好適な実施の形態を詳細に説明する。
【００１７】
（実施の形態）
開示のシステムは、データ処理の汎用性が高く消費電力が大きいプロセッサ（ＣＰＵ）と、汎用性が低いがＣＰＵよりも特定の処理の処理速度が早く、消費電力が小さいハードウェア・アクセラレータとを備えたシステムである。そして、これらＣＰＵとアクセラレータの処理性能に関する電力性能指標値（第１値）と、システムを駆動するバッテリの消費状態等に関する消費電力優先指標値（第２値）とをあらかじめ求めておくことにより、これからおこなおうとする処理をＣＰＵあるいはアクセラレータのいずれの処理先で実行させるかを選択する。これにより、システムが搭載された機器がたとえばバッテリ駆動される場合において、バッテリ残量の変化に対応した処理先を適切に選択でき、処理効率と低消費電力化を両立させる。以下、システムが、バッテリで動作する携帯端末に搭載された例を用いて説明する。
【００１８】
（システムの構成例）
図１は、実施の形態にかかるシステムの構成例を示すブロック図である。開示のシステム１００は、ＣＰＵ１０１と、ＣＰＵ１０１を介して利用可能なアクセラレータ（ＡＣＣ）１０２と、メモリ１０３と、ＲＯＭ１０４と、現在時刻を計時するタイマ１０５と、バッテリ管理部１０６と、これらＣＰＵ１０１〜バッテリ管理部１０６を接続するバス（ＢＵＳ）１０７とを含む。ＲＯＭ１０４には、ＣＰＵ１０１およびアクセラレータ１０２別の処理時間と消費電力の情報等が記録される。ＣＰＵ１０１は、オペレーティングシステム（ＯＳ）１１０によりアプリケーションの処理の実行を制御する。
【００１９】
アプリケーションの実行先は、ＯＳ１１０によりＣＰＵ１０１あるいはアクセラレータ１０２が指定される。ＣＰＵ１０１が実行先として決定されたときには、図中Ａの経路でＣＰＵ用実行コードがＣＰＵ１０１に出力される。アクセラレータ１０２が実行先として決定されたときには図中Ｂの経路でＣＰＵ１０１を経由し、アクセラレータ１０２にアクセラレータ用実行コードが出力される。
【００２０】
図２は、オペレーティングシステムの内部構成例を示すブロック図である。ＯＳ１１０は、実行先決定部１１１と、プロセス管理部１１３と、を含む。実行先決定部１１１は、アプリケーションの処理の実行先をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれかに決定する。プロセス管理部１１３は、アプリケーション実行時のプロセスおよびプロセスのスレッドを管理する。また、稼働スレッド数を実行先決定部１１１の稼働スレッド数取得部１２２に通知し、稼働スレッド数の増減毎に通知する。このプロセス管理部１１３は、ＣＰＵ１０１の処理の負荷を監視する監視ユニットとして機能する。
【００２１】
より詳細に説明すると、実行先決定部１１１は、処理要求受付部１２１と、稼働スレッド数取得部１２２と、キュー管理部１２３と、ＲＯＭ情報取得部１２４と、処理スレッド管理部１２５と、指標値処理部１２６と、端末状態取得部１２７と、アクセラレータ管理部１２８と、割り付け先決定部（選択ユニット）１２９と、を含む。指標値処理部１２６は、電力性能指標値（第１値）と消費電力優先指標値（第２値）とを算出する指標値算出部（算出ユニット）１２６ａと、電力性能指標値（第１値）と消費電力優先指標値（第２値）とを比較する指標値比較部（比較ユニット）１２６ｂとを含む。
【００２２】
処理要求受付部１２１は、実行するアプリケーションのスレッドからの処理要求追加、もしくは負荷増減の通知を受け取って実行先決定部１１１による処理を開始させる。稼働スレッド数取得部１２２は、プロセス管理部１１３から現在稼働しているスレッド数を取得する。キュー管理部１２３は、アクセラレータ１０２の実行キューへの処理要求の追加・削除、およびキューイングされている処理要求情報の取得をおこなう。ＲＯＭ情報取得部１２４は、ＲＯＭ１０４に記録された処理時間や消費電力の情報を取得する。処理スレッド管理部１２５は、処理要求をＣＰＵ１０１で実行する場合における処理スレッドの起動、処理割り当て、終了検出、キャンセル、残り処理時間の取得などをおこなう。
【００２３】
指標値処理部１２６は、アプリケーションの実行先を決定するために必要な指標である電力性能指標値と消費電力優先指標値を算出する。端末状態取得部１２７は、バッテリ管理部１０６からバッテリ残量を取得する。そのほか、携帯端末の使用状態（使用の有無に応じて開閉する蓋の開閉状態、電源への接続状態の有無など）を携帯端末に設けられた検出部（不図示）から取得する。アクセラレータ管理部１２８は、キュー先頭の処理要求のアクセラレータへの割り当て、およびアクセラレータでの処理の終了検出などのアクセラレータでおこなう処理を管理する。割り付け先決定部１２９は、処理要求をＣＰＵ１０１で実行するかアクセラレータ１０２で実行するかを決定する。
【００２４】
（アプリケーションの実行先の決定の概要）
ここで、実行先決定部１１１によるアプリケーションの実行先をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれに決定するかの概要について説明する。
【００２５】
図３は、実行先別の終了時刻を説明するための図である。実行先決定部１１１は、アプリケーションの一つの処理（第１処理）をＣＰＵ１０１でおこなった場合の処理の終了時刻と、アクセラレータ１０２でおこなった場合の処理の終了時刻と、をそれぞれ推定する。そして、第１処理をＣＰＵ１０１でおこなった場合の処理時間（第１処理時間）と、第１処理をアクセラレータ１０２でおこなった場合の処理時間（第２処理時間）とをそれぞれ算出する。
【００２６】
そして、これら第１処理時間と第２処理時間から、第１処理時間と第２処理時間（それぞれの終了時刻）の差を比較する。この際、第１処理時間によって必要なＣＰＵ１０１の処理にかかる消費電力（第１消費電力）と、第２処理時間によって必要なアクセラレータ１０２の処理にかかる消費電力（第２消費電力）の差を求め、この差により電力性能指標値を求める。実行先決定部１１１（割り付け先決定部１２９）は、この電力性能指標値と、端末状態取得部１２７により取得したバッテリ残量等の携帯端末の電力消費に関する消費電力優先指標値により、上記第１処理をＣＰＵ１０１、あるいはアクセラレータ１０２のいずれでおこなうかを選択し、処理の実行先を割り当てる。消費電力優先指標値は、実行先決定のために電力性能指標値と比較するための閾値として用いられる。
【００２７】
図３にはＣＰＵ１０１とアクセラレータ（ＡＣＣ）１０２でおこなった場合のスレッド単位の処理時間をケース別に図示してある。ケース１では、アクセラレータ１０２には４つのスレッド３０１があり、第４スレッドをＣＰＵ１０１で実行させようとした場合であるが、この第４スレッドをＣＰＵ１０１で実行すると、ＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２より遅くなる。この場合、電力性能指標値はマイナスとする。すなわち、全てのスレッドをアクセラレータ１０２で実行した方が早く処理が終わる。
【００２８】
ケース２では、アクセラレータ１０２には９つのスレッド３０１があり、第９スレッドをＣＰＵ１０１で実行させようとした場合であるが、この第９スレッドをＣＰＵ１０１で実行したときのＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２よりやや早い。この場合、電力性能指標値は小とする。すなわち、性能優先であれば、ＣＰＵ１０１を実行先とするが、消費電力を考えるとアクセラレータ１０２で実行した方が良い。
【００２９】
ケース３では、アクセラレータ１０２には多数（ｎ）のスレッド３０１があり、第ｎスレッドをＣＰＵ１０１で実行させようとした場合であるが、この第ｎスレッドをＣＰＵ１０１で実行したときのＣＰＵ１０１での終了時刻ｔ１は、アクセラレータ１０２で実行した場合の終了時刻ｔ２より早くできる。この場合、電力性能指標値は大とする。そして、性能優先であるか消費電力を優先するかにより実行先を決定する。
【００３０】
上記のケース１〜３は、いずれも閾値（後述する消費電力優先指標値）を０としてプラスの値の大小、あるいは値がマイナスとなる場合を想定している。そして、この閾値を携帯端末の状態、たとえば、現在のバッテリ残量等により変更させる構成としても良い。この点は、後述する消費電力優先指標値において説明する。
【００３１】
つぎに、上記の電力性能指標値について説明する。電力性能指標値は、指標値処理部１２６が下記演算により求める。
電力性能指標値＝（アクセラレータでの終了時刻ｔ２−ＣＰＵでの終了時刻ｔ１）／（ＣＰＵでの消費電力量ＰＨ１−アクセラレータでの消費電力量ＰＨ２）
【００３２】
なお、ＣＰＵ１０１での消費電力量ＰＨ１＝ＣＰＵの消費電力Ｐ１×ＣＰＵでの処理にかかる処理時間Ｔ１であり、アクセラレータ１０２での消費電力量ＰＨ２＝アクセラレータの消費電力Ｐ２×アクセラレータの処理にかかる処理時間Ｔ２である。
Ｐ１，Ｐ２と、Ｔ１，Ｔ２、あるいはＰＨ１とＰＨ２は、予め後述する設計フェーズの際の測定により、ＲＯＭ１０４に記録しておく固定値である。
【００３３】
ＣＰＵ１０１の終了時刻ｔ１は、下記の１．２．いずれかにより推定する。
１．ＣＰＵ１０１の終了時刻ｔ１＝開始時刻ｔ０＋割り当て処理の残り時間合計ｔｍ＋処理対象の処理時間Ｔ１
２．ＣＰＵ１０１の終了時刻ｔ１＝開始時刻ｔ０＋処理対象の処理時間Ｔ１／（１−ＣＰＵ１０１の稼働率）
１．２．のいずれを選択するかは、他の全処理の処理時間が判明しているか否かに基づき選択すればよい。
【００３４】
図４は、負荷量に対する電力性能指標値の一例を示す図表である。図示の例では、アクセラレータ１０２の負荷量と電力性能指標値とが比例する例を図示した。アクセラレータ１０２の負荷量が増加するほど、電力性能指標値は高くなる。
【００３５】
アクセラレータ１０２の終了時刻ｔ２は、下記式により推定する。
アクセラレータ１０２の終了時刻ｔ２＝開始時刻ｔ０＋実行中処理の残り時間ｔｎ１、未実行処理の処理時間合計ｔｎ２＋対象処理の処理時間Ｔ２
【００３６】
上記の消費電力優先指標値の決定について説明する。指標値処理部１２６は、下記１．〜３．のいずれかにより消費電力優先指標値を算出する。バッテリ残量、電源接続状態、携帯端末の開閉状態等は、端末状態取得部１２７から取得する。
１．バッテリ残量のみで消費電力優先指標値を算出。
消費電力優先指標値ａ＝α／バッテリ残量
（α：任意の係数）
この消費電力優先指標値は、携帯端末をバッテリで駆動する場合に用いる。
【００３７】
２．電源接続の有無により算出。
電源接続中は、消費電力優先指標値ｂ＝０（性能最優先とする）
バッテリ動作中は、消費電力優先指標値ａ＝α／バッテリ残量
この場合、携帯端末が電源接続中であるか否かを端末状態取得部１２７により取得し、消費電力優先指標値ａ，ｂを選択する。たとえば、携帯端末を充電するクレードルに置いた電源接続中（バッテリ充電中）であれば、消費電力優先指標値ｂを選択する。携帯端末がクレードルから取り外されバッテリ駆動中であれば、消費電力優先指標値ａを選択する。
【００３８】
３．携帯端末の開閉状態（操作状態）により算出。折りたたみ式の携帯端末の蓋が開閉自在であり、開状態で操作使用するものである場合。
携帯端末が開状態であれば、消費電力優先指標値ａ＝α／バッテリ残量
携帯端末が閉状態であれば、消費電力優先指標値ｂ＝β／バッテリ残量
（α，β：任意の係数、α＜βとする。開状態で性能優先とする）
【００３９】
上記１．〜３．のほかに固定値（上述した値０など）としても良い。なお、固定値や係数の値は、後述する設計フェーズの際に携帯端末の要求稼働時間と要求性能等から決定しておき、電力性能指標値と、閾値である消費電力優先指標値とを比較できる値に整合させておく。このように、端末状態取得部１２７により、バッテリの残量、あるいはバッテリの残量に関わる携帯端末の使用状態を取得し、指標値処理部１２６により消費電力優先指標値を求める。
【００４０】
図５は、バッテリ残量に対する消費電力優先指標値の一例を示す図表である。図示の例では、バッテリ残量が少ないほど消費電力優先指標値の変化の割合を高くしてある。
【００４１】
（設計フェーズと実行フェーズについて）
ＲＯＭ１０４には、携帯端末運用前の設計時（設計フェーズ）において必要な情報が記録される。設計フェーズでは、実行先決定部１１１は、アクセラレータ１０２で実行可能な処理をＣＰＵ１０１でおこなった場合と、アクセラレータ１０２でおこなった場合の処理時間と、消費電力を測定してＲＯＭ１０４に記録しておく。
【００４２】
また、携帯端末運用時の処理実行時（実行フェーズ）には、実行先決定部１１１（指標値処理部１２６）は、ＲＯＭ１０４に記録された情報に基づいて電力性能指標値を算出し、割り付け先決定部１２９は、この電力性能指標値と消費電力優先指標値に基づいて、ＣＰＵ１０１、あるいはアクセラレータ１０２のいずれを実行先とするか決定する。
【００４３】
（実行先決定の処理概要）
図６は、携帯端末での実行先決定にかかる処理概要を示すフローチャートである。設計フェーズＳ６００の段階では、ＣＰＵ１０１とアクセラレータ１０２の消費電力を測定する（ステップＳ６０１）。また、アクセラレータ１０２に実行させる処理を決定する（ステップＳ６０２）。また、ＣＰＵ１０１とアクセラレータ１０２での処理時間をそれぞれ測定する（ステップＳ６０３）。また、ＣＰＵ１０１用とアクセラレータ１０２用の実行オブジェクトを用意する（ステップＳ６０４）。
【００４４】
この設計フェーズＳ６００における処理を具体的に説明すると、はじめに、携帯端末で動かすアプリケーション（プログラム）を開発して、アプリケーションでおこなう処理の中からアクセラレータ１０２でおこなう処理を決定する。アクセラレータ１０２でおこなう処理が決定したら、アプリケーションのプログラムからアクセラレータ１０２を利用した処理をおこなうプログラムコードと、アクセラレータ１０２での処理と同内容の処理をＣＰＵ１０１でおこなうプログラムコードを作成しておく。
【００４５】
この後、実際にこれらのプログラムコードを実行してアクセラレータ１０２で処理した場合と、ＣＰＵ１０１で処理した場合の処理時間を実測定する。同じアクセラレータ１０２に対して異なる使い方をする場合は、使い方毎に処理時間を測定する。また、この処理時間中におけるＣＰＵ１０１とアクセラレータ１０２のそれぞれの消費電力を電力測定器等を利用して測定する。測定した消費電力と、使い方毎の処理時間をＲＯＭ１０４に記録する。また、作成したアプリケーションと、アクセラレータ１０２を利用して処理をおこなうプログラムコードと、アクセラレータ１０２と同じ処理をＣＰＵ１０１でおこなうプログラムコードについてもＲＯＭ１０４に記録しておく。
【００４６】
図７は、設計フェーズによりＲＯＭに記録される情報を示す図である。ＲＯＭ１０４には、アプリケーションの処理毎の処理要求情報（１〜ｎ）７０１と、ＣＰＵ消費電力７２１と、アクセラレータ消費電力７２２とが記録される。たとえば、アプリケーションの処理１の処理要求は、ＣＰＵ処理時間７１１と、アクセラレータ処理時間７１２と、ＣＰＵ用実行コード７１３と、アクセラレータ用実行コード７１４とを含む。
【００４７】
図６に戻り説明すると、上記設計フェーズＳ６００によりＲＯＭ１０４に情報が記録された後、携帯端末を運用する実行フェーズＳ６１０となる。実行フェーズＳ６１０における処理は、はじめに、アプリケーションから処理の起動をＯＳ１１０に要求する（ステップＳ６１１）。これにより、ＯＳ１１０は、処理の実行先をＣＰＵ１０１あるいはアクセラレータ１０２に決定して割り付け（ステップＳ６１２）、一連の処理を終了する。
【００４８】
この実行フェーズＳ６１０では、アプリケーション（プログラム）中にアクセラレータ１０２で処理をおこなう場合は、ＯＳ１１０はアクセラレータ１０２へ処理を要求する。ＯＳ１１０ではアクセラレータ１０２が空いていれば、ＲＯＭ１０４に記録されたアクセラレータを利用するプログラムコードを実行してアクセラレータ１０２での処理を開始する。このとき、起動する処理の種別と起動時刻をメモリ１０３に記録しておく。アクセラレータ１０２が利用中の場合は、ＯＳ１１０は、キュー状のデータ構造により、処理要求毎に記録しておく。アクセラレータ１０２での実行が完了すると、ＯＳ１１０は、キューの先頭の処理要求に基づいてアクセラレータ１０２を利用するプログラムコードを実行する。
【００４９】
図８は、実行フェーズにおけるメモリに記録される情報を示す図である。メモリ１０３には、複数の処理要求がそれぞれ処理要求キュー８０１（８０１ａ〜８０１ｎ）に記録され、先頭の処理要求キュー８０１ａから順番に処理される。また、ＣＰＵ１０１に関するＣＰＵ実行中処理情報８１１と、アクセラレータ１０２に関するアクセラレータ実行中処理情報８１２と、がそれぞれ記録される。ＣＰＵ実行中処理情報８１１としては、処理要求、開始時刻等がある。アクセラレータ実行中処理情報８１２としては、処理要求、開始時刻、終了時刻等がある。
【００５０】
ここで、実際に処理要求を処理要求キュー８０１に追加するか否かはＯＳ１１０内の実行先決定部１１１で決定する。実行先決定部１１１では、電力性能指標値と、消費電力優先指標値から要求された処理を処理要求キュー８０１に追加するかＣＰＵ１０１でおこなうかを決定する。
【００５１】
（ＣＰＵでの複数処理時の処理別の終了時刻について）
一つのＣＰＵ１０１で複数の処理（スレッド）が動作する場合、ＯＳ１１０の処理スレッド管理部１２５は、数ミリ秒単位で実行するスレッドを切り替えて、一つのＣＰＵ１０１であたかも複数のスレッドが同時に動作しているように見せている。単位時間あたりどのスレッドにどれだけの時間を割り振るかは、全て処理スレッド管理部１２５がそれぞれのスレッドに設定された優先度情報などに基づき決定している。優先度が同じであれば、全てのスレッドは均等に時間が割り振られる。
【００５２】
図９は、ＣＰＵが複数の処理を実行する状態を示すタイムチャートである。図示の例のように、３つのスレッド１〜３が同時に動いていれば、単位時間あたりそれぞれのスレッド１〜３が３分の１ずつ実行時間を取得することになる。すなわち、ＣＰＵそれぞれのスレッド１〜３を処理開始してから処理終了するまでの時間は３倍かかることになる。また、ＯＳ１１０の処理スレッド管理部１２５は、現在どれだけのスレッドが処理されているか、およびスレッドがこれまでにどれだけの時間実行処理したかについて全て管理している。
【００５３】
したがって、図９に示すように、ＣＰＵ１０１で複数の処理（スレッド）が動作している状況であっても、処理スレッド管理部１２５が管理するスレッド毎の実行時間と、稼働スレッド数取得部１２２が取得した稼働スレッド数から、指標値処理部１２６は、各スレッドの終了時刻ｔ１を算出することができる。
【００５４】
（実行先決定の処理内容）
図１０は、実行先決定部による実行先決定の処理内容を示すフローチャートである。図１０を用いて、ＯＳ１１０の実行先決定部１１１による処理を説明する。
【００５５】
実行先決定部１１１の処理要求受付部１２１は、アプリケーションからの処理要求を受け付ける毎に（ステップＳ１００１）、処理要求毎に処理の実行先を決定するために以下の処理をおこなう。はじめに、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４から処理要求に対応する処理についてのＣＰＵ１０１とアクセラレータ１０２での処理時間Ｔ１，Ｔ２を取得する（ステップＳ１００２）。また、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４からＣＰＵ１０１とアクセラレータ１０２の消費電力Ｐ１，Ｐ２を取得する（ステップＳ１００３）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１００４）。
【００５６】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１００５）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１００６）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の終了時刻ｔ１と、アクセラレータ１０２の終了時刻ｔ２と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１００７）。この電力性能指標値は、上述したように、要求された処理をＣＰＵ１０１でおこなった場合の終了時刻ｔ１と、アクセラレータ１０２でおこなった場合の終了時刻ｔ２と、これらＣＰＵ１０１およびアクセラレータ１０２のそれぞれでおこなった場合の推定消費電力量ＰＨ１，ＰＨ２に基づき算出する。
【００５７】
この際、ＣＰＵ１０１でおこなった場合の処理対象の処理時間Ｔ１は、設計フェーズＳ６００で測定してＲＯＭ１０４に記録してあるため、該当する処理に対応する処理時間をＲＯＭ１０４から取得する。一方、アクセラレータ１０２でおこなった場合の終了時刻ｔ２は、上述したように、アクセラレータ１０２で現在おこなっている実行中処理の残り時間ｔｎ１と、処理要求キュー８０１にたまっている未実行処理の処理時間合計ｔｎ２と、該当する処理をアクセラレータ１０２でおこなった場合の処理時間Ｔ２と開始時刻ｔ０を加算したものとなる。
【００５８】
このように、ＣＰＵ１０１およびアクセラレータ１０２のそれぞれの処理の処理時間Ｔ１，Ｔ２は、設計フェーズで測定してＲＯＭ１０４に記録されているため、それぞれの処理要求に対応する処理時間Ｔ１，Ｔ２をＲＯＭ１０４から取得する。消費電力量ＰＨ１，ＰＨ２についても、ＲＯＭ１０４から読み出して用いる。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１００８）。
【００５９】
消費電力優先指標値は、算出するに限らず、固定値（たとえば０）を用いることもできる。値が０であれば、電力性能指標値だけに基づき処理の実行先を決定することになる。この消費電力優先指標値は、電力性能指標値の値を判断するための閾値として用いるため、消費電力優先指標値と電力性能指標値を単純に比較するだけで処理の実行先を決定できる。
【００６０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１００９）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１００９：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１００９：Ｎｏ）、アプリケーションからの処理要求をアクセラレータ１０２で処理することを決定する。
【００６１】
処理の実行をＣＰＵ１０１に決定した場合は（ステップＳ１００９：Ｙｅｓ）、ＯＳ１１０のプロセス管理部１１３は、ＲＯＭ１０４に記録されている対象処理の処理要求に対応するＣＰＵ用実行コード（プログラムコード）７１３を取得し（ステップＳ１０１０）、新規プロセスを生成して取得した実行コードをそのプロセスで実行させる（ステップＳ１０１１）。そして、プロセス管理部１１３は、ＣＰＵ１０１で実行した処理要求と、現在時刻と、算出した終了時刻をメモリ１０３のＣＰＵ実行中処理情報８１１に記録し（ステップＳ１０１２）、一つの処理を終了する。
【００６２】
一方、処理の実行をアクセラレータ１０２に決定した場合は（ステップＳ１００９：Ｎｏ）、プロセス管理部１１３は、アクセラレータ管理部１２８からアクセラレータ１０２の稼働状況を取得し（ステップＳ１０１３）、アクセラレータ１０２が稼働中であるか否かを判断する（ステップＳ１０１４）。アクセラレータ１０２が稼働中であれば（ステップＳ１０１４：Ｙｅｓ）、最後の処理要求キュー８０１ｎに処理要求を追加し（ステップＳ１０１５）、アクセラレータ１０２での処理をおこなわせ、一つの処理を終了する。
【００６３】
ステップＳ１０１４の判断にてアクセラレータ１０２が稼働中でなければ（ステップＳ１０１４：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１０１６）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１０１７）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１０１８）、一つの処理を終了する。
【００６４】
図１１は、実行先決定部によるアクセラレータでの処理終了後の処理を示すフローチャートである。実行先決定部１１１のアクセラレータ管理部１２８によりアクセラレータ１０２での処理終了を検出すると（ステップＳ１１０１）、プロセス管理部１１３は、先頭の処理要求キュー８０１ａから処理要求を取得し（ステップＳ１１０２）、取得が成功したか確認する（ステップＳ１１０３）。取得が成功すれば（ステップＳ１１０３：Ｙｅｓ）、処理を終了する。
【００６５】
ステップＳ１１０３にて、先頭の処理要求キュー８０１ａからの処理要求が取得できなかったときには（ステップＳ１１０３：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１１０４）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１１０５）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１１０６）、一つの処理を終了する。
【００６６】
（処理の負荷変動時の処理について）
つぎに、処理の負荷変動時における処理の実行先の決定について説明する。負荷の増加は、たとえば、すでに起動しているアプリケーションとは別のアプリケーションの起動や、ＣＰＵ１０１の負荷の監視時に設定以上のスレッド数（負荷）の増加となったときに負荷の増加であると判断する。一方、負荷の減少は、たとえば、すでに起動しているアプリケーションとは別のアプリケーションの終了や、ＣＰＵ１０１の負荷の監視時に設定以上のスレッド数（負荷）の減少となったときに負荷の減少であると判断する。
【００６７】
図１２−１は、処理の負荷増加を検出する処理の流れを示すフローチャートである。処理の負荷増加時には、アプリケーションから新規スレッドの生成要求またはスレッド起動要求が出力される（ステップＳ１２０１）。これにより、プロセス管理部１１３は、スレッドを生成またはスレッドを起動させ（ステップＳ１２０２）、稼働スレッド数の増加を実行先決定部１１１に通知する（ステップＳ１２０３）。実行先決定部１１１は、通知された稼働数スレッドの増加に基づき、負荷増加時における実行先決定の処理をおこなう（ステップＳ１２０４）。
【００６８】
図１２−２は、処理の負荷減少を検出する処理の流れを示すフローチャートである。処理の負荷減少時には、アプリケーションからスレッド終了通知またはスレッド停止要求が出力される（ステップＳ１２１１）。これにより、プロセス管理部１１３は、スレッドを削除またはスレッドを停止させ（ステップＳ１２１２）、稼働スレッド数の減少を実行先決定部１１１に通知する（ステップＳ１２１３）。実行先決定部１１１は、通知された稼働数スレッドの減少に基づき、負荷減少時における実行先決定の処理をおこなう（ステップＳ１２１４）。
【００６９】
上記のように、処理の負荷の増加および減少は、アプリケーションからスレッドの追加、終了、停止、起動等の要求によりプロセス管理部１１３で稼働するスレッド数を変更したことを検出する。
【００７０】
そして、実行先決定部１１１は、新たな処理をＣＰＵ１０１で実行するのに比してアクセラレータ１０２で実行した方が良い場合には、ＣＰＵ１０１での処理をキャンセルし、アクセラレータ１０２でこの処理を実行する。逆に、ＣＰＵ１０１での処理に空きができ、アクセラレータ１０２よりもＣＰＵ１０１で実行した方が良い場合には、アクセラレータ１０２の処理をＣＰＵ１０１で実行する。具体的には、ＣＰＵ１０１とアクセラレータ１０２のいずれで処理を実行した方が全体の処理の終了時刻を早めることができるか、により決定する。
【００７１】
（処理の負荷増加時の処理について）
つぎに、処理の負荷増加時に、処理対象の割り当てが変化する状態を説明する。図１３−１は、負荷が増加した場合の処理要求の流れを示す図、図１３−２は、負荷が増加した場合の処理の終了時刻を説明する図である。時刻ｔ１でスレッドが処理要求をおこなったとき、実行先決定部１１１では、要求された処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合の終了時刻をそれぞれ推定し算出する。
【００７２】
ＣＰＵ１０１で実行した場合には終了時刻ｔ２であると算出されたとする。一方で、アクセラレータ１０２で実行した場合は、すでに多数の処理要求１３０１がキューイングされているため、処理を開始できるのは時刻ｔ３となり、終了時刻ｔ４となる。指標値処理部１２６は、これら終了時刻ｔ２，ｔ４を用いて電力性能指標値を算出する。そして、割り付け先決定部１２９は、ＣＰＵ１０１で処理をした方が効率が良いと判断して、ＣＰＵ１０１の処理要求に対しスレッドＳ１を起動して、ＣＰＵ１０１で処理をおこなう。
【００７３】
つぎに、上記処理後の時間経過による負荷の変動時について説明する。図１４−１は、時間経過により負荷が増加した場合の処理要求の流れを示す図、図１４−２は、時間経過により負荷が増加した場合の処理の終了時刻を説明する図である。
【００７４】
図１３−１、図１３−２を用いて説明した処理時から、一定時間経過した図１４−２の時刻ｔ１’（ｔ１＜ｔ１’＜ｔ２）で新しくスレッドＳ２が起動されたとする。これにより、ＣＰＵ１０１の負荷が上がるため、実行先決定部１１１は、負荷増加の処理を実行する。この負荷増加の処理では、時刻ｔ１’を基準として、処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合のそれぞれの終了時刻ｔ２’，ｔ４’を再計算する。
【００７５】
アクセラレータ１０２側では、時刻ｔ３からｔ３’の間でいくつかの処理要求１４０２が処理要求キュー８０１に追加されている。これにより、時刻ｔ１’の時点からアクセラレータ１０２に処理を追加した場合は、再計算の結果、アクセラレータ１０２で処理が開始できるのが時刻ｔ３’となり終了時刻は時刻ｔ４’に変更になったとする。
【００７６】
一方で、ＣＰＵ１０１で実行した場合は、すでにｔ１からｔ１’の間で処理が進んでいるが、時刻ｔ１’で新しくスレッドＳ２（１４０１）が追加されたことにより、ＣＰＵ１０１の負荷が上昇するため、時刻ｔ１’の時点でまだ処理が済んでいない部分に対して、現在のＣＰＵ１０１の負荷から終了時刻を再計算の結果、終了時刻ｔ２’に変更になったとする。これにより、割り付け先決定部１２９は、今からでもアクセラレータ１０２で処理をおこなった方が効率が良いと判断して、ＣＰＵ１０１のスレッドＳ２の処理をキャンセルし、処理要求キュー８０１に処理要求Ｓ３を追加する。
【００７７】
（処理の負荷増加時の実行先決定処理について）
図１５は、処理の負荷増加時における実行先決定の処理例を示すフローチャートである。実行先決定部１１１がおこなう処理を以下に説明する。プロセス管理部１１３が処理の負荷増加を検出すると（ステップＳ１５０１）、実行先決定部１１１の処理要求受付部１２１は、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４からＣＰＵ１０１で実行している処理要求を取得する（ステップＳ１５０２）。そして、処理要求が取得できたか判断する（ステップＳ１５０３）。処理要求が取得できなければ（ステップＳ１５０３：Ｎｏ）、処理を終了し、処理要求が取得できれば（ステップＳ１５０３：Ｙｅｓ）、つぎに、メモリ１０３からＣＰＵ１０１で実行している処理の開始時刻と、終了時刻を取得する（ステップＳ１５０４）。
【００７８】
また、ＲＯＭ情報取得部１２４により、ＲＯＭ１０４から、処理要求に対応する処理のＣＰＵ１０１と、アクセラレータ１０２での処理時間を取得する（ステップＳ１５０５）。また、ＲＯＭ１０４からＣＰＵ１０１と、アクセラレータ１０２の消費電力を取得する（ステップＳ１５０６）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１５０７）。
【００７９】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１５０８）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１５０９）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の新たな終了時刻（図１４−２の例では終了時刻ｔ２’）と、アクセラレータ１０２の新たな終了時刻（図１４−２の例では、終了時刻ｔ４’）と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１５１０）。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１５１１）。
【００８０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１５１２）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１５１２：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。そして、終了時刻を算出した新たな終了時刻に更新し、ＣＰＵ実行中処理情報８１１を更新し（ステップＳ１５１３）、処理を終了する。
【００８１】
また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１５１２：Ｎｏ）、アプリケーションからの処理要求をアクセラレータ１０２で処理することを決定する。そして、プロセス管理部１１３は、ＣＰＵ１０１で処理をおこなっているプロセスの実行をキャンセルし（ステップＳ１５１４）、アクセラレータ管理部１２８からアクセラレータ１０２の稼働状況を取得する（ステップＳ１５１５）。この後、アクセラレータ１０２が稼働中であるか否かを判断する（ステップＳ１５１６）。アクセラレータ１０２が稼働中であれば（ステップＳ１５１６：Ｙｅｓ）、最後の処理要求キュー８０１ｎに処理要求を追加し（ステップＳ１５１７）、アクセラレータ１０２での処理をおこなわせ、一つの処理を終了する。
【００８２】
一方、アクセラレータ１０２が稼働中でなければ（ステップＳ１５１６：Ｎｏ）、プロセス管理部１１３は、ＲＯＭ１０４から処理要求に対応するアクセラレータ用実行コード７１４を取得する（ステップＳ１５１８）。つぎに、プロセス管理部１１３は、取得したアクセラレータ用実行コード７１４を実行してアクセラレータ１０２を起動させる（ステップＳ１５１９）。そして、プロセス管理部１１３は、アクセラレータ１０２で実行した処理要求と、開始時刻をメモリ１０３のアクセラレータ実行中処理情報８１２に記録し（ステップＳ１５２０）、一つの処理を終了する。
【００８３】
（処理の負荷減少時の処理について）
つぎに、処理の負荷減少時に、処理対象の割り当てが変化する状態を説明する。図１６−１は、負荷が減少した場合の処理要求の流れを示す図、図１６−２は、負荷が減少した場合の処理の終了時刻を説明する図である。時刻ｔ１でスレッドが処理要求をおこなったとき、実行先決定部１１１では、要求された処理をＣＰＵ１０１で実行した場合と、アクセラレータ１０２で実行した場合の終了時刻をそれぞれ推定し算出する。
【００８４】
ＣＰＵ１０１で実行した場合には多くのスレッドの処理があるため、終了時刻ｔ２になると算出されたとする。一方で、アクセラレータ１０２では、先にキューイングされている処理要求１６０１の数が少なく終了時刻ｔ４になるとする。指標値処理部１２６は、これら終了時刻ｔ２，ｔ４を用いて電力性能指標値を算出する。そして、割り付け先決定部１２９は、アクセラレータ１０２で処理をした方が効率が良いと判断して、処理要求Ｓ１１を処理要求キュー８０１に追加する。
【００８５】
つぎに、上記処理後の時間経過による負荷の変動時について説明する。図１７−１は、時間経過により負荷が減少した場合の処理要求の流れを示す図、図１７−２は、時間経過により負荷が減少した場合の処理の終了時刻を説明する図である。
【００８６】
図１６−１、図１６−２を用いて説明した処理時から、一定時間経過した図１７−２の時刻ｔ１’で今度はＣＰＵ１０１のスレッドの処理が終了したとすると、ＣＰＵ１０１の負荷が減少するため、上述した負荷増加時と同じように、実行先決定部１１１は、終了時刻の再計算をおこなう。図１６−１および図１６−２の例では、時刻ｔ１でアクセラレータ１０２で処理を実行することが決定され、処理要求がキューイングされているため、アクセラレータ１０２での開始時刻ｔ３と終了時刻ｔ４は変化しないままとなる。
【００８７】
一方、ＣＰＵ１０１で実行する場合は、ＣＰＵ１０１での処理の負荷が減少しているため終了時刻はｔ２’に変更になる。ここで、指標値処理部１２６により電力優先指標値を再計算した結果、ＣＰＵ１０１で処理を実行した方が効率が良いと判断した場合は、最後の処理要求キュー８０１ｎから処理要求Ｓ１２を取り出し（削除し）てスレッドで実行する。
【００８８】
（処理の負荷減少時の実行先決定処理について）
図１８は、処理の負荷減少時における実行先決定の処理例を示すフローチャートである。実行先決定部１１１がおこなう処理を以下に説明する。プロセス管理部１１３が処理の負荷減少を検出すると（ステップＳ１８０１）、実行先決定部１１１のキュー管理部１２３は、メモリ１０３の最後の処理要求キュー８０１ｎから処理要求を取得する（ステップＳ１８０２）。そして、処理要求が取得できたか判断する（ステップＳ１８０３）。処理要求が取得できなければ（ステップＳ１８０３：Ｎｏ）、処理を終了し、処理要求が取得できれば（ステップＳ１８０３：Ｙｅｓ）、つぎに、ＲＯＭ１０４から処理要求に対応する処理のＣＰＵ１０１と、アクセラレータ１０２での処理時間を取得する（ステップＳ１８０４）。また、ＲＯＭ１０４からＣＰＵ１０１と、アクセラレータ１０２の消費電力を取得する（ステップＳ１８０５）。また、実行先決定部１１１は、現在時刻を取得する（ステップＳ１８０６）。
【００８９】
つぎに、アクセラレータ管理部１２８により、アクセラレータ１０２でおこなっている処理の処理要求と開始時刻を取得する（ステップＳ１８０７）。つぎに、稼働スレッド数取得部１２２から稼働しているスレッド数を取得する（ステップＳ１８０８）。これにより、実行先決定部１１１の指標値処理部１２６は、処理（スレッド）についてのＣＰＵ１０１の新たな終了時刻（図１７−２の例では終了時刻ｔ２’）と、アクセラレータ１０２の新たな終了時刻（図１７−２の例では、終了時刻ｔ４）と、をそれぞれ算出し、また、電力性能指標値を算出する（ステップＳ１８０９）。また、指標値処理部１２６は、携帯端末の状態から消費電力優先指標値を算出する（ステップＳ１８１０）。
【００９０】
つぎに、実行先決定部１１１の割り付け先決定部１２９は、電力性能指標値と消費電力優先指標値を比較する（ステップＳ１８１１）。消費電力優先指標値に対し電力性能指標値が大きければ（ステップＳ１８１１：Ｙｅｓ）、アプリケーションからの処理要求をＣＰＵ１０１でおこなうことを決定する。そして、対象の処理を処理要求キュー８０１から削除し（ステップＳ１８１２）、ＲＯＭ１０４からＣＰＵ用実行コード７１３を取得する（ステップＳ１８１３）。
【００９１】
そして、プロセス管理部１１３は、処理に対応する新規プロセスを生成して取得したＣＰＵ用実行コード７１３を実行するよう設定する（ステップＳ１８１４）。そして、ＣＰＵ実行中処理情報８１１におけるＣＰＵ１０１で実行した処理要求と、開始時刻と、算出した終了時刻を記録し（ステップＳ１８１５）、処理を終了する。
【００９２】
また、消費電力優先指標値に対し電力性能指標値が小さければ（ステップＳ１８１１：Ｎｏ）、処理要求キュー８０１の一つ前の処理要求を取得し（ステップＳ１８１６）、ステップＳ１８０３に戻り、この処理要求に対する上記処理を実行する。
【００９３】
上述したように、処理の負荷変動により、ＣＰＵ１０１で処理できる場合は、アクセラレータ１０２でおこなうために処理要求キュー８０１に積んでいた処理がＣＰＵ１０１でできないか再検討をおこなっている。この際、最後の処理要求キュー８０１ｎの処理から順番にＣＰＵ１０１で稼働しているスレッド数（空き率を用いても良い）に基づいて、新たに処理を要求したときと同様の処理で判断を繰り返す。そして、ＣＰＵ１０１で処理することになった場合には、処理要求キュー８０１から取り出してＣＰＵ１０１で実行する。
【００９４】
以上説明した開示技術では、処理をアクセラレータとプロセッサで実行した場合にいずれでおこなった方が早く処理が終了するか処理の実行先を決定しているので、複数の処理ごとの処理効率を向上させることができる。さらに、処理をアクセラレータとプロセッサで実行した場合のそれぞれの消費電力を求め、この消費電力を含め電力性能指標値として用い、処理の実行先を判断するため、処理効率だけではなく、消費電力を含めて効率的な実行先を決定できるようになる。
【００９５】
さらに、携帯端末の現在の状態、たとえば、バッテリの残量等から決定される消費電力優先指標値を用い、上記の電力性能指標値とともに実行先を決定している。これにより、経時的に変化する携帯端末のバッテリ残量に対応し、現在のバッテリ残量に対応した処理の実行先を決定することができる。このため、処理効率だけではなく、処理実行にかかる消費電力とのバランスが取れた最適な実行先を処理ごとに決定でき、システム全体の処理効率と低消費電力化を両立できるようになる。
【００９６】
上述した本実施の形態に関し、さらに以下の付記を開示する。
【００９７】
（付記１）ＣＰＵと、
アクセラレータと、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と前記アクセラレータが前記第１処理を完了するまでの第２処理時間とに基づく第１値と、前記ＣＰＵおよび前記アクセラレータを駆動するバッテリの使用状態に基づく第２値とを比較する比較ユニットと、
前記比較ユニットの比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択する選択ユニットと、
を含むことを特徴とするシステム。
【００９８】
（付記２）前記第１処理時間、前記第２処理時間、前記第１値、および前記第２値を算出する算出ユニットを含むこと
を特徴とする付記１に記載のシステム。
【００９９】
（付記３）前記第１値は、前記第１処理時間と、前記ＣＰＵが前記第１処理を完了する第１終了時刻と、前記ＣＰＵが前記第１処理を実行するときの第１消費電力と、前記第２処理時間と、前記アクセラレータが前記第１処理を完了する第２終了時刻と、前記アクセラレータが前記第１処理を実行するときの第２消費電力とに基づいて、算出されること
を特徴とする付記１または２に記載のシステム。
【０１００】
（付記４）前記第１処理時間と前記第２処理時間とを記録するメモリを含むこと
を特徴とする付記１〜３のいずれか一つに記載のシステム。
【０１０１】
（付記５）前記選択ユニットは、
前記第１値が第２値よりも大きいときに前記ＣＰＵを選択し、
前記第１値が前記第２値よりも小さいときに前記アクセラレータを選択すること
を特徴とする付記１〜４のいずれか一つに記載のシステム。
【０１０２】
（付記６）前記ＣＰＵの負荷を監視する監視ユニットを含み、
前記監視ユニットは、前記負荷に変動があるときは、前記選択ユニットに対し、前記ＣＰＵおよび前記アクセラレータの選択の見直しを指示すること
を特徴とする付記１〜５のいずれか一つに記載のシステム。
【０１０３】
（付記７）前記監視ユニットが前記負荷の増加を検出したとき、
前記選択ユニットは、前記第１値が前記第２値よりも小さければ前記ＣＰＵが実行する前記第１処理をキャンセルさせること
を特徴とする付記６に記載のシステム。
【０１０４】
（付記８）前記バッテリの使用状態を取得する取得部を備え、
当該取得部は、前記バッテリの残量、および当該バッテリ残量に関わる機器の使用状態を取得し、前記比較ユニットに前記第２値の算出用の情報として出力する
ことを特徴とする付記１〜７のいずれか一つに記載のシステム。
【０１０５】
（付記９）ＣＰＵとアクセラレータを備え、バッテリ駆動されるシステムにおけるスケジューリング方法であって、
前記ＣＰＵが第１処理を完了するまでの第１処理時間と、前記アクセラレータが前記第１処理を完了するまでの第２処理時間とをメモリから読み出し、
前記第１処理時間と前記第２処理時間とに基づいて第１値を計算し、
バッテリ残量に基づいて第２値を計算し、
前記第１値と前記第２値を比較し、
比較結果に基づいて、前記ＣＰＵまたは前記アクセラレータのいずれかを選択し、
選択された前記ＣＰＵまたは前記アクセラレータに前記第１処理を割り当てること
を特徴とするスケジューリング方法。
【０１０６】
（付記１０）前記第１処理の処理要求に基づいて当該第１処理の開始時刻を取得し、
前記第１処理の開始時刻に基づいて、前記ＣＰＵが前記第１処理を完了する第１終了時刻と前記アクセラレータが前記第１処理を完了する第２終了時刻と算出し、
前記第１終了時刻と前記第２終了時刻とに基づいて前記第１値を計算すること
を特徴とする付記９に記載のスケジューリング方法。
【０１０７】
（付記１１）前記ＣＰＵが前記第１処理を実行するときの第１消費電力と前記アクセラレータが前記第１処理を実行するときの第２消費電力とを前記メモリから読み出し、
前記第１消費電力と前記第２消費電力とに基づいて前記第１値を算出すること
を特徴とする付記９または１０に記載のスケジューリング方法。
【０１０８】
（付記１２）前記第１値が前記第２値よりも大きいときに前記ＣＰＵを選択し、
前記第１値が前記第２値よりも小さいときに前記アクセラレータを選択すること
を特徴とする付記９〜１１のいずれか一つに記載のスケジューリング方法。
【０１０９】
（付記１３）前記ＣＰＵの負荷を監視し、
前記負荷に変動があるときは、前記第１処理の開始時刻を取得して、前記ＣＰＵが前記第１処理を完了する新たな第１終了時刻と前記アクセラレータが前記第１処理を完了する新たな第２終了時刻と算出し、
前記新たな第１終了時刻と前記新たな第２終了時刻に基づいて前記第１値を計算すること
を特徴とする付記９〜１２のいずれか一つに記載のスケジューリング方法。
【符号の説明】
【０１１０】
１００  システム
１０２  アクセラレータ
１０３  メモリ
１０６  バッテリ管理部
１１１  実行先決定部
１１３  プロセス管理部
１２１  処理要求受付部
１２２  稼働スレッド数取得部
１２３  キュー管理部
１２４  ＲＯＭ情報取得部
１２５  処理スレッド管理部
１２６  指標値処理部
１２６ａ  指標値算出部
１２６ｂ  指標値比較部
１２７  端末状態取得部
１２８  アクセラレータ管理部
１２９  割り付け先決定部
８０１  処理要求キュー
８１１  ＣＰＵ実行中処理情報
８１２  アクセラレータ実行中処理情報
【国際調査報告】
2012124125.tif 000026
2012124125.tif 000027
2012124125.tif 000028