(57)【要約】  プログラム中に明示されてないループによって発生したスピン状態を検出する。ＣＰＵ（＃０）は、フラグの監視による状態遷移待ちを行った結果、スピン状態となるスレッド（０）を実行している。スピン回避機構（１０４＃０）は、ＣＰＵ（＃０）の電力と、ＣＰＵ（＃０）内のキャッシュメモリ（１０３＃０）の状態を監視する。スピン回避機構（１０４＃０）は、ＣＰＵ（＃０）の電力が閾値以上となり、かつ、キャッシュメモリ（１０３＃０）の状態が変化なしを示すときに、ＣＰＵ（＃０）がスピン状態であることを検出する。
2012147168.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵの電力を検出するセンサと、
キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、
前記センサからのセンサ信号と前記キャッシュメモリ状態監視回路からの状態信号とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出する検出回路と、
を含むことを特徴とするシステム。
【請求項２】
前記スピン状態が検出されたときに前記プログラムのスピン状態を解除する解除回路を含むこと
を特徴とする請求項１に記載のシステム。
【請求項３】
前記センサ信号と閾値とを比較し、比較結果を前記検出回路に出力する比較回路を含むこと
を特徴とする請求項１または請求項２に記載のシステム。
【請求項４】
前記プログラムが実行する命令が所定命令であるか否かを判定し、判定結果を前記検出回路に出力する判定回路を含むこと
を特徴とする請求項１乃至請求項３の何れか一に記載のシステム。
【請求項５】
前記所定命令は、ジャンプ命令であること
を特徴とする請求項４に記載のシステム。
【請求項６】
前記検出回路の検出結果に基づいて前記プログラムを制御するための情報を格納する制御レジスタを含むこと
を特徴とする請求項１乃至請求項５の何れか一に記載のシステム。
【請求項７】
ＣＰＵと、
前記ＣＰＵの電力を検出してセンサ信号を出力するセンサと、
キャッシュメモリの状態を監視して状態信号を出力するキャッシュメモリ状態監視回路と、
を含み、
前記センサ信号が閾値以上となる場合であって前記状態信号が前記キャッシュメモリの状態に変化がないことを示すときに、前記ＣＰＵが実行するプログラムのスピン状態が検出されること
を特徴とするシステム。
【請求項８】
前記状態信号が前記キャッシュメモリの状態に変化がないことを示す場合であって、実行する前記プログラムの命令が所定命令であるとき、前記スピン状態が検出されること
を特徴とする請求項７に記載のシステム。
【請求項９】
前記センサ信号が前記閾値未満であるとき、または、前記スピン状態である場合に前記状態信号が前記キャッシュメモリの状態に変化があることを示すときに、非スピン状態が検出されること
を特徴とする請求項７または請求項８に記載のシステム。
【請求項１０】
ＣＰＵの電力を検出し、
キャッシュメモリの状態を監視し、
検出された電力と前記キャッシュメモリの状態とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出すること
を特徴とする検出方法。
【請求項１１】
前記電力が閾値以上であるか否かを検出し、
前記電力が前記閾値以上であるときは前記スピン状態を検出し、
前記電力が前記閾値未満であるときは前記スピン状態の検出を行わないこと
を特徴とする請求項１０に記載の検出方法。
【請求項１２】
前記スピン状態が検出される場合に、前記スピン状態に対応する処理を所定の処理に置き換えて前記スピン状態を解除すること
を特徴とする請求項１０または請求項１１に記載の検出方法。
【請求項１３】
前記スピン状態である時間が所定時間以上である場合、前記スピン状態に対応する処理の割当を停止させること
を特徴とする請求項１２に記載の検出方法。
【請求項１４】
前記割当を停止させる処理は、
さらに、前記スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、前記スピン状態に対応する処理の割当を停止させること
を特徴とする請求項１３に記載の検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スピン状態を検出するシステム、および検出方法に関する。
【背景技術】
【０００２】
従来から、ソフトウェアがマルチスレッドで動作する場合、同期処理や排他制御を行いながら処理を実行することがある。同期処理や排他制御において、明示的に特定の命令を用いる方法として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのハード機能を利用するバリア同期命令、またはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のライブラリであるスレッドの一時停止、解除を行うミューテックスが存在する。また、明示的でない排他制御として、たとえば、フラグの監視による状態遷移待ちによる実装方法が存在する。【０００３】
このような同期処理や排他制御は、ハードウェアの点からは処理を実行しているものの、ソフトウェアは同じ処理を繰り返しており処理が進まない状態であり、システムの処理能力を低下させる原因となっていた。以下、このような、同じ処理を繰り返している状態をスピン状態として定義する。また、スピン状態になったＣＰＵは、消費電力が上昇してしまっていた。このことから、スピン状態を検出し、スピン状態を回避する技術が開示されている。【０００４】
スピン状態を検出する技術として、たとえば、プログラム中にループしているというスピンウェイト命令を検出する技術が開示されている。また、スピン状態を検出する他の技術として、たとえば、統計情報を用いて命令例のループを予測して、スピン状態を検出する技術が開示されている。また、スピン状態が検出された場合のスケジューリング技術として、たとえば、スピン状態を検出した際に、動作状態を退避復元する技術が開示されている。また、スピン状態となったスレッドが存在した場合、別のスレッドをＣＰＵに割り当てる技術が存在する（たとえば、下記特許文献１〜４を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００３／０４０９４８号パンフレット
【特許文献２】特開２００６−４０１４２号公報
【特許文献３】特開２００９−１１６８８５号公報
【特許文献４】特開平５−２０４６７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、明示的に記述されたスピンウェイト命令を参照することでスピン状態を検出しているため、プログラム中に明示されてないループによって発生したスピン状態を検出することが困難であるという問題があった。たとえば、フラグの監視による状態遷移待ちするプログラムの命令群には、ＣＰＵのハード機能を利用する命令、またはＯＳのライブラリを呼び出す命令が存在しないため、該当のプログラムがスピン状態を引き起こす目印になる命令が存在しないことになる。したがって、従来技術にかかる技術では、このようなプログラムがスピン状態を引き起こすことを検出することが困難であった。【０００７】
また、上述した従来技術において、統計情報を用いることで明示的でないスピン状態をある程度予測することは可能ではある。しかしながら、統計情報収集時に発生しなかった箇所についてはスピン状態を検出できないため、明示的でないスピン状態を全て検出することは困難であるという問題があった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、プログラム中に明示されてないループによって発生したスピン状態を検出できるシステム、および検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、ＣＰＵと、ＣＰＵの電力を検出するセンサと、キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、センサからのセンサ信号とキャッシュメモリ状態監視回路からの状態信号とに基づいてＣＰＵが実行するプログラムのスピン状態を検出する検出回路とを含むシステム、および検出方法が提案される。
【発明の効果】
【００１０】
本発明の一側面によれば、プログラム中に明示されてないループによって発生したスピン状態を検出できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００のＣＰＵ周辺のハードウェアとソフトウェア例を示すブロック図である。
【図４】図４は、スピン回避機構１０４のハードウェア例を示すブロック図である。
【図５】図５は、スピン判定部４０２によるスピン状態検出の一例を示すブロック図である。
【図６】図６は、スピン判定部４０２によるスピン状態解除検出の一例を示すブロック図である。
【図７】図７は、キャッシュメモリ状態監視回路４０３の動作例を示す説明図である。
【図８】図８は、スピン状態の消費電力状態の一例を示す説明図である。
【図９】図９は、スピン状態の解消のタイミングの判定方法例を示す説明図である。
【図１０】図１０は、スピン状態検出判定の一例を示すシーケンス図である。
【図１１】図１１は、スピン状態解除判定の一例を示すシーケンス図である。
【図１２】図１２は、スピン回避機構ドライバ４１２によるスピン状態周期性判断処理の一例を示すフローチャートである。
【図１３】図１３は、ディスパッチスケジューラ３２４によるスレッド退避復帰処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、開示のシステム、および検出方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるシステムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１３】
図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。図１で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃１を含む。以下、接尾記号“＃ｎ”が付随された記号は、ｎ番目のＣＰＵに対応する記号であることを示している。マルチコアプロセッサシステム１００は、携帯電話といった携帯端末を想定している。符号１０１で示す説明図は、ＣＰＵ＃０がスピン状態となった状態を示しており、符号１０２で示す説明図は、スピン状態となったＣＰＵ＃０が解除され、非スピン状態となった場合を示している。また、ＣＰＵ＃０、ＣＰＵ＃１は、キャッシュメモリ１０３＃０、キャッシュメモリ１０３＃１、を含む。さらに、ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ、スピン状態になったことを検出するスピン回避機構１０４＃０、スピン回避機構１０４＃１を有している。
【００１４】
符号１０１に示す説明図にて、ＣＰＵ＃０は、実行コード１０５を含むスレッド０を実行している。実行コード１０５は、＊ｙの値を書き換えるのを待ってループを抜け出すアルゴリズムとなっている。このようなアルゴリズムの場合、ミューテックスのような専用命令により排他同期を行っていれば、明示的なロック状態をコンパイラが認識できる。しかし、実行コード１０５のようなコーディングを行っている場合、これがスピン状態を起こすかどうかをコンパイラ等が判定することはできない。
【００１５】
スレッド０の実行によって、ＣＰＵ＃０がスピン状態となると、ＣＰＵ＃０の電力が上昇する。また、同一の処理を繰り返すため、キャッシュメモリ１０３＃０の状態が変化しない。スピン回避機構１０４＃０は、ＣＰＵ＃０の電力とキャッシュメモリ１０３＃０の状態から、スピン状態を検出する。このように、スピン回避機構１０４＃０は、スピン状態におけるマルチコアプロセッサシステム１００の状態を用いて検出することで、排他制御用の特別な命令を用いずに実装された排他制御によって発生したスピン状態を検出することができる。
【００１６】
符号１０２に示す説明図では、スピン状態検出後のマルチコアプロセッサシステム１００の状態である。ＣＰＵ＃０は、スピン回避機構１０４＃０によるスピン状態の検出によって、スピン状態となっており、プログラム内に排他制御の記述が明示的にないスレッド０の特定が容易となる。したがって、ＣＰＵ＃０は、特定できたスレッド０をディスパッチループから退避する。これにより、ＣＰＵ＃０の電力が下降するため、マルチコアプロセッサシステム１００は、消費電力を削減することができる。
【００１７】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。図２において、マルチコアプロセッサシステム１００は、複数のＣＰＵが含まれるＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を含む。また、各部はバス２１０によってそれぞれ接続されている。
【００１８】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃ｎを含む。ｎは、１以上の整数である。また、ＣＰＵ＃０〜ＣＰＵ＃ｎには、図１で示したキャッシュメモリ１０３、スピン回避機構１０４、またその他のハードウェアが存在する。これらのハードウェアについては、図３にて後述する。
【００１９】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ２０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２０】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データや、また本実施の形態にかかるスレッド処理方法を実行するプログラムなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２２】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２３】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２４】
図３は、マルチコアプロセッサシステム１００のＣＰＵ周辺のハードウェアとソフトウェア例を示すブロック図である。初めに、マルチコアプロセッサシステム１００は、ハードウェアとして、スヌープ機構３０１、サーモ電力検出部３０３、ＰＭＵ（Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）３０４、スピン回避機構１０４、を含む。
【００２５】
スヌープ機構３０１は、ＣＰＵ＃０〜ＣＰＵ＃ｎがアクセスするキャッシュメモリ１０３の整合性を取る装置である。たとえば、キャッシュメモリ１０３＃０が更新されると、スヌープ機構３０１が、キャッシュメモリ１０３＃１に更新内容を通知する。スヌープ機構３０１のプロトコルとしては、無効型プロトコルと更新型プロトコルが存在する。
【００２６】
なお、キャッシュメモリ１０３の整合性を取る装置は、キャッシュコヒーレンシ機構に分類され、キャッシュコヒーレンシ機構の一例として、スヌープ機構が存在する。キャッシュコヒーレンシ機構は、大別してスヌープ方式を採用したスヌープ機構とディレクトリ方式とがある。本実施の形態にかかるスヌープ機構３０１は、ディレクトリ方式を採用したキャッシュコヒーレンシ機構であってもよい。
【００２７】
メモリ３０２は、ＣＰＵｓ２０１からアクセス可能な共有の記憶装置である。なお、メモリ３０２は、ＲＡＭ２０３の全てであってもよいし、または一部であってもよい。さらに、メモリ３０２は、ＲＯＭ２０２、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６を含んでいてもよい。
【００２８】
なお、図３で説明するスヌープ機構３０１、メモリ３０２以外のハードウェア、ソフトウェアは、ＣＰＵ＃０〜ＣＰＵ＃ｎ全てが有する。したがって、以下の図３の説明では、ＣＰＵ＃０に関するハードウェア、ソフトウェアについて説明を行い、さらに、接尾記号“＃０”を省略する。
【００２９】
ＣＰＵ＃０内のハードウェアとして、ＣＰＵ＃０は、プログラムカウンタ３１１、タイマ３１２、キャッシュメモリ１０３を含む。また、ＣＰＵ＃０で実行されるソフトウェアとして、ＣＰＵ＃０は、ＯＳ３２１、スレッド３３１〜スレッド３３３、アイドルスレッド３３４を実行する。ＯＳ３２１は、カーネル３２２、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）３２３、ディスパッチスケジューラ３２４、排他同期ＡＰＩ検出部３２５を含む。
【００３０】
サーモ電力検出部３０３は、ＣＰＵに付随している、温度調節を行うサーモスタットから電力、温度を検出する機能を有する。なお、サーモ電力検出部３０３は、ＣＰＵと配線接続はしておらず、基盤上で物理的に接続している。ＰＭＵ３０４は、ＣＰＵの電源電圧、クロックを管理する装置である。
【００３１】
スピン回避機構１０４は、サーモ電力検出部３０３、キャッシュメモリ１０３、排他同期ＡＰＩ検出部３２５からの入力に基づいて、スピン状態を検出する。検出結果は、ディスパッチスケジューラ３２４に出力される。なお、スピン回避機構１０４の内部については、図４にて後述する。
【００３２】
プログラムカウンタ３１１は、ＣＰＵのレジスタの一つであり、ＣＰＵが現在実行中の命令が格納されているメモリ３０２上のアドレスを格納する記憶領域である。タイマ３１２は、時間経過を通知する機能を有する。なお、タイマ３１２は、ＣＰＵのクロックカウンタ等で実装される。
【００３３】
キャッシュメモリ１０３は、ＣＰＵがメモリ３０２のデータに高速にアクセス可能とするため、メモリ３０２のデータの一部をコピーした記憶領域である。また、キャッシュメモリ１０３は、データを記憶するデータキャッシュと、プログラム内の命令を記憶するインストラクションキャッシュを含む。
【００３４】
ＯＳ３２１は、マルチコアプロセッサシステム１００を制御するプログラムである。たとえば、ＯＳ３２１は、メモリ３０２を管理したり、またはファイルシステムをアプリに提供したりする。カーネル３２２は、ＯＳ３２１の中核となる機能を有する。たとえば、カーネル３２２は、フラッシュＲＯＭコントローラ２０５、キーボード２０９等といったハードウェアを制御するデバイスドライバを含む。
【００３５】
ＡＰＩ３２３は、スレッド３３１〜スレッド３３３がＯＳ３２１の提供するライブラリにアクセスするためのインターフェースである。たとえば、ＡＰＩ３２３は、ファイルシステムの制御、画像処理、文字制御などを実行する関数として提供される。
【００３６】
ディスパッチスケジューラ３２４は、スレッドの割当を制御する機能を有する。たとえば、ディスパッチスケジューラ３２４は、ＣＰＵに次に割り当てるスレッドを決定し、決定されたスレッドをＣＰＵに割り当てる。ディスパッチスケジューラ３２４によって割り当てられるスレッドは、スレッド３３１〜スレッド３３３、アイドルスレッド３３４である。また、ディスパッチスケジューラ３２４は、アイドルスレッド３３４をＣＰＵに割り当てる場合、ＰＭＵ３０４にＣＰＵへのクロックの供給を停止するよう通知する。
【００３７】
排他同期ＡＰＩ検出部３２５は、スピン回避機構１０４を制御するＡＰＩである。具体的に、排他同期ＡＰＩ検出部３２５は、スピン状態であると設定するＡＰＩと、スピン状態であったのを解除するＡＰＩとが含まれる。
【００３８】
スレッド３３１〜スレッド３３３は、アプリケーションソフトウェア内の一機能を実行する。たとえば、アプリケーションソフトウェアが動画再生アプリであることを想定する。このとき、スレッド３３１がネットワーク２１１からダウンロードするダウンロードスレッド、スレッド３３２が動画コーデックに従ってデコードするデコードスレッド、スレッド３３３がディスプレイ２０７に表示する描画スレッドとなる。アイドルスレッド３３４は、何もしないスレッドである。たとえば、アイドルスレッドは、ＮＯＰ命令を実行する。
【００３９】
以下、図４〜図６にて、スピン回避機構１０４のハードウェア例について説明を行う。図４〜図６では、ＣＰＵ＃０に対応するスピン回避機構１０４＃０を例にして説明を行い、スピン回避機構１０４＃１〜スピン回避機構１０４＃ｎについては、等しいハードウェアであるため、説明を省略し、接尾記号“＃ｎ”も省略する。
【００４０】
図４は、スピン回避機構１０４のハードウェア例を示すブロック図である。スピン回避機構１０４は、記憶部４０１、スピン判定部４０２、キャッシュメモリ状態監視回路４０３、センサＩ／Ｆ４０４、発行命令バッファ４０５、を含む。また、スピン回避機構１０４は、センサ４１１からの入力を受け付ける。また、スピン回避機構１０４は、カーネル３２２内のスピン回避機構ドライバ４１２からの制御を受ける。
【００４１】
記憶部４０１は、情報を記憶するレジスタ群であり、制御レジスタ４２１、スピン状態ステータスレジスタ４２２、センサ閾値格納レジスタ４２３を含む。制御レジスタ４２１は、スピン状態設定、スピン状態解除設定、スピン状態という３つのフィールドを含む。スピン状態設定フィールド、スピン状態解除設定フィールドは、スピン回避機構ドライバ４１２から設定されるフィールドである。
【００４２】
スピン状態設定フィールドは、スピン回避機構ドライバ４１２からスピン状態であると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態設定フィールドは、スピン状態であると指示された場合、ＴＲＵＥを格納し、指示されてないとき、ＦＡＬＳＥを格納する。スピン状態解除設定フィールドは、スピン状態であったのを解除すると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態解除設定フィールドは、スピン状態を解除すると指示された場合、ＴＲＵＥを格納し、指示されてないとき、ＦＡＬＳＥを格納する。
【００４３】
スピン状態フィールドは、スピン判定部４０２によって判定された結果に基づいて、スピン状態か否かを示す識別子を格納する。たとえば、スピン状態フィールドは、スピン判定部４０２によってスピン状態であると判定された場合、ＴＲＵＥを格納し、非スピン状態であると判定されたとき、ＦＡＬＳＥを格納する。また、スピン状態フィールドは、スピン回避機構ドライバ４１２に対してスピン状態か否かを示す割込信号を通知する。
【００４４】
スピン状態ステータスレジスタ４２２は、スピン状態か、または非スピン状態かを、スピン回避機構１０４内部で使用するために用意されたレジスタである。具体的に、スピン状態ステータスレジスタ４２２は、スピン状態であればＴＲＵＥであり、非スピン状態であればＦＡＬＳＥを格納する。センサ閾値格納レジスタ４２３は、センサ４１１の値に対する閾値を格納する。具体的な閾値の値としては、図８にて後述する。
【００４５】
スピン判定部４０２は、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、スピン状態ステータスレジスタ４２２、発行命令バッファ４０５からの入力により、スピン状態かを判定し、制御レジスタ４２１に出力する。また、スピン判定部４０２は、スピン状態であることを検出するスピン状態検出回路４３１と、スピン状態が解除され、非スピン状態であることを検出するスピン状態解除回路４３２と、を含む。なお、スピン状態検出回路４３１の詳細については、図５にて後述する。また、スピン状態解除回路４３２の詳細については、図６にて後述する。
【００４６】
キャッシュメモリ状態監視回路４０３は、キャッシュメモリ１０３の状態を監視する。具体的に、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１＃０を用いて、キャッシュメモリ１０３内の、インストラクションキャッシュに格納されている命令を取得し、発行命令バッファ４０５に格納する。また、キャッシュメモリ状態監視回路４０３は、キャッシュメモリ１０３の状態を示す状態信号をスピン判定部４０２に出力する。キャッシュメモリ状態監視回路４０３の動作については、図７にて後述する。センサＩ／Ｆ４０４は、センサ４１１に対するインターフェースである。センサＩ／Ｆ４０４は、センサ４１１から電力量を取得し、センサ信号として出力する。発行命令バッファ４０５は、ＣＰＵが実行した命令を蓄積する。
【００４７】
センサ４１１は、サーモ電力検出部３０３といった電力センサである。また、センサ４１１は、温度センサであってもよい。前述したセンサ閾値格納レジスタ４２３は、センサ４１１に対応した閾値が格納されている。
【００４８】
スピン回避機構ドライバ４１２は、スピン回避機構１０４を制御するドライバである。具体的に、スピン回避機構ドライバ４１２は、スピン状態設定フィールド、スピン状態解除設定フィールドに対して書き込みを行う。また、スピン回避機構ドライバ４１２は、タイマ３１２による一定周期ごとに、スピン状態フィールドの状態に対応した割込信号を取得し、スピン状態が悪化している状態であるかを判断し、さらにスピン状態に周期性があるか否かを判断する。判断結果は、ディスパッチスケジューラ３２４に通知される。
【００４９】
図５は、スピン判定部４０２によるスピン状態検出の一例を示すブロック図である。図５では、スピン判定部４０２によるスピン状態検出時に用いる回路の例を示している。スピン判定部４０２は、スピン状態検出回路４３１と、比較回路５０１と、判定回路５０２とを用いて、スピン状態を検出する。また、スピン状態検出回路４３１は、ＡＮＤ回路５１１と、ＯＲ回路５１２とを含む。また、判定回路５０２は、判定回路５０３、抽出回路５０４、抽出回路５０５、比較回路５０６を含む。
【００５０】
また、スピン判定部４０２は、スピン状態検出のため、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、キャッシュメモリ状態監視回路４０３から出力されるキャッシュ状態信号５２１、プログラムカウンタ３１１の入力を受ける。さらに、スピン判定部４０２は、制御レジスタ４２１、スピン状態ステータスレジスタ４２２に検出したスピン状態を出力する。キャッシュ状態信号５２１は、キャッシュメモリ１０３の状態が変化したか否かを示す信号である。なお、キャッシュ状態信号５２１の詳細については、図７にて後述する。
【００５１】
比較回路５０１は、センサＩ／Ｆ４０４とセンサ閾値格納レジスタ４２３とを比較し、比較結果をスピン状態検出回路４３１内のＡＮＤ回路５１１に出力する。具体的に、比較回路５０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値以上である場合、比較結果としてＴＲＵＥを出力する。また、比較回路５０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値より小さい場合、比較結果としてＦＡＬＳＥを出力する。
【００５２】
判定回路５０２は、プログラムが実行する命令が所定命令であるか否かを判定し、判定結果をスピン状態検出回路４３１のＡＮＤ回路５１１に出力する。ここで、所定命令とは、ジャンプ命令である。または、所定命令を実行することでジャンプ命令となる命令であってもよい。たとえば、プログラムカウンタ３１１に、汎用レジスタの値や、メモリの値を設定するという命令があった場合、設定を行うことで、次の命令の実行位置が、設定された値となり、ジャンプ命令と同じ動作を行う。したがって、このような動作を行う命令も、所定命令として含めてもよい。
【００５３】
判定回路５０３は、キャッシュ状態信号５２１がキャッシュ状態変化なしか否かを判定し、判定結果を抽出回路５０４に出力する。具体的に、判定回路５０３は、キャッシュ状態信号５２１が、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてＴＲＵＥを出力し、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてＦＡＬＳＥを出力する。
【００５４】
抽出回路５０４は、判定結果がＴＲＵＥである場合、発行命令バッファ４０５に蓄積されていた命令から、ジャンプ先アドレスを抽出して比較回路５０６に出力する。たとえば、蓄積されていた命令がジャンプ命令＋ジャンプ先アドレスとなっていた場合、抽出回路５０４は、ジャンプ先アドレスを抽出する。また、蓄積されていた命令がプログラムカウンタ３１１にジャンプテーブル内のオフセット値のアドレスを設定する命令であれば、抽出回路５０４は、ジャンプテーブル内のオフセット値のアドレスをジャンプ先アドレスとして抽出する。
【００５５】
抽出回路５０５は、プログラムカウンタ３１１が指すアドレスから、ジャンプ先アドレスを抽出して比較回路５０６に出力する。具体的なジャンプ先アドレスの抽出方法は、抽出回路５０４と同等であるため、説明を省略する。
【００５６】
比較回路５０６は、抽出回路５０４と抽出回路５０５の抽出結果を比較し、判定結果をスピン状態検出回路４３１のＡＮＤ回路５１１に出力する。ここで、所定命令とは、ジャンプ命令である。具体的に、比較回路５０６は、抽出回路５０４と抽出回路５０５の抽出結果が同じジャンプ先アドレスであれば、比較結果としてＴＲＵＥを出力し、異なるアドレスであれば、ＦＡＬＳＥを出力する。
【００５７】
ＡＮＤ回路５１１は、比較回路５０１と比較回路５０６の論理積をＯＲ回路５１２に出力する。ＯＲ回路５１２は、制御レジスタ４２１のスピン状態設定フィールドとＡＮＤ回路５１１との論理和を制御レジスタ４２１のスピン状態フィールドとスピン状態ステータスレジスタ４２２に出力する。
【００５８】
なお、判定回路５０２は、比較回路５０１の比較結果がＴＲＵＥとなった後に、判定を行ってもよい。判定回路５０２では、キャッシュメモリ１０３の監視を行うため、処理負荷が増大するが、比較回路５０１の比較結果がＴＲＵＥとなったときに判定回路５０２を動作させることで、スピン回避機構１０４の処理効率をよくすることができる。
【００５９】
図６は、スピン判定部４０２によるスピン状態解除検出の一例を示すブロック図である。図６では、スピン判定部４０２によるスピン状態解除検出時に用いる回路の例を示している。スピン判定部４０２は、スピン状態解除回路４３２と、比較回路６０１と、判定回路６０２と、スピン状態ステータスレジスタ４２２と、ＡＮＤ回路６０３とを用いて、スピン状態の解除を検出する。また、スピン状態解除回路４３２は、ＯＲ回路６１１を含む。
【００６０】
また、スピン判定部４０２は、スピン状態解除検出のため、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、キャッシュ状態信号５２１の入力を受ける。さらに、スピン判定部４０２は、制御レジスタ４２１、スピン状態ステータスレジスタ４２２に検出したスピン状態を出力する。
【００６１】
比較回路６０１は、センサＩ／Ｆ４０４とセンサ閾値格納レジスタ４２３とを比較し、比較結果をスピン状態解除回路４３２内のＯＲ回路６１１に出力する。具体的に、比較回路６０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値未満である場合、比較結果としてＴＲＵＥを出力する。また、比較回路６０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値以上である場合、比較結果としてＦＡＬＳＥを出力する。
【００６２】
判定回路６０２は、キャッシュ状態信号５２１が、キャッシュ状態変化ありか否かを判定し、判定結果をＡＮＤ回路６０３に出力する。具体的に、判定回路６０２は、キャッシュ状態信号５２１が、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてＴＲＵＥを出力し、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてＦＡＬＳＥを出力する。
【００６３】
ＡＮＤ回路６０３は、判定回路６０２とスピン状態ステータスレジスタ４２２の論理積をＯＲ回路６１１に出力する。具体的には、ＡＮＤ回路６０３は、判定回路６０２からの出力信号がＴＲＵＥであり、スピン状態ステータスレジスタ４２２がスピン状態を意味するＴＲＵＥであった場合に、ＴＲＵＥをＯＲ回路６１１に出力する。ＯＲ回路６１１は、制御レジスタ４２１のスピン状態解除設定フィールドと比較回路６０１による比較結果とＡＮＤ回路６０３との論理和を制御レジスタ４２１のスピン状態フィールドとスピン状態ステータスレジスタ４２２に出力する。
【００６４】
図７は、キャッシュメモリ状態監視回路４０３の動作例を示す説明図である。キャッシュメモリ１０３は、インストラクションキャッシュ７０１とデータキャッシュ７０２を含む。スヌープ機構３０１が動作している場合、キャッシュメモリ状態監視回路４０３は、キャッシュ状態信号５２１としてキャッシュメモリ１０３の状態が変化しているという状態信号を出力する。また、スヌープ機構３０１が動作していない場合、キャッシュメモリ状態監視回路４０３は、キャッシュ状態信号５２１としてキャッシュメモリ１０３の状態が変化していないという状態信号を出力する。
【００６５】
さらに、キャッシュメモリ１０３の状態が変化していない場合、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１から発行された命令を取得し、発行命令バッファ４０５に格納する。
【００６６】
続けて、ジャンプ命令が発行される場合のキャッシュメモリ状態監視回路４０３の動作について図７を用いて説明する。ループ１回目におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１に命令がないため、命令をメモリ３０２から読み出して実行する。一方で、ＣＰＵ＃０は、読み出した命令をインストラクションキャッシュ７０１に格納する。
【００６７】
ここで、０ｘ００１２番地から０ｘ００００番地までの短い区間であるため、ＣＰＵ＃０がアドレス：０ｘ００１２のジャンプ命令を実行する場合、２回目以降はインストラクションキャッシュ７０１にヒットする場合を想定する。
【００６８】
ループ２回目以降におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１内でヒットした命令を取得し実行する。このとき、キャッシュメモリ１０３の状態が変化していないため、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１が指すアドレス：０ｘ００１２から、該当の命令“Ｊｕｍｐ  ０ｘ００００”を取得する。取得後、キャッシュメモリ状態監視回路４０３は、発行命令バッファ４０５にジャンプ命令として“Ｊｕｍｐ”とジャンプ先アドレス“０ｘ００００”を格納する。
【００６９】
ループ３回目以降におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１内でヒットした命令を取得し実行する。また、３回目以降において、抽出回路５０４がジャンプ先アドレスを抽出して比較回路５０６に出力し、比較回路５０６が、抽出回路５０４と抽出回路５０５を比較した結果、ＴＲＵＥを出力する。
【００７０】
図４〜図７で示したハードウェア、動作によって、スピン回避機構１０４は、スピン状態の検出と、スピン状態の検出の解除を行う。続けて、図８、図９にて、スピン状態となった場合の電力特性と、スピン状態の解消のタイミングの判定方法について説明する。
【００７１】
図８は、スピン状態の消費電力状態の一例を示す説明図である。符号８０１で示す説明図では、マルチコアプロセッサシステム１００にてスピン状態となるスレッドの例を示しており、符号８０２で示す説明図では、電力特性の式を示しており、グラフ８０３は、スピン状態におけるＣＰＵの消費電力の特性を示している。
【００７２】
符号８０１の説明図に示すマルチコアプロセッサシステム１００は、並列アプリに属するスレッド１およびスレッド２と、他のアプリに属するスレッド３、スレッド４を実行している。ＣＰＵ＃０はスレッド１とスレッド３を実行しており、ＣＰＵ＃１はスレッド２とスレッド４を実行している。このとき、スレッド２の指示によって、スレッド１が排他制御処理を実行することを想定する。
【００７３】
スレッド１による排他制御処理は、フラグの監視による状態遷移待ちを実行することを想定する。このとき、スレッド１は、フラグ１を読み出し、フラグが条件に当てはまったか否かを判断し、条件に当てはまらない場合、再びフラグ１を読み出す。このような動作を行う場合、ＣＰＵは、Ｌｏａｄ、Ｃｏｍｐａｒｅ、Ｊｕｍｐといった命令を実行し続けることになる。各命令は、キャッシュメモリ１０３に記憶されているため命令のフェッチ時間が最小となり、ＣＰＵの演算ユニットが動作し続けるため、ＣＰＵは、スピン状態に陥る。ＣＰＵは、膨大な演算を最高の効率で高速に実行しているかのような振る舞いとなるため、消費電力が最大の状態に陥ってしまう。
【００７４】
符号８０２で示す説明図では、スピン状態の電力特性の式を示している。ＣＰＵにて、Ｎ個のスレッドが動作中に、１つのスレッドがスピン状態であると、ＣＰＵがスピン状態となる確率は、１／Ｎとなる。単位時間当たりのＣＰＵがスピン状態になる時間は、１／Ｎ［秒］となる。続けて、スピン状態における電力特性がｐ（ｔ）である場合、ＣＰＵが消費する消費エネルギーは、下記（１）式となる。
【００７５】
消費エネルギー＝∫1/Nｐ（ｔ）ｄｔ［Ｊ／秒］  …（１）
【００７６】
なお、（１）式は、低周波ＣＰＵや、命令リードレイテンシの長いチップでは、値が小さくなる。逆に、演算列が長いソフトウェアによる処理を実行する場合、（１）の値が大きくなる場合がある。
【００７７】
グラフ８０３は、ＣＰＵの消費電力の特性を示している。グラフ８０３の横軸は時刻を示しており、縦軸は電力を示している。電力特性８０４は、ＣＰＵの演算命令ユニット動作時の電力特性を示しており、電力特性８０５は、ＣＰＵのＪｕｍｐ／Ｃｏｍｐａｒｅ命令発行によるスピン状態の電力特性を示している。電力特性８０４は、ほぼ一定となる。理由として、演算命令はメモリのロードストアなど、レイテンシのかかる処理と前後するため、常にＣＰＵ内に電気が流れているわけではなく、一つの演算処理が完結する間に、励起とスタンバイを繰り返すためである。したがって、単発の消費電力が高くても、連続実行しても、加速的に電力が上昇することがない。
【００７８】
電力特性８０５は、初めは電力特性８０４より低い電力であるが、加速的に消費電力を増加する。理由として、初めの段階では、Ｊｕｍｐ／Ｃｏｍｐａｒｅ命令は、プログラムカウンタ３１１の書き換えや、論理比較を行うといった処理のみであるため、電力特性８０５は、電力特性８０４より低い電力となるためである。
【００７９】
しかし、時間が経過すると、ジャンプ命令は単発の命令で１つずつ動作可能であるため、ＣＰＵは、与えられたクロック周期で、レイテンシがかかることなく、常に動作することになる。その結果、ＣＰＵは高密度な命令実行がなされ、励起状態が続き、温度が上昇し、温度が上昇することで、リーク電流による消費電力が上昇することになる。
【００８０】
なお、具体的な電力特性８０４、電力特性８０５の測定方法について、電力特性８０４については、ＣＰＵが単純計算を行うプログラムを動作し、この時の電力値を測定すればよい。あるいは、設計者がプロセッサの設計書、データシートから取得してもよい。電力特性８０５については、０ｘ００００番地の命令コードとして、Ｊｕｍｐ  ０ｘ００００というコードを実行し、電力値を測定すればよい。
【００８１】
このように、スピン状態が始まって直後の段階では電力消費が低い状態であるためスピン状態を解消せず、電力特性８０５による消費エネルギーが、電力特性８０４による消費エネルギーを超えた場合にスピン状態を解消することで、消費電力を抑えることができる。具体的には、ＣＰＵは、下記（２）式による解となる時間Ｔにてスピン状態を解消することで、電力効率を向上させることができる。
【００８２】
∫ｔｐ（ｔ）ｄｔ＝Ｐｃ・ｔ  …（２）
【００８３】
なお、Ｐｃが演算命令ユニット動作時の消費電力であり、Ｐｃ・ｔは電力特性８０４の消費エネルギーとなる。たとえば、Ｐｃ＝４０［ｍＷ］となる。なお、Ｐｃの値が、センサ閾値格納レジスタ４２３に格納される。
【００８４】
たとえば、本実施の形態におけるＣＰＵの電力特性ｐ（ｔ）が、下記（３）式で算出できる場合を想定する。
【００８５】
ｐ（ｔ）＝ｔ＾２＋３０［ｍＷ］  …（３）
【００８６】
ＣＰＵは、（２）式に（３）式を代入し、Ｔ＝５．５［ｍ秒］を得ることができる。したがって、ＣＰＵは、スピン状態が５．５［ｍ秒］経過した際に、スピン状態を解消することで、電力効率を向上させることができる。設計者は、（２）式を解いたのち、スピン回避機構ドライバ４１２の設定項目となる所定時間として設定しておく。
【００８７】
図９は、スピン状態の解消のタイミングの判定方法例を示す説明図である。図８にて、スピン状態が（２）式の解である所定時間以上あった場合に、スピン状態を解消することで、電力効率を向上させることができることを説明した。図９ではさらに、スピン状態が繰り返し発生する状態について説明する。
【００８８】
図９で示すＣＰＵ＃０は、スピン状態であるスレッド５と、通常スレッド処理であるスレッド６と、を一定周期でディスパッチしながら実行している。このような動作を行っている場合、制御レジスタ４２１からの割込信号は、一定周期のパルスとなって通知される。なお、割込信号がＨＩＧＨレベルの時、スピン状態であり、ＬＯＷレベルの時、非スピン状態である場合を想定する。
【００８９】
たとえば、ＣＰＵ＃０は、割込信号がＨＩＧＨレベルである時間となる励起幅が、所定時間を超え、さらに、所定回数繰り返した場合に、スピン状態を解消してもよい。これにより、ＣＰＵ＃０は、一過性の温度上昇や、パルス１回となる単発のスピン状態に対しては、スピン状態を解消せずに済むことができる。なお、所定回数の決定方法は、ＣＰＵの電力特性や、プロファイル結果等をもとに、設計者が予め決定しておく。図９の例では、２回のパルスが発生している。１回のパルスの励起幅が所定時間以上であり、所定回数が２回である場合、ＣＰＵ＃０は、スピン状態を解消する。
【００９０】
次に、図１０、図１１で示すシーケンス図は、スピン判定部４０２でのスピン状態検出判定とスピン状態解除判定のシーケンスを示す。図１０、図１１では、スピン回避機構１０４＃０が行うことを想定し、接尾記号“＃０”を省略する。
【００９１】
図１０は、スピン状態検出判定の一例を示すシーケンス図である。センサ閾値格納レジスタ４２３は、比較回路５０１に閾値を出力する（ステップＳ１００１）。また、センサＩ／Ｆ４０４は、比較回路５０１にセンサ信号を出力する（ステップＳ１００２）。比較回路５０１は、センサ信号が示す電力量が閾値以上となった場合、ＡＮＤ回路５１１に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００３）。また、判定回路５０２は、プログラムが実行する命令がジャンプ命令であると判定した場合、ＡＮＤ回路５１１に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００４）。
【００９２】
ＡＮＤ回路５１１は、比較回路５０１と比較回路５０６の論理積をＯＲ回路５１２に出力する（ステップＳ１００５）。たとえば、比較回路５０１がステップＳ１００３を実行しており、判定回路５０２がステップＳ１００４を実行していた場合、ＡＮＤ回路５１１は、ＯＲ回路５１２に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する。ＯＲ回路５１２は、ステップＳ１００５が実行された場合、制御レジスタ４２１のスピン状態フィールドに対する出力信号を、ＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００６）。
【００９３】
図１１は、スピン状態解除判定の一例を示すシーケンス図である。センサ閾値格納レジスタ４２３は、比較回路６０１に閾値を出力する（ステップＳ１１０１）。また、センサＩ／Ｆ４０４は、比較回路６０１にセンサ信号を出力する（ステップＳ１１０２）。比較回路６０１は、センサ信号が示す電力量が閾値未満となった場合、ＯＲ回路６１１に対する出力信号を、ＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１１０３）。
【００９４】
判定回路６０２は、キャッシュ状態が変化ありの場合、ＡＮＤ回路６０３に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１１０４）。また、スピン状態ステータスレジスタ４２２は、スピン状態をＡＮＤ回路６０３に出力する（ステップＳ１１０５）。具体的に、スピン状態ステータスレジスタ４２２は、スピン状態であればＴＲＵＥをＡＮＤ回路６０３に出力し、非スピン状態であればＦＡＬＳＥをＡＮＤ回路６０３に出力する。
【００９５】
ＡＮＤ回路６０３は、判定回路６０２とスピン状態ステータスレジスタ４２２の論理積をＯＲ回路６１１に出力する（ステップＳ１１０６）。たとえば、判定回路６０２がステップＳ１１０４を実行しており、スピン状態ステータスレジスタ４２２がステップＳ１１０５を実行していた場合、ＡＮＤ回路６０３は、ＯＲ回路６１１に対する信号をＦＡＬＳＥからＴＲＵＥに出力する。
【００９６】
ＯＲ回路６１１は、比較回路６０１とＡＮＤ回路６０３の論理和を制御レジスタ４２１のスピン状態フィールドに出力する（ステップＳ１１０７）。たとえば、比較回路６０１がステップＳ１１０３を実行しているか、またはＡＮＤ回路６０３がステップＳ１１０６を実行している場合、ＯＲ回路６１１は、制御レジスタ４２１のスピン状態フィールドに対する出力信号をＦＡＬＳＥからＴＲＵＥに出力する。
【００９７】
次に、図１２、図１３では、ＣＰＵ＃０で実行するフローチャートを示す。図１２では、ＣＰＵ＃０がスピン回避機構ドライバ４１２＃０の機能によってスピン状態周期性判断処理を実行し、図１３では、ＣＰＵ＃０がディスパッチスケジューラ３２４＃０の機能によってスレッド退避復帰処理を実行する。図１２、図１３では、ＣＰＵ＃０が行うことを想定し、接尾記号“＃０”を省略する。
【００９８】
図１２は、スピン回避機構ドライバ４１２によるスピン状態周期性判断処理の一例を示すフローチャートである。スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性なしに設定する（ステップＳ１２０１）。設定後、スピン回避機構ドライバ４１２は、反復回数を０に設定し（ステップＳ１２０２）、制御レジスタ４２１からの割込信号をディスパッチタイマを参照してサンプリングする（ステップＳ１２０３）。具体的に、スピン回避機構ドライバ４１２は、ディスパッチタイマが示す時間の数十回分、割込信号を監視し続け、割込信号の波形を生成する。
【００９９】
サンプリング後、スピン回避機構ドライバ４１２は、励起幅が所定時間以上であるか否かを判断する（ステップＳ１２０４）。励起幅が所定時間以上である場合（ステップＳ１２０４：Ｙｅｓ）、スピン回避機構ドライバ４１２は、反復回数をインクリメントし（ステップＳ１２０５）、反復回数が所定回数以上であるか否かを判断する（ステップＳ１２０６）。反復回数が所定回数未満である場合（ステップＳ１２０６：Ｎｏ）、スピン回避機構ドライバ４１２は、ステップＳ１２０３の処理に移行する。
【０１００】
反復回数が所定回数以上である場合（ステップＳ１２０６：Ｙｅｓ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグが周期性ありの状態か否かを判断する（ステップＳ１２０７）。周期性ありの状態である場合（ステップＳ１２０７：Ｙｅｓ）、スピン回避機構ドライバ４１２は、ステップＳ１２０３の処理に移行する。周期性なしの状態である場合（ステップＳ１２０７：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性ありに設定する（ステップＳ１２０８）。設定後、スピン回避機構ドライバ４１２は、周期性ありをディスパッチスケジューラ３２４に通知し（ステップＳ１２０９）、ステップＳ１２０３の処理に移行する。
【０１０１】
励起幅が所定時間未満である場合（ステップＳ１２０４：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグが周期性なしの状態か否かを判断する（ステップＳ１２１０）。周期性なしの状態である場合（ステップＳ１２１０：Ｙｅｓ）、スピン回避機構ドライバ４１２は、ステップＳ１２０２の処理に移行する。周期性ありの状態である場合（ステップＳ１２１０：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性なしに設定する（ステップＳ１２１１）。設定後、スピン回避機構ドライバ４１２は、周期性なしをディスパッチスケジューラ３２４に通知し（ステップＳ１２１２）、ステップＳ１２０２の処理に移行する。
【０１０２】
これにより、スピン回避機構ドライバ４１２は、励起幅が所定時間以上あり、さらに、スピン状態と非スピン状態が所定回数繰り返されたときに、周期性ありと判断することができる。
【０１０３】
図１３は、ディスパッチスケジューラ３２４によるスレッド退避復帰処理の一例を示すフローチャートである。ディスパッチスケジューラ３２４は、スピン回避機構ドライバ４１２から通知を受け付けたか否かを判断する（ステップＳ１３０１）。通知を受け付けていない場合（ステップＳ１３０１：通知なし）、ディスパッチスケジューラ３２４は、一定時間経過後、ステップＳ１３０１の処理を再び実行する。
【０１０４】
周期性ありの通知を受け付けた場合（ステップＳ１３０１：周期性あり）、ディスパッチスケジューラ３２４は、実行中のスレッド以外に他スレッドが割り当てられているか否かを判断する（ステップＳ１３０２）。他スレッドが割り当てられている場合（ステップＳ１３０２：Ｙｅｓ）、ディスパッチスケジューラ３２４は、ディスパッチループから実行中のスレッドを退避し（ステップＳ１３０３）、ステップＳ１３０１の処理に移行する。
【０１０５】
他スレッドが割り当てられていない場合（ステップＳ１３０２：Ｎｏ）、ディスパッチスケジューラ３２４は、実行中のスレッドを退避しアイドルスレッドと入れ替える（ステップＳ１３０４）。入替後、ディスパッチスケジューラ３２４は、ＰＭＵ３０４にＣＰＵへのクロックの供給を停止するように通知し（ステップＳ１３０５）、ステップＳ１３０１の処理に移行する。
【０１０６】
周期性なしの通知を受け付けた場合（ステップＳ１３０１：周期性なし）、ディスパッチスケジューラ３２４は、退避していたスレッドをディスパッチループに復帰し（ステップＳ１３０６）、ステップＳ１３０１の処理に移行する。なお、退避していたスレッドが複数存在する場合、ディスパッチスケジューラ３２４は、退避していた全てのスレッドをディスパッチループに復帰する。
【０１０７】
これにより、ディスパッチスケジューラ３２４は、スピン状態となる原因となっていたスレッドを退避することができる。また、ディスパッチスケジューラ３２４は、非スピン状態となった場合、スレッドを復帰することで、退避されていたスレッドを続行することができる。
【０１０８】
また、上述した各フローチャートで示したステップは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶装置に記憶された検索プログラムをＣＰＵｓ２０１に実行させた処理である。また、実行させた実行結果は、その都度、記憶装置に書き込まれ、他の処理からの読込要求に応じて読み出される。
【０１０９】
以上説明したように、システム、および検出方法によれば、電力を検出するセンサからのセンサ信号とキャッシュメモリの状態を監視するキャッシュメモリ状態監視回路からの状態信号とによって、プログラムのスピン状態を検出する検出回路を含む。これにより、システムは、スピン状態の検出条件としてＣＰＵの電力とキャッシュメモリの状態変化といった、スピン状態におけるシステムの状態を用いることで、排他制御用の命令を用いずに実装されたプログラムによって発生したスピン状態を検出できる。
【０１１０】
なお、スピン状態の検出には、センサからの信号とキャッシュメモリ状態監視回路からの状態信号の組合せであることが好ましい。理由として、センサからの信号のみでスピン状態を検出する場合、システムを有する携帯端末がユーザのポケットに入れられると、熱がこもってしまい、非スピン状態にも関わらず消費電力が上昇することがあるためである。また、キャッシュメモリの状態信号のみでスピン状態を検出する場合については、インストラクションキャッシュを書き換えないように実装されたプログラムが実行されていれば、非スピン状態であっても状態が変化しない、という状態になるためである。
【０１１１】
また、本実施の形態にかかるシステムは、スピン状態の検出、スピン状態解除の検出を行う際にメモリアクセスを行わないため、従来技術では検出できないスピン状態を、ほぼ無負荷で検出することができる。
【０１１２】
また、システムは、スピン状態が検出された場合にプログラムのスピン状態を解除する解除回路を含んでもよい。これにより、システムは、一旦スピン状態となっても非スピン状態に遷移することができる。
【０１１３】
また、システムは、センサ信号と閾値とを比較し、比較結果を検出回路に出力してもよい。これにより、スピン状態となりＣＰＵの演算ユニットが動作し続けて消費電力、温度が上昇した可能性があるとして、システムは、スピン状態となった可能性があることを検出回路に出力することができる。
【０１１４】
また、システムは、プログラムが実行する命令が所定命令であるかを判定し、判定結果を検出回路に出力してもよい。なお、所定命令は、ジャンプ命令であってもよいし、プログラムカウンタにジャンプテーブルのアドレスをロードする命令であってもよい。これにより、同じジャンプ命令が実行され続けていることが検出されたため、システムは、スピン状態となった可能性があることを検出回路に出力することができる。
【０１１５】
また、システムは、検出回路の検出結果に基づいてＣＰＵが実行するプログラムを制御するための情報を制御レジスタに保持してもよい。これにより、ＣＰＵは制御レジスタを参照することで、スピン状態か非スピン状態かを取得できる。
【０１１６】
また、システムは、センサ信号が閾値以上であり、キャッシュメモリの状態に変化がない場合、スピン状態を検出してもよい。これにより、システムは、スピン状態によって消費電力が加速するところまでを検出し、さらに、スピン状態によってキャッシュメモリに変更がなく同じ命令を実行し続けていることを検出したため、スピン状態であると特定することができる。
【０１１７】
また、システムは、キャッシュメモリの状態に変化がなく、プログラムの命令が所定命令である場合、スピン状態を検出してもよい。これにより、システムは、所定命令であるジャンプ命令が繰り返し実行されていることを検出したため、スピン状態であると特定することができる。
【０１１８】
また、システムは、センサ信号が閾値未満であるとき、または、スピン状態であるときにキャッシュメモリの状態に変化があった場合、非スピン状態を検出してもよい。これにより、システムは、スピン状態の検出条件の少なくともいずれか一方が解消されたこととなるため、非スピン状態であると特定することができる。
【０１１９】
また、システムは、スピン状態が検出される場合に、スピン状態に対応する処理を所定の処理に置き換えてスピン状態を解除してもよい。なお、所定の処理とは、アイドルスレッドである。これにより、システムは、スピン状態となり、消費電力が加速的に上昇してしまっている状態を解除でき、電力効率を向上させることができる。
【０１２０】
また、システムは、スピン状態である時間が所定時間以上である場合に、スピン状態に対応する処理の割当を停止してもよい。たとえば、スピン状態となっても、すぐにフラグ条件が満たされるスレッドも存在しており、このようなスレッドを退避してしまうと、本来すぐにスピン状態が解除すべきタイミングから処理の退避および復帰の分だけ処理性能が劣化することになる。また、スピン状態となった直後の消費電力は、一般的な演算ユニットより低いため、スピン状態となった直後に処理の割当を停止してしまうと、消費電力が増加してしまう。したがって、システムは、予め設定されている所定時間以上スピン状態が続いた場合に、処理の割当を停止することで、処理性能が維持でき、かつ、電力効率も向上させることができる。
【０１２１】
また、システムは、スピン状態である時間が所定時間以上であり、かつ、スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、スピン状態に対応する処理の割当を停止してもよい。たとえば、反復した回数が少ない状態で処理の割当を停止すると、システムは、電力の過剰供給状態を削減することができるが、処理の割当の停止、また、割当の復帰の回数が増大するため、停止、復帰にかかるオーバーヘッドが大きくなる。したがって、システムは、予め設定されている所定回数以上であるときに処理の割当を停止することで、停止、復帰にかかるオーバーヘッドを抑えつつ、電力効率を向上させることができる。
【０１２２】
たとえば、従来例にかかるシステムが、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットバッファのＩ／Ｏ排他ロックを行う場合、スピン状態の反復回数は、数千回から数百万回となる。そこで、本実施の形態にかかるシステムが、所定回数を数十回として、所定回数以上スピン状態と非スピン状態を反復した場合、スピン状態に対応する処理の割当を停止することで、従来例によるシステムに比べて、電力効率を向上することができる。
【０１２３】
なお、本実施の形態で説明した検出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検出プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検出プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２４】
また、本実施の形態で説明したスピン回避機構１０４は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したスピン回避機構１０４の機能（記憶部４０１〜発行命令バッファ４０５）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、スピン回避機構１０４を製造することができる。
【符号の説明】
【０１２５】
１０３  キャッシュメモリ
１０４  スピン回避機構
３１１  プログラムカウンタ
４０４  センサＩ／Ｆ
４２１  制御レジスタ
４２２  スピン状態ステータスレジスタ
４２３  センサ閾値格納レジスタ
４３１  スピン状態検出回路
４３２  スピン状態解除回路
５０１  比較回路
５０２  判定回路
５２１  キャッシュ状態信号
６０１  比較回路
６０２  判定回路
【図１】
2012147168.tif 000003
【図２】
2012147168.tif 000004
【図３】
2012147168.tif 000005
【図４】
2012147168.tif 000006
【図５】
2012147168.tif 000007
【図６】
2012147168.tif 000008
【図７】
2012147168.tif 000009
【図８】
2012147168.tif 000010
【図９】
2012147168.tif 000011
【図１０】
2012147168.tif 000012
【図１１】
2012147168.tif 000013
【図１２】
2012147168.tif 000014
【図１３】
2012147168.tif 000015
【手続補正書】
【提出日】平成25年11月7日(2013.11.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵの電力を検出するセンサと、
キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、
前記センサからのセンサ信号と前記キャッシュメモリ状態監視回路からの状態信号とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出する検出回路と、
を含むことを特徴とするシステム。
【請求項２】
前記スピン状態が検出されたときに前記プログラムのスピン状態を解除する解除回路を含むこと
を特徴とする請求項１に記載のシステム。
【請求項３】
前記センサ信号と閾値とを比較し、比較結果を前記検出回路に出力する比較回路を含むこと
を特徴とする請求項１または請求項２に記載のシステム。
【請求項４】
前記プログラムが実行する命令が所定命令であるか否かを判定し、判定結果を前記検出回路に出力する判定回路を含むこと
を特徴とする請求項１乃至請求項３の何れか一に記載のシステム。
【請求項５】
前記所定命令は、ジャンプ命令であること
を特徴とする請求項４に記載のシステム。
【請求項６】
前記検出回路の検出結果に基づいて前記プログラムを制御するための情報を格納する制御レジスタを含むこと
を特徴とする請求項１乃至請求項５の何れか一に記載のシステム。
【請求項７】
ＣＰＵと、
前記ＣＰＵの電力を検出してセンサ信号を出力するセンサと、
キャッシュメモリの状態を監視して状態信号を出力するキャッシュメモリ状態監視回路と、
を含み、
前記センサ信号が閾値以上となる場合であって前記状態信号が前記キャッシュメモリの状態に変化がないことを示すときに、前記ＣＰＵが実行するプログラムのスピン状態が検出されること
を特徴とするシステム。
【請求項８】
前記状態信号が前記キャッシュメモリの状態に変化がないことを示す場合であって、実行する前記プログラムの命令が所定命令であるとき、前記スピン状態が検出されること
を特徴とする請求項７に記載のシステム。
【請求項９】
前記センサ信号が前記閾値未満であるとき、または、前記スピン状態である場合に前記状態信号が前記キャッシュメモリの状態に変化があることを示すときに、非スピン状態が検出されること
を特徴とする請求項７または請求項８に記載のシステム。
【請求項１０】
ＣＰＵの電力を検出し、
キャッシュメモリの状態を監視し、
検出された電力と前記キャッシュメモリの状態とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出すること
を特徴とする検出方法。
【請求項１１】
前記電力が閾値以上であるか否かを検出し、
前記電力が前記閾値以上であるときは前記スピン状態を検出し、
前記電力が前記閾値未満であるときは前記スピン状態の検出を行わないこと
を特徴とする請求項１０に記載の検出方法。
【請求項１２】
前記スピン状態が検出される場合に、前記スピン状態に対応する処理を所定の処理に置き換えて前記スピン状態を解除すること
を特徴とする請求項１０または請求項１１に記載の検出方法。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スピン状態を検出するシステム、および検出方法に関する。
【背景技術】
【０００２】
従来から、ソフトウェアがマルチスレッドで動作する場合、同期処理や排他制御を行いながら処理を実行することがある。同期処理や排他制御において、明示的に特定の命令を用いる方法として、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）などのハード機能を利用するバリア同期命令、またはＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）のライブラリであるスレッドの一時停止、解除を行うミューテックスが存在する。また、明示的でない排他制御として、たとえば、フラグの監視による状態遷移待ちによる実装方法が存在する。
【０００３】
このような同期処理や排他制御は、ハードウェアの点からは処理を実行しているものの、ソフトウェアは同じ処理を繰り返しており処理が進まない状態であり、システムの処理能力を低下させる原因となっていた。以下、このような、同じ処理を繰り返している状態をスピン状態として定義する。また、スピン状態になったＣＰＵは、消費電力が上昇してしまっていた。このことから、スピン状態を検出し、スピン状態を回避する技術が開示されている。
【０００４】
スピン状態を検出する技術として、たとえば、プログラム中にループしているというスピンウェイト命令を検出する技術が開示されている。また、スピン状態を検出する他の技術として、たとえば、統計情報を用いて命令例のループを予測して、スピン状態を検出する技術が開示されている。また、スピン状態が検出された場合のスケジューリング技術として、たとえば、スピン状態を検出した際に、動作状態を退避復元する技術が開示されている。また、スピン状態となったスレッドが存在した場合、別のスレッドをＣＰＵに割り当てる技術が存在する（たとえば、下記特許文献１〜４を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００３／０４０９４８号パンフレット
【特許文献２】特開２００６−４０１４２号公報
【特許文献３】特開２００９−１１６８８５号公報
【特許文献４】特開平５−２０４６７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、明示的に記述されたスピンウェイト命令を参照することでスピン状態を検出しているため、プログラム中に明示されてないループによって発生したスピン状態を検出することが困難であるという問題があった。たとえば、フラグの監視による状態遷移待ちするプログラムの命令群には、ＣＰＵのハード機能を利用する命令、またはＯＳのライブラリを呼び出す命令が存在しないため、該当のプログラムがスピン状態を引き起こす目印になる命令が存在しないことになる。したがって、従来技術にかかる技術では、このようなプログラムがスピン状態を引き起こすことを検出することが困難であった。
【０００７】
また、上述した従来技術において、統計情報を用いることで明示的でないスピン状態をある程度予測することは可能ではある。しかしながら、統計情報収集時に発生しなかった箇所についてはスピン状態を検出できないため、明示的でないスピン状態を全て検出することは困難であるという問題があった。
【０００８】
本発明は、上述した従来技術による問題点を解消するため、プログラム中に明示されてないループによって発生したスピン状態を検出できるシステム、および検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、ＣＰＵと、ＣＰＵの電力を検出するセンサと、キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、センサからのセンサ信号とキャッシュメモリ状態監視回路からの状態信号とに基づいてＣＰＵが実行するプログラムのスピン状態を検出する検出回路とを含むシステム、および検出方法が提案される。
【発明の効果】
【００１０】
本発明の一側面によれば、プログラム中に明示されてないループによって発生したスピン状態を検出できるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステム１００のＣＰＵ周辺のハードウェアとソフトウェア例を示すブロック図である。
【図４】図４は、スピン回避機構１０４のハードウェア例を示すブロック図である。
【図５】図５は、スピン判定部４０２によるスピン状態検出の一例を示すブロック図である。
【図６】図６は、スピン判定部４０２によるスピン状態解除検出の一例を示すブロック図である。
【図７】図７は、キャッシュメモリ状態監視回路４０３の動作例を示す説明図である。
【図８】図８は、スピン状態の消費電力状態の一例を示す説明図である。
【図９】図９は、スピン状態の解消のタイミングの判定方法例を示す説明図である。
【図１０】図１０は、スピン状態検出判定の一例を示すシーケンス図である。
【図１１】図１１は、スピン状態解除判定の一例を示すシーケンス図である。
【図１２】図１２は、スピン回避機構ドライバ４１２によるスピン状態周期性判断処理の一例を示すフローチャートである。
【図１３】図１３は、ディスパッチスケジューラ３２４によるスレッド退避復帰処理の一例を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、開示のシステム、および検出方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるシステムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１３】
図１は、マルチコアプロセッサシステム１００の動作例を示す説明図である。図１で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０、ＣＰＵ＃１を含む。以下、接尾記号"＃ｎ"が付随された記号は、ｎ番目のＣＰＵに対応する記号であることを示している。マルチコアプロセッサシステム１００は、携帯電話といった携帯端末を想定している。符号１０１で示す説明図は、ＣＰＵ＃０がスピン状態となった状態を示しており、符号１０２で示す説明図は、スピン状態となったＣＰＵ＃０が解除され、非スピン状態となった場合を示している。また、ＣＰＵ＃０、ＣＰＵ＃１は、キャッシュメモリ１０３＃０、キャッシュメモリ１０３＃１、を含む。さらに、ＣＰＵ＃０、ＣＰＵ＃１は、それぞれ、スピン状態になったことを検出するスピン回避機構１０４＃０、スピン回避機構１０４＃１を有している。
【００１４】
符号１０１に示す説明図にて、ＣＰＵ＃０は、実行コード１０５を含むスレッド０を実行している。実行コード１０５は、＊ｙの値を書き換えるのを待ってループを抜け出すアルゴリズムとなっている。このようなアルゴリズムの場合、ミューテックスのような専用命令により排他同期を行っていれば、明示的なロック状態をコンパイラが認識できる。しかし、実行コード１０５のようなコーディングを行っている場合、これがスピン状態を起こすかどうかをコンパイラ等が判定することはできない。
【００１５】
スレッド０の実行によって、ＣＰＵ＃０がスピン状態となると、ＣＰＵ＃０の電力が上昇する。また、同一の処理を繰り返すため、キャッシュメモリ１０３＃０の状態が変化しない。スピン回避機構１０４＃０は、ＣＰＵ＃０の電力とキャッシュメモリ１０３＃０の状態から、スピン状態を検出する。このように、スピン回避機構１０４＃０は、スピン状態におけるマルチコアプロセッサシステム１００の状態を用いて検出することで、排他制御用の特別な命令を用いずに実装された排他制御によって発生したスピン状態を検出することができる。
【００１６】
符号１０２に示す説明図では、スピン状態検出後のマルチコアプロセッサシステム１００の状態である。ＣＰＵ＃０は、スピン回避機構１０４＃０によるスピン状態の検出によって、スピン状態となっており、プログラム内に排他制御の記述が明示的にないスレッド０の特定が容易となる。したがって、ＣＰＵ＃０は、特定できたスレッド０をディスパッチループから退避する。これにより、ＣＰＵ＃０の電力が下降するため、マルチコアプロセッサシステム１００は、消費電力を削減することができる。
【００１７】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、マルチコアプロセッサシステム１００のハードウェア例を示すブロック図である。図２において、マルチコアプロセッサシステム１００は、複数のＣＰＵが含まれるＣＰＵｓ２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、を含む。また、マルチコアプロセッサシステム１００は、フラッシュＲＯＭ２０４と、フラッシュＲＯＭコントローラ２０５と、フラッシュＲＯＭ２０６と、を含む。また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０７と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０８と、キーボード２０９と、を含む。また、各部はバス２１０によってそれぞれ接続されている。
【００１８】
ここで、ＣＰＵｓ２０１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵｓ２０１は、ＣＰＵ＃０〜ＣＰＵ＃ｎを含む。ｎは、１以上の整数である。また、ＣＰＵ＃０〜ＣＰＵ＃ｎには、図１で示したキャッシュメモリ１０３、スピン回避機構１０４、またその他のハードウェアが存在する。これらのハードウェアについては、図３にて後述する。
【００１９】
ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵｓ２０１のワークエリアとして使用される。フラッシュＲＯＭ２０４は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。たとえば、フラッシュＲＯＭ２０４は、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２０８によって新しいＯＳを受信し、フラッシュＲＯＭ２０４に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２０】
フラッシュＲＯＭコントローラ２０５は、ＣＰＵｓ２０１の制御に従ってフラッシュＲＯＭ２０６に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０６は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０６は、フラッシュＲＯＭコントローラ２０５の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２０８を通して取得した画像データ、映像データや、また本実施の形態にかかるスレッド処理方法を実行するプログラムなどである。フラッシュＲＯＭ２０６は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ２０７は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０７は、たとえば、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００２２】
Ｉ／Ｆ２０８は、通信回線を通じてＬＡＮ、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１１に接続され、ネットワーク２１１を介して他の装置に接続される。そして、Ｉ／Ｆ２０８は、ネットワーク２１１と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０８には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２３】
キーボード２０９は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０９は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２４】
図３は、マルチコアプロセッサシステム１００のＣＰＵ周辺のハードウェアとソフトウェア例を示すブロック図である。初めに、マルチコアプロセッサシステム１００は、ハードウェアとして、スヌープ機構３０１、サーモ電力検出部３０３、ＰＭＵ（Ｐｏｗｅｒ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）３０４、スピン回避機構１０４、を含む。
【００２５】
スヌープ機構３０１は、ＣＰＵ＃０〜ＣＰＵ＃ｎがアクセスするキャッシュメモリ１０３の整合性を取る装置である。たとえば、キャッシュメモリ１０３＃０が更新されると、スヌープ機構３０１が、キャッシュメモリ１０３＃１に更新内容を通知する。スヌープ機構３０１のプロトコルとしては、無効型プロトコルと更新型プロトコルが存在する。
【００２６】
なお、キャッシュメモリ１０３の整合性を取る装置は、キャッシュコヒーレンシ機構に分類され、キャッシュコヒーレンシ機構の一例として、スヌープ機構が存在する。キャッシュコヒーレンシ機構は、大別してスヌープ方式を採用したスヌープ機構とディレクトリ方式とがある。本実施の形態にかかるスヌープ機構３０１は、ディレクトリ方式を採用したキャッシュコヒーレンシ機構であってもよい。
【００２７】
メモリ３０２は、ＣＰＵｓ２０１からアクセス可能な共有の記憶装置である。なお、メモリ３０２は、ＲＡＭ２０３の全てであってもよいし、または一部であってもよい。さらに、メモリ３０２は、ＲＯＭ２０２、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６を含んでいてもよい。
【００２８】
なお、図３で説明するスヌープ機構３０１、メモリ３０２以外のハードウェア、ソフトウェアは、ＣＰＵ＃０〜ＣＰＵ＃ｎ全てが有する。したがって、以下の図３の説明では、ＣＰＵ＃０に関するハードウェア、ソフトウェアについて説明を行い、さらに、接尾記号"＃０"を省略する。
【００２９】
ＣＰＵ＃０内のハードウェアとして、ＣＰＵ＃０は、プログラムカウンタ３１１、タイマ３１２、キャッシュメモリ１０３を含む。また、ＣＰＵ＃０で実行されるソフトウェアとして、ＣＰＵ＃０は、ＯＳ３２１、スレッド３３１〜スレッド３３３、アイドルスレッド３３４を実行する。ＯＳ３２１は、カーネル３２２、ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）３２３、ディスパッチスケジューラ３２４、排他同期ＡＰＩ検出部３２５を含む。
【００３０】
サーモ電力検出部３０３は、ＣＰＵに付随している、温度調節を行うサーモスタットから電力、温度を検出する機能を有する。なお、サーモ電力検出部３０３は、ＣＰＵと配線接続はしておらず、基盤上で物理的に接続している。ＰＭＵ３０４は、ＣＰＵの電源電圧、クロックを管理する装置である。
【００３１】
スピン回避機構１０４は、サーモ電力検出部３０３、キャッシュメモリ１０３、排他同期ＡＰＩ検出部３２５からの入力に基づいて、スピン状態を検出する。検出結果は、ディスパッチスケジューラ３２４に出力される。なお、スピン回避機構１０４の内部については、図４にて後述する。
【００３２】
プログラムカウンタ３１１は、ＣＰＵのレジスタの一つであり、ＣＰＵが現在実行中の命令が格納されているメモリ３０２上のアドレスを格納する記憶領域である。タイマ３１２は、時間経過を通知する機能を有する。なお、タイマ３１２は、ＣＰＵのクロックカウンタ等で実装される。
【００３３】
キャッシュメモリ１０３は、ＣＰＵがメモリ３０２のデータに高速にアクセス可能とするため、メモリ３０２のデータの一部をコピーした記憶領域である。また、キャッシュメモリ１０３は、データを記憶するデータキャッシュと、プログラム内の命令を記憶するインストラクションキャッシュを含む。
【００３４】
ＯＳ３２１は、マルチコアプロセッサシステム１００を制御するプログラムである。たとえば、ＯＳ３２１は、メモリ３０２を管理したり、またはファイルシステムをアプリに提供したりする。カーネル３２２は、ＯＳ３２１の中核となる機能を有する。たとえば、カーネル３２２は、フラッシュＲＯＭコントローラ２０５、キーボード２０９等といったハードウェアを制御するデバイスドライバを含む。
【００３５】
ＡＰＩ３２３は、スレッド３３１〜スレッド３３３がＯＳ３２１の提供するライブラリにアクセスするためのインターフェースである。たとえば、ＡＰＩ３２３は、ファイルシステムの制御、画像処理、文字制御などを実行する関数として提供される。
【００３６】
ディスパッチスケジューラ３２４は、スレッドの割当を制御する機能を有する。たとえば、ディスパッチスケジューラ３２４は、ＣＰＵに次に割り当てるスレッドを決定し、決定されたスレッドをＣＰＵに割り当てる。ディスパッチスケジューラ３２４によって割り当てられるスレッドは、スレッド３３１〜スレッド３３３、アイドルスレッド３３４である。また、ディスパッチスケジューラ３２４は、アイドルスレッド３３４をＣＰＵに割り当てる場合、ＰＭＵ３０４にＣＰＵへのクロックの供給を停止するよう通知する。
【００３７】
排他同期ＡＰＩ検出部３２５は、スピン回避機構１０４を制御するＡＰＩである。具体的に、排他同期ＡＰＩ検出部３２５は、スピン状態であると設定するＡＰＩと、スピン状態であったのを解除するＡＰＩとが含まれる。
【００３８】
スレッド３３１〜スレッド３３３は、アプリケーションソフトウェア内の一機能を実行する。たとえば、アプリケーションソフトウェアが動画再生アプリであることを想定する。このとき、スレッド３３１がネットワーク２１１からダウンロードするダウンロードスレッド、スレッド３３２が動画コーデックに従ってデコードするデコードスレッド、スレッド３３３がディスプレイ２０７に表示する描画スレッドとなる。アイドルスレッド３３４は、何もしないスレッドである。たとえば、アイドルスレッドは、ＮＯＰ命令を実行する。
【００３９】
以下、図４〜図６にて、スピン回避機構１０４のハードウェア例について説明を行う。図４〜図６では、ＣＰＵ＃０に対応するスピン回避機構１０４＃０を例にして説明を行い、スピン回避機構１０４＃１〜スピン回避機構１０４＃ｎについては、等しいハードウェアであるため、説明を省略し、接尾記号"＃ｎ"も省略する。
【００４０】
図４は、スピン回避機構１０４のハードウェア例を示すブロック図である。スピン回避機構１０４は、記憶部４０１、スピン判定部４０２、キャッシュメモリ状態監視回路４０３、センサＩ／Ｆ４０４、発行命令バッファ４０５、を含む。また、スピン回避機構１０４は、センサ４１１からの入力を受け付ける。また、スピン回避機構１０４は、カーネル３２２内のスピン回避機構ドライバ４１２からの制御を受ける。
【００４１】
記憶部４０１は、情報を記憶するレジスタ群であり、制御レジスタ４２１、スピン状態ステータスレジスタ４２２、センサ閾値格納レジスタ４２３を含む。制御レジスタ４２１は、スピン状態設定、スピン状態解除設定、スピン状態という３つのフィールドを含む。スピン状態設定フィールド、スピン状態解除設定フィールドは、スピン回避機構ドライバ４１２から設定されるフィールドである。
【００４２】
スピン状態設定フィールドは、スピン回避機構ドライバ４１２からスピン状態であると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態設定フィールドは、スピン状態であると指示された場合、ＴＲＵＥを格納し、指示されてないとき、ＦＡＬＳＥを格納する。スピン状態解除設定フィールドは、スピン状態であったのを解除すると指示された場合に、指示を示す識別子を格納する。たとえば、スピン状態解除設定フィールドは、スピン状態を解除すると指示された場合、ＴＲＵＥを格納し、指示されてないとき、ＦＡＬＳＥを格納する。
【００４３】
スピン状態フィールドは、スピン判定部４０２によって判定された結果に基づいて、スピン状態か否かを示す識別子を格納する。たとえば、スピン状態フィールドは、スピン判定部４０２によってスピン状態であると判定された場合、ＴＲＵＥを格納し、非スピン状態であると判定されたとき、ＦＡＬＳＥを格納する。また、スピン状態フィールドは、スピン回避機構ドライバ４１２に対してスピン状態か否かを示す割込信号を通知する。
【００４４】
スピン状態ステータスレジスタ４２２は、スピン状態か、または非スピン状態かを、スピン回避機構１０４内部で使用するために用意されたレジスタである。具体的に、スピン状態ステータスレジスタ４２２は、スピン状態であればＴＲＵＥであり、非スピン状態であればＦＡＬＳＥを格納する。センサ閾値格納レジスタ４２３は、センサ４１１の値に対する閾値を格納する。具体的な閾値の値としては、図８にて後述する。
【００４５】
スピン判定部４０２は、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、スピン状態ステータスレジスタ４２２、発行命令バッファ４０５からの入力により、スピン状態かを判定し、制御レジスタ４２１に出力する。また、スピン判定部４０２は、スピン状態であることを検出するスピン状態検出回路４３１と、スピン状態が解除され、非スピン状態であることを検出するスピン状態解除回路４３２と、を含む。なお、スピン状態検出回路４３１の詳細については、図５にて後述する。また、スピン状態解除回路４３２の詳細については、図６にて後述する。
【００４６】
キャッシュメモリ状態監視回路４０３は、キャッシュメモリ１０３の状態を監視する。具体的に、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１＃０を用いて、キャッシュメモリ１０３内の、インストラクションキャッシュに格納されている命令を取得し、発行命令バッファ４０５に格納する。また、キャッシュメモリ状態監視回路４０３は、キャッシュメモリ１０３の状態を示す状態信号をスピン判定部４０２に出力する。キャッシュメモリ状態監視回路４０３の動作については、図７にて後述する。センサＩ／Ｆ４０４は、センサ４１１に対するインターフェースである。センサＩ／Ｆ４０４は、センサ４１１から電力量を取得し、センサ信号として出力する。発行命令バッファ４０５は、ＣＰＵが実行した命令を蓄積する。
【００４７】
センサ４１１は、サーモ電力検出部３０３といった電力センサである。また、センサ４１１は、温度センサであってもよい。前述したセンサ閾値格納レジスタ４２３は、センサ４１１に対応した閾値が格納されている。
【００４８】
スピン回避機構ドライバ４１２は、スピン回避機構１０４を制御するドライバである。具体的に、スピン回避機構ドライバ４１２は、スピン状態設定フィールド、スピン状態解除設定フィールドに対して書き込みを行う。また、スピン回避機構ドライバ４１２は、タイマ３１２による一定周期ごとに、スピン状態フィールドの状態に対応した割込信号を取得し、スピン状態が悪化している状態であるかを判断し、さらにスピン状態に周期性があるか否かを判断する。判断結果は、ディスパッチスケジューラ３２４に通知される。
【００４９】
図５は、スピン判定部４０２によるスピン状態検出の一例を示すブロック図である。図５では、スピン判定部４０２によるスピン状態検出時に用いる回路の例を示している。スピン判定部４０２は、スピン状態検出回路４３１と、比較回路５０１と、判定回路５０２とを用いて、スピン状態を検出する。また、スピン状態検出回路４３１は、ＡＮＤ回路５１１と、ＯＲ回路５１２とを含む。また、判定回路５０２は、判定回路５０３、抽出回路５０４、抽出回路５０５、比較回路５０６を含む。
【００５０】
また、スピン判定部４０２は、スピン状態検出のため、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、キャッシュメモリ状態監視回路４０３から出力されるキャッシュ状態信号５２１、プログラムカウンタ３１１の入力を受ける。さらに、スピン判定部４０２は、制御レジスタ４２１、スピン状態ステータスレジスタ４２２に検出したスピン状態を出力する。キャッシュ状態信号５２１は、キャッシュメモリ１０３の状態が変化したか否かを示す信号である。なお、キャッシュ状態信号５２１の詳細については、図７にて後述する。
【００５１】
比較回路５０１は、センサＩ／Ｆ４０４とセンサ閾値格納レジスタ４２３とを比較し、比較結果をスピン状態検出回路４３１内のＡＮＤ回路５１１に出力する。具体的に、比較回路５０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値以上である場合、比較結果としてＴＲＵＥを出力する。また、比較回路５０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値より小さい場合、比較結果としてＦＡＬＳＥを出力する。
【００５２】
判定回路５０２は、プログラムが実行する命令が所定命令であるか否かを判定し、判定結果をスピン状態検出回路４３１のＡＮＤ回路５１１に出力する。ここで、所定命令とは、ジャンプ命令である。または、所定命令を実行することでジャンプ命令となる命令であってもよい。たとえば、プログラムカウンタ３１１に、汎用レジスタの値や、メモリの値を設定するという命令があった場合、設定を行うことで、次の命令の実行位置が、設定された値となり、ジャンプ命令と同じ動作を行う。したがって、このような動作を行う命令も、所定命令として含めてもよい。
【００５３】
判定回路５０３は、キャッシュ状態信号５２１がキャッシュ状態変化なしか否かを判定し、判定結果を抽出回路５０４に出力する。具体的に、判定回路５０３は、キャッシュ状態信号５２１が、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてＴＲＵＥを出力し、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてＦＡＬＳＥを出力する。
【００５４】
抽出回路５０４は、判定結果がＴＲＵＥである場合、発行命令バッファ４０５に蓄積されていた命令から、ジャンプ先アドレスを抽出して比較回路５０６に出力する。たとえば、蓄積されていた命令がジャンプ命令＋ジャンプ先アドレスとなっていた場合、抽出回路５０４は、ジャンプ先アドレスを抽出する。また、蓄積されていた命令がプログラムカウンタ３１１にジャンプテーブル内のオフセット値のアドレスを設定する命令であれば、抽出回路５０４は、ジャンプテーブル内のオフセット値のアドレスをジャンプ先アドレスとして抽出する。
【００５５】
抽出回路５０５は、プログラムカウンタ３１１が指すアドレスから、ジャンプ先アドレスを抽出して比較回路５０６に出力する。具体的なジャンプ先アドレスの抽出方法は、抽出回路５０４と同等であるため、説明を省略する。
【００５６】
比較回路５０６は、抽出回路５０４と抽出回路５０５の抽出結果を比較し、判定結果をスピン状態検出回路４３１のＡＮＤ回路５１１に出力する。ここで、所定命令とは、ジャンプ命令である。具体的に、比較回路５０６は、抽出回路５０４と抽出回路５０５の抽出結果が同じジャンプ先アドレスであれば、比較結果としてＴＲＵＥを出力し、異なるアドレスであれば、ＦＡＬＳＥを出力する。
【００５７】
ＡＮＤ回路５１１は、比較回路５０１と比較回路５０６の論理積をＯＲ回路５１２に出力する。ＯＲ回路５１２は、制御レジスタ４２１のスピン状態設定フィールドとＡＮＤ回路５１１との論理和を制御レジスタ４２１のスピン状態フィールドとスピン状態ステータスレジスタ４２２に出力する。
【００５８】
なお、判定回路５０２は、比較回路５０１の比較結果がＴＲＵＥとなった後に、判定を行ってもよい。判定回路５０２では、キャッシュメモリ１０３の監視を行うため、処理負荷が増大するが、比較回路５０１の比較結果がＴＲＵＥとなったときに判定回路５０２を動作させることで、スピン回避機構１０４の処理効率をよくすることができる。
【００５９】
図６は、スピン判定部４０２によるスピン状態解除検出の一例を示すブロック図である。図６では、スピン判定部４０２によるスピン状態解除検出時に用いる回路の例を示している。スピン判定部４０２は、スピン状態解除回路４３２と、比較回路６０１と、判定回路６０２と、スピン状態ステータスレジスタ４２２と、ＡＮＤ回路６０３とを用いて、スピン状態の解除を検出する。また、スピン状態解除回路４３２は、ＯＲ回路６１１を含む。
【００６０】
また、スピン判定部４０２は、スピン状態解除検出のため、制御レジスタ４２１、センサＩ／Ｆ４０４、センサ閾値格納レジスタ４２３、キャッシュ状態信号５２１の入力を受ける。さらに、スピン判定部４０２は、制御レジスタ４２１、スピン状態ステータスレジスタ４２２に検出したスピン状態を出力する。
【００６１】
比較回路６０１は、センサＩ／Ｆ４０４とセンサ閾値格納レジスタ４２３とを比較し、比較結果をスピン状態解除回路４３２内のＯＲ回路６１１に出力する。具体的に、比較回路６０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値未満である場合、比較結果としてＴＲＵＥを出力する。また、比較回路６０１は、センサＩ／Ｆ４０４からのセンサ信号がセンサ閾値格納レジスタ４２３の値以上である場合、比較結果としてＦＡＬＳＥを出力する。
【００６２】
判定回路６０２は、キャッシュ状態信号５２１が、キャッシュ状態変化ありか否かを判定し、判定結果をＡＮＤ回路６０３に出力する。具体的に、判定回路６０２は、キャッシュ状態信号５２１が、キャッシュ状態変化ありを示す状態信号の場合、判定結果としてＴＲＵＥを出力し、キャッシュ状態変化なしを示す状態信号の場合、判定結果としてＦＡＬＳＥを出力する。
【００６３】
ＡＮＤ回路６０３は、判定回路６０２とスピン状態ステータスレジスタ４２２の論理積をＯＲ回路６１１に出力する。具体的には、ＡＮＤ回路６０３は、判定回路６０２からの出力信号がＴＲＵＥであり、スピン状態ステータスレジスタ４２２がスピン状態を意味するＴＲＵＥであった場合に、ＴＲＵＥをＯＲ回路６１１に出力する。ＯＲ回路６１１は、制御レジスタ４２１のスピン状態解除設定フィールドと比較回路６０１による比較結果とＡＮＤ回路６０３との論理和を制御レジスタ４２１のスピン状態フィールドとスピン状態ステータスレジスタ４２２に出力する。
【００６４】
図７は、キャッシュメモリ状態監視回路４０３の動作例を示す説明図である。キャッシュメモリ１０３は、インストラクションキャッシュ７０１とデータキャッシュ７０２を含む。スヌープ機構３０１が動作している場合、キャッシュメモリ状態監視回路４０３は、キャッシュ状態信号５２１としてキャッシュメモリ１０３の状態が変化しているという状態信号を出力する。また、スヌープ機構３０１が動作していない場合、キャッシュメモリ状態監視回路４０３は、キャッシュ状態信号５２１としてキャッシュメモリ１０３の状態が変化していないという状態信号を出力する。
【００６５】
さらに、キャッシュメモリ１０３の状態が変化していない場合、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１から発行された命令を取得し、発行命令バッファ４０５に格納する。
【００６６】
続けて、ジャンプ命令が発行される場合のキャッシュメモリ状態監視回路４０３の動作について図７を用いて説明する。ループ１回目におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１に命令がないため、命令をメモリ３０２から読み出して実行する。一方で、ＣＰＵ＃０は、読み出した命令をインストラクションキャッシュ７０１に格納する。
【００６７】
ここで、０ｘ００１２番地から０ｘ００００番地までの短い区間であるため、ＣＰＵ＃０がアドレス：０ｘ００１２のジャンプ命令を実行する場合、２回目以降はインストラクションキャッシュ７０１にヒットする場合を想定する。
【００６８】
ループ２回目以降におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１内でヒットした命令を取得し実行する。このとき、キャッシュメモリ１０３の状態が変化していないため、キャッシュメモリ状態監視回路４０３は、プログラムカウンタ３１１が指すアドレス：０ｘ００１２から、該当の命令"Ｊｕｍｐ  ０ｘ００００"を取得する。取得後、キャッシュメモリ状態監視回路４０３は、発行命令バッファ４０５にジャンプ命令として"Ｊｕｍｐ"とジャンプ先アドレス"０ｘ００００"を格納する。
【００６９】
ループ３回目以降におけるアドレス：０ｘ００１２のジャンプ命令を実行する場合、ＣＰＵ＃０は、インストラクションキャッシュ７０１内でヒットした命令を取得し実行する。また、３回目以降において、抽出回路５０４がジャンプ先アドレスを抽出して比較回路５０６に出力し、比較回路５０６が、抽出回路５０４と抽出回路５０５を比較した結果、ＴＲＵＥを出力する。
【００７０】
図４〜図７で示したハードウェア、動作によって、スピン回避機構１０４は、スピン状態の検出と、スピン状態の検出の解除を行う。続けて、図８、図９にて、スピン状態となった場合の電力特性と、スピン状態の解消のタイミングの判定方法について説明する。
【００７１】
図８は、スピン状態の消費電力状態の一例を示す説明図である。符号８０１で示す説明図では、マルチコアプロセッサシステム１００にてスピン状態となるスレッドの例を示しており、符号８０２で示す説明図では、電力特性の式を示しており、グラフ８０３は、スピン状態におけるＣＰＵの消費電力の特性を示している。
【００７２】
符号８０１の説明図に示すマルチコアプロセッサシステム１００は、並列アプリに属するスレッド１およびスレッド２と、他のアプリに属するスレッド３、スレッド４を実行している。ＣＰＵ＃０はスレッド１とスレッド３を実行しており、ＣＰＵ＃１はスレッド２とスレッド４を実行している。このとき、スレッド２の指示によって、スレッド１が排他制御処理を実行することを想定する。
【００７３】
スレッド１による排他制御処理は、フラグの監視による状態遷移待ちを実行することを想定する。このとき、スレッド１は、フラグ１を読み出し、フラグが条件に当てはまったか否かを判断し、条件に当てはまらない場合、再びフラグ１を読み出す。このような動作を行う場合、ＣＰＵは、Ｌｏａｄ、Ｃｏｍｐａｒｅ、Ｊｕｍｐといった命令を実行し続けることになる。各命令は、キャッシュメモリ１０３に記憶されているため命令のフェッチ時間が最小となり、ＣＰＵの演算ユニットが動作し続けるため、ＣＰＵは、スピン状態に陥る。ＣＰＵは、膨大な演算を最高の効率で高速に実行しているかのような振る舞いとなるため、消費電力が最大の状態に陥ってしまう。
【００７４】
符号８０２で示す説明図では、スピン状態の電力特性の式を示している。ＣＰＵにて、Ｎ個のスレッドが動作中に、１つのスレッドがスピン状態であると、ＣＰＵがスピン状態となる確率は、１／Ｎとなる。単位時間当たりのＣＰＵがスピン状態になる時間は、１／Ｎ［秒］となる。続けて、スピン状態における電力特性がｐ（ｔ）である場合、ＣＰＵが消費する消費エネルギーは、下記（１）式となる。
【００７５】
消費エネルギー＝∫1/Nｐ（ｔ）ｄｔ［Ｊ／秒］  …（１）
【００７６】
なお、（１）式は、低周波ＣＰＵや、命令リードレイテンシの長いチップでは、値が小さくなる。逆に、演算列が長いソフトウェアによる処理を実行する場合、（１）の値が大きくなる場合がある。
【００７７】
グラフ８０３は、ＣＰＵの消費電力の特性を示している。グラフ８０３の横軸は時刻を示しており、縦軸は電力を示している。電力特性８０４は、ＣＰＵの演算命令ユニット動作時の電力特性を示しており、電力特性８０５は、ＣＰＵのＪｕｍｐ／Ｃｏｍｐａｒｅ命令発行によるスピン状態の電力特性を示している。電力特性８０４は、ほぼ一定となる。理由として、演算命令はメモリのロードストアなど、レイテンシのかかる処理と前後するため、常にＣＰＵ内に電気が流れているわけではなく、一つの演算処理が完結する間に、励起とスタンバイを繰り返すためである。したがって、単発の消費電力が高くても、連続実行しても、加速的に電力が上昇することがない。
【００７８】
電力特性８０５は、初めは電力特性８０４より低い電力であるが、加速的に消費電力を増加する。理由として、初めの段階では、Ｊｕｍｐ／Ｃｏｍｐａｒｅ命令は、プログラムカウンタ３１１の書き換えや、論理比較を行うといった処理のみであるため、電力特性８０５は、電力特性８０４より低い電力となるためである。
【００７９】
しかし、時間が経過すると、ジャンプ命令は単発の命令で１つずつ動作可能であるため、ＣＰＵは、与えられたクロック周期で、レイテンシがかかることなく、常に動作することになる。その結果、ＣＰＵは高密度な命令実行がなされ、励起状態が続き、温度が上昇し、温度が上昇することで、リーク電流による消費電力が上昇することになる。
【００８０】
なお、具体的な電力特性８０４、電力特性８０５の測定方法について、電力特性８０４については、ＣＰＵが単純計算を行うプログラムを動作し、この時の電力値を測定すればよい。あるいは、設計者がプロセッサの設計書、データシートから取得してもよい。電力特性８０５については、０ｘ００００番地の命令コードとして、Ｊｕｍｐ  ０ｘ００００というコードを実行し、電力値を測定すればよい。
【００８１】
このように、スピン状態が始まって直後の段階では電力消費が低い状態であるためスピン状態を解消せず、電力特性８０５による消費エネルギーが、電力特性８０４による消費エネルギーを超えた場合にスピン状態を解消することで、消費電力を抑えることができる。具体的には、ＣＰＵは、下記（２）式による解となる時間Ｔにてスピン状態を解消することで、電力効率を向上させることができる。
【００８２】
∫ｔｐ（ｔ）ｄｔ＝Ｐｃ・ｔ  …（２）
【００８３】
なお、Ｐｃが演算命令ユニット動作時の消費電力であり、Ｐｃ・ｔは電力特性８０４の消費エネルギーとなる。たとえば、Ｐｃ＝４０［ｍＷ］となる。なお、Ｐｃの値が、センサ閾値格納レジスタ４２３に格納される。
【００８４】
たとえば、本実施の形態におけるＣＰＵの電力特性ｐ（ｔ）が、下記（３）式で算出できる場合を想定する。
【００８５】
ｐ（ｔ）＝ｔ＾２＋３０［ｍＷ］  …（３）
【００８６】
ＣＰＵは、（２）式に（３）式を代入し、Ｔ＝５．５［ｍ秒］を得ることができる。したがって、ＣＰＵは、スピン状態が５．５［ｍ秒］経過した際に、スピン状態を解消することで、電力効率を向上させることができる。設計者は、（２）式を解いたのち、スピン回避機構ドライバ４１２の設定項目となる所定時間として設定しておく。
【００８７】
図９は、スピン状態の解消のタイミングの判定方法例を示す説明図である。図８にて、スピン状態が（２）式の解である所定時間以上あった場合に、スピン状態を解消することで、電力効率を向上させることができることを説明した。図９ではさらに、スピン状態が繰り返し発生する状態について説明する。
【００８８】
図９で示すＣＰＵ＃０は、スピン状態であるスレッド５と、通常スレッド処理であるスレッド６と、を一定周期でディスパッチしながら実行している。このような動作を行っている場合、制御レジスタ４２１からの割込信号は、一定周期のパルスとなって通知される。なお、割込信号がＨＩＧＨレベルの時、スピン状態であり、ＬＯＷレベルの時、非スピン状態である場合を想定する。
【００８９】
たとえば、ＣＰＵ＃０は、割込信号がＨＩＧＨレベルである時間となる励起幅が、所定時間を超え、さらに、所定回数繰り返した場合に、スピン状態を解消してもよい。これにより、ＣＰＵ＃０は、一過性の温度上昇や、パルス１回となる単発のスピン状態に対しては、スピン状態を解消せずに済むことができる。なお、所定回数の決定方法は、ＣＰＵの電力特性や、プロファイル結果等をもとに、設計者が予め決定しておく。図９の例では、２回のパルスが発生している。１回のパルスの励起幅が所定時間以上であり、所定回数が２回である場合、ＣＰＵ＃０は、スピン状態を解消する。
【００９０】
次に、図１０、図１１で示すシーケンス図は、スピン判定部４０２でのスピン状態検出判定とスピン状態解除判定のシーケンスを示す。図１０、図１１では、スピン回避機構１０４＃０が行うことを想定し、接尾記号"＃０"を省略する。
【００９１】
図１０は、スピン状態検出判定の一例を示すシーケンス図である。センサ閾値格納レジスタ４２３は、比較回路５０１に閾値を出力する（ステップＳ１００１）。また、センサＩ／Ｆ４０４は、比較回路５０１にセンサ信号を出力する（ステップＳ１００２）。比較回路５０１は、センサ信号が示す電力量が閾値以上となった場合、ＡＮＤ回路５１１に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００３）。また、判定回路５０２は、プログラムが実行する命令がジャンプ命令であると判定した場合、ＡＮＤ回路５１１に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００４）。
【００９２】
ＡＮＤ回路５１１は、比較回路５０１と比較回路５０６の論理積をＯＲ回路５１２に出力する（ステップＳ１００５）。たとえば、比較回路５０１がステップＳ１００３を実行しており、判定回路５０２がステップＳ１００４を実行していた場合、ＡＮＤ回路５１１は、ＯＲ回路５１２に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する。ＯＲ回路５１２は、ステップＳ１００５が実行された場合、制御レジスタ４２１のスピン状態フィールドに対する出力信号を、ＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１００６）。
【００９３】
図１１は、スピン状態解除判定の一例を示すシーケンス図である。センサ閾値格納レジスタ４２３は、比較回路６０１に閾値を出力する（ステップＳ１１０１）。また、センサＩ／Ｆ４０４は、比較回路６０１にセンサ信号を出力する（ステップＳ１１０２）。比較回路６０１は、センサ信号が示す電力量が閾値未満となった場合、ＯＲ回路６１１に対する出力信号を、ＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１１０３）。
【００９４】
判定回路６０２は、キャッシュ状態が変化ありの場合、ＡＮＤ回路６０３に対する出力信号をＦＡＬＳＥからＴＲＵＥに変更する（ステップＳ１１０４）。また、スピン状態ステータスレジスタ４２２は、スピン状態をＡＮＤ回路６０３に出力する（ステップＳ１１０５）。具体的に、スピン状態ステータスレジスタ４２２は、スピン状態であればＴＲＵＥをＡＮＤ回路６０３に出力し、非スピン状態であればＦＡＬＳＥをＡＮＤ回路６０３に出力する。
【００９５】
ＡＮＤ回路６０３は、判定回路６０２とスピン状態ステータスレジスタ４２２の論理積をＯＲ回路６１１に出力する（ステップＳ１１０６）。たとえば、判定回路６０２がステップＳ１１０４を実行しており、スピン状態ステータスレジスタ４２２がステップＳ１１０５を実行していた場合、ＡＮＤ回路６０３は、ＯＲ回路６１１に対する信号をＦＡＬＳＥからＴＲＵＥに出力する。
【００９６】
ＯＲ回路６１１は、比較回路６０１とＡＮＤ回路６０３の論理和を制御レジスタ４２１のスピン状態フィールドに出力する（ステップＳ１１０７）。たとえば、比較回路６０１がステップＳ１１０３を実行しているか、またはＡＮＤ回路６０３がステップＳ１１０６を実行している場合、ＯＲ回路６１１は、制御レジスタ４２１のスピン状態フィールドに対する出力信号をＦＡＬＳＥからＴＲＵＥに出力する。
【００９７】
次に、図１２、図１３では、ＣＰＵ＃０で実行するフローチャートを示す。図１２では、ＣＰＵ＃０がスピン回避機構ドライバ４１２＃０の機能によってスピン状態周期性判断処理を実行し、図１３では、ＣＰＵ＃０がディスパッチスケジューラ３２４＃０の機能によってスレッド退避復帰処理を実行する。図１２、図１３では、ＣＰＵ＃０が行うことを想定し、接尾記号"＃０"を省略する。
【００９８】
図１２は、スピン回避機構ドライバ４１２によるスピン状態周期性判断処理の一例を示すフローチャートである。スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性なしに設定する（ステップＳ１２０１）。設定後、スピン回避機構ドライバ４１２は、反復回数を０に設定し（ステップＳ１２０２）、制御レジスタ４２１からの割込信号をディスパッチタイマを参照してサンプリングする（ステップＳ１２０３）。具体的に、スピン回避機構ドライバ４１２は、ディスパッチタイマが示す時間の数十回分、割込信号を監視し続け、割込信号の波形を生成する。
【００９９】
サンプリング後、スピン回避機構ドライバ４１２は、励起幅が所定時間以上であるか否かを判断する（ステップＳ１２０４）。励起幅が所定時間以上である場合（ステップＳ１２０４：Ｙｅｓ）、スピン回避機構ドライバ４１２は、反復回数をインクリメントし（ステップＳ１２０５）、反復回数が所定回数以上であるか否かを判断する（ステップＳ１２０６）。反復回数が所定回数未満である場合（ステップＳ１２０６：Ｎｏ）、スピン回避機構ドライバ４１２は、ステップＳ１２０３の処理に移行する。
【０１００】
反復回数が所定回数以上である場合（ステップＳ１２０６：Ｙｅｓ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグが周期性ありの状態か否かを判断する（ステップＳ１２０７）。周期性ありの状態である場合（ステップＳ１２０７：Ｙｅｓ）、スピン回避機構ドライバ４１２は、ステップＳ１２０３の処理に移行する。周期性なしの状態である場合（ステップＳ１２０７：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性ありに設定する（ステップＳ１２０８）。設定後、スピン回避機構ドライバ４１２は、周期性ありをディスパッチスケジューラ３２４に通知し（ステップＳ１２０９）、ステップＳ１２０３の処理に移行する。
【０１０１】
励起幅が所定時間未満である場合（ステップＳ１２０４：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグが周期性なしの状態か否かを判断する（ステップＳ１２１０）。周期性なしの状態である場合（ステップＳ１２１０：Ｙｅｓ）、スピン回避機構ドライバ４１２は、ステップＳ１２０２の処理に移行する。周期性ありの状態である場合（ステップＳ１２１０：Ｎｏ）、スピン回避機構ドライバ４１２は、スピン状態周期性フラグを周期性なしに設定する（ステップＳ１２１１）。設定後、スピン回避機構ドライバ４１２は、周期性なしをディスパッチスケジューラ３２４に通知し（ステップＳ１２１２）、ステップＳ１２０２の処理に移行する。
【０１０２】
これにより、スピン回避機構ドライバ４１２は、励起幅が所定時間以上あり、さらに、スピン状態と非スピン状態が所定回数繰り返されたときに、周期性ありと判断することができる。
【０１０３】
図１３は、ディスパッチスケジューラ３２４によるスレッド退避復帰処理の一例を示すフローチャートである。ディスパッチスケジューラ３２４は、スピン回避機構ドライバ４１２から通知を受け付けたか否かを判断する（ステップＳ１３０１）。通知を受け付けていない場合（ステップＳ１３０１：通知なし）、ディスパッチスケジューラ３２４は、一定時間経過後、ステップＳ１３０１の処理を再び実行する。
【０１０４】
周期性ありの通知を受け付けた場合（ステップＳ１３０１：周期性あり）、ディスパッチスケジューラ３２４は、実行中のスレッド以外に他スレッドが割り当てられているか否かを判断する（ステップＳ１３０２）。他スレッドが割り当てられている場合（ステップＳ１３０２：Ｙｅｓ）、ディスパッチスケジューラ３２４は、ディスパッチループから実行中のスレッドを退避し（ステップＳ１３０３）、ステップＳ１３０１の処理に移行する。
【０１０５】
他スレッドが割り当てられていない場合（ステップＳ１３０２：Ｎｏ）、ディスパッチスケジューラ３２４は、実行中のスレッドを退避しアイドルスレッドと入れ替える（ステップＳ１３０４）。入替後、ディスパッチスケジューラ３２４は、ＰＭＵ３０４にＣＰＵへのクロックの供給を停止するように通知し（ステップＳ１３０５）、ステップＳ１３０１の処理に移行する。
【０１０６】
周期性なしの通知を受け付けた場合（ステップＳ１３０１：周期性なし）、ディスパッチスケジューラ３２４は、退避していたスレッドをディスパッチループに復帰し（ステップＳ１３０６）、ステップＳ１３０１の処理に移行する。なお、退避していたスレッドが複数存在する場合、ディスパッチスケジューラ３２４は、退避していた全てのスレッドをディスパッチループに復帰する。
【０１０７】
これにより、ディスパッチスケジューラ３２４は、スピン状態となる原因となっていたスレッドを退避することができる。また、ディスパッチスケジューラ３２４は、非スピン状態となった場合、スレッドを復帰することで、退避されていたスレッドを続行することができる。
【０１０８】
また、上述した各フローチャートで示したステップは、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、フラッシュＲＯＭ２０４、フラッシュＲＯＭ２０６などの記憶装置に記憶された検索プログラムをＣＰＵｓ２０１に実行させた処理である。また、実行させた実行結果は、その都度、記憶装置に書き込まれ、他の処理からの読込要求に応じて読み出される。
【０１０９】
以上説明したように、システム、および検出方法によれば、電力を検出するセンサからのセンサ信号とキャッシュメモリの状態を監視するキャッシュメモリ状態監視回路からの状態信号とによって、プログラムのスピン状態を検出する検出回路を含む。これにより、システムは、スピン状態の検出条件としてＣＰＵの電力とキャッシュメモリの状態変化といった、スピン状態におけるシステムの状態を用いることで、排他制御用の命令を用いずに実装されたプログラムによって発生したスピン状態を検出できる。
【０１１０】
なお、スピン状態の検出には、センサからの信号とキャッシュメモリ状態監視回路からの状態信号の組合せであることが好ましい。理由として、センサからの信号のみでスピン状態を検出する場合、システムを有する携帯端末がユーザのポケットに入れられると、熱がこもってしまい、非スピン状態にも関わらず消費電力が上昇することがあるためである。また、キャッシュメモリの状態信号のみでスピン状態を検出する場合については、インストラクションキャッシュを書き換えないように実装されたプログラムが実行されていれば、非スピン状態であっても状態が変化しない、という状態になるためである。
【０１１１】
また、本実施の形態にかかるシステムは、スピン状態の検出、スピン状態解除の検出を行う際にメモリアクセスを行わないため、従来技術では検出できないスピン状態を、ほぼ無負荷で検出することができる。
【０１１２】
また、システムは、スピン状態が検出された場合にプログラムのスピン状態を解除する解除回路を含んでもよい。これにより、システムは、一旦スピン状態となっても非スピン状態に遷移することができる。
【０１１３】
また、システムは、センサ信号と閾値とを比較し、比較結果を検出回路に出力してもよい。これにより、スピン状態となりＣＰＵの演算ユニットが動作し続けて消費電力、温度が上昇した可能性があるとして、システムは、スピン状態となった可能性があることを検出回路に出力することができる。
【０１１４】
また、システムは、プログラムが実行する命令が所定命令であるかを判定し、判定結果を検出回路に出力してもよい。なお、所定命令は、ジャンプ命令であってもよいし、プログラムカウンタにジャンプテーブルのアドレスをロードする命令であってもよい。これにより、同じジャンプ命令が実行され続けていることが検出されたため、システムは、スピン状態となった可能性があることを検出回路に出力することができる。
【０１１５】
また、システムは、検出回路の検出結果に基づいてＣＰＵが実行するプログラムを制御するための情報を制御レジスタに保持してもよい。これにより、ＣＰＵは制御レジスタを参照することで、スピン状態か非スピン状態かを取得できる。
【０１１６】
また、システムは、センサ信号が閾値以上であり、キャッシュメモリの状態に変化がない場合、スピン状態を検出してもよい。これにより、システムは、スピン状態によって消費電力が加速するところまでを検出し、さらに、スピン状態によってキャッシュメモリに変更がなく同じ命令を実行し続けていることを検出したため、スピン状態であると特定することができる。
【０１１７】
また、システムは、キャッシュメモリの状態に変化がなく、プログラムの命令が所定命令である場合、スピン状態を検出してもよい。これにより、システムは、所定命令であるジャンプ命令が繰り返し実行されていることを検出したため、スピン状態であると特定することができる。
【０１１８】
また、システムは、センサ信号が閾値未満であるとき、または、スピン状態であるときにキャッシュメモリの状態に変化があった場合、非スピン状態を検出してもよい。これにより、システムは、スピン状態の検出条件の少なくともいずれか一方が解消されたこととなるため、非スピン状態であると特定することができる。
【０１１９】
また、システムは、スピン状態が検出される場合に、スピン状態に対応する処理を所定の処理に置き換えてスピン状態を解除してもよい。なお、所定の処理とは、アイドルスレッドである。これにより、システムは、スピン状態となり、消費電力が加速的に上昇してしまっている状態を解除でき、電力効率を向上させることができる。
【０１２０】
また、システムは、スピン状態である時間が所定時間以上である場合に、スピン状態に対応する処理の割当を停止してもよい。たとえば、スピン状態となっても、すぐにフラグ条件が満たされるスレッドも存在しており、このようなスレッドを退避してしまうと、本来すぐにスピン状態が解除すべきタイミングから処理の退避および復帰の分だけ処理性能が劣化することになる。また、スピン状態となった直後の消費電力は、一般的な演算ユニットより低いため、スピン状態となった直後に処理の割当を停止してしまうと、消費電力が増加してしまう。したがって、システムは、予め設定されている所定時間以上スピン状態が続いた場合に、処理の割当を停止することで、処理性能が維持でき、かつ、電力効率も向上させることができる。
【０１２１】
また、システムは、スピン状態である時間が所定時間以上であり、かつ、スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、スピン状態に対応する処理の割当を停止してもよい。たとえば、反復した回数が少ない状態で処理の割当を停止すると、システムは、電力の過剰供給状態を削減することができるが、処理の割当の停止、また、割当の復帰の回数が増大するため、停止、復帰にかかるオーバーヘッドが大きくなる。したがって、システムは、予め設定されている所定回数以上であるときに処理の割当を停止することで、停止、復帰にかかるオーバーヘッドを抑えつつ、電力効率を向上させることができる。
【０１２２】
たとえば、従来例にかかるシステムが、ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）パケットバッファのＩ／Ｏ排他ロックを行う場合、スピン状態の反復回数は、数千回から数百万回となる。そこで、本実施の形態にかかるシステムが、所定回数を数十回として、所定回数以上スピン状態と非スピン状態を反復した場合、スピン状態に対応する処理の割当を停止することで、従来例によるシステムに比べて、電力効率を向上することができる。
【０１２３】
なお、本実施の形態で説明した検出方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本検出プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本検出プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１２４】
また、本実施の形態で説明したスピン回避機構１０４は、スタンダードセルやストラクチャードＡＳＩＣ（Ａｐｐｌｉｃａｔｉｏｎ  Ｓｐｅｃｉｆｉｃ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）などの特定用途向けＩＣ（以下、単に「ＡＳＩＣ」と称す。）やＦＰＧＡなどのＰＬＤ（Ｐｒｏｇｒａｍｍａｂｌｅ  Ｌｏｇｉｃ  Ｄｅｖｉｃｅ）によっても実現することができる。具体的には、たとえば、上述したスピン回避機構１０４の機能（記憶部４０１〜発行命令バッファ４０５）をＨＤＬ記述によって機能定義し、そのＨＤＬ記述を論理合成してＡＳＩＣやＰＬＤに与えることにより、スピン回避機構１０４を製造することができる。
【０１２５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１２６】
（付記１）ＣＰＵと、
前記ＣＰＵの電力を検出するセンサと、
キャッシュメモリの状態を監視するキャッシュメモリ状態監視回路と、
前記センサからのセンサ信号と前記キャッシュメモリ状態監視回路からの状態信号とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出する検出回路と、
を含むことを特徴とするシステム。
【０１２７】
（付記２）前記スピン状態が検出されたときに前記プログラムのスピン状態を解除する解除回路を含むこと
を特徴とする付記１に記載のシステム。
【０１２８】
（付記３）前記センサ信号と閾値とを比較し、比較結果を前記検出回路に出力する比較回路を含むこと
を特徴とする付記１または付記２に記載のシステム。
【０１２９】
（付記４）前記プログラムが実行する命令が所定命令であるか否かを判定し、判定結果を前記検出回路に出力する判定回路を含むこと
を特徴とする付記１乃至付記３の何れか一に記載のシステム。
【０１３０】
（付記５）前記所定命令は、ジャンプ命令であること
を特徴とする付記４に記載のシステム。
【０１３１】
（付記６）前記検出回路の検出結果に基づいて前記プログラムを制御するための情報を格納する制御レジスタを含むこと
を特徴とする付記１乃至付記５の何れか一に記載のシステム。
【０１３２】
（付記７）ＣＰＵと、
前記ＣＰＵの電力を検出してセンサ信号を出力するセンサと、
キャッシュメモリの状態を監視して状態信号を出力するキャッシュメモリ状態監視回路と、
を含み、
前記センサ信号が閾値以上となる場合であって前記状態信号が前記キャッシュメモリの状態に変化がないことを示すときに、前記ＣＰＵが実行するプログラムのスピン状態が検出されること
を特徴とするシステム。
【０１３３】
（付記８）前記状態信号が前記キャッシュメモリの状態に変化がないことを示す場合であって、実行する前記プログラムの命令が所定命令であるとき、前記スピン状態が検出されること
を特徴とする付記７に記載のシステム。
【０１３４】
（付記９）前記センサ信号が前記閾値未満であるとき、または、前記スピン状態である場合に前記状態信号が前記キャッシュメモリの状態に変化があることを示すときに、非スピン状態が検出されること
を特徴とする付記７または付記８に記載のシステム。
【０１３５】
（付記１０）ＣＰＵの電力を検出し、
キャッシュメモリの状態を監視し、
検出された電力と前記キャッシュメモリの状態とに基づいて前記ＣＰＵが実行するプログラムのスピン状態を検出すること
を特徴とする検出方法。
【０１３６】
（付記１１）前記電力が閾値以上であるか否かを検出し、
前記電力が前記閾値以上であるときは前記スピン状態を検出し、
前記電力が前記閾値未満であるときは前記スピン状態の検出を行わないこと
を特徴とする付記１０に記載の検出方法。
【０１３７】
（付記１２）前記スピン状態が検出される場合に、前記スピン状態に対応する処理を所定の処理に置き換えて前記スピン状態を解除すること
を特徴とする付記１０または付記１１に記載の検出方法。
【０１３８】
（付記１３）前記スピン状態である時間が所定時間以上である場合、前記スピン状態に対応する処理の割当を停止させること
を特徴とする付記１２に記載の検出方法。
【０１３９】
（付記１４）前記割当を停止させる処理は、
さらに、前記スピン状態と非スピン状態とを反復した回数が所定回数以上である場合、前記スピン状態に対応する処理の割当を停止させること
を特徴とする付記１３に記載の検出方法。
【符号の説明】
【０１４０】
１０３  キャッシュメモリ
１０４  スピン回避機構
３１１  プログラムカウンタ
４０４  センサＩ／Ｆ
４２１  制御レジスタ
４２２  スピン状態ステータスレジスタ
４２３  センサ閾値格納レジスタ
４３１  スピン状態検出回路
４３２  スピン状態解除回路
５０１  比較回路
５０２  判定回路
５２１  キャッシュ状態信号
６０１  比較回路
６０２  判定回路
【国際調査報告】
2012147168.tif 000016
2012147168.tif 000017
2012147168.tif 000018
2012147168.tif 000019