様々な態様が添付の図面を参照して詳細に説明される。可能な場合は常に、同じ参照番号は、図面全体を通して同じまたは同様の部分を指すために使用される。特定の例および実装形態に対して行われる参照は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
「例示的な」という言葉は、「例、事例、または例示として機能する」ことを意味するように本明細書で使用される。「例示的な」ものとして本明細書で説明されるいずれの態様も、必ずしも他の態様よりも好ましいか、または有利であると解釈されるとは限らない。
本明細書では、「アプリケーション」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、およびパッチのような、実行可能なコンテンツを有するファイルも含み得る。さらに、本明細書で言及される「アプリケーション」は、開封される必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルなどの、本質的に実行可能ではないファイルも含み得る。
「コンテンツ」という用語は、オブジェクトコード、スクリプト、バイトコード、マークアップ言語ファイル、およびパッチのような、実行可能なコンテンツを有するファイルも含み得る。さらに、本明細書で言及される「コンテンツ」は、開封される必要があり得るドキュメント、またはアクセスされる必要がある他のデータファイルのような、本質的に実行可能ではないファイルも含み得る。
本明細書で使用される場合、「コンポーネント」、「データベース」、「モジュール」、「システム」などの用語は、ハードウェア、ファームウェア、ハードウェアとソフトウェアの組合せ、ソフトウェア、実行中のソフトウェアを問わず、コンピュータ関連のエンティティを指すことが意図されている。たとえば、コンポーネントは、プロセッサ上で実行されているプロセス、プロセッサ、オブジェクト、実行ファイル、実行スレッド、プログラム、および/またはコンピュータであり得るが、これらに限定されない。例として、コンピューティングデバイス上で実行されているアプリケーションとコンピューティングデバイスの両方が、コンポーネントであり得る。1つまたは複数のコンポーネントは、プロセスおよび/または実行スレッド内に存在することがあり、1つのコンポーネントは、1つのコンピュータに局在し、かつ/または2つ以上のコンピュータに分散されることがある。さらに、これらのコンポーネントは、様々なデータ構造が記憶されている様々なコンピュータ可読媒体から実行することができる。コンポーネントは、1つまたは複数のデータパケット(たとえば、信号によって、ローカルシステム、分散システム中の別のコンポーネントと、かつ/または、インターネットのようなネットワークにわたって他のシステムと対話する、1つのコンポーネントからのデータ)を有する信号に従うなどして、ローカルプロセスおよび/またはリモートプロセスによって通信することができる。
最初に図1および図2を参照すると、例示的なポータブルコンピューティングデバイス(PCD)が示されており、全体的に100と表される。示されるように、PCD100は、筐体102を含み得る。筐体102は、上側筐体部分104および下側筐体部分106を含み得る。図1は、上側筐体部分104がディスプレイ108を含み得ることを示す。特定の態様では、ディスプレイ108はタッチスクリーンディスプレイであり得る。上側筐体部分104は、トラックボール入力デバイス110も含み得る。さらに、図1に示されるように、上側筐体部分104は電源投入ボタン112および電源切断ボタン114を含み得る。図1に示されるように、PCD100の上側筐体部分104は、複数のインジケータライト116およびスピーカー118を含み得る。各インジケータライト116は、発光ダイオード(LED)であり得る。
特定の態様では、図2に示されるように、上側筐体部分104は下側筐体部分106に対して可動である。具体的には、上側筐体部分104は下側筐体部分106に対してスライド可能であり得る。図2に示されるように、下側筐体部分106はマルチボタンキーボード120を含み得る。特定の態様では、マルチボタンキーボード120は標準的なQWERTYキーボードであり得る。マルチボタンキーボード120は、上側筐体部分104が下側筐体部分106に対して動かされたときに現れ得る。図2は、PCD100が下側筐体部分106上にリセットボタン122を含み得ることをさらに示す。
図3を参照すると、ポータブルコンピューティングデバイス(PCD)の例示的で非限定的な態様が示され、全体的に320と指定される。示されるように、PCD320はマルチコアCPU324を含むオンチップシステム322を含む。マルチコアCPU324は、第0のコア325、第1のコア326および第Nのコア327を含み得る。
図3に示されるように、ディスプレイコントローラ328およびタッチスクリーンコントローラ330がマルチコアCPU324に結合される。一方、オンチップシステム322の外部にあるディスプレイ/タッチスクリーン332が、ディスプレイコントローラ328およびタッチスクリーンコントローラ330に結合される。
図3は、ビデオエンコーダ334、たとえば位相反転線(PAL)エンコーダ、順次式カラーメモリ(SECAM:sequential couleur a memoire)エンコーダまたは全米テレビジョン方式委員会(NTSC)エンコーダがマルチコアCPU324に結合されることをさらに示す。さらに、ビデオ増幅器336が、ビデオエンコーダ334およびディスプレイ/タッチスクリーン332に結合される。また、ビデオポート338がビデオ増幅器336に結合される。図3に示されるように、ユニバーサルシリアルバス(USB)コントローラ340がマルチコアCPU324に結合される。また、USBポート342がUSBコントローラ340に結合される。メモリ344および加入者識別モジュール(SIM)カード346も、マルチコアCPU324に結合され得る。さらに、図3に示されるように、デジタルカメラ348がマルチコアCPU324に結合され得る。例示的な態様では、デジタルカメラ348は、電荷結合デバイス(CCD)カメラまたは相補型金属酸化物半導体(CMOS)カメラである。
図3にさらに示されるように、ステレオオーディオコーデック350がマルチコアCPU324に結合され得る。その上、オーディオ増幅器352が、ステレオオーディオコーデック350に結合され得る。例示的な態様では、第1のステレオスピーカー354および第2のステレオスピーカー356が、オーディオ増幅器352に結合される。図3は、マイクロフォン増幅器358もステレオオーディオコーデック350に結合され得ることを示す。さらに、マイクロフォン360が、マイクロフォン増幅器358に結合され得る。特定の態様では、周波数変調(FM)ラジオチューナー362がステレオオーディオコーデック350に結合され得る。また、FMアンテナ364がFMラジオチューナー362に結合される。さらに、ステレオヘッドフォン366がステレオオーディオコーデック350に結合され得る。
図3は、無線周波数(RF)送受信機368がマルチコアCPU324に結合され得ることをさらに示す。RFスイッチ370は、RF送受信機368およびRFアンテナ372に結合され得る。図3に示されるように、キーパッド374がマルチコアCPU324に結合され得る。また、マイクロフォンを備えたモノヘッドセット376が、マルチコアCPU324に結合され得る。さらに、バイブレータデバイス378がマルチコアCPU324に結合され得る。図3は、電源380がオンチップシステム322に結合され得ることも示す。特定の態様では、電源380は電力を必要とするPCD 320の様々なコンポーネントに電力を供給する直流(DC)電源である。さらに、特定の態様では、電源は、充電式DCバッテリー、または交流(AC)電源に接続されたAC-DC変換器から得られるDC電源である。
図3は、PCD 320がデータネットワーク、たとえばローカルエリアネットワーク、パーソナルエリアネットワーク、任意の他のネットワークにアクセスするために使用され得るネットワークカード388も含み得ることをさらに示す。ネットワークカード388は、Bluetooth(登録商標)ネットワークカード、WiFiネットワークカード、パーソナルエリアネットワーク(PAN)カード、パーソナルエリアネットワーク超低電力技術(PeANUT)ネットワークカード、または当技術分野でよく知られている任意の他のネットワークカードであり得る。さらに、ネットワークカード388は、チップに組み込まれることがあり、すなわち、ネットワークカード388は、チップ内のフルソリューションであってよく、個別のネットワークカード388ではなくてもよい。
図3に示されるように、ディスプレイ/タッチスクリーン332、ビデオポート338、USBポート342、カメラ348、第1のステレオスピーカー354、第2のステレオスピーカー356、マイクロフォン360、FMアンテナ364、ステレオヘッドフォン366、RFスイッチ370、RFアンテナ372、キーパッド374、モノヘッドセット376、バイブレータ378、および電源380は、オンチップシステム322の外部にある。
特定の態様では、本明細書で説明される方法ステップの1つまたは複数は、コンピュータプログラム命令としてメモリ344に記憶され得る。これらの命令は、本明細書で説明される方法を実行するためにマルチコアCPU324によって実行され得る。さらに、マルチコアCPU324、メモリ344、またはそれらの組合せは、マルチコアCPU324内の各CPUまたはコアの電力を動的に制御するために本明細書で説明される方法ステップの1つまたは複数を実行するための手段として機能し得る。
図4を参照すると、処理システムが示され、全体的に400と表される。特定の態様では、処理システム400は、図3に関して上で説明されたPCD 320に組み込まれ得る。示されるように、処理システム400はマルチコア中央処理装置(CPU)402、およびマルチコアCPU402に接続されたメモリ404を含み得る。マルチコアCPU402は、第0のコア410、第1のコア412および第Nのコア414を含み得る。第0のコア410は、その上で実行される第0の動的クロックおよび電圧スケーリング(DCVS)アルゴリズム416を含み得る。第1のコア412は、その上で実行される第1のDCVSアルゴリズム417を含み得る。さらに、第Nのコア414は、その上で実行される第NのDCVSアルゴリズム418を含み得る。特定の態様では、各DCVSアルゴリズム416、417、418は、それぞれのコア410、412、414上で独立に実行され得る。
さらに、示されるように、メモリ404は、それに記憶されたオペレーティングシステム420を含み得る。オペレーティングシステム420はスケジューラ422を含んでよく、スケジューラ422は第1の実行キュー424、第2の実行キュー426、および第Nの実行キュー428を含んでよい。メモリ404は、それに記憶された第1のアプリケーション430、第2のアプリケーション432、および第Nのアプリケーション434も含み得る。
特定の態様において、アプリケーション430、432、434は、マルチコアCPU402内のコア410、412、414で処理されるべき1つまたは複数のタスク436をオペレーティングシステム420に送信することができる。タスク436は、単一のタスク、スレッド、またはこれらの組合せとして処理または実行され得る。さらに、スケジューラ422は、マルチコアCPU402内での実行のために、タスク、スレッド、またはそれらの組合せをスケジューリングすることができる。さらに、スケジューラ422は、実行キュー424、426、428に、タスク、スレッド、またはこれらの組合せを配置することができる。コア410、412、414は、タスク、スレッド、またはそれらの組合せを、たとえばコア410、412、414でのそれらのタスクおよびスレッドの処理または実行のためにオペレーティングシステム420によって命令された通りに、実行キュー424、426、428から取り出すことができる。
図4は、メモリ404がそれに記憶された並列処理モニタ440を含み得ることも示す。並列処理モニタ440は、オペレーティングシステム420およびマルチコアCPU402に接続され得る。具体的には、並行処理モニタ440は、オペレーティングシステム420内のスケジューラ422に接続され得る。
図5を参照すると、中央処理装置の電力を動的に制御する方法の第1の態様が示されており、全体的に500と表される。方法500は、DOループを伴うブロック502で始まってよく、このDOループにおいて、デバイスの電源が投入されると以下のステップが実行され得る。
ブロック504において、電力コントローラ、たとえば動的クロックおよび電圧スケーリング(DCVS)アルゴリズムが、1つまたは複数のCPUを監視することができる。判断506において、電力コントローラは、CPUに対する過渡性能期限が切れたかどうかを判定することができる。切れていない場合、方法500は終了し得る。それ以外の場合、すなわち過渡性能期限が切れている場合、方法500はブロック508に進むことができ、電力コントローラは、CPUをより高い性能レベル、すなわち次のより高い動作周波数へと移行することができる。一態様では、コントローラは、CPUを最大の性能レベル、すなわち最大のCPU周波数へと移行することができる。しかしながら、別の態様では、CPUは最大の性能レベルに移らなくてよい。CPUは、中間のレベルに移り、次いで、最大のレベルと別のより高い性能レベルのいずれかへと再び移ってよい。この移行の頻度の値を決定するために、中間的な移行の数および移行と移行の間の時間の長さが使用され得る。
ブロック510において、CPUはアイドル条件に入ることができる。さらに、ブロック512において、過渡性能期限が再設定され得る。ブロック514において、CPUはアイドル条件から出ることができる。判断516へと移り、電力コントローラは、達しつつあるCPU周波数が最大のCPU周波数にあるかどうかを判定することができる。そうである場合、方法500は終了することができる。それ以外の場合、すなわち、CPU周波数が最大のCPU周波数にない場合、方法はブロック518に進むことができ、タイマーが再スケジューリングされ得る。そして、方法500は終了することができる。
図6を参照すると、中央処理装置の電力を動的に制御する方法の第2の態様が示されており、全体的に600と表される。ブロック602から開始して、中央処理装置(CPU)はアイドル状態に入ることができる。ブロック604において、電力コントローラ、たとえば動的クロックおよび電圧スケーリング(DCVS)アルゴリズムは、現在の時間(CurrentTime)に等しくアイドル状態開始時間(StartIdleTime)を設定することができる。さらに、ブロック606において、電力コントローラは、アイドル状態開始時間(StartIdleTime)からアイドル状態終了時間(EndIdleTime)を減算することによって、ビジー時間(BusyTime)を決定することができる。
ブロック608において、CPUは、割込みのためのソフトウェア待機(SWFI)条件に入ることができる。ブロック610において、CPUはSWFI条件から出ることができる。ブロック612に移り、電力コントローラは、現在の時間(CurrentTime)に等しくアイドル状態終了時間(EndIdleTime)を設定することができる。さらに、ブロック614において、電力コントローラは、アイドル状態終了時間(EndIdleTime)からアイドル状態開始時間(StartIdleTime)を減算することによって、アイドル時間(IdleTime)を決定することができる。ブロック616において、電力コントローラは、更新安定状態フィルタ(UpdateSteadyStateFilter)、ビジー時間(BusyTime)、およびアイドル時間(IdleTime)から、達しつつあるCPU周波数(CPUFreq)を決定することができる。その後、方法600は図7のブロック702に続き得る。
ブロック702において、電力コントローラは、次の式を使用して実効過渡バジェット(EffectiveTransientBudget)を決定することができる。
EffectiveTransientBudget=(TransientResponseDeadline×NextCPUFreq)/(NextCPUFreq-CPUFreq)
ここで、
TransientResponseDeadline=過渡応答期限、すなわちスラック(slack)バジェット、
NextCPUFreq=達しつつあるCPU周波数よりも一段高い周波数である次のCPU周波数、かつ、
CPUFreq=達しつつあるCPU周波数(CPUFreq)
である。
特定の態様では、クロックスケジューリングオーバーヘッド(ClockSchedulingOverhead)およびクロックスイッチオーバーヘッド(ClockSwitchOverhead)もEffectiveTransientBudgetに加算され得る。さらに、電圧変化オーバーヘッド(VoltageChangeOverhead)がEffectiveTransientBudgetに加算され得る。ブロック704に移り、電力コントローラは、アイドル状態終了時間(EndIdleTime)に実効過渡バジェット(EffectiveTransientBudget)を加算したものに等しいより高い周波数(SetJumpToFrequency)へと移るように、期限を設定することができる。別の態様では、移るための期限は、現在の時間に過渡バジェットを加算した時間であり得る。その後、方法600は終了することができる。
特定の態様では、図6および図7とともに説明された方法600は、過渡期限が切れるまでの、CPUがDCVSによって決定される周波数に留まり得る時間の長さを計算し、その時間の長さの分だけ未来に、より高いCPU周波数への移行をスケジューリングするために使用され得る。より高い周波数への移行の前にアイドル状態に再び入る場合、スケジューリングされた移行は取り消され得る。方法600は、EffectiveTransientBudgetとして決定される時間の長さの分だけ、より高い周波数への移行を遅らせることができる。
本明細書で説明される方法ステップは、必ずしも説明されるような順序で実行される必要はないことを理解されたい。さらに、「その後」、「次いで」、「次に」などの語は、ステップの順序を限定することを意図していない。これらの語は、方法ステップの説明を通じて読者を案内するために使用されているにすぎない。さらに、本明細書で説明される方法は、ポータブルコンピューティングデバイス(PCD)上で実行可能なものとして説明されている。PCDは、携帯電話デバイス、携帯情報端末デバイス、スマートブックコンピューティングデバイス、ネットブックコンピューティングデバイス、ラップトップコンピューティングデバイス、デスクトップコンピューティングデバイス、またはそれらの組合せであってよい。
特定の態様では、DCVSアルゴリズムは、CPU負荷/アイドル時間を測定し、電力消費を減らしながら満足のいくシステム性能を依然として提供しようとして作業負荷に追随するようにCPUクロック周波数を動的に調整する、機構である。作業負荷が変化するに従い、CPUのスループットの変化は作業負荷の変化に追随し得るが、同時に、それに対して必然的に遅れ得る。残念ながら、このことは、作業負荷がサービス品質(QoS)の要件を有する場合には問題をもたらすことがあり、それは、DCVSアルゴリズムが作業負荷に対して十分迅速に追随できないからである。さらに、タスクが失敗することがある。
多くのDCVS技法は、CPUの安定状態の性能要件を測定することと、CPUの周波数および電圧を、安定状態のCPU使用量を満たし得る最低のレベルに設定することとを伴う。これは通常、ある期間にわたってCPU利用率(ビジーの百分率)を測定し、平均のCPU利用率が高い閾値と低い閾値の間に来るようなレベルにCPUの性能レベルを設定することによって行われる。平均をとる期間は、クロック周波数を変更する頻度を最小限にしながら、適度な応答性を保つように最適化される。過渡的な作業負荷および/または新たな作業負荷の開始に応答するために、CPU周波数を急速に上げるためにパニック的な入力が利用されることがあった。
DCVSが作業負荷に対して遅れ、タスクの失敗を引き起こすという問題を避けるために、本明細書で開示されるシステムおよび方法は、過渡性能保証を提供する。過渡性能保証は、より高い性能レベルでの実行と比較されたときの、継続的にビジーであるパルスが遅れ得る時間の最大の長さとして定義され得る。これは、過渡性能期限が切れる前により高い性能レベルに移り、アイドル状態になるときには常に期限を再設定することによって遂行されることが可能であり、それは、CPUがアイドル状態である場合、CPUは定義上、過負荷状態にないからである。本明細書で開示されるように、システムがアイドル状態から出てシステムのCPUが最大の周波数で動作していないときには常にQoSの保証を守るように、タイマーが再スケジューリングされ得る。
過渡性能保証の電力への影響を最小限にするために、本システムおよび方法は、期限を満たすために入来するパルスが周波数の上昇を要求し得る確率を、最小限にする。これは、図8に示されるように、実効過渡バジェットが使い果たされるまで、周波数、すなわち性能レベルの変化を遅らせて、次いで、より高い性能レベルへと直接移り、パルスが完了するまでそこに留まることによって、遂行され得る。
特定の態様では、実効過渡バジェットは、現在の性能レベルに対してスケーリングされた過渡応答期限として計算される。たとえば、CPUが最大のクロックレートの75%で動作しており過渡応答期限が16msである場合、実効過渡バジェットは64ms、すなわち16ms/(1-0.75)である。実効過渡バジェットは、バジェットを使い果たす前にCPUが現在の性能レベルでどの程度長く動作できるかを表す。CPUがアイドル状態である場合、実効過渡バジェットは、過渡応答期限と同じであり得る。最大の性能レベルにある場合、実効過渡バジェットは図9に示されるように無限である。
本明細書で説明される方法を使用すると、システムは、タスクが最大のレベル以外の何らかのレベルで実行され得る最大の時間の長さに対する厳格な限度を提供できるので、QoSの保証を要求するタスクの完了に対する計算可能な限度を暗黙的に提供しながら、動的なCPUクロックのスケーリングを可能にできる。この限度は、どのタスクが現在実行されているか、全体的なシステムの性質、DCVSアルゴリズムの設計または他の性質に基づいて設定されてよく、システムがQoS要件を有するタスクを全く実行していない場合、またはCPUが最大のクロックで動作している場合、完全に無効にされてよい。
特定の態様では、本方法は、期限が切れたときに最大の周波数へと移る代わりに、より短い内部実効期限を設定し、1つまたは複数の中間の周波数へと移り、同時に、最大のQoS遅延が使い果たされる前にCPUが最大の周波数にあることを依然として確実にすることによって、拡張され得る。さらに、本方法は、良好に定義された過渡QoSが保たれながら、全体のCPU電力を同時に下げることを、実質的に確実にし得る。
本明細書で説明されるシステムおよび方法は、便宜的サンプリングを利用することがある。言い換えると、本システムおよび方法は、タイマーの時間切れを定期的に確認することができる。別の態様では、本システムおよび方法は、便宜的サンプリングを利用しないことがある。
上で論じられたように、様々な態様は、タスクの完了のための計算に対して、厳格かつ計算可能な限度(たとえば、性能保証)を提供する。様々な態様では、そのような性能保証は、プロセッサ性能を向上させるために、かつ/または、ポータブルコンピューティングデバイス(PCD)上での電力消費を減らすために、動的クロックおよび電圧/周波数スケーリング(DCVS)方法の一部として実施されてよく、PCDは、携帯電話、スマートフォン、個人用マルチメディアプレーヤーまたはモバイルマルチメディアプレーヤー、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、スマートブック、ウルトラブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応携帯電話、ワイヤレスゲームコントローラ、および、メモリ、プログラム可能プロセッサ、またはコア(本明細書では総称的に「プロセッシングコア」)を含み、電力節減方法が有益であるようなバッテリー電力のもとで動作する、同様の個人用電子デバイスなどの、モバイルデバイスを含む。さらに、様々な態様は、バッテリー電力により動作するポータブルコンピューティングデバイスおよびモバイルコンピューティングデバイスに対して特に有用であるが、態様は一般に、プロセッサを含み電力消費の低減が有益である任意のコンピューティングデバイス(たとえば、汎用コンピュータ、デスクトップコンピュータ、サーバなど)において有用である。
一般に、チップによって消費される動的電力(スイッチング電力)はC×V2×fであり、ここでCはクロック周期あたりでスイッチングされるキャパシタンスであり、Vは電圧であり、fはスイッチング周波数である。したがって、周波数が変化するにつれて、動的電力は周波数に対して線形に変化する。動的電力は、プロセッサチップによって消費される全体の電力の約3分の2を占め得る。チップが動作する周波数は動作電圧に関連があり得るので、電圧スケーリングは周波数スケーリングとともに行われ得る。電圧レギュレータのような何らかの電子コンポーネントの効率は温度の上昇に伴って低下し得るので、電力消費は温度とともに増える。電力使用量の増大は温度を上昇させ得るので、電圧または周波数の上昇は、システムの電力需要をさらに増大させ得る。したがって、コンピューティングデバイスのバッテリー動作継続時間は、コンピューティングデバイスのプロセッサがアイドル状態であるときまたは軽負荷であるときに、プロセッサに適用される周波数および/または電圧を下げることによって、改善され得る。周波数および/または電圧のそのような低下は、動的クロックおよび電圧/周波数スケーリング(DCVS)方法を介して、リアルタイムで、または「オンザフライ」で行われ得る。
一般に、DCVS解決法は、(プロセッサがビジー状態である時間と比較された)プロセッサがアイドル状態である時間の比率を監視し、プロセッサのどれだけの周波数/電圧が調整されるべきかを、プロセッサがアイドル状態および/またはビジー状態である時間の比率に基づいて決定する。プロセッサがアイドル状態である時間の比率を監視することは、プロセッサがアイドルプロセスまたはアイドルスレッド(たとえば、システムアイドルプロセスなど)を実行する時間長を示す値(たとえば、時間の長さ、CPUサイクル数など)を、計算および/または測定することを含み得る。
オペレーティングシステムは、プロセッサ上でスケジューリングされる準備ができている他のスレッドがないと判定すると、そのプロセッサ上で、アイドル状態のソフトウェアアプリケーション、プロセス、またはスレッド(本明細書では総称的に「スレッド」)を実行することができる。アイドルスレッドは、様々なタスク(たとえば、割込みタスクを待つ、タスクを待ち状態にするなど)を実行することができ、各タスクは多数のプロセッサ動作を含み得る。プロセッサがアイドルスレッドを実行するとき、そのプロセッサは、「アイドルである」、「アイドル状態」にある、および/または「アイドル条件」にあると言われ得る。
マルチプロセッサシステムでは、オペレーティングシステム(またはスケジューラ、コントローラなど)は、各プロセッサに対して1つまたは複数のアイドルスレッドを維持し得る。アイドルスレッドは、実行の準備ができている状態のままであるので、各プロセッサは、実行の準備ができているスレッドを常に有する。この方式で、スレッドが(たとえば、スレッドがそのスケジューリングされたタスクまたは作業負荷を完了したことにより)プロセッサを解放するときは常に、オペレーティングシステムは、(たとえば、アイドルスレッドの利用可能性を介した)そのプロセッサ上での実行の準備ができているスレッドを、すべての他のスレッドが完了している、リソースを待機している、または別様に現在実行の準備ができていないときであっても、有する。
上で論じられたように、DCVS解決法は、プロセッサの周波数および/または電圧を、安定状態の作業負荷を含み得るそのプロセッサの作業負荷に基づいて、調整することができる。安定状態の作業負荷は、作業負荷の促進のための動作を実行するために、実行時間に先立って、すなわち、プロセッシングコアがビジー状態またはアクティブ状態に入ることに先立って、決定され得る。安定状態の作業負荷は、CPUクロック周期の数、動作の数、命令の数、および/または、プロセッシングコア上でスケジューリングされるタスクを完了するのに必要とされる時間の長さを、計算し、推定し、または予測することによって、事前に決定され得る。各プロセッサは、2つ以上の作業負荷(たとえば、安定状態の作業負荷および過渡的な作業負荷)を有することがあり、各プロセッサは、すべての作業負荷の中のすべてのタスクが完了するまで、ビジー状態、実行状態、またはアクティブ状態(本明細書では総称的に「ビジー状態」)のままであることが要求され得る。
いくつかの状況では、DCVS解決法は、プロセッサの性能に影響を与えることなく電力節減を達成するために、プロセッサの周波数および/または電圧(すなわち、プロセッサの速度)を下げることができる。たとえば、プロセッサの作業負荷が、その実行時間がメモリアクセス時間によって支配されるタスクを含むとき、周波数の低下は、そのプロセッサの性能またはそのタスクの実行時間に大きな影響を与えないことがある。しかしながら、より頻繁に、DCVS解決法は、プロセッサの性能(たとえば、タスクの所与のセットを完了するために必要とされる時間など)と電力消費(たとえば、タスクの所与のセットを遂行する際に消費されるバッテリー電力の量)の特性とのトレードオフのバランスをとらなければならない。通常、タスクの遂行が速いほど、タスクの遂行においてプロセッサにより消費される電力は多くなる。
DCVS解決法は、プロセッサの安定状態の作業負荷および安定状態の性能要件に基づいて、性能と電力消費のバランスをとるように構成され得る。安定状態の性能要件は、プロセッサがビジー状態および/またはアイドル状態である時間長を示す値(たとえば、時間の長さ、CPUサイクル数など)を計算または測定し、計算された/測定された値の結果を平均し、そのプロセッサの安定状態の作業負荷を完了するために必要とされる時間/処理の量を決定することによって、決定され得る。これらの計算に基づいて、DCVS解決法は、プロセッサが、電力消費の低減および許容可能なレベルの応答性(たとえば、モバイルデバイスのユーザが違いに気づかないような、など)を達成しながら、計算された安定状態の要件を満たすように動作し得る、上側の周波数閾値および下側の周波数閾値を計算することができる。
しばしば、プロセッサは、DCVS解決法が事前に知らされず、安定状態または周波数閾値の計算において考慮されなかった、「作業のバースト」を含む、過渡的な作業負荷を処理/実行することを求められる。過渡的な作業負荷は、動的である、一時的である、またはプロセッサの作業負荷の予測されない急上昇を引き起こす、作業の任意の単位を含む、システムにより事前に知られていない作業の任意のタスクまたは単位であり得る。例として、過渡的な作業負荷は、ユーザ入力、システムイベント、検出された環境的な条件、リモートプロシージャコールなどに応答してプロセッサによって実行されるタスクのいずれかまたはすべてを含み得る。さらなる例として、過渡的な作業負荷は、ユーザがユーザ動作を開始するためにポータブルコンピューティングデバイス(PCD)のタッチスクリーンをタッチしたときに生成されてよく、PCDは(たとえば、インターフェースの更新によって、新たな画像を表示することによって、新たな動作を始めることによって、など)そのユーザ動作に直ちに応答しなければならない。
上で言及されたように、過渡的な作業負荷は、DCVS解決法が(たとえば、上側の閾値と下側の閾値を決定することの一部として)事前に適切に考慮できる、継続的な安定状態の負荷ではない。結果として、過渡的な作業負荷は、プロセッサを、予想されるよりも長くビジー状態のままにすることがあり、かつ/または、そうでなければ、プロセッサ実行時間に不確実さをもたらすことがある。そのような不確実さは、コンピューティングデバイスに、処理リソースおよびシステムリソースを非効率的にまたは不適切に割り振らせることがあり、コンピューティングデバイスの全体的な性能および/または応答性に対して、コンピューティングデバイスが複数のプロセッシングコアを含むときには特に、重大な影響を有することがある。
現在のコンピューティングデバイスは、システムオンチップ(SoC)および/または複数のプロセッシングコア(たとえば、プロセッサ、コアなど)を含む、マルチプロセッサシステムであることが多い。マルチプロセッサシステムでは、単一のスレッドが、第1のプロセッシングコアによって処理され、次いで第2のプロセッシングコアによって処理され、次いで再び第1のプロセッシングコアによって処理されることが一般的である。第1のプロセッシングコア中の1つのスレッドの結果が、第2のプロセッシングコアを実行する別のスレッドにおける動作を引き起こすことも一般的である。たとえば、1つまたは複数のプロセッシングコアは、現在アクティブであるプロセッサによって生成される結果に依存することがあり、現在アクティブであるプロセッサがその作業負荷を完了するまで、かつ/または、1つまたは複数のタスクの処理を終了するまで、アイドル状態または待機状態のままであることを求められ得る。これらの状況では、各プロセッシングコアは代替的に、現在アクティブであるプロセッサからの処理の結果を待ちながら、アイドル/待機状態に入ることができる。これらのプロセッシングコアが現在アクティブであるプロセッサによって生成される結果を待つ間、それらのそれぞれのDCVS解決法は、動作速度を下げる(すなわち、周波数/電圧の低減を介して)ことがあり、コンピューティングデバイスが非応答的であるように、または低速であるように見えるようになる。すなわち、マルチプロセッサコンピューティングデバイスで実施されるDCVS解決法は、プロセッシングコアのいくつかが、現在アクティブであるスレッドを実行するのに最適なものよりも低い周波数または電圧で動作すべきであると、誤って結論付けることがあり、コンピューティングデバイスが非応答的であるように、または低速であるように見えるようになることがある。
様々な態様は、あるプロセッシングコアが、そのプロセッシングコアの事前に計算された実際の安定状態の作業負荷を完了するのに必要な時間を上回る所定の長さの時間よりも長く、(たとえば、過渡的な作業負荷が原因で)ビジー状態に留まらないことを確実にする、性能保証を計算して守らせることによって、上述の制約を克服する。そのような性能保証は、リソースを割り振り実行のためにスレッドをスケジューリングすることなどの、今後の動作をより良好に推定し、スケジューリングし、かつ/または計画するために、オペレーティングシステム、リソース、DCVS解決法、および/または他のプロセッシングコアによって使用され得る。この方式で、性能保証は、コンピューティングデバイスがその応答性の要件を満たすことを可能にし、したがってユーザ体験を改善する。
性能保証は、DCVS解決法が、変動する遅延に基づいてプロセッサの周波数および/または電圧を調整することを可能にし、このことは、プロセッシングコアが、プロセッサの現在のまたは以前の動作周波数/電圧とは関係なく、最大でもある定められた最大の量の作業の分しか、安定状態の作業負荷に対して遅れないことを確実にする。
図10は、性能保証を守らせる動的クロック周波数/電圧スケーリング(DCVS)方法を実施する、ある態様のコンピューティングデバイス1000における論理コンポーネントおよび情報の流れを示す。コンピューティングデバイス1000は、ハードウェアユニット1002、カーネル空間ソフトウェアユニット1004、およびユーザ空間ソフトウェアユニット1006を含み得る。ある態様では、カーネル空間ソフトウェアユニット1004およびユーザ空間ソフトウェアユニット1006は、コンピューティングデバイス1000のオペレーティングシステムまたはカーネルに含まれ得る。たとえば、コンピューティングデバイスは、(非特権コードが実行される場合)ユーザ空間内に編成され、(特権コードが実行される場合)カーネル空間内に編成される、カーネルを含み得る。この分離は、カーネル空間の一部であるコードが一般公共使用許諾(GPL)のもとで許諾される必要がある一方で、ユーザ空間内で実行されるコードがGPLのもとで許諾される必要がない、Androidおよび他のGPL環境において特に重要である。
ハードウェアユニット1002は、いくつかのプロセッシングコア(たとえば、CPU_0、CPU_1、2D-GPU_0、2D-GPU_1、3D-GPU_0など)と、プロセッシングコアによって共有される様々なハードウェアリソース(たとえば、クロック、電力管理集積回路または“PMIC”、スクラッチパッドメモリまたは“SPM”など)を含むリソースモジュール1020とを含み得る。
カーネル空間ソフトウェアユニット1004は、ハードウェアユニット1002の中のプロセッシングコアの少なくとも1つに対応するプロセッサモジュール(CPU_0 Idle stats、CPU_1 idle stats、2D-GPU_0 driver、2D-GPU_1 driver、3D-GPU_0 driverなど)を含んでよく、これらの各々は、1つまたは複数のアイドル状態統計デバイスモジュール1008と通信し得る。カーネル空間ソフトウェアユニット1004はさらに、タイマードライバモジュール1014、入力イベントモジュール1010、およびCPU要求統計モジュール1012を含み得る。ある態様では、タイマードライバモジュール1014は、各プロセッシングコアのためのタイマーを駆動(または管理)することができる。
ユーザ空間ソフトウェアユニット1006は、アイドル状態統計デバイスモジュール1008、入力イベントモジュール1010、タイマードライバモジュール1014、およびCPU要求統計モジュール1012の各々から入力を受信し、かつ/または、CPU周波数ホットプラグモジュール1018に出力を送信するように構成される、DCVS制御モジュール416を含み得る。CPU周波数ホットプラグモジュール1018は、通信信号をリソースモジュール1020に送信するように構成され得る。CPU周波数ホットプラグモジュール1018はさらに、各コアに対して、独立に(たとえば一度に1つのコアに、順番に、など)、または同時に(たとえば、ほぼ同じ時点で)、電圧/周波数の変更を適用するように構成され得る。
DCVS制御モジュール1016は、プロセッシングコア(たとえば、CPU_0、CPU_1、2D-GPU_0、2D-GPU_1、3D-GPU_0など)のいずれかまたはすべてでの実行に適した、かつ/または、コンピューティングデバイス1000でのDCVS解決法の実施に適した、スレッドを含み得る。ある態様では、DCVS制御モジュール1016は、DCVS制御モジュール1016に1つまたは複数のプロセッシングコアから情報を収集させてプロセッシングコアでDCVS動作を実行させるイベント(たとえば、データバッファが満杯であること、タイマーの時間切れ、状態の移行など)の発生について、ポートまたはソケットを監視する、スレッドを含み得る。ある態様では、DCVS制御モジュール1016は、2つ以上のプロセッシングコアを監視する、単一スレッドのDCVS解決法を含み得る。ある態様では、DCVS制御モジュール1016は、各プロセッシングコアのためのDCVS解決法のスレッドを含み得る。
ある態様では、DCVS制御モジュール1016は、パルス列を生成するように構成され得る。DCVS制御モジュール1016は、プロセッシングコアのビジー状態および/またはアイドル状態(またはこれらの状態の間の移行)を監視またはサンプリングすることによって、パルス列を生成することができる。DCVS制御モジュール1016はまた、1つまたは複数のプロセッサ実行キューの深さを監視することによって得られる情報に基づいて、パルス列を生成することができる。実行キューは、実行されているスレッドとともに、プロセッシングコアで実行される能力を有するがまだそうすることが可能ではない(たとえば、現在実行されている別のアクティブスレッドなどが原因で)、1つまたは複数のスレッドの集合体を含み得る。各プロセッシングコアは固有の実行キューを有してよく、または単一の実行キューが複数のプロセッシングコアによって共有されてよい。スレッドがスリープ状態に入ることを要求するとき、利用可能になることをリソース上で待機しているとき、または終了されたとき、スレッドは実行キューから除去され得る。したがって、実行キューの中のスレッドの数(すなわち、実行キューの深さ)は、現在処理されている(実行されている)スレッドおよび処理されるのを待機しているスレッドを含む、アクティブスレッド(たとえば、待機している、実行されている)の数を特定することができる。
ある態様では、DCVS制御モジュール1016は、生成されたパルス列に基づいて、安定状態の作業負荷、安定状態の要件、および/または上側と下側の周波数/電圧の閾値を計算するように構成され得る。上側と下側の周波数/電圧の閾値は、プロセッシングコアが、安定状態の性能要件を満たしながら、同時にコンピューティングデバイス1000の消費電力の低減を達成し、応答性の要件を満たすように動作できる、周波数/電圧の範囲を定義することができる。応答性の要件を満たすことは、コンピューティングデバイス1000のユーザがコンピューティングデバイスの性能または速度の低下に気づかないように、作業負荷のすべてのタスクを実行することを含み得る。
DCVS制御モジュール1016は、全体的なコンピューティングデバイス1000の性能を監視し、かつ/または、確立された上側の周波数閾値と下側の周波数閾値との間でプロセッシングコアの1つまたは複数が動作することを保証するように構成され得る。DCVS制御モジュール1016は、プロセッシングコアの処理リソースおよび/または動作周波数を、それらが閾値と同じ大きさとなるように、調整することができる。
上で論じられたように、DCVS制御モジュール1016は、パルス列を生成することができる。ある態様では、プロセッシングコアの2つ以上のために生成されるパルス列は、互いに協調的かつ/または依存的である動作をプロセッシングコアが実行しているかどうかを判定するのに適した情報を含む相関モデルを生成するために、時間的に同期され、相互に関連付けられ得る。ある態様では、DCVS制御モジュール1016は、相関モデルを使用して、上側と下側の周波数閾値、初期動作周波数、安定状態の要件、およびプロセッサの作業負荷を、これらの値がプロセッシングコア間の相互依存関係を考慮するように、決定することができる。
ある態様では、DCVS制御モジュール1016は、性能保証を計算し、かつ/または守らせるように構成され得る。上で言及されたように、プロセッシングコアは、DCVS解決法が事前に適切に考慮できない過渡的な作業負荷を、処理/実行することを求められ得る。したがって、過渡的な作業負荷は、DCVS制御モジュール1016に、準最適な周波数レベルで、または準最適な周波数範囲の中で、プロセッシングコアの1つまたは複数を動作させ得る。たとえば、DCVS制御モジュール1016は過渡的な作業負荷を事前に考慮できないので、DCVS制御モジュール1016は、プロセッシングコアが、安定状態の作業負荷と過渡的な作業負荷の両方をコンピューティングデバイス1000の応答性の要件を満たすのに適した期間中に完了するために必要とされるものよりも低い周波数レベルで動作し得ると、不適切に結論付けることがある。
性能保証は、(たとえば、過渡的な作業負荷が原因で)所定の長さの時間よりも長くプロセッシングコアがビジー状態に留まらないこと/安定状態の作業負荷の要件を完了するためにそのプロセッシングコアに対して必要とされるものよりも多くプロセッシングコアが働かないことを確実にするために、DCVS制御モジュール1016によって使用され得る、厳格かつ計算可能な限度をコンピューティングデバイス1000に提供する。性能保証は、DCVS制御モジュール1016が、コンピューティングデバイス1000の応答性の要件を満たすのに適した期間中に安定状態の作業負荷と過渡的な作業負荷の両方をプロセッシングコアが完了することを確実にすることを可能にする。
様々な態様では、性能保証は、時間の長さ、作業の量、タスクの数、命令の数、CPUサイクル数などのような、プロセッサ性能または時間長を測定するのに適した、測定の任意の単位で、計算され、定義され、かつ/またはそれを含み得る。様々な態様では、性能保証は、周波数と関連付けられてよく、かつ/または周波数の関数であってよい。
ある態様では、性能保証は、1つまたは複数の性能保証値を含み得る。様々な態様では、性能保証値(たとえば、期限値、バジェット値、jump-to-max値など)が、時間の長さ、作業の量、タスクの数、命令の数、CPUサイクル数などのような、プロセッサ性能または時間長を測定するのに適した、測定の任意の単位で表現され得る。
様々な態様では、性能保証値は、バジェット値(たとえば、スラックバジェット、過渡バジェットなど)、期限値(たとえば、過渡期限、過渡応答期限、性能期限など)、および/またはjump-to-max値を含み得る。
期限値は、その前までにプロセッシングコアが作業負荷の処理を完了すべきである、相対的な時間を示す値、および/または、その後にプロセッシングコアの周波数が上げられるべきである、相対的な時間を示す値であってよい。
バジェット値は、その前までにプロセッシングコアが作業負荷の処理を完了すべきである、かつ/または、その後にプロセッシングコアの周波数が上げられるべきである、残りの時間の長さを示す値であってよい。
jump-to-max値は、その前までにプロセッシングコアが作業負荷の処理を完了すべきである、かつ/または、その後にプロセッシングコアの周波数が最大の周波数まで上げられるべきである、相対的な時間を示す値であってよい。
性能保証値は、周波数または電圧に関連していてよく、それらと関連付けられてよく、かつ/またはそれらの関数であってよい。たとえば、バジェット、期限、および/またはjump-to-maxの値の各々は、対応するプロセッシングコアの動作周波数の関数として計算される、時間の値であってよい。したがって、これらの値の各々は、プロセッシングコアが100MHzの周波数で動作するときは10ミリ秒であってよく、200MHzの周波数で動作するときは20ミリ秒であってよく、400MHzの周波数で動作するときは40ミリ秒であってよい、などである。この方式で、性能保証値は、プロセッシングコアの周波数を上げるための可変の遅延を実装するために、DCVS解決法によって使用され得る。
上で言及され図9に示されるように、DCVS解決法は可変の遅延を実装することができる。そのような可変の遅延は、プロセッシングコアが、プロセッシングコアの実際の動作周波数とは関係なく、最大でも定められた最大の量の作業の分しか、安定状態の作業負荷に対して遅れないことを、確実にする。ある態様では、DCVS解決法は、プロセッシングコアの最大の周波数/電圧と乗算された期限値と等しいように、定められた最大の量の作業(すなわち、その分だけプロセッシングコアが安定状態の作業負荷に対して遅れ得る)を設定することができる。この方式で、性能保証は、安定状態の要件に基づいて、または動的に、または「オンザフライ」で、プロセッシングコアの周波数/電圧をDCVS解決法が調整することによって、影響されない。
ある態様では、DCVS制御モジュール1016は、対応するプロセッシングコアがアイドル状態からビジー状態に移行し、ビジー状態に入り(たとえば、作業負荷の処理を開始するなど)、かつ/またはアイドル状態から出る(たとえば、アイドルスレッドがプロセッシングコアを解放するときなど)たびに、バジェット値に等しく期限値を設定するように構成され得る。
ある態様では、DCVS制御モジュール1016は、対応するプロセッシングコアがビジー状態からアイドル状態に移行し、アイドル状態に入り(たとえば、アイドルスレッドの実行を開始するなど)、かつ/またはビジー状態から出る(たとえば、作業負荷のすべてのタスクを完了するなど)たびに、既存の期限値を設定または再設定するように構成され得る。
図11A〜図11Bは、あるプロセッシングコアが、そのプロセッシングコアの事前に計算された、予測された、かつ/または実際の安定状態の作業負荷を完了するのに必要な時間を上回る所定の長さの時間よりも長く、(たとえば、過渡的な作業負荷などが原因で)ビジー状態に留まらないことを確実にする、性能保証を生成/計算する、ある態様のDCVS解決方法1100を示す。様々な態様では、DCVS解決法の動作は、プロセッシングコアまたは別のプロセッシングコアで実行されるスレッドによって実行され得る。ある態様では、DCVS解決法の動作の1つまたは複数は、プロセッシングコアで実行されるアイドルスレッドによって実行され得る。
ブロック1102において、DCVS解決法は、プロセッシングコアを、アイドル状態からビジー状態へ移行させ得る。ブロック1104において、DCVS解決法は、現在の時間の値(CurrentTime)に等しくアイドル状態終了時間パラメータ(EndIdleTime)の値を設定することができる。したがって、アイドル状態終了時間パラメータ(EndIdleTime)は、プロセッシングコアが最後にアイドル状態から出た時間を示す値を記憶することができる。
様々な態様では、ブロック1102および1104の動作は、順番に、並列に、かつ/または任意の順序で実行され得る。たとえば、ある態様では、DCVS解決法は、アイドル状態からビジー状態にプロセッシングコアを移行する前に、アイドル状態終了時間パラメータ(EndIdleTime)の値を設定することができる。別の態様では、DCVS解決法は、アイドル状態からビジー状態にプロセッシングコアを移行した後に、アイドル状態終了時間パラメータ(EndIdleTime)の値を設定することができる。
ブロック1106において、DCVS解決法は、プロセッシングコアの動作周波数または電圧を監視し、必要に応じて調整を行うことができる。ブロック1108において、DCVS解決法は、プロセッシングコアを、ビジー状態からアイドル状態へ移行させ得る。ある態様では、DCVS解決法は、プロセッシングコアでのアイドルスレッドの実行を開始することによって、プロセッシングコアをアイドル状態に移行することができる。ある態様では、DCVS解決法は、プロセッシングコアがすべての作業負荷と関連付けられるすべてのタスクを完了した後で、プロセッシングコアをアイドル状態に移行することができる。
任意選択のブロック1110において、DCVS解決法は、既存の期限値を設定または再設定することができる。上で論じられたように、期限値は、性能保証に含まれ、またはそれと関連付けられる、性能保証値であり得る。期限値を設定し、再設定し、かつ/または計算する動作に関する追加の詳細が、さらに以下で提供される。
ブロック1112において、DCVS解決法は、現在の時間の値(CurrentTime)に等しくアイドル状態開始時間パラメータ(StartIdleTime)の値を設定することができる。ブロック1114において、DCVS解決法は、プロセッシングコアが最後に以前のアイドル状態から出た時間(アイドル状態終了時間パラメータ“EndIdleTime”によって表され得る)と、プロセッシングコアが現在のアイドル状態に入った時間(アイドル状態開始時間パラメータ“StartIdleTime”によって表され得る)との差に等しく、ビジー時間パラメータ(BusyTime)の値を設定することができる。したがって、ビジー時間パラメータ(BusyTime)は、プロセッシングコアが直近にビジー状態に留まっていた時間長を示す値を記憶することができる。
ブロック1116において、DCVS解決法は、プロセッシングコアに、スリープ動作、ディープスリープ動作、または割込みのためのソフトウェア待機動作のような、様々なアイドル状態動作を実行させ得る。したがって、ブロック1116において、DCVS解決法(たとえば、アイドルスレッド、オペレーティングシステムなどを介した)は、プロセッシングコアに、スリープ状態、ディープスリープ状態、割込みのための待機の状態などに入らせ得る。
ブロック1118において、DCVS解決法および/またはアイドルスレッドは、割込み要求を受信し、かつ/または、そうでなければ、プロセッシングコアが現在の状態からビジー状態に移行されるべきであると判定することができる。これは、タスクがプロセッシングコアでの実行のためにスケジューリングされたこと、および/または、スケジューリングされたタスクが実行の準備ができていることの通知を、(たとえば、オペレーティングシステムのスケジューラ、コントローラなどから)DCVS解決法が受信することによって、達成され得る。
ブロック1120において、DCVS解決法は、現在の時間の値(CurrentTime)に等しくアイドル状態終了時間パラメータ(EndIdleTime)の値を設定することができる。ブロック1122において、DCVS解決法は、StartIdleTimeパラメータの値とEndIdleTimeパラメータの値の差に等しく、アイドル時間パラメータ(IdleTime)の値を設定することができる。したがって、アイドル時間パラメータ(IdleTime)は、プロセッシングコアが最後にアイドル状態に留まっていた時間長を示す値を記憶することができる。
ブロック1124において、DCVS解決法は、その中でプロセッシングコアが動作すべきである、動作周波数、周波数範囲、および/または周波数閾値を計算することができる。ある態様では、DCVS解決法は、ビジー状態(たとえば、BusyTime)にプロセッシングコアが最後に留まっていた時間長、および/または、アイドル状態(たとえば、IdleTime)にプロセッシングコアが最後に留まっていた時間長に基づいて、周波数または周波数範囲を計算することができる。ある態様では、DCVS解決法は、プロセッサが以前にビジー状態および/またはアイドル状態に留まっていた時間長(たとえば、所定の期間または時間枠にわたる)の平均(または移動平均)のような、履歴情報に基づいて、動作周波数、周波数範囲、および/または周波数閾値を計算することができる。ある態様では、DCVS解決法は、パルス列に基づいて、動作周波数、周波数範囲、および/または周波数閾値を計算することができる。上で論じられたように、パルス列は、ビジー状態および/またはアイドル状態のサンプリング、状態間の移行、実行キューの深さなどに基づいて生成され得る。
ブロック1126において、DCVS解決法は、期限値を計算または選択することができる。期限値は、その後に次の段階のより高い周波数と最大の周波数のいずれかにプロセッシングコアの周波数が上げられるように設定されるべきである、相対的な時間を示す値であり得る。様々な態様では、期限値は、構成設定、ドライバ入力、スケジューリングされたタスクの量および/もしくはタイプ、予測された安定状態の作業負荷、ならびに/または、コンピューティングデバイスの応答性の要件に基づいて計算され得る。期限値は、静的な値および/または動的な値に基づいて決定され得る。たとえば、期限値は、静的な構成値に基づいて、または、プロセッシングコアで実行されるようにスケジューリングされるタスクのタイプ(たとえば、1080pビデオのストリーミング対720pビデオのストリーミングなど)に基づいて決定され得る。
ある態様では、期限値は、コンピューティングデバイスの応答性の要件に反比例し得る(すなわち、応答性の要件が高いほど、期限は短い)。ある態様では、期限値は、プロセッシングコアの現在の動作周波数の関数である時間の値(たとえば、100MHzの周波数では10ミリ秒、200MHzの周波数では20ミリ秒、400MHzの周波数では40ミリ秒など)であり得る。
ブロック1128において、DCVS解決法は、バジェット値を計算または選択することができる。バジェット値は、期限値と、安定状態の作業負荷の要件を完了するためにプロセッシングコアに対して必要とされると判定された時間との合計を超えることなく、プロセッシングコアがアクティブ状態またはビジー状態のままであり得る時間の長さを示す値であり得る。ある態様では、バジェット値は、プロセッシングコアの現在の動作周波数の関数である時間の値(たとえば、100MHzの周波数では10ミリ秒、200MHzの周波数では20ミリ秒、400MHzの周波数では40ミリ秒など)であり得る。
様々な態様では、バジェット値は、期限値、複数の周波数レベルまたはステップ、最大のプロセッサ周波数、安定状態のプロセッサ周波数などに基づいて計算され得る。ある態様では、バジェット値は、実効過渡バジェットであってよく、かつ/または、上で論じられた式のいずれかを介して計算されてよい。
任意選択のブロック1130において、DCVS解決法は、jump to max値を計算することができる。jump-to-max値は、その後にプロセッシングコアの周波数が最大の処理周波数に設定されるべきである、相対的な時間を示す値であり得る。ある態様では、jump-to-max値は、EndIdleTimeパラメータの値とバジェット値とを加算することによって計算され得る。
ブロック1132において、DCVS解決法は、プロセッシングコアを、アイドル状態からビジー状態へ移行することができる。ある態様では、ブロック1132の一部として、DCVS解決法は、バジェット値に等しく期限値を設定することができる。様々な態様では、DCVS解決法は、プロセッシングコアがアイドル状態からビジー状態に移行し、アクティブ状態またはビジー状態に入り(たとえば、作業負荷の処理を開始するなど)、かつ/またはアイドル状態から出る(たとえば、アイドルスレッドがプロセッシングコアを解放するときなど)たびに、バジェット値に等しく期限値を設定するように構成され得る。
図12は、あるプロセッシングコアが、そのプロセッシングコアの事前に計算された、予測された、かつ/または実際の安定状態の作業負荷を完了するのに必要な時間を上回る所定の長さの時間よりも長く、(たとえば、過渡的な作業負荷の存在などが原因で)ビジー状態に留まらないことを確実にするために、性能保証を守らせる、ある態様のDCVS解決方法1200を示す。ブロック1202において、DCVS解決法は、スケジューリングされたタスクに基づいて、予測された安定状態の作業負荷を計算することができる。ブロック1204において、DCVS解決法は、コンピューティングデバイスの電力消費および/または応答性の要件を満たすための周波数閾値のような、プロセッシングコアに対する様々な性能要件を計算することができる。性能要件(たとえば、周波数閾値など)は、安定状態の作業負荷、履歴情報(たとえば、ビジー状態でこれまでに経過した時間の長さなど)、プロセッサの特性、応答性の要件などに基づいて、決定され得る。
ブロック1206において、DCVS解決法は、初期動作周波数および/または様々な性能保証値(たとえば、期限値、バジェット値、jump-to-max値など)を計算し設定することができる。ブロック1208において、DCVS解決法は、様々な性能要件を満たしながら安定状態の作業負荷のすべてのタスクを完了するためにプロセッシングコアに対して必要とされる時間または作業の量(たとえば、CPUサイクル、命令など)を計算することができる。
ブロック1210において、DCVS解決法は、プロセッシングコアが計算された初期動作周波数/電圧で(または計算された閾値の範囲内で)実行され、かつ/または様々なデバイスもしくはシステムの要件を満たすように、プロセッシングコアをアイドル状態からビジー状態に移行することができる。ブロック1212において、DCVS解決法は、プロセッシングコアの実際の作業負荷および/または動作周波数を監視して、必要に応じて(たとえば、デフォルトのクロックおよび電圧スケーリングアルゴリズムに従って)周波数/電圧を調整することができる。任意選択のブロック1214において、DCVS解決法は、プロセッシングコアの現在の動作周波数/電圧に基づいて、性能保証値を更新することができる。
判定ブロック1216において、DCVS解決法は、プロセッシングコアが、計算された時間/作業(すなわち、予測される安定状態の作業負荷のすべてのタスクを完了するためにプロセッシングコアに対して必要とされると判定された時間/作業の量)よりも長くビジー状態に留まっているかどうかを判定することができる。プロセッシングコアが計算された時間/作業よりも長くビジー状態に留まっていないとDCVS解決法が判定すると(すなわち、判定ステップ1216=“No”)、ブロック1212において、DCVS解決法は、実際の作業負荷/周波数を監視し続け、必要なときに調整を行うことができる。
プロセッシングコアが計算された時間/作業よりも長い期間ビジー状態に留まっているとDCVS解決法が判定すると(すなわち、判定ステップ1216=“Yes”)、判定ブロック1218において、DCVS解決法は、バジェットが使い果たされたかどうかを判定することができる。DCVS解決法は、バジェット値が0に等しいとき、および/または、期限値に計算された時間/作業を加算したもの以上の期間(時間と作業のいずれかで測定される)、プロセッシングコアがビジー状態に留まっているとき、バジェットが使い果たされたと判定することができる。
バジェットが使い果たされていないとDCVS解決法が判定すると(すなわち、判定ステップ1218=“No”)、ブロック1212において、DCVS解決法は、実際の作業負荷/周波数を監視し続け、必要なときに調整を行うことができる。バジェットが使い果たされているとDCVS解決法が判定すると(すなわち、判定ステップ1218=“Yes”)、ブロック1220において、DCVS解決法は、プロセッシングコアの動作周波数/電圧を上げることができる。ある態様では、ブロック1220において、DCVS解決法は、プロセッシングコアの動作周波数/電圧を最大のプロセッサ周波数に上げることができる。ある態様では、ブロック1220において、DCVS解決法は、動作周波数/電圧の閾値を上げることができる。ある態様では、ブロック1220において、DCVS解決法は、プロセッシングコアの動作周波数/電圧を段階的に上げることができる。
図13は、性能保証を守らせる、別の態様のDCVS解決方法1300を示す。ブロック1302〜1314において、DCVS解決法は、図12のブロック1202〜1214に関して上で論じられた動作と同一の、または同様の動作を実行することができる。判定ブロック1316において、DCVS解決法は、計算された時間(すなわち、予測される安定状態の作業負荷のすべてのタスクを完了するためにプロセッシングコアに対して必要とされると判定された時間の長さ)と期限値を加算した時間(計算された時間+期限)よりも前に、プロセッシングコアが現在の作業負荷を完了する確率が高いかどうかを、判定することができる。
計算された時間に期限値を加算した時間よりも前にプロセッシングコアが現在の作業負荷を完了する確率が高いとDCVS解決法が判定すると(すなわち、判定ステップ1316=“Yes”)、ブロック1312において、DCVS解決法は、実際の作業負荷/周波数を監視し続け、必要に応じて動作周波数/電圧に対する調整を行うことができる。
計算された時間の値に期限値を加算した時間よりも前にプロセッシングコアが現在の作業負荷を完了する確率が高くないとDCVS解決法が判定すると(すなわち、判定ステップ1316=“No”)、ブロック1318において、DCVS解決法は、プロセッシングコアの動作周波数/電圧を上げることができる。プロセッシングコアの動作周波数/電圧は、最大のプロセッサ周波数に上げられてよく、または段階的に上げられてよい。
様々な態様は、プロセッサを有するコンピューティングデバイス上での性能を向上させる方法を含み、この方法は、プロセッサの安定状態の作業負荷を決定するステップと、プロセッサ上の決定された安定状態の作業負荷を実行するために必要とされる作業の量を決定するステップと、プロセッサに対する性能保証値を計算するステップと、アイドル状態からビジー状態にプロセッサを移行するステップと、動的クロックおよび電圧スケーリング動作を実行して、プロセッサの実際の作業負荷に基づいてプロセッサの周波数をスケーリングするステップと、スケーリングされた周波数に基づいて性能保証値を更新するステップと、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっているかどうかを判定するステップと、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるステップとを含み得る。
ある態様では、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるステップは、プロセッサの周波数を最大のプロセッサ周波数に上げるステップを含み得る。さらなる態様では、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるステップは、プロセッサの周波数を段階的に上げるステップを含み得る。さらなる態様では、方法はさらに、スケーリングされた周波数に基づいて性能保証値を更新し、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっているかどうかを判定し、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されるときに、プロセッサの周波数を上げる動作を、繰り返し実行するステップを含み得る。
さらなる態様では、プロセッサに対する性能保証値を計算するステップは、期限値を計算するステップを含み得る。さらなる態様では、プロセッサに対する性能保証値を計算するステップは、バジェット値を計算するステップを含み得る。さらなる態様では、プロセッサの安定状態の作業負荷を決定するステップは、プロセッサ上で実行されるようにスケジューリングされるタスクの要件を決定するステップを含み得る。さらなる態様では、方法は、ビジー状態とアイドル状態の移行をサンプリングすることによって、パルス列を生成するステップを含み得る。さらなる態様では、プロセッサの安定状態の作業負荷を決定し、プロセッサ上で安定状態の作業負荷を実行するために必要とされる作業の量を決定し、プロセッサに対する性能保証値を計算する動作は、単一のスレッドによって実行される。さらなる態様では、単一のスレッドはプロセッサ上で実行される。さらなる態様では、単一のスレッドはコンピューティングデバイスの第2のプロセッサ上で実行される。
さらなる態様は、プロセッサの安定状態の作業負荷を決定するための手段と、プロセッサ上の決定された安定状態の作業負荷を実行するために必要とされる作業の量を決定するための手段と、プロセッサに対する性能保証値を計算するための手段と、アイドル状態からビジー状態にプロセッサを移行するための手段と、動的クロックおよび電圧スケーリング動作を実行して、プロセッサの実際の作業負荷に基づいてプロセッサの周波数をスケーリングするための手段と、スケーリングされた周波数に基づいて性能保証値を更新するための手段と、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっているかどうかを判定するための手段と、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるための手段とを有する、コンピューティングデバイスを含む。
ある態様では、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるための手段は、プロセッサの周波数を最大のプロセッサ周波数に上げるための手段を含み得る。
さらなる態様では、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されたときに、プロセッサの周波数を上げるための手段は、プロセッサの周波数を段階的に上げるための手段を含み得る。さらなる態様では、コンピューティングデバイスはさらに、スケーリングされた周波数に基づいて性能保証値を更新し、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっているかどうかを判定し、決定された作業の量と性能保証値の合計以上の期間、プロセッサがビジー状態に留まっていると判定されるときに、プロセッサの周波数を上げる動作を、繰り返し実行するための手段を含み得る。
さらなる態様では、プロセッサに対する性能保証値を計算するための手段は、期限値を計算するための手段を含み得る。さらなる態様では、プロセッサに対する性能保証値を計算するための手段は、バジェット値を計算するための手段を含み得る。さらなる態様では、プロセッサの安定状態の作業負荷を決定するための手段は、プロセッサ上で実行されるようにスケジューリングされるタスクの要件を決定するための手段を含み得る。さらなる態様では、コンピューティングデバイスは、ビジー状態とアイドル状態の移行をサンプリングすることによって、パルス列を生成するための手段を含み得る。
さらなる態様では、コンピューティングデバイスは、プロセッサの安定状態の作業負荷を決定し、プロセッサ上で安定状態の作業負荷を実行するために必要とされる作業の量を決定し、プロセッサに対する性能保証値を計算する動作を、単一のスレッドを介して遂行するための手段を含み得る。さらなる態様では、コンピューティングデバイスは、プロセッサ上で単一のスレッドを実行するための手段を含み得る。さらなる態様では、コンピューティングデバイスは、コンピューティングデバイスの第2のプロセッサ上で単一のスレッドを実行するための手段を含み得る。
さらなる態様は、動作を実行するようにプロセッサ実行可能命令によって構成された第1のプロセッサを含み得る、動作を実行するようにプロセッサ実行可能命令によって構成されたプロセッサを含み得るコンピューティングデバイスを含み、この動作は、第2のプロセッサの安定状態の作業負荷を決定するステップと、第2のプロセッサ上の決定された安定状態の作業負荷を実行するために必要とされる作業の量を決定するステップと、第2のプロセッサに対する性能保証値を計算するステップと、アイドル状態からビジー状態に第2のプロセッサを移行するステップと、動的クロックおよび電圧スケーリング動作を実行して、第2のプロセッサの実際の作業負荷に基づいて第2のプロセッサの周波数をスケーリングするステップと、スケーリングされた周波数に基づいて性能保証値を更新するステップと、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっているかどうかを判定するステップと、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップとを含み得る。
ある態様では、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップが、第2のプロセッサの周波数を最大のプロセッサ周波数に上げるステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。
さらなる態様では、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップが、第2のプロセッサの周波数を段階的に上げるステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。
さらなる態様では、スケーリングされた周波数に基づいて性能保証値を更新し、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっているかどうかを判定し、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されるときに、第2プロセッサの周波数を上げる動作を、繰り返し実行するように、第1のプロセッサがさらにプロセッサ実行可能命令によって構成され得る。さらなる態様では、第2のプロセッサに対する性能保証値を計算するステップが期限値を計算するステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。
さらなる態様では、第2のプロセッサに対する性能保証値を計算するステップがバジェット値を計算するステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。さらなる態様では、第2のプロセッサの安定状態の作業負荷を決定するステップが、第2のプロセッサ上で実行するようにスケジューリングされるタスクの要件を決定するステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。さらなる態様では、ビジー状態とアイドル状態の移行をサンプリングすることによってパルス列を生成するステップをさらに含む動作を実行するように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。
さらなる態様では、第2のプロセッサの安定状態の作業負荷を決定し、第2のプロセッサ上で安定状態の作業負荷を実行するために必要とされる作業の量を決定し、第2のプロセッサに対する性能保証値を計算する動作が単一のスレッドによって実行されるように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。さらなる態様では、単一のスレッドが第1のプロセッサで実行され得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。さらなる態様では、第2のプロセッサの安定状態の作業負荷を決定し、第2のプロセッサ上で安定状態の作業負荷を実行するために必要とされる作業の量を決定し、第2のプロセッサに対する性能保証値を計算する動作を遂行するステップが、第2のプロセッサ上で単一のスレッドを実行するステップを含み得るように、第1のプロセッサがプロセッサ実行可能命令によって構成され得る。
さらなる態様は、コンピューティングデバイスに動作を実行させるように構成されるプロセッサ実行可能命令が記憶された、非一時的サーバ可読記憶媒体を含み、この動作は、第2のプロセッサの安定状態の作業負荷を決定するステップと、第2のプロセッサ上の決定された安定状態の作業負荷を実行するために必要とされる作業の量を決定するステップと、第2のプロセッサに対する性能保証値を計算するステップと、アイドル状態からビジー状態に第2のプロセッサを移行するステップと、動的クロックおよび電圧スケーリング動作を実行して、第2のプロセッサの実際の作業負荷に基づいて第2のプロセッサの周波数をスケーリングするステップと、スケーリングされた周波数に基づいて性能保証値を更新するステップと、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっているかどうかを判定するステップと、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップとを含み得る。
ある態様では、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップが、第2のプロセッサの周波数を最大のプロセッサ周波数に上げるステップを含み得るように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。
さらなる態様では、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されたときに、第2のプロセッサの周波数を上げるステップが、第2のプロセッサの周波数を段階的に上げるステップと、スケーリングされた周波数に基づいて性能保証値を更新し、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっているかどうかを判定し、決定された作業の量と性能保証値の合計以上の期間、第2のプロセッサがビジー状態に留まっていると判定されるときに、第2のプロセッサの周波数を上げる動作を、繰り返し実行するステップとを含み得るように、第2のプロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。
さらなる態様では、第2のプロセッサに対する性能保証値を計算するステップが期限値を計算するステップを含み得るように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。さらなる態様では、第2のプロセッサに対する性能保証値を計算するステップがバジェット値を計算するステップを含み得るように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。さらなる態様では、第2のプロセッサの安定状態の作業負荷を決定するステップが、第2のプロセッサ上で実行するようにスケジューリングされるタスクの要件を決定するステップを含み得るように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。さらなる態様では、ビジー状態とアイドル状態の移行をサンプリングすることによってパルス列を生成するステップをさらに含む動作をプロセッサに実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。
さらなる態様では、第2のプロセッサの安定状態の作業負荷を決定し、第2のプロセッサ上で安定状態の作業負荷を実行するために必要とされる作業の量を決定し、第2のプロセッサに対する性能保証値を計算する動作が単一のスレッドによって実行されるように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。さらなる態様では、単一のスレッドがプロセッサ上で実行されるように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。さらなる態様では、単一のスレッドが第2のプロセッサ上で実行されるように、プロセッサに動作を実行させるように、記憶されたプロセッサ実行可能ソフトウェア命令が構成され得る。
様々な態様は多数の利点を提供し、性能、電力消費、および/または応答性が重要である、ラップトップおよび他のモバイルデバイスにおいて実装され得る。様々な態様は、軽負荷のマシンに対するエネルギーおよび冷却コストを減らすために、サーバおよびパーソナルコンピュータにおいて実装され得る。発熱を減らすことは、システムの冷却ファンの速度が落とされることまたは停止されることを可能にし、ノイズレベルを低減し、さらに電力消費を減らす。様々な態様はまた、温度がある閾値に達したときに、不十分に冷却されているシステムにおいて熱を減らすために使用され得る。
様々な態様が、プロセッシングコアに関して例示を目的として上で説明されたが、態様の方法、システム、および実行可能命令は、方法が周波数または電圧の認識と制御を可能にする、任意のシステムにおいて実装され得る。さらに、周波数または電圧をスケーリングする動作は、任意のシングルプロセッサシステムまたはマルチプロセッサシステムで実行され得る。
様々な態様が、種々のポータブルまたはモバイルコンピューティングデバイス上に実装されてよく、それらの一例が図14に示されている。ポータブルコンピューティングデバイス1400は、メモリ1402および送受信機1405に結合された、プロセッシングコア1401を含み得る。送受信機1405は、電磁放射を送信および受信するために、アンテナ1404に結合され得る。ポータブルコンピューティングデバイス1400はまた、ユーザ入力を受信するためのディスプレイ1403(たとえば、タッチスクリーンディスプレイ)およびメニュー選択ボタンまたはロッカースイッチ1406も含み得る。いくつかのポータブルコンピューティングデバイスでは、1つのプロセッサがワイヤレス通信機能専用とされ、1つのプロセッサが他のアプリケーションの実行専用とされるなど、複数のプロセッサ1401が設けられ得る。
様々な態様はまた、図15に示されるサーバ1500などの種々の市販のサーバデバイスのいずれでも実装され得る。そのようなサーバ1500は、通常、プロセッシングコア1501を含み、複数のプロセッサシステム1511、1521、1531を含むことがあり、プロセッサシステムの1つまたは複数は、マルチコアプロセッサであるか、またはマルチコアプロセッサを含むことがある。プロセッシングコア1501は、揮発性メモリ1502、およびディスクドライブ1503などの大容量不揮発性メモリに結合され得る。サーバ1500はまた、プロセッシングコア1501に結合された、フロッピー(登録商標)ディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ1506も含み得る。サーバ1500はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワークのような、ネットワーク1505とデータ接続を確立するための、プロセッシングコア1501に結合されたネットワークアクセスポート1504も含み得る。
上で説明された態様はまた、図16に示されたラップトップコンピュータ1600などの種々のパーソナルコンピューティングデバイス内で実装され得る。ラップトップコンピュータ1600は、揮発性メモリ1602、およびフラッシュメモリのディスクドライブ1604などの大容量不揮発性メモリに結合された、プロセッシングコア1601を含み得る。コンピュータ1600はまた、プロセッシングコア1601に結合されたフロッピー(登録商標)ディスクドライブ1606およびコンパクトディスク(CD)ドライブ1608を含み得る。コンピュータデバイス1600はまた、USB、FireWire(登録商標)、またはLightning(登録商標)のコネクタソケット、または、プロセッシングコア1601をネットワークもしくはコンピュータに結合するための他のネットワーク接続回路のような、データ接続を確立し、または外部メモリデバイスを受け入れるための、プロセッシングコア1601に結合されたいくつかのコネクタポートを含み得る。ノートブック構成では、コンピュータの筐体は、すべてがプロセッシングコア1601に結合される、タッチパッド1616、キーボード1618、およびディスプレイ1620を含む。コンピューティングデバイスの他の構成は、よく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールを含み得る。
プロセッシングコア1401、1501、1601は、本明細書で説明された様々な態様の機能および動作を含む種々の機能を実行するようにソフトウェア命令(アプリケーション)によって構成され得る、任意のプログラマブルプロセッサ、マイクロプロセッサ、マイクロコンピュータ、マルチコアプロセッサ、または多重プロセッサチップであり得る。通常、ソフトウェアアプリケーションは、アクセスされてプロセッシングコア1401、1501、1601にロードされる前に、内部メモリ1402、1502、1602に記憶され得る。各プロセッシングコア1401、1501、1601は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。一部のコンピューティングデバイスでは、追加のメモリチップ(たとえば、Secure Data(SD)カード)がコンピューティングデバイスに差し込まれ、プロセッシングコア1401、1501、1601に結合され得る。内部メモリ1402、1502、1602は、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合物であり得る。本明細書では、メモリへの一般的な言及は、内部メモリ1402、モバイルデバイスに差し込まれるリムーバブルメモリ、およびプロセッシングコア1401内のメモリを含む、プロセッシングコア1401、1501、1601によってアクセス可能なすべてのメモリを指す。
プロセッシングコア1501、1601、1710は、アプリケーションソフトウェア命令を記憶するのに十分な内部メモリを含み得る。多くのデバイスでは、内部メモリは、揮発性メモリ、もしくはフラッシュメモリなどの不揮発性メモリ、または両方の混合であり得る。本明細書では、メモリへ一般的な言及は、内部メモリ、またはデバイスに差し込まれるリムーバブルメモリと、プロセッシングコア1501、1601、1710自体の中のメモリとを含む、プロセッサ1501、1601、1710によってアクセス可能なメモリを指す。
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供されたものであり、様々な態様のステップが提示された順序で実行されなければならないことを要求または暗示するものではない。当業者によって了解されるように、上記の態様におけるステップの順序は、いかなる順序でも実行され得る。「その後」、「次いで」、「次に」などの単語は、ステップの順序を限定するものではなく、これらの単語は、単に、方法の説明を通して読者を案内するために使用される。さらに、たとえば、冠詞“a”、“an”または“the”を使用する単数形での請求要素への任意の言及は、その要素を単数に限定するものとして解釈されるべきではない。
本明細書で開示された態様に関して説明された、様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズムステップは、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアとソフトウェアのこの互換性を明確に示すために、様々な例示的なコンポーネント、ブロック、モジュール、回路、およびステップが、上では概してそれらの機能に関して説明された。そのような機能がハードウェアとして実装されるか、またはソフトウェアとして実装されるかは、具体的な適用例および全体的なシステムに課される設計制約に依存する。当業者は、説明された機能を具体的な適用例ごとに様々な方法で実装することができるが、そのような実装の決定は、本発明の範囲からの逸脱を引き起こすものと解釈されるべきではない。
本明細書で開示された態様に関して説明された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェアコンポーネント、または、本明細書で説明された機能を実行するように設計されたそれらの任意の組合せで、実装または実行され得る。汎用プロセッサは多重プロセッサであり得るが、代替として、プロセッサは任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシンであり得る。プロセッサはまた、コンピューティングデバイスの組合せ、たとえば、DSPと多重プロセッサとの組合せ、複数の多重プロセッサ、DSPコアと連携する1つまたは複数の多重プロセッサ、あるいは任意の他のそのような構成として実装され得る。代替として、いくつかのステップまたは方法は、所与の機能に固有の回路によって実行され得る。
1つまたは複数の例示的な態様では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読記憶媒体上に1つまたは複数のプロセッサ実行可能命令またはコードとして記憶され得る。本明細書で開示された方法またはアルゴリズムのステップは、有形の、または非一時的なコンピュータ可読記憶媒体上に存在し得る、プロセッサ実行可能ソフトウェアモジュール内で具現化され得る。非一時的コンピュータ可読記憶媒体は、コンピュータによってアクセスされ得る任意の利用可能な記憶媒体であり得る。限定ではなく例として、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶装置もしくは他の磁気記憶デバイス、または、命令もしくはデータ構造の形式で所望のプログラムコードを搬送もしくは記憶するために使用され得るとともに、コンピュータによってアクセスされ得る任意の他の媒体を含み得る。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(“CD”)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(“DVD”)、フロッピー(登録商標)ディスク(disk)、およびブルーレイディスク(disc)を含み、ディスク(disk)は、通常、磁気的にデータを再生し、ディスク(disc)は、レーザーで光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読媒体の範囲内に含まれ得る。さらに、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的な機械可読媒体および/または非一時的コンピュータ可読媒体上のコードおよび/または命令の、1つまたは任意の組合せ、またはそのセットとして存在し得る。
開示された態様の上記の説明は、任意の当業者が本発明を製作または使用できるように与えられたものである。これらの態様への様々な修正が当業者には容易に明らかであり、本明細書で定義された一般的な原理は、本発明の趣旨または範囲を逸脱することなく、他の態様に適用され得る。したがって、本発明は、本明細書で示された態様に限定されるものではなく、以下の特許請求の範囲ならびに本明細書で開示された原理および新規の特徴に合致する、最も広い範囲を与えられるべきである。