(57)【特許請求の範囲】
【請求項１】
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングする方法であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることと、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量を前記トラッキングすることに基づいて、検出することと、
前記ゲーミングの作業負荷を検出することに応答して、前記コンピューティングデバイスをゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスを前記ゲーミングモードに前記切り替えることは、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ周波数最大値（ＦＭａｘ）を低減することを含む、
を備える、方法。
【請求項２】
Ｎ個の連続するフレームのスライディングウィンドウは、定義され、前記トラッキングすることは、レンダリングの前記Ｎ個の連続するフレームの各々ごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることを含む、請求項１に記載の方法。
【請求項３】
前記トラッキングすることの結果が閾値を満たさないとき、前記コンピューティングデバイスが、ゲーミングモードを処理していないことを検出することと、
前記コンピューティングデバイスをノンゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスをノンゲーミングモードに前記切り替えることは、前記ＣＰＵ  ＦＭａｘを最大の許可された周波数にリセットすることを含む、
をさらに含む、請求項１に記載の方法。
【請求項４】
前記結果が２５未満であるとき、前記結果は、前記閾値を満たさない、請求項３に記載の方法。
【請求項５】
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすることと、
前記ＣＰＵを含む前記コンピューティングデバイス上の前記ゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量を前記トラッキングすることに基づいて、検出することと、
をさらに含む、請求項３に記載の方法。
【請求項６】
Ｍ個の連続するフレームの第２のスライディングウィンドウは、定義され、テクスチャコールの平均の量を前記トラッキングすることは、レンダリングの前記Ｍ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの前記平均の量をトラッキングすることを含む、請求項５に記載の方法。
【請求項７】
グラフィックスライブラリコールの平均の量を前記トラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの平均の量を前記トラッキングすることの第２の結果が第３の閾値を満たすとき、前記ゲーミングの作業負荷は、前記コンピューティングデバイス上で検出される、請求項６に記載の方法。
【請求項８】
グラフィックスライブラリコールの平均の量を前記トラッキングすることの前記第１の結果が前記第２の閾値を満たさないとき、またはテクスチャコールの平均の量を前記トラッキングすることの前記第２の結果が前記第３の閾値を満たさないとき、前記コンピューティングデバイスが、ゲーミングの作業負荷を処理していないことを検出する、をさらに含む、請求項７に記載の方法。
【請求項９】
連続するフレームの第１のスライディングウィンドウは、５であり、かつ連続するフレームの前記第２のスライディングウィンドウは、５である、請求項８に記載の方法。
【請求項１０】
前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、請求項８に記載の方法。
【請求項１１】
グラフィックスライブラリコールの平均の量を前記トラッキングすることは、Ｎ個の連続するフレームのあらゆるスライディングウィンドウのために、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量をトラッキングすることを含む、請求項１に記載の方法。
【請求項１２】
レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすること、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
グラフィックスライブラリコールの平均の量を前記トラッキングすることの結果が第１の閾値を満たすとき、前記検出することは、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することを含む、請求項１２に記載の方法。
【請求項１４】
グラフィックスライブラリコールの平均の量を前記トラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの平均の量を前記トラッキングすることの第２の結果が第３の閾値を満たすとき、前記検出することは、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することを含む、請求項１３に記載の方法。
【請求項１５】
前記第１の結果が２５以上であるとき、前記第１の結果は、前記第１の閾値を満たし、前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、請求項１４に記載の方法。
【請求項１６】
ＣＰＵ  ＦＭａｘを前記低減することは、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを１．４９ＧＨｚと１．７２ＧＨｚ間の範囲に制限することを含む、請求項１に記載の方法。
【請求項１７】
前記コンピューティングデバイスは、カーネルを含み、ＣＰＵ  ＦＭａｘを前記低減することは、前記カーネルの中でＡＰＩコールを呼び出すことを含む、請求項１に記載の方法。
【請求項１８】
前記コンピューティングデバイスは、モバイルデバイスである、請求項１に記載の方法。
【請求項１９】
前記モバイルデバイスは、スマートフォン、タブレット、ラップトップ、または携帯情報端末である、請求項１８に記載の方法。
【請求項２０】
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングするためのシステムであって、
ＣＰＵと、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングし、前記ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、グラフィックスライブラリコールの前記トラッキングされた平均の量の結果に基づいて、検出するゲーミングモード検出器と、ここにおいて、前記ゲーミングの作業負荷を検出することに応答して、前記ゲーミングモード検出器は、前記コンピューティングデバイスをゲーミングモードに切り替え、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ周波数最大値（ＦＭａｘ）を低減する、
を備えるシステム。
【請求項２１】
前記ゲーミングモード検出器は、Ｎ個のフレームのスライディングウィンドウを定義し、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量をトラッキングし、ここにおいて、前記結果が第１の閾値を満たすとき、前記ゲーミングモード検出器は、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出する、請求項２０に記載のシステム。
【請求項２２】
前記コンピューティングデバイスが前記ゲーミングモードにあることを決定され、かつ前記結果が前記第１の閾値を満たさないとき、前記ゲーミングモード検出器は、前記コンピューティングデバイスをノンゲーミングモードに切り替える、請求項２１に記載のシステム。
【請求項２３】
前記結果が２５以上であるとき、前記結果は、前記第１の閾値を満たす、請求項２１に記載のシステム。
【請求項２４】
前記ゲーミングモード検出器は、レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングし、ここにおいて、グラフィックスライブラリコールの前記平均の量をトラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの前記平均の量をトラッキングすることの第２の結果が第３の閾値を満たすとき、前記ゲーミングモード検出器は、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出する、請求項２１に記載のシステム。
【請求項２５】
前記第１の結果が２５以上であるとき、前記第１の結果は、前記第１の閾値を満たし、前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、請求項２４に記載のシステム。
【請求項２６】
前記ゲーミングモード検出器は、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを前記ＣＰＵの最大の許可された周波数レベルにリセットし、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを増加させる、請求項２０に記載のシステム。
【請求項２７】
オペレーションを行うためのコンピュータ実行可能な命令を記憶した非一時的なコンピュータ可読媒体であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることと、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量を前記トラッキングすることに基づいて、検出することと、
前記ゲーミングの作業負荷を検出することに応答して、前記コンピューティングデバイスをゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスをゲーミングモードに前記切り替えることは、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ周波数最大値（ＦＭａｘ）を低減することを含む、
を備える、非一時的なコンピュータ可読媒体。
【請求項２８】
前記オペレーションは、
Ｎ個の連続するフレームのスライディングウィンドウを定義することと、前記トラッキングすることは、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることを含む、
グラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量の結果が第１の閾値を満たすとき、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することと、
をさらに含む、請求項２７に記載のコンピュータ可読媒体。
【請求項２９】
前記オペレーションは、
レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすることと、
グラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量の結果が第２の閾値を満たし、かつテクスチャコールの前記平均の量の結果が第３の閾値を満たすとき、前記コンピューティングデバイス上で前記ゲーミングの作業負荷を検出することと、前記第１の閾値が、前記第２の閾値とは異なる、
をさらに含む、請求項２８に記載のコンピュータ可読媒体。
【請求項３０】
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングするための装置であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングするための手段と、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量を前記トラッキングすることに基づいて、検出するための手段と、
前記ゲーミングの作業負荷を検出することに応答して、前記コンピューティングデバイスをゲーミングモードに切り替えるための手段と、ここにおいて、前記切り替えることは、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ周波数最大値（ＦＭａｘ）を低減することを含む、
を備える、装置。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]  本願は、２０１３年１１月１３日に出願された米国仮特許出願第６１／９０３，８４３号に対する優先権を主張する、２０１４年７月３１日に出願された米国非仮特許出願第１４／４４８，５５６号に対する優先権を主張し、これら両方は、それらの全文を参照により本明細書に組み込まれる。
【技術分野】
【０００２】
[0002]  本開示は、中央処理装置（ＣＰＵ）およびグラフィックス処理ユニット（ＧＰＵ）に一般的に関し、より具体的にはＧＰＵの重い作業負荷のためのＣＰＵ周波数をコントロールすることに関する。
【背景技術】
【０００３】
[0003]  動的なＣＰＵ周波数のスケーリングは、ＣＰＵ周波数が、例えば、電力を保持するためにＣＰＵのパーセンテージ負荷（CPU percentage load）に基づいて調整されるコンピューティングシステムにおける技法である。動的なＣＰＵ周波数のスケーリングは、電力を保持するためにコンピューティングシステムで使用されることができ、限られた電力供給を有するモバイルデバイスで使用するために特に有益であり得る。これらのモバイルデバイスは、モバイルデバイスの中のバッテリ以外の一貫した電力供給（consistent power supply）を典型的に有さない。動的な周波数スケーリングはまた、軽く負荷をかけられたマシン（lightly loaded machines）のためのエネルギーおよび冷却費用（cooling costs）を減らすために使用され得る。
【０００４】
[0004]  モバイルデバイスは、ユビキタス（ubiquitous）であり、スマートフォン、タブレット、携帯デジタルアシスタント（portable digital assistant）（ＰＤＡ）、携帯ゲームコンソール、パームトップコンピュータ、および他の携帯電子デバイスを含み得る。これらのデバイスの主要な機能に加えて、多くは、周辺機能（peripheral functions）を含む。例えば、スマートフォンは、通話する主要な機能、ならびにゲームをプレーすること、スチルカメラ（still camera）、ビデオカメラ、全世界測位システム（ＧＰＳ）ナビゲーション、ウェブブラウジング、ｅメールの送受信、およびテキストメッセージの送受信の周辺機能を含み得る。そのようなデバイスの機能性が増加するにつれて、そのような機能性をサポートするために要求される処理電力もまた、増加する。さらに、コンピューティング電力が増加するにつれて、コンピューティング電力を提供するプロセッサを効率的に管理するより大きな必要性が存在する。
【発明の概要】
【０００５】
[0005]  本開示は、ＣＰＵｓに関する。ＣＰＵ周波数をコントロールするための方法、システム、および技法が提供される。
【０００６】
[0006]  いくつかの実施形態にしたがって、少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスロットリングする（throttling）方法は、レンダリングのフレームごとのグラフィックスライブラリドローコール（graphics library draw call）ごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることを含む。方法は、ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることに基づいて、検出することをさらに含む。方法はまた、コンピューティングデバイスをゲーミングモード（a gaming mode）に切り替えることも含む。コンピューティングデバイスをゲーミングモードに切り替えることは、コンピューティングデバイス上で実行しているＣＰＵのＣＰＵ周波数最大値（CPU frequency maximum）を低減することを含む。
【０００７】
[0007]  いくつかの実施形態にしたがって、少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスロットリングするためのシステムは、ＣＰＵを含む。システムはまた、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングし、前記ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールのトラッキングされた平均の量に基づいて、検出するゲーミングモード検出器を含む。ゲーミングモード検出器は、コンピューティングデバイスをゲーミングモードに切り替え、コンピューティングデバイス上で実行しているＣＰＵのＣＰＵ周波数最大値を低減する。
【０００８】
[0008]  いくつかの実施形態にしたがって、オペレーションを行うためのコンピュータ実行可能な命令を記憶したコンピュータ可読媒体は、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることと、ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることに基づいて、検出することと、コンピューティングデバイスをゲーミングモードに切り替えることと、ここで、コンピューティングデバイスをゲーミングモードに切り替えることは、コンピューティングデバイス上で実行しているＣＰＵのＣＰＵ周波数最大値を低減することを含む、を含む。
【０００９】
[0009]  いくつかの実施形態にしたがって、少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスロットリングするための装置は、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングするための手段を含む。装置はまた、ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を検出するための手段を含む。装置は、コンピューティングデバイス上で実行しているＣＰＵのＣＰＵ周波数最大値を低減するための手段をさらに含む。
【図面の簡単な説明】
【００１０】
[0010]  本明細書の一部を形成する、添付図面は、発明の実施形態および本明細書とともに例示し、実施形態の原理を説明するためにさらに役立つ。図面において、同様の参照番号は、同一の、または機能的に同様の要素を示し得る。要素がまず現れる図面は、対応する参照番号の中の最も左の数字によって一般的に示される。
【００１１】
【図１】[0011]  図１は、特定のオンデマンドＣＰＵガバナ（governor）およびゲーム、Ａｓｐｈａｌｔ７（商標）に関する時間にわたる（over time）ＦＰＳ対ＣＰＵ周波数最大値の例示的なグラフである。
【図２】[0012］  図２は、いくつかの実施形態にしたがって、少なくとも１つのＣＰＵのＣＰＵ周波数をスロットリングするためのシステムを例示するブロック図である。
【図３】[0013］  図３は、いくつかの実施形態にしたがって、少なくとも１つのＣＰＵのＣＰＵ周波数をスケーリングする方法を例示する流れ図である。
【図４】[0014]  図４は、本開示の１つ以上の実施形態をインプリメントするために適しているコンピュータシステムのブロック図である。
【発明を実施するための形態】
【００１２】
Ｉ．概要
ＩＩ．例示的なシステムアーキテクチャ
Ａ．ゲーミングの作業負荷を検出する
１．ステートアップデート／ドロー（State-Update/Draw）（ＳＵＰＤ）メトリック
２．ＳＵＰＤおよびバインドテクスチャドロー（Bind-Texture Draw）（ＢＴＰＤ）メトリック
Ｂ．ゲーミングモードに切り替える
ＩＩＩ．例示的な方法
ＩＶ．例示的なコンピューティングデバイス
【００１３】
Ｉ．概要
[0015]  続く開示は、本開示の異なる特徴をインプリメントするための、多くの異なる実施形態、または例を提供することが理解されることとなる。いくつかの実施形態は、これらの特定の詳細のいくつか、またはすべてなしで実施され得る。コンポーネント、モジュール、および配列の特定の例は、本開示を簡略化するために以下に説明される。これらは、もちろん、単に例にすぎず、限定していると意図されない。
【００１４】
[0016]  モバイルゲーミングは、人気を得ており、ユーザが、彼または彼女のモバイルデバイス上でゲームをプレーすることを可能にする。かなりの数の人気のゲーム（例えば、Ｎｅｅｄ  Ｆｏｒ  Ｓｐｅｅｄ  −  Ｍｏｓｔ  Ｗａｎｔｅｄ（商標）、Ａｓｐｈａｌｔ−７（商標）、およびＡｓｐｈａｌｔ−８（商標））は、「ＣＰＵバウンド（CPU bound）」というよりはむしろ高度なグラフィックス処理ユニット（heavily graphics processing unit）（ＧＰＵ）バウンドである。商標は、それらそれぞれのオーナーの財産である。ＣＰＵは、ゲームのためのドローコールに基づくドローコマンドを構築し、ドローコマンドに基づくコマンドストリームを生成し、コマンドストリームをＧＰＵに提出する。ＧＰＵは次に、コマンドストリームの中のドローコマンドを処理することの重作業（heavy work）を行うために進み（proceed to）得る。ＣＰＵ側の作業負荷は、ＧＰＵがゲーミングの作業負荷の重い処理を行うため重くなり得ないが、ＣＰＵはまだ、最大のサポートされたＣＰＵ周波数（maximum supported CPU frequency）で不必要に動作している可能性がある。
【００１５】
[0017]  ＣＰＵ周波数最小値（CPU frequency minimum）（ＦＭｉｎ）は、コンピューティングデバイス上で作業負荷を実行しているときに使用されることができる最小の許可されたＣＰＵ周波数（minimum allowed CPU frequency）に対応する。ＣＰＵ周波数最大値（ＦＭａｘ）は、コンピューティングデバイス上で作業負荷を実行しているときに使用されることができる最大の許可されたＣＰＵ周波数に対応する。動的なＣＰＵ周波数スケーリングルーチンは、コンピューティングデバイス上のＣＰＵ  ＦＭｉｎとＣＰＵ  ＦＭａｘ間で稼働し得る。ＣＰＵ  ＦＭａｘを動的に低減することは、動的なＣＰＵ周波数スケーリングルーチンに、コンピューティングデバイス上のＣＰＵ周波数のより小さい範囲内で動作させる。
【００１６】
[0018]  ＣＰＵ周波数は、ＣＰＵと相互に作用するオンデマンドＣＰＵガバナによってコントロールされ、それは、ＣＰＵに、デフォルトＣＰＵ周波数最大値（例えば、２．１５ギガヘルツ（ＧＨｚ））で動作させ得る。説明は、ＣＰＵと相互に作用するようにオンデマンドＣＰＵガバナを説明し得るが、他のガバナがＣＰＵと相互に作用し得る。他のＣＰＵガバナの例は、とりわけ、パフォーマンスガバナ（performance governor）、パワーセーブガバナ（powersave governor）、インタラクティブガバナ（interactive governor）である。例において、ＣＰＵガバナは、Ｌｉｎｕｘ（登録商標）オペレーティングシステムで利用可能であり得る。
【００１７】
[0019]  図１は、ゲーム、Ａｓｐｈａｌｔ７（商標）を動作している間、特定のオンデマンドＣＰＵガバナに関する時間にわたる１秒あたりのフレーム数（frames per second）（ＦＰＳ）対ＣＰＵ周波数最大値の例示的なグラフである。図１において、デフォルトＣＰＵ周波数最大値は、例えば、２．１５ＧＨｚであり得る。ＣＰＵガバナは、さらに以下に説明されることとなるＣＰＵ周波数最大値をコントロールし得る。
【００１８】
[0020]  例において、ＣＰＵ時間の３分の１が、最大ＣＰＵクロック（maximum CPU clock）で動作することに費やされ、それは、電力を不必要に消費する。図１に例示されるように、ディスプレイパネルリフレッシュレート（例えば、６０ＦＰＳ）に関連して閾値量（例えば、１．９５ＧＨｚ−１．７２ＧＨｚ）までＣＰＵ  ＦＭａｘを徐々に低減することは、少量のＦＰＳロス、または少しのＦＰＳロスもない結果になり得る。図１に示されるように、ＣＰＵ  ＦＭａｘが、約１．４９ＧＨｚ、約５９ＦＰＳの結果であるとき、ＣＰＵ  ＦＭａｘを２．１５ＧＨｚのデフォルトから１．４９ＧＨｚに低減することは、Ａｓｐｈａｌｔ−７（商標）のための同様のパフォーマンスをもたらす。例えば、おおよそ同じパフォーマンスが、低減された最大周波数でＣＰＵを動作させることによって結果として生じることができるとき、そのデフォルト／より高い最大周波数でＣＰＵを動作させることは望ましくない可能性があり、ＣＰＵガバナが現在稼働するためのＣＰＵ周波数のより低い範囲を有するとき、より低い周波数最大値でＣＰＵを稼働することは、ＣＰＵの電力節約（power savings）をさらに生じ得る。
【００１９】
[0021]  コンピューティングデバイス上でゲーミングの作業負荷を識別し、コンピューティングデバイス上でＣＰＵ  ＦＭａｘを選択的に、および動的に低減することは望ましくあり得る。このことは、ＧＰＵが比較的重いゲーミングの作業負荷に対処する間、ＣＰＵに対する電力消費を低減し得る。さらに、より高いＣＰＵ周波数レベルで、コンピューティングデバイスからリリースされるサーマルヒート（thermal heat）は、重要なファクタとなる。ＣＰＵ  ＦＭａｘを決定的にコントロールすることは、コンピューティングデバイスが容易に、および不必要に熱くなり、ＣＰＵ  ＦＭａｘのさらなるサーマルスロットリングをもたらし、概して望ましくないユーザエクスペリエンスをもたらすのを防ぐのに役立つ。
【００２０】
[0022]  本開示は、ＣＰＵ周波数をプロアクティブにコントロールする（proactively control）ためのゲーミングの作業負荷の検出に基づく技法を提供する。したがって、ＣＰＵ  ＦＭａｘは、ゲーミングの間モバイルプラットフォームによって使用される全体の電力を低減するために低減され得る。ある実施形態は、電力消費およびサーマルヒートを低減させながら、パフォーマンスを維持することの利点を有し得る。
【００２１】
ＩＩ．例示的なシステムアーキテクチャ
[0023］  図２は、いくつかの実施形態にしたがって、少なくとも１つのＣＰＵのＣＰＵ周波数をスロットリングするためのシステムを例示するブロック図４００である。図４００は、ゲーミングモード検出器４１２、オペレーティングシステム４１４、ＣＰＵ４１６、およびＧＰＵ４１８を含むコンピューティングデバイス４１０を含む。ゲーミングモード検出器４１２、オペレーティングシステム４１４、ＣＰＵ４１６、およびＧＰＵ４１８は、コンピューティングデバイス４１０においてオペレーションを実行することができ、オペレーションを行い得る。
【００２２】
[0024]  コンピューティングデバイス４１０は、固定のデバイス、またはモバイルデバイスであり得る。モバイルデバイスは、例えば、スマートフォン、タブレット、ラップトップ、または携帯情報端末であり得る。ゲーミングモード検出器４１２は、ゲーミングの間モバイルプラットフォームによって使用される全体の電力を低減する間、ＣＰＵ４１６のパフォーマンスを維持する。
【００２３】
[0025]  ゲーミングモード検出器４１２は、ＣＰＵ４１６と相互に作用することができ、ＣＰＵ４１６が動作する周波数を管理し得る。ＣＰＵ４１６は、ドローコールに基づいてコマンドストリームを生成し、ＧＰＵ４１８に提出するためのドローコマンドを構築する。具体的には、ＣＰＵ４１６は、ステートおよびドローコールの量へのアクセスを有し、ＧＰＵ４１８に送られるグラフィックスライブラリ（ＧＬ）コマンドの２進数（a binary）を生成し、それは、ドローコールを実行するために作業負荷を処理する。ＣＰＵ４１６は、ＧＰＵ４１８に送られるための作業負荷（例えば、ドローコールの量）を処理することを決定し得る。しかしながら、ＧＰＵ４１８が重い作業負荷を処理している（例えば、ゲームがコンピューティングデバイス４１０上でプレーされている）とき、ＣＰＵ周波数最大値でＣＰＵ４１６を動作することは望ましくない可能性がある。ＣＰＵ４１６は、ゲーミングモード検出器４１２にステートおよびドローコールに関する情報をパスすることができ、それは、ユーザスペースの中で実行し、およびそれは、コンピューティングデバイス４１０がゲーミングの作業負荷を有するか否かを検出するためにステートおよびドローコール情報を使用し得る。
【００２４】
[0026]  ゲーミングモード検出器４１２がコンピューティングデバイス４１０上でゲーミングの作業負荷を検出するとき、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０がもはやゲーミングモードにあるように（to be in the gaming mode）決定されなくなるまでＣＰＵ  ＦＭａｘを制限し（cap）得る。例において、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上で実行している他のコンポーネントがＣＰＵ４１６に、低減されたＣＰＵ  ＦＭａｘを超えさせることができないようにＣＰＵ  ＦＭａｘを低減する。異なるガバナが、異なる周波数で動作し得る。ある実施形態において、ＣＰＵ４１６は、１つ以上のコアを含み、個別のＣＰＵ  ＦＭａｘは、コアの１つ以上のために設定され得る。コンピューティングデバイス４１０がもはやゲーミングモードにあるように決定されないとき、ゲーミングモード検出器４１２は、ＣＰＵ  ＦＭａｘ上の制限（cap）を取り除く、または再調整する、あるいは単に低減されたＣＰＵ  ＦＭａｘをデフォルトレベルまで増加させ得る。
【００２５】
[0027]  オープングラフィックスライブラリ（ＯｐｅｎＧＬ）は、二次元および三次元のコンピュータグラフィックスをレンダリングするためのアプリケーションプログラミングインタフェース（ＡＰＩ）の仕様（specification）である。ＯｐｅｎＧＬのインプリメンテーションは、仕様によって定義されたＡＰＩをインプリメントするライブラリである。ＡＰＩは、クロスランゲージおよびマルチプラットフォームであり、ハードウェア加速されたレンダリング（hardware-accelerated rendering）を実現するためにＧＰＵと相互に作用するように典型的に使用される。ＯｐｅｎＧＬは、ＣＡＤ、バーチャルリアリティ、サイエンティフィックビジュアライゼーション（scientific visualization）、インフォメーションビジュアライゼーション（information visualization）、フライトシミュレーション、およびビデオゲームで広く使用される。埋め込まれたシステムのためのＯｐｅｎＧＬ（OpenGL for Embedded Systems）（ＯｐｅｎＧＬ  ＥＳ）は、ＡＰＩをレンダリングするＯｐｅｎＧＬコンピュータグラフィックスのサブセットであり、埋め込まれたシステムのために設計される（例えば、スマートフォン、コンピュータタブレット、ビデオゲームコンソールおよびＰＤＡｓ）。簡潔さのために、ＯｐｅｎＧＬまたはＯｐｅｎＧＬ  ＥＳは、コンピュータグラフィックスをレンダリングするための技術を説明するために使用され得るが、このことは、限定していると意図されず、これらの性能を提供する他の技術が本開示の範囲内であることが理解されるべきである。
【００２６】
Ａ．ゲーミングの作業負荷を検出する
[0028]  いくつかの実施形態において、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上でゲーミングの作業負荷を検出し、様々な方法でそのようにし得る。２個のＯｐｅｎＧＬ  ＥＳの作業負荷は、ユーザインタフェース（ＵＩ）およびゲーミングの作業負荷である。
【００２７】
１．ステートアップデート／ドロー（ＳＵＰＤ）メトリック
[0029]  例において、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上でゲーミングの作業負荷を検出するために平均のステートアップデート／ドロー（ＳＵＰＤ）メトリックを使用する。ＳＵＰＤメトリックは、ゲーミングの作業負荷に依存し、所与のドローコールに結びつく（bound to）。例えば、グラフィックスライブラリ（ＧＬ）コールは、ゲームアプリケーションによって使用されるＡＰＩｓである。ＳＵＰＤメトリックは、（例えば、２個のｅｇｌＳｗａｐＢｕｆｆｅｒｓ間の）レンダリングのフレームごとの単一のＧＬドローコール（例えば、ｇｌＤｒａｗＥｌｅｍｅｎｔｓおよびｇｌＤｒａｗＡｒｒａｙ）ごとになされたすべてのＧＬコール（例えば、ｇｌＵｎｉｆｏｒｍＭａｔｒｉｘ、ｇｌＢｉｎｄＢｕｆｆｅｒ、ｇｌ＊等）の平均の量をトラッキングすることを含み得る。この例において、ゲーミングモード検出器４１２は、単一のドローコールの前にいくつのＧＬ  ＡＰＩコール（例えば、ステートアップデート）がなされるかをトラッキングし得る。グラフィックスレンダリングのために、トライアングル（triangle）は典型的に、ドローする（draw）ための最も小さいユニットである。ゲーミングモード検出器４１２は、特定のトライアングルがドローされる前にいくつのＧＬ  ＡＰＩコールがなされるかを決定し得る。レンダリングのフレームごとのＧＬドローコールごとになされたＧＬコールのより高い平均の量は、関連付けられた作業負荷がＧＰＵ４１８行き（bound for）であることのより高い可能性を示し得る。
【００２８】
[0030]  ＳＵＰＤメトリックを使用して、ゲーミングモード検出器４１２が、単一のレンダリングされたフレームに基づいてコンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに（またはゲーミングモードからノンゲーミングモードに）切り替え得る。このことは、しかしながら、１フレームごとのベース（frame-by-frame basis）で連続的にゲーミングモードから、およびゲーミングモードに、いったりきたり切り替えることをもたらし得る。それゆえに、特定の状態を満たす持続された重い作業負荷に基づいて、コンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに（またはゲーミングモードからノンゲーミングモードに）切り替えることはより望ましくあり得る。そのような発見的なアプローチ（heuristic approach）を使用して、ゲーミングモードから切り替えること、およびゲーミングモードに切り替えることは、一貫性のある経歴（consistent history）に基づくことができ、誤検出（false positives）を避け得る。例えば、ゲーミングの作業負荷の特徴が一貫性があり、散発性がない（not sporadic）ことを確実にするために、スライディングウィンドウ（a sliding window）が使用され得る。この方法において、ゲーミングモード検出器４１２は、重いＯｐｅｎＧＬ  ＥＳベースのゲーミングの作業負荷対、より軽いユーザインタフェースの作業負荷の間で区別することができ、ゆえにゲーミングの作業負荷のためのＣＰＵ周波数最大値をプロアクティブに低減し得る。
【００２９】
[0031]  連続するフレームの既定の量におよぶ（spanning）スライディングウィンドウを組み込むいくつかの実施形態において、ゲーミングモード検出器４１２は、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングする。例において、連続するフレームの既定のウィンドウのために、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングすることの結果が閾値を満たすとき、この状態が満たされるときＧＰＵバウンドである重い、維持された作業負荷が大いに起こり得るため、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上のゲーミングの作業負荷を検出したこととなる。例において、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングすることの結果は、結果が２５以上であるとき、閾値を満たす。
【００３０】
[0032]  同様に、ＧＬコールの平均の量をトラッキングすることの結果が、例えば、２５の閾値に達しないとき、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０がゲーミングアクティビティ（gaming activity）に従事していないことを決定することができ、コンピューティングデバイス４１０をノンゲーミングモードに切り替え得る。ある実施形態において、コンピューティングデバイス４１０をノンゲーミングモードに切り替えることは、ＣＰＵのＣＰＵ  ＦＭａｘをリセットすること、または再調整すること（例えば、ＣＰＵ  ＦＭａｘの制限を増加させること）を含む。
【００３１】
[0033]  ＳＵＰＤの閾値は、例えば、約２５、正確に２５、または２０−２５の範囲であり得る。しかしながら、２５の閾値が例によるものであること、および他の値が様々なコンピューティングデバイス４１０の特徴にしたがって適用され得ることは理解されることとなる。
【００３２】
[0034]  例において、スライディングウィンドウのサイズを定義する連続するフレームの既定の量は、５個のフレームである。ＯｐｅｎＧＬ  ＥＳの作業負荷のＮ個の（例えば、５個の）連続するフレームのスライディングウィンドウのために、ゲーミングモード検出器４１２は、レンダリングされるためのＮ個の（例えば、５個の）連続するフレームの各々のためのＧＬドローコールごとになされたＧＬコールの平均の量をトラッキングし、ここでＮは、ゼロより大きい任意の整数である。例えば、ＳＵＰＤが２５以上である場合、ゲーミングモード検出器４１２は、（コンピューティングデバイス４１０が、まだゲーミングモードにない場合）コンピューティングデバイス４１０をゲーミングモードに入れ得る。
【００３３】
２．ＳＵＰＤおよびバインドテクスチャドロー（ＢＴＰＤ）メトリック
[0035]  別の例において、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上でゲーミングの作業負荷を検出するためにＳＵＰＤおよび平均バインドテクスチャ／ドロー（ＢＴＰＤ）メトリックを使用する。画像がコンピューティングデバイス４１０のスクリーン上にドローされる前に、テクスチャは、オンスクリーン（onscreen）でレンダリングされるための特定のトライアングルにマップされ得る。ゲームアプリケーションがコンピューティングデバイス４１０上で実行している場合、ＣＰＵ４１６は、ＣＰＵ４１６がドローコールを発行し、それをＧＰＵ４１８に送る前に複数のテクスチャをルックアップ（look up）し得る。例えば、テクスチャは、トライアングルの１つのカラーまたは複数のカラーを示すことができ、複数のテクスチャは、フレームのために決定され得る。ＢＴＰＤメトリックは、ゲーミングの作業負荷に依存し、所与のドローコールに結びつく。ＢＴＰＤは、（例えば、２個のｅｇｌＳｗａｐＢｕｆｆｅｒｓ間の）レンダリングのフレームごとのＧＬドローコール（例えば、ｇｌＤｒａｗＥｌｅｍｅｎｔｓおよびｇｌＤｒａｗＡｒｒａｙ）ごとになされたテクスチャコールの平均の量をトラッキングすることを含み得る。この例において、ゲーミングモード検出器４１２は、いくつのＧＬ  ＡＰＩコール（例えば、テクスチャコール）が単一のドローコールの前になされるかをトラッキングし得る。レンダリングのフレームごとのＧＬドローコールごとのテクスチャコールのより高い平均の量は、より多くのテクスチャがフレームをレンダリングするために使用されることを示す。ゆえに、ゲーミングモード検出状態（gaming mode detection condition）として使用されるＳＵＰＤおよびＢＴＰＤメトリックは、ＯｐｅｎＧＬ  ＥＳのゲーミングの作業負荷の広い範囲にわたってよく機能することができ、モバイルデバイス上でゲーミング中にモバイルプラットフォームによって使用される全体の電力を低減するためにプロアクティブに使用されることができる。
【００３４】
[0036]  ＳＵＰＤおよびＢＴＰＤメトリックは、単一のレンダリングされたフレームに基づいてコンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに（またはゲーミングモードからノンゲーミングモードに）切り替えるためにゲーミングモード検出器４１２によって使用され得る。このことは、しかしながら、１フレームごとのベースで連続的にゲーミングモードから、およびゲーミングモードに、いったりきたり切り替えることをもたらし得る。特定の状態を満たす持続された重い作業負荷に基づいて、コンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに（またはゲーミングモードからノンゲーミングモードに）切り替えることがより望ましくあり得る。そのような発見的なアプローチで、ゲーミングモードから切り替えること、およびゲーミングモードに切り替えることは、作業負荷の経歴に基づくことができ、誤検出を避け得る。
【００３５】
[0037]  連続するフレームの既定の量のスライディングウィンドウを組み込むいくつかの実施形態において、ゲーミングモード検出器４１２は、レンダリングのフレームごとのＧＬドローコールごとのテクスチャコールの平均の量をトラッキングする。ＯｐｅｎＧＬ  ＥＳの作業負荷のＭ個の（例えば、５個の）連続するフレームのスライディングウィンドウのために、ゲーミングモード検出器４１２は、レンダリングされるためのＭ個の（例えば、５個の）連続するフレームの各々のためのＧＬドローコールごとのテクスチャコールの平均の量をトラッキングし、ここでＭは、ゼロより大きい任意の整数である。例において、連続するフレームの既定の量のために、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングすることの結果が第２の閾値を満たすとき、およびレンダリングのフレームごとのＧＬドローコールごとのテクスチャコールの平均の量をトラッキングすることの結果が第３の閾値を満たすとき、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０上のゲーミングの作業負荷を検出したこととなる。ＧＰＵバウンドである重い、維持された作業負荷は、この状態が満たされるとき大いに起こり得る。多くのＵＩのケース（UI cases）が、１５のＳＵＰＤ未満を有する。例において、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングすることの結果は、結果が１５以上であるとき第２の閾値を満たし、レンダリングのフレームごとのＧＬドローコールごとのテクスチャコールの平均の量をトラッキングすることの結果は、結果が１より大きいとき第３の閾値を満たす。１５および１の値が例によるものであること、および他の値が様々なコンピューティングデバイス４１０の特徴にしたがって適し得ることは理解されることとなる。
【００３６】
[0038]  同様に、グラフィックスライブラリコールの平均の量をトラッキングすることの結果が第２の閾値を満たさないとき、またはテクスチャコールの平均の量をトラッキングすることの結果が第３の閾値を満たさないとき、ゲーミングモード検出器４１２が、コンピューティングデバイス４１０がゲーミングアクティビティに従事していないことを決定することができ、コンピューティングデバイス４１０をノンゲーミングモードに切り替え得る。コンピューティングデバイス４１０をノンゲーミングモードに切り替えることは、ＣＰＵのＣＰＵ  ＦＭａｘをリセットすること（例えば、ＣＰＵ  ＦＭａｘの制限を増加させること）を含み得る。例えば、レンダリングのフレームごとのＧＬドローコールごとのＧＬコールの平均の量をトラッキングすることの結果は、結果が１５未満であるとき第２の閾値を満たさず、レンダリングのフレームごとのＧＬドローコールごとのテクスチャコールの平均の量をトラッキングすることの結果は、結果が１以下である（例えば、１を越えない）とき第３の閾値を満たさない。
【００３７】
[0039]  ＳＵＰＤの閾値は、例えば、約１５、正確に１５、または１３−１７の範囲であり得る。ＢＴＰＤの閾値は、例えば、約１、正確に１、または０．８−１．２の範囲であり得る。例において、スライディングウィンドウのスパン（span）を定義する連続するフレームの既定の量は、５個のフレームである。別の例において、フレームの既定の量は、５個のフレームより大きい、または５個のフレームより少ない可能性がある。ＯｐｅｎＧＬ  ＥＳの作業負荷の５個の連続するフレームのスライディングウィンドウのために、ゲーミングモード検出器４１２は、レンダリングされるための５個の連続するフレームの各々ごとのＧＬドローコールごとになされたＧＬコールの平均の量、およびレンダリングされるための５個の連続するフレームの各々ごとのＧＬドローコールごとになされたテクスチャコールの平均の量をトラッキングし得る。ＳＵＰＤが１５以上であり、かつＢＴＰＤが１より大きいとき、ゲーミングモード検出器４１２は、（コンピューティングデバイス４１０が、まだゲーミングモードにない場合）コンピューティングデバイス４１０をゲーミングモードに入れ得る。
【００３８】
[0040]  ゲームは典型的に、１．０の平均ＢＴＰＤより大きく、それらの作業負荷のトラッキングの全体にわたって２．０より大きい最大値を有し得る。その一方、ＵＩのケースは典型的に、１．０の平均ＢＴＰＤ未満、または１．０の平均ＢＴＰＤと同じである。多くの極端なＧＰＵバウンド重量のゲーム（Many extreme GPU bound heavy-weight games）（例えば、Ａｓｐｈａｌｔ−７（商標）およびＮＦＳ−ＭＷ（商標））は、２５以上のＳＵＰＤカウントを有し、一方他のゲーム（例えば、Ｂｅａｃｈ−Ｂｕｇｇｙ（商標）およびＡｓｐｈａｌｔ−８（商標））は、１５−２５の範囲内でＳＵＰＤカウントを有し、それは、ＵＩが使用するケースのうちのいくつかと同様である。ゲームは、ＵＩが使用するケースとは違って、１より大きいそれらのＢＴＰＤカウントを有する可能性があり、それは単一のテクスチャルックアップのみを典型的に有する。
【００３９】
[0041]  説明されたように、ＳＵＰＤカウントは、変わり得る。重い作業負荷を要求するゲームに対し、ＳＵＰＤカウントは、２５まで上がる見込みがある。ＳＵＰＤが１５より大きい場合、作業負荷は、ゲームの広いカテゴリを満たす。ＳＵＰＤカウントが１５と２５の間である場合、ゲーミングモード検出器４１２は、それらが１より大きいか否かを決定するためにテクスチャアップデート（ＢＴＰＤ）をチェックし得る。これら２個の状態は、作業負荷がゲーミングの作業負荷であることの高い可能性に達するために、およびコンピューティングデバイス４１０をゲーミングモードに入れるために組み合わされ得る。言い換えれば、以下の状態がＧＬＥＳの作業負荷の５個の連続するフレームのスライディングウィンドウのために満たされる場合、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０をゲーミングモードに入れ得る：（ＳＵＰＤ＞＝２５）の場合、または（ＳＵＰＤ＞＝１５かつＢＴＰＤ＞１．０）の場合）。
【００４０】
Ｂ．ゲーミングモードに切り替える
[0042]  説明されたように、ゲーミングモード検出器４１２は、コンピューティングデバイス４１０をゲーミングモードおよび／またはノンゲーミングモードに入れ得る。いくつかの実施形態では、コンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに切り替えることは、ＣＰＵ  ＦＭａｘを低減することによってＣＰＵ４１６のＣＰＵ周波数を低減することを含む。このようにして、ゲーミングの作業負荷が処理のためにＧＰＵ４１８行きである間、コンピューティングデバイス４１０のパフォーマンスがおおよそ同じままである間、電力消費は、低減され得る。したがって、ユーザは、ＣＰＵ４１６のＣＰＵ周波数が、それが少しの重いＧＰＵの作業負荷も処理する必要がないため低減された後で、パフォーマンスのあらゆる欠如に気づかないことがある。ＣＰＵ４１６は、２．１５ＧＨｚのＣＰＵ  ＦＭａｘで典型的に動作し得る。例において、ゲーミングモード検出器４１２が、コンピューティングデバイス４１０をゲーミングモードに切り替えるとき、ゲーミングモード検出器４１２は、ＣＰＵ  ＦＭａｘを２．１５ＧＨｚから１．４９ＧＨｚと１．７２ＧＨｚ間の範囲に低減する。
【００４１】
[0043]  別の例において、ＣＰＵ４１６のＣＰＵ  ＦＭａｘは、増加している。ゲーミングモード検出器４１２は、コンピューティングデバイス４１０が処理のためにＧＰＵ４１８行きであるゲーミングの作業負荷をもはや有さないことを検出し得る。ＣＰＵ４１６のＣＰＵ周波数は、例えば、ＣＰＵ  ＦＭａｘの制限を取り除くことによって増加し得る。別の例において、ゲーミングモード検出器４１２が、コンピューティングデバイス４１０をノンゲーミングモードに切り替えるとき、それは、もとのデフォルトの２．１５ＧＨｚにＣＰＵ  ＦＭａｘを（例えば、１．４９ＧＨｚと１．７２ＧＨｚ間の範囲から）増加させる。
【００４２】
[0044]  ＣＰＵ周波数最大値は、様々な技法を使用して低減され得る。例において、オペレーティングシステム４１４は、ファイルシステムノード（例えば、「／ｓｙｓ／ｄｅｖｉｃｅｓ／ｓｙｓｔｅｍ／ｃｐｕ／ｃｐｕ０／ｃｐｕｆｒｅｑ／ｓｃａｌｉｎｇ＿ｍａｘ＿ｆｒｅｑ」ノード）をエクスポーズする（exposes）カーネルを含む。オペレーティングシステム４１４は、例えば、Ｌｉｎｕｘ（商標）オペレーティングシステムであり得る。いくつかの実施形態において、ゲーミングモード検出器４１２は、新しいＣＰＵ  ＦＭａｘをファイルシステムノードに動的に書き込む。ゲーミングモード検出器４１２がコンピューティングデバイス４１０をノンゲーミングモードからゲーミングモードに切り替えるとき、ゲーミングモード検出器４１２は、現在のＣＰＵ  ＦＭａｘ未満の新しいＣＰＵ  ＦＭａｘをノードに書き込む。ゲーミングモード検出器４１２がコンピューティングデバイス４１０をゲーミングモードからノンゲーミングモードに切り替えるとき、ゲーミングモード検出器４１２は、現在のＣＰＵ  ＦＭａｘより大きい新しいＣＰＵ  ＦＭａｘをノードに書き込む。いくつかの実施形態において、ゲーミングモード検出器４１２は、ＣＰＵ  ＦＭａｘそれ自体を修正するためにプログラムされ、ＣＰＵ４１６に新しいＣＰＵ  ＦＭａｘを越えないように命令する。
【００４３】
[0045]  上記に説明され、ここでさらに強調されるように、図１−２は、単に例であり、それらは、特許請求の範囲を過度に限定するべきでない。
【００４４】
ＩＩＩ．例示的な方法
[0046］  図３は、いくつかの実施形態にしたがって、少なくとも１つのＣＰＵのＣＰＵ周波数をスロットリングする例示的な方法９００を例示する流れ図である。方法９００は、限定していると意味されず、他のアプリケーションで使用され得る。
【００４５】
[0047]  ブロック９０５において、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量は、トラッキングされる。例において、このことは、ゲーミングモード検出器４１２によって行われる。ブロック９１０において、ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷は、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールのトラッキングされた平均の量に基づいて検出される。例において、ゲーミングモード検出器４１２は、ＣＰＵ４１６を含むコンピューティングデバイス４１０上のゲーミングの作業負荷のためにこの検出を行う。ブロック９２０において、コンピューティングデバイスは、ゲーミングモードに切り替えられ、ここで、コンピューティングデバイスをゲーミングモードに切り替えることは、コンピューティングデバイス上で実行しているＣＰＵのＣＰＵ周波数最大値を低減することを含む。例において、ゲーミングモード検出器４１２は、切り替えることを行い、それは、コンピューティングデバイス４１０上で実行しているＣＰＵ４１６のＣＰＵ周波数最大値を低減することを含む。
【００４６】
[0048]  追加のプロセスが上記で説明されたブロック９０５−９２０の前、ブロック９０５−９２０の間、またはブロック９０５−９２０の後で行われ得ることも理解される。本明細書で説明された方法９００のブロックの１つ以上が、所望に応じて異なるシーケンスで省略され、組み合わされ、または行われ得ることも理解される。ある実施形態において、ブロック９０５−９２０は、ＣＰＵ４１６の任意の数のＣＰＵコアのために行われ得る。
【００４７】
ＩＶ．例示的なコンピューティングシステム
[0049]  図４は、本明細書で説明された実施形態のうちの任意のものをインプリメントすることに適している例示的なコンピュータシステム１０００のブロック図である。様々なインプリメンテーションにおいて、コンピュータシステム１０００は、コンピューティングデバイス４１０であり得る。コンピュータシステム１０００は、１つ以上のプロセッサを含み得る。コンピュータシステム１０００は、フロッピー（登録商標）ディスク、フレキシブルディスク、ハードディスク、磁気テープ、任意の他の磁気媒体、ＣＤ−ＲＯＭ、任意の他の光媒体、ＲＡＭ、ＰＲＯＭ、ＥＰＲＯＭ、ＦＬＡＳＨ−ＥＰＲＯＭ、任意の他のメモリチップまたはカートリッジ、および／またはプロセッサまたはコンピュータが読み取るために適合される任意の他の媒体を含むグループから各々選択される１つ以上の記憶デバイスをさらに含み得る。１つ以上の記憶デバイスは、コンピュータネットワーク（示されていない）を使用してクライアントまたはサーバと結合される１つ以上のコンピューティングデバイスおよび／またはコンピュータプログラム（例えば、クライアント）が利用可能であり得る記憶された情報を含み得る。コンピュータネットワークは、ＬＡＮ、ＷＡＮ、イントラネット、インターネット、クラウド、ならびに／あるいはシステムの中でコンピューティングデバイスおよび／またはコンピュータプログラムを相互に接続する能力があるそれらのネットワークの任意の組み合わせを含むネットワークの任意のタイプであり得る。
【００４８】
[0050]  コンピュータシステム１０００は、バス１００２、またはコンピュータシステム１０００の様々なコンポーネント間で情報データ、信号、および情報を通信するための他の通信メカニズムを含む。コンポーネントは、例えば、キーパッド／キーボードからキーを選択すること、または１つ以上のボタンまたはリンクを選択すること等のユーザアクション（user actions）を処理するためのインプット／アウトプット（Ｉ／Ｏ）コンポーネント１００４を含み、対応する信号をバス１００２に送る。Ｉ／Ｏコンポーネント１００４は、例えば、ディスプレイ１０１１等のアウトプットコンポーネント、および例えば、カーソルコントロール１０１３（例えば、キーボード、キーパッド、マウス等）のようなインプットコントロールも含み得る。
【００４９】
[0051]  オーディオＩ／Ｏコンポーネント１００５は、オーディオ信号を情報信号にコンバートすることによって、ユーザが情報をインプットするために音声を使用することを可能にすることも含まれ得る。オーディオＩ／Ｏコンポーネント１００５は、ユーザが音声を聞くことを可能にし得る。トランシーバまたはネットワークインタフェース１００６は、通信リンク１０１８を介してコンピュータシステム１０００と他のデバイス間で信号をネットワークに送信および受信する。ある実施形態において、送信は、ワイヤレスであるが、他の送信媒体および方法も適切であり得る。マイクロコントローラ、デジタル信号プロセッサ（ＤＳＰ）、または他の処理コンポーネントであり得るプロセッサ４１６は、例えば、コンピュータシステム１０００のディスプレイ１０１１上のディスプレイのための、または通信リンク１０１８を介する他のデバイスへの送信のため等のこれらの様々な信号を処理する。ゲーミングモード検出器４１２は、プロセッサ４１６で実行され得る。プロセッサ４１６は、他のデバイスへの、例えば、クッキーまたはＩＰアドレス等の情報の送信もコントロールし得る。
【００５０】
[0052]  コンピュータシステム１０００はまた、ＧＰＵ４１８を含む。プロセッサ４１６は、バス１００２を介して、コマンドのストリーム（stream of commands）をＧＰＵ４１８に送ることができ、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量およびテクスチャコールの平均の量をトラッキングし得る。
【００５１】
[0053]  コンピュータシステム１０００のコンポーネントはまた、システムメモリコンポーネント１０１４（例えば、ＲＡＭ）、静的な記憶装置コンポーネント（static storage component）１０１６（例えば、ＲＯＭ）、および／またはコンピュータ可読媒体１０１７を含む。コンピュータシステム１０００は、プロセッサ１０１２によって特定のオペレーションを、およびシステムメモリコンポーネント１０１４に包含される命令の１つ以上のシーケンスを実行することによって他のコンポーネントを行う。ロジックは、コンピュータ可読媒体１０１７で符号化されることができ、それは、実行のためのプロセッサ１０１２への命令を提供することに関与する任意の媒体を指し得る。そのような媒体は、不揮発性媒体、揮発性媒体、および送信媒体を含むがそれらに限定されない、多くの形式を取り得る。様々な実施形態において、不揮発性媒体は、光、または磁気ディスク、または個体のドライブを含み、揮発性媒体は、例えば、システムメモリコンポーネント１０１４等の動的なメモリを含み、送信媒体は、バス１００２を含むワイヤを含む、同軸ケーブル、銅線、および光ファイバーを含む。ある実施形態において、ロジックは、非一時的なコンピュータ可読媒体で符号化される。コンピュータ可読媒体５１７は、プロセッサ５１２によって、またはプロセッサ５１２に関連して使用される命令を包含する、記憶する、通信する、伝播する、またはトランスポートすることができる任意の装置であり得る。コンピュータ可読媒体５１７は、電子、磁気、光学、電磁気、赤外線、または半導体デバイスまたは伝播媒体、または任意の他のメモリチップまたはカートリッジ、あるいはコンピュータが読み取るために適合される任意の他の媒体であり得る。ある例において、送信媒体は、例えば、無線波、光学、および赤外線データ通信の間に生成されるそれら等の、音響波または光波の形式を取り得る。
【００５２】
[0054]  バス１００２がプロセッサ４１６とＧＰＵ４１８間でデータを配信する経路であるように例示されるが、それは、限定していると意図されず、プロセッサ４１６とＧＰＵ４１８間でデータを配信するための異なるメカニズムを使用する他の実施形態が、本開示の範囲内である。
【００５３】
[0055]  本開示の様々な実施形態において、本開示を実施するための命令シーケンスの実行が、コンピュータシステム１０００によって行われ得る。本開示の様々な他の実施形態において、通信リンク１０１８によってネットワーク（例えば、ＬＡＮ、ＷＬＡＮ、ＰＴＳＮ、および／または電気通信、モバイル、およびセルラ電話ネットワークを含む、様々な他のワイヤードまたはワイヤレスネットワーク等）に結合される複数のコンピュータシステム１０００は、お互いとの連携で本開示を実施するための命令シーケンスを行い得る。
【００５４】
[0056]  適用可能な場合、本開示によって提供される様々な実施形態は、ハードウェア、ソフトウェア、またはハードウェアおよびソフトウェアの組み合わせを使用してインプリメントされ得る。また、適用可能な場合、本明細書に記載された様々なハードウェアコンポーネントおよび／またはソフトウェアコンポーネントは、本開示の趣旨から逸脱することなく、ソフトウェア、ハードウェア、および／またはそれら両方を含む複合のコンポーネントに組み合わされ得る。適用可能な場合、本明細書に記載された様々なハードウェアコンポーネントおよび／またはソフトウェアコンポーネントは、本開示の趣旨から逸脱することなく、ソフトウェア、ハードウェア、またはそれら両方を含むサブコンポーネントに分けられ得る。加えて、適用可能な場合、ソフトウェアコンポーネントは、ハードウェアコンポーネントとしてインプリメントされることができ、逆の場合も同じであり得ることは、企図される。
【００５５】
[0057]  本開示にしたがってアプリケーションソフトウェアは、１つ以上のコンピュータ可読媒体上に記憶され得る。本明細書で識別されるアプリケーションソフトウェアは、ネットワーク化されているおよび／またはそうでない、１つ以上の汎用または専用コンピュータおよび／またはコンピュータシステムを使用してインプリメントされ得ることもまた企図される。適用可能な場合、本明細書で説明された様々なステップの順番は、本明細書で説明された特徴を提供するために、変更され得、複合のステップに組み合わされ得、および／またはサブステップに分割され得る。
【００５６】
[0058]  先の開示は、開示されたものに役立つ特定の分野またはまさにその形式に本開示を限定することは意図されない。そのようなものとして、本明細書に明示的に説明されたか暗示的に説明されたかに関わらず、本開示への様々な代替の実施形態および／または修正が開示を踏まえて見込まれることが企図される。本開示の範囲から逸脱することなく、形式において、詳細に、変更がなされ得る。ゆえに、本開示は、特許請求の範囲によってのみ限定される。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングする方法であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることと、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量を前記トラッキングすることに基づいて、検出することと、
前記コンピューティングデバイスをゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスを前記ゲーミングモードに前記切り替えることは、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ周波数最大値（ＦＭａｘ）を低減することを含む、
を備える、方法。
［Ｃ２］
Ｎ個の連続するフレームのスライディングウィンドウは、定義され、前記トラッキングすることは、レンダリングの前記Ｎ個の連続するフレームの各々ごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることを含む、Ｃ１に記載の方法。
［Ｃ３］
前記トラッキングすることの結果が閾値を満たさないとき、前記コンピューティングデバイスが、ゲーミングモードを処理していないことを検出することと、
前記コンピューティングデバイスをノンゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスをノンゲーミングモードに前記切り替えることは、前記ＣＰＵ  ＦＭａｘを最大の許可された周波数にリセットすることを含む、
をさらに含む、Ｃ１に記載の方法。
［Ｃ４］
前記結果が２５未満であるとき、前記結果は、前記閾値を満たさない、Ｃ３に記載の方法。
［Ｃ５］
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすることと、
前記ＣＰＵを含む前記コンピューティングデバイス上の前記ゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量を前記トラッキングすることに基づいて、検出することと、
をさらに含む、Ｃ３に記載の方法。
［Ｃ６］
Ｍ個の連続するフレームの第２のスライディングウィンドウは、定義され、テクスチャコールの平均の量を前記トラッキングすることは、レンダリングの前記Ｍ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの前記平均の量をトラッキングすることを含む、Ｃ５に記載の方法。
［Ｃ７］
グラフィックスライブラリコールの平均の量を前記トラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの平均の量を前記トラッキングすることの第２の結果が第３の閾値を満たすとき、前記ゲーミングの作業負荷は、前記コンピューティングデバイス上で検出される、Ｃ６に記載の方法。
［Ｃ８］
グラフィックスライブラリコールの平均の量を前記トラッキングすることの前記第１の結果が前記第２の閾値を満たさないとき、またはテクスチャコールの平均の量を前記トラッキングすることの前記第２の結果が前記第３の閾値を満たさないとき、前記コンピューティングデバイスが、ゲーミングの作業負荷を処理していないことを検出する、をさらに含む、Ｃ７に記載の方法。
［Ｃ９］
連続するフレームの第１のスライディングウィンドウは、５であり、かつ連続するフレームの前記第２のスライディングウィンドウは、５である、Ｃ８に記載の方法。
［Ｃ１０］
前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、Ｃ８に記載の方法。
［Ｃ１１］
グラフィックスライブラリコールの平均の量を前記トラッキングすることは、Ｎ個の連続するフレームのあらゆるスライディングウィンドウのために、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量をトラッキングすることを含む、Ｃ１に記載の方法。
［Ｃ１２］
レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすること、
をさらに含む、Ｃ１１に記載の方法。
［Ｃ１３］
グラフィックスライブラリコールの平均の量を前記トラッキングすることの結果が第１の閾値を満たすとき、前記検出することは、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することを含む、Ｃ１２に記載の方法。
［Ｃ１４］
グラフィックスライブラリコールの平均の量を前記トラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの平均の量を前記トラッキングすることの第２の結果が第３の閾値を満たすとき、前記検出することは、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することを含む、Ｃ１３に記載の方法。
［Ｃ１５］
前記第１の結果が２５以上であるとき、前記第１の結果は、前記第１の閾値を満たし、前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、Ｃ１４に記載の方法。
［Ｃ１６］
ＣＰＵ  ＦＭａｘを前記低減することは、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを１．４９ＧＨｚと１．７２ＧＨｚ間の範囲に制限することを含む、Ｃ１に記載の方法。
［Ｃ１７］
前記コンピューティングデバイスは、カーネルを含み、ＣＰＵ  ＦＭａｘを前記低減することは、前記カーネルの中でＡＰＩコールを呼び出すことを含む、Ｃ１に記載の方法。
［Ｃ１８］
前記コンピューティングデバイスは、モバイルデバイスである、Ｃ１に記載の方法。
［Ｃ１９］
前記モバイルデバイスは、スマートフォン、タブレット、ラップトップ、または携帯情報端末である、Ｃ１８に記載の方法。
［Ｃ２０］
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングするためのシステムであって、
ＣＰＵと、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングし、前記ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、グラフィックスライブラリコールの前記トラッキングされた平均の量の結果に基づいて、検出するゲーミングモード検出器と、ここにおいて、前記ゲーミングの作業負荷を検出することに応答して、前記ゲーミングモード検出器は、前記コンピューティングデバイスをゲーミングモードに切り替え、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ  ＦＭａｘを低減する、
を備えるシステム。
［Ｃ２１］
前記ゲーミングモード検出器は、Ｎ個のフレームのスライディングウィンドウを定義し、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量をトラッキングし、ここにおいて、前記結果が閾値を満たすとき、前記ゲーミングモード検出器は、前記コンピューティングデバイス上の前記ゲーミングモードを検出する、Ｃ２０に記載のシステム。
［Ｃ２２］
前記コンピューティングデバイスが前記ゲーミングモードにあることを決定され、かつ前記結果が前記閾値を満たさないとき、前記ゲーミングモード検出器は、前記コンピューティングデバイスをノンゲーミングモードに切り替える、Ｃ２１に記載のシステム。
［Ｃ２３］
前記結果が２５以上であるとき、前記結果は、前記閾値を満たす、Ｃ２１に記載のシステム。
［Ｃ２４］
前記ゲーミングモード検出器は、レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングし、ここにおいて、グラフィックスライブラリコールの前記平均の量をトラッキングすることの第１の結果が第２の閾値を満たし、かつテクスチャコールの前記平均の量をトラッキングすることの第２の結果が第３の閾値を満たすとき、前記ゲーミングモード検出器は、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出する、Ｃ２１に記載のシステム。
［Ｃ２５］
前記第１の結果が２５以上であるとき、前記第１の結果は、前記第１の閾値を満たし、前記第１の結果が１５以上であるとき、前記第１の結果は、前記第２の閾値を満たし、前記第２の結果が１より大きいとき、前記第２の結果は、前記第３の閾値を満たす、Ｃ２４に記載のシステム。
［Ｃ２６］
前記ゲーミングモード検出器は、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを前記ＣＰＵの最大の許可された周波数レベルにリセットし、前記ＣＰＵの前記ＣＰＵ  ＦＭａｘを増加させる、Ｃ２０に記載のシステム。
［Ｃ２７］
オペレーションを行うためのコンピュータ実行可能な命令を記憶したコンピュータ可読媒体であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることと、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を、レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量を前記トラッキングすることに基づいて、検出することと、
前記コンピューティングデバイスをゲーミングモードに切り替えることと、ここにおいて、前記コンピューティングデバイスをゲーミングモードに前記切り替えることは、前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ  ＦＭａｘを低減することを含む、
を備える、コンピュータ可読媒体。
［Ｃ２８］
前記オペレーションは、
Ｎ個の連続するフレームのスライディングウィンドウを定義することと、前記トラッキングすることは、レンダリングの前記Ｎ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングすることを含む、
グラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量の結果が閾値を満たすとき、前記コンピューティングデバイス上の前記ゲーミングの作業負荷を検出することと、
をさらに含む、Ｃ２７に記載のコンピュータ可読媒体。
［Ｃ２９］
前記オペレーションは、
レンダリングのＭ個の連続するフレームの各々のためのグラフィックスライブラリドローコールごとになされたテクスチャコールの平均の量をトラッキングすることと、
グラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの前記平均の量の結果が第２の閾値を満たし、かつテクスチャコールの前記平均の量の結果が第３の閾値を満たすとき、前記コンピューティングデバイス上で前記ゲーミングの作業負荷を検出することと、前記第１の閾値が、前記第２の閾値とは異なる、
をさらに含む、Ｃ２８に記載のコンピュータ可読媒体。
［Ｃ３０］
少なくとも１つの中央処理装置（ＣＰＵ）のＣＰＵ周波数をスケーリングするための装置であって、
レンダリングのフレームごとのグラフィックスライブラリドローコールごとになされたグラフィックスライブラリコールの平均の量をトラッキングするための手段と、
ＣＰＵを含むコンピューティングデバイス上のゲーミングの作業負荷を検出するための手段と、
前記コンピューティングデバイス上で実行している前記ＣＰＵのＣＰＵ  ＦＭａｘを低減するための手段と、
を備える、装置。
【図１】
0006321167.tif 000002
【図２】
0006321167.tif 000003
【図３】
0006321167.tif 000004
【図４】
0006321167.tif 000005