(57)【要約】  処理ユニットの異なる動作周波数における処理ユニットのアクティブ時間とストール時間、および処理ユニットをシステムメモリに相互接続するバスのバス帯域幅、を別個の値として、決定するための技法が説明される。本技法は、決定されたアクティブ時間とストール時間とに基づいて、処理ユニットの動作周波数および／またはバス帯域幅を調整し得る。
2019510319.tif 000002
【特許請求の範囲】
【請求項１】
動作点決定の方法であって、前記方法が、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を備える、方法。
【請求項２】
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、請求項１に記載の方法。
【請求項３】
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定することが、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定することを備える、
請求項１に記載の方法。
【請求項４】
前記処理ユニットの前記第２のアクティブ時間を決定することが、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を備える、請求項１に記載の方法。
【請求項５】
前記処理ユニットの前記第２のストール時間を決定することは、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を備える、請求項１に記載の方法。
【請求項６】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１に記載の方法。
【請求項７】
前記処理ユニットが第２の処理ユニットを備え、ここにおいて、
前記第１のアクティブ時間を決定することが、第１の処理ユニットを用いて、前記第１のアクティブ時間を決定することを備え、
前記第１のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第１のストール時間を決定することを備え、
前記第２のアクティブ時間を決定することが、前記第１の処理ユニットを用いて、前記第２のアクティブ時間を決定することを備え、
前記第２のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第２のストール時間を決定することを備え、
前記動作点を調整すべきかどうかを決定することが、前記第１の処理ユニットを用いて、前記動作点を調整すべきかどうかを決定することを備え、
前記動作点を調整することが、前記第１の処理ユニットを用いて、前記動作点を調整することを備える、
請求項１に記載の方法。
【請求項８】
前記第１の処理ユニットが中央処理ユニット（ＣＰＵ）を備え、前記第２の処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、請求項７に記載の方法。
【請求項９】
前記第１の処理ユニットと前記第２の処理ユニットとが同じ処理ユニットである、請求項７に記載の方法。
【請求項１０】
動作点決定のためのデバイスであって、前記デバイスが、
処理ユニットと、
回路と
を備え、前記回路が、
第１の動作点における前記処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記処理ユニットの動作点を、前記第１の動作点から前記第２の動作点に調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行うように構成された、
デバイス。
【請求項１１】
前記回路が、前記第１のアクティブ時間を決定することと、前記第１のストール時間を決定することと、前記第２のアクティブ時間を決定することと、前記第２のストール時間を決定することと、前記動作点を調整すべきかどうかを決定することと、前記動作点を調整することとを行うように前記回路を構成する動的電力マネージャ（ＤＰＭ）の命令を実行するように構成された、請求項１０に記載のデバイス。
【請求項１２】
中央処理ユニット（ＣＰＵ）をさらに備え、ここにおいて、前記ＣＰＵが前記回路を備え、ここにおいて、前記処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、
請求項１０に記載のデバイス。
【請求項１３】
前記処理ユニットが前記回路を含む、請求項１０に記載のデバイス。
【請求項１４】
システムメモリと、
前記処理ユニットを前記システムメモリに相互接続するバスと
をさらに備え、
ここにおいて、前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているときの前記バスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、
請求項１０に記載のデバイス。
【請求項１５】
前記回路が、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
を行うように構成され、
ここにおいて、前記動作点を調整すべきかどうかを決定するために、前記回路が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するように構成された、
請求項１０に記載のデバイス。
【請求項１６】
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記回路が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行うように構成された、請求項１０に記載のデバイス。
【請求項１７】
前記処理ユニットの前記第２のストール時間を決定するために、前記回路は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行うように構成された、請求項１０に記載のデバイス。
【請求項１８】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１０に記載のデバイス。
【請求項１９】
動作点決定のためのデバイスであって、前記デバイスが、
第１の動作点における処理ユニットの第１のアクティブ時間を決定するための手段と、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定するための手段と、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定するための手段と、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定するための手段と、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定するための手段と、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整するための手段と
を備える、デバイス。
【請求項２０】
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、請求項１９に記載のデバイス。
【請求項２１】
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定するための手段と、
前記ビジー割合をしきい値と比較するための手段と
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定するための前記手段が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するための手段を備える、
請求項１９に記載のデバイス。
【請求項２２】
前記処理ユニットの前記第２のアクティブ時間を決定するための前記手段が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定するための手段
を備える、請求項１９に記載のデバイス。
【請求項２３】
前記処理ユニットの前記第２のストール時間を決定するための前記手段は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定するための手段
を備える、請求項１９に記載のデバイス。
【請求項２４】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１９に記載のデバイス。
【請求項２５】
実行されたとき、１つまたは複数のプロセッサに、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
【請求項２６】
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記命令が、前記１つまたは複数のプロセッサに、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行わせる、請求項２５に記載のコンピュータ可読記憶媒体。
【請求項２７】
前記処理ユニットの前記第２のストール時間を決定するために、前記命令は、前記１つまたは複数のプロセッサに、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行わせる、請求項２５に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示は、周波数および帯域幅の動的調整（dynamic adjustment）に関し、より詳細には、プロセッサ周波数（processor frequency）およびバス帯域幅（bus bandwidth）の動的スケーリング（dynamic scaling）に関する。
【背景技術】
【０００２】
[0002]  モバイルデバイスは、限られたサイズおよび／または容量のバッテリーによって電力供給される。一般に、モバイルデバイスは、特に、通話を行うこと、電子メールを確認すること、ピクチャ／ビデオの記録／再生、ラジオを聴くこと、ナビゲーション、ウェブブラウジング、ゲームをプレイすること、デバイス（device）を管理すること、および計算を実施する（perform）ことのために使用される。これらのアクションの多くは、いくつかのタスクを実施するために異なる処理ユニット（processing unit）を利用する。処理ユニットの例は、中央処理ユニット（ＣＰＵ：central processing unit）、デジタル信号プロセッサ（ＤＳＰ：digital signal processor）、グラフィックス処理ユニット（ＧＰＵ：graphics processing unit）などを含む。これらの処理ユニットは、一般に、モバイルデバイスにおいて大量の電力を消費することがある。したがって、バッテリー寿命（battery life）を延長するために、そのような処理ユニットの電力消費（power consumption）を管理することが有益である。
【発明の概要】
【０００３】
[0003]  概して、本開示は、処理ユニットの動作周波数（operating frequency）、および／またはバス帯域幅を調整する（adjust）ための技法について説明する。より詳細に説明されるように、動的電力マネージャ（ＤＰＭ：Dynamic Power Manager）が、処理ユニットの周波数と、バス帯域幅との組合せを決定するために、処理ユニットのアクティブ時間（active time）と処理ユニットのストール時間（stall time）とを別々に考慮し得る。ＤＰＭは、回路（circuitry）、ハードウェア回路、またはそれらの組合せ上で実行（execute）するソフトウェアモジュールであり得る。ＤＰＭを含む（たとえば、ＤＰＭを実行するかまたはＤＰＭのハードワイヤード回路を含む）回路は、処理ユニット上に、または異なる処理ユニット上にあり得る。
【０００４】
[0004]  ストール時間は、第２の異なるクロック領域（clock domain）における処理の遅延（delay）による、第１のクロック領域において動作する処理ユニットによる処理の遅延を示す。アクティブ時間は、処理ユニットの構成要素がどのくらいの時間の間アクティブであるかを示す。
【０００５】
[0005]  ＤＰＭの回路は、周波数および／またはバス帯域幅が別の周波数および／またはバス帯域幅に調整された場合に処理ユニットのアクティブ時間がどのようになるかを決定することと、別個の値（separate value）として、周波数および／またはバス帯域幅が別の周波数および／またはバス帯域幅に調整された場合に処理ユニットのストール時間がどのようになるかを決定することとを行うように構成され得る。ＤＰＭユニットの回路は、次いで、周波数および／またはバス帯域幅を調整すべきかどうかを決定し得る。周波数およびバス帯域幅を調整すべきかどうかを決定するために、アクティブ時間とストール時間とを分離することによって、ＤＰＭの回路は、アクティブ時間とストール時間とが、周波数およびバス帯域幅を決定するために単一の値に一緒にグループ化される例と比較して、性能劣化（performance degradation）なしに最大可能な電力節約（maximum possible power saving）を与える周波数およびバス帯域幅をより正確に決定し得る。
【０００６】
[0006]  一例では、本開示は、動作点決定（operating point determination）の方法について説明し、本方法は、第１の動作点（operating point）における処理ユニットの第１のアクティブ時間を決定することと、第１の動作点における処理ユニットの第１のストール時間を決定することと、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定することと、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定することと、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定することと、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整することとを備える。
【０００７】
[0007]  一例では、本開示は、動作点決定のためのデバイスについて説明し、本デバイスは処理ユニットと回路とを備える。回路は、第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、第１の動作点における処理ユニットの第１のストール時間を決定することと、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定することと、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定することと、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定することと、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整することとを行うように構成される。
【０００８】
[0008]  一例では、本開示は、動作点決定のためのデバイスについて説明し、本デバイスは、第１の動作点における処理ユニットの第１のアクティブ時間を決定するための手段と、第１の動作点における処理ユニットの第１のストール時間を決定するための手段と、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定するための手段と、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定するための手段と、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定するための手段と、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整するための手段とを備える。
【０００９】
[0009]  一例では、本開示は、実行されたとき、１つまたは複数のプロセッサ（processor）に、第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、第１の動作点における処理ユニットの第１のストール時間を決定することと、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定することと、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定することと、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定することと、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整することとを行わせる命令（instruction）を記憶したコンピュータ可読記憶媒体（computer-readable storage medium）について説明する。
【００１０】
[0010]  １つまたは複数の例の詳細が添付の図面および以下の説明に記載される。他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになろう。
【図面の簡単な説明】
【００１１】
【図１】[0011]  本開示で説明される１つまたは複数の例示的な技法による、データ（data）を処理するための例示的なデバイスを示すブロック図。
【図２】[0012]  図１に示されたデバイスの構成要素をより詳細に示すブロック図。
【図３Ａ】[0013]  本開示で説明される例による、動作周波数に応じたビジー割合（busy percentage）の一例を示す概念図。
【図３Ｂ】本開示で説明される例による、動作周波数に応じたビジー割合の一例を示す概念図。
【図４Ａ】[0014]  本開示で説明される例による、バス帯域幅に応じたビジー割合の一例を示す概念図。
【図４Ｂ】本開示で説明される例による、バス帯域幅に応じたビジー割合の一例を示す概念図。
【図５】[0015]  異なる動作周波数（different operating frequency）とバス帯域幅との組合せのための動作点の例を示す概念図。
【図６】[0016]  本開示で説明される技法による、動作周波数およびバス帯域幅決定の例示的な方法を示すフローチャート。
【図７Ａ】[0017]  動作点を決定する例示的なアルゴリズムを示すフローチャート。
【図７Ｂ】動作点を決定する例示的なアルゴリズムを示すフローチャート。
【発明を実施するための形態】
【００１２】
[0018]  プロセッサがデータをどのくらい速く処理することができるかと、プロセッサがどのくらいの電力を消費するかとに影響を及ぼすことがある２つの要因は、プロセッサの動作周波数とバス帯域幅とを含む。バス帯域幅は、どのくらいのデータが時間単位ごとにバス（bus）を介して進むことができるかを示す。バスは、様々なユニット（たとえば、（１つまたは複数の）プロセッサ、システムメモリ（system memory）、ディスプレイなど）を互いに相互接続（interconnect）する。バスのための別の用語はファブリック（fabric）であり、バス帯域幅のための別の用語はファブリック帯域幅（fabric bandwidth）である。
【００１３】
[0019]  動作周波数は、プロセッサが時間単位ごとに処理することができるデータの量を定義する。より詳細に説明されるように、動的電力マネージャ（ＤＰＭ）が、プロセッサの周波数およびバス帯域幅を決定するために、本開示で説明される例示的な技法を実施するように構成され得る。ＤＰＭは、ハードウェアまたはソフトウェアであり得、それの動作周波数が制御されているデバイスの一部であり得るが、それの動作周波数が制御されているデバイスの外部にあり得る。
【００１４】
[0020]  本開示で説明される技法は、概して、中央処理ユニット（ＣＰＵ）、グラフィックス処理ユニット（ＧＰＵ）、モデム中で使用されるデジタル信号プロセッサ（ＤＳＰ）、オーディオ、またはセンサーサブシステムなど、多種多様なプロセッサに適用可能である。単に説明しやすいように、例はＧＰＵに関して説明される。
【００１５】
[0021]  ＣＰＵの動作周波数が制御されている場合、ＤＰＭは、ＣＰＵの一部（たとえば、動的クロックおよび電圧スケーリング（ＤＣＶＳ：dynamic clock and voltage scaling）モジュール）であり得る。ＤＣＶＳモジュールは、様々な構成要素（たとえば、クロック生成器（clock generator）を含む回路）の電圧レベルを制御し、これは、ＣＰＵの動作周波数を制御する（たとえば、クロック生成器によって生成されたクロック信号の周波数を制御する）。ＧＰＵの動作周波数が制御されている場合、ＤＰＭはＧＰＵの一部（たとえば、ＧＰＵにおいてコマンド処理ユニット上で制御プログラムとして実行するＧＰＵ  ＤＣＶＳ）であり得る。いくつかの例では、ＧＰＵの動作周波数は制御され得るが、ＤＰＭはＣＰＵの一部（たとえば、ＣＰＵ上で動作するＧＰＵ  ＤＣＶＳドライバ）であり得る。いくつかの例では、ＤＰＭは、外部デバイスの一部（たとえば、比較的独立した小さいプロセッサ上のハードウェアまたはソフトウェア）であり得る。そのような例では、ＤＰＭは、それの動作周波数が制御されているデバイスの動作周波数を制御すべきかどうかを決定するために、周期的に起動し得る。いずれの場合も、ＤＰＭは、デバイスの動作周波数をスケーリングし、バス帯域幅に投票（vote）する。
【００１６】
[0022]  より詳細に説明されるように、本開示は、電力を節約するための例示的な技法について説明する。概して、動作周波数または帯域幅（operating frequency or bandwidth）が低いほど、電力消費は低くなる。したがって、これらの２つの要因は、性能（performance）と電力（power）の両方に影響を及ぼす。例示的な技法は、システムを、最低必要な動作周波数および帯域幅に設定し、「最低必要な（lowest necessary）」は、それが、性能劣化なしに最大可能な電力節約に近づくことができることを意味する。
【００１７】
[0023]  たとえば、ＤＰＭを介した、ホストプロセッサ（たとえば、ＣＰＵ）が、ＧＰＵの「ビジー時間（busy time）」に基づいて、ＧＰＵのバス帯域幅および動作周波数をスケーリングする（scale）ように構成され得、ここで、ＧＰＵビジー時間は、ＧＰＵアクティブ時間＋ＧＰＵストール時間に等しい。ＧＰＵアクティブ時間は、ＧＰＵが、それ自体のクロック領域においていくつかの算術、論理、制御フロー、またはローカルキャッシュ／メモリ動作を実施しており、異なるクロック領域における動作、たとえば、システムメモリアクセス動作を待っていない量に等しい。クロック領域は、（たとえば、同じチップ上のまたはオフチップの）回路の他のブロックの周波数とは異なり得る単一のクロック周波数において動作する回路のブロックである。たとえば、ＣＰＵとそれのキャッシュとがあるクロック領域中にあり、ＧＰＵとそれのキャッシュとが別のクロック領域中にあり、システムメモリがまた別のクロック領域中にあるような複数のクロック領域があり得る。
【００１８】
[0024]  ＧＰＵストール時間は、ＧＰＵが、別のクロック領域（たとえば、異なるクロック領域において動作するハードウェアユニット）からのデータを待つ間ストールされる時間の量（amount of time）を示す。一例として、ＧＰＵのローカルキャッシュは、ＧＰＵの回路と同じクロック領域中にあり得る。ＧＰＵは、最初に、ローカルキャッシュからデータを取り出すことを試み、利用不可能である場合（たとえば、キャッシュミス）、システムメモリからデータを読み取り得る。しかしながら、ＧＰＵは、システムメモリからのデータを待ってストールされ得、この遅延はＧＰＵストール時間の一部である。
【００１９】
[0025]  再び、例は、ＣＰＵがＧＰＵの動作周波数を決定することに関して説明される（たとえば、ＤＰＭは、ＣＰＵ上で実行するＧＰＵ  ＤＣＶＳドライバである）。しかしながら、例示的な技法は、上記で説明されたように、他の場合に適用可能である。また、例は、時間（たとえば、アクティブ時間およびストール時間）に関して説明されるが、割合（percentage）（たとえば、アクティブ時間割合およびストール時間割合）の分析は、本技法を実装するための別のやり方であり得る。本開示では、「アクティブ時間（active time）」という用語は、一般的に、アクティブ時間が時間の測度（measure）（たとえば、時間の量）である場合、およびアクティブ時間が時間の比（ratio）（たとえば、割合）である場合を指すために使用される。同様に、「ストール時間（stall time）」という用語は、一般的に、ストール時間が時間の測度（たとえば、時間の量）である場合、およびストール時間が時間の比（たとえば、割合）である場合を指すために使用される。
【００２０】
[0026]  ＧＰＵビジー時間から、ホストプロセッサは、ＧＰＵビジー割合（たとえば、ＧＰＵビジー時間と時間期間（period of time）との比）を決定し得る。ＧＰＵビジー割合がしきい値（threshold）よりも大きくなる場合、ホストプロセッサは、ＧＰＵビジー割合がしきい値よりも低くなるように、バス帯域幅、ＧＰＵ動作周波数、またはその両方を増加させ得る。逆に、ＧＰＵビジー割合がしきい値（同じしきい値または異なるしきい値）を下回る場合、ホストプロセッサは、バス帯域幅、ＧＰＵ動作周波数またはその両方が低減され得るかどうかを決定し得る。このようにして、ホストプロセッサは、ＤＰＭを介して、システム（たとえば、ホストプロセッサ、ＧＰＵ、および相互接続バス）を、最低必要な電力レベルにおいて動作するように保つために、バス帯域幅、ＧＰＵ動作周波数、またはその両方を調整することができる。
【００２１】
[0027]  しかしながら、バス帯域幅、ＧＰＵ動作周波数、またはその両方を調整すべきかどうかを決定するためにＧＰＵビジー時間にのみ依拠することは、調整が可能であるときにバス帯域幅、ＧＰＵ動作周波数、またはその両方に対する調整を行わないことになり得る。たとえば、いくつかの技法は、ＧＰＵビジー時間がＧＰＵ動作周波数に反比例すると仮定する。そのような場合、ホストプロセッサは、ホストプロセッサがＧＰＵストール時間および／またはＧＰＵアクティブ時間を別々に考慮することができなかったので、ＧＰＵ動作周波数がどのようになるべきであるかを過大評価し得る。
【００２２】
[0028]  例示的な例として、ホストプロセッサが、ＧＰＵ動作周波数の低減の後に、ＧＰＵビジー割合が９０％よりも多くなると決定した場合、ホストプロセッサは、動作周波数を低減すべきでないと仮定する。この例では、ＧＰＵは、２００ＭＨｚにおいて動作しており、５０％ビジーであると仮定する。ＧＰＵビジー時間がＧＰＵ動作周波数に反比例するという仮定のために、ホストプロセッサは、動作周波数が１００ＭＨｚに低減される場合、ＧＰＵが１００％ビジーになると決定し得る。１００％ビジーは９０％ビジーよりも大きいので、ホストプロセッサは、ＧＰＵの動作周波数をダウンスケール（downscale）しないであろう。
【００２３】
[0029]  しかしながら、実際には、５０％ビジー時間は、実際は、ＧＰＵアクティブ時間について３０％であり、ＧＰＵストール時間について２０％であり得る。１次近似として、ＧＰＵの動作周波数が１００ＭＨｚに低減された場合、ＧＰＵアクティブ時間は６０％まで２倍になることになり、ＧＰＵストール時間は、２０％のままであることになる（この例では、ＧＰＵストール時間はキャッシュミスにより、したがって、ＧＰＵ動作周波数は、データがシステムメモリにまたはシステムメモリからどのくらい速く転送されるかに対する直接的影響を有しないであろう）。この例では、総ビジー割合は８０％（たとえば、６０％＋２０％）である。８０％は９０％よりも小さいので、ホストプロセッサは、ＧＰＵの動作周波数を１００ＭＨｚにダウンスケールすることになり、性能ペナルティ（performance penalty）がないことになる。同じ分析がバス帯域幅の場合に適用され得る。
【００２４】
[0030]  本開示で説明される技法は、ＧＰＵビジー割合が所与のバス帯域幅およびＧＰＵ動作周波数についてどのようになるかを決定することに基づく。本開示では、「動作点」（ＯＰＰ：operating point）は、ＧＰＵ動作周波数（ＧＯＦ：GPU operating frequency）と、バス帯域幅（ＢＢ：bus bandwidth）との特定の組合せを指す。たとえば、ＯＰＰ００＝（ＧＯＦ０，ＢＢ０）であり、ＯＰＰ０１＝（ＧＯＦ０，ＢＢ１）であり、ＯＰＰ１０＝（ＧＯＦ１，ＢＢ０）であり、以下同様であり、ここで、ＧＯＦ０とＧＯＦ１とは異なるＧＰＵ動作周波数であり、ＢＢ０とＢＢ１とは異なるバス帯域幅である。
【００２５】
[0031]  いくつかの例では、ＤＰＭを介した、ホストプロセッサは、（たとえば、以下で説明されるように、ＧＰＵに組み込まれたハードウェア性能カウンタ（hardware performance counter）を用いて）第１のＯＰＰにおけるＧＰＵアクティブ時間およびＧＰＵストール時間を決定し、第２のＯＰＰにおけるＧＰＵアクティブ時間およびＧＰＵストール時間を決定するためにこの情報を使用する。いくつかの例では、ハードウェア性能カウンタは、ＧＰＵがアクティブである時間の量、およびＧＰＵがビジーである時間の量をカウントし、ＧＰＵストール時間を決定するために、ＧＰＵビジー時間からＧＰＵアクティブ時間を減算し得る。いくつかの例では、ＧＰＵビジー時間を決定し、ＧＰＵストール時間を決定するためにＧＰＵアクティブ時間を減算するのではなく、プロセッサストールサイクルカウンタ（processor stall cycle counter）を使用することが可能であり得る。ホストプロセッサは、第２のＯＰＰにおける決定されたＧＰＵアクティブ時間およびＧＰＵストール時間から第２のＯＰＰにおけるＧＰＵビジー時間を決定する。第２のＯＰＰにおけるＧＰＵビジー時間を決定するための式は、以下の通りであり得る。
【００２６】
ＯＰＰ００＝ＧＯＦ０およびＦＢ０をもつ現在の動作点
ＴＧ１＝（カウンタに基づく）ＯＰＰ００におけるプロセッサアクティブ時間
ＴＭ１＝（同じくカウンタから測定された）ＯＰＰ００におけるプロセッサストール時間。
【００２７】
ＯＰＰ１１＝ＧＯＦ１およびＦＢ１をもつ動作点
ＴＧ２＝ＯＰＰ１１におけるプロセッサアクティブ時間、およびＴＧ１＊（ＧＯＦ０／ＧＯＦ２）に等しい
ＴＭ２＝ＯＰＰ１１におけるプロセッサストール時間、およびＴＭ１＊（ＦＢ０／ＦＢ１）に等しい
ＯＰＰ１１におけるプロセッサビジー時間＝ＴＧ２＋ＴＭ２。
【００２８】
[0032]  上記では、ＦＢ０は、動作点ＯＰＰ００に関連するバス帯域幅に対応する。しかしながら、いくつかの例では、ＦＢ０を使用するのではなく、ホストプロセッサは、インターフェースが、その間にデータを転送するのにビジーである時間期間で除算された、ＧＰＵバスインターフェースを通して転送されるデータの総量として定義される、有効バス帯域幅（effective bus bandwidth）を使用し得る。ホストプロセッサは、バス帯域幅がどのようになるべきであるかに関して投票するので、有効バス帯域幅は、ホストプロセッサが決定したものとは異なることが可能である。
【００２９】
[0033]  ホストプロセッサは、期間時間にわたるプロセッサ（たとえば、ＣＰＵまたはＧＰＵ）バスインターフェースを通るデータの量を決定することによって、有効バス帯域幅を測定し得る。ＯＰＰ００の現在の動作点に設定するために、ホストプロセッサは、ＧＰＵの周波数をＧＯＦ０に設定し、バス帯域幅をＦＢ０に設定するように投票した。たとえば、バス帯域幅を異なるレベルに設定するという決定が行われた場合、有効バス帯域幅が、結局ＦＢ０とは異なる何かになることが可能であり得る。そのような場合、ホストプロセッサは、ＦＢ０値の代わりに有効バス帯域幅を使用し得る。
【００３０】
[0034]  ＧＰＵビジー時間から、ホストプロセッサは、ＧＰＵビジー割合を決定し、ＧＰＵビジー割合がしきい値よりも小さいかどうかを決定し得る。ＧＰＵビジー割合がしきい値よりも小さい場合、ＧＰＵは、ＧＰＵ動作周波数および／またはバス帯域幅を減少させ（たとえば、ＯＰＰ００からＯＰＰ１１に移動し）得る。
【００３１】
[0035]  図１は、本開示の技法を実装するために使用され得る例示的なコンピューティングデバイス２を示すブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、ワイヤレス通信デバイス（たとえば、携帯電話、セルラー電話、衛星電話、および／または携帯電話ハンドセットなど）、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカルデータを処理および／または表示する任意の他のタイプのデバイスを備え得る。
【００３２】
[0036]  図１の例に示されているように、コンピューティングデバイス２は、ユーザ入力インターフェース４と、ＣＰＵ６と、メモリコントローラ８と、システムメモリ１０と、グラフィックス処理ユニット（ＧＰＵ）１２と、ローカルメモリ１４と、ディスプレイインターフェース１６と、ディスプレイ１８と、バス２０とを含む。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２およびディスプレイインターフェース１６は、バス２０を使用して互いと通信し得る。バス２０は、第３世代バス（たとえば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔバスまたはＩｎｆｉｎｉＢａｎｄバス）、第２世代バス（たとえばアドバンストグラフィックスポートバス、周辺構成要素相互接続（ＰＣＩ）エクスプレスバス、またはアドバンストエクステンシブルインターフェース（ＡＸＩ：Advanced eXentisible Interface）バス）、あるいは別のタイプのバスまたはデバイスの相互接続などの様々なバス構造のいずれかであり得る。図１に示されている異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、コンピューティングデバイスの他の構成および／あるいは同じまたは異なる構成要素をもつ他のグラフィックス処理システムが、本開示の技法を実装するために使用され得ることに留意されたい。
【００３３】
[0037]  ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるためにコンピューティングデバイス２に入力を与え得る。ＣＰＵ６上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、ユーザ入力インターフェース４を介してコンピューティングデバイス２に結合されたキーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの１つまたは複数の入力デバイス（図示せず）を介して、コンピューティングデバイス２に入力を与え得る。
【００３４】
[0038]  ＣＰＵ６上で実行するソフトウェアアプリケーションは、ディスプレイ１８へのグラフィックスデータのレンダリングを行わせるようにＣＰＵ６に命令する１つまたは複数のグラフィックスレンダリング命令（graphics rendering instruction）を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ（ＯｐｅｎＧＬ（登録商標）：Open Graphics Library）アプリケーションプログラミングインターフェース（ＡＰＩ）、オープングラフィックスライブラリ組込みシステムズ（ＯｐｅｎＧＬ  ＥＳ：Open Graphics Library Embedded Systems）ＡＰＩ、ＯｐｅｎＣＬ  ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ  ＡＰＩ、Ｘ３Ｄ  ＡＰＩ、ＲｅｎｄｅｒＭａｎ  ＡＰＩ、ＷｅｂＧＬ  ＡＰＩ、あるいは任意の他の公開またはプロプライエタリ規格グラフィックスＡＰＩなどのグラフィックスＡＰＩに準拠し得る。本技法は、特定のＡＰＩを必要とすることに限定されると見なされるべきではない。
【００３５】
[0039]  上記の例はグラフィックス処理に関して説明されたが、本開示で説明される技法はそのように限定されない。グラフィックス処理に関して説明される例は、理解を支援するために与えられる。本技法は、何らかの他のデジタルまたはアナログ信号プロセッサによって実施（perform）される処理など、他の処理にも適用可能である。
【００３６】
[0040]  グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングの一部または全部を実施させるために、１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
【００３７】
[0041]  メモリコントローラ８は、システムメモリ１０に入るおよびそれから出るデータの転送を可能にする。たとえば、メモリコントローラ８は、コンピューティングデバイス２中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、メモリ１０に関するそのようなコマンドをサービスし得る。メモリコントローラ８はシステムメモリ１０に通信可能に結合される。メモリコントローラ８は、ＣＰＵ６とシステムメモリ１０の両方とは別個である処理モジュールであるものとして図１の例示的なコンピューティングデバイス２中に示されているが、他の例では、メモリコントローラ８の機能の一部または全部は、ＣＰＵ６とシステムメモリ１０の一方または両方の上で実装され得る。
【００３８】
[0042]  システムメモリ１０は、ＣＰＵ６が実行するためにアクセス可能であるプログラムモジュールおよび／または命令、ならびに／あるいはＣＰＵ６上で実行するプログラムによる使用のためのデータを記憶し得る。たとえば、システムメモリ１０は、ユーザアプリケーションと、アプリケーションに関連するグラフィックスデータとを記憶し得る。システムメモリ１０は、コンピューティングデバイス２の他の構成要素による使用のための情報、および／または他の構成要素によって生成される情報をさらに記憶し得る。たとえば、システムメモリ１０は、ＧＰＵ１２のためのデバイスメモリとして働き得、ＧＰＵ１２によってそれに対して演算されるべきデータ、ならびにＧＰＵ１２によって実施される演算から生じるデータを記憶し得る。たとえば、システムメモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。さらに、システムメモリ１０は、ＧＰＵ１２による処理のためのコマンドストリームを記憶し得る。システムメモリ１０は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取り専用メモリ（ＲＯＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
【００３９】
[0043]  いくつかの態様では、システムメモリ１０は、本開示ではＣＰＵ６およびＧＰＵ１２に起因する機能をＣＰＵ６および／またはＧＰＵ１２に実施させる命令を含み得る。したがって、システムメモリ１０は、実行されたとき、１つまたは複数のプロセッサ（たとえば、ＣＰＵ６およびＧＰＵ１２）に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であり得る。
【００４０】
[0044]  いくつかの例では、システムメモリ１０は非一時的記憶媒体（non-transitory storage medium）である。「非一時的（non-transitory）」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示す。ただし、「非一時的」という用語は、システムメモリ１０が非可動であること、またはそれのコンテンツが静的であることを意味すると解釈されるべきではない。一例として、システムメモリ１０は、デバイス２から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ１０と実質的に同様のメモリがデバイス２中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間とともに変化し得るデータを（たとえば、ＲＡＭに）記憶し得る。
【００４１】
[0045]  ＧＰＵ１２は、１つまたは複数のグラフィックスプリミティブをディスプレイ１８にレンダリングするためにグラフィックス演算を実施するように構成され得る。したがって、ＣＰＵ６上で実行しているソフトウェアアプリケーションのうちの１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、ディスプレイ１８にレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをＧＰＵ１２に与え得る。グラフィックスコマンドは、たとえば、描画呼出しなどの描画コマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。いくつかの例では、ＣＰＵ６は、コマンドとグラフィックスデータとを、ＧＰＵ１２によってアクセスされ得るメモリ１０に書き込むことによって、コマンドとグラフィックスデータとをＧＰＵ１２に与え得る。いくつかの例では、ＧＰＵ１２は、ＣＰＵ６上で実行しているアプリケーションのための汎用コンピューティングを実施するようにさらに構成され得る。
【００４２】
[0046]  ＧＰＵ１２は、いくつかの事例では、ベクトル演算の、ＣＰＵ６よりも効率的な処理を行う高度並列構造（highly-parallel structure）を用いて構築され得る。たとえば、ＧＰＵ１２は、複数の頂点またはピクセル上で、並列様式で動作するように構成された、算術論理ユニット（ＡＬＵ：arithmetic logic unit）、初等関数ユニット（ＥＦＵ：elementary function unit）、および他のそのような回路など、ハードウェア回路を含む複数の処理要素を含み得る。ＧＰＵ１２の高度並列性質（highly parallel nature）は、いくつかの事例では、ＧＰＵ１２が、ＣＰＵ６を使用して直接ディスプレイ１８にシーンを描画するよりも速く、グラフィックス画像（たとえば、ＧＵＩ、ならびに２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックスシーン）をディスプレイ１８上に描画することを可能にし得る。さらに、ＧＰＵ１２の高度並列性質は、ＧＰＵ１２が、ＣＰＵ６よりも速く、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトルおよび行列演算を処理することを可能にし得る。
【００４３】
[0047]  ＧＰＵ１２は、いくつかの事例では、コンピューティングデバイス２のマザーボードに組み込まれ得る。他の事例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボード中のポート中に設置されたグラフィックスカード上に存在し得るか、または場合によっては、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる事例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に配置され得る。ＧＰＵ１２およびＣＰＵ６は、プログラマブル回路を含む、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタル信号プロセッサ（ＤＳＰ）、あるいは他の等価な集積またはディスクリート論理回路など、１つまたは複数のプロセッサを含み得る。
【００４４】
[0048]  ＧＰＵ１２はローカルメモリ１４に直接結合され得る。したがって、ＧＰＵ１２は、必ずしもバス２０を使用せずに、ローカルメモリ１４からデータを読み取り、ローカルメモリ１４にデータを書き込み得る。言い換えれば、ＧＰＵ１２は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。これは、ＧＰＵ１２が、重いバストラフィックを経験し得る、バス２０を介したデータの読取りおよび書込みを行う必要をなくすことによって、ＧＰＵ１２がより効率的な様式で動作することを可能にする。しかしながら、いくつかの事例では、ＧＰＵ１２は、別個のキャッシュを含まないことがあるが、代わりに、バス２０を介してシステムメモリ１０を利用し得る。ローカルメモリ１４は、たとえば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能プログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光記憶媒体など、１つまたは複数の揮発性または不揮発性メモリあるいはストレージデバイスを含み得る。
【００４５】
[0049]  ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データを、システムメモリ１０内で割り振られたフレームバッファに記憶し得る。ディスプレイインターフェース１６は、フレームバッファからデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ１８を構成し得る。いくつかの例では、ディスプレイインターフェース１６は、フレームバッファから取り出されたデジタル値を、ディスプレイ１８によって消費可能なアナログ信号に変換するように構成されたデジタルアナログ変換器（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１６は、処理のために、デジタル値をディスプレイ１８に直接受け渡し得る。ディスプレイ１８は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、陰極線管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ（ＳＥＤ）、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ１８は、コンピューティングデバイス２内に組み込まれ得る。たとえば、ディスプレイ１８は、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ１８は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス２に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ１８は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００４６】
[0050]  説明されるように、ＣＰＵ６は、超並列演算を必要とするタスクなど、グラフィックス処理をＧＰＵ１２にオフロードし得る。一例として、グラフィックス処理は超並列演算を必要とし、ＣＰＵ６は、そのようなグラフィックス処理タスクをＧＰＵ１２にオフロードし得る。しかしながら、行列演算などの他の演算も、ＧＰＵ１２の並列処理能力から恩恵を受け得る。これらの例では、ＣＰＵ６は、ＧＰＵ１２に非グラフィックス関係演算を実施させるために、ＧＰＵ１２の並列処理能力を活用し得る。
【００４７】
[0051]  本開示で説明されるいくつかの例示的な技法では、第１の処理ユニット（たとえば、ＣＰＵ６）は、いくつかのタスクを第２の処理ユニット（たとえば、ＧＰＵ１２）にオフロードする。タスクをオフロードするために、ＣＰＵ６は、ＧＰＵ１２によって実行されるべきコマンドと、コマンドのオペランドであるデータ（たとえば、コマンドがそれに作用するデータ）とをシステムメモリ１０におよび／またはＧＰＵ１２に直接出力する。ＧＰＵ１２は、コマンドおよびデータをＣＰＵ６から直接および／またはシステムメモリ１０から受信し、コマンドを実行する。いくつかの例では、ＧＰＵ１２によって実行されるべきコマンドと、コマンドのためのデータオペランドとをシステムメモリ１０に記憶するのではなく、ＣＰＵ６は、ＧＰＵ１２とＣＰＵ６とを含むＩＣにローカルであり、ＣＰＵ６とＧＰＵ１２の両方によって共有される、ローカルメモリ（たとえば、データまたは命令キャッシュ）に、コマンドおよびデータオペランドを記憶し得る。概して、本開示で説明される技法は、ＣＰＵ６がＧＰＵ１２上での実行のためにコマンドを利用可能にし得る様々なやり方に適用可能であり、本技法は、上記の例に限定されない。
【００４８】
[0052]  ＧＰＵ１２がコマンドを実行するレートは、（ＧＰＵ１２のクロックレートまたは動作周波数とも呼ばれる）クロック信号の周波数によって設定される。たとえば、ＧＰＵ１２は、クロック信号の立上りエッジまたは立下りエッジごとにコマンドを実行するか、あるいはクロック信号の立上りエッジごとにあるコマンドを実行し、立下りエッジごとに別のコマンドを実行し得る。したがって、クロック信号の立上りエッジまたは立下りエッジが時間期間内にどれくらいの頻度で発生するか（たとえば、クロック信号の周波数）が、ＧＰＵ１２が時間期間内にいくつのコマンドを実行するかを設定する。
【００４９】
[0053]  いくつかの場合には、ＧＰＵ１２がコマンドを実行している間、ＧＰＵ１２は、バス２０を介して、データをシステムメモリ１０から読み取るかまたはデータをシステムメモリ１０に書き込む必要があり得る。たとえば、キャッシュミスがある（たとえば、データまたは命令が、ＧＰＵ１２のデータキャッシュまたは命令キャッシュ中で利用可能でない）場合、ＧＰＵ１２は、バス２０を介してデータをシステムメモリ１０から読み取り得る。ＧＰＵ１２の命令キャッシュおよびデータキャッシュは、ローカルメモリ１４とは異なり得る。たとえば、ＧＰＵ１２は、一時的に中間データを記憶するためにローカルメモリ１４を使用し得、データキャッシュおよび命令キャッシュは、それぞれ、オペランドおよび命令を記憶し得る。いくつかの場合には、ローカルメモリ１４が、命令キャッシュおよびデータキャッシュを含むことが可能であり得る。
【００５０】
[0054]  データがシステムメモリ１０から利用可能になるか、またはデータがシステムメモリ１０に書き込まれるまで、ＧＰＵ１２がどのくらいの時間の間待つか（ＧＰＵストール時間とも呼ばれる）は、バス２０のバス帯域幅の関数である。バス帯域幅は、システムメモリ１０の動作周波数の関数であり得る（たとえば、システムメモリ１０の高速動作周波数の場合、より多くのデータがバス２０上に置かれ得、システムメモリ１０の低速動作周波数の場合、より少ないデータがバス２０上に置かれ得る）。したがって、ＧＰＵ１２が時間期間内に実行することができるコマンドの量も、バス帯域幅の関数である。
【００５１】
[0055]  ＣＰＵ６が、ＧＰＵ１２によって実行されるべきコマンドをメモリ（たとえば、システムメモリ１０または命令キャッシュ）に記憶する例など、いくつかの例では、ＣＰＵ６は、ＧＰＵ１２が実行すべきであるコマンドのグループを識別するメモリアドレス情報を出力し得る。ＧＰＵ１２が実行すべきであるコマンドのグループは、サブミットされたコマンドと呼ばれる。ＣＰＵ６がコマンドをＧＰＵ１２に直接出力する例では、サブミットされたコマンドは、ＣＰＵ６がＧＰＵ１２に直ちに実行するように命令するコマンドを含む。
【００５２】
[0056]  ＣＰＵ６がコマンドをグループ化し得る様々なやり方があり得る。一例として、コマンドのグループは、１つのフレームをレンダリングするためにＧＰＵ１２によって必要とされるすべてのコマンドを含む。別の例として、コマンドのグループは、ＧＰＵ１２が他のコマンドに切り替えることなしに一緒に実行されるべきであるいわゆる「アトミックコマンド（atomic command）」であり得る。ＧＰＵ１２にサブミットされるコマンドをグループ化するための他のやり方が可能であり得、本開示は、上記の例示的な技法に限定されない。
【００５３】
[0057]  いくつかの場合には、ＧＰＵ１２は、設定された時間期間内に、サブミットされたコマンドを実行する必要があり得る。たとえば、デバイス２はハンドヘルドデバイスであり得、ここで、ディスプレイ１８は、ユーザインターフェースとしても機能する。一例として、（ジャンクなし（jank-free）とも呼ばれる）スタッターなし（stutter free）ユーザインターフェースを達成するために、ＧＰＵ１２は、毎秒６０フレームのフレームレートを仮定すると、約１６ミリ秒（ｍｓ）内に（他の時間期間が可能である）、サブミットされたコマンドの実行を完了する必要があり得る。この１６ｍｓ時間期間は、「ｖｓｙｎｃ」ウィンドウと呼ばれることがあり、ＧＰＵ１２がｖｓｙｎｃウィンドウ内に、サブミットされたコマンドの実行を完了しない場合、ＧＰＵ１２の実行パイプライン中の「バブル（bubble）」があり、ジャンク充満（jank filled）ユーザインターフェースを生じ得る。
【００５４】
[0058]  ＧＰＵ１２の実行パイプライン中の「バブル」は、コマンドを実行しているＧＰＵ１２のユニットが、何らかの中間データを生成するためにコマンドの実行を部分的に完了したが、中間データを受信すべきであるＧＰＵ１２のユニットが、まだ、他のコマンドを実行するのにビジーであり、中間データが構築し続けることを引き起こす状態を指す。たとえば、ＧＰＵ１２の実行パイプラインは、各々、連続して（すなわち、パイプラインにおいて）次の回路によってさらに処理される中間データを生成する、一連の相互接続された回路を含む。いくつかの場合には、ＧＰＵ１２の実行パイプラインのアップストリーム回路は、ＧＰＵ１２の実行パイプラインのダウンストリーム回路が消費することができるよりも高速に中間データを生成しており、いわゆるバブルを作成する。
【００５５】
[0059]  ＣＰＵ６がサブミットするコマンドの量、およびＣＰＵ６がいつコマンドをサブミットするかのタイミングは、必ずしも一定である必要はない。ＧＰＵ１２が実行すべきであるコマンドの流入またはコマンドの数の低減があり得る。たとえば、ＣＰＵ６上で実行するアプリケーション（たとえば、サードパーティアプリケーション）は、ＧＰＵ１２によって実行されるべきコマンドの数を増加または減少させ得るか、またはＣＰＵ６上で実行するオペレーティングシステム（たとえば、フレームワーク自体）が、ＧＰＵ１２によって実行されるべきコマンドの数を増加または減少させ得る。別の例として、ＣＰＵ６は、時間０においてコマンドの第１のグループをサブミットし、時間１においてコマンドの第２のグループをサブミットし、時間２においてコマンドの第３のグループをサブミットし得る。しかしながら、コマンドの第１のグループのサブミッションとコマンドの第２のグループのサブミッションとの間の時間間隔は、コマンドの第２のグループのサブミッションとコマンドの第３のグループのサブミッションとの間の時間間隔とは異なり得る。
【００５６】
[0060]  ＧＰＵ１２が期間（たとえば、１６ｍｓ）内に実行すべきであるコマンドの量は変化し得るので、ＧＰＵ１２のクロック信号の周波数（すなわち、ＧＰＵ１２の動作周波数）は、ＧＰＵ１２が、電力消費を不必要に増加させることなしに、設定された時間期間内にコマンドを実行することが可能であるように、増加または減少する必要があり得る。ＧＰＵ１２が、設定された時間期間内に実行する必要があるコマンドの量は、その時間期間内に実行される必要があるコマンドのグループ中により多いまたはより少ないコマンドがあるので、設定された時間期間内に実行される必要があるコマンドのグループの数の増加または減少があるので、またはその２つの組合せで、変化し得る。
【００５７】
[0061]  また、コマンドを実行するために、ＧＰＵ１２は、バス２０を介してデータをシステムメモリ１０から取り出すかまたはデータをシステムメモリ１０に出力する必要があり得る。たとえば、ＧＰＵ１２のＧＰＵパイプラインは、データをＧＰＵキャッシュから取り出すことを試み得る。キャッシュミスの場合、ＧＰＵ１２はデータをシステムメモリ１０から取り出す。ＧＰＵ１２が、データがシステムメモリ１０から到着するのを待つ間、ＧＰＵ１２はストールされ得る。ＧＰＵ１２が、データをシステムメモリ１０から取り出すかまたはデータをシステムメモリ１０に出力することができるレートは、バス２０のバス帯域幅の関数である。
【００５８】
[0062]  したがって、ＧＰＵ１２がコマンドの実行をどのくらい迅速に完了すべきであるかをともに制御する少なくとも２つの要因がある。第１の要因は、ＧＰＵ１２の動作周波数（たとえば、データが、グラフィックスパイプラインの回路を通ってどのくらい高速に移動することができるか）である。第２の要因は、バス２０のバス帯域幅である。より詳細に説明されるように、ＣＰＵ６は、タイムリーな実行を完了するＧＰＵ１２の能力に対する影響のない最小電力使用をともに与える、ＧＰＵ１２の動作周波数とバス２０のバス帯域幅とを決定し得る。
【００５９】
[0063]  たとえば、ＧＰＵ１２は、異なる動作周波数（たとえば、２００ＭＨｚ、３００ＭＨｚ、４２０ＭＨｚ、および６００ＭＨｚ）において動作するように構成され得、ＣＰＵ６は、バス２０のバス帯域幅を異なる周波数（たとえば、２．２ＧＢ／ｓ、４．０ＧＢ／ｓ、７．０ＧＢ／ｓ、および１２．７ＧＢｓ）に設定するように構成され得る。動作周波数とバス帯域幅の各ペアは、「動作点」（ＯＰＰ）を形成する。たとえば、ＯＰＰ００は、バス帯域幅が１２．７ＧＢ／ｓであり、動作周波数が６００ＭＨｚである動作点を指す。ＯＰＰ１０は、バス帯域幅が１２．７ＧＢ／ｓであり、動作周波数が４２０ＭＨｚである動作点を指す。ＯＰＰ０１は、バス帯域幅が７．０ＧＢ／ｓであり、動作周波数が６００ＭＨｚである動作点を指す。このようにして、バス帯域幅と動作周波数の各ペアについて、対応する動作点がある。
【００６０】
[0064]  本開示で説明される技法では、ＧＰＵ１２は、第１の動作点において動作していることがあり、（たとえば、動的電力マネージャ（ＤＰＭ）を介した）ＣＰＵ６は、ＧＰＵ１２の動作点が、性能に対する影響なしに第１の動作点から第２の動作点に調整され得るかどうかを決定し得る。ＣＰＵ６が、性能に対する影響なしに第１の動作点から第２の動作点に調整している場合には、ＣＰＵ６は、ＧＰＵ１２の動作周波数およびバス２０のバス帯域幅のうちの少なくとも一方、さらにはそれらの両方を低減することを試み得る。いくつかの場合には、ＣＰＵ６は、ＧＰＵ１２の動作周波数を直接制御することが可能であり得るが、バス２０のバス帯域幅を制御することに投票する必要があり得る。
【００６１】
[0065]  帯域幅投票は実際のバス帯域幅とは異なり得、実際のバス帯域幅はランタイムにおいて動的に変化し得る。これは、バス２０が共用リソースであり、多くの処理ユニットがバス帯域幅に関してコンカレントに投票し得るからである。バス帯域幅に関して投票することは、処理ユニットの各々が、（それぞれの処理ユニットによって決定されたように）バス帯域幅がどのようになるべきであるかを示す情報を出力することを意味する。しかしながら、実際のバス帯域幅が結局どのようになるかは、各処理ユニットによって与えられた投票とは異なり得る。ＣＰＵ６または別の処理ユニット上で実行するバスドライバは、帯域幅投票または要求をアグリゲート（aggregate）し得、アグリゲートされた結果に基づいて、クロックをスケーリングする（たとえば、実際のバス帯域幅を設定する）。一例として、バスドライバは、最大投票を実際のバス帯域幅として選択し得るが、実際のバス帯域幅を決定するための他のやり方が可能である。すべてではないが、いくつかの場合には、アグリゲートされた帯域幅は、概して、投票のいずれかに等しいかまたはそれよりも大きい。
【００６２】
[0066]  本開示で説明される例示的な技法では、ＣＰＵ６は、第１の動作点から第２の動作点に調整することを決定するために、有効バス帯域幅を利用し得る。たとえば、各動作点は、動作周波数とバス帯域幅とに関連する。ＣＰＵ６がＧＰＵ１２を特定の動作点において動作するように設定したとき、ＧＰＵ１２は、設定された周波数において動作し得るが、バス帯域幅は、（たとえば、投票により）動作点に関連するバス帯域幅から逸脱し得る。したがって、ＣＰＵ６は、ある動作点から別の動作点に調整すべきかどうかを計算するために、有効バス帯域幅を使用し得、現在の動作点に関連するバス帯域幅を必ずしも使用するとは限らない。
【００６３】
[0067]  有効帯域幅（effective bandwidth）は、インターフェースがデータを転送するのにその間ビジーである時間期間で除算された、ＧＰＵバスインターフェースを通して転送されるデータの総量である。バス帯域幅に関して投票するＣＰＵ６、ＧＰＵ１２、および他の処理ユニットは、処理ユニットをバス２０に接続するバスインターフェース構成要素を含み得る。それぞれのバスインターフェースにおけるハードウェアデータカウンタが、転送されたデータをカウントし、ＣＰＵ６が有効バス帯域幅を決定するための転送されたデータの量を示す情報をＣＰＵ６に出力する。有効バス帯域幅を決定するための他のやり方があり得、例示的な技法は、有効バス帯域幅を決定するための特定のやり方に限定されない。
【００６４】
[0068]  ＣＰＵ６はバス帯域幅に投票し得るが、ＣＰＵ６は、依然として、バス帯域幅がどのようになるべきであるかの意思決定プロセスに寄与する。ＣＰＵ６は、バス帯域幅がどのようになるべきであるかを決定するために、本開示で説明される例示的な技法を使用する。ＣＰＵ６によって行われたバス帯域幅決定が、最終的に、実際のバス帯域幅でないことが可能であるが、ＣＰＵ６は、依然として、バス帯域幅の動的設定に寄与する。
【００６５】
[0069]  本開示の技法を使用する、動作周波数およびバス帯域幅のそのような動的制御は、デバイス２による電力消費の有効な制御を可能にする。たとえば、動作周波数およびバス帯域幅が比較的高い周波数に永続的に保たれた場合、ＧＰＵ１２は、たいていの事例では、サブミットされたコマンドをタイムリーに実行することが可能であることになる。しかしながら、比較的高い周波数においてコマンドを実行することは、ＧＰＵ１２の電力消費が増加することを引き起こし、デバイス２の電力消費も、バス２０の高帯域幅をサポートすることから、増加することを引き起こす。ＧＰＵ１２の動作周波数およびバス２０のバス帯域幅が比較的低い周波数に永続的に保たれた場合、ＧＰＵ１２の電力消費およびデバイス２の全体的電力は低減され得るが、ＧＰＵ１２は、たいていの事例では、サブミットされたコマンドをタイムリーに実行することが可能でなく、ジャンキー挙動（janky behavior）および場合によっては他の不要な影響をもたらし得る。
【００６６】
[0070]  本開示で説明される技法は、特定の時間期間にわたるＧＰＵ１２のアクティブ時間とストール時間とに基づいて、ＧＰＵ１２の動作周波数およびバス２０のバス帯域幅を増加または減少させる（たとえば、バス２０のバス帯域幅を増加または減少させるように投票する）ための例示的なやり方について説明する。本開示で使用されるアクティブ時間は、その間、ＧＰＵ１２が、いくつかの算術、論理、または制御フロー動作を実施（たとえば、命令を実行）しており、異なるクロック領域における動作が完了するのを待っていない時間を意味する。上述のように、クロック領域は、同じ周波数において動作する回路のブロックである。同じチップ上の複数の異なるクロック領域（たとえば、ＣＰＵ６とＧＰＵ１２とは、同じチップ上にあるが、異なるクロック領域を有し得る）、および／または同じデバイス中の異なるクロック領域（たとえば、ＧＰＵ１２とシステムメモリ１０とは、異なるクロック領域中にあり得る）があり得る。
【００６７】
[0071]  本開示では、（たとえば、ＣＰＵ６またはＧＰＵ１２の処理回路などの）処理回路（processing circuitry）が、クロック信号に応答して動作を実施するときはいつでも、処理回路はアクティブであると見なされる。処理回路が、別のクロック領域において完了すべき動作が進むのを待っているときはいつでも、処理回路はストール（stall）されると見なされる。
【００６８】
[0072]  ＧＰＵストール時間は、その間、ＧＰＵ１２のグラフィックス処理パイプラインが、動作が別のクロック領域において完了するのを待つ間ストールされる時間である。ストール時間の１つの例示的な原因は、キャッシュミスである。ＧＰＵ１２は、最初に、データまたは命令をそれぞれのキャッシュから取り出すことを試み得、データまたは命令がキャッシュに記憶されていない場合、ＧＰＵ１２がシステムメモリ１０からのデータまたは命令を待つ間、ＧＰＵ１２はストールされ得る。ＧＰＵストール時間の別の例は、いくつかのＩＯ動作からのものである。ＩＯ動作の場合、アクティブ時間にカウントされるべきであるいくつかのサブ動作が、ＧＰＵ１２のクロック領域において実施され、他のクロック領域におけるサブ動作もあることになり、プロセッサがそれを待つのにビジー（busy）である必要があり、プロセッサストール時間にカウントされるべきである。
【００６９】
[0073]  ＧＰＵ１２のストール時間とＧＰＵ１２のアイドル時間（idle time）とは、混同されるべきではない。たとえば、ＧＰＵ１２のアイドル時間は、ＧＰＵ１２がコマンドのセットの実行を完了した後、実行すべきコマンドの新しいセットを待っていることを指す。ＧＰＵ１２のストール時間は、ＧＰＵ１２がコマンドのセットの実行の最中でストールすることを指す。
【００７０】
[0074]  本開示で説明される技法では、ＣＰＵ６は、ＧＰＵ１２がそこにおいて動作すべきである動作点を決定するために、ＧＰＵ１２のアクティブ時間と、ＧＰＵ１２のストール時間とを別々に評価し得る。たとえば、ＧＰＵ１２は、算術論理ユニット（ＡＬＵ）、初等関数ユニット（ＥＦＵ）などのような様々な回路ブロックを含む。これらのユニットのいずれかが機能を実施するたびに、ＧＰＵ１２はアクティブであると見なされる。たとえば、動作周波数を有するクロック信号の立上りエッジまたは立下りエッジ上で、ＧＰＵ１２の回路ブロックのうちの１つが動作を実施する場合、ＧＰＵ１２はアクティブであると見なされる。ＧＰＵ１２の回路ブロックによって実施される動作は、命令の実行によるものであり得、ここで、回路ブロックはプログラマブルブロックであるか、または、ここで、回路ブロックはハードワイヤード固定機能回路ブロックである。
【００７１】
[0075]  この例では、ＧＰＵ１２は、これらの回路ブロックのうちのいずれか１つが機能を実施するたびに、アクティブサイクルカウンタ（active cycle counter）を増分し得る。たとえば、ＧＰＵ１２は、マスキングされた「ＯＲ」ゲートを含み得、ここで、回路ブロックが機能を実施する場合、ＯＲゲートへの入力は論理１である。このようにして、ＯＲゲートの出力が論理１である場合、ＧＰＵ１２はアクティブサイクルカウンタを増分し、ＯＲゲートの出力が論理０である場合、ＧＰＵ１２はアクティブサイクルカウンタを増分しない。
【００７２】
[0076]  ＧＰＵ１２のアクティブ時間は、動作周波数で除算されたアクティブサイクルカウンタ値である。たとえば、アクティブサイクルカウンタ値は、コマンドの実行中に経過したクロックサイクルの数を示し、ＧＰＵ１２の動作周波数は、コマンドが実行したレートを示す。クロックレート（たとえば、動作周波数）で除算されたクロックサイクルの数は、ＧＰＵ１２がアクティブである時間の量に等しい。したがって、ＧＰＵ１２のアクティブ時間は、ＧＰＵ１２の動作周波数に反比例する。
【００７３】
[0077]  ストール時間の間、ＧＰＵ１２が、それの間、機能を実施すべきであったが、（たとえば、キャッシュミスに応答した）別のクロック領域における動作を待つ遅延によりストールされたクロックサイクルごとに、ＧＰＵ１２はストールと見なされ得る。いくつかの場合には、ストールサイクルカウンタを有することは、ＧＰＵ１２の並列構造により、複雑にされ得る。しかしながら、ビジー時間はアクティブ時間＋ストール時間に等しいので、ＧＰＵ１２はビジーサイクルカウンタを含み得る。ＧＰＵ１２が動作を実施するたびに、ＧＰＵ１２はビジーサイクルカウンタを増分し得る。ビジー時間を決定するための他のやり方もあり得る。ストール時間は、ビジー時間−アクティブ時間に等しい。ストールサイクルカウンタが可能である例では、ＧＰＵ１２は、そのようなカウンタを含み、プロセッサストールがあるときはいつでも、ストールサイクルカウンタを増分し得る。
【００７４】
[0078]  プロセッサストール時間は、バス２０のバス帯域幅に基づく。たとえば、バス帯域幅が比較的高かった場合、命令またはデータは、バス帯域幅が比較的低かった場合よりも少ない時間でＧＰＵ１２に達することになる。したがって、プロセッサストール時間は、バス２０のバス帯域幅に反比例する。
【００７５】
[0079]  上述のように、ＧＰＵ１２のビジー時間は、アクティブ時間＋ストール時間に等しい。プリセットされるか（たとえば、１６ｍｓ）、または（たとえば、ＧＰＵ１２がいつアイドルになるかに基づいて）オンザフライ（on the fly）で決定され得る時間期間で除算されたＧＰＵ１２のビジー時間は、ＧＰＵ１２のビジー割合を示す。本開示で説明される技法では、ＣＰＵ６は、異なる動作点についてビジー割合を決定し、決定されたビジー割合に基づいて、ＧＰＵ１２がそこにおいて動作している動作点を別の動作点に調整すべきかどうかを決定し得る。
【００７６】
[0080]  たとえば、ＣＰＵ６が、第１の動作点におけるＧＰＵ１２のビジー割合が５０％であると決定し、より低い動作周波数および／またはより低いバス帯域幅のうちの少なくとも１つを有する第２の動作点におけるＧＰＵ１２のビジー割合が８０％であると決定し、ＣＰＵ６が、動作点を第１の動作点から第２の動作点に調整し得ると仮定する。しかしながら、ＧＰＵ１２の動作点を第２の動作点に調整することが、９５％のビジー割合を生じるとＣＰＵ６が決定した場合、ＣＰＵ６は、ＧＰＵ１２の動作点を第２の動作点に調整しないことがある。いくつかの例では、ＣＰＵ６は、ＣＰＵ６が、動作点を他の動作点のうちの１つに調整すべきであるかどうかを識別するために、これらの他の動作点をテストし得る。この例では、９０％がしきい値であり得、ここで、ビジー割合が９０％よりも大きくなる場合、ＣＰＵ６は動作点を調整せず、ビジー割合が９０％よりも小さくなる場合、ＣＰＵ６は動作点を調整する。
【００７７】
[0081]  本開示で説明される技法では、ＧＰＵ１２が現在の動作点において動作しているとき、ＣＰＵ６は、アクティブ時間とストール時間の両方を決定し得る。ＣＰＵ６は、ＧＰＵ１２のアクティブ時間が、異なる動作点においてどのようになるかを決定し、ストール時間がこの異なる動作点においてどのようになるかを決定し得る。特に、ＣＰＵ６は、ＧＰＵ１２のアクティブ時間およびストール時間がこの異なる動作点においてどのようになるかを別々に決定し得る。たとえば、現在の動作点におけるＧＰＵ１２の全体的ビジー時間に基づいて、ＧＰＵ１２の全体的ビジー時間がこの異なる動作点においてどのようになるかを決定するのではなく、ＧＰＵ１２は、ＧＰＵ１２の全体的ビジー時間をともに形成する成分（constituent）値（たとえば、アクティブ時間およびストール時間）の各々を決定し得る。
【００７８】
[0082]  動作点調整のためにアクティブ時間とストール時間の各々を別々に決定することは、動作周波数およびバス帯域幅が、ＧＰＵ１２のビジー時間の異なる部分に寄与するので、有益であり得る。たとえば、第１の動作点と第２の動作点との間の差が、動作周波数の変化のみであり、バス帯域幅の変化でないと仮定する。この場合、アクティブ時間は、第１の動作点と第２の動作点との間で異なり得るが、ストール時間は、ストール時間がバス帯域幅の関数であるので、同じであり得る。ＣＰＵ６は、第２の動作点におけるＧＰＵ１２のビジー時間を、第２の動作点におけるアクティブ時間と、（第１の動作点におけるストール時間と同じであり得る）第２の動作点におけるストール時間との合計であると決定し得る。
【００７９】
[0083]  本例では、ＣＰＵ６は、第１の動作点におけるＧＰＵ１２のビジー時間に基づいて、第２の動作点におけるＧＰＵ１２のビジー時間を決定することと比較して、第２の動作点におけるＧＰＵ１２のビジー時間のより正確な値を決定し得る。たとえば、第２の動作点におけるＧＰＵ１２のビジー時間を決定するための別のやり方として、ＣＰＵ６は、第２の動作点におけるＧＰＵ１２のビジー時間が、第２の動作点の動作周波数に反比例すると仮定し得る。一例として、ＣＰＵ６は、第１の動作点におけるビジー時間が５０％であると決定し得、ここで、動作周波数は２００ＭＨｚである。この例では、ＣＰＵ６は、第２の動作点における動作周波数が１００ＭＨｚであり、バス帯域幅が第１の動作点の場合と同じであると決定し得る。ＣＰＵ６は、ＧＰＵ１２のビジー時間が動作周波数に反比例すると仮定したので、ＣＰＵ６は、半分（たとえば、１００ＭＨｚ／２００ＭＨｚ）だけ動作周波数を低減することが、ビジー割合を１００％ビジー割合（たとえば、５０％＊２）まで２倍にすることになると決定し得る。
【００８０】
[0084]  しかしながら、ビジー割合が第２の動作点において１００％になると決定することは、ビジー割合の過大推定であり得る。先行する例では、アクティブ時間のみが動作周波数に反比例し、バスストール時間は動作周波数に反比例しない。したがって、ＣＰＵ６は、第１の動作点におけるビジー割合（またはビジー時間）に基づいて、第２の動作点におけるビジー割合（またはビジー時間）を直接決定するのではなく、第２の動作点におけるアクティブ時間とストール時間とを別々に決定し、次いで、第２の動作点におけるビジー時間を決定し、次いで、第２の動作点におけるビジー割合を決定し得る。
【００８１】
[0085]  一例として、ＧＰＵ１２のビジー時間が５０％に等しかった前の例を再び参照する。この例では、第１の動作点におけるアクティブ時間が、ＧＰＵ１２がビジー３０％であることを引き起こしたと仮定し、第１の動作点におけるストール時間が、ＧＰＵ１２が２０％のビジーであることを引き起こすと仮定する（３０％＋２０％＝５０％）。この場合、第２の動作点における動作周波数は、第１の動作点における動作周波数の５０％それであるので、アクティブ時間は、ビジー時間に２倍多く寄与することになる（たとえば、６０％、ここで、３０％＊２は６０％に等しい）。ストール時間は変化しないことがあり、したがって、ビジー時間に同じく寄与し得る（たとえば、２０％）。この例では、ＧＰＵ１２は、第２の動作点におけるビジー時間を８０％であると決定し得る（６０％＋２０％＝８０％）。８０％のビジー時間は、アクティブ時間とストール時間とが別々に評価されない、１００％のビジー割合決定よりも正確な、ＧＰＵ１２のビジー割合の決定であり得る。
【００８２】
[0086]  バス帯域幅を最低必要なレベルにスケーリングすることを支援するために、動作点を決定するために成分アクティブおよびプロセッサ遅延時間の代わりに、総ビジー時間のみに依拠するこれらの他の例では、各動作周波数についてのバスカウンタ／インジケータの示度（reading）に基づいて、バスアップスケールしきい値とバスダウンスケールしきい値とのセットを作成するために、異なるタイプの使用事例をプロファイリングすることが可能であり得る。たとえば、動作周波数が３００ＭＨｚである場合、ＣＰＵ６は、３００ＭＨｚの利用可能なバス帯域幅と、関連するしきい値とについてテーブルを探索し得、バスカウンタが、トラフィックがアップスケールしきい値（upscaling threshold）を上回ることを示す場合、ＣＰＵ６はより高い帯域幅に投票し得、トラフィックがダウンスケールしきい値（downscaling threshold）を下回る場合、ＣＰＵ６はより低い帯域幅に投票し得、または他の場合、ＣＰＵ６は新しい帯域幅投票を行わない。
【００８３】
[0087]  しかしながら、そのようなプロファイリング（profiling）は、広範（extensive）であり、さらに、すべての使用事例について適切に機能するとは限らないことさえある。たとえば、比較的より高い帯域幅とより低い動作周波数とをもつ動作点は、バス２０またはデータ集約的使用事例についてより効率的である。対比として、相対的により低い帯域幅とより高いプロセッサ周波数とをもつ動作点は、プロセッサまたは計算集約的使用事例についてより効率的であり、両方について効率的に機能するしきい値のセットを見つけることは極めて困難である。
【００８４】
[0088]  このようにして、プロセッサアクティブ時間とストール時間の各々が、動作点を決定するために別々に使用される場合、ビジー時間のみを使用することと比較して、本開示の技法は、そこにおいて動作すべき動作点を決定するためのより正確なやり方を与える。上記の例は、ＣＰＵ６がＧＰＵ１２のための動作点を決定することに関して説明されたが、本開示で説明される技法はそのように限定されない。ＣＰＵ６は、本開示で説明される技法を使用してそれ自体のための動作点を決定し得るか、またはＧＰＵ１２は、本開示で説明される技法を使用してそれ自体のための動作点を決定し得る。他の例として、ＣＰＵ６および／またはＧＰＵ１２は、何らかの他のＤＳＰのための動作点を決定し得る。
【００８５】
[0089]  概して、ＣＰＵ６、ＧＰＵ１２、何らかの他のＤＳＰ、または何らかの小さい回路ブロック上の回路は、動作点決定を決定するように構成され得る。（たとえば、ＣＰＵ６上の）回路は、第１の動作点における処理ユニット（たとえば、ＧＰＵ１２）の第１のアクティブ時間を決定し、第１の動作点における処理ユニットの第１のストール時間を決定し得る。回路は、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定し、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定し得る。回路は、次いで、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を第１の動作点から第２の動作点に調整すべきかどうかを決定し、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を第１の動作点から第２の動作点に調整し得る。
【００８６】
[0090]  動作点決定を実施する回路、および処理ユニットは、トランジスタと、キャパシタ、抵抗器、インダクタなどのような受動構成要素とを含む。これらのハードウェア構成要素はともに、プログラマブルブロックまたは固定機能ブロックを含む、回路ブロックを形成する。動作周波数は、トランジスタが処理ユニットをいつオンおよびオフにするかを制御することなどによって、命令／コマンドが回路ブロックを通して処理されるレートを制御する。
【００８７】
[0091]  また、動作点決定を実施する回路は、それの動作点が決定されつつある処理ユニットとは異なる処理ユニット上の回路であり得る（たとえば、回路はＣＰＵ６上にあり、動作点決定はＧＰＵ１２についてのものである）。いくつかの例では、動作点決定を実施する回路は、それの動作点が決定されつつある同じ処理ユニット上の回路であり得る（たとえば、回路はＧＰＵ１２上にあり、動作点決定はＧＰＵ１２についてのものである）。
【００８８】
[0092]  回路が動作点決定を実施し得る１つの例示的なやり方は、回路に例示的な技法を実施させるソフトウェア／ファームウェアモジュールの命令を実行することによるものである。そのような例では、回路は、ソフトウェア／ファームウェアがその上で実行している処理ユニットのプログラマブルブロック（たとえば、命令がその上で実行するプログラマブル回路を含むＣＰＵ６の処理コア）を含む。回路が動作点決定を実施し得る別の例示的なやり方は、ハードワイヤード回路（たとえば、固定機能回路）を含むことによるものである。いくつかの例では、回路は、プログラマブルブロックと、固定機能ブロックとの組合せを含み得る。
【００８９】
[0093]  図２は、図１に示されたデバイスの構成要素をより詳細に示すブロック図である。図２に示されているように、ＧＰＵ１２は、コントローラ３０と、クロック生成器（clock generator）３４と、アクティブサイクルカウンタレジスタ（active cycle counter register）３５と、シェーダコア（shader core）３６と、ビジーサイクルカウンタレジスタ（busy cycle counter register）３７と、固定機能パイプライン（fixed-function pipeline）３８とを含む。シェーダコア３６および固定機能パイプライン３８はともに、グラフィックスまたは非グラフィックス関係機能を実施するために使用される実行パイプラインの回路を形成し得る。１つのシェーダコア３６のみが示されているが、いくつかの例では、ＧＰＵ１２は、シェーダコア３６と同様の１つまたは複数のシェーダコアを含み得る。
【００９０】
[0094]  ＧＰＵ１２が実行すべきであるコマンドは、ＧＰＵ１２のコントローラ３０によって決定された、シェーダコア３６と固定機能パイプライン３８とによって実行される。コントローラ３０は、ＧＰＵ１２上のハードウェア、あるいはＧＰＵ１２のハードウェア上で実行するソフトウェアまたはファームウェアとして実装され得る。たとえば、コントローラ３０は、ＧＰＵ１２のプログラマブル回路上で実行し得るか、またはより大きいＧＰＵ１２内の特殊な回路ブロックであり得る。
【００９１】
[0095]  コントローラ３０は、バス２０を介してシステムメモリ１０のコマンドバッファ４０から、またはバス２０を介してＣＰＵ６から直接、フレーム（たとえば、表示の準備ができている１つの完全な画像）をレンダリングするために実行されるべきであるコマンドを受信し（たとえば、ＧＰＵ１２によって今実行されるべきであるとＣＰＵ６が決定したサブミットされたコマンドを受信し）得る。コントローラ３０はまた、バス２０を介してシステムメモリ１０のデータバッファ４２から、またはバス２０を介してＣＰＵ６から直接、コマンドのためのオペランドデータを取り出し得る。たとえば、コマンドバッファ４０は、ＡとＢとを加算するためのコマンドを記憶し得る。コントローラ３０は、このコマンドをコマンドバッファ４０から取り出し、ＡおよびＢの値をデータバッファ４２から取り出す。コントローラ３０は、どのコマンドがシェーダコア３６によって実行されるべきであるか（たとえば、ソフトウェア命令がシェーダコア３６上で実行される）と、どのコマンドが固定機能パイプライン３８によって実行されるべきであるか（たとえば、固定機能パイプライン３８のユニットのためのコマンド）とを決定し得る。
【００９２】
[0096]  いくつかの例では、コマンドバッファ４０およびデータバッファ４２の一方または両方からのコマンドおよび／またはデータは、ＧＰＵ１２のローカルメモリ１４の一部であり得る。たとえば、ＧＰＵ１２は、それぞれ、コマンドバッファ４０からのコマンドおよびデータバッファ４２からのデータを記憶する命令キャッシュおよびデータキャッシュを含み得る。これらの例では、コントローラ３０は、利用可能な場合、コマンドおよび／またはデータをキャッシュから取り出し、キャッシュミスがある場合、コマンドおよび／またはデータをシステムメモリ１０から取り出し得る。
【００９３】
[0097]  シェーダコア３６と固定機能パイプライン３８とは、互いにデータを送信および受信し得る。たとえば、シェーダコア３６が実行するコマンドのうちのいくつかは、固定機能パイプライン３８のユニットが実行すべきであるコマンドのためのオペランドである中間データを生成し得る。同様に、固定機能パイプライン３８のユニットが実行するコマンドのうちのいくつかは、シェーダコア３６が実行すべきであるコマンドのためのオペランドである中間データを生成し得る。このようにして、受信データは、パイプライン様式で固定機能パイプライン３８のユニットおよびシェーダコア３６を通して漸進的に処理される。したがって、シェーダコア３６および固定機能パイプライン３８は、実行パイプラインを実装することと呼ばれることがある。
【００９４】
[0098]  概して、シェーダコア３６は、実行されるべき様々なタイプのコマンドを可能にし、これは、ユーザが、たいていの考えられる様式で所望のタスクを実施するようにシェーダコア３６をプログラムすることができるので、シェーダコア３６が、プログラム可能であり、ユーザに機能的フレキシビリティを与えることを意味する。しかしながら、固定機能パイプライン３８の固定機能ユニットは、固定機能ユニットがタスクを実施する様式のために配線接続される。したがって、固定機能ユニットはあまり機能的フレキシビリティを与えないことがある。
【００９５】
[0099]  シェーダコア３６および固定機能パイプライン３８は、１つまたは複数の回路ブロックを用いて形成され得る。たとえば、シェーダコア３６および固定機能パイプライン３８は、１つまたは複数のＡＬＵおよびＥＦＵ、ならびにテクスチャパイプＬ１キャッシュ（ＴＰＬ１）およびＧＰＵレベル２ユニバーサルキャッシュ（ＵＣＨＥ）などの他の回路ブロックを含む。ＡＬＵは、整数２進数に対して算術およびビット単位論理演算を実施するデジタル電子回路であり得、ＥＦＵは、サイン、コサイン、平方根（ｓｑｒｔ）などのようなより多くの複雑な関数を実施する。これらの回路ブロックのうちのいずれか（たとえば、シェーダコア３６および／または固定機能パイプライン３８のいずれか）が、クロックサイクル中に機能を実施する場合、ＧＰＵ１２は、そのクロックサイクルの間アクティブであると見なされる。
【００９６】
[0100]  また、図２に示されているように、ＧＰＵ１２はクロック生成器３４を含む。クロック生成器３４は、シェーダコア３６および／または固定機能パイプライン３８のユニットがコマンドを実行するときの時間インスタンスを設定するクロック信号を出力する。クロック生成器３４はＧＰＵ１２の内部にあるものとして示されているが、いくつかの例では、クロック生成器３４はＧＰＵ１２の外部にあり得る。また、クロック生成器３４は、必ずしもクロック信号をＧＰＵ１２にだけ与える必要があるとは限らず、クロック信号を他の構成要素にも与え得る。
【００９７】
[0101]  クロック生成器３４は、矩形波、正弦波、三角波、または他のタイプの周期波を生成し得る。クロック生成器３４は、生成された波の電圧を増幅するための増幅器を含み、得られた波をＧＰＵ１２のためのクロック信号として出力し得る。
【００９８】
[0102]  いくつかの例では、クロック生成器３４によって出力されたクロック信号の立上りエッジまたは立下りエッジ上で、シェーダコア３６、および固定機能パイプライン３８の各ユニットは、１つのコマンドを実行し得る。いくつかの場合には、コマンドは、サブコマンドに分割され得、シェーダコア３６、および固定機能パイプライン３８の各ユニットは、クロック信号の立上りエッジまたは立下りエッジに応答してサブコマンドを実行し得る。たとえば、Ａ＋Ｂのコマンドは、Ａの値およびＢの値を取り出すためのサブコマンドを含み、シェーダコア３６または固定機能パイプライン３８は、クロック信号の立上りエッジまたは立下りエッジにおいてこれらのサブコマンドの各々を実行し得る。
【００９９】
[0103]  シェーダコア３６、および固定機能パイプライン３８のユニットがコマンドを実行するレートは、ＧＰＵ１２の電力消費に影響を及ぼし得る。たとえば、クロック生成器３４によって出力されたクロック信号の周波数が比較的高い場合、シェーダコア３６、および固定機能パイプライン３８のユニットは、シェーダコア３６、および固定機能パイプライン３８のユニットが、クロック信号の比較的低い周波数の場合に実行することになるコマンドの数比較して、時間期間内により多くのコマンドを実行し得る。しかしながら、ＧＰＵ１２の電力消費は、シェーダコア３６、および固定機能パイプライン３８のユニットが、（クロック生成器３４からのクロック信号のより低い周波数により）時間期間においてより少ないコマンドを実行している事例と比較して、シェーダコア３６、および固定機能パイプライン３８のユニットが、（クロック生成器３４からのクロック信号のより高い周波数により）時間期間においてより多くのコマンドを実行している事例においてより大きくなり得る。
【０１００】
[0104]  いくつかの例では、電圧はＧＰＵ１２に印加され、クロック生成器３４は、ＧＰＵ１２の最大周波数を制御する。より低い周波数の場合、ＧＰＵ１２は、ＧＰＵ１２がより高い周波数で動作するときの電圧と比較して、より低い電圧で動作し得る。電力は、２乗された周波数および電圧に比例するので、周波数およびＧＰＵ１２に印加される電圧を制御することによって、ＣＰＵ６は、ＧＰＵ１２よって消費される電力量を制御し得る。
【０１０１】
[0105]  クロック生成器３４が出力するクロック信号の周波数は、ＧＰＵ１２の動作周波数を設定し、ＧＰＵ１２がそこにおいて動作している動作点のある部分であり得る。動作点の他の部分は、バス２０のバス帯域幅である。
【０１０２】
[0106]  バス２０のバス帯域幅は、システムメモリ１０のクロック生成器３９によって出力されたクロック信号の周波数によって設定され得る。クロック生成器３９は、クロック生成器３４と実質的に同様であり得るが、クロック信号をシステムメモリ１０に与える。たとえば、クロック生成器３９は、コマンドバッファ４０からのコマンドおよび／またはデータバッファ４２からのデータがバス２０上を進むレートを制御する。デバイス２の構成要素の各々は、互いと通信するためにシステムメモリ１０を使用し得るので、クロック生成器３９は、本質的に、バス２０のバス帯域幅を設定する。バス幅（たとえば、データがその上で進むことができるラインの量）は、どのくらいのデータまたはコマンドがバス２０上で送られ得るかに影響を及ぼす。
【０１０３】
[0107]  ＧＰＵ１２およびクロック生成器３４と同様に、ＣＰＵ６は、メモリコントローラ８、システムメモリ１０、バス２０およびクロック生成器３９に印加される電圧を、これらの構成要素の最大周波数を制御するために制御し得、これは、バス帯域幅を制御することと同じである。また、上記と同様に、バス２０のより低いバス帯域幅の場合、これらの構成要素は、バス２０がより高い帯域幅において動作するときの電圧と比較して、より低い電圧において動作し得る。電力は、２乗された周波数および電圧に比例するので、バス帯域幅、ならびにメモリコントローラ８、システムメモリ１０、バス２０およびクロック生成器３９に印加される電圧を制御することによって、ＣＰＵ６は、これらの構成要素よって消費される電力量を制御し得る。ＧＰＵ１２の動作周波数を設定するクロック生成器３４の出力と、バス２０のバス帯域幅を設定するクロック生成器３９の出力とを制御することによって、ＣＰＵ６は、ＧＰＵ１２がそこにおいて動作する動作点を設定し得る。
【０１０４】
[0108]  図示の例では、ＧＰＵ１２およびシステムメモリ１０は、ＧＰＵ１２およびシステムメモリ１０が、（たとえば、それぞれ、クロック生成器３４および３９からの）異なるクロック信号を使用して動作するので、異なるクロック領域中にある。したがって、ＧＰＵ１２は、システムメモリ１０からのデータを待つ場合、処理が遅延し得る。
【０１０５】
[0109]  上記で説明されたように、ＣＰＵ６は、ＧＰＵ１２の超並列処理能力（massive parallel processing capability）により、タスクをＧＰＵ１２にオフロードし得る。たとえば、ＧＰＵ１２は、単一命令複数データ（ＳＩＭＤ：single instruction, multiple data）構造を用いて設計され得る。ＳＩＭＤ構造では、シェーダコア３６は複数のＳＩＭＤ処理要素を含み、各ＳＩＭＤ処理要素は、同じコマンドを、ただし異なるデータに対して実行する。
【０１０６】
[0110]  特定のＳＩＭＤ処理要素上で実行する特定のコマンドは、スレッド（thread）と呼ばれる。各ＳＩＭＤ処理要素は、所与のスレッドのためのデータが異なり得るので、異なるスレッドを実行するものと見なされ得るが、処理要素上で実行するスレッドは、他の処理要素上で実行するコマンドと同じコマンドである。このようにして、ＳＩＭＤ構造は、ＧＰＵ１２が多くのタスクを並列に（たとえば、同時に）実施することを可能にする。そのようなＳＩＭＤ構造ＧＰＵ１２の場合、各ＳＩＭＤ処理要素は、クロック信号の立上りエッジまたは立下りエッジ上で１つのスレッドを実行し得る。
【０１０７】
[0111]  混乱を回避するために、本開示は、一般的に、シェーダコア３６または固定機能パイプライン３８のユニットによって実行されるプロセスを指すために、「コマンド（command）」という用語を使用する。たとえば、コマンドは、実際のコマンド、成分サブコマンド（たとえば、メモリ呼コマンド）、スレッド、またはＧＰＵ１２が特定の動作を実施する他のやり方を含む。ＧＰＵ１２は、シェーダコア３６と固定機能パイプライン３８とを含むので、ＧＰＵ１２は、コマンドを実行するものと見なされ得る。
【０１０８】
[0112]  また、上記の例では、シェーダコア３６または固定機能パイプライン３８のユニットは、クロック生成器３４によって出力されたクロック信号の立上りエッジまたは立下りエッジに応答してコマンドを実行する。しかしながら、いくつかの例では、シェーダコア３６または固定機能パイプライン３８のユニットは、あるコマンドをクロック信号の立上りエッジ上で実行し、別の後続のコマンドをクロック信号の立下りエッジ上で実行し得る。コマンドを「クロック制御する」ための他のやり方があり得、本開示で説明される技法は、上記の例に限定されない。
【０１０９】
[0113]  ＧＰＵ１２が、立上りエッジ、立下りエッジ、またはその両方ごとにコマンドを実行するので、クロック生成器３４によって出力された（クロックレートとも呼ばれる）クロック信号の周波数は、ＧＰＵ１２がある時間内に実行することができるコマンドの量を設定する。たとえば、ＧＰＵ１２がクロック生成器３４によって生成されたクロック信号の立上りエッジごとに１つのコマンドを実行し、クロック信号の周波数が１ＭＨｚである場合、ＧＰＵ１２は、（理論的上限として）１秒中に１００万個のコマンドを実行することができる。また、システムメモリ１０がクロック生成器３９によって生成されたクロック信号の立上りエッジごとに１ビットのデータを出力し、このクロック信号の周波数が２００ＭＨｚであり、バス幅が１２８ビット（１６バイト）である（たとえば、システムメモリ１０が、クロック信号の立上りエッジごとに１６バイトのデータを転送することができる）場合、バス２０のバス帯域幅は、３．２ＧＢ／ｓ（２００ＭＨｚ＊１６）であり得る。
【０１１０】
[0114]  図２に示されているように、ＣＰＵ６上で動作するソフトウェアスタックは、理解を支援するための論理構成体である、ユーザ空間２３とカーネル空間２７とを含む。ユーザ空間２３の一部は、アプリケーション２４およびユーザモードグラフィックスドライバ２６である。ユーザモードグラフィックスドライバ２６は、コマンドバッファをＧＰＵ１２のために準備し、バッファを、ＧＰＵ１２によって実行されるべきである命令で満たす。カーネル空間２７の一部は、カーネルモードグラフィックスドライバ（kernel mode graphics driver）２８および動的電力マネージャ（ＤＰＭ）３２である。カーネルモードグラフィックスドライバ２８は、コマンドバッファをスケジュールし、ＧＰＵ１２にサブミットする。ＤＰＭ３２は、動作周波数およびバス帯域幅を決定するために、例示的な動作を実施するように構成され得る。
【０１１１】
[0115]  図示のように、ＣＰＵ６は回路２５を含む。回路２５は、プログラマブル回路ブロックと固定機能回路ブロックとを含む。たとえば、回路２５は、アプリケーション２４、ユーザモードグラフィックスドライバ２６、カーネルモードグラフィックスドライバ２８、およびＤＰＭ３２がその上で実行する、トランジスタ、ＡＬＵ、ＥＦＵ、論理ゲートなどを用いて形成されたプログラマブル回路ブロックを含み得る。いくつかの例では、回路２５は、ＤＰＭ３２のみを実行するために使用されるプログラマブル回路であり得る。ＤＰＭ３２が固定機能回路ブロックである例など、いくつかの例では、回路２５は、ＤＰＭ３２のそのような例を含み、アプリケーション２４、ユーザモードグラフィックスドライバ２６、およびカーネルモードグラフィックスドライバ２８を実行するための別個のプログラマブル回路ブロックがあり得る。
【０１１２】
[0116]  ＣＰＵ６は、点線ボックスによって示されているように、アプリケーション２４を実行する。実行中に、アプリケーション２４およびユーザモードグラフィックスドライバ２６は、ＧＰＵ１２に、（たとえば、頂点シェーダ、フラグメントシェーダ、非グラフィックスアプリケーションのための計算シェーダなどの）シェーダプログラムを取り出して実行するように命令するコマンドを含む、ＧＰＵ１２実行されるべきであるコマンドを生成する。さらに、アプリケーション２４およびユーザモードグラフィックスドライバ２６は、コマンドがそれに作用するデータ（すなわち、コマンドのためのオペランド）を生成する。ＣＰＵ６は、生成されたコマンドをコマンドバッファ４０に記憶し、オペランドデータをデータバッファ４２に記憶する。
【０１１３】
[0117]  ＣＰＵ６が生成されたコマンドをコマンドバッファ４０に記憶した後、ＣＰＵ６は、ＧＰＵ１２による実行のためにコマンドを利用可能にする。たとえば、ＣＰＵ６は、記憶されたコマンドのセットと、それらのオペランドデータとのメモリアドレス、およびＧＰＵ１２がコマンドのセットをいつ実行すべきであるかを示す情報をＧＰＵ１２に通信する。このようにして、ＣＰＵ６は、フレームをレンダリングするために実行するために、コマンドをＧＰＵ１２にサブミットする。
【０１１４】
[0118]  図２に示されているように、ＣＰＵ６はまた、カーネルモードグラフィックスドライバ２８を実行し得る。いくつかの例では、カーネルモードグラフィックスドライバ２８は、ＣＰＵ６のハードウェアまたはハードウェアユニット上で実行するソフトウェアまたはファームウェアであり得る。カーネルモードグラフィックスドライバ２８は、ＣＰＵ６およびＧＰＵ１２が互いと通信することを可能にするように構成され得る。たとえば、ＣＰＵ６が、グラフィックスまたは非グラフィックス処理タスクをＧＰＵ１２にオフロードするとき、ＣＰＵ６は、そのような処理タスクをカーネルモードグラフィックスドライバ２８を介してＧＰＵ１２にオフロードする。たとえば、ＧＰＵ１２が実行すべきであるコマンドの量を示す情報をＣＰＵ６が出力するとき、カーネルモードグラフィックスドライバ２８は、情報をＧＰＵ１２に出力するＣＰＵ６のユニットであり得る。
【０１１５】
[0119]  追加の例として、アプリケーション２４は、グラフィックスデータおよびグラフィックスコマンドを生成し、ＣＰＵ６は、このグラフィックスデータの処理をＧＰＵ１２にオフロードし得る。この例では、ＣＰＵ６は、グラフィックスデータをデータバッファ４２に記憶し、グラフィックスコマンドをコマンドバッファ４０に記憶し得、カーネルモードグラフィックスドライバ２８は、それぞれ、グラフィックスデータおよびグラフィックスコマンドをデータバッファ４２およびコマンドバッファ４０からいつ取り出すべきか、それぞれ、グラフィックスデータおよびグラフィックスコマンドをデータバッファ４２およびコマンドバッファ４０のどこから取り出すべきか、およびコマンドのセットの１つまたは複数のコマンドを実行することによってグラフィックスデータをいつ処理すべきかをＧＰＵ１２に命令し得る。
【０１１６】
[0120]  また、アプリケーション２４は、ＧＰＵ１２が１つまたは複数のシェーダプログラムを実行することを必要とし得る。たとえば、アプリケーション２４は、（たとえば、図１のディスプレイ１８上に）表示されるべきであるフレームのためのピクセル値を生成するために、シェーダコア３６が頂点シェーダおよびフラグメントシェーダを実行することを必要とし得る。カーネルモードグラフィックスドライバ２８は、シェーダプログラムをいつ実行すべきかをＧＰＵ１２に命令し、グラフィックスデータをデータバッファ４２から取り出すべき場所と、コマンドをコマンドバッファ４０からまたはシステムメモリ１０中の他のロケーションから取り出すべき場所とともにＧＰＵ１２に命令し得る。このようにして、カーネルモードグラフィックスドライバ２８は、ＣＰＵ６とＧＰＵ１２との間のリンクを形成し得る。
【０１１７】
[0121]  カーネルモードグラフィックスドライバ２８は、アプリケーション処理インターフェース（ＡＰＩ：application processing interface）に従って構成され得るが、カーネルモードグラフィックスドライバ２８は、特定のＡＰＩに従って構成されることに限定される必要はない。デバイス２がモバイルデバイスである一例では、カーネルモードグラフィックスドライバ２８は、ＯｐｅｎＧＬ  ＥＳ  ＡＰＩに従って構成され得る。ＯｐｅｎＧＬ  ＥＳ  ＡＰＩは、モバイルデバイスのために特別に設計される。デバイス２が非モバイルデバイスである一例では、カーネルモードグラフィックスドライバ２８は、ＯｐｅｎＧＬ  ＡＰＩに従って構成され得る。
【０１１８】
[0122]  ＧＰＵ１２が時間期間内に実行する必要があるコマンドの数は、ユーザインターフェースまたはゲームアプリケーションの１つのフレームをレンダリングするために必要とされるコマンドに基づき得る。ユーザインターフェース例の場合、ＧＰＵ１２は、ジャンクなしユーザエクスペリエンスを与えるために、ｖｓｙｎｃウィンドウ（たとえば、毎秒６０フレームと仮定すると、１６ｍｓ）内のユーザインターフェースの１つのフレームをレンダリングするために必要とされるコマンドを実行する必要があり得る。表示される必要がある比較的大量のコンテンツがある場合、コマンドの量は、表示される必要がある比較的少量のコンテンツがある場合よりも大きいことがある。
【０１１９】
[0123]  デバイス２が過度に量の電力を消費することなしに、ＧＰＵ１２が、設定された時間期間内に、サブミットされたコマンドを実行することが可能であることを保証するために、ＣＰＵ６のＤＰＭ３２は、ＧＰＵ１２の動作周波数（たとえば、クロック生成器３４によって生成されたクロック信号の周波数）と、バス２０のバス帯域幅（たとえば、クロック生成器３９によって生成されたクロック信号の周波数）とを制御し得る。動的クロックおよび電圧スケーリング（ＤＣＶＳ）モジュールとも呼ばれるＤＰＭ３２は、ＣＰＵ６上で実行するソフトウェアであるものとして示されている。しかしながら、ＤＰＭ３２は、ＣＰＵ６上のハードウェア、あるいはハードウェアとソフトウェアまたはファームウェアとの組合せであり得る。
【０１２０】
[0124]  ＤＰＭ３２は、本開示で説明される例示的な動作を実施するように汎用ＣＰＵ６を専門化し得る。ＤＰＭ３２がソフトウェアである例では、ＣＰＵ６のオペレーティングシステムは、ＤＰＭ３２のための命令をシステムメモリ１０から取り出し得、ＣＰＵ６上で実行するコンパイラは、命令を実行のためのオブジェクトコードにコンパイルし得るか、またはシステムメモリ１０は、ＤＰＭ３２のオブジェクトコードを記憶し得る。次いで、ＣＰＵ６の回路２５は、ＣＰＵ６に例示的な技法を実施させるために、ＤＰＭ３２を実行し得る。いくつかの他の例では、ＤＰＭ３２は、ＣＰＵ６に、本開示で説明される例示的な技法を実施させるように配線接続された、ＣＰＵ６上の回路２５内の回路ブロックであり得る。いくつかの例では、ＤＰＭ３２は、ソフトウェアと固定ハードウェアとの組合せであり得る。本開示では、ＣＰＵ６が、例示的な技法を実装するものとして説明されるとき、ＣＰＵ６は、回路２５を介して（たとえば、回路２５上で実行するＤＰＭ３２を介して、または回路２５はＤＰＭ３２の固定機能回路ブロックを含む）そのような技法を実装している。
【０１２１】
[0125]  ＧＰＵ１２は、ＧＰＵ１２の動作周波数（たとえば、クロック生成器３４の周波数）と、バス２０のバス帯域幅（たとえば、クロック生成器３９の周波数）とを定義する現在の動作点において動作していることがある。しかしながら、ＧＰＵ１２がそこにおいて動作すべきであるより良い動作点があり得る。たとえば、動作周波数、バス帯域幅、またはその両方が、必要以上に高いことがある。別の例として、動作周波数、バス帯域幅、またはその両方があまりにも低く、不十分な性能を生じることがある。ＤＰＭ３２は、ＧＰＵ１２の動作点を現在の動作点から別の動作点に調整すべきかどうかを決定し得る。
【０１２２】
[0126]  一例では、本開示が、プロセッサアクティブ時間、ストール時間などを決定するための動作を実施するものとしてＣＰＵ６について説明するとき、ＣＰＵ６は、回路２５のＤＰＭ３２を介してそのような動作を実施し得る。ＤＰＭ３２は、現在の動作点におけるＧＰＵ１２のアクティブ時間およびストール時間を決定し、異なる動作点におけるＧＰＵ１２のアクティブ時間およびストール時間を決定する（たとえば、ＧＰＵ１２がこの異なる動作点において動作すべきであった場合、ＧＰＵ１２のアクティブ時間およびストール時間がどのようになるかを決定する）。特に、ＤＰＭ３２は、ビジー時間が異なる動作点においてどのようになるかを直接決定するのではなく、アクティブ時間が異なる動作点においてどのようになるかと、ストール時間が異なる動作点においてどのようになるかとを別々に決定する。
【０１２３】
[0127]  さらに、回路２５はＣＰＵ６内に示されているが、本開示で説明される例示的な技法は、そのように限定されない。いくつかの例では、回路２５はＧＰＵ１２の一部であり得、ＤＰＭ３２は、ＧＰＵ１２内の回路２５上で、またはＧＰＵ１２内の固定機能回路ブロックによって実行し得る。そのような例では、それの動作点が決定されつつある処理ユニット（たとえば、ＧＰＵ１２）は、動作点を決定するための回路を含む。いくつかの例では、回路２５は、それの目的が、デバイス２中の様々な他の処理ユニットの動作点を決定することである、ＣＰＵ６およびＧＰＵ１２の外部のそれ自体のスタンドアロン処理ユニットであり得る。
【０１２４】
[0128]  単に説明しやすいように、例示的な技法は、ＣＰＵ６の回路２５がＤＰＭ３２を介してＧＰＵ１２の動作点を決定するものとして説明される。しかしながら、これらの技法は、回路２５がデジタル信号プロセッサ（ＤＳＰ）のための動作点を決定する例に拡張可能である。また、これらの技法は、ＧＰＵ１２が回路２５を含む例、ならびに回路２５が、ＣＰＵ６とＧＰＵ１２とを含むＳｏＣ内のそれ自体のスタンドアロン処理ユニットである例に拡張可能である。
【０１２５】
[0129]  ＧＰＵ１２のアクティブ時間を決定するために、ＤＰＭ３２は、アクティブサイクルカウンタ値をアクティブサイクルカウンタレジスタ３５から読み取り得る。いくつかの例では、ＧＰＵ１２の少なくとも１つの回路ブロックが、クロック生成器３４によって生成されたクロック信号の立上りエッジまたは立下りエッジ上で機能を実施するときはいつでも、コントローラ３０は、アクティブサイクルカウンタレジスタ３５中のアクティブサイクルカウンタ値を増分する。たとえば、回路ブロックの各々は、回路ブロックの各々がクロックサイクル中に動作を実施したかどうかを示すアクティブ信号をコントローラ３０に出力し得る。コントローラ３０は、ＯＲ関数を受信されたアクティブ信号に適用し得、ＯＲ関数の出力が論理１である場合、コントローラ３０は、アクティブサイクルカウンタレジスタ３５に記憶されたアクティブサイクルカウンタ値を増分し、ＯＲ関数の出力が論理０である場合、コントローラ３０は、アクティブサイクルカウンタ値を増分しない。
【０１２６】
[0130]  ある時間期間後に、ＤＰＭ３２は、ＧＰＵ１２が時間期間中にどのくらいの時間の間アクティブであったか（たとえば、ＧＰＵ１２のアクティブ時間）を決定するために、アクティブサイクルカウンタレジスタ３５を読み取り、読み取られたアクティブサイクルカウンタ値をクロック生成器３４の周波数で除算する。時間期間は、プリセットされた時間期間または変数であり得る（たとえば、ＤＰＭ３２は、ＧＰＵ１２がアイドルになるたびに、アクティブサイクルカウンタレジスタ３５を読み取る）。アクティブ時間を決定するための他のやり方があり得、上記は一例である。
【０１２７】
[0131]  ＧＰＵ１２のストール時間を決定するために、ＤＰＭ３２は、期間時間の後にビジーサイクルカウンタ値をビジーサイクルカウンタレジスタ３７から読み取り得る。たとえば、ＤＰＭ３２は、同じ期間時間の後にビジーサイクルカウンタレジスタ３７とアクティブサイクルカウンタレジスタ３５とを読み取る（たとえば、ほぼその時間に読み取る）。ＤＰＭ３２は、次いで、ストール時間を決定するために、ビジー時間値からアクティブ時間値を減算する。
【０１２８】
[0132]  いくつかの例では、コントローラ３０が、クロック生成器３４のクロックサイクルが経過し、ＧＰＵ１２の回路ブロックがバス２０からのデータおよび／または命令を待ってストールされたと決定した場合、コントローラ３０は、ビジーサイクルカウンタレジスタ３７に記憶されたビジーサイクルカウンタ値を増分し得る。ＣＰＵ６（たとえば、回路２５のＤＰＭ３２）は、ビジーサイクルからＧＰＵアクティブサイクルを減算することによって、ＧＰＵ１２ストールサイクルを計算することができる。ＣＰＵ６（たとえば、回路２５のＤＰＭ３２）はまた、ＧＰＵストールサイクルカウンタ値が利用可能な場合、それをストールカウンタレジスタから直接読み取ることができる。ＣＰＵ６は、ＧＰＵ１２が時間期間中にどのくらいの時間の間ストールされたか（たとえば、ＧＰＵ１２のストール時間）を決定するために、ストールサイクルをクロック生成器３４の周波数で除算する。
【０１２９】
[0133]  この場合も、ＧＰＵ１２のストール時間およびアイドル時間は、異なる概念であり、混同されるべきではないことを理解されたい。たとえば、コントローラ３０は、ＧＰＵ１２が最初にデータまたは命令をキャッシュから取り出すことを試行し、次いで、キャッシュミスがある場合、データまたは命令をシステムメモリ１０から取り出すことを試みたときにビジーサイクルカウンタレジスタ３７を増分し得る。アイドル時間中に、取り出すべき命令またはデータがない。アイドル時間中に、コントローラ３０は、ビジーサイクルカウンタレジスタ３７を増分しないことがある。
【０１３０】
[0134]  上記で説明されたように、ＧＰＵ１２は、ＧＰＵ１２内の１つまたは複数のブロックがクロックサイクル（立上りエッジ〜立上りエッジまたは立下りエッジ〜立下りエッジ）の間アクティブである場合、アクティブであると見なされる。アクティブ時間は、バス帯域幅の関数でなく、動作周波数の関数である。たとえば、アクティブ時間は、所与の作業負荷（たとえば、１つのフレームの処理）のための特定の動作周波数についてのＧＰＵ１２のクロック領域における動作の数の関数であり、ここで、アクティブ時間は動作周波数に反比例する。
【０１３１】
[0135]  ＧＰＵ１２のストール時間は、ＧＰＵ１２のブロックがバスデータを待ってストールされる時間の量であり、特定のバス速度についてのメモリ動作（たとえば、システムメモリ１０へのアクセス）の数の関数である。したがって、ストール時間は、大部分がバス帯域幅の関数である。
【０１３２】
[0136]  ＤＰＭ３２は、ＧＰＵ１２のビジー時間を決定するために、ビジーサイクルカウンタレジスタ３７を読み取り得、ここで、ビジー時間はアクティブ時間＋ストール時間に等しい。ビジー時間から、ＤＰＭ３２は、ビジー割合（たとえば、時間期間で除算されたビジー時間）を決定し得る。ＤＰＭ３２は、アクティブ時間を時間期間で除算し、ストール時間を時間期間で除算し、値を互いに加算することによってビジー割合を決定することができることを理解されたい。
【０１３３】
[0137]  ビジー割合に基づいて、ＤＰＭ３２は、ＧＰＵ１２の動作点を調整することが実現可能であるかどうかを決定し得る。たとえば、ＤＰＭ３２は、異なる動作点のテーブルを、動作点の各々に関連するあらかじめ設定されたアップスケールしきい値とともに記憶し得る。アップスケールしきい値は、しばしば、すべての動作点について同じであるが、異なることもある。ＤＰＭ３２を介した、回路２５は、ビジー割合が、異なる動作点のうちの１つにおいてどのようになるかを計算し、ビジー割合をそれのアップスケールしきい値（たとえば、９０％）と比較し、比較に基づいてＧＰＵ１２の動作点を調整し得る。たとえば、現在の動作点のためのビジー割合が、現在の動作点のアップスケールしきい値よりも小さいと仮定する。より低い動作点におけるビジー割合が、依然として、このより低い動作点のアップスケールしきい値よりも小さい場合、ＤＰＭ３２を介した、回路２５は、動作点をこのより低い動作点に調整し得る。より低い動作点は、現在の動作点の動作周波数よりも低い動作周波数と、現在の動作点のバス帯域幅と同じであるバス帯域幅とに関連する動作点、現在のバス帯域幅よりも低いバス帯域幅と、現在の動作点の動作周波数と同じである動作周波数とに関連する動作点、または現在の動作点の動作周波数よりも低い動作周波数と、現在のバス帯域幅よりも低いバス帯域幅とに関連する動作点である。現在の動作点のためのビジー割合が現在の動作点のアップスケールしきい値よりも大きい場合、ＤＰＭ３２を介した、回路２５は、より高い動作点に調整し得る。
【０１３４】
[0138]  他の動作点におけるビジー割合を決定するために、ＤＰＭ３２を介した、回路２５は、他の動作点におけるアクティブ時間とストール時間とを別個の値として決定する。たとえば、ＧＰＵ１２が、第１の動作周波数と第１のバス帯域幅とを有する第１の動作点と呼ばれる、現在の動作点において動作していると仮定する。この例では、第２の動作点と呼ばれる、他の動作点は、第２の動作周波数と第２のバス帯域幅とを有する。
【０１３５】
[0139]  第２の動作点におけるＧＰＵ１２のアクティブ時間は、第１の動作点におけるＧＰＵ１２のアクティブ時間、および第１の動作周波数と第２の動作周波数との間の比に基づく。たとえば、ＤＰＭ３２を介した、回路２５は、第２の動作点におけるアクティブ時間が、（第１の動作周波数／第２の動作周波数）を乗算された第１の動作点におけるアクティブ時間に等しいと決定し得る。
【０１３６】
[0140]  第２の動作点におけるＧＰＵ１２のストール時間は、第１の動作点におけるＧＰＵ１２のストール時間、および第１のバス帯域幅と第２のバス帯域幅との間の比に基づく。たとえば、ＤＰＭ３２を介した、回路２５は、第２の動作点におけるストール時間が、（第１のバス帯域幅／第２のバス帯域幅）を乗算された第１の動作点におけるストール時間に等しいと決定し得る。第１のバス帯域幅は、有効な現在のバス帯域幅であり、必ずしも特定の動作点に関連するバス帯域幅とは限らないことを理解されたい。上記で説明されたように、デバイス２の、ＣＰＵ６、ＧＰＵ１２、および場合によっては他の構成要素は、各々バス２０上で転送しているデータの量を決定し、バス帯域幅がどのようになるべきであるかを決定するバスインターフェースを含む。これらの構成要素は、決定されたバス帯域幅情報を、ＣＰＵ６または別の処理ユニット上で動作するバスドライバに出力し得、このバスドライバは、実際のバス帯域幅がどのようになるべきであるかを決定し得る。たとえば、ＣＰＵ６は、特定のバス帯域幅に投票し得るが、他の構成要素からの投票に基づいて、異なるバス帯域幅を決定し得る。
【０１３７】
[0141]  基本例として、現在の動作点（たとえば、第１の動作点）について、処理ユニットがアクティブ時間である５ｍｓであり、ストール時間が１ｍｓであり、動作周波数が２００ＭＨｚであり、有効バス帯域幅が２ＧＢ／ｓであると仮定する。異なる動作点のための記憶されたテーブルによって示されるように、第２の動作点について、動作周波数が１００ＭＨｚであり、バス帯域幅が１ＧＢ／ｓであると仮定する。この例では、ＤＰＭ３２を介した、回路２５は、第２の動作点におけるアクティブ時間を５ｍｓ＊（２００ＭＨｚ／１００ＭＨｚ）＝１０ｍｓと決定し、第２の動作点におけるストール時間を１ｍｓ＊（２ＧＢ／ｓ／１ＧＢ／ｓ）＝２ｍｓと決定し得る。
【０１３８】
[0142]  この例では、ＤＰＭ３２を介した、回路２５は、第２の動作点におけるビジー時間を１０ｍｓ＋２ｍｓ＝１２ｍｓであると決定し得るが、第１の動作点におけるビジー時間は、５ｍｓ＋１ｍｓ＝６ｍｓであった。ＤＰＭ３２を介した、回路２５が、アクティブサイクルカウンタレジスタ３５またはビジーサイクルカウンタレジスタ３７を読み取る時間期間が、１６ｍｓごと場合、第１の動作点におけるビジー割合は、６ｍｓ／１６ｍｓ＝３７．５％であり、第２の動作点におけるビジー割合は、１２ｍｓ／１６ｍｓ＝７５％である。しきい値が８０％である場合、ＤＰＭ３２を介した、回路２５は、性能に影響を及ぼすことなしに電力を節約するために、ＧＰＵ１２の動作点を第１の動作点から第２の動作点に調整することが安全であると決定し得る。しかしながら、しきい値が７０％である場合、ＤＰＭ３２を介した、回路２５は、ＧＰＵ１２の動作点を第１の動作点から第２の動作点に調整することが安全でないと決定し得、ＧＰＵ１２の動作点を調整しないことがあるか、または動作点が性能劣化なしにそれに調整され得る別の動作点を識別することを試み得る。
【０１３９】
[0143]  第１の動作点は、ＧＰＵ１２のための第１の動作周波数と、ＧＰＵ１２をシステムメモリ１０に相互接続するバス２０のための第１のバス帯域幅とを識別する。しかしながら、第１のバス帯域幅は実際のバス帯域幅ではないことがある。例示的な技法では、ＤＰＭ３２を介した、回路２５は、計算目的のために有効バス帯域幅を使用し得るが、ＤＰＭ３２を介した、回路２５が、同様に計算のために第１の動作点に関連するバス帯域幅を使用することが可能である。本開示では、第１のバス帯域幅は、現在の動作点のための有効バス帯域幅、または現在の動作点に関連するバス帯域幅のいずれかを総称的に指すことがある。
【０１４０】
[0144]  第２の動作点は、ＧＰＵ１２のための第２の動作周波数と、ＧＰＵ１２をシステムメモリ１０に相互接続するバス２０のための第２のバス帯域幅とを識別する。いくつかの例では、第１の動作周波数と第２の動作周波数とは異なり、第１のバス帯域幅と第２のバス帯域幅とは同じである。いくつかの例では、第１の動作周波数と第２の動作周波数とは同じであり、第１のバス帯域幅と第２のバス帯域幅とは異なる。いくつかの例では、第１の動作周波数と第２の動作周波数とは異なり、第１のバス帯域幅と第２のバス帯域幅とは異なる。
【０１４１】
[0145]  また、上記の例は、アクティブ時間およびストール時間から決定された、ビジー時間からビジー割合を決定することを用いて説明された。しかしながら、ビジー割合は、アクティブ時間割合およびストール時間割合から直接計算され得る。たとえば、ＤＰＭ３２を介した、回路２５は、第１の動作点におけるアクティブ時間割合（たとえば、時間期間で除算されたアクティブ時間）を決定し、第１の動作点におけるストール時間割合（たとえば、時間期間で除算されたストール時間）を決定し得る。次いで、ＤＰＭ３２を介した、回路２５は、第１の動作点におけるアクティブ時間割合に動作周波数間の比を乗算することによって、第２の動作点におけるアクティブ時間割合を決定し、ストール時間割合にバス帯域幅間の比を乗算することによって、第２の動作点におけるストール時間割合を決定し得る。ＤＰＭ３２を介した、回路２５は、次いで、第２の動作点におけるビジー割合を決定するために、第２の動作点におけるアクティブ時間割合とストール時間割合とを加算する。
【０１４２】
[0146]  本開示で説明される技法は、アクティブ時間とアクティブ時間割合とストール時間とストール時間割合とに基づいて適用され得るので、本開示は、アクティブ時間の量およびアクティブ時間割合を総称的に呼ぶために「アクティブ時間（active time）」という用語を使用し、ストール時間の量およびストール時間割合を総称的に呼ぶために「ストール時間（stall time）」という用語を使用する。また、本技法はＣＰＵ６およびＧＰＵ１２に関して説明されるが、概して、本技法は、（処理回路とも呼ばれる）様々なタイプの処理ユニットに適用可能であり得る。
【０１４３】
[0147]  たとえば、ＣＰＵ６の、ＤＰＭ３２を介した、回路２５は、第１の動作点における処理ユニット（たとえば、ＧＰＵ１２、ＤＳＰなど）の第１のアクティブ時間（たとえば、アクティブ時間の第１の量または第１のアクティブ時間割合）を決定し、第１の動作点における処理ユニットの第１のストール時間（たとえば、ストール時間の第１の量または第１のストール時間割合）を決定する。ＤＰＭ３２を介した、回路２５はまた、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間（たとえば、アクティブ時間の第２の量または第２のアクティブ時間割合）を決定し、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間（たとえば、ストール時間の第２の量または第２のストール時間割合）を決定する。
【０１４４】
[0148]  ＤＰＭ３２を介した、回路２５は、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定する。ＤＰＭ３２を介した、回路２５は、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整する。
【０１４５】
[0149]  ＤＰＭ３２を介した、回路２５は、第２のアクティブ時間と第２のストール時間とに基づいてビジー割合を決定し、ビジー割合をしきい値と比較し、比較に基づいて、動作点を調整すべきかどうかを決定し得る。処理ユニットの第２のアクティブ時間を決定するために、ＤＰＭ３２を介した、回路２５は、第１のアクティブ時間、および第１の動作点のための処理ユニットの動作周波数と第２の動作点のための処理ユニットの動作周波数との比（たとえば、第１の動作点における動作周波数と第２の動作点における動作周波数との間の比を乗算された第１のアクティブ時間）に基づいて、第２のアクティブ時間を決定する。第１のストール時間に基づいて第２のストール時間を決定するために、ＤＰＭ３２を介した、回路２５は、第１のストール時間、および第１の動作点のためのバス帯域幅（たとえば、ＧＰＵ１２が第１の動作点において動作している間の有効バス帯域幅、または第１の動作点に関連するバス帯域幅）と、第２の動作点のためのバス帯域幅との比（たとえば、第１の動作点におけるバス帯域幅と第２の動作点におけるバス帯域幅との間の比を乗算された第１のストール時間）に基づいて、第２のストール時間を決定する。
【０１４６】
[0150]  図３Ａおよび図３Ｂは、本開示で説明される例による、動作周波数に応じたビジー割合の一例を示す概念図である。図３Ａでは、動作周波数は２００ＭＨｚであり、時間期間にわたって、ＧＰＵ１２は、時間の半分ビジーであり（たとえば、５０％ビジー割合）、残りの５０％の間アイドルである。異なる動作周波数におけるビジー時間が、現在の動作周波数におけるビジー時間、および周波数間の比のみに基づいて決定され得るという仮定が行われた場合、図３Ａに示されているように、ＣＰＵ６は、動作周波数が１００ＭＨｚに半減されたときのビジー割合が１００％（たとえば、５０％＊２）になると決定し得る。この場合、ＣＰＵ６は、１００％がしきい値（たとえば、９０％ビジー割合）よりも大きいので、ＧＰＵ１２の動作周波数が１００ＭＨｚに低減されるべきではないと決定し得る。
【０１４７】
[0151]  しかしながら、異なる動作周波数におけるビジー時間が、現在の動作周波数におけるビジー時間のみに基づくという仮定は、ストール時間が動作周波数の関数でないので、誤っていることがある。たとえば、図３Ｂに示されているように、アクティブ時間およびストール時間は、２００ＭＨｚ動作周波数と１００ＭＨｚ動作周波数の両方について別々に示されている。この例では、バス帯域幅が変化しない場合、ストール時間は、動作周波数が５０％だけ低減された場合に変化しない。アクティブ時間のみが２倍になる。この場合、第２の動作周波数におけるアクティブ時間とストール時間との加算は、しきい値よりも小さく、ＣＰＵ６は、ＧＰＵ１２の動作周波数を２００ＭＨｚから１００ＭＨｚに調整し得る。
【０１４８】
[0152]  たとえば、図３Ｂでは、２００ＭＨｚ動作周波数の場合、５０％のビジー時間について、アクティブ時間割合は時間期間の３０％であり、ストール時間割合は時間期間の２０％であると仮定し、これは、図３Ａに整合する。本開示で説明される技法によれば、ＣＰＵ６は、１００ＭＨｚにおけるアクティブ時間割合が６０％（たとえば、３０％＊２００ＭＨｚ／１００ＭＨｚ）であり、ストール時間割合が２０％のままであることになる（たとえば、バス帯域幅が一定である）と決定し得る。この場合、ビジー割合は、ビジー割合が、図３Ａの場合のように、１００％であり、しきい値よりも大きくなるという決定ではなく、８０％であり、しきい値よりも小さい。
【０１４９】
[0153]  図４Ａおよび図４Ｂは、本開示で説明される例による、バス帯域幅に応じたビジー割合の一例を示す概念図である。図４Ａおよび図４Ｂは、図３Ａおよび図３Ｂのものと同様であるが、バス帯域幅が変化し、動作周波数が一定である観点からのものである。
【０１５０】
[0154]  たとえば、図４Ａは、バス帯域幅が減少し、ビジー時間の増加を生じるビジー時間計算を示している。この場合、図３Ａに関して説明された技法など、いくつかの技法は、ビジー時間の変化がないと決定し得る。しかしながら、バス２０は、限られた帯域幅を有するので、ビジー時間は、図４Ａに示されているように増加する。したがって、図３Ａに関して説明された技法のような、技法を用いて、ＣＰＵ６は、ビジー割合が、しきい値よりも小さいのか大きいのかを適切に決定する可能でないことがある。
【０１５１】
[0155]  しかしながら、本開示で説明される技法では、（たとえば、回路２５のＤＰＭ３２を介した）ＣＰＵ６は、別々に、アクティブ時間、またはＧＰＵ１２がアクティブである時間の割合（percentage of time）を決定し、ストール時間、またはＧＰＵ１２がストールされる時間の割合を決定し、次いで、これらの成分値に基づいてビジー割合を決定し得る。この場合、ＣＰＵ６は、バス帯域幅を低減すべきか否かをより良く決定するために、ビジー割合が、しきい値よりも大きいのか小さいのかをより良く決定することが可能であり得る。たとえば、図４Ｂに示されているように、ＣＰＵ６は、バス帯域幅の低減があるときにストール時間のみが増加し、アクティブ時間が一定のままであることになると適切に決定し得る。ＣＰＵ６は、動作点を調整すべきかどうかを決定するために、別個の値としてアクティブ時間とストール時間とを使用し得る。
【０１５２】
[0156]  図５は、異なる動作周波数とバス帯域幅との組合せのための動作点の例を示す概念図である。たとえば、図５は、（たとえば、ＤＰＭ３２を介した）ＣＰＵ６の回路２５が、異なる動作点のために取り出し得るテーブルを概念的に示す。たとえば、図５に示されている例では、ＯＰＰ００が、６００ＭＨｚの動作周波数と１２．７ＧＢ／ｓのバス帯域幅とを識別し、ＯＰＰ１０が、４２０ＭＨｚの動作周波数と１２．７ＧＢ／ｓのバス帯域幅とを識別し、以下同様であり、ここで、ＯＰＰ３３が、２００ＭＨｚの動作周波数と２．２ＧＢ／ｓのバス帯域幅とを識別する。図５は、異なる動作周波数およびバス帯域幅の一例にすぎず、動作周波数とバス帯域幅とのより多くの、より少ない、または異なる組合せが可能である。
【０１５３】
[0157]  図５に示されている例では、ＧＰＵ１２がＯＰＰ１１（たとえば、４２０ＭＨｚおよび７．０ＧＢ／ｓ）において動作していると仮定する。しかしながら、有効バス帯域幅が７．０ＧＢ／ｓとは異なることが可能である。説明しやすいように、以下は、有効バス帯域幅が７．０ＧＢ／ｓであると仮定するが、有効バス帯域幅が異なる例では、有効バス帯域幅は計算において使用される。
【０１５４】
[0158]  また、ＯＰＰ１１において、ビジー割合がしきい値よりも実質的に小さいとＣＰＵ６が決定したと仮定する。たとえば、アップスケールしきい値は、それを超えると性能劣化があり得るビジー割合の上限を示し得る。ＣＰＵ６が、ＯＰＰ１１におけるビジー割合が、ＯＰＰ１１のアップスケールしきい値よりも小さいと決定し、ＧＰＵ１２のより低い動作点におけるビジー割合が、これらのより低い動作点の対応するアップスケールしきい値よりも大きいと決定した場合、ＣＰＵ６は、ＧＰＵ１２のこれらのより低い動作点に調整すべきかどうかを決定しないことがある。しかしながら、ＣＰＵ６が、ＧＰＵ１２のより低い動作点のうちの１つにおけるビジー割合が、ＧＰＵ１２のこのより低い動作点のアップスケールしきい値よりも小さいと決定した場合、ＣＰＵ６は、本開示で説明される例示的な技法を実施し得る。
【０１５５】
[0159]  ＣＰＵ６が、動作点が調整されるべきであると決定した場合、ＣＰＵ６は、隣接動作点において、本開示で説明される技法を使用して、ビジー割合がどのようになるかを決定し得る。たとえば、ＣＰＵ６は、ＯＰＰ１１から延びる矢印によって示されているように、ＯＰＰ２１、ＯＰＰ２２、およびＯＰＰ１２におけるビジー割合を決定し、この動作点のアップスケールしきい値未満のビジー割合をもつ最低動作点を決定し得る。ＣＰＵ６は、次いで、ＧＰＵ１２に、決定された動作点において動作させ得る。
【０１５６】
[0160]  別の例として、ＣＰＵ６は、動作点の各々についてのビジー割合を順次決定し、ＣＰＵ６が、ビジー割合がしきい値よりも小さい動作点を見つけたとき、決定することを停止し得る。ビジー割合がどのようになるかを決定するための動作点のシーケンスは、設計選択の事項であり得、本開示によって様々な置換が企図される。
【０１５７】
[0161]  図５に示されている例では、ＣＰＵ６は、最高３つの動作点におけるビジー割合を決定し得る。他の例では、ＣＰＵ６は、３つの動作点よりも多いまたは少ない動作点におけるビジー割合を決定し得る。また、動作点は、必ずしも、現在の動作点に隣接する必要があるとは限らない。
【０１５８】
[0162]  図６は、本開示で説明される技法による、動作周波数およびバス帯域幅決定の例示的な方法を示すフローチャートである。図６の例は、回路２５が例示的な技法を実施するように構成されることに関して説明される。回路２５は、図６に示されている例を実施するように回路２５を構成するＤＰＭ３２の命令を実行するように構成され得る。別の例として、ＤＰＭ３２は、回路２５の固定機能回路ブロックであり得る。
【０１５９】
[0163]  さらに、回路２５はＣＰＵ６の一部であるものとして示されているが、いくつかの例では、回路２５は、それの動作点が決定されつつある処理ユニットの一部であり得る。たとえば、デバイス２は、処理ユニット（たとえば、ＧＰＵ１２またはＤＳＰ）と、本開示で説明される例示的な技法を使用して処理ユニットの動作点を決定するように構成された回路２５とを含み得る。いくつかの例では、ＣＰＵ６が回路２５を含む。いくつかの例では、処理ユニットが回路２５を含む。いくつかの例では、ＣＰＵ６が回路２５を含み、回路２５は、例示的な技法を使用してＣＰＵ６の動作点を決定するように構成される。
【０１６０】
[0164]  図６の例では、ＤＰＭ３２を介した、回路２５は、第１の動作点における処理ユニットの第１のアクティブ時間を決定する（５０）。第１のアクティブ時間は、処理ユニットが、時間期間内で、データを処理する際の処理ユニットのクロック領域において、アクティブである時間の量または時間の割合を示す。
【０１６１】
[0165]  一例として、（たとえば、ＣＰＵ６の回路２５上で実行する、またはＣＰＵ６の回路２５上の回路ブロックとして形成された）ＤＰＭ３２は、ある時間期間後にアクティブサイクルカウンタレジスタ３５の値を読み取り、アクティブ時間を決定するためにその値を動作周波数で除算する。ＤＰＭ３２は、次いで、アクティブ時間割合を決定するために、アクティブ時間を時間期間で除算し得る。
【０１６２】
[0166]  回路２５は、第１の動作点における処理ユニットの第１のストール時間を決定する（５２）。第１のストール時間は、処理ユニットが、時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示し得る。
【０１６３】
[0167]  一例として、ＤＰＭ３２は、ある時間期間後にビジーサイクルカウンタレジスタ３７の値を読み取り、ビジー時間値からアクティブ時間値を減算し、ストール時間を決定するために、得られた値を動作周波数で除算する。ＤＰＭ３２は、次いで、ストール時間割合を決定するために、ストール時間を時間期間で除算し得る。
【０１６４】
[0168]  回路２５は、第２の動作点における第１のアクティブ時間に基づいて、処理ユニットの第２のアクティブ時間を決定する（５４）。たとえば、回路２５は、第１のアクティブ時間、および第１の動作点のための処理ユニットの動作周波数と、第２の動作点のための処理ユニットの動作周波数との比に基づいて、第２のアクティブ時間を決定する。
【０１６５】
[0169]  回路２５は、第２の動作点における第１のストール時間に基づいて、処理ユニットの第２のストール時間を決定する（５６）。たとえば、回路２５は、第１のストール時間、および処理ユニットが第１の動作点において動作しているときの有効バス帯域幅と、第２の動作点のためのバス帯域幅との比に基づいて、第２のストール時間を決定する。
【０１６６】
[0170]  この例では、第１の動作点は、処理ユニットのための第１の動作周波数と、処理ユニットをシステムメモリ１０に相互接続するバス２０のための第１のバス帯域幅とを識別する。第２の動作点は、処理ユニットのための第２の動作周波数と、処理ユニットをシステムメモリ１０に相互接続するバス２０のための第２のバス帯域幅とを識別する。第１の動作周波数と第２の動作周波数とは異なり得（たとえば、第２の動作周波数は第１の動作周波数よりも小さい）、第１のバス帯域幅と第２のバス帯域幅とは同じであり得るか、第１の動作周波数と第２の動作周波数とは同じであり得、第１のバス帯域幅と第２のバス帯域幅とは異なり得る（たとえば、第２のバス帯域幅は第１のバス帯域幅よりも小さい）か、または第１の動作周波数と第２の動作周波数とは異なり得、第１のバス帯域幅と第２のバス帯域幅とは異なる（たとえば、第２の動作周波数は第１の動作周波数よりも小さく、第２のバス帯域幅は第１のバス帯域幅よりも小さい）。
【０１６７】
[0171]  回路２５は、第２のアクティブ時間と第２のストール時間とに基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整すべきかどうかを決定する（５８）。たとえば、回路２５は、第２のアクティブ時間と第２のストール時間とに基づいてビジー割合を決定し、ビジー割合をしきい値と比較し、比較に基づいて、処理ユニットの動作点を調整すべきかどうかを決定し得る。
【０１６８】
[0172]  回路２５は、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第１の動作点から第２の動作点に調整する（６０）。このようにして、ＤＰＭ３２を介した、回路２５は、性能に影響を及ぼすことなしに電力を最小限に抑えるように動作点を調整し得る。
【０１６９】
[0173]  図７Ａおよび図７Ｂは、動作点を決定する例示的なアルゴリズムを示すフローチャートである。図７Ａおよび図７Ｂは、回路２５のＤＰＭ３２に関して説明される。ＤＰＭ３２は、現在の動作点における現在のアクティブ時間およびストール時間を決定する（７０）。たとえば、ＤＰＭ３２は、現在のアクティブ時間を決定するために、アクティブ時間値をアクティブサイクルカウンタレジスタ３５から読み取り得る。ＤＰＭ３２は、ビジーサイクルカウンタ値をビジーサイクルカウンタレジスタ３７から読み取り、現在のストール時間を決定するためにアクティブ時間値を減算する。説明しやすいように、現在の動作点が図５のＯＰＰ１１であると仮定する。
【０１７０】
[0174]  ＤＰＭ３２は、それぞれのより低い動作周波数およびより低いバス帯域幅におけるアクティブ時間およびストール時間を決定する（７２）。たとえば、ＤＰＭ３２は、ＯＰＰ２２におけるアクティブ時間およびストール時間を決定し得、ここで、ＯＰＰ２２におけるアクティブ時間は、現在のアクティブ時間＊（現在の動作周波数／ＯＰＰ２２の動作周波数）に等しく、ＯＰＰ２２におけるストール時間は、現在のストール時間＊（現在の有効バス帯域幅／ＯＰＰ２２のバス帯域幅）に等しい。ＤＰＭ３２は、次いで、ＯＰＰ２２におけるビジー割合を決定する（７４）。
【０１７１】
[0175]  ＯＰＰ２２におけるビジー割合がしきい値（たとえば、９０％）よりも小さい場合（７６のＹＥＳ）、ＤＰＭ３２は、ターゲット動作周波数およびターゲットバス帯域幅をＯＰＰ２２の動作周波数およびバス帯域幅に設定する（７８）。アルゴリズムは、次いで、図７Ｂに記載されているブロックＡに進み得る。
【０１７２】
[0176]  ＯＰＰ２２におけるビジー割合がしきい値（たとえば、９０％）以上である場合（７６のＮＯ）、ＤＰＭ３２は、同じバス帯域幅およびより低い動作周波数（たとえば、ＯＰＰ２１）におけるビジー割合を決定する（８０）。たとえば、上記と同様に、ＤＰＭ３２は、ＯＰＰ２１におけるアクティブ時間を、現在のアクティブ時間＊（現在の動作周波数／ＯＰＰ２１の動作周波数）として決定し得、ＯＰＰ２１におけるストール時間は、現在のストール時間＊（現在のバス帯域幅／ＯＰＰ２１のバス帯域幅）に等しい。ＯＰＰ２１におけるアクティブ時間およびストール時間に基づいて、ＤＰＭ３２は、ＯＰＰ２１におけるビジー割合を決定し得る。
【０１７３】
[0177]  ＯＰＰ２１におけるビジー割合がしきい値（たとえば、９０％）よりも小さい場合（８２のＹＥＳ）、ＤＰＭ３２は、ターゲット動作周波数をＯＰＰ２１の動作周波数に設定する（８４）。アルゴリズムは、次いで、図７Ｂに記載されているブロックＡに進み得る。
【０１７４】
[0178]  ＯＰＰ２１におけるビジー割合がしきい値（たとえば、９０％）以上である場合（８２のＮＯ）、ＤＰＭ３２は、同じ動作周波数およびより低いバス帯域幅（たとえば、ＯＰＰ１２）におけるビジー割合を決定する（８６）。たとえば、上記と同様に、ＤＰＭ３２は、ＯＰＰ１２におけるアクティブ時間を、現在のアクティブ時間＊（現在の動作周波数／ＯＰＰ１２の動作周波数）として決定し得、ＯＰＰ１２におけるストール時間は、現在のストール時間＊（現在のバス帯域幅／ＯＰＰ１２のバス帯域幅）に等しい。ＯＰＰ１２におけるアクティブ時間およびストール時間に基づいて、ＤＰＭ３２は、ＯＰＰ１２におけるビジー割合を決定し得る。
【０１７５】
[0179]  ＯＰＰ１２におけるビジー割合がしきい値（たとえば、９０％）よりも小さい場合（８８のＹＥＳ）、ＤＰＭ３２は、ターゲットバス帯域幅をＯＰＰ１２のバス帯域幅に設定し（９０）、アルゴリズムは、次いで、図７Ｂに記載されているブロックＡに進み得る。ＯＰＰ１２におけるビジー割合がしきい値（たとえば、９０％）以上である場合（８８のＮＯ）、アルゴリズムは、次いで、図７Ｂに記載されているブロックＡに進み得る。
【０１７６】
[0180]  図７Ｂに示されているように、ＤＰＭ３２は、（ブロック７８または８４において決定されていることがある）ターゲット動作周波数が現在の周波数とは異なるかどうかを決定する（９２）。ターゲット動作周波数が現在の周波数とは異なる場合（９２のＹＥＳ）、ＤＰＭ３２は、動作周波数をターゲット周波数にスケーリングする。
【０１７７】
[0181]  ターゲット動作周波数が現在の周波数とは異ならない場合（９２のＮＯ）、または動作周波数をスケーリングした後、ＤＰＭ３２は、（ブロック７８または９０において決定されていることがある）ターゲットバス帯域幅が現在のバス帯域幅とは異なるかどうかを決定する（９６）。ターゲットバス帯域幅が現在のバス帯域幅とは異なる場合（９６のＹＥＳ）、ＤＰＭ３２はターゲットバス帯域幅のための投票を送る（９８）。ターゲットバス帯域幅が現在のバス帯域幅とは異ならない場合（９６のＮＯ）、または動作周波数をスケーリングした後、ＤＰＭ３２は、一定の遅延の後に、または次のフレームの間アルゴリズムを繰り返し、再び現在のアクティブ時間およびストール時間を決定し、ブロック７０〜９８に示されているアルゴリズムを繰り返し得る。
【０１７８】
[0182]  １つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、１つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、非一時的である有形コンピュータ可読記憶媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コードおよび／またはデータ構造を取り出すために、１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
【０１７９】
[0183]  限定ではなく例として、そのようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク（disk）およびディスク（disc）は、コンパクトディスク（disc）（ＣＤ）、レーザーディスク（登録商標）（disc）、光ディスク（disc）、デジタル多用途ディスク（disc）（ＤＶＤ）、フロッピー（登録商標）ディスク（disk）およびＢｌｕ−ｒａｙ（登録商標）ディスク（disc）を含み、ここで、ディスク（disk）は、通常、データを磁気的に再生し、ディスク（disc）は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
【０１８０】
[0184]  命令は、１つまたは複数のデジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、あるいは他の等価な集積回路またはディスクリート論理回路など、１つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ（processor）」という用語は、上記の構造、または本明細書で説明された技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用ハードウェアおよび／またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素で十分に実装され得る。
【０１８１】
[0185]  本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）またはＩＣのセット（たとえば、チップセット）を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示される技法を実施するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが説明されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明されたように、様々なユニットが、好適なソフトウェアおよび／またはファームウェアとともに、上記で説明された１つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
【０１８２】
[0186]  様々な例が説明された。これらおよび他の例は以下の特許請求の範囲内に入る。
【図１】
2019510319.tif 000003
【図２】
2019510319.tif 000004
【図３Ａ】
2019510319.tif 000005
【図３Ｂ】
2019510319.tif 000006
【図４Ａ】
2019510319.tif 000007
【図４Ｂ】
2019510319.tif 000008
【図５】
2019510319.tif 000009
【図６】
2019510319.tif 000010
【図７Ａ】
2019510319.tif 000011
【図７Ｂ】
2019510319.tif 000012
【手続補正書】
【提出日】平成30年12月7日(2018.12.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
動作点決定の方法であって、前記方法が、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を備える、方法。
【請求項２】
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、請求項１に記載の方法。
【請求項３】
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定することが、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定することを備える、
請求項１に記載の方法。
【請求項４】
前記処理ユニットの前記第２のアクティブ時間を決定することが、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を備える、請求項１に記載の方法。
【請求項５】
前記処理ユニットの前記第２のストール時間を決定することは、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を備える、請求項１に記載の方法。
【請求項６】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１に記載の方法。
【請求項７】
前記処理ユニットが第２の処理ユニットを備え、ここにおいて、
前記第１のアクティブ時間を決定することが、第１の処理ユニットを用いて、前記第１のアクティブ時間を決定することを備え、
前記第１のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第１のストール時間を決定することを備え、
前記第２のアクティブ時間を決定することが、前記第１の処理ユニットを用いて、前記第２のアクティブ時間を決定することを備え、
前記第２のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第２のストール時間を決定することを備え、
前記動作点を調整すべきかどうかを決定することが、前記第１の処理ユニットを用いて、前記動作点を調整すべきかどうかを決定することを備え、
前記動作点を調整することが、前記第１の処理ユニットを用いて、前記動作点を調整することを備える、
請求項１に記載の方法。
【請求項８】
前記第１の処理ユニットが中央処理ユニット（ＣＰＵ）を備え、前記第２の処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、請求項７に記載の方法。
【請求項９】
前記第１の処理ユニットと前記第２の処理ユニットとが同じ処理ユニットである、請求項７に記載の方法。
【請求項１０】
動作点決定のためのデバイスであって、前記デバイスが、
処理ユニットと、
回路と
を備え、前記回路が、
第１の動作点における前記処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記処理ユニットの動作点を、前記第１の動作点から前記第２の動作点に調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行うように構成された、
デバイス。
【請求項１１】
前記回路が、前記第１のアクティブ時間を決定することと、前記第１のストール時間を決定することと、前記第２のアクティブ時間を決定することと、前記第２のストール時間を決定することと、前記動作点を調整すべきかどうかを決定することと、前記動作点を調整することとを行うように前記回路を構成する動的電力マネージャ（ＤＰＭ）の命令を実行するように構成された、請求項１０に記載のデバイス。
【請求項１２】
中央処理ユニット（ＣＰＵ）をさらに備え、ここにおいて、前記ＣＰＵが前記回路を備え、ここにおいて、前記処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、
請求項１０に記載のデバイス。
【請求項１３】
前記処理ユニットが前記回路を含む、請求項１０に記載のデバイス。
【請求項１４】
システムメモリと、
前記処理ユニットを前記システムメモリに相互接続するバスと
をさらに備え、
ここにおいて、前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているときの前記バスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、
請求項１０に記載のデバイス。
【請求項１５】
前記回路が、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
を行うように構成され、
ここにおいて、前記動作点を調整すべきかどうかを決定するために、前記回路が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するように構成された、
請求項１０に記載のデバイス。
【請求項１６】
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記回路が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行うように構成された、請求項１０に記載のデバイス。
【請求項１７】
前記処理ユニットの前記第２のストール時間を決定するために、前記回路は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行うように構成された、請求項１０に記載のデバイス。
【請求項１８】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１０に記載のデバイス。
【請求項１９】
動作点決定のためのデバイスであって、前記デバイスが、
第１の動作点における処理ユニットの第１のアクティブ時間を決定するための手段と、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定するための手段と、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定するための手段と、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定するための手段と、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定するための手段と、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整するための手段と
を備える、デバイス。
【請求項２０】
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、請求項１９に記載のデバイス。
【請求項２１】
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定するための手段と、
前記ビジー割合をしきい値と比較するための手段と
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定するための前記手段が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するための手段を備える、
請求項１９に記載のデバイス。
【請求項２２】
前記処理ユニットの前記第２のアクティブ時間を決定するための前記手段が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定するための手段
を備える、請求項１９に記載のデバイス。
【請求項２３】
前記処理ユニットの前記第２のストール時間を決定するための前記手段は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定するための手段
を備える、請求項１９に記載のデバイス。
【請求項２４】
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、請求項１９に記載のデバイス。
【請求項２５】
実行されたとき、１つまたは複数のプロセッサに、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行わせる命令を記憶する非一時的コンピュータ可読記憶媒体。
【請求項２６】
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記命令が、前記１つまたは複数のプロセッサに、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行わせる、請求項２５に記載の非一時的コンピュータ可読記憶媒体。
【請求項２７】
前記処理ユニットの前記第２のストール時間を決定するために、前記命令は、前記１つまたは複数のプロセッサに、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行わせる、請求項２５に記載の非一時的コンピュータ可読記憶媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１８２
【補正方法】変更
【補正の内容】
【０１８２】
[0186]  様々な例が説明された。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
動作点決定の方法であって、前記方法が、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を備える、方法。
［Ｃ２］
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、Ｃ１に記載の方法。
［Ｃ３］
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定することが、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定することを備える、
Ｃ１に記載の方法。
［Ｃ４］
前記処理ユニットの前記第２のアクティブ時間を決定することが、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を備える、Ｃ１に記載の方法。
［Ｃ５］
前記処理ユニットの前記第２のストール時間を決定することは、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を備える、Ｃ１に記載の方法。
［Ｃ６］
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、Ｃ１に記載の方法。
［Ｃ７］
前記処理ユニットが第２の処理ユニットを備え、ここにおいて、
前記第１のアクティブ時間を決定することが、第１の処理ユニットを用いて、前記第１のアクティブ時間を決定することを備え、
前記第１のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第１のストール時間を決定することを備え、
前記第２のアクティブ時間を決定することが、前記第１の処理ユニットを用いて、前記第２のアクティブ時間を決定することを備え、
前記第２のストール時間を決定することが、前記第１の処理ユニットを用いて、前記第２のストール時間を決定することを備え、
前記動作点を調整すべきかどうかを決定することが、前記第１の処理ユニットを用いて、前記動作点を調整すべきかどうかを決定することを備え、
前記動作点を調整することが、前記第１の処理ユニットを用いて、前記動作点を調整することを備える、
Ｃ１に記載の方法。
［Ｃ８］
前記第１の処理ユニットが中央処理ユニット（ＣＰＵ）を備え、前記第２の処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、Ｃ７に記載の方法。
［Ｃ９］
前記第１の処理ユニットと前記第２の処理ユニットとが同じ処理ユニットである、Ｃ７に記載の方法。
［Ｃ１０］
動作点決定のためのデバイスであって、前記デバイスが、
処理ユニットと、
回路と
を備え、前記回路が、
第１の動作点における前記処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記処理ユニットの動作点を、前記第１の動作点から前記第２の動作点に調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行うように構成された、
デバイス。
［Ｃ１１］
前記回路が、前記第１のアクティブ時間を決定することと、前記第１のストール時間を決定することと、前記第２のアクティブ時間を決定することと、前記第２のストール時間を決定することと、前記動作点を調整すべきかどうかを決定することと、前記動作点を調整することとを行うように前記回路を構成する動的電力マネージャ（ＤＰＭ）の命令を実行するように構成された、Ｃ１０に記載のデバイス。
［Ｃ１２］
中央処理ユニット（ＣＰＵ）をさらに備え、ここにおいて、前記ＣＰＵが前記回路を備え、ここにおいて、前記処理ユニットが、グラフィックス処理ユニット（ＧＰＵ）またはデジタル信号プロセッサ（ＤＳＰ）のうちの１つを備える、
Ｃ１０に記載のデバイス。
［Ｃ１３］
前記処理ユニットが前記回路を含む、Ｃ１０に記載のデバイス。
［Ｃ１４］
システムメモリと、
前記処理ユニットを前記システムメモリに相互接続するバスと
をさらに備え、
ここにおいて、前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているときの前記バスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、
Ｃ１０に記載のデバイス。
［Ｃ１５］
前記回路が、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
を行うように構成され、
ここにおいて、前記動作点を調整すべきかどうかを決定するために、前記回路が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するように構成された、
Ｃ１０に記載のデバイス。
［Ｃ１６］
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記回路が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行うように構成された、Ｃ１０に記載のデバイス。
［Ｃ１７］
前記処理ユニットの前記第２のストール時間を決定するために、前記回路は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行うように構成された、Ｃ１０に記載のデバイス。
［Ｃ１８］
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、Ｃ１０に記載のデバイス。
［Ｃ１９］
動作点決定のためのデバイスであって、前記デバイスが、
第１の動作点における処理ユニットの第１のアクティブ時間を決定するための手段と、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定するための手段と、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定するための手段と、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定するための手段と、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定するための手段と、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整するための手段と
を備える、デバイス。
［Ｃ２０］
前記第１の動作点が第１の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第１の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第１のバス帯域幅であり、ここにおいて、前記第２の動作点が、第２の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第２のバス帯域幅を識別し、ここにおいて、
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第１のバス帯域幅と前記第２のバス帯域幅とが同じであるか、
前記第１の動作周波数と前記第２の動作周波数とが同じであり、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さく、異なるか、または
前記第２の動作周波数が前記第１の動作周波数よりも小さく、前記第２のバス帯域幅が前記第１のバス帯域幅よりも小さいか、
のうちの１つである、Ｃ１９に記載のデバイス。
［Ｃ２１］
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、ビジー割合を決定するための手段と、
前記ビジー割合をしきい値と比較するための手段と
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定するための前記手段が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するための手段を備える、
Ｃ１９に記載のデバイス。
［Ｃ２２］
前記処理ユニットの前記第２のアクティブ時間を決定するための前記手段が、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定するための手段
を備える、Ｃ１９に記載のデバイス。
［Ｃ２３］
前記処理ユニットの前記第２のストール時間を決定するための前記手段は、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定するための手段
を備える、Ｃ１９に記載のデバイス。
［Ｃ２４］
前記第１のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第１のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、Ｃ１９に記載のデバイス。
［Ｃ２５］
実行されたとき、１つまたは複数のプロセッサに、
第１の動作点における処理ユニットの第１のアクティブ時間を決定することと、
前記第１の動作点における前記処理ユニットの第１のストール時間を決定することと、
第２の動作点における前記第１のアクティブ時間に基づいて、前記処理ユニットの第２のアクティブ時間を決定することと、
前記第２の動作点における前記第１のストール時間に基づいて、前記処理ユニットの第２のストール時間を決定することと、
前記第２のアクティブ時間と前記第２のストール時間とに基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第１の動作点から前記第２の動作点に、前記処理ユニットの前記動作点を調整することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
［Ｃ２６］
前記処理ユニットの前記第２のアクティブ時間を決定するために、前記命令が、前記１つまたは複数のプロセッサに、
前記第１のアクティブ時間、および前記第１の動作点のための前記処理ユニットの動作周波数と、前記第２の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第２のアクティブ時間を決定すること
を行わせる、Ｃ２５に記載のコンピュータ可読記憶媒体。
［Ｃ２７］
前記処理ユニットの前記第２のストール時間を決定するために、前記命令は、前記１つまたは複数のプロセッサに、
前記第１のストール時間、および前記処理ユニットが前記第１の動作点において動作しているときの有効バス帯域幅と、前記第２の動作点のためのバス帯域幅との比に基づいて、前記第２のストール時間を決定すること
を行わせる、Ｃ２５に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2019510319.tif 000013
2019510319.tif 000014
2019510319.tif 000015