(57)【特許請求の範囲】
【請求項１】
2又は3以上の実行環境によって共有されるリソースを管理するためのリソース電力マネージャ（RPM）プロセッサを含むマルチコアコンピューティングデバイスにおける電力を節約するための方法であって、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
コア実行スレッドとコア実行アイドルスレッドとで共有される変数にアクセスすることによってどのコアがスリープ状態であるかを判断するステップであって、前記共有される変数は、アイドルスレッドの進入関数の実行に伴って各コアによって増分されるとともに、前記アイドルスレッドの退出関数の実行に伴って各コアによって減分される、ステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用していつシステム低電力構成に進入するかを判断するステップと
を含む方法。
【請求項２】
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作する、請求項1に記載の方法。
【請求項３】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成される、請求項1に記載の方法。
【請求項４】
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと
をさらに含む、請求項1に記載の方法。
【請求項５】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップは、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含む、請求項4に記載の方法。
【請求項６】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む、請求項4に記載の方法。
【請求項７】
自動無効化のためにリソースをマークするステップと、
前記RPMプロセッサにおいて、前記マークされたリソースに関連するスリープセットを無効化するステップと
をさらに含む、請求項1に記載の方法。
【請求項８】
先行トランザクションを無効化して、前記先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップ
をさらに含む、請求項1に記載の方法。
【請求項９】
前記マルチコアコンピューティングデバイスにおける各コアが、そのコアの前記電力状態を制御し、前記コアがその低電力モードに進入するときに前記RPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有し、前記方法は、
RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、
前記スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、
各コアの前記SPMハードウェアブロックが前記RPMとのハンドシェイクを実行しても、前記RPMプロセッサでスリープセットを適用しないステップと
をさらに含む、請求項1に記載の方法。
【請求項１０】
RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、
RPM確認応答割込みを待つ間に前記マルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、
前記第0のコアでスリープモードについて解き、前記第0のコアが進入するグローバル低電力モードを選択するステップと、
前記第0のコアで前記グローバル低電力モードに進入するステップと、
前記第0のコアで前記RPM確認応答割込みを受信するステップと、
前記スピンロックを解放するステップと
をさらに含む、請求項1に記載の方法。
【請求項１１】
第0のコアでRPMメッセージの送信を開始するステップと、
RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、
前記第1のコアでスリープセットの送信を開始するステップと、
前記第1のコアから前記RPMドライバに対するスリープセットトランザクション要求を受信し、前記オペレーティングシステムロックが保持されているかどうかをチェックして判断するステップと、
前記オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、前記第1のコアに割込み信号を送るステップと
をさらに含む、請求項1に記載の方法。
【請求項１２】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含む、請求項1に記載の方法。
【請求項１３】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップは、RPM開始動作中およびRPM停止動作中に前記スピンロックを保持するステップを含む、請求項12に記載の方法。
【請求項１４】
前記マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込み、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップは、前記スリープセットにリソースを追加するときに前記スピンロックを解放するステップを含む、請求項12に記載の方法。
【請求項１５】
メモリと、
前記メモリに接続された1又は2以上のプロセッサと、を含み、
前記1又は2以上のプロセッサは、2又は3以上の実行環境によって共有されるリソースを管理するためのリソース電力マネージャ（RPM）プロセッサを含むとともに、前記1又は2以上のプロセッサには、マルチコアコンピューティングデバイスが動作を実行するようにプロセッサ実行可能な命令が設定され、
前記動作は、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
コア実行スレッドとコア実行アイドルスレッドとで共有される変数にアクセスすることによってどのコアがスリープ状態であるかを判断するステップであって、前記共有される変数は、アイドルスレッドの進入関数の実行に伴って各コアによって増分されるとともに、前記アイドルスレッドの退出関数の実行に伴って各コアによって減分される、ステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用して、いつシステム低電力構成に進入するかを判断するステップと
を含む、マルチコアコンピューティングデバイス。
【請求項１６】
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するような動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項１７】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項１８】
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと
をさらに含む動作を前記マルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項１９】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって前記選択された低電力リソースモードの組合せに進入するステップが、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含むような動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項18に記載のマルチコアコンピューティングデバイス。
【請求項２０】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項18に記載のマルチコアコンピューティングデバイス。
【請求項２１】
自動無効化のためにリソースをマークするステップと、
前記RPMプロセッサにおいて、前記マークされたリソースに関連するスリープセットを無効化するステップと
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２２】
先行トランザクションを無効化して、前記先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップ
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２３】
前記マルチコアコンピューティングデバイスは、コアの電力状態を制御し、前記コアがその低電力モードに進入するときに前記RPMプロセッサとハンドシェイクするように構成されたサブシステム電力管理(SPM)ハードウェアブロックをさらに有し、
前記1又は2以上のプロセッサには、前記マルチコアコンピューティングデバイスが、
RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、
前記スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、
各コアの前記SPMハードウェアブロックが前記RPMとのハンドシェイクを実行しても、前記RPMプロセッサでスリープセットを適用しないステップと
をさらに含む、
動作を実行するようにプロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２４】
RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、
RPM確認応答割込みを待つ間に前記マルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、
前記第0のコアでスリープモードについて解き、前記第0のコアが進入するグローバル低電力モードを選択するステップと、
前記第0のコアで前記グローバル低電力モードに進入するステップと、
前記第0のコアで前記RPM確認応答割込みを受信するステップと、
前記スピンロックを解放するステップと
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２５】
第0のコアでRPMメッセージの送信を開始するステップと、
RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、
前記第1のコアでスリープセットの送信を開始するステップと、
前記第1のコアから前記RPMドライバに対するスリープセットトランザクション要求を受信し、前記オペレーティングシステムロックが保持されているかどうかをチェックして判断するステップと、
前記オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、前記第1のコアに割込み信号を送るステップと
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２６】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項15に記載のマルチコアコンピューティングデバイス。
【請求項２７】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、RPM開始動作中およびRPM停止動作中に前記スピンロックを保持するステップを含むような動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項26に記載のマルチコアコンピューティングデバイス。
【請求項２８】
前記マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込み、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、前記スリープセットにリソースを追加するときに前記スピンロックを解放するステップを含むような動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項26に記載のマルチコアコンピューティングデバイス。
【請求項２９】
2又は3以上の実行環境によって共有されるリソースを管理するためのリソース電力マネージャ（RPM）プロセッサを含むマルチコアコンピューティングデバイスでの電力を節約するための動作をプロセッサに実行させるように構成されるプロセッサ実行可能なソフトウェア命令を記憶した非一時的コンピュータ可読記憶媒体であって、
前記動作は、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
コア実行スレッドとコア実行アイドルスレッドとで共有される変数にアクセスすることによってどのコアがスリープ状態であるかを判断するステップであって、前記共有される変数は、アイドルスレッドの進入関数の実行に伴って各コアによって増分されるとともに、前記アイドルスレッドの退出関数の実行に伴って各コアによって減分される、ステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用して、いつシステム低電力構成に進入するかを判断するステップと
を含む、非一時的コンピュータ可読記憶媒体。
【請求項３０】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、前記マルチコアコンピューティングデバイスの各コアを、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作させるように、動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３１】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３２】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと
をさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３３】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって前記選択された低電力リソースモードの組合せに進入するステップが、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含むような動作をプロセッサに実行させるように構成される、請求項32に記載の非一時的コンピュータ可読記憶媒体。
【請求項３４】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む動作をプロセッサに実行させるように構成される請求項32に記載の非一時的コンピュータ可読記憶媒体。
【請求項３５】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、自動無効化のためにリソースをマークするステップと、
前記RPMプロセッサにおいて、前記マークされたリソースに関連するスリープセットを無効化するステップと
をさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３６】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
先行トランザクションを無効化して、前記先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップ
をさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３７】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、前記マルチコアコンピューティングデバイスにおける各コアが、そのコアの前記電力状態を制御し、前記コアがその低電力モードに進入するときに前記RPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有するように、動作をプロセッサに実行させるように構成され、
前記動作は、
RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、
前記スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、
各コアの前記SPMハードウェアブロックが前記RPMとのハンドシェイクを実行しても、前記RPMプロセッサでスリープセットを適用しないステップと
をさらに含む、
請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３８】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、
RPM確認応答割込みを待つ間に前記マルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、
前記第0のコアでスリープモードについて解き、前記第0のコアが進入するグローバル低電力モードを選択するステップと、
前記第0のコアで前記グローバル低電力モードに進入するステップと、
前記第0のコアで前記RPM確認応答割込みを受信するステップと、
前記スピンロックを解放するステップと
をさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項３９】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
第0のコアでRPMメッセージの送信を開始するステップと、
RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、
前記マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、
前記第1のコアでスリープセットの送信を開始するステップと、
前記第1のコアから前記RPMドライバに対するスリープセットトランザクション要求を受信し、前記オペレーティングシステムロックが保持されているかどうかをチェックして判断するステップと、
前記オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、前記第1のコアに割込み信号を送るステップと、
をさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項４０】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含む動作をプロセッサに実行させるように構成される、請求項29に記載の非一時的コンピュータ可読記憶媒体。
【請求項４１】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、RPM開始動作中およびRPM停止動作中に前記スピンロックを保持するステップを含むような動作をプロセッサに実行させるように構成される、請求項40に記載の非一時的コンピュータ可読記憶媒体。
【請求項４２】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
前記マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込み、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、前記スリープセットにリソースを追加するときに前記スピンロックを解放するステップを含むような動作をプロセッサに実行させるように構成される、請求項40に記載の非一時的コンピュータ可読記憶媒体。
【請求項４３】
リソース電力マネージャ(RPM)プロセッサを介してマルチコアコンピューティングデバイスの2又は3以上の実行環境によって共有されるリソースを管理する手段と、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持する手段と、
コア実行スレッドとコア実行アイドルスレッドとで共有される変数にアクセスすることによってどのコアがスリープ状態であるかを判断する手段であって、前記共有される変数は、アイドルスレッドの進入関数の実行に伴って各コアによって増分されるとともに、前記アイドルスレッドの退出関数の実行に伴って各コアによって減分される、手段と、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整する手段と、
前記メモリロケーションの前記値を使用していつシステム低電力構成に進入するかを判断する手段と、を有する
マルチコアコンピューティングデバイス。
【請求項４４】
前記マルチコアコンピューティングデバイスの各コアを、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作させる手段をさらに含む、請求項43記載のマルチコアコンピューティングデバイス。
【請求項４５】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、前記マルチコアコンピューティングデバイスを構成する手段をさらに含む、請求項43記載のマルチコアコンピューティングデバイス。
【請求項４６】
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別する手段と、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録する手段と、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択する手段と、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価する手段と、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択する手段と、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入する手段と
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項４７】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入する手段は、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行する手段を含む、請求項46に記載のマルチコアコンピューティングデバイス。
【請求項４８】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断する手段
をさらに含む、請求項46に記載のマルチコアコンピューティングデバイス。
【請求項４９】
自動無効化のためにリソースをマークする手段と、
前記RPMプロセッサにおいて、前記マークされたリソースに関連するスリープセットを無効化する手段と
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５０】
先行トランザクションを無効化して、前記先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにする手段
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５１】
前記マルチコアコンピューティングデバイスにおける各コアが、そのコアの前記電力状態を制御し、前記コアがその低電力モードに進入するときに前記RPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有し、前記マルチコアコンピューティングデバイスは、
RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出する手段と、
前記スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らない手段と、
各コアの前記SPMハードウェアブロックが前記RPMとのハンドシェイクを実行しても、前記RPMプロセッサでスリープセットを適用しない手段と
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５２】
RPMドライバにおいて、アクティブコンテキストでスピンロックを受信する手段と、
前記マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入する手段と、
RPM確認応答割込みを待つ間に前記マルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始する手段と、
前記第0のコアでスリープモードについて解き、前記第0のコアが進入するグローバル低電力モードを選択する手段と、
前記第0のコアで前記グローバル低電力モードに進入する手段と、
前記第0のコアで前記RPM確認応答割込みを受信する手段と、
前記スピンロックを解放する手段と
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５３】
第0のコアでRPMメッセージの送信を開始する手段と、
RPMドライバにおいて、オペレーティングシステムロックを受信する手段と、
前記マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成する手段と、
前記第1のコアでスリープセットの送信を開始する手段と、
前記第1のコアから前記RPMドライバに対するスリープセットトランザクション要求を受信し、前記オペレーティングシステムロックが保持されているかどうかをチェックして判断する手段と、
前記オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、前記第1のコアに割込み信号を送る手段と
をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５４】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止する手段をさらに含む、請求項43に記載のマルチコアコンピューティングデバイス。
【請求項５５】
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止する手段は、RPM開始動作中およびRPM停止動作中に前記スピンロックを保持する手段を含む、請求項54に記載のマルチコアコンピューティングデバイス。
【請求項５６】
前記マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込むように、前記コアを構成する手段をさらに含み、
スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止する手段は、前記スリープセットにリソースを追加するときに前記スピンロックを解放する手段を含む、請求項54に記載のマルチコアコンピューティングデバイス。
【請求項５７】
マルチコアコンピューティングデバイスにおける電力を節約する方法であって、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用していつシステム低電力構成に進入するかを判断するステップと、
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと、によって前記システム低電力構成に進入するステップと、
を含む方法。
【請求項５８】
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作する、請求項57に記載の方法。
【請求項５９】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成される、請求項57に記載の方法。
【請求項６０】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップは、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含む、請求項57に記載の方法。
【請求項６１】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む、請求項57に記載の方法。
【請求項６２】
マルチコアコンピューティングデバイスであって、
メモリと、
前記メモリに接続された1又は2以上のプロセッサと、を含み、
前記1又は2以上のプロセッサには、マルチコアコンピューティングデバイスが動作を実行するようにプロセッサ実行可能な命令が設定され、
前記動作は、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用して、いつシステム低電力構成に進入するかを判断するステップと
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと、によって前記システム低電力構成に進入するステップと、
を含む、マルチコアコンピューティングデバイス。
【請求項６３】
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するように、前記マルチコアコンピューティングデバイスに動作を実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項62に記載のマルチコアコンピューティングデバイス。
【請求項６４】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、前記1又は2以上のプロセッサには、前記マルチコアコンピューティングデバイスに動作を実行させるように、プロセッサ実行可能な命令が設定される、請求項62に記載のマルチコアコンピューティングデバイス。
【請求項６５】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップは、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含むように、前記1又は2以上のプロセッサには、前記マルチコアコンピューティングデバイスに動作を実行させるように、プロセッサ実行可能な命令が設定される、請求項62に記載のマルチコアコンピューティングデバイス。
【請求項６６】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む動作をマルチコアコンピューティングデバイスに実行させるように、前記1又は2以上のプロセッサには、プロセッサ実行可能な命令が設定される、請求項62に記載のマルチコアコンピューティングデバイス。
【請求項６７】
マルチコアコンピューティングデバイスにおける電力を節約するための動作をプロセッサに実行させるように構成されるプロセッサ実行可能なソフトウェア命令を記憶した非一時的コンピュータ可読記憶媒体であって、
前記動作は、
前記マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整するステップと、
前記メモリロケーションの前記値を使用していつシステム低電力構成に進入するかを判断するステップと、
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップと、によって前記システム低電力構成に進入するステップと、
を含む、
非一時的コンピュータ可読記憶媒体。
【請求項６８】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するように、前記プロセッサに動作を実行させるように構成される、
請求項67に記載の非一時的コンピュータ可読記憶媒体。
【請求項６９】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、プロセッサに動作を実行させるように構成される、請求項67に記載の非一時的コンピュータ可読記憶媒体。
【請求項７０】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入するステップは、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行するステップを含むように、プロセッサに動作を実行させるように構成される、請求項67に記載の非一時的コンピュータ可読記憶媒体。
【請求項７１】
前記記憶されているプロセッサ実行可能なソフトウェア命令は、
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップ
をさらに含む動作をプロセッサに実行させるように構成される、請求項67に記載の非一時的コンピュータ可読記憶媒体。
【請求項７２】
マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持する手段と、
メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する前記低電力リソースの各コアの使用に基づいて独立して調整する手段と、
前記メモリロケーションの前記値を使用して、いつシステム低電力構成に進入するかを判断する手段と
フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別する手段と、
コア当たりベースまたはグローバルベースでレイテンシ要件を登録する手段と、
前記登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択する手段と、
前記コアに存在するレイテンシ制限に基づいて、前記選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価する手段と、
潜在的電力節約量を最大化し、現在のコアに対する前記選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択する手段と、
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入する手段とを含む
マルチコアコンピューティングデバイス。
【請求項７３】
前記マルチコアコンピューティングデバイスの各コアが、前記マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するための手段を更に含む
請求項72に記載のマルチコアコンピューティングデバイス。
【請求項７４】
前記マルチコアコンピューティングデバイスの少なくとも1つのコアが、前記コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように、前記マルチコアコンピューティングデバイスを構成する手段を更に含む、請求項72に記載のマルチコアコンピューティングデバイス。
【請求項７５】
前記識別されたリソースの各々に対して前記選択された低電力モードの各々の進入関数を実行することによって、前記選択された低電力リソースモードの組合せに進入する手段は、共有モードに関して、前記参照カウントの値がゼロに等しいときに前記進入関数を実行する手段を含む、請求項72に記載のマルチコアコンピューティングデバイス。
【請求項７６】
現在の温度における単位時間当たり潜在的電力節約量と期待されるアイドル時間とを掛けた値に基づいて、前記現在のコアに対して期待される前記アイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断する手段を更に含む、請求項72に記載のマルチコアコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、その内容全体が参照によって本明細書に組み込まれる、2011年9月19日に出願された「Dynamic Sleep For Multicore Computing Devices」という名称の米国仮出願第61/536,207号の優先権の利益を主張する。
【背景技術】
【０００２】
セルラー通信技術およびワイヤレス通信技術は、過去数年の間に爆発的な発展をとげてきた。この発展は、より優れた通信、ハードウェア、より大きいネットワークおよびより信頼できるプロトコルによって促進されている。ワイヤレスサービスプロバイダは今では、拡大し続ける多数の特徴およびサービスを顧客に提供し、情報、リソースおよび通信への、前例のないレベルのアクセスをユーザに提供することができる。これらのサービス向上と歩調を合わせて、モバイル電子デバイス(たとえば、携帯電話、タブレット、ラップトップなど)は、これまでよりも強力かつ複雑になってきている。たとえば、モバイル電子デバイスは今では通常、単一の基板に組み込まれたシステムオンチップ(SoC)および/または複数のマイクロプロセッサコアを含み、モバイルデバイスのユーザがモバイルデバイスにおいて複雑で電力消費が多いソフトウェアアプリケーションを実行できるようになっている。その結果、モバイルデバイスの消費者にとって、モバイルデバイスのバッテリー寿命および電力消費特性が一層重要な考慮事項になっている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願第12/965,008号
【発明の概要】
【課題を解決するための手段】
【０００４】
様々な態様は、マルチコアコンピューティングデバイスにおける電力を節約する方法を含み、本方法は、マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する低電力リソースの各コアの使用に基づいて独立して調整するステップと、メモリロケーションにおける値を使用して、いつシステム低電力構成に進入するかを判断するステップとを含む。態様方法は、フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、コアに存在するレイテンシ制限に基づいて、選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、潜在的電力節約量を最大化し、現在のコアに対する選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップとをさらに含み得る。一態様では、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップは、共有モードに関して、参照カウント値がゼロに等しいときに進入関数を実行するステップを含み得る。一態様では、本方法は、現在の温度における単位時間当たり潜在的電力節約量と期待アイドル時間とを掛けた値に基づいて、現在のコアに対して期待されるアイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップをさらに含み得る。一態様では、マルチコアコンピューティングデバイスの各コアは、マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作し得る。一態様では、マルチコアコンピューティングデバイスのうちの少なくとも1つのコアは、コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアは、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成される。一態様では、マルチコアコンピューティングデバイスは、2つ以上の実行環境によって共有されるリソースを管理するためのリソース電力マネージャ(RPM)プロセッサを含み得る。一態様では、本方法は、スレッドを実行しているコアとアイドルスレッドを実行しているコアとの間で共有される変数にアクセスすることによって、どのコアがスリープ状態であるかを判断するステップであって、共有変数が、各コアによって、アイドルスレッドの進入���数の実行に伴って増分され、各コアによって、アイドルスレッドの退出関数の実行に伴って減分される、ステップを含み得る。一態様では、本方法は、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含み得る。一態様では、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップは、RPM開始動作中およびRPM停止動作中にスピンロックを保持するステップを含み得る。一態様では、マルチコアコンピューティングデバイスにおける各コアは、スリープセットの独立部分に書き込むことができ、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップは、スリープセットにリソースを追加するときにスピンロックを解放するステップを含み得る。一態様では、本方法は、自動無効化のためにリソースをマークするステップと、RPMプロセッサにおいて、マークされたリソースに関連するスリープセットを無効化するステップとを含み得る。一態様では、本方法は、先行トランザクションを無効化して、先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップを含み得る。一態様では、マルチコアコンピューティングデバイスにおける各コアは、そのコアの電力状態を制御し、コアがその低電力モードに進入するときにRPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有することができ、本方法は、RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、各コアのSPMハードウェアブロックがRPMとのハンドシェイクを実行しても、RPMプロセッサでスリープセットを適用しないステップとをさらに含み得る。一態様では、本方法は、RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、RPM確認応答割込みを待つ間にマルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、第0のコアでスリープモードについて解き、第0のコアが進入するグローバル低電力モードを選択するステップと、第0のコアでグローバル低電力モードに進入するステップと、第0のコアでRPM確認応答割込みを受信するステップと、スピンロックを解放するステップとを含み得る。一態様では、本方法は、第0のコアでRPMメッセージの送信を開始するステップと、RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、第1のコアでスリープセットの送信を開始するステップと、第1のコアからRPMドライバに対するスリープセットトランザクション要求を受信し、オペレーティングシス���ムロックが保持されているかどうかをチェックして判断するステップと、オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、第1のコアに割込み信号を送るステップとを含み得る。
【０００５】
さらなる態様は、メモリと、メモリに結合された1つまたは複数のプロセッサとを含み得るコンピューティングデバイスを含み、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する低電力リソースの各コアの使用に基づいて独立して調整するステップと、メモリロケーションにおける値を使用して、いつシステム低電力構成に進入するかを判断するステップとを含む動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成される。一態様では、1つまたは複数のプロセッサは、フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、コアに存在するレイテンシ制限に基づいて、選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、潜在的電力節約量を最大化し、現在のコアに対する選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップとをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップが、共有モードに関して、参照カウント値がゼロに等しいときに進入関数を実行するステップを含み得るような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、現在の温度における単位時間当たり潜在的電力節約量と期待アイドル時間とを掛けた値に基づいて、現在のコアに対して期待されるアイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスの各コアが、マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスのうちの少なくとも1つのコアが、コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成されるような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスが、2つ以上の実行環境によって共有されるリソースを管理するためのリソース電力マネージャ(RPM)プロセッサを含み得るような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、スレッドを実行しているコアとアイドルスレッドを実行しているコアとの間で共有される変数にアクセスすることによって、どのコアがスリープ状態であるかを判断するステップであって、共有変数が、各コアによって、アイドルスレッドの進入関数の実行に伴って増分され、各コアによって、アイドルスレッドの退出関数の実行に伴って減分される、ステップをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、スピンロックを使用して、あるコアがリソース電力マネージャ(RPM)トランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含み得る動作を実行するためのプロセッサ実行可能命令でプロセッサが構成されるような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、RPM開始動作中およびRPM停止動作中にスピンロックを保持するステップをさらに含み得るような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込み、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、スリープセットにリソースを追加するときにスピンロックを解放するステップを含み得るような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、自動無効化のためにリソースをマークするステップと、RPMプロセッサにおいて、マークされたリソースに関連するスリープセットを無効化するステップとをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、先行トランザクションを無効化して、先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、マルチコアコンピューティングデバイスにおける各コアが、そのコアの電力状態を制御し、コアがその低電力モードに進入するときにRPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有するような動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成可能であり、本方法は、RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、各コアのSPMハードウェアブロックがRPMとのハンドシェイクを実行しても、RPMプロセッサでスリープセットを適用しないステップとをさらに含み得る。一態様では、1つまたは複数のプロセッサは、RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、RPM確認応答割込みを待つ間にマルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、第0のコアでスリープモードについて解き、第0のコアが進入するグローバル低電力モードを選択するステップと、第0のコアでグローバル低電力モードに進入するステップと、第0のコアでRPM確認応答割込みを受信するステップと、スピンロックを解放するステップとをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、1つまたは複数のプロセッサは、第0のコアでRPMメッセージの送信を開始するステップと、RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、第1のコアでスリープセットの送信を開始するステップと、第1のコアからRPMドライバに対するスリープセットトランザクション要求を受信し、オペレーティングシステムロックが保持されているかどうかをチェックして判断するステップと、オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、第1のコアに割込み信号を送るステップとをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。
【０００６】
さらなる態様は、マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するステップと、メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する低電力リソースの各コアの使用に基づいて独立して調整するステップと、メモリロケーションにおける値を使用して、いつシステム低電力構成に進入するかを判断するステップとを含み得る動作をサーバに実行させるように構成されたプロセッサ実行可能命令が記憶されている非一時的プロセッサ可読記憶媒体を含む。一態様では、1つまたは複数のプロセッサは、フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するステップと、コア当たりベースまたはグローバルベースでレイテンシ要件を登録するステップと、登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するステップと、コアに存在するレイテンシ制限に基づいて、選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するステップと、潜在的電力節約量を最大化し、現在のコアに対する選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するステップと、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップとをさらに含み得る動作をコンピューティングデバイスが実行するようにプロセッサ実行可能命令で構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するステップが、共有モードに関して、参照カウント値がゼロに等しいときに進入関数を実行するステップを含み得るような動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、現在の温度における単位時間当たり潜在的電力節約量と期待アイドル時間とを掛けた値に基づいて、現在のコアに対して期待されるアイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するステップをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、マルチコアコンピューティングデバイスの各コアが、マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作するような動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、マルチコアコンピューティングデバイスのうちの少なくとも1つのコアが、コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有し、各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成されるような動作をプロセッサに実行させるように構成され得る。一態様では、マルチコアコンピューティングデバイスは、2つ以上の実行環境によって共有されるリソースを管理するためのRPMプロセッサを含み得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、スレッドを実行しているコアとアイドルスレッドを実行しているコアとの間で共有される変数にアクセスすることによって、どのコアがスリープ状態であるかを判断するステップであって、共有変数が、各コアによって、アイドルスレッドの進入関数の実行に伴って増分され、各コアによって、アイドルスレッドの退出関数の実行に伴って減分される、ステップをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するステップをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、RPM開始動作中およびRPM停止動作中にスピンロックを保持するステップをさらに含み得るような動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、マルチコアコンピューティングデバイスにおける各コアが、スリープセットの独立部分に書き込み、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するステップが、スリープセットにリソースを追加するときにスピンロックを解放するステップを含み得るような動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、自動無効化のためにリソースをマークするステップと、RPMプロセッサにおいて、マークされたリソースに関連するスリープセットを無効化するステップとをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、先行トランザクションを無効化して、先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするステップをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、マルチコアコンピューティングデバイスにおける各コアが、そのコアの電力状態を制御し、コアがその低電力モードに進入するときにRPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有するような動作をプロセッサに実行させるように構成可能であり、本方法は、RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するステップと、スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないステップと、各コアのSPMハードウェアブロックがRPMとのハンドシェイクを実行しても、RPMプロセッサでスリープセットを適用しないステップとをさらに含み得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するステップと、RPM確認応答割込みを待つ間にマルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するステップと、第0のコアでスリープモードについて解き、第0のコアが進入するグローバル低電力モードを選択するステップと、第0のコアでグローバル低電力モードに進入するステップと、第0のコアでRPM確認応答割込みを受信するステップと、スピンロックを解放するステップとをさらに含み得る動作をプロセッサに実行させるように構成され得る。一態様では、記憶されているプロセッサ実行可能ソフトウェア命令は、第0のコアでRPMメッセージの送信を開始するステップと、RPMドライバにおいて、オペレーティングシステムロックを受信するステップと、マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するステップと、第1のコアでスリープセットの送信を開始するステップと、第1のコアからRPMドライバに対するスリープセットトランザクション要求を受信し、オペレーティングシステムロックが保持されているかどうかをチェックして判断するステップと、オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、第1のコアに割込み信号を送るステップとをさらに含み得る動作をプロセッサに実行させるように構成され得る。
【０００７】
さらなる態様は、マルチコアコンピューティングデバイスの2つ以上のコアによって共有される各低電力リソースに関するメモリ内の参照カウントを維持するための手段と、メモリに記憶されている値を、各コアの電力状態およびメモリロケーションに関連する低電力リソースの各コアの使用に基づいて独立して調整するための手段と、メモリロケーションにおける値を使用して、いつシステム低電力構成に進入するかを判断するための手段とを有するコンピューティングデバイスを含む。一態様ではコンピューティングデバイスは、フラグビット設定に基づいて低電力モードに置かれ得るリソースを識別するための手段と、コア当たりベースまたはグローバルベースでレイテンシ要件を登録するための手段と、登録されたレイテンシ要件から最も厳しいレイテンシ要件を選択するための手段と、コアに存在するレイテンシ制限に基づいて、選択された最も厳しいレイテンシ耐性を上回る複合レイテンシ要件を有するあらゆる低電力リソースモードまたは低電力リソースモードのあらゆる組合せを除去するために、低電力モードに置かれ得る各リソースに関するコンピューティングデバイス低電力モードについて評価するための手段と、潜在的電力節約量を最大化し、現在のコアに対する選択された最悪状況レイテンシ要件以下である総合レイテンシ要件を有する低電力リソースモードの組合せを選択するための手段と、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって、選択された低電力リソースモードの組合せに進入するための手段とを含み得る。一態様では、コンピューティングデバイスは、共有モードに関して参照カウント値がゼロに等しいときに進入関数を実行するための手段を含み得る、識別されたリソースの各々に対して選択された低電力モードの各々の進入関数を実行することによって選択された低電力リソースモードの組合せに進入するための手段を含み得る。一態様では、コンピューティングデバイスは、現在の温度における単位時間当たり潜在的電力節約量と期待アイドル時間とを掛けた値に基づいて、現在のコアに対して期待されるアイドル時間における評価された各低電力リソースモードの潜在的電力節約量を判断するための手段を含み得る。一態様では、コンピューティングデバイスは、マルチコアコンピューティングデバイスの各コアを、マルチコアコンピューティングデバイスにおける他のコアのうちの1つまたは複数のオペレーティングシステムとは異なるオペレーティングシステムの下で動作させるための手段を含み得る。一態様では、コンピューティングデバイスは、マルチコアコンピューティングデバイスのうちの少なくとも1つのコアが、コアを少なくとも1つの他のコアの動作に結び付ける少なくとも1つのリソースを共有するような、また各コアが、他のコアの各々とは関係なく低電力モードに進入し、低電力モードから退出するように構成されるようなコンピューティングデバイスを構成するための手段を含み得る。一態様では、コンピューティングデバイスは、2つ以上の実行環境によって共有されるリソースを管理するためのRPMプロセッサをマルチコアコンピューティングデバイスに含めるための手段を含み得る。一態様では、コンピューティングデバイスは、スレッドを実行しているコアとアイドルスレッドを実行しているコアとの間で共有される変数にアクセスすることによって、どのコアがスリープ状態であるかを判断するための手段であって、共有変数が、各コアによって、アイドルスレッドの進入関数の実行に伴って増分され、各コアによって、アイドルスレッドの退出関数の実行に伴って減分される、手段を含み得る。一態様では、コンピューティングデバイスは、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアが別のRPMトランザクションを送っている間は防止するための手段を含み得る。一態様では、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するための手段は、RPM開始動作中およびRPM停止動作中にスピンロックを保持するための手段をさらに含み得る。一態様では、マルチコアコンピューティングデバイスにおける各コアは、スリープセットの独立部分に書き込み、スピンロックを使用して、あるコアがRPMトランザクションを開始することを、別のコアがRPMトランザクションを送っている間は防止するための手段は、スリープセットにリソースを追加するときにスピンロックを解放するための手段を含み得る。一態様では、コンピューティングデバイスは、自動無効化のためにリソースをマークするための手段と、RPMプロセッサにおいて、マークされたリソースに関連するスリープセットを無効化するための手段とを含み得る。一態様では、コンピューティングデバイスは、先行トランザクションを無効化して、先行トランザクションからのリソースが望ましくない形でそれらのスリープセットに進入しないようにするための手段を含み得る。一態様では、マルチコアコンピューティングデバイスにおける各コアは、そのコアの電力状態を制御し、コアがその低電力モードに進入するときにRPMプロセッサとハンドシェイクするサブシステム電力管理(SPM)ハードウェアブロックを有することができ、デバイスは、RPMスリープドライバにおいて、スピンロックが現在保持されていることを検出するための手段と、スピンロックが現在保持されていることを検出したことに応答して、トランザクションを無視し、スリープセットトランザクションを送らないための手段と、各コアのSPMハードウェアブロックがRPMとのハンドシェイクを実行しても、RPMプロセッサでスリープセットを適用しないための手段とをさらに含み得る。一態様では、コンピューティングデバイスは、RPMドライバにおいて、アクティブコンテキストでスピンロックを受信するための手段と、マルチコアコンピューティングデバイスの第1のコアのスリープモードに進入するための手段と、RPM確認応答割込みを待つ間にマルチコアコンピューティングデバイスの第0のコアでアイドルプロセスを開始するための手段と、第0のコアでスリープモードについて解き、第0のコアが進入するグローバル低電力モードを選択するための手段と、第0のコアでグローバル低電力モードに進入するための手段と、第0のコアでRPM確認応答割込みを受信するための手段と、スピンロックを解放するための手段とを含み得る。一態様では、コンピューティングデバイスは、第0のコアでRPMメッセージの送信を開始するための手段と、RPMドライバにおいて、オペレーティングシステムロックを受信するための手段と、マルチコアコンピューティングデバイスの第1のコアでスリープモードに進入し、RPMトランザクションを形成するための手段と、第1のコアでスリープセットの送信を開始するための手段と、第1のコアからRPMドライバに対するスリープセットトランザクション要求を受信し、オペレーティングシステムロックが保持されているかどうかをチェッ
クして判断するための手段と、オペレーティングシステムロックが保持されていると判断された場合に、スリープセットトランザクション要求を無視し、第1のコアに割込み信号を送るための手段とを含み得る。
【０００８】
本明細書に組み込まれ、本明細書の一部をなす添付の図面は、本発明の例示的な態様を示し、上記の全般的な説明および下記の発明を実施するための形態とともに、本発明の特徴を説明するのに役立つ。
【図面の簡単な説明】
【０００９】
【図１】一態様における2つの低電力モードのうちの1つに進入するためにプログラミングノードによって制御されるリソースの図である。
【図２】様々な態様を実施するのに好適な、例示的なシステムオンチップのアーキテクチャ図である。
【図３】様々な態様を実施するのに好適な、例示的なマルチコアプロセッサのアーキテクチャ図である。
【図４】様々な態様を実施するように構成されたマルチコアプロセッサにおける様々なグローバル構成要素およびローカル構成要素を示すアーキテクチャ図である。
【図５】マルチコアスリープを実行し、低電力モードの最適セットを選択するための態様方法のプロセスフロー図である。
【図６】マルチコアスリープを実行し、低電力モードの最適セットを選択するための態様方法のプロセスフロー図である。
【図７】マルチコアスリープを実行し、低電力モードの最適セットを選択するための態様方法のプロセスフロー図である。
【図８】マルチコアスリープを実行し、低電力モードの最適セットを選択するための態様方法のプロセスフロー図である。
【図９】マルチコアスリープを実行し、低電力モードの最適セットを選択するための態様方法のプロセスフロー図である。
【図１０】一態様において使用するのに好適なモバイルデバイスの構成要素ブロック図である。
【発明を実施するための形態】
【００１０】
様々な態様が、添付の図面を参照して詳細に説明される。可能な場合はいつでも、同じまたは同様の部分を指すのに、図面全体にわたって同じ参照番号を使用する。特定の例および実装形態に行われる参照は、説明を目的とし、本発明の範囲または本特許請求の範囲を限定することは意図されない。
【００１１】
「例示的」という語は、「例、実例、または具体例としての役割を果たすこと」を意味するように本明細書において用いられている。本明細書に「例示的」と記載されるいかなる実装形態も、必ずしも他の実装形態よりも好ましいまたは有利であると解釈されるべきではない。
【００１２】
「モバイルデバイス」および「コンピューティングデバイス」という用語は、携帯電話、ラップトップコンピュータ、携帯情報端末(PDA)、パームトップコンピュータ、ワイヤレス電子メール受信機(たとえば、Blackberry(登録商標)およびTreo(登録商標)デバイス)、マルチメディアインターネット対応携帯電話(たとえば、Blackberry Storm(登録商標))、グローバルポジショニングシステム(GPS)受信機、ワイヤレスゲームコントローラ、ならびに、プログラマブルプロセッサを含み、電力節約方法が利益になるようにバッテリー電力で動作する同様のパーソナル電子デバイスのいずれか1つまたはすべてを指すように、本明細書で互換的に使用される。
【００１３】
「システムオンチップ」(SOC)という用語は、単一の基板に統合された複数のリソースおよびプロセッサを含む単一の集積回路(IC)チップを指すように本明細書で使用される。単一のSOCは、デジタル、アナログ、混合信号、および高周波機能のための回路を含み得る。単一のSOCは、任意の数の汎用および/または専用のプロセッサ(DSP、モデムプロセッサ、ビデオプロセッサなど)、メモリブロック(たとえば、ROM、RAM、Flashなど)、およびリソース(タイマー、電圧調整器、発振器など)も含み得る。SOCは、統合されたリソースおよびプロセッサを制御するための、また周辺デバイスを制御するためのソフトウェアも含み得る。
【００１４】
「マルチコアプロセッサ」という用語は、プログラム命令を読み取り、実行するように構成された2つ以上の独立した処理コア(たとえば、CPUコア)を含む単一の集積回路(IC)チップまたはチップパッケージを指すように本明細書で使用される。SOCは、複数のマルチコアプロセッサを含むことができ、SOCにおける各プロセッサは、コアと呼ばれ得る。
【００１５】
「リソース」という用語は、コンピューティングデバイス上で実行されているプロセッサおよびクライアントをサポートするために使用される多種多様な回路(たとえば、ポート、クロック、バス、発振器など)、構成要素(たとえば、メモリ)、信号(たとえば、クロック信号)、および電圧(たとえば、電圧レール)を指すように本明細書で使用される。モバイルコンピューティングデバイスは一般に、たとえば、水晶発振器、電圧レール、1つまたは複数のメモリユニット、通信バスなどのいくつかのリソースを含むことができる。
【００１６】
マルチコアプロセッサシステムおよびSOCにおけるリソースは、特定のコアに対してローカルであるか、コアのサブセットの間で共有されるか、またはすべてのコアの間で共有される場合がある。本明細書で使用する「グローバルリソース」という用語は、デバイス、チップ、プロセッサ、グループなどのすべてのコアの間で共有されるリソースを指す。
【００１７】
明快のために、ノード電力アーキテクチャ(NPA)および関連用語を使用して、様々な態様方法について説明する。ただし、本明細書におけるNPAノードに関係する例およびNPAノードへの他の言及またはNPA方法は、例示のためにすぎないことを理解されたい。したがって、特許請求の範囲は、請求項で明記されていない限り、NPAノードまたはNPAプロセスを要求すると解釈されるべきではない。
【００１８】
バッテリー寿命を最大化するために、モバイルデバイスは、プロセッサがアイドル状態にあるときなど、可能なときはいつでも1つまたは複数のデバイスリソースを低電力状態に置くように構成され得る。デバイスリソースを低電力状態に置くことは通常、プロセッサがタスクを積極的に処理してはいないときはいつでもリソースの動作の動力源を断つか、または動作を減らすことからなる。いくつかのリソースは、適正な動作に不可欠であり、かつ/または他の構成要素によって使用されており、プロセッサがアイドルであるときにオフにすること、または低電力状態に置くことができない。明快のために、プロセッサがタスクを処理していないとき、かつ/またはアイドル状態にあるときにオフにすること、または1つもしくは複数の低電力状態に置くことができるリソースを、本明細書では低電力リソース(LPR)と呼ぶ。複数のLPRは、所与のアイドル状態においてアクティブ化、有効化、非アクティブ化、および/または無効化され得る。各LPRは、本明細書では低電力リソースモード(LPRM)と呼ばれる複数の低電力モード(アイドル、アクティブスリープ、スリープ、ディープスリープなど)を有し得る。各リソースは、所与の状態におけるLPRMの最適セットを選択する際にプロセッサによって使用される情報を含むLPRM特性データを定義することができる。この情報は、リソースが利用できる各LPRMのリスティング、時間に応じた、または単位時間当たりのLPRMごとの潜在的電力節約量、LPRMごとのレイテンシ特性(たとえば、低電力モードから退出するのに要する時間)、温度が潜在的電力節約量に及ぼす影響、依存性(すなわち、クライアントの他のリソースとの相互依存性)、およびリソースごとに最適なLPRMを選択することに関係し得る他の情報を含み得る。
【００１９】
全体的な「システム低電力構成」は、現在の動作状態および動作条件に基づいて低電力モードに進入することが可能なリソースごとに選択される低電力モードのセットである。
【００２０】
低電力モードを動的に計算し選択するための方法およびシステムは、その内容全体が参照によって本明細書に組み込まれる、2010年12月10日に出願された「Dynamic Low Power Mode Implementation For Computing Devices」という名称の米国特許出願第12/965,008号において開示されている。簡略に言えば、デバイスは、無効化され得るリソースならびにデバイス低電力構成中はオンのままであるべきリソースを識別することによって、1つまたは複数の低電力リソースモード(LPRM)を選択することができる。デバイスプロセッサは、プロセッサがアイドル状態に進入するときにリソースの低電力リソースモードのうちのどれが有効であるかを判断すること、現在のデバイス条件下で期待される電力節約量によって有効な低電力リソースモードをランク付けすること、有効な低電力リソースモードのうちのどれがレイテンシ要件を満たしつつ最大の電力節約をもたらすかを判断すること、および各リソースが進入する特定の低電力リソースモードを選択することによって、(低電力リソースモードのセットからなる)最適なシステム低電力構成を計算することができる。
【００２１】
リソースは、低電力モードマスク(「LPM」マスク)内のフラグビットを有効化することによって、低電力状態に進入することが可能であるときを示すことができる。プロセッサがシステム低電力モードに進入する準備ができているとき、低電力タスクは、LPMマスクにアクセスして、低電力状態に置かれ得るリソースを識別し、所与の動的システム状態(たとえば、現在アクティブなクライアント、必要なレイテンシ、期待アイドル時間、および温度)に基づいてそれらのリソースが進入するのにふさわしいLPRMを判断することができる。
【００２２】
一態様では、プロセッサがアイドル状態に進入することができるとき、低電力タスクは、「ソルバー」プロセスを実行して、様々なリソースについてどの低電力モードに進入すべきかを判断することができる。そのような場合、低電力モードおよび様々なリソースに関するそれらの低電力モードの特性が、アイドル状態に進入するときにスリープタスクによって使用されて評価されるために収集される必要があり得る。これは、ノード電力アーキテクチャ(NPA)において、「/sleep/lpr」NPAノードを通じて実施され得る。
【００２３】
「/sleep/lpr」への要求は、低電力リソースモードを有効化するビットマスクの形式で行われ得る。開発者は、低電力リソースモードを、低電力リソースモード(およびそのリソース低電力モードビットマスク)を登録するsleep_define_lpr()関数を介して、「/sleep/lpr」NPAノードに登録することができる。「/sleep/lpr」NPAノードは、開発者が有効化/無効化することに関心を持っているリソース低電力リソースモードを表すビットマスクについて任意の時間に照会され得る。NPAリソースはまた、適正なビットマスクとともに「/sleep/lpr」への要求を行うことによって、アイドル時間にそれらのリソース低電力リソースモードを有効化するよう要求することができる。次いでスリープソルバーは、低電力リソースモードのリストおよび低電力リソースモードが現在有効化されているマスクについて、アイドル時間に「/sleep/lpr」に照会することができる。
【００２４】
上記で説明したように、プロセッサがアイドル状態に進入することが可能なとき、低電力タスクが「ソルバー」プロセスを実行して、様々なリソースについてどの低電力リソースモードに進入すべきかを判断することができる。このことの一例が図1に示されており、図1は、ノード電力アーキテクチャ(NPA)内のプロセス(すなわち、ノード)2がリソース(水晶発振器4)について、利用可能な低電力モード6、8のうちのどちらに進入することができるかを判断する方法を示している。図1に示す例では、水晶発振器リソース4は2つの代替的低電力リソースモード(LPRM)、すなわちゲート型動作状態6および完全シャットダウン8を有する。リソースを電力節約状態に置く「進入」関数を呼び出すことによって、選択されたLPRMに進入することができる。プロセッサがアイドルである間、プロセッサは割込み待ち(WFI)プロセスおよび/またはアイドルプロセスを実行することができる。プロセッサおよび選択されたリソースは、ウェイクアップイベントが生じるまで、この状態にとどまることができる。ウェイクアップイベントが生じたとき、選択されたリソースごとに、そのリソースを所望の動作状態(たとえば、通常または完全な電力状態)に戻すために「退出」関数を呼び出すことができる。
【００２５】
低電力モードを動的に計算し選択するための上記のプロセスは、従来のコンピューティングデバイスには効果的であるが、現代のモバイルデバイスはますます複雑になっており、デバイスプロセッサによって使用または管理されるリソースの数は毎年増えている。たとえば、多くのモバイルコンピューティングデバイスは現在、複数の水晶発振器、複数の電圧レール、および複数のメモリロケーションを含み、それらの各々は独立して制御され得る。したがって、電力を節約するためにモバイルデバイスプロセッサをオフにするか、または低電力モードに置くことができる多くの様々なリソースがある。さらに、現代のモバイルデバイスは、様々なデバイスリソースを使用し、様々なタスクを実行する複数のプロセッサ/コアを有し得る(したがって、同時にアイドルではないことがある)。複数のプロセッサ/コアが存在することで、低電力モードの管理の複雑度が増しており、低電力モードに置くリソースを選択するときに、ある程度の実行制御を実施しなければならない。
【００２６】
一般に、様々な低電力モードにどのリソースを置くかを選択することは、「スリープ問題」として知られている。たとえば、電源切断し、リソースをその必要な動作状態に戻すのに必要な電力が、プロセッサのアイドル状態の推定持続時間にリソースを低電力モードに置くことによって節約される電力よりも大きい場合、モバイルデバイスのバッテリー寿命は、プロセッサがアイドルであるときはいつでも単にリソースをオフにすること、および/またはリソースを低電力状態に置くことによっては最大化され得ない。したがって、どのリソースをオフにすべきか、かつ/または低電力モードに置くべきか(また、そのリソースについてどの低電力モードを選択すべきか)を判断することは通常、プロセッサ状態、他のデバイスプロセッサの状態、ならびに他の要素、たとえばレイテンシ、電力節約の可能性、電力消費、およびリソース/プロセッサの相互依存性の分析を必要とする。
【００２７】
図2は、様々な態様を実施するために使用され得る例示的なシステムオンチップ(SOC)200アーキテクチャを示すアーキテクチャ図である。SOC200は、デジタル信号プロセッサ(DSP)202、モデムプロセッサ204、グラフィックスプロセッサ206、およびアプリケーションプロセッサ208など、いくつかの異質のプロセッサを含むことができ、これらの各々は1つまたは複数のコアを含み得る。SOCはまた、プロセッサのうちの1つまたは複数に接続された1つまたは複数のコプロセッサ(たとえば、ベクトルコプロセッサ)210を含み得る。各プロセッサは、1つまたは複数のコアを含むことができ、各プロセッサ/コアは、他のプロセッサ/コアとは無関係に動作を実行することができる。たとえば、SOC200は、UNIX（登録商標）ベースのオペレーティングシステム(たとえば、FreeBSD、LINUX（登録商標）、OS Xなど)を実行するプロセッサおよびウィンドウベースのオペレーティングシステム(たとえば、Microsoft Windows（登録商標） 7)を実行するプロセッサを含むことができる。
【００２８】
SOC200はまた、センサデータ、アナログデジタル変換、ワイヤレスデータ送信を管理し、ゲームおよび映画用の符号化オーディオ信号の処理など他の特殊な動作を実行するためのアナログ回路およびカスタム回路214を含み得る。SOCは、電圧調整器、発振器、位相ロックループ、周辺ブリッジ、データコントローラ、メモリコントローラ、システムコントローラ、アクセスポート、タイマー、ならびにコンピューティングデバイス上で実行されているプロセッサおよびクライアントをサポートするために使用される他の同様の構成要素など、システム構成要素およびリソース216をさらに含むことができる。
【００２９】
システム構成要素216およびカスタム回路214は、カメラ、電子ディスプレイ、ワイヤレス通信ユニット、外部メモリチップなどの周辺デバイスとインターフェースする回路を含み得る。プロセッサ202、204、206、208は、一連の再構成可能な論理ゲートを含み、かつ/またはバスアーキテクチャ(たとえば、CoreConnect、AMBAなど)を実装することができる相互接続/バスモジュールを介して、1つまたは複数のメモリ要素212、システム構成要素およびリソース216ならびにカスタム回路214に相互接続され得る。
【００３０】
図3は、様々な態様を実施するために使用され得る例示的なマルチコアプロセッサアーキテクチャを示すアーキテクチャ図である。上述のように、マルチコアプロセッサ302は、極めて近接した(たとえば、単一の基板、ダイ、集積チップなどに)2つ以上の独立した処理コア304、306を含み得る。プロセッサ/コアが近接していることから、メモリは、信号がオフチップを進行しなければならない場合に可能な周波数/クロック速度よりもはるかに高い周波数/クロック速度で動作することができる。さらに、コアが近接していることから、オンチップメモリおよびリソースの共有ならびにコア間のより調整された協力が可能である。
【００３１】
マルチコアプロセッサ302は、レベル1(L1)キャッシュ312、314およびレベル2(L2)キャッシュ316を含むマルチレベルキャッシュを含み得る。マルチコアプロセッサ302はまた、バス/相互接続インターフェース318、主メモリ320、および入力/出力モジュール322を含むことができる。L2キャッシュ316は、L1キャッシュ312、314よりも大きい(かつ遅い)が、主メモリユニット320よりも小さい(かつはるかに速い)ことがある。各処理コア304、306は、L1キャッシュ312、314への専用アクセス手段およびL2キャッシュ316への共用アクセス手段を有する処理ユニット308、310を含むことができる。L1キャッシュ312、314およびL2キャッシュ316は、処理ユニット308、310によって頻繁にアクセスされるデータを記憶するために使用され得る。主メモリ320は、処理コア304、306によってアクセスされるより大きいファイルおよびデータユニットを記憶するために使用され得る。
【００３２】
マルチコアプロセッサ302は、処理コア304、306がメモリに対し順番にデータを求め、最初にL1キャッシュに、次いでL2キャッシュに、そして情報がキャッシュに記憶されていない場合に主メモリに照会するように構成され得る。情報がキャッシュにも主メモリ320にも記憶されていない場合、マルチコアプロセッサ302は、外部メモリ/ハードディスク324に対し情報を求めることができる。
【００３３】
処理コア304、306は、互いに同一であっても、異質であってもよく、かつ/または様々な機能を実施することができる。したがって、処理コア304、306コアは、オペレーティングシステムの観点から対称的である必要はなく(たとえば、異なるオペレーティングシステムを実行できる)、またはハードウェアの観点から対称的である必要もない(たとえば、異なる命令セット/アーキテクチャを実装できる)。
【００３４】
処理コア304、306は、バス/相互接続318を介して互いに通信することができる。各処理コア304、306は、いくつかのリソースに対して実行制御することができ、他のリソースを他のコアと共有することができる。単一のチップ上に複数のコアを含め、コア間でメモリおよびリソースを共有することで、スリープ問題に対するソリューションおよび最適な低電力リソース構成の選択を複雑にする電力および温度の管理の問題がいくつか生じている。
【００３５】
上記で説明したように、バッテリー寿命を維持するために、各リソースは、リソースが置かれ得る低電力モード(LPRM)のセットを有し得る。SOCおよびマルチコアプロセッサシステムでは、処理ユニット/コアの各々は、異なるオペレーティングシステムの下で動作することができ、コアは、制約、作業負荷の様々なセット、およびコアが低電力/スリープモードに進入すること、および低電力/スリープモードから退出することが期待される(すなわち、各コアは独立してスリープモードに進入すること、およびスリープモードから退出することが求められ得る)様々な時間を有し得る。処理ユニット/コアの各々はまた、それらを他のコアの動作/状態に結び付けるリソースを共有し得る。たとえば、マルチコアプロセッサ/SOCは、理論的には低電力/スリープモードに独立して進入することができるが、すべてのコアが低電力モードにある場合を除いてシャットダウンできないルート水晶発振器の動作に結び付けられる4つのコアを有し得る。これは、コアが低電力モードに進入すること、および/または低電力モードから退出することができるようになる前に、沢山の明示的なハンドシェイキング、ロッキング、またはコア間の直接のシグナリングを必要とする。これらの要素は、SOCおよび/またはマルチコアプロセッサを含むシステムにおける最適な低電力リソース構成の選択を複雑にしている。
【００３６】
既存のマルチコア/SOCスリープ実装形態は、十分にスケーリングする(scale)ことがなく、最適な全体的低電力リソースモード構成の選択を可能にしない。上述のように、コア/処理ユニットは、システムがグローバル低電力モードに進入することができるようになる前に、複雑なロックを実行し、動作を同期させる必要があり、コア/処理ユニットの数が増加するにつれて(たとえば、8、16、32など)相当なボトルネックが生じる。さらに、マルチコアプロセッサシステムにおけるプロセッサ/コアのアイドル状態を管理するための既存のソリューションは通常、使用されるオペレーティングシステムのタイプに依存する。たとえば、いくつかのオペレーティングシステム(たとえば、LINUX（登録商標）など)は、他のコア/リソースが最終スリープを望んでいるときに(たとえば、すべてのコアがスリープモード)すべての動作がゼロコアに回されるように、スリーププロセスの上に存在し、(スリーププロセスの外で)他のコア/リソースを明示的にオフにするプロセスを介して、マルチコアスリープ動作を制御するように構成され得る。これにより事実上、マルチコアシステムはリソース/複数のコアを、単一のコアソリューションと同様の(ゼロコアが他のすべてに対する責任を負う)方法で管理できるようになる。
【００３７】
他のオペレーティングシステム(たとえば、Microsoft Windows（登録商標）など)は、様々なコアがスリープモードに進入する準備ができているときに、様々なコアがブロックし、最後のコアが休止するのを待つように構成され得る。このソリューションにより、コアは、すべてのグローバルリソースおよびコアがアイドルになるまで、最低のシステム電力状態ではなく、より低い電力状態で動作する。
【００３８】
様々な態様は、ゼロコアが他のコアを監視することを要求せず、スリーププロセスの上に存在するプロセスがコアを監視することを要求せず(たとえば、LINUX（登録商標）など)、コアがブロックし、すべてのグローバルリソースがアイドルになるまで待つことを要求しない。既存のソリューションとは異なり、様々な態様では、マルチコアプロセッサ/SOCにおけるすべてのコア/処理ユニットを対称的な形で扱うことができる。各コアは、参照カウントを監視することによって、他のコアとは無関係にその動作状態を選択することができる。
【００３９】
上述のように、SOC/マルチコアプロセッサでは、各プロセッサ/コアは、異なるオペレーティングシステムの下で動作することができ、各コア/プロセッサは、制約、作業負荷の様々なセット、および各コア/プロセッサが低電力/スリープモードに進入すること、および低電力/スリープモードから退出することが期待される(すなわち、各コアは独立してスリープモードに進入すること、およびスリープモードから退出することが求められ得る)様々な時間を有することができ、同時に、それらを他のコアの動作/状態に結び付けるリソースを共有し得る。このようにして、動的スリープ動作がマルチコア環境において実行されるとき、様々なコアの間でデータを共有し、調整して共有リソースをそれらの低電力モードに置く(これは通常、コアが低電力モードに進入すること、および/または低電力モードから退出することができるようになる前に、明示的なハンドシェイキング、ロッキングまたはコア間の直接のシグナリングを必要とする)ために、特別な考慮をしなければならない。様々な態様は、コアが低電力モードを選択し、無効化され得るリソースを識別し、デバイス低電力構成中にオンのままであるべきリソースを識別する方法を改変する。様々な態様はまた、マルチコアシステムがこれらの動作を効率的に実行することを、システム低電力モードに進入する前に明示的なハンドシェイキング、ロッキングまたはコア間の直接のシグナリングを一切必要とせずに、個別のリソースを個別に処理し、グローバルリソースをコア間で共有することができる方法で、制約をローカル(すなわち、特定のコアについて)またはグローバル(すなわち、すべてのコアについて)のいずれかで設定することによって、可能にする。
【００４０】
図4は、様々な態様に従って実装されるマルチコアプロセッサシステム400における例示的なフローを示す構成要素フロー図である。マルチコアプロセッサシステム400は、2つ以上の独立した処理コア404、406を含むことができ、これらの各々は、他のコアとは無関係にスリープ/低電力モードに置かれ得る。マルチコアプロセッサシステム400は、コア404、406のうちの1つまたは複数に対して割込みを発動して、コアをスリープ状態/低電力モードからウェイクアップさせることができるように構成された割込みモジュール416も含み得る。
【００４１】
マルチコアプロセッサシステム400はまた、いくつかのリソース438、440、454を含み得る。いくつかのリソース(たとえば、ローカルリソース438、440)は、コア当たりベースで制御されてよく、各コアに対してローカル(すなわち、コアレールの電力崩壊(power collapse))と考えられる。他のリソース(たとえば、共有リソース454)は、1つまたは複数のコアによって共有されてよく、すべてのコア間で、それらのLPRMに進入する前に調整を必要とし得る。
【００４２】
各プロセッサコア404、406は、コアタイマー412、414およびサブシステム電力管理(SPM)ハードウェアブロック408、410を有し得る。SPMハードウェアブロック408、410は、それらのそれぞれのコアの電力状態を制御して、コアが処理動作を素早く再開する能力を維持しつつ低電力モードに進入できるようにし得る。
【００４３】
各コア404、406は、他のコアとは無関係に動作するアイドルスレッド418、420を実行することができる。アイドルスレッド418、420は、それらのそれぞれのコアタイマー412、414およびサブシステム電力管理(SPM)ハードウェアブロック408、410と通信し得る。各アイドルスレッド418、420はまた、それらのそれぞれのコア404、406のローカルレイテンシモジュール430、432、ローカルウェイクアップモジュール426、428および/またはローカル留置モジュール422、424、ならびにコア間で共有されるグローバルウェイクアップモジュール436およびグローバルレイテンシモジュール434と通信することができる。一態様では、レイテンシモジュール430、432、434、ウェイクアップモジュール426、428、436および留置モジュール422、424は、ノード電力アーキテクチャ(NPA)実装形態におけるノードであり得る。
【００４４】
クライアントアプリケーションは、特定のコアにレイテンシ制約に従わせるためにローカルレイテンシモジュール430、432に登録することができる。クライアントアプリケーションは、どのコアに対してそれらの割込みが発動されるかがわからない場合に、グローバルレイテンシモジュール434に登録することができる。一態様では、割込みレイテンシは、割込みの発動から割込みサービスルーチン(ISR)が実行される時間までの時間量として計算され得る。
【００４５】
一態様では、マルチコアプロセッサシステム400は、システムにおける2つ以上の実行環境(または「マスター」)によって共有されるリソースを管理するためのリソース電力マネージャ(RPM)450プロセッサを含み得る。
【００４６】
一態様では、リソース電力マネージャ(RPM)450は、スリープ要求に従う前に、各コアのサブシステム電力管理(SPM)ハードウェアブロック408、410からのハンドシェイクを待つことができる。
【００４７】
ウェイクアップモジュール426、428、436は、クライアントアプリケーションがタイマーサブシステムを通じてスケジュールされていない期待ウェイクアップ割込みについてスリープサブシステムに入力を提供することができるように構成され得る。これによりスリーププロセスは、いつ割込みが発動され、システムをウェイクアップさせることが期待されるかについての知識による低電力モードの選択を最適化することが可能になり得る。クライアントアプリケーションは、特定のコアにおけるウェイクアップイベントを示すためにローカルウェイクアップモジュール426、428に登録することができる。クライアントアプリケーションは、どのコアに対してそれらの割込みが発動されるかがわからない場合に、グローバルウェイクアップモジュール436に登録することができる。
【００４８】
各コア404、406は、ローカルおよび/またはグローバルのウェイクアップ入力および/またはレイテンシ制約に従うかどうかを独立して判断するように構成可能であり、コアはそれを、留置モジュール422、424リソースの存在および/または状態に基づいて判断することができる。
【００４９】
一態様では、留置モジュール422、424は、それぞれのコア上に、コアが「アクティブ」であるか、それとも「留置」されているかをオペレーティングシステム(またはMP-DCVSサブシステム)が示すことができるようにするノード電力アーキテクチャ(NPA)リソースを含むことができる。
【００５０】
アクティブ状態は、オペレーティングシステムがコア上のスレッドをアクティブにスケジュールしていること、ならびにローカルとグローバルの両方のレイテンシおよびウェイクアップ制約に従うべきであることを示し得る。
【００５１】
留置状態は、オペレーティングシステムがコア上のスレッドをアクティブにスケジュールしてはいないこと、ならびにローカルのみのレイテンシおよびウェイクアップ制限に従うべきである(すなわち、グローバルのレイテンシおよびウェイクアップ制約を無視できる)ことを示し得る。
【００５２】
一態様ではマルチコアプロセッサシステム400は、コアがアクティブ状態にあるときに、オペレーティングシステムがローカルとグローバルの両方のレイテンシおよび/またはウェイクアップ制限に従い、かつコアが留置状態にあるときに、オペレーティングシステムがローカルのみのレイテンシおよびウェイクアップ制限に従うように構成され得る。
【００５３】
一態様では、オペレーティングシステムは、個々のコア(たとえば、コア0)に対するすべての割込みをルーティングするように構成されてよく、マルチコアプロセッサシステムは、個々のコア(すなわち、コア0)のみがグローバルウェイクアップ/レイテンシ制約に従うように構成され得る。そのような態様では、グローバルウェイクアップ/レイテンシモジュールは、コアの(コア0の)ローカルウェイクアップ/レイテンシモジュール(たとえば、ウェイクアップモジュール426、レイテンシモジュール430)に対してエイリアス化され得る。
【００５４】
一態様では、コア内に留置モジュール(たとえば、モジュール422、424)が存在しないことから、そのコアはアクティブ状態で動作する。
【００５５】
一態様では、留置モジュール422、424は、デフォルトではアクティブ状態にあり得る。
【００５６】
一態様では、留置モジュール422、424は、オペレーティングシステムがコア上のスレッドをアクティブにスケジュールしてはいないが、コアが従うべき登録済みレイテンシおよびウェイクアップ制約に対応する割込みがコアにルーティングされ得ることを示す第3の状態(たとえば、アイドル状態)を識別するように構成され得る。たとえば、コア上で実行されているオペレーティングシステムは、コアが留置されている(すなわち、コア上のスレッドをスケジュールしていない)ときに割込みをコアにルーティングしてもらうことができるように「留置状態」を定義し得る。そのような場合、割込みサブシステム(たとえば、割込みモジュール416)は、コアがアイドル状態にあること、ならびにコアがグローバルレイテンシおよびウェイクアップ制約に従うべきであることを留置モジュール422、424に通知するように構成され得る。
【００５７】
様々な態様では、直接的に照会されるタイマーサブシステムに関連付けられる既知のウェイクアップイベントがあり得る。様々な態様はまた、ウェイクアップイベントが一定時間後に生じると考えていることをクライアントが「暗示」できるようにするウェイクリソースを含み得る。
【００５８】
様々な態様では、システムは、リソースおよび/またはコアが所与のスリープ状態にどのくらいの間とどまる可能性が高いかを予測および/または制御する機構を含み得る。これらの態様では、プロセッサは、リソースがどのくらいの間スリープ状態であることが期待できるかを制御するために、いくつかのイベントを延期することができる。様々な態様では、リソースがウェイクアップを強制されるハードなウェイクアップポイントがあり得る。様々な態様では、システムはリソースからの「暗示」を使用して、期待ウェイクアップ時間フレームを判断することができる。
【００５９】
様々な態様は、最も効率的なウェイクアップ時間を推定するためにプロセッサによって使用され得る予測アルゴリズムを実装することができる。
【００６０】
様々な態様は、ハードリミット、暗示、および学習機構の組合せを使用して、期待ウェイクアップ時間を判断することができる。
【００６１】
様々な態様は、期待ウェイクアップ時間を使用して、判断された期待ウェイクアップ時間まで低電力リソースモードにリソースが置かれた場合に、どのくらいの電力が節約されるかを判断することができる。次いで、そのような期待電力節約量を、間近に迫ったスリープサイクルにおけるシステム低電力モード構成で実現するために低電力モードに置く特定のリソースを選択する(すなわち、低電力リソースモードを選択する)プロセスで使用することができる。
【００６２】
一態様では、次のスケジュールされたウェイクアップまでの残っている時間量(たとえば、「ハードウェイクアップ」までの持続時間)を識別するよう、ウェイクアップモジュール426、428、436は照会され得る。グローバルウェイクアップモジュール436は、要求を行っているコアに関する持続時間を返信することができ、コア固有のウェイクアップモジュール426、428は、それらが表すコアに関する持続時間を返信することができる。
【００６３】
一態様では、ウェイクアップノードを通じてスケジュールされたウェイクアップ(たとえば、ハードウェイクアップ)について照会する代わりに、スケジュールされたウェイクアップ情報が、処理のためにスリープタスクに渡され得る。たとえば、高レベルオペレーティングシステム(HLOS)は、処理のためにスリープタスクに、アイドルである特定のコアに関するハードウェイクアップ持続時間を渡すことができる。
【００６４】
一態様では、スリープサブシステムは、すべてのコアによって共有されるライブラリを含み得る。複数のコアは、アイドルスレッドのコンテキスト内または別のスレッドのコンテキスト内のいずれかで、共有データ(たとえば、スリープサブシステムライブラリ)を同時に読み取ること、および/または変更することができる。
【００６５】
上述のように、プロセッサによって使用されるいくつかのリソースは、コア当たりベースで制御されてよく、したがって、各コアに対してローカル(すなわち、コアレールの電力崩壊)である一方、他のリソースは、1つまたは複数のコアによって共有され得る。リソースはグローバルであり得る(たとえば、2つ以上のコアによって共有され得る)ので、コアがスリープモードに進入するには、またはリソースがそれらの低電力モードに進入することを許容される前に、コア間の調整が必要とされ得る。一態様では、マルチコアプロセッサシステム400は、コア間の調整を行い、コアごとの低電力モードの選択を支援する動的スリープフレームワークを含み得る。動的スリープフレームワークは、各低電力リソース(LPR)が適用されるコアを識別し得る。
【００６６】
特定のコアと低電力リソースとの関係を識別するフィールドがスリープ構造452に追加され得る。リソースは、ローカルであるか、コアのサブセットの間で共有されるか、またはすべてのコアの間で共有される(グローバルである)場合がある。たとえば、リソースが2つ以上のコアに適用される(すなわち、LPRMがグローバルである)場合、コアは、共有メモリに記憶されている参照カウントにアクセスして、リソース/コアが低電力モードに置かれ得るかどうかを判断することができる。リソースが特定のコアにのみ適用される(すなわち、LPRMがローカルである)場合、リソースが適用されるコアは、参照カウントを必要とせずに、そのリソースを低電力モードに置くことができる。
【００６７】
特定のコアについてスリープセットを選択するために、動的スリープフレームワークは、特定のLPRが適用されるコアはどれであるかを知らされ得る。これは、LPRが適用される特定のコアを識別するよう、sleep_lprノード452の追加フィールドに照会することによって実現され得る。追加フィールドはいくつかのビットを含んでよく、各ビットは特定のコアに対応し得る(すなわち、ビット0はコア0に、ビット1はコア1に対応し得る、といった具合である)。ビットのうちのいずれかが設定された場合、LPRは、設定されたビットによって識別されたコアにのみ適用されるものとして識別され得る。ビットがまったく設定されない場合、またはすべてのビットが設定された場合、LPRは、すべてのコアの間で共有されるもの(すなわち、LPRはグローバルである)として扱われ得る。
【００６８】
一態様では、スリープサブシステムは、スリープサブシステムに登録された構成要素モードの有効な組合せを表す合成モードを作成することができる。合成モードは、構成要素モードにおいて与えられた依存性、レイテンシ、順序、および電力節約情報に基づいて作成され得る。
【００６９】
一態様では、各コアは、LPRMが有効化および無効化されるのに伴って、スリープフレームワークによってオンザフライでプルーニングされた有効リストを含み得る。あるコアがアイドルになり、有効モードリストを要求するときはいつでも、スリープレジストリは要求側コアに関するリストを返信することができる。たとえば、以下のLPRMがシステム内に存在する場合、
【００７０】
【表１】
0005752326.tif 000002
【００７１】
各コアに関する合成モジュールリストは次のようになり得る(依存性が暗示され得る)。
【００７２】
【表２】
0005752326.tif 000003
【００７３】
合成モードは様々な態様の一部として必要とはされず、したがって、合成モードに関するこの説明は、請求項で明記されていない限り、特許請求の範囲を限定するものではないことに留意されたい。
【００７４】
LPRMの各々が有効化または無効化されるのに伴って、スリープレジストリは、各コアに関する有効リストをプルーニングして、有効リストがそのコアに関する有効モードの最新リストを常に反映するようにすることができる。たとえば、コア0に関してcpu_vdd0.offが無効化された場合、コア1はcpu_vdd1.offになお進入することができ、スリープレジストリは、各コアに関する有効リストをプルーニングして、このモードを反映することができる。
【００７５】
一態様では、合成モードにおける構成要素モードのすべてが有効化されているとき、合成モード全体が有効化され、スリープの候補になり得る。
【００７６】
一態様では、進入するローカル(非共有)LPRMをソルバーが選択した場合、他のコアとの調整なしにLPRMに進入することができ、ローカルLPRM用の進入関数が無条件に実行され得る。
【００７７】
図5は、様々なコアの「進入」関数および「退出」関数を調整するために、またシステム低電力構成を識別し、システム低電力構成に進入するためにマルチコアプロセッサシステムによって実施され得る態様方法500を示している。マルチコアプロセッサシステムは、共有モードに関する参照カウントに使用される、リソース低電力リソースモード(LPRM)に関連する1つまたは複数のメモリロケーションを含み得る。上記で説明したように、マルチコアプロセッサシステムによって使用されるリソースは、ローカルである(コア当たりベースで制御される)か、または共有される(2つ以上のコアによって使用される)。図5に示す例では、LPRMaはコア0に対してローカルであり、LPRMbはコア1に対してローカルであり、LPRMc、LPRMd、およびLPRMeはすべてのコアによって共有される。
【００７８】
ブロック502および504において、マルチコアプロセッサのコア0およびコア1が実行されており、ローカルリソースおよびグローバルリソースを使用/駆動している。ブロック506において、コア0はアイドル状態に進入し、スリープモードについて「解く」ソルバープロセスの実行を始めることができる。上記で説明したように、コアがアイドル状態にあるときなど、プロセッサがシステム低電力モードに進入する準備ができているとき、低電力タスク(たとえば、「ソルバー」タスク/プロセス)は、低電力モードマスクにアクセスして、低電力状態に置かれ得るリソースを識別し、所与の動的システム状態(たとえば、現在アクティブなクライアント、必要なレイテンシ、期待アイドル時間、および温度)に基づいてそれらのリソースが進入するのにふさわしい低電力リソースモードを判断することができる。すなわち、コアがアイドル状態に進入することが可能なとき、低電力タスクは、「ソルバー」プロセスを実行して、様々なリソースについてどの低電力モードに進入すべきかを判断することができる。さらに、任意のコアが最初に休止し、任意のコアが最後に起動することができるように、各コアは、ローカルとグローバルの両方で進入することができるモードのセット全体について「解く」ことができる。たとえば、ブロック506において、コア0は、モードa、cおよびdを利用可能な低電力モードと識別し、ローカルモードaならびにグローバルモードcおよびdを選択する動作を実行することができる。
【００７９】
選択されたあらゆるモードについて、モードの進入関数および退出関数が呼び出され得る。一態様では、コアの間で共有されるモード(たとえば、LPRMc、LPRMd、およびLPRMe)について、進入するにあたり、そのモードを共有するあらゆるコアがそのモードを選択しているときのみ、進入関数および退出関数の内容が実行され得る。これは、LPRMへの進入およびLPRMからの退出を行った回数を表す各LPRMに関連するカウントを続けることによって実現され得る。カウントは、LPRMを共有する実行中コアの数で始まり得る。図5に示す例では、マルチコアプロセッサは、2つのコア(コア0、コア1)を含み、したがって、グローバルLPRMc、LPRMd、およびLPRMeの各々は、初期値2を有する(モードc=2、モードd=2、モードe=2)。LPRM進入関数が呼び出されるたびに、カウントが自動的に減分され得る。たとえば、ブロック508において、コア0はグローバルLPRMcに関連する値を減分し(たとえば、LPCMcを1に減分する)、グローバルLPRMdに関連する値を減分する(たとえば、モードdを1に減分する)ことができる。グローバルLPRMメモリロケーションのカウントがゼロに達したとき、そのLPRMに関する進入関数が実行され得る。同様に、コアがウェイクアップしたとき、コアはLPRM退出関数を呼び出し、カウントが自動的に増分され得る。退出関数は、カウントが0から1に移行したときに、内容(たとえば、退出タスク)の実行を開始することができる。
【００８０】
一態様では、スリープタスクは、LPRMを選択するあらゆるコアに対して進入関数および退出関数を実行することができる。カウントの操作ならびに進入関数および退出関数を実行するかどうかに関する決定は、LPRMによって制御されることがあり、一態様では、LPRMのオーナーは、コア間でそのLPRMの進入および退出を調整することができる。LPRMはLPRMの要件に応じて、スピンロックするか、またはコア間で調整するための他の機構を使用することができる。
【００８１】
一態様では、進入するローカル(非共有)LPRMをソルバータスクが選択した場合、マルチコアプロセッサシステムは、他のコアとの調整なしにそのLPRMに進入することができ、ローカルLPRM用の進入関数が無条件に実行され得ると仮定することができる。たとえば、ブロック508において、コア1との調整なしにローカルLPRMaに進入することができる。しかしながら、ブロック508においてグローバルLPRMcおよびLPRMdに進入せず、その理由は、グローバルLPRMcおよびLPRMdに対応するメモリロケーションが非ゼロ値を含む(モードcメモリ=1、モードdメモリ=1)ことにある。
【００８２】
ブロック510において、コア1はアイドルになり、LPRMb、LPRMdおよびLPRMeを利用可能な低電力モードと識別する動作を実行することができる。また、ブロック510において、コア1は、ローカル(たとえば、LPRMb)とグローバル(たとえば、LPRMdおよびLPRMe)の両方で進入することができるモードのセット全体「について解く」ことができる。上記で説明したように、進入することができるモードのセット全体について解くことにより、任意のコアが最初に休止し、任意のコアが最後に起動することができるようになる。
【００８３】
ブロック512において、コア1は、ローカルLPRMbに進入し、グローバルLPRMdの値を減分し(たとえば、LPRMdを0に減分する)、グローバルLPRMeの値を減分する(たとえば、LPRMeを1に減分する)ことができる。上述のように、LPRMへの進入およびLPRMからの退出を行った回数を表す各グローバルLPRM(たとえば、LPRMc、LPRMd、およびLPRMe)に関連するカウントを続けることによって、マルチコアプロセッサシステムは、進入するにあたり、そのモードを共有するあらゆるコアがそのモードを選択したときのみ進入関数および退出関数の内容が実行されるようにすることができる。
【００８４】
ブロック514において、コア0とコア1の両方がスリープモードに進入し、スリープセットを送ることができる。グローバルモードdに対応するメモリロケーションはゼロ値を含むので、ブロック512においてグローバルLPRMdに進入することができる。
【００８５】
ブロック516において、コア0はウェイクアップイベント(たとえば、割込み)を検出することができる。ブロック518において、コア0は、ローカルLPRMaから退出すること、ならびにグローバルLPRMcおよびLPRMdに対応するメモリロケーションの値を増分する(たとえば、LPRMcを2に、LPRMdを1に増分する)ことによってスリープモードから退出することができる。LPRMdに対応するメモリロケーションの値はもはやゼロ値を含んでいないので(LPRMd=1)、コア0はグローバルLPRMdの退出関数の内容を実行することもできる。
【００８６】
上述のように、様々な態様により、あるコア(たとえば、コア1)がグローバルLPRMに進入し、および別のコア(たとえば、コア0)がグローバルLPRMから退出することが可能になる。(ブロック512において)コア1がLPRMdに進入し、(ブロック518において)コア0がLPRMdから退出したことに留意されたい。
【００８７】
ブロック520において、コア0は再びアイドルになり、ローカルLPRMa「について解き」、コア1との調整なしにローカルLPRMaに進入する(たとえば、ローカルLPRMaの進入関数の実行を始める)ことができる。ブロック522において、コア0はスリープモードに進入し、スリープセットを送って、グローバルモード(たとえば、モードc、dおよびe)のいずれも進入されないようにすることができる。
【００８８】
ブロック526において、コア1でウェイクアップイベントが検出され得る(たとえば、コア1で割込みが検出される)。ブロック528において、マルチコアプロセッサは、ローカルモードbから退出すること、ならびにグローバルモードdおよびeに対応するメモリロケーションの値を増分する(たとえば、モードdを2に増分し、たとえば、モードeを2に増分する)ことによってスリープモードから退出することができる。
【００８９】
様々な態様では、マルチコアプロセッサシステムは、制約に従うように構成され得る。すなわち、コアがアイドルになり、その低電力モードを選択するとき、アイドル処理がシステムの残り部分からは透過になるために適合されなければならないいくつかの制約がある。これらの制約を実行時に収集し、コアがアイドルになるときにスリープコードに供給することができる。特定の時点で、あるコアはある制約セットを伴ってアイドルになり得る一方、別のコアはアウェイク状態で、それらの制約を変更するスレッドを実行している。
【００９０】
いくつかの場合には、制約は、スリープ状態にあるコアが、レイテンシ配分量(latency budget)が増大するか、またはLPRMが有効になる場合など、新しい制約にとって今では最適ではないモードセットに進入しているような形で変更され得る。この場合、スリープ中のコアは、最適化としてウェイクアップされ得る。他の場合には、制約は、スリープ状態にあるコアが、レイテンシ配分量が減少するか、またはLPRMが無効になる場合など、新しい制約に違反するモードセットに進入しているような形で変更され得る。この場合、スリープ中のコアは、正しいシステム行動を取得するためにウェイクアップされ得る。
【００９１】
どのコアがスリープ状態にあるかを判断するために、コアごとの、コアがスリープ状態にあるかどうかを示す変数が、実行されているスレッドとアイドル状態にあるスレッドとの間で共有され得る。この変数は、そのコアによって、そのコアがアイドルスレッドに進入するときに増分され、そのコアがアイドルスレッドから退出するときに減分され得る。
【００９２】
一態様では、共有データは、記憶されるデータのタイプおよび/またはデータがアクセスされる方法に基づいて保護され得る。マルチコアプロセッサシステムは、スピンロック、オペレーティングシステム(OS)ロック、またはデータへのアクセスを保護し同期させるプロセッサ固有のアトミック命令を実施し得る。マルチコアプロセッサシステムはまた、共有データを読み取っているスレッドが、ウェイトフリー方式でそれを行い、データを変更するときのみ同期化が必要であるような動作を実行することができる。
【００９３】
図4を参照しながら上記で説明したように、一態様では、マルチコアプロセッサシステムは、システムにおける2つ以上の実行環境(または「マスター」)によって共有されるリソースを管理するためのリソース電力マネージャ(RPM)プロセッサを含み得る。各マスターは、マスターが低電力モードに置きたいリソースのために「スリープセット」を作成し得る。スリープセットは、複数のRPM管理対象リソースおよび各リソースの所望の状態値を含むトランザクションを含み得る。RPMでは、これはそのマスターの「票(vote)」に変換され得る。一態様では、すべてのマスター票を総合した状態のみが、リソースにとって従う最終状態である。マルチコア環境は、スリープコードおよびそのスリープが実行されるプロセスによってのみ呼び出されるRPMスリープドライバを有し得る。システムはまた、スリープコンテキスト外でRPMメッセージを送るプロセスによって呼び出されるRPMアクティブモードドライバを含み得る。RPMドライバがスリープコンテキストにおいてマルチコア環境で実行されているとき、スリープトランザクションが適正に形成され、望ましくないときにはスリープセットに進入せず、アクティブモードRPMメッセージとの調整が行われるように、特別な考慮が必要である。
【００９４】
以下の仮定は、RPMスリープドライバを含み得るマルチコア環境についてのものであり得る。各コアは、そのコアの電力状態を制御し、そのコアが低電力モードに進入するときにRPMとハンドシェイクするSPMハードウェアブロックを有する。アプリプロセッサは全体で、1つのRPMマスターである(コア当たり1つのマスターではない)ので、アプリプロセッサにとって1つのスリープセットがある。RPMは、アプリスリープセットに従う前に各コアのSPMからのハンドシェイクを待つ。RPMスリープドライバは、スリープコードが最初にトランザクションを開始するためのRPM開始関数を呼び出し、次いでスリープセットにリソースを追加するための後続の呼出しが行われ、次いでトランザクションを送るためのRPM送信関数が呼び出されるような方法で使用される。
【００９５】
上述のように、「進入」関数を呼び出す最後のコアによって一度のみ各LPRMに進入することができる。しかしながら、複数のコアが同時に進入関数を呼び出し、スリープセットのための最終RPMトランザクションを作成する責任を共有する可能性が存在する。両方のコアは、同じRPMハンドルを使用してトランザクションを操作し得るので、トランザクションを共有することができ、トランザクションはいずれかのコアによって開始され、変更されるか、または送られ得る。一方のコアがRPMトランザクションを開始しようと試みるのを、他方のコアがRPMトランザクションを送っている間は防止するために、スリープスピンロックが使用され得る。スピンロックは、RPM開始およびRPM送信の前後のみ保持され得る。スリープセットにリソースを追加するときには、各コアがスリープセットの独立部分に書き込むと想定されるので、スピンロックは保持されなくてよい。
【００９６】
図6は、マルチコアプロセッサシステムがインターリーブされたトランザクション形成を調整する態様方法600を示している。マルチコアプロセッサシステムは、様々なリソース低電力リソースモード(LPRM)の各々に関連する1つまたは複数のレジスタ/メモリロケーション、ならびにrpm.開始動作およびrpm.送信動作に関連するレジスタ/メモリロケーションを含み得る。図6に示す例では、グローバルLPRMcおよびLPRMdが、すべてのコア(たとえば、コア0およびコア1)によって共有される。
【００９７】
ブロック602および604において、マルチコアプロセッサのコア0およびコア1が実行状態にあり、グローバルリソースを使用/駆動している。ブロック606において、コア0はアイドルになり、スリープモードを「解く」動作を実行する(たとえば、様々なリソースについてどの低電力モードに進入すべきかを判断するために「ソルバー」タスク/プロセスを実行する)ことができる。このプロセスの一部として、ブロック606において、コア0はモードcおよびdを利用可能な低電力モードと識別し、進入するグローバルモードcおよびdを選択する動作を実行することができる。
【００９８】
上記で説明したように、マルチコアプロセッサシステムは、LPRMへの進入およびLPRMからの退出を行った回数を表す各LPRMに関連するカウントを維持することができる。カウントは最初に、LPRMを共有する実行中コアの数に対応する値を含み得る。図6に示す例では、2つのコア(すなわち、コア0およびコア1)がグローバルLPRMcおよびLPRMdを共有するので、LPRMcおよびLPRMdに関連するメモリロケーションはそれぞれ、値2(LPRMc=2、LPRMd=2)で始まる。同様に、rpm.開始関数およびrpm.送信関数に関連するメモリロケーションは、値2(rpm.開始=2、rpm.送信=2)を記憶し得る。
【００９９】
ブロック608において、コア0は、rpm.開始関数を入力し、rpm.開始関数に関連するメモリロケーションおよび/または変数に記憶されている値を減分する(rpm.開始=1)ことができる。rpm.開始関数に関連するメモリロケーションは非ゼロ値を含むので、コア0はRPMトランザクションの開始を始めない。
【０１００】
ブロック610において、コア1はアイドル状態に進入し、スリープモードについて解き、モードcおよびdを選択することができる。ブロック612において、コア1はrpm.開始関数を入力し、rpm.開始関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.開始=0)ことができる。rpm.開始関数に関連するメモリロケーションは、1から0に移行する値を記憶している(すなわち、今ではゼロ値を含む)ので、コア1はRPMトランザクションの開始を始めることができる。
【０１０１】
ブロック614において、コア1はグローバルLPRMcに進入し、LPRMcに関連するメモリロケーションによって記憶されている値を減分する(LPRMc=1)ことができる。LPRMcに関連するメモリロケーションは、非ゼロ値を含むので、ブロック614においてコア1はスリープセットにLPRMcを追加しない。
【０１０２】
ブロック616において、コア0はグローバルLPRMcに進入し、LPRMcに関連するメモリロケーションによって記憶されている値を減分する(LPRMc=0)ことができる。LPRMcに関連するメモリロケーションによって記憶されている値は今やゼロ値を含むので、コア0はスリープセットにLPRMcを追加することができる。すなわち、ブロック616において、コア0は、コア1によって開始されたスリープセットトランザクションにグローバルLPRMcを追加する。
【０１０３】
ブロック618において、コア0はグローバルLPRMdに進入し、LPRMdに関連するメモリロケーションによって記憶されている値を減分する(LPRMd=1)ことができる。LPRMdに関連するメモリロケーションは、非ゼロ値を含むので、ブロック618においてコア0はスリープセットにLPRMdを追加しない。
【０１０４】
ブロック620において、コア1はグローバルLPRMdに進入し、LPRMdに関連するメモリロケーションによって記憶されている値を減分する(LPRMd=0)ことができる。LPRMd移行に関連するメモリロケーションによって記憶されている値は今やゼロ値を含むので、ブロック620においてコア1はスリープセットにLPRMdを追加する。
【０１０５】
ブロック622において、コア1はrpm.送信を入力し、rpm.送信関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.送信=1)ことができる。rpm.送信関数に関連するメモリロケーションは非ゼロ値を含むので、コア1はRPMトランザクションを送らない。ブロック624において、コア0はrpm.送信を入力し、rpm.送信関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.送信=0)ことができる。rpm.送信関数に関連するメモリロケーションによって記憶されている値は1から0に移行している(すなわち、今やゼロ値を含む)ので、コア0はRPMトランザクションを送ることができる。したがって、ブロック624において、コア0は、コア1が開始したスリープセットトランザクションを送る。
【０１０６】
ブロック626において、両方のコアがスリープモードになることができ、スリープセットを送ることができ、グローバルLPRMcおよびLPRMdに進入することができる。
【０１０７】
上述のように、一方のコアが、他方のコアがスリープセットトランザクションを形成している最中に、ウェイクアップし、トランザクションまたは低電力モードのセットを変更する可能性がある。この場合、ウェイクアップしたコアは新しいトランザクションを、他方のコアがそのトランザクション送る前に開始し得る。これが起きた場合、RPMドライバは第1のトランザクションをキャンセルし、第2のトランザクションにのみ従うことができる。
【０１０８】
図7は、重複するRPMトランザクションを送り、重複するRPMトランザクションを送るコアの間で進入関数および退出関数を調整するための態様方法700を示している。図7に示す例では、LPRMcおよびLPRMdはグローバルであり(たとえば、コア0およびコア1によって共有され)、rpm.開始関数、rpm.送信関数、ならびにLPRMcおよびLPRMdに関連するメモリロケーションはそれぞれ、値1(LPRMc=1、LPRMd=1、rpm.開始=1、rpm.送信=1)を記憶する。
【０１０９】
ブロック702において、コア1は実行状態である。ブロック704において、コア0はスリープ状態にあり、グローバルモードcおよびdに進入している。
【０１１０】
ブロック706において、コア1はアイドルになり、「ソルバー」プロセスを実行して、様々なリソースについてどの低電力モードに進入すべきかを判断し、モードcおよびdを利用可能な低電力モードと識別し、進入するグローバルLPRMcおよびLPRMdを選択することができる。ブロック708において、コア1はrpm.開始関数を入力し、rpm.開始関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.開始=0)ことができる。rpm.開始関数に関連するメモリロケーションによって記憶されている値は1から0に移行している(すなわち、今やゼロ値を含む)ので、ブロック708においてコア1はRPMトランザクションの開始を始めることができる。
【０１１１】
ブロック710において、コア1はLPRMcおよびLPRMdに進入し、LPRMcおよびLPRMdに関連するメモリロケーションによって記憶されている値を減分する(LPRMc=0、LPRMd=0)ことができる。LPRMcおよびLPRMdに関連するメモリロケーションによって記憶されている値は1から0に移行しているので、ブロック710においてコア1はLPRMcおよびLPRMdをスリープセットに追加することができる。
【０１１２】
ブロック722において、コア1は様々な他の関数を実行する(たとえば、他の進入関数を実行する、値を減分する、など)ことができる。
【０１１３】
ブロック712において、コア0でウェイクアップイベントが検出され得る(たとえば、コア0によって割込みが受信され得る)。ブロック714において、マルチコアプロセッサは、スリープモードから退出し、rpm.開始、rpm.送信、ならびにグローバルLPRMcおよびLPRMdに対応するメモリロケーションの値を増分する(たとえば、LPRMcを1に増分し、LPRMdを1に増分し、rpm.開始を1に増分し、rpm.送信を2に増分する)ことができる。
【０１１４】
ブロック716において、システムはグローバルLPRMcを無効化するスレッドを実行することができる。
【０１１５】
ブロック718において、コア0はアイドル状態に進入し、「ソルバー」プロセスを実行して、様々なリソースについてどの低電力モードに進入すべきかを判断し、利用可能な低電力モードを識別し、進入するグローバルLPRMdを選択することができる。ブロック720において、コア0はrpm.開始を入力し、rpm.開始に対応するメモリロケーションの値を減分し(rpm.開始=0)、新しいRPMトランザクションの開始を始めることができる。また、ブロック720において、RPMドライバは、コア1からの先行トランザクションを落とし得る。一態様では、RPMドライバは、新しいRPMトランザクションの開始を検出したことに応答して、先行トランザクションを落とすように構成され得る。
【０１１６】
ブロック724において、コア1はrpm.送信を入力し、rpm.送信関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.送信=1)ことができる。rpm.送信関数に関連するメモリロケーションは非ゼロ値を含むので、コア1はRPMトランザクションを送らない。
【０１１７】
ブロック726において、コア0はグローバルLPRMdに進入し、LPRMdに関連するメモリロケーションによって記憶されている値を減分する(LPRMd=0)ことができる。LPRMdに関連するメモリロケーションによって記憶されている値はゼロ値を含むので、ブロック726においてコア0はトランザクションにLPRMdを追加することもできる。
【０１１８】
ブロック728において、コア0はrpm.送信を入力し、rpm.送信関数に関連するメモリロケーションによって記憶されている値を減分する(rpm.送信=0)ことができる。rpm.送信関数に関連するメモリロケーションによって記憶されている値は1から0に移行している(すなわち、今やゼロ値を含む)ので、コア0は、コア0が開始したRPMトランザクションを送ることができる(RPMドライバは、コア1によって開始された先行トランザクションを落としている)。ブロック730において、両方のコアがスリープモードになることができ、スリープセットを送ることができ、グローバルLPRMdに進入することができる。
【０１１９】
様々な態様では、スリープセットトランザクションを送る前に、先行トランザクションを無効にして、先行トランザクションからのリソースが望ましくない形でスリープセットに進入することのないようにすることができる。マルチコア環境では、伝送中のアクティブメッセージがすでにある場合、スリープセットが常に送られるとは限らない。しかしながら、SPMは依然としてシャットダウン要求をRPMに送っていることがあるので、RPMは、マスターをスリープセットに移行し、先行スリープセットをデフォルトで使用し得るが、これは望ましくないことがある。これを解決するために、一態様では、リソースが自動無効化のためにマークされた場合に、マスターがスリープからウェイクアップしたときにRPMがリソースのスリープセットを無効にするように、RPMは「自動無効化」機能をサポートすることができる。これにより、マスターがあらゆるスリープセットトランザクションの前に明示的な無効化を送る必要性を回避する。アクティブコンテキストとスリープコンテキストとの間でRPM通信を調整するために、先行スリープセットはすでに自動無効化されていることがあり、その結果、この場合にはいかなるスリープセットにも進入せず、これは望ましい行動である。RPMは、リソース当たりベースでも、グローバルベースでも、自動無効化をサポートする(すなわち、すべてのリソースを常に無効にする、など)ことができる。スリープセットに追加されているリソースの性質に基づいて、どれが好ましいかを決定することは、呼出し側コード次第であり得る。
【０１２０】
様々な態様では、マルチコアプロセッサシステムは、古いスリープセットを無効にするように構成され得る。一態様では、無効化リソースを使用して、スリープセットトランザクションを送る前に先行トランザクションを無効にすることができる。任意のスリープセットトランザクションにおいて第1のメッセージとしてスリープセット無効化要求を送ることができ、RPMドライバは、無効化要求がトランザクションに存在する場合に無効化要求を最初に実行することを保証するように構成され得る。スリープモードに進入する一方で(たとえば、スリープセットトランザクションを送る一方で)無効化要求を送ることで、スリープモードから退出する一方で別個のメッセージとして無効化要求が送られた場合に生じたとみられる潜在的競合条件がなくなる。
【０１２１】
様々な態様では、マルチコアプロセッサシステムは、共有低電力リソースモード(LPRM)を有効化および/または無効化するように構成され得る。共有リソースの低電力モードが有効化されたとき、そのリソースを共有するコアは、低電力モードに進入することが可能であり、それらのスリープセットを再評価するためにウェイクアップされ得る。共有低電力モードが有効化または無効化されたときはいつでも、スリープサブシステムは、コアごとの有効リストを変更して、変動を反映することができる。
【０１２２】
様々な態様では、マルチコアプロセッサシステムは、SPMハンドシェイキング動作を実行するように構成され得る。上述のように、休止する最後のコアは一般に、RPMスリープセットを送るコアである。しかしながら、RPMは、アプリスリープセットに従う前に各コアのSPMからのハンドシェイクを待つことがあるので、休止する最後のコアではないコアは、進入する共有低電力モードが選択された場合に、RPMとハンドシェイクするためにSPMハードウェアをプログラムする必要が依然としてあり得る。
【０１２３】
様々な態様では、コアごとにハンドシェイクLPRM(たとえば、spm.ハンドシェイクLPRM)が存在し得る。各コアは、コアが休止する最後のコアであるかどうかにかかわらずローカルモードおよびグローバルモードについて解くことができるので、最後に休止するコアではないコアは依然として、ハンドシェイクLPRMに進入することができる。RPMを必要とするグローバルモードに進入することを容認できるとコアが判断した場合、コアはRPMとハンドシェイクするためにSPMをプログラムすることができる。
【０１２４】
様々な態様では、マルチコアプロセッサシステムは、RPM時限トリガを送るように構成され得る。上述のように、スリープになる各コアは、それ自体のタイマーハードウェアおよびそれ自体のハードウェイクアップ時間を有し得る。コアがアイドルになるときはいつでも、コアは、選択されたLPRMに基づいて「バックオフタイム」を計算し、計算されたバックオフタイムをローカルハードウェアにプログラムすることができる。最後のコアがスリープになるとき、コアのうちのいずれかに関する次のスケジュールされたウェイクアップ時間を示すためにRPMに時限トリガが送られ得る。時限トリガは、どの低電力モードに進入するかについてRPMがインフォームド決定できるように、いつプロセッサがウェイクアップを期待しているかについての知識をRPMが有することができるようにする。時限トリガは、タイマーハードウェアがシステム低電力モード中に機能することを保証できないので、プロセッサを時間どおりにウェイクアップさせることができるように、RPMがシステム低電力モード中にタイマーを設定できるようにもする。
【０１２５】
休止する最後のコアが、次のコアがウェイクアップする時間を把握するために、様々な態様は、(バックオフを差し引いた後の)コアの絶対ウェイクアップ時間を識別するコアごとの記憶変数を含み得る。LPRM(たとえば、ハンドシェイクLPRMなど)はコアのウェイクアップ時間を計算し、それをグローバル変数として記憶することができる。LPRMは次回ウェイクアップまでの最小時間を計算し、それを時限トリガとしてRPMに送ることもできる。
【０１２６】
適正な時限トリガをRPMに送ることに加えて、休止する最後のコアは、最も早い期限を有するコアにRPMウェイクアップ割込みがルーティングされて、そのコアがウェイクアップし、そのタイマーを処理することができるようにする必要もあり得る。最も早い期限を有するコアは、ローカルタイマー割込みの発動をトリガできるように、システム低電力モードから最初にウェイクアップするように構成され得る。
【０１２７】
各コアの絶対ウェイクアップ時間は共有ロケーションに記憶され得る。各コアは、低電力モードを選択するときに、ソフトウェイクアップの暗示として、次のコアのウェイクアップまでの最小持続時間を使用することができる。
【０１２８】
様々な態様では、マルチコアプロセッサシステムは、コア間のRPM通信を調整するように構成され得る。マスタープロセッサとRPMプロセッサとの間の通信において、マスタープロセッサに対するRPMからの割込みは、コア当たりベースではないことがある。したがって、RPM割込みは、特定の時間に任意のコアにルーティングされ得る。この割込みは、プロセッサから受信されているメッセージに確認応答するために、またプロセッサに通知割込みを送るために、RPMによって使用され得る。
【０１２９】
各コアは、アクティブである間に任意の時間にRPMメッセージを送ることができる。アクティブモードでは、コアは、一度にたった1つのコアがメッセージを送っているようにするために、RPMドライバにおいてオペレーティングシステムロック(すなわち、ミューテックス)を獲得することができる。しかしながら、プロセッサのRPMドライバは、スリープ中にスリープセットを送るとき、INTLOCKされたコンテキスト(INTLOCKed context)でスリープコードが実行されていることがあるので、RPMから戻ってくる確認応答割込みについてポーリングすることができる。
【０１３０】
一方のコアがスリープセットを送ろうと試みるのを、他方のコアがRPMからの確認応答割込みを待っている間は防止するために、RPMドライバは、スリープセットトランザクション要求を受信したときには、まず、オペレーティングシステムロックがすでに保持されているかどうかを確認し得る。保持されている場合、RPMドライバは、スリープセットを送らず、代わりに、要求を無視し、要求したコアに割り込むことができる。割込みが存在することにより、そのコアをスリープから退出させることができる。スリープへの次の進入において、スリープセットを再評価することができ、スリープコードは、該当する場合には再びスリープセットを送ろうと試みることができる。
【０１３１】
RPMドライバは、RPM割込みについてポーリングしているとき、ポーリングしているコアに割込みがルーティングされるように、割込みコントローラドライバとインターフェースすることができる。
【０１３２】
高レベルオペレーティングシステム(HLOS)に応じて、スリープコードは、アクティブモード中にRPMトランザクションを送っているスレッドとは異なるプロセスで実行され得る。そのような場合、スリープトランザクションはスピンロックを使用して、メッセージを送っている他のプロセス間の同期化を確保することができる。
【０１３３】
図8は、あるコアがスリープセットを送ることを、別のコアが確認応答割込みを待っている間は防止するように、コア間のRPM通信を調整するための態様方法800を示している。図8に示す例では、LPRMcおよびLPRMdはグローバルであり(たとえば、コア0およびコア1によって共有され)、rpm.開始関数、rpm.送信関数、ならびにLPRMcおよびLPRMdに関連するメモリロケーションはそれぞれ、値1(LPRMc=1、LPRMd=1、rpm.開始=1、rpm.送信=1)を記憶する。
【０１３４】
ブロック802において、コア1はスリープ状態にあり、グローバルモードcおよびdに進入している。ブロック804において、コア1は実行状態にある。ブロック806において、コア1はアイドルになり、スリープモードについて解き(たとえば、「ソルバー」プロセスを実行し)、進入するグローバルモードを選択することができる。ブロック808において、コア1はRPMトランザクションの開始を始めることができる。
【０１３５】
ブロック810において、コア0でウェイクアップイベントが検出され得る(たとえば、コア0によって割込みが受信され得る)。ブロック812において、マルチコアプロセッサはスリープモードから退出することができる。
【０１３６】
ブロック814において、コア1はスリープモードに進入し、RPMトランザクションを形成することができる。
【０１３７】
ブロック816において、コア0は、RPMメッセージを送るスレッドを実行することができる。また、ブロック816において、RPMドライバはオペレーティングシステムロックを得ることができる。オペレーティングシステムがコア1によってロックされていた場合にはスレッドは実行されないことに留意されたい。上記で説明したように、各コアは、アクティブである間に任意の時間にRPMメッセージを送ることができ、コアは、一度にたった1つのコアがメッセージを送っているようにするために、RPMドライバにおいてオペレーティングシステムロックを獲得することができる。
【０１３８】
ブロック818において、コア0は、メッセージが送られている間はオペレーティングシステムロックを維持することができる。
【０１３９】
ブロック820において、コア1はスリープセットを送ることができる。上記で説明したように、プロセッサのRPMドライバは、スリープセットを送るとき、INTLOCKされたコンテキストでスリープコードが実行されていることがあるので、RPMから戻ってくる確認応答割込みについてポーリングすることができる。
【０１４０】
また、ブロック820において、RPMは、OSロックが保持されているかどうかを確認し、保持されていると判断し得る。上述のように、一方のコアがスリープセットを送ろうと試みるのを、他方のコアがRPMからの確認応答割込みを待っている間は防止するために、RPMドライバは、スリープセットトランザクション要求を受信したときには、まず、オペレーティングシステムロックがすでに保持されているかどうか確認し得る。保持されている場合、RPMドライバは、スリープセットを送らず、代わりに、要求を無視し、要求したコアに割り込むことができる。割込みが存在することにより、そのコアをスリープから退出させることができ、スリープへの次の進入において、スリープセットを再評価することができ、スリープコードは、該当する場合には再びスリープセットを送ろうと試みることができる。
【０１４１】
ブロック822において、コア0は確認応答割込みを受信し、オペレーティングシステムロックを解放することができる。
【０１４２】
ブロック824において、RPMドライバはRPMトランザクションを無視し、割込みをコア1に送ることができる。
【０１４３】
ブロック826において、コア1は、休止しようと試みるが、保留中の割込みにより直ちにウェイクアップすることができる。
【０１４４】
したがって、ブロック812、816、818および822において、コア0は、ウェイク状態に進入し、コア1がそのスリープセットを送っているのと同じ期間中にRPMメッセージを送る。
【０１４５】
上述のように、プロセッサから受信されているメッセージに確認応答するために、また通知割込みを送るためにRPMによって使用され得るRPMからの割込みを、特定の時間に任意のコアにルーティングすることができる。
【０１４６】
図9は、スリープ中にRPMドライバにおいて共有スピンロックをチェックするための態様方法900を示している。ブロック902において、コア0は実行状態にある。ブロック904において、コア1は実行状態にある。ブロック906において、コア1はアイドルになり、スリープモードについて解き(たとえば、「ソルバー」プロセスを実行し)、進入するグローバルモードを選択することができる。ブロック908において、コア0は、スレッドを実行し、RPMメッセージを送ることができる。また、ブロック908において、RPMドライバは、アクティブコンテキストで共有スピンロックを得ることができる。ブロック910において、コア1はスリープモードに進入し、RPMハンドシェイクモードで該当する参照カウントを減分することができる。
【０１４７】
ブロック912において、コア0は、RPM確認応答割込みを待っている間、アイドルになることができる。ブロック914において、コア0は、スリープモードについて解き、進入するグローバルモードを選択することができる。ブロック916において、コア0はRPMトランザクションを開始することができる。ブロック918において、コア0はスリープモードに進入し、RPMトランザクションを形成することができる。ブロック920において、コア0はスリープセットを送ることができる。また、ブロック920において、RPMスリープドライバは、共有スピンロックが保持されているかどうかを確認することができる。図9に示す例では、RPMスリープドライバは、スピンロックが現在保持されていることを検出し、ブロック922において、トランザクションを無視し、スリープセットをまったく送らない。一態様では、両方のSPMがRPMとのハンドシェイクを実行するが、前述の自動無効化機能に従ってRPMでスリープセットがまったく適用されないように、システムが構成され得る。
【０１４８】
ブロック924において、コア0は低電力モードに進入することができる。ブロック926において、すべてのコアはスリープ状態にあり、スリープセットはまったく送られない。ブロック928において、コア0はRPM確認応答トランザクションを受信し、ウェイクアップすることができる。ブロック930において、コア0は確認応答を受信し、スピンロックを解放することができる。
【０１４９】
様々な態様は、いくつかの有用な利益を提供する。様々な態様は、SOCおよびマルチコアプロセッサ上の低電力モードの選択および実施を改善する。たとえば、様々な態様は、ゼロコアが他のコアを監視することを求めず、スリーププロセスの上に存在するプロセスが(他のオペレーティングシステムによって求められるように)コアを監視することを求めず、コアが(他のオペレーティングシステムによって求められるように)ブロックし、すべてのグローバルリソースがアイドルになるまで待つことを求めない。様々な態様はまた、すべてのコア/処理ユニットを対称的に扱うことができるように、また各コアがその動作状態を他のコアとは無関係に選択できるように、SOCおよびマルチコアプロセッサ上で動的低電力リソースモードを実施する。
【０１５０】
電力関数を使用して、どのリソース(ある場合)が低電力リソースモードに置かれるべきかを判断することができる。電力関数は、電力節約量の合計とリソースの動作を休止および回復するエネルギーコストとの関数であり得る。様々な態様は電力関数を使用して、実施される低電力リソースモードの様々な組合せによってもたらされる潜在的システム低電力構成の各々に関連する正味電力節約量を判断することができる。様々な態様は、様々なリソースを低電力リソースモードに置き、それらを動作モードに戻すのに必要な作業量によって相殺された、計算された時間フレームにおいて節約される電力の量として正味電力節約量を計算することができる。様々な態様では、正味電力節約量は、期待アイドル時間Xと傾きMおよびオフセットBとを有する単純な線形多項式モジュールを使用した関数によって計算でき、計算される電力節約量はMX+Bである。
【０１５１】
様々な態様は、設定可能なシステムパラメータに記憶されている値に基づいて、周期的に正味電力節約量を計算することができる。
【０１５２】
様々な態様では、いくつかの機構を低電力リソースモード選択ソルバーで使用して、現在の動作状態および動作条件に基づいて低電力リソースモードの最適セットを識別することができる。ナップザック問題に対する様々な既知のアルゴリズムまたはヒューリスティック解を、低電力リソースモード選択ソルバーに実装することができる。そのような方法は、if/then/else論理ツリーアルゴリズム、テーブル索引アルゴリズム、ならびに様々なリソースの代替的な低電力リソースモードの代替的な置換および組合せを通じて対称的に働く比較方法を伴い得る。
【０１５３】
様々な態様による動的低電力リソースモードの実装形態は、単に追加バッテリー電力を節約することを越えたいくつかの有用な利益ももたらす。1つの利益として、様々なリソースの低電力リソースモードおよびそれらの定義は、モードを実施するコードとはほぼ無関係である。関係するドライバの呼出しは、「進入」関数および「退出」関数の中に含まれ得るので、低電力リソースモードは影響を受けない。ソルバープロセスは、ハードデータ、たとえば、各低電力リソースモードに関する電力およびレイテンシのデータ、ならびに動的制限(たとえば、レイテンシ要件)および現在の動作状態に存在する動作条件に基づいて、いつ低電力リソースモードに進入すべきか、または低電力リソースモードから退出すべきかを判断することに対処し得る。したがって、開発者は、デバイスに適切な低電力リソースモードをハードコーディングするために、そのようなパラメータの組合せを予想しようと試みる必要がない。
【０１５４】
上述の態様の別の利益として、コンピューティングデバイスは、事前設定または事前定義されたシステムモードセットから単一の定義された低電力リソースモードを選択することを求められないが、現在の動作状態、リソース、動作条件、推定スリープサイクル、デバイス構成などに基づいてシステムに関する低電力構成を動的に実装する低電力リソースモードの組合せを選択することができる。これは、前の既知の電力管理システムが、事前定義された低電力構成のセットの間で(たとえば、モード1、モード2、またはモード3のうちの1つを)選択するように構成される一方、上述の態様によりデバイスは、低電力モードに進入することが可能なリソースごとに1つまたは複数の低電力リソースモードを動的に選択することができ、現在の状態および条件に最も適したシステム低電力構成を実装する柔軟性が格段に増すので、有利である。たとえば、特定のプロセッサが、それぞれ低電力リソースモードA'、B'、およびC'を有する3つのリソースA、B、およびCを有すると仮定する。低電力リソースモードは様々なレイテンシを有してよく、たとえば低電力リソースモードA'は0.4msのレイテンシを有してよく、低電力リソースモードB'は0.5msのレイテンシを有してよく、低電力リソースモードC'は0.6msのレイテンシを有してよい。たとえば、クライアントが1ミリ秒のレイテンシ要件をシステムに課した(たとえば、許容可能な最悪状況レイテンシを1msとする)場合、リソースA、B、およびCの低電力モードは、選択された低電力モードの組合せが最悪状況レイテンシ要件を満たす限り、互いに無関係に有効化または無効化され得る。たとえば、プロセッサがアイドル状態に入り、リソースA、B、およびCがすべて有効化された場合、システムは低電力リソースモードA'(0.4msのレイテンシ)、低電力リソースモードB'(0.5msのレイテンシ)、低電力リソースモードC'(0.6msのレイテンシ)、モードAおよびB(0.9msのレイテンシ)、またはモードAおよびC(1msのレイテンシ)を選ぶことができる。したがって、様々な態様では、ソルバータスクは、1msという最悪状況レイテンシ耐性を踏まえて、電力を最大限節約するために低電力リソースモードの最良セットを選ぶことができる。
【０１５５】
さらに、通常の電力管理システムは、クライアントが非アクティブモードおよびアクティブモードを有し、レイテンシ耐性が現在のパフォーマンス状態に依存することを求める。上述の様々な態様では、クライアント機構は「アクティブである」または「非アクティブである」ではなく、「存在する」または「存在しない」場合がある。すなわち、様々な態様では、様々な低電力リソースモードは、動作状態(たとえば、アクティブまたは非アクティブ)に基づいて選択されるのではなく、あり得る状態を除去するためにトラバースされ得る。さらに、様々な態様によりクライアントは、様々なリソースについて低電力リソースモードを作成、登録、および/または無視し、低電力リソースモードの組合せを動的に選択して、多数のあり得るシステム低電力構成を実現することができる。これによりシステムクライアントは、デバイスの低電力状態をさらに制御し、微調整することができる。
【０１５６】
上述の態様の別の利益として、コンピューティングデバイスプロセッサは、システムクライアントの様々な動作モードを知っている必要はない。様々な態様では、クライアントはレイテンシ耐性のみを直接提示することができる。したがって、プロセッサは、各クライアントの動作状態に関連する様々な詳細について知っている必要はない。プロセッサは、クライアントの登録済みレイテンシ耐性のみを知り、報告されたレイテンシ耐性に基づいて低電力リソースモードに進入する低電力リソースを選択する必要がある。様々な態様では、耐性および低電力モードの設定は個別エンティティごとに行われ得る。たとえば、USBクライアントは、レイテンシ耐性を設定し得るが、必ずしも低電力モードを設定するとは限らない。各低電力リソースモードは、レイテンシ問題とは完全に無関係な所与のスリープサイクルで低電力リソースモードに進入できるかどうかを示すシグナリング機構のセットを有し得る。
【０１５７】
さらなる利益として、一態様では、クライアントがどのくらいの間スリープ状態にあることを期待するかを明示できるように、新しいNPAプログラミングノードが提供され得る。たとえば、クライアントが「X」マイクロ秒よりも長い間(最長71時間)スリープ状態にある(すなわち、プロセッサまたはリソースを利用しない)ことを期待していることを明示できるように、NPAプログラミングノード「/core/processor/wakeup」が提供され得る。そのようなプログラミング能力は、プロセッサのアイドル状態および低電力構成と両立するクライアントアプリケーションの開発を単純化し得る。
【０１５８】
さらなる態様では、ソルバー計算の結果をメモリにキャッシュして、アイドル状態に進入し得るときに同一または同様の動作条件(たとえば、動作状態、温度、およびレイテンシ制限)が存在する場合にソルバーアルゴリズムを再実行する必要なしに、最適な低電力構成を再利用できるようにし得る。このようにして、プロセッサは、最適またはほぼ最適な電力節約をなお達成する一方でソルバーアルゴリズムを実行するプロセスを省略することによって、アイドル状態に素早く進入することができる。さらなる態様では、動作状態および動作条件は、キャッシュされた最適低電力構成が統計的に割り出された条件/状態範囲にリンクされ得るように、統計的に分析され得る。
【０１５９】
様々な態様での使用に好適な典型的なモバイルデバイス1000は、図10に示される構成要素を共通に有する。たとえば、例示的なモバイル受信機デバイス1000は、内部メモリ1052と、ディスプレイ1053と、スピーカー1059とに結合された、プロセッサ1051を含み得る。さらに、モバイルデバイス1000は、プロセッサ1051に結合されたモバイルマルチメディア受信機1056に接続された、電磁放射を送受信するためのアンテナ1054を有し得る。いくつかの態様では、モバイルマルチメディア受信機1056は、受信機1056の動作を制御し、デバイスプロセッサ1051と通信するためのデジタル信号プロセッサ(DSP)などの内部プロセッサ1058を含み得る。モバイルデバイスは通常、使用者の入力を受信するためのキーパッド1056または小型キーボードおよびメニュー選択ボタンまたはロッカースイッチ1057も含む。
【０１６０】
プロセッサ1051は、本明細書で説明した様々な態様の機能を含む、様々な機能を実行するようにプロセッサ実行可能ソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルマイクロプロセッサ、マイクロコンピュータ、または1つもしくは複数の多重プロセッサチップであり得る。また、様々な態様の機能は、DSP実行可能命令で構成された受信機1056内のDSPプロセッサ1058において実施され得る。一般に、ソフトウェアアプリケーションおよびプロセッサ実行可能命令は、アクセスされプロセッサ1051にロードされる前に、内部メモリ1052に記憶され得る。いくつかのモバイルデバイスでは、プロセッサ1051は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。一部のモバイルデバイスでは、セキュアなメモリが、プロセッサ1051に結合された別個のメモリチップ中にあり得る。多くのモバイルデバイス1050では、内部メモリ1052は、揮発性メモリ、またはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書では、メモリへの一般的な言及は、内部メモリ1052と、モバイルデバイスに接続されるリムーバブルメモリと、プロセッサ1051自体の中のメモリとを含む、プロセッサ1051によってアクセス可能なすべてのメモリを指す。
【０１６１】
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供したものであり、様々な態様のステップを提示された順序で実施しなければならないことを要求または暗示するものではない。当業者が諒解するように、上記の態様におけるステップの順序は、どのような順序で実施されてもよい。「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではなく、これらの単語は、単に、方法の説明において読者を案内するために使用される。さらに、たとえば、冠詞「a」、「an」または「the」の使用による単数形での請求要素への言及は、その要素を単数に限定するものとして解釈されるべきではない。
【０１６２】
本明細書で開示された態様に関して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路、およびステップを、上記では概してそれらの機能に関して説明した。そのような機能をハードウェアとして実装するか、ソフトウェアとして実装するかは、特定の適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明した機能を特定の適用例ごとに様々な方法で実装し得るが、そのような実装の決定は、本発明の範囲からの逸脱を生じるものと解釈すべきではない。
【０１６３】
本明細書に開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、マルチメディア放送受信機チップ内のDSP、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェア構成要素、または、本明細書に記載された機能を実施するように設計されたそれらの任意の組合せで、実装または実施され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPとマイクロプロセッサとの組合せ、複数のマイクロプロセッサ、DSPコアと連携する1つまたは複数のマイクロプロセッサ、あるいは任意の他のそのような構成として実装され得る。代替的に、いくつかのステップまたは方法が、所与の機能に固有の回路によって実行され得る。
【０１６４】
1つまたは複数の例示的な態様では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの組合せに実装することができる。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶され、またはコンピュータ可読媒体を介して送信され得る。本明細書で開示された方法またはアルゴリズムのステップは、コンピュータ可読媒体上に常駐し得る、実行されるプロセッサ実行可能なソフトウェアモジュールで実施され得る。コンピュータ可読媒体は、ある場所から別の場所へのコンピュータプログラムの転送を可能にする任意の媒体を含む、コンピュータ記憶媒体と通信媒体の両方を含む。記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な媒体であってよい。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形式で所望のプログラムコードを搬送もしくは記憶するために使用され得るとともに、コンピュータによってアクセスされ得る任意の他の媒体を備えることができる。また、任意の接続は、厳密には、コンピュータ可読媒体と呼ばれる。たとえば、ソフトウェアが、同軸ケーブル、光ファイバケーブル、ツイストペア、デジタル加入者回線(DSL)、または赤外線、無線、およびマイクロ波などのワイヤレス技術を使用して、ウェブサイト、サーバ、または他のリモートソースから送信される場合、同軸ケーブル、光ファイバケーブル、ツイストペア、DSL、または赤外線、無線、およびマイクロ波などのワイヤレス技術は、媒体の定義に含まれる。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク（登録商標）、光ディスク、デジタル多用途ディスク(DVD)、フロッピー（登録商標）ディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生し、ディスク(disc)は、レーザーで光学的にデータを再生する。上記の組合せもコンピュータ可読媒体の範囲内に含めるべきである。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、機械可
読媒体および/またはコンピュータ可読媒体上のコードおよび/または命令の1つまたは任意の組合せ、またはそのセットとして常駐し得る。
【０１６５】
開示された態様の上記の説明は、当業者の誰でもが本発明を製作または使用できるように提供されたものである。これらの態様への様々な修正が当業者には容易に明らかであり、本明細書で定義される一般的な原理は、本発明の趣旨または範囲を逸脱することなく他の態様に適用され得る。したがって、本発明は、本明細書で示された態様に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に合致する、最も広い範囲を与えられるべきである。
【符号の説明】
【０１６６】
2  ノード電力アーキテクチャ(NPA)内のプロセス(すなわち、ノード)
4  水晶発振器、水晶発振器リソース
6  利用可能な低電力モード、ゲート型動作状態
8  利用可能な低電力モード、完全シャットダウン
200  システムオンチップ、SOC
202  デジタル信号プロセッサ、DSP、プロセッサ
204  モデムプロセッサ、プロセッサ
206  グラフィックスプロセッサ、プロセッサ
208  アプリケーションプロセッサ、プロセッサ
210  コプロセッサ
214  アナログ回路およびカスタム回路、カスタム回路
216  システム構成要素およびリソース、システム構成要素
302  マルチコアプロセッサ
304  処理コア
306  処理コア
308  処理ユニット
310  処理ユニット
312  レベル1(L1)キャッシュ
314  レベル1(L1)キャッシュ
316  レベル2(L2)キャッシュ
318  バス/相互接続インターフェース、バス/相互接続
320  主メモリ、主メモリユニット
322  入力/出力モジュール
324  外部メモリ/ハードディスク
400  マルチコアプロセッサシステム
404  処理コア、コア、プロセッサコア
406  処理コア、コア、プロセッサコア
408  サブシステム電力管理(SPM)ハードウェアブロック
410  サブシステム電力管理(SPM)ハードウェアブロック
412  コアタイマー
414  コアタイマー
416  割込みモジュール
418  アイドルスレッド
420  アイドルスレッド
422  ローカル留置モジュール、留置モジュール、モジュール
424  ローカル留置モジュール、留置モジュール、モジュール
426  ローカルウェイクアップモジュール、ウェイクアップモジュール、コア固有のウェイクアップモジュール
428  ローカルウェイクアップモジュール、ウェイクアップモジュール、コア固有のウェイクアップモジュール
430  ローカルレイテンシモジュール、レイテンシモジュール
432  ローカルレイテンシモジュール、レイテンシモジュール
434  グローバルレイテンシモジュール、レイテンシモジュール
436  グローバルウェイクアップモジュール、ウェイクアップモジュール
438  リソース、ローカルリソース
440  リソース、ローカルリソース
450  リソース電力マネージャ(RPM)
452  スリープ構造、sleep_lprノード
454  リソース、共有リソース
500  態様方法
600  態様方法
700  態様方法
800  態様方法
900  態様方法
1000  モバイルデバイス、モバイル受信機デバイス
1050  モバイルデバイス
1051  プロセッサ、デバイスプロセッサ
1052  内部メモリ
1053  ディスプレイ
1054  アンテナ
1056  モバイルマルチメディア受信機、受信機、キーパッド
1057  ロッカースイッチ
1058  内部プロセッサ、DSPプロセッサ
1059  スピーカー
【図１】
0005752326.tif 000004
【図２】
0005752326.tif 000005
【図３】
0005752326.tif 000006
【図４】
0005752326.tif 000007
【図５】
0005752326.tif 000008
【図６】
0005752326.tif 000009
【図７】
0005752326.tif 000010
【図８】
0005752326.tif 000011
【図９】
0005752326.tif 000012
【図１０】
0005752326.tif 000013