[0018] プロセッサがデータをどのくらい速く処理することができるかと、プロセッサがどのくらいの電力を消費するかとに影響を及ぼすことがある2つの要因は、プロセッサの動作周波数とバス帯域幅とを含む。バス帯域幅は、どのくらいのデータが時間単位ごとにバス(bus)を介して進むことができるかを示す。バスは、様々なユニット(たとえば、(1つまたは複数の)プロセッサ、システムメモリ(system memory)、ディスプレイなど)を互いに相互接続(interconnect)する。バスのための別の用語はファブリック(fabric)であり、バス帯域幅のための別の用語はファブリック帯域幅(fabric bandwidth)である。
[0019] 動作周波数は、プロセッサが時間単位ごとに処理することができるデータの量を定義する。より詳細に説明されるように、動的電力マネージャ(DPM)が、プロセッサの周波数およびバス帯域幅を決定するために、本開示で説明される例示的な技法を実施するように構成され得る。DPMは、ハードウェアまたはソフトウェアであり得、それの動作周波数が制御されているデバイスの一部であり得るが、それの動作周波数が制御されているデバイスの外部にあり得る。
[0020] 本開示で説明される技法は、概して、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、モデム中で使用されるデジタル信号プロセッサ(DSP)、オーディオ、またはセンサーサブシステムなど、多種多様なプロセッサに適用可能である。単に説明しやすいように、例はGPUに関して説明される。
[0021] CPUの動作周波数が制御されている場合、DPMは、CPUの一部(たとえば、動的クロックおよび電圧スケーリング(DCVS:dynamic clock and voltage scaling)モジュール)であり得る。DCVSモジュールは、様々な構成要素(たとえば、クロック生成器(clock generator)を含む回路)の電圧レベルを制御し、これは、CPUの動作周波数を制御する(たとえば、クロック生成器によって生成されたクロック信号の周波数を制御する)。GPUの動作周波数が制御されている場合、DPMはGPUの一部(たとえば、GPUにおいてコマンド処理ユニット上で制御プログラムとして実行するGPU DCVS)であり得る。いくつかの例では、GPUの動作周波数は制御され得るが、DPMはCPUの一部(たとえば、CPU上で動作するGPU DCVSドライバ)であり得る。いくつかの例では、DPMは、外部デバイスの一部(たとえば、比較的独立した小さいプロセッサ上のハードウェアまたはソフトウェア)であり得る。そのような例では、DPMは、それの動作周波数が制御されているデバイスの動作周波数を制御すべきかどうかを決定するために、周期的に起動し得る。いずれの場合も、DPMは、デバイスの動作周波数をスケーリングし、バス帯域幅に投票(vote)する。
[0022] より詳細に説明されるように、本開示は、電力を節約するための例示的な技法について説明する。概して、動作周波数または帯域幅(operating frequency or bandwidth)が低いほど、電力消費は低くなる。したがって、これらの2つの要因は、性能(performance)と電力(power)の両方に影響を及ぼす。例示的な技法は、システムを、最低必要な動作周波数および帯域幅に設定し、「最低必要な(lowest necessary)」は、それが、性能劣化なしに最大可能な電力節約に近づくことができることを意味する。
[0023] たとえば、DPMを介した、ホストプロセッサ(たとえば、CPU)が、GPUの「ビジー時間(busy time)」に基づいて、GPUのバス帯域幅および動作周波数をスケーリングする(scale)ように構成され得、ここで、GPUビジー時間は、GPUアクティブ時間+GPUストール時間に等しい。GPUアクティブ時間は、GPUが、それ自体のクロック領域においていくつかの算術、論理、制御フロー、またはローカルキャッシュ/メモリ動作を実施しており、異なるクロック領域における動作、たとえば、システムメモリアクセス動作を待っていない量に等しい。クロック領域は、(たとえば、同じチップ上のまたはオフチップの)回路の他のブロックの周波数とは異なり得る単一のクロック周波数において動作する回路のブロックである。たとえば、CPUとそれのキャッシュとがあるクロック領域中にあり、GPUとそれのキャッシュとが別のクロック領域中にあり、システムメモリがまた別のクロック領域中にあるような複数のクロック領域があり得る。
[0024] GPUストール時間は、GPUが、別のクロック領域(たとえば、異なるクロック領域において動作するハードウェアユニット)からのデータを待つ間ストールされる時間の量(amount of time)を示す。一例として、GPUのローカルキャッシュは、GPUの回路と同じクロック領域中にあり得る。GPUは、最初に、ローカルキャッシュからデータを取り出すことを試み、利用不可能である場合(たとえば、キャッシュミス)、システムメモリからデータを読み取り得る。しかしながら、GPUは、システムメモリからのデータを待ってストールされ得、この遅延はGPUストール時間の一部である。
[0025] 再び、例は、CPUがGPUの動作周波数を決定することに関して説明される(たとえば、DPMは、CPU上で実行するGPU DCVSドライバである)。しかしながら、例示的な技法は、上記で説明されたように、他の場合に適用可能である。また、例は、時間(たとえば、アクティブ時間およびストール時間)に関して説明されるが、割合(percentage)(たとえば、アクティブ時間割合およびストール時間割合)の分析は、本技法を実装するための別のやり方であり得る。本開示では、「アクティブ時間(active time)」という用語は、一般的に、アクティブ時間が時間の測度(measure)(たとえば、時間の量)である場合、およびアクティブ時間が時間の比(ratio)(たとえば、割合)である場合を指すために使用される。同様に、「ストール時間(stall time)」という用語は、一般的に、ストール時間が時間の測度(たとえば、時間の量)である場合、およびストール時間が時間の比(たとえば、割合)である場合を指すために使用される。
[0026] GPUビジー時間から、ホストプロセッサは、GPUビジー割合(たとえば、GPUビジー時間と時間期間(period of time)との比)を決定し得る。GPUビジー割合がしきい値(threshold)よりも大きくなる場合、ホストプロセッサは、GPUビジー割合がしきい値よりも低くなるように、バス帯域幅、GPU動作周波数、またはその両方を増加させ得る。逆に、GPUビジー割合がしきい値(同じしきい値または異なるしきい値)を下回る場合、ホストプロセッサは、バス帯域幅、GPU動作周波数またはその両方が低減され得るかどうかを決定し得る。このようにして、ホストプロセッサは、DPMを介して、システム(たとえば、ホストプロセッサ、GPU、および相互接続バス)を、最低必要な電力レベルにおいて動作するように保つために、バス帯域幅、GPU動作周波数、またはその両方を調整することができる。
[0027] しかしながら、バス帯域幅、GPU動作周波数、またはその両方を調整すべきかどうかを決定するためにGPUビジー時間にのみ依拠することは、調整が可能であるときにバス帯域幅、GPU動作周波数、またはその両方に対する調整を行わないことになり得る。たとえば、いくつかの技法は、GPUビジー時間がGPU動作周波数に反比例すると仮定する。そのような場合、ホストプロセッサは、ホストプロセッサがGPUストール時間および/またはGPUアクティブ時間を別々に考慮することができなかったので、GPU動作周波数がどのようになるべきであるかを過大評価し得る。
[0028] 例示的な例として、ホストプロセッサが、GPU動作周波数の低減の後に、GPUビジー割合が90%よりも多くなると決定した場合、ホストプロセッサは、動作周波数を低減すべきでないと仮定する。この例では、GPUは、200MHzにおいて動作しており、50%ビジーであると仮定する。GPUビジー時間がGPU動作周波数に反比例するという仮定のために、ホストプロセッサは、動作周波数が100MHzに低減される場合、GPUが100%ビジーになると決定し得る。100%ビジーは90%ビジーよりも大きいので、ホストプロセッサは、GPUの動作周波数をダウンスケール(downscale)しないであろう。
[0029] しかしながら、実際には、50%ビジー時間は、実際は、GPUアクティブ時間について30%であり、GPUストール時間について20%であり得る。1次近似として、GPUの動作周波数が100MHzに低減された場合、GPUアクティブ時間は60%まで2倍になることになり、GPUストール時間は、20%のままであることになる(この例では、GPUストール時間はキャッシュミスにより、したがって、GPU動作周波数は、データがシステムメモリにまたはシステムメモリからどのくらい速く転送されるかに対する直接的影響を有しないであろう)。この例では、総ビジー割合は80%(たとえば、60%+20%)である。80%は90%よりも小さいので、ホストプロセッサは、GPUの動作周波数を100MHzにダウンスケールすることになり、性能ペナルティ(performance penalty)がないことになる。同じ分析がバス帯域幅の場合に適用され得る。
[0030] 本開示で説明される技法は、GPUビジー割合が所与のバス帯域幅およびGPU動作周波数についてどのようになるかを決定することに基づく。本開示では、「動作点」(OPP:operating point)は、GPU動作周波数(GOF:GPU operating frequency)と、バス帯域幅(BB:bus bandwidth)との特定の組合せを指す。たとえば、OPP00=(GOF0,BB0)であり、OPP01=(GOF0,BB1)であり、OPP10=(GOF1,BB0)であり、以下同様であり、ここで、GOF0とGOF1とは異なるGPU動作周波数であり、BB0とBB1とは異なるバス帯域幅である。
[0031] いくつかの例では、DPMを介した、ホストプロセッサは、(たとえば、以下で説明されるように、GPUに組み込まれたハードウェア性能カウンタ(hardware performance counter)を用いて)第1のOPPにおけるGPUアクティブ時間およびGPUストール時間を決定し、第2のOPPにおけるGPUアクティブ時間およびGPUストール時間を決定するためにこの情報を使用する。いくつかの例では、ハードウェア性能カウンタは、GPUがアクティブである時間の量、およびGPUがビジーである時間の量をカウントし、GPUストール時間を決定するために、GPUビジー時間からGPUアクティブ時間を減算し得る。いくつかの例では、GPUビジー時間を決定し、GPUストール時間を決定するためにGPUアクティブ時間を減算するのではなく、プロセッサストールサイクルカウンタ(processor stall cycle counter)を使用することが可能であり得る。ホストプロセッサは、第2のOPPにおける決定されたGPUアクティブ時間およびGPUストール時間から第2のOPPにおけるGPUビジー時間を決定する。第2のOPPにおけるGPUビジー時間を決定するための式は、以下の通りであり得る。
OPP00=GOF0およびFB0をもつ現在の動作点
TG1=(カウンタに基づく)OPP00におけるプロセッサアクティブ時間
TM1=(同じくカウンタから測定された)OPP00におけるプロセッサストール時間。
OPP11=GOF1およびFB1をもつ動作点
TG2=OPP11におけるプロセッサアクティブ時間、およびTG1*(GOF0/GOF2)に等しい
TM2=OPP11におけるプロセッサストール時間、およびTM1*(FB0/FB1)に等しい
OPP11におけるプロセッサビジー時間=TG2+TM2。
[0032] 上記では、FB0は、動作点OPP00に関連するバス帯域幅に対応する。しかしながら、いくつかの例では、FB0を使用するのではなく、ホストプロセッサは、インターフェースが、その間にデータを転送するのにビジーである時間期間で除算された、GPUバスインターフェースを通して転送されるデータの総量として定義される、有効バス帯域幅(effective bus bandwidth)を使用し得る。ホストプロセッサは、バス帯域幅がどのようになるべきであるかに関して投票するので、有効バス帯域幅は、ホストプロセッサが決定したものとは異なることが可能である。
[0033] ホストプロセッサは、期間時間にわたるプロセッサ(たとえば、CPUまたはGPU)バスインターフェースを通るデータの量を決定することによって、有効バス帯域幅を測定し得る。OPP00の現在の動作点に設定するために、ホストプロセッサは、GPUの周波数をGOF0に設定し、バス帯域幅をFB0に設定するように投票した。たとえば、バス帯域幅を異なるレベルに設定するという決定が行われた場合、有効バス帯域幅が、結局FB0とは異なる何かになることが可能であり得る。そのような場合、ホストプロセッサは、FB0値の代わりに有効バス帯域幅を使用し得る。
[0034] GPUビジー時間から、ホストプロセッサは、GPUビジー割合を決定し、GPUビジー割合がしきい値よりも小さいかどうかを決定し得る。GPUビジー割合がしきい値よりも小さい場合、GPUは、GPU動作周波数および/またはバス帯域幅を減少させ(たとえば、OPP00からOPP11に移動し)得る。
[0035] 図1は、本開示の技法を実装するために使用され得る例示的なコンピューティングデバイス2を示すブロック図である。コンピューティングデバイス2は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、ワイヤレス通信デバイス(たとえば、携帯電話、セルラー電話、衛星電話、および/または携帯電話ハンドセットなど)、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA)などのハンドヘルドデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス、メインフレームコンピュータ、あるいはグラフィカルデータを処理および/または表示する任意の他のタイプのデバイスを備え得る。
[0036] 図1の例に示されているように、コンピューティングデバイス2は、ユーザ入力インターフェース4と、CPU6と、メモリコントローラ8と、システムメモリ10と、グラフィックス処理ユニット(GPU)12と、ローカルメモリ14と、ディスプレイインターフェース16と、ディスプレイ18と、バス20とを含む。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12およびディスプレイインターフェース16は、バス20を使用して互いと通信し得る。バス20は、第3世代バス(たとえば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(たとえばアドバンストグラフィックスポートバス、周辺構成要素相互接続(PCI)エクスプレスバス、またはアドバンストエクステンシブルインターフェース(AXI:Advanced eXentisible Interface)バス)、あるいは別のタイプのバスまたはデバイスの相互接続などの様々なバス構造のいずれかであり得る。図1に示されている異なる構成要素間のバスおよび通信インターフェースの特定の構成は例にすぎず、コンピューティングデバイスの他の構成および/あるいは同じまたは異なる構成要素をもつ他のグラフィックス処理システムが、本開示の技法を実装するために使用され得ることに留意されたい。
[0037] CPU6は、コンピューティングデバイス2の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、CPU6に1つまたは複数のソフトウェアアプリケーションを実行させるためにコンピューティングデバイス2に入力を与え得る。CPU6上で実行するソフトウェアアプリケーションは、たとえば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合されたキーボード、マウス、マイクロフォン、タッチパッド、または別の入力デバイスなどの1つまたは複数の入力デバイス(図示せず)を介して、コンピューティングデバイス2に入力を与え得る。
[0038] CPU6上で実行するソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを行わせるようにCPU6に命令する1つまたは複数のグラフィックスレンダリング命令(graphics rendering instruction)を含み得る。いくつかの例では、ソフトウェア命令は、たとえば、オープングラフィックスライブラリ(OpenGL(登録商標):Open Graphics Library)アプリケーションプログラミングインターフェース(API)、オープングラフィックスライブラリ組込みシステムズ(OpenGL ES:Open Graphics Library Embedded Systems)API、OpenCL API、Direct3D API、X3D API、RenderMan API、WebGL API、あるいは任意の他の公開またはプロプライエタリ規格グラフィックスAPIなどのグラフィックスAPIに準拠し得る。本技法は、特定のAPIを必要とすることに限定されると見なされるべきではない。
[0039] 上記の例はグラフィックス処理に関して説明されたが、本開示で説明される技法はそのように限定されない。グラフィックス処理に関して説明される例は、理解を支援するために与えられる。本技法は、何らかの他のデジタルまたはアナログ信号プロセッサによって実施(perform)される処理など、他の処理にも適用可能である。
[0040] グラフィックスレンダリング命令を処理するために、CPU6は、GPU12にグラフィックスデータのレンダリングの一部または全部を実施させるために、1つまたは複数のグラフィックスレンダリングコマンドをGPU12に発行し得る。いくつかの例では、レンダリングされるべきグラフィックスデータは、グラフィックスプリミティブのリスト、たとえば、点、線、三角形、四角形、三角形ストリップなどを含み得る。
[0041] メモリコントローラ8は、システムメモリ10に入るおよびそれから出るデータの転送を可能にする。たとえば、メモリコントローラ8は、コンピューティングデバイス2中の構成要素にメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、メモリ10に関するそのようなコマンドをサービスし得る。メモリコントローラ8はシステムメモリ10に通信可能に結合される。メモリコントローラ8は、CPU6とシステムメモリ10の両方とは別個である処理モジュールであるものとして図1の例示的なコンピューティングデバイス2中に示されているが、他の例では、メモリコントローラ8の機能の一部または全部は、CPU6とシステムメモリ10の一方または両方の上で実装され得る。
[0042] システムメモリ10は、CPU6が実行するためにアクセス可能であるプログラムモジュールおよび/または命令、ならびに/あるいはCPU6上で実行するプログラムによる使用のためのデータを記憶し得る。たとえば、システムメモリ10は、ユーザアプリケーションと、アプリケーションに関連するグラフィックスデータとを記憶し得る。システムメモリ10は、コンピューティングデバイス2の他の構成要素による使用のための情報、および/または他の構成要素によって生成される情報をさらに記憶し得る。たとえば、システムメモリ10は、GPU12のためのデバイスメモリとして働き得、GPU12によってそれに対して演算されるべきデータ、ならびにGPU12によって実施される演算から生じるデータを記憶し得る。たとえば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファなどの任意の組合せを記憶し得る。さらに、システムメモリ10は、GPU12による処理のためのコマンドストリームを記憶し得る。システムメモリ10は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、読取り専用メモリ(ROM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリまたはストレージデバイスを含み得る。
[0043] いくつかの態様では、システムメモリ10は、本開示ではCPU6およびGPU12に起因する機能をCPU6および/またはGPU12に実施させる命令を含み得る。したがって、システムメモリ10は、実行されたとき、1つまたは複数のプロセッサ(たとえば、CPU6およびGPU12)に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であり得る。
[0044] いくつかの例では、システムメモリ10は非一時的記憶媒体(non-transitory storage medium)である。「非一時的(non-transitory)」という用語は、記憶媒体が、搬送波または伝搬信号では実施されないことを示す。ただし、「非一時的」という用語は、システムメモリ10が非可動であること、またはそれのコンテンツが静的であることを意味すると解釈されるべきではない。一例として、システムメモリ10は、デバイス2から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ10と実質的に同様のメモリがデバイス2中に挿入され得る。いくつかの例では、非一時的記憶媒体は、時間とともに変化し得るデータを(たとえば、RAMに)記憶し得る。
[0045] GPU12は、1つまたは複数のグラフィックスプリミティブをディスプレイ18にレンダリングするためにグラフィックス演算を実施するように構成され得る。したがって、CPU6上で実行しているソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、ディスプレイ18にレンダリングするためのグラフィックスコマンドおよびグラフィックスデータをGPU12に与え得る。グラフィックスコマンドは、たとえば、描画呼出しなどの描画コマンド、GPU状態プログラミングコマンド、メモリ転送コマンド、汎用コンピューティングコマンド、カーネル実行コマンドなどを含み得る。いくつかの例では、CPU6は、コマンドとグラフィックスデータとを、GPU12によってアクセスされ得るメモリ10に書き込むことによって、コマンドとグラフィックスデータとをGPU12に与え得る。いくつかの例では、GPU12は、CPU6上で実行しているアプリケーションのための汎用コンピューティングを実施するようにさらに構成され得る。
[0046] GPU12は、いくつかの事例では、ベクトル演算の、CPU6よりも効率的な処理を行う高度並列構造(highly-parallel structure)を用いて構築され得る。たとえば、GPU12は、複数の頂点またはピクセル上で、並列様式で動作するように構成された、算術論理ユニット(ALU:arithmetic logic unit)、初等関数ユニット(EFU:elementary function unit)、および他のそのような回路など、ハードウェア回路を含む複数の処理要素を含み得る。GPU12の高度並列性質(highly parallel nature)は、いくつかの事例では、GPU12が、CPU6を使用して直接ディスプレイ18にシーンを描画するよりも速く、グラフィックス画像(たとえば、GUI、ならびに2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に描画することを可能にし得る。さらに、GPU12の高度並列性質は、GPU12が、CPU6よりも速く、汎用コンピューティングアプリケーションのためのいくつかのタイプのベクトルおよび行列演算を処理することを可能にし得る。
[0047] GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードに組み込まれ得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボード中のポート中に設置されたグラフィックスカード上に存在し得るか、または場合によっては、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる事例では、GPU12は、システムオンチップ(SoC)を形成するCPU6と同じマイクロチップ上に配置され得る。GPU12およびCPU6は、プログラマブル回路を含む、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタル信号プロセッサ(DSP)、あるいは他の等価な集積またはディスクリート論理回路など、1つまたは複数のプロセッサを含み得る。
[0048] GPU12はローカルメモリ14に直接結合され得る。したがって、GPU12は、必ずしもバス20を使用せずに、ローカルメモリ14からデータを読み取り、ローカルメモリ14にデータを書き込み得る。言い換えれば、GPU12は、オフチップメモリの代わりに、ローカルストレージを使用してデータをローカルに処理し得る。これは、GPU12が、重いバストラフィックを経験し得る、バス20を介したデータの読取りおよび書込みを行う必要をなくすことによって、GPU12がより効率的な様式で動作することを可能にする。しかしながら、いくつかの事例では、GPU12は、別個のキャッシュを含まないことがあるが、代わりに、バス20を介してシステムメモリ10を利用し得る。ローカルメモリ14は、たとえば、ランダムアクセスメモリ(RAM)、スタティックRAM(SRAM)、ダイナミックRAM(DRAM)、消去可能プログラマブルROM(EPROM)、電気的消去可能プログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体または光記憶媒体など、1つまたは複数の揮発性または不揮発性メモリあるいはストレージデバイスを含み得る。
[0049] CPU6および/またはGPU12は、レンダリングされた画像データを、システムメモリ10内で割り振られたフレームバッファに記憶し得る。ディスプレイインターフェース16は、フレームバッファからデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成し得る。いくつかの例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値を、ディスプレイ18によって消費可能なアナログ信号に変換するように構成されたデジタルアナログ変換器(DAC)を含み得る。他の例では、ディスプレイインターフェース16は、処理のために、デジタル値をディスプレイ18に直接受け渡し得る。ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、発光ダイオード(LED)アレイ、陰極線管(CRT)ディスプレイ、電子ペーパー、表面伝導電子放出ディスプレイ(SED)、レーザーテレビジョンディスプレイ、ナノ結晶ディスプレイまたは別のタイプのディスプレイユニットを含み得る。ディスプレイ18は、コンピューティングデバイス2内に組み込まれ得る。たとえば、ディスプレイ18は、携帯電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアロンデバイスであり得る。たとえば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
[0050] 説明されるように、CPU6は、超並列演算を必要とするタスクなど、グラフィックス処理をGPU12にオフロードし得る。一例として、グラフィックス処理は超並列演算を必要とし、CPU6は、そのようなグラフィックス処理タスクをGPU12にオフロードし得る。しかしながら、行列演算などの他の演算も、GPU12の並列処理能力から恩恵を受け得る。これらの例では、CPU6は、GPU12に非グラフィックス関係演算を実施させるために、GPU12の並列処理能力を活用し得る。
[0051] 本開示で説明されるいくつかの例示的な技法では、第1の処理ユニット(たとえば、CPU6)は、いくつかのタスクを第2の処理ユニット(たとえば、GPU12)にオフロードする。タスクをオフロードするために、CPU6は、GPU12によって実行されるべきコマンドと、コマンドのオペランドであるデータ(たとえば、コマンドがそれに作用するデータ)とをシステムメモリ10におよび/またはGPU12に直接出力する。GPU12は、コマンドおよびデータをCPU6から直接および/またはシステムメモリ10から受信し、コマンドを実行する。いくつかの例では、GPU12によって実行されるべきコマンドと、コマンドのためのデータオペランドとをシステムメモリ10に記憶するのではなく、CPU6は、GPU12とCPU6とを含むICにローカルであり、CPU6とGPU12の両方によって共有される、ローカルメモリ(たとえば、データまたは命令キャッシュ)に、コマンドおよびデータオペランドを記憶し得る。概して、本開示で説明される技法は、CPU6がGPU12上での実行のためにコマンドを利用可能にし得る様々なやり方に適用可能であり、本技法は、上記の例に限定されない。
[0052] GPU12がコマンドを実行するレートは、(GPU12のクロックレートまたは動作周波数とも呼ばれる)クロック信号の周波数によって設定される。たとえば、GPU12は、クロック信号の立上りエッジまたは立下りエッジごとにコマンドを実行するか、あるいはクロック信号の立上りエッジごとにあるコマンドを実行し、立下りエッジごとに別のコマンドを実行し得る。したがって、クロック信号の立上りエッジまたは立下りエッジが時間期間内にどれくらいの頻度で発生するか(たとえば、クロック信号の周波数)が、GPU12が時間期間内にいくつのコマンドを実行するかを設定する。
[0053] いくつかの場合には、GPU12がコマンドを実行している間、GPU12は、バス20を介して、データをシステムメモリ10から読み取るかまたはデータをシステムメモリ10に書き込む必要があり得る。たとえば、キャッシュミスがある(たとえば、データまたは命令が、GPU12のデータキャッシュまたは命令キャッシュ中で利用可能でない)場合、GPU12は、バス20を介してデータをシステムメモリ10から読み取り得る。GPU12の命令キャッシュおよびデータキャッシュは、ローカルメモリ14とは異なり得る。たとえば、GPU12は、一時的に中間データを記憶するためにローカルメモリ14を使用し得、データキャッシュおよび命令キャッシュは、それぞれ、オペランドおよび命令を記憶し得る。いくつかの場合には、ローカルメモリ14が、命令キャッシュおよびデータキャッシュを含むことが可能であり得る。
[0054] データがシステムメモリ10から利用可能になるか、またはデータがシステムメモリ10に書き込まれるまで、GPU12がどのくらいの時間の間待つか(GPUストール時間とも呼ばれる)は、バス20のバス帯域幅の関数である。バス帯域幅は、システムメモリ10の動作周波数の関数であり得る(たとえば、システムメモリ10の高速動作周波数の場合、より多くのデータがバス20上に置かれ得、システムメモリ10の低速動作周波数の場合、より少ないデータがバス20上に置かれ得る)。したがって、GPU12が時間期間内に実行することができるコマンドの量も、バス帯域幅の関数である。
[0055] CPU6が、GPU12によって実行されるべきコマンドをメモリ(たとえば、システムメモリ10または命令キャッシュ)に記憶する例など、いくつかの例では、CPU6は、GPU12が実行すべきであるコマンドのグループを識別するメモリアドレス情報を出力し得る。GPU12が実行すべきであるコマンドのグループは、サブミットされたコマンドと呼ばれる。CPU6がコマンドをGPU12に直接出力する例では、サブミットされたコマンドは、CPU6がGPU12に直ちに実行するように命令するコマンドを含む。
[0056] CPU6がコマンドをグループ化し得る様々なやり方があり得る。一例として、コマンドのグループは、1つのフレームをレンダリングするためにGPU12によって必要とされるすべてのコマンドを含む。別の例として、コマンドのグループは、GPU12が他のコマンドに切り替えることなしに一緒に実行されるべきであるいわゆる「アトミックコマンド(atomic command)」であり得る。GPU12にサブミットされるコマンドをグループ化するための他のやり方が可能であり得、本開示は、上記の例示的な技法に限定されない。
[0057] いくつかの場合には、GPU12は、設定された時間期間内に、サブミットされたコマンドを実行する必要があり得る。たとえば、デバイス2はハンドヘルドデバイスであり得、ここで、ディスプレイ18は、ユーザインターフェースとしても機能する。一例として、(ジャンクなし(jank-free)とも呼ばれる)スタッターなし(stutter free)ユーザインターフェースを達成するために、GPU12は、毎秒60フレームのフレームレートを仮定すると、約16ミリ秒(ms)内に(他の時間期間が可能である)、サブミットされたコマンドの実行を完了する必要があり得る。この16ms時間期間は、「vsync」ウィンドウと呼ばれることがあり、GPU12がvsyncウィンドウ内に、サブミットされたコマンドの実行を完了しない場合、GPU12の実行パイプライン中の「バブル(bubble)」があり、ジャンク充満(jank filled)ユーザインターフェースを生じ得る。
[0058] GPU12の実行パイプライン中の「バブル」は、コマンドを実行しているGPU12のユニットが、何らかの中間データを生成するためにコマンドの実行を部分的に完了したが、中間データを受信すべきであるGPU12のユニットが、まだ、他のコマンドを実行するのにビジーであり、中間データが構築し続けることを引き起こす状態を指す。たとえば、GPU12の実行パイプラインは、各々、連続して(すなわち、パイプラインにおいて)次の回路によってさらに処理される中間データを生成する、一連の相互接続された回路を含む。いくつかの場合には、GPU12の実行パイプラインのアップストリーム回路は、GPU12の実行パイプラインのダウンストリーム回路が消費することができるよりも高速に中間データを生成しており、いわゆるバブルを作成する。
[0059] CPU6がサブミットするコマンドの量、およびCPU6がいつコマンドをサブミットするかのタイミングは、必ずしも一定である必要はない。GPU12が実行すべきであるコマンドの流入またはコマンドの数の低減があり得る。たとえば、CPU6上で実行するアプリケーション(たとえば、サードパーティアプリケーション)は、GPU12によって実行されるべきコマンドの数を増加または減少させ得るか、またはCPU6上で実行するオペレーティングシステム(たとえば、フレームワーク自体)が、GPU12によって実行されるべきコマンドの数を増加または減少させ得る。別の例として、CPU6は、時間0においてコマンドの第1のグループをサブミットし、時間1においてコマンドの第2のグループをサブミットし、時間2においてコマンドの第3のグループをサブミットし得る。しかしながら、コマンドの第1のグループのサブミッションとコマンドの第2のグループのサブミッションとの間の時間間隔は、コマンドの第2のグループのサブミッションとコマンドの第3のグループのサブミッションとの間の時間間隔とは異なり得る。
[0060] GPU12が期間(たとえば、16ms)内に実行すべきであるコマンドの量は変化し得るので、GPU12のクロック信号の周波数(すなわち、GPU12の動作周波数)は、GPU12が、電力消費を不必要に増加させることなしに、設定された時間期間内にコマンドを実行することが可能であるように、増加または減少する必要があり得る。GPU12が、設定された時間期間内に実行する必要があるコマンドの量は、その時間期間内に実行される必要があるコマンドのグループ中により多いまたはより少ないコマンドがあるので、設定された時間期間内に実行される必要があるコマンドのグループの数の増加または減少があるので、またはその2つの組合せで、変化し得る。
[0061] また、コマンドを実行するために、GPU12は、バス20を介してデータをシステムメモリ10から取り出すかまたはデータをシステムメモリ10に出力する必要があり得る。たとえば、GPU12のGPUパイプラインは、データをGPUキャッシュから取り出すことを試み得る。キャッシュミスの場合、GPU12はデータをシステムメモリ10から取り出す。GPU12が、データがシステムメモリ10から到着するのを待つ間、GPU12はストールされ得る。GPU12が、データをシステムメモリ10から取り出すかまたはデータをシステムメモリ10に出力することができるレートは、バス20のバス帯域幅の関数である。
[0062] したがって、GPU12がコマンドの実行をどのくらい迅速に完了すべきであるかをともに制御する少なくとも2つの要因がある。第1の要因は、GPU12の動作周波数(たとえば、データが、グラフィックスパイプラインの回路を通ってどのくらい高速に移動することができるか)である。第2の要因は、バス20のバス帯域幅である。より詳細に説明されるように、CPU6は、タイムリーな実行を完了するGPU12の能力に対する影響のない最小電力使用をともに与える、GPU12の動作周波数とバス20のバス帯域幅とを決定し得る。
[0063] たとえば、GPU12は、異なる動作周波数(たとえば、200MHz、300MHz、420MHz、および600MHz)において動作するように構成され得、CPU6は、バス20のバス帯域幅を異なる周波数(たとえば、2.2GB/s、4.0GB/s、7.0GB/s、および12.7GBs)に設定するように構成され得る。動作周波数とバス帯域幅の各ペアは、「動作点」(OPP)を形成する。たとえば、OPP00は、バス帯域幅が12.7GB/sであり、動作周波数が600MHzである動作点を指す。OPP10は、バス帯域幅が12.7GB/sであり、動作周波数が420MHzである動作点を指す。OPP01は、バス帯域幅が7.0GB/sであり、動作周波数が600MHzである動作点を指す。このようにして、バス帯域幅と動作周波数の各ペアについて、対応する動作点がある。
[0064] 本開示で説明される技法では、GPU12は、第1の動作点において動作していることがあり、(たとえば、動的電力マネージャ(DPM)を介した)CPU6は、GPU12の動作点が、性能に対する影響なしに第1の動作点から第2の動作点に調整され得るかどうかを決定し得る。CPU6が、性能に対する影響なしに第1の動作点から第2の動作点に調整している場合には、CPU6は、GPU12の動作周波数およびバス20のバス帯域幅のうちの少なくとも一方、さらにはそれらの両方を低減することを試み得る。いくつかの場合には、CPU6は、GPU12の動作周波数を直接制御することが可能であり得るが、バス20のバス帯域幅を制御することに投票する必要があり得る。
[0065] 帯域幅投票は実際のバス帯域幅とは異なり得、実際のバス帯域幅はランタイムにおいて動的に変化し得る。これは、バス20が共用リソースであり、多くの処理ユニットがバス帯域幅に関してコンカレントに投票し得るからである。バス帯域幅に関して投票することは、処理ユニットの各々が、(それぞれの処理ユニットによって決定されたように)バス帯域幅がどのようになるべきであるかを示す情報を出力することを意味する。しかしながら、実際のバス帯域幅が結局どのようになるかは、各処理ユニットによって与えられた投票とは異なり得る。CPU6または別の処理ユニット上で実行するバスドライバは、帯域幅投票または要求をアグリゲート(aggregate)し得、アグリゲートされた結果に基づいて、クロックをスケーリングする(たとえば、実際のバス帯域幅を設定する)。一例として、バスドライバは、最大投票を実際のバス帯域幅として選択し得るが、実際のバス帯域幅を決定するための他のやり方が可能である。すべてではないが、いくつかの場合には、アグリゲートされた帯域幅は、概して、投票のいずれかに等しいかまたはそれよりも大きい。
[0066] 本開示で説明される例示的な技法では、CPU6は、第1の動作点から第2の動作点に調整することを決定するために、有効バス帯域幅を利用し得る。たとえば、各動作点は、動作周波数とバス帯域幅とに関連する。CPU6がGPU12を特定の動作点において動作するように設定したとき、GPU12は、設定された周波数において動作し得るが、バス帯域幅は、(たとえば、投票により)動作点に関連するバス帯域幅から逸脱し得る。したがって、CPU6は、ある動作点から別の動作点に調整すべきかどうかを計算するために、有効バス帯域幅を使用し得、現在の動作点に関連するバス帯域幅を必ずしも使用するとは限らない。
[0067] 有効帯域幅(effective bandwidth)は、インターフェースがデータを転送するのにその間ビジーである時間期間で除算された、GPUバスインターフェースを通して転送されるデータの総量である。バス帯域幅に関して投票するCPU6、GPU12、および他の処理ユニットは、処理ユニットをバス20に接続するバスインターフェース構成要素を含み得る。それぞれのバスインターフェースにおけるハードウェアデータカウンタが、転送されたデータをカウントし、CPU6が有効バス帯域幅を決定するための転送されたデータの量を示す情報をCPU6に出力する。有効バス帯域幅を決定するための他のやり方があり得、例示的な技法は、有効バス帯域幅を決定するための特定のやり方に限定されない。
[0068] CPU6はバス帯域幅に投票し得るが、CPU6は、依然として、バス帯域幅がどのようになるべきであるかの意思決定プロセスに寄与する。CPU6は、バス帯域幅がどのようになるべきであるかを決定するために、本開示で説明される例示的な技法を使用する。CPU6によって行われたバス帯域幅決定が、最終的に、実際のバス帯域幅でないことが可能であるが、CPU6は、依然として、バス帯域幅の動的設定に寄与する。
[0069] 本開示の技法を使用する、動作周波数およびバス帯域幅のそのような動的制御は、デバイス2による電力消費の有効な制御を可能にする。たとえば、動作周波数およびバス帯域幅が比較的高い周波数に永続的に保たれた場合、GPU12は、たいていの事例では、サブミットされたコマンドをタイムリーに実行することが可能であることになる。しかしながら、比較的高い周波数においてコマンドを実行することは、GPU12の電力消費が増加することを引き起こし、デバイス2の電力消費も、バス20の高帯域幅をサポートすることから、増加することを引き起こす。GPU12の動作周波数およびバス20のバス帯域幅が比較的低い周波数に永続的に保たれた場合、GPU12の電力消費およびデバイス2の全体的電力は低減され得るが、GPU12は、たいていの事例では、サブミットされたコマンドをタイムリーに実行することが可能でなく、ジャンキー挙動(janky behavior)および場合によっては他の不要な影響をもたらし得る。
[0070] 本開示で説明される技法は、特定の時間期間にわたるGPU12のアクティブ時間とストール時間とに基づいて、GPU12の動作周波数およびバス20のバス帯域幅を増加または減少させる(たとえば、バス20のバス帯域幅を増加または減少させるように投票する)ための例示的なやり方について説明する。本開示で使用されるアクティブ時間は、その間、GPU12が、いくつかの算術、論理、または制御フロー動作を実施(たとえば、命令を実行)しており、異なるクロック領域における動作が完了するのを待っていない時間を意味する。上述のように、クロック領域は、同じ周波数において動作する回路のブロックである。同じチップ上の複数の異なるクロック領域(たとえば、CPU6とGPU12とは、同じチップ上にあるが、異なるクロック領域を有し得る)、および/または同じデバイス中の異なるクロック領域(たとえば、GPU12とシステムメモリ10とは、異なるクロック領域中にあり得る)があり得る。
[0071] 本開示では、(たとえば、CPU6またはGPU12の処理回路などの)処理回路(processing circuitry)が、クロック信号に応答して動作を実施するときはいつでも、処理回路はアクティブであると見なされる。処理回路が、別のクロック領域において完了すべき動作が進むのを待っているときはいつでも、処理回路はストール(stall)されると見なされる。
[0072] GPUストール時間は、その間、GPU12のグラフィックス処理パイプラインが、動作が別のクロック領域において完了するのを待つ間ストールされる時間である。ストール時間の1つの例示的な原因は、キャッシュミスである。GPU12は、最初に、データまたは命令をそれぞれのキャッシュから取り出すことを試み得、データまたは命令がキャッシュに記憶されていない場合、GPU12がシステムメモリ10からのデータまたは命令を待つ間、GPU12はストールされ得る。GPUストール時間の別の例は、いくつかのIO動作からのものである。IO動作の場合、アクティブ時間にカウントされるべきであるいくつかのサブ動作が、GPU12のクロック領域において実施され、他のクロック領域におけるサブ動作もあることになり、プロセッサがそれを待つのにビジー(busy)である必要があり、プロセッサストール時間にカウントされるべきである。
[0073] GPU12のストール時間とGPU12のアイドル時間(idle time)とは、混同されるべきではない。たとえば、GPU12のアイドル時間は、GPU12がコマンドのセットの実行を完了した後、実行すべきコマンドの新しいセットを待っていることを指す。GPU12のストール時間は、GPU12がコマンドのセットの実行の最中でストールすることを指す。
[0074] 本開示で説明される技法では、CPU6は、GPU12がそこにおいて動作すべきである動作点を決定するために、GPU12のアクティブ時間と、GPU12のストール時間とを別々に評価し得る。たとえば、GPU12は、算術論理ユニット(ALU)、初等関数ユニット(EFU)などのような様々な回路ブロックを含む。これらのユニットのいずれかが機能を実施するたびに、GPU12はアクティブであると見なされる。たとえば、動作周波数を有するクロック信号の立上りエッジまたは立下りエッジ上で、GPU12の回路ブロックのうちの1つが動作を実施する場合、GPU12はアクティブであると見なされる。GPU12の回路ブロックによって実施される動作は、命令の実行によるものであり得、ここで、回路ブロックはプログラマブルブロックであるか、または、ここで、回路ブロックはハードワイヤード固定機能回路ブロックである。
[0075] この例では、GPU12は、これらの回路ブロックのうちのいずれか1つが機能を実施するたびに、アクティブサイクルカウンタ(active cycle counter)を増分し得る。たとえば、GPU12は、マスキングされた「OR」ゲートを含み得、ここで、回路ブロックが機能を実施する場合、ORゲートへの入力は論理1である。このようにして、ORゲートの出力が論理1である場合、GPU12はアクティブサイクルカウンタを増分し、ORゲートの出力が論理0である場合、GPU12はアクティブサイクルカウンタを増分しない。
[0076] GPU12のアクティブ時間は、動作周波数で除算されたアクティブサイクルカウンタ値である。たとえば、アクティブサイクルカウンタ値は、コマンドの実行中に経過したクロックサイクルの数を示し、GPU12の動作周波数は、コマンドが実行したレートを示す。クロックレート(たとえば、動作周波数)で除算されたクロックサイクルの数は、GPU12がアクティブである時間の量に等しい。したがって、GPU12のアクティブ時間は、GPU12の動作周波数に反比例する。
[0077] ストール時間の間、GPU12が、それの間、機能を実施すべきであったが、(たとえば、キャッシュミスに応答した)別のクロック領域における動作を待つ遅延によりストールされたクロックサイクルごとに、GPU12はストールと見なされ得る。いくつかの場合には、ストールサイクルカウンタを有することは、GPU12の並列構造により、複雑にされ得る。しかしながら、ビジー時間はアクティブ時間+ストール時間に等しいので、GPU12はビジーサイクルカウンタを含み得る。GPU12が動作を実施するたびに、GPU12はビジーサイクルカウンタを増分し得る。ビジー時間を決定するための他のやり方もあり得る。ストール時間は、ビジー時間−アクティブ時間に等しい。ストールサイクルカウンタが可能である例では、GPU12は、そのようなカウンタを含み、プロセッサストールがあるときはいつでも、ストールサイクルカウンタを増分し得る。
[0078] プロセッサストール時間は、バス20のバス帯域幅に基づく。たとえば、バス帯域幅が比較的高かった場合、命令またはデータは、バス帯域幅が比較的低かった場合よりも少ない時間でGPU12に達することになる。したがって、プロセッサストール時間は、バス20のバス帯域幅に反比例する。
[0079] 上述のように、GPU12のビジー時間は、アクティブ時間+ストール時間に等しい。プリセットされるか(たとえば、16ms)、または(たとえば、GPU12がいつアイドルになるかに基づいて)オンザフライ(on the fly)で決定され得る時間期間で除算されたGPU12のビジー時間は、GPU12のビジー割合を示す。本開示で説明される技法では、CPU6は、異なる動作点についてビジー割合を決定し、決定されたビジー割合に基づいて、GPU12がそこにおいて動作している動作点を別の動作点に調整すべきかどうかを決定し得る。
[0080] たとえば、CPU6が、第1の動作点におけるGPU12のビジー割合が50%であると決定し、より低い動作周波数および/またはより低いバス帯域幅のうちの少なくとも1つを有する第2の動作点におけるGPU12のビジー割合が80%であると決定し、CPU6が、動作点を第1の動作点から第2の動作点に調整し得ると仮定する。しかしながら、GPU12の動作点を第2の動作点に調整することが、95%のビジー割合を生じるとCPU6が決定した場合、CPU6は、GPU12の動作点を第2の動作点に調整しないことがある。いくつかの例では、CPU6は、CPU6が、動作点を他の動作点のうちの1つに調整すべきであるかどうかを識別するために、これらの他の動作点をテストし得る。この例では、90%がしきい値であり得、ここで、ビジー割合が90%よりも大きくなる場合、CPU6は動作点を調整せず、ビジー割合が90%よりも小さくなる場合、CPU6は動作点を調整する。
[0081] 本開示で説明される技法では、GPU12が現在の動作点において動作しているとき、CPU6は、アクティブ時間とストール時間の両方を決定し得る。CPU6は、GPU12のアクティブ時間が、異なる動作点においてどのようになるかを決定し、ストール時間がこの異なる動作点においてどのようになるかを決定し得る。特に、CPU6は、GPU12のアクティブ時間およびストール時間がこの異なる動作点においてどのようになるかを別々に決定し得る。たとえば、現在の動作点におけるGPU12の全体的ビジー時間に基づいて、GPU12の全体的ビジー時間がこの異なる動作点においてどのようになるかを決定するのではなく、GPU12は、GPU12の全体的ビジー時間をともに形成する成分(constituent)値(たとえば、アクティブ時間およびストール時間)の各々を決定し得る。
[0082] 動作点調整のためにアクティブ時間とストール時間の各々を別々に決定することは、動作周波数およびバス帯域幅が、GPU12のビジー時間の異なる部分に寄与するので、有益であり得る。たとえば、第1の動作点と第2の動作点との間の差が、動作周波数の変化のみであり、バス帯域幅の変化でないと仮定する。この場合、アクティブ時間は、第1の動作点と第2の動作点との間で異なり得るが、ストール時間は、ストール時間がバス帯域幅の関数であるので、同じであり得る。CPU6は、第2の動作点におけるGPU12のビジー時間を、第2の動作点におけるアクティブ時間と、(第1の動作点におけるストール時間と同じであり得る)第2の動作点におけるストール時間との合計であると決定し得る。
[0083] 本例では、CPU6は、第1の動作点におけるGPU12のビジー時間に基づいて、第2の動作点におけるGPU12のビジー時間を決定することと比較して、第2の動作点におけるGPU12のビジー時間のより正確な値を決定し得る。たとえば、第2の動作点におけるGPU12のビジー時間を決定するための別のやり方として、CPU6は、第2の動作点におけるGPU12のビジー時間が、第2の動作点の動作周波数に反比例すると仮定し得る。一例として、CPU6は、第1の動作点におけるビジー時間が50%であると決定し得、ここで、動作周波数は200MHzである。この例では、CPU6は、第2の動作点における動作周波数が100MHzであり、バス帯域幅が第1の動作点の場合と同じであると決定し得る。CPU6は、GPU12のビジー時間が動作周波数に反比例すると仮定したので、CPU6は、半分(たとえば、100MHz/200MHz)だけ動作周波数を低減することが、ビジー割合を100%ビジー割合(たとえば、50%*2)まで2倍にすることになると決定し得る。
[0084] しかしながら、ビジー割合が第2の動作点において100%になると決定することは、ビジー割合の過大推定であり得る。先行する例では、アクティブ時間のみが動作周波数に反比例し、バスストール時間は動作周波数に反比例しない。したがって、CPU6は、第1の動作点におけるビジー割合(またはビジー時間)に基づいて、第2の動作点におけるビジー割合(またはビジー時間)を直接決定するのではなく、第2の動作点におけるアクティブ時間とストール時間とを別々に決定し、次いで、第2の動作点におけるビジー時間を決定し、次いで、第2の動作点におけるビジー割合を決定し得る。
[0085] 一例として、GPU12のビジー時間が50%に等しかった前の例を再び参照する。この例では、第1の動作点におけるアクティブ時間が、GPU12がビジー30%であることを引き起こしたと仮定し、第1の動作点におけるストール時間が、GPU12が20%のビジーであることを引き起こすと仮定する(30%+20%=50%)。この場合、第2の動作点における動作周波数は、第1の動作点における動作周波数の50%それであるので、アクティブ時間は、ビジー時間に2倍多く寄与することになる(たとえば、60%、ここで、30%*2は60%に等しい)。ストール時間は変化しないことがあり、したがって、ビジー時間に同じく寄与し得る(たとえば、20%)。この例では、GPU12は、第2の動作点におけるビジー時間を80%であると決定し得る(60%+20%=80%)。80%のビジー時間は、アクティブ時間とストール時間とが別々に評価されない、100%のビジー割合決定よりも正確な、GPU12のビジー割合の決定であり得る。
[0086] バス帯域幅を最低必要なレベルにスケーリングすることを支援するために、動作点を決定するために成分アクティブおよびプロセッサ遅延時間の代わりに、総ビジー時間のみに依拠するこれらの他の例では、各動作周波数についてのバスカウンタ/インジケータの示度(reading)に基づいて、バスアップスケールしきい値とバスダウンスケールしきい値とのセットを作成するために、異なるタイプの使用事例をプロファイリングすることが可能であり得る。たとえば、動作周波数が300MHzである場合、CPU6は、300MHzの利用可能なバス帯域幅と、関連するしきい値とについてテーブルを探索し得、バスカウンタが、トラフィックがアップスケールしきい値(upscaling threshold)を上回ることを示す場合、CPU6はより高い帯域幅に投票し得、トラフィックがダウンスケールしきい値(downscaling threshold)を下回る場合、CPU6はより低い帯域幅に投票し得、または他の場合、CPU6は新しい帯域幅投票を行わない。
[0087] しかしながら、そのようなプロファイリング(profiling)は、広範(extensive)であり、さらに、すべての使用事例について適切に機能するとは限らないことさえある。たとえば、比較的より高い帯域幅とより低い動作周波数とをもつ動作点は、バス20またはデータ集約的使用事例についてより効率的である。対比として、相対的により低い帯域幅とより高いプロセッサ周波数とをもつ動作点は、プロセッサまたは計算集約的使用事例についてより効率的であり、両方について効率的に機能するしきい値のセットを見つけることは極めて困難である。
[0088] このようにして、プロセッサアクティブ時間とストール時間の各々が、動作点を決定するために別々に使用される場合、ビジー時間のみを使用することと比較して、本開示の技法は、そこにおいて動作すべき動作点を決定するためのより正確なやり方を与える。上記の例は、CPU6がGPU12のための動作点を決定することに関して説明されたが、本開示で説明される技法はそのように限定されない。CPU6は、本開示で説明される技法を使用してそれ自体のための動作点を決定し得るか、またはGPU12は、本開示で説明される技法を使用してそれ自体のための動作点を決定し得る。他の例として、CPU6および/またはGPU12は、何らかの他のDSPのための動作点を決定し得る。
[0089] 概して、CPU6、GPU12、何らかの他のDSP、または何らかの小さい回路ブロック上の回路は、動作点決定を決定するように構成され得る。(たとえば、CPU6上の)回路は、第1の動作点における処理ユニット(たとえば、GPU12)の第1のアクティブ時間を決定し、第1の動作点における処理ユニットの第1のストール時間を決定し得る。回路は、第2の動作点における第1のアクティブ時間に基づいて、処理ユニットの第2のアクティブ時間を決定し、第2の動作点における第1のストール時間に基づいて、処理ユニットの第2のストール時間を決定し得る。回路は、次いで、第2のアクティブ時間と第2のストール時間とに基づいて、処理ユニットの動作点を第1の動作点から第2の動作点に調整すべきかどうかを決定し、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を第1の動作点から第2の動作点に調整し得る。
[0090] 動作点決定を実施する回路、および処理ユニットは、トランジスタと、キャパシタ、抵抗器、インダクタなどのような受動構成要素とを含む。これらのハードウェア構成要素はともに、プログラマブルブロックまたは固定機能ブロックを含む、回路ブロックを形成する。動作周波数は、トランジスタが処理ユニットをいつオンおよびオフにするかを制御することなどによって、命令/コマンドが回路ブロックを通して処理されるレートを制御する。
[0091] また、動作点決定を実施する回路は、それの動作点が決定されつつある処理ユニットとは異なる処理ユニット上の回路であり得る(たとえば、回路はCPU6上にあり、動作点決定はGPU12についてのものである)。いくつかの例では、動作点決定を実施する回路は、それの動作点が決定されつつある同じ処理ユニット上の回路であり得る(たとえば、回路はGPU12上にあり、動作点決定はGPU12についてのものである)。
[0092] 回路が動作点決定を実施し得る1つの例示的なやり方は、回路に例示的な技法を実施させるソフトウェア/ファームウェアモジュールの命令を実行することによるものである。そのような例では、回路は、ソフトウェア/ファームウェアがその上で実行している処理ユニットのプログラマブルブロック(たとえば、命令がその上で実行するプログラマブル回路を含むCPU6の処理コア)を含む。回路が動作点決定を実施し得る別の例示的なやり方は、ハードワイヤード回路(たとえば、固定機能回路)を含むことによるものである。いくつかの例では、回路は、プログラマブルブロックと、固定機能ブロックとの組合せを含み得る。
[0093] 図2は、図1に示されたデバイスの構成要素をより詳細に示すブロック図である。図2に示されているように、GPU12は、コントローラ30と、クロック生成器(clock generator)34と、アクティブサイクルカウンタレジスタ(active cycle counter register)35と、シェーダコア(shader core)36と、ビジーサイクルカウンタレジスタ(busy cycle counter register)37と、固定機能パイプライン(fixed-function pipeline)38とを含む。シェーダコア36および固定機能パイプライン38はともに、グラフィックスまたは非グラフィックス関係機能を実施するために使用される実行パイプラインの回路を形成し得る。1つのシェーダコア36のみが示されているが、いくつかの例では、GPU12は、シェーダコア36と同様の1つまたは複数のシェーダコアを含み得る。
[0094] GPU12が実行すべきであるコマンドは、GPU12のコントローラ30によって決定された、シェーダコア36と固定機能パイプライン38とによって実行される。コントローラ30は、GPU12上のハードウェア、あるいはGPU12のハードウェア上で実行するソフトウェアまたはファームウェアとして実装され得る。たとえば、コントローラ30は、GPU12のプログラマブル回路上で実行し得るか、またはより大きいGPU12内の特殊な回路ブロックであり得る。
[0095] コントローラ30は、バス20を介してシステムメモリ10のコマンドバッファ40から、またはバス20を介してCPU6から直接、フレーム(たとえば、表示の準備ができている1つの完全な画像)をレンダリングするために実行されるべきであるコマンドを受信し(たとえば、GPU12によって今実行されるべきであるとCPU6が決定したサブミットされたコマンドを受信し)得る。コントローラ30はまた、バス20を介してシステムメモリ10のデータバッファ42から、またはバス20を介してCPU6から直接、コマンドのためのオペランドデータを取り出し得る。たとえば、コマンドバッファ40は、AとBとを加算するためのコマンドを記憶し得る。コントローラ30は、このコマンドをコマンドバッファ40から取り出し、AおよびBの値をデータバッファ42から取り出す。コントローラ30は、どのコマンドがシェーダコア36によって実行されるべきであるか(たとえば、ソフトウェア命令がシェーダコア36上で実行される)と、どのコマンドが固定機能パイプライン38によって実行されるべきであるか(たとえば、固定機能パイプライン38のユニットのためのコマンド)とを決定し得る。
[0096] いくつかの例では、コマンドバッファ40およびデータバッファ42の一方または両方からのコマンドおよび/またはデータは、GPU12のローカルメモリ14の一部であり得る。たとえば、GPU12は、それぞれ、コマンドバッファ40からのコマンドおよびデータバッファ42からのデータを記憶する命令キャッシュおよびデータキャッシュを含み得る。これらの例では、コントローラ30は、利用可能な場合、コマンドおよび/またはデータをキャッシュから取り出し、キャッシュミスがある場合、コマンドおよび/またはデータをシステムメモリ10から取り出し得る。
[0097] シェーダコア36と固定機能パイプライン38とは、互いにデータを送信および受信し得る。たとえば、シェーダコア36が実行するコマンドのうちのいくつかは、固定機能パイプライン38のユニットが実行すべきであるコマンドのためのオペランドである中間データを生成し得る。同様に、固定機能パイプライン38のユニットが実行するコマンドのうちのいくつかは、シェーダコア36が実行すべきであるコマンドのためのオペランドである中間データを生成し得る。このようにして、受信データは、パイプライン様式で固定機能パイプライン38のユニットおよびシェーダコア36を通して漸進的に処理される。したがって、シェーダコア36および固定機能パイプライン38は、実行パイプラインを実装することと呼ばれることがある。
[0098] 概して、シェーダコア36は、実行されるべき様々なタイプのコマンドを可能にし、これは、ユーザが、たいていの考えられる様式で所望のタスクを実施するようにシェーダコア36をプログラムすることができるので、シェーダコア36が、プログラム可能であり、ユーザに機能的フレキシビリティを与えることを意味する。しかしながら、固定機能パイプライン38の固定機能ユニットは、固定機能ユニットがタスクを実施する様式のために配線接続される。したがって、固定機能ユニットはあまり機能的フレキシビリティを与えないことがある。
[0099] シェーダコア36および固定機能パイプライン38は、1つまたは複数の回路ブロックを用いて形成され得る。たとえば、シェーダコア36および固定機能パイプライン38は、1つまたは複数のALUおよびEFU、ならびにテクスチャパイプL1キャッシュ(TPL1)およびGPUレベル2ユニバーサルキャッシュ(UCHE)などの他の回路ブロックを含む。ALUは、整数2進数に対して算術およびビット単位論理演算を実施するデジタル電子回路であり得、EFUは、サイン、コサイン、平方根(sqrt)などのようなより多くの複雑な関数を実施する。これらの回路ブロックのうちのいずれか(たとえば、シェーダコア36および/または固定機能パイプライン38のいずれか)が、クロックサイクル中に機能を実施する場合、GPU12は、そのクロックサイクルの間アクティブであると見なされる。
[0100] また、図2に示されているように、GPU12はクロック生成器34を含む。クロック生成器34は、シェーダコア36および/または固定機能パイプライン38のユニットがコマンドを実行するときの時間インスタンスを設定するクロック信号を出力する。クロック生成器34はGPU12の内部にあるものとして示されているが、いくつかの例では、クロック生成器34はGPU12の外部にあり得る。また、クロック生成器34は、必ずしもクロック信号をGPU12にだけ与える必要があるとは限らず、クロック信号を他の構成要素にも与え得る。
[0101] クロック生成器34は、矩形波、正弦波、三角波、または他のタイプの周期波を生成し得る。クロック生成器34は、生成された波の電圧を増幅するための増幅器を含み、得られた波をGPU12のためのクロック信号として出力し得る。
[0102] いくつかの例では、クロック生成器34によって出力されたクロック信号の立上りエッジまたは立下りエッジ上で、シェーダコア36、および固定機能パイプライン38の各ユニットは、1つのコマンドを実行し得る。いくつかの場合には、コマンドは、サブコマンドに分割され得、シェーダコア36、および固定機能パイプライン38の各ユニットは、クロック信号の立上りエッジまたは立下りエッジに応答してサブコマンドを実行し得る。たとえば、A+Bのコマンドは、Aの値およびBの値を取り出すためのサブコマンドを含み、シェーダコア36または固定機能パイプライン38は、クロック信号の立上りエッジまたは立下りエッジにおいてこれらのサブコマンドの各々を実行し得る。
[0103] シェーダコア36、および固定機能パイプライン38のユニットがコマンドを実行するレートは、GPU12の電力消費に影響を及ぼし得る。たとえば、クロック生成器34によって出力されたクロック信号の周波数が比較的高い場合、シェーダコア36、および固定機能パイプライン38のユニットは、シェーダコア36、および固定機能パイプライン38のユニットが、クロック信号の比較的低い周波数の場合に実行することになるコマンドの数比較して、時間期間内により多くのコマンドを実行し得る。しかしながら、GPU12の電力消費は、シェーダコア36、および固定機能パイプライン38のユニットが、(クロック生成器34からのクロック信号のより低い周波数により)時間期間においてより少ないコマンドを実行している事例と比較して、シェーダコア36、および固定機能パイプライン38のユニットが、(クロック生成器34からのクロック信号のより高い周波数により)時間期間においてより多くのコマンドを実行している事例においてより大きくなり得る。
[0104] いくつかの例では、電圧はGPU12に印加され、クロック生成器34は、GPU12の最大周波数を制御する。より低い周波数の場合、GPU12は、GPU12がより高い周波数で動作するときの電圧と比較して、より低い電圧で動作し得る。電力は、2乗された周波数および電圧に比例するので、周波数およびGPU12に印加される電圧を制御することによって、CPU6は、GPU12よって消費される電力量を制御し得る。
[0105] クロック生成器34が出力するクロック信号の周波数は、GPU12の動作周波数を設定し、GPU12がそこにおいて動作している動作点のある部分であり得る。動作点の他の部分は、バス20のバス帯域幅である。
[0106] バス20のバス帯域幅は、システムメモリ10のクロック生成器39によって出力されたクロック信号の周波数によって設定され得る。クロック生成器39は、クロック生成器34と実質的に同様であり得るが、クロック信号をシステムメモリ10に与える。たとえば、クロック生成器39は、コマンドバッファ40からのコマンドおよび/またはデータバッファ42からのデータがバス20上を進むレートを制御する。デバイス2の構成要素の各々は、互いと通信するためにシステムメモリ10を使用し得るので、クロック生成器39は、本質的に、バス20のバス帯域幅を設定する。バス幅(たとえば、データがその上で進むことができるラインの量)は、どのくらいのデータまたはコマンドがバス20上で送られ得るかに影響を及ぼす。
[0107] GPU12およびクロック生成器34と同様に、CPU6は、メモリコントローラ8、システムメモリ10、バス20およびクロック生成器39に印加される電圧を、これらの構成要素の最大周波数を制御するために制御し得、これは、バス帯域幅を制御することと同じである。また、上記と同様に、バス20のより低いバス帯域幅の場合、これらの構成要素は、バス20がより高い帯域幅において動作するときの電圧と比較して、より低い電圧において動作し得る。電力は、2乗された周波数および電圧に比例するので、バス帯域幅、ならびにメモリコントローラ8、システムメモリ10、バス20およびクロック生成器39に印加される電圧を制御することによって、CPU6は、これらの構成要素よって消費される電力量を制御し得る。GPU12の動作周波数を設定するクロック生成器34の出力と、バス20のバス帯域幅を設定するクロック生成器39の出力とを制御することによって、CPU6は、GPU12がそこにおいて動作する動作点を設定し得る。
[0108] 図示の例では、GPU12およびシステムメモリ10は、GPU12およびシステムメモリ10が、(たとえば、それぞれ、クロック生成器34および39からの)異なるクロック信号を使用して動作するので、異なるクロック領域中にある。したがって、GPU12は、システムメモリ10からのデータを待つ場合、処理が遅延し得る。
[0109] 上記で説明されたように、CPU6は、GPU12の超並列処理能力(massive parallel processing capability)により、タスクをGPU12にオフロードし得る。たとえば、GPU12は、単一命令複数データ(SIMD:single instruction, multiple data)構造を用いて設計され得る。SIMD構造では、シェーダコア36は複数のSIMD処理要素を含み、各SIMD処理要素は、同じコマンドを、ただし異なるデータに対して実行する。
[0110] 特定のSIMD処理要素上で実行する特定のコマンドは、スレッド(thread)と呼ばれる。各SIMD処理要素は、所与のスレッドのためのデータが異なり得るので、異なるスレッドを実行するものと見なされ得るが、処理要素上で実行するスレッドは、他の処理要素上で実行するコマンドと同じコマンドである。このようにして、SIMD構造は、GPU12が多くのタスクを並列に(たとえば、同時に)実施することを可能にする。そのようなSIMD構造GPU12の場合、各SIMD処理要素は、クロック信号の立上りエッジまたは立下りエッジ上で1つのスレッドを実行し得る。
[0111] 混乱を回避するために、本開示は、一般的に、シェーダコア36または固定機能パイプライン38のユニットによって実行されるプロセスを指すために、「コマンド(command)」という用語を使用する。たとえば、コマンドは、実際のコマンド、成分サブコマンド(たとえば、メモリ呼コマンド)、スレッド、またはGPU12が特定の動作を実施する他のやり方を含む。GPU12は、シェーダコア36と固定機能パイプライン38とを含むので、GPU12は、コマンドを実行するものと見なされ得る。
[0112] また、上記の例では、シェーダコア36または固定機能パイプライン38のユニットは、クロック生成器34によって出力されたクロック信号の立上りエッジまたは立下りエッジに応答してコマンドを実行する。しかしながら、いくつかの例では、シェーダコア36または固定機能パイプライン38のユニットは、あるコマンドをクロック信号の立上りエッジ上で実行し、別の後続のコマンドをクロック信号の立下りエッジ上で実行し得る。コマンドを「クロック制御する」ための他のやり方があり得、本開示で説明される技法は、上記の例に限定されない。
[0113] GPU12が、立上りエッジ、立下りエッジ、またはその両方ごとにコマンドを実行するので、クロック生成器34によって出力された(クロックレートとも呼ばれる)クロック信号の周波数は、GPU12がある時間内に実行することができるコマンドの量を設定する。たとえば、GPU12がクロック生成器34によって生成されたクロック信号の立上りエッジごとに1つのコマンドを実行し、クロック信号の周波数が1MHzである場合、GPU12は、(理論的上限として)1秒中に100万個のコマンドを実行することができる。また、システムメモリ10がクロック生成器39によって生成されたクロック信号の立上りエッジごとに1ビットのデータを出力し、このクロック信号の周波数が200MHzであり、バス幅が128ビット(16バイト)である(たとえば、システムメモリ10が、クロック信号の立上りエッジごとに16バイトのデータを転送することができる)場合、バス20のバス帯域幅は、3.2GB/s(200MHz*16)であり得る。
[0114] 図2に示されているように、CPU6上で動作するソフトウェアスタックは、理解を支援するための論理構成体である、ユーザ空間23とカーネル空間27とを含む。ユーザ空間23の一部は、アプリケーション24およびユーザモードグラフィックスドライバ26である。ユーザモードグラフィックスドライバ26は、コマンドバッファをGPU12のために準備し、バッファを、GPU12によって実行されるべきである命令で満たす。カーネル空間27の一部は、カーネルモードグラフィックスドライバ(kernel mode graphics driver)28および動的電力マネージャ(DPM)32である。カーネルモードグラフィックスドライバ28は、コマンドバッファをスケジュールし、GPU12にサブミットする。DPM32は、動作周波数およびバス帯域幅を決定するために、例示的な動作を実施するように構成され得る。
[0115] 図示のように、CPU6は回路25を含む。回路25は、プログラマブル回路ブロックと固定機能回路ブロックとを含む。たとえば、回路25は、アプリケーション24、ユーザモードグラフィックスドライバ26、カーネルモードグラフィックスドライバ28、およびDPM32がその上で実行する、トランジスタ、ALU、EFU、論理ゲートなどを用いて形成されたプログラマブル回路ブロックを含み得る。いくつかの例では、回路25は、DPM32のみを実行するために使用されるプログラマブル回路であり得る。DPM32が固定機能回路ブロックである例など、いくつかの例では、回路25は、DPM32のそのような例を含み、アプリケーション24、ユーザモードグラフィックスドライバ26、およびカーネルモードグラフィックスドライバ28を実行するための別個のプログラマブル回路ブロックがあり得る。
[0116] CPU6は、点線ボックスによって示されているように、アプリケーション24を実行する。実行中に、アプリケーション24およびユーザモードグラフィックスドライバ26は、GPU12に、(たとえば、頂点シェーダ、フラグメントシェーダ、非グラフィックスアプリケーションのための計算シェーダなどの)シェーダプログラムを取り出して実行するように命令するコマンドを含む、GPU12実行されるべきであるコマンドを生成する。さらに、アプリケーション24およびユーザモードグラフィックスドライバ26は、コマンドがそれに作用するデータ(すなわち、コマンドのためのオペランド)を生成する。CPU6は、生成されたコマンドをコマンドバッファ40に記憶し、オペランドデータをデータバッファ42に記憶する。
[0117] CPU6が生成されたコマンドをコマンドバッファ40に記憶した後、CPU6は、GPU12による実行のためにコマンドを利用可能にする。たとえば、CPU6は、記憶されたコマンドのセットと、それらのオペランドデータとのメモリアドレス、およびGPU12がコマンドのセットをいつ実行すべきであるかを示す情報をGPU12に通信する。このようにして、CPU6は、フレームをレンダリングするために実行するために、コマンドをGPU12にサブミットする。
[0118] 図2に示されているように、CPU6はまた、カーネルモードグラフィックスドライバ28を実行し得る。いくつかの例では、カーネルモードグラフィックスドライバ28は、CPU6のハードウェアまたはハードウェアユニット上で実行するソフトウェアまたはファームウェアであり得る。カーネルモードグラフィックスドライバ28は、CPU6およびGPU12が互いと通信することを可能にするように構成され得る。たとえば、CPU6が、グラフィックスまたは非グラフィックス処理タスクをGPU12にオフロードするとき、CPU6は、そのような処理タスクをカーネルモードグラフィックスドライバ28を介してGPU12にオフロードする。たとえば、GPU12が実行すべきであるコマンドの量を示す情報をCPU6が出力するとき、カーネルモードグラフィックスドライバ28は、情報をGPU12に出力するCPU6のユニットであり得る。
[0119] 追加の例として、アプリケーション24は、グラフィックスデータおよびグラフィックスコマンドを生成し、CPU6は、このグラフィックスデータの処理をGPU12にオフロードし得る。この例では、CPU6は、グラフィックスデータをデータバッファ42に記憶し、グラフィックスコマンドをコマンドバッファ40に記憶し得、カーネルモードグラフィックスドライバ28は、それぞれ、グラフィックスデータおよびグラフィックスコマンドをデータバッファ42およびコマンドバッファ40からいつ取り出すべきか、それぞれ、グラフィックスデータおよびグラフィックスコマンドをデータバッファ42およびコマンドバッファ40のどこから取り出すべきか、およびコマンドのセットの1つまたは複数のコマンドを実行することによってグラフィックスデータをいつ処理すべきかをGPU12に命令し得る。
[0120] また、アプリケーション24は、GPU12が1つまたは複数のシェーダプログラムを実行することを必要とし得る。たとえば、アプリケーション24は、(たとえば、図1のディスプレイ18上に)表示されるべきであるフレームのためのピクセル値を生成するために、シェーダコア36が頂点シェーダおよびフラグメントシェーダを実行することを必要とし得る。カーネルモードグラフィックスドライバ28は、シェーダプログラムをいつ実行すべきかをGPU12に命令し、グラフィックスデータをデータバッファ42から取り出すべき場所と、コマンドをコマンドバッファ40からまたはシステムメモリ10中の他のロケーションから取り出すべき場所とともにGPU12に命令し得る。このようにして、カーネルモードグラフィックスドライバ28は、CPU6とGPU12との間のリンクを形成し得る。
[0121] カーネルモードグラフィックスドライバ28は、アプリケーション処理インターフェース(API:application processing interface)に従って構成され得るが、カーネルモードグラフィックスドライバ28は、特定のAPIに従って構成されることに限定される必要はない。デバイス2がモバイルデバイスである一例では、カーネルモードグラフィックスドライバ28は、OpenGL ES APIに従って構成され得る。OpenGL ES APIは、モバイルデバイスのために特別に設計される。デバイス2が非モバイルデバイスである一例では、カーネルモードグラフィックスドライバ28は、OpenGL APIに従って構成され得る。
[0122] GPU12が時間期間内に実行する必要があるコマンドの数は、ユーザインターフェースまたはゲームアプリケーションの1つのフレームをレンダリングするために必要とされるコマンドに基づき得る。ユーザインターフェース例の場合、GPU12は、ジャンクなしユーザエクスペリエンスを与えるために、vsyncウィンドウ(たとえば、毎秒60フレームと仮定すると、16ms)内のユーザインターフェースの1つのフレームをレンダリングするために必要とされるコマンドを実行する必要があり得る。表示される必要がある比較的大量のコンテンツがある場合、コマンドの量は、表示される必要がある比較的少量のコンテンツがある場合よりも大きいことがある。
[0123] デバイス2が過度に量の電力を消費することなしに、GPU12が、設定された時間期間内に、サブミットされたコマンドを実行することが可能であることを保証するために、CPU6のDPM32は、GPU12の動作周波数(たとえば、クロック生成器34によって生成されたクロック信号の周波数)と、バス20のバス帯域幅(たとえば、クロック生成器39によって生成されたクロック信号の周波数)とを制御し得る。動的クロックおよび電圧スケーリング(DCVS)モジュールとも呼ばれるDPM32は、CPU6上で実行するソフトウェアであるものとして示されている。しかしながら、DPM32は、CPU6上のハードウェア、あるいはハードウェアとソフトウェアまたはファームウェアとの組合せであり得る。
[0124] DPM32は、本開示で説明される例示的な動作を実施するように汎用CPU6を専門化し得る。DPM32がソフトウェアである例では、CPU6のオペレーティングシステムは、DPM32のための命令をシステムメモリ10から取り出し得、CPU6上で実行するコンパイラは、命令を実行のためのオブジェクトコードにコンパイルし得るか、またはシステムメモリ10は、DPM32のオブジェクトコードを記憶し得る。次いで、CPU6の回路25は、CPU6に例示的な技法を実施させるために、DPM32を実行し得る。いくつかの他の例では、DPM32は、CPU6に、本開示で説明される例示的な技法を実施させるように配線接続された、CPU6上の回路25内の回路ブロックであり得る。いくつかの例では、DPM32は、ソフトウェアと固定ハードウェアとの組合せであり得る。本開示では、CPU6が、例示的な技法を実装するものとして説明されるとき、CPU6は、回路25を介して(たとえば、回路25上で実行するDPM32を介して、または回路25はDPM32の固定機能回路ブロックを含む)そのような技法を実装している。
[0125] GPU12は、GPU12の動作周波数(たとえば、クロック生成器34の周波数)と、バス20のバス帯域幅(たとえば、クロック生成器39の周波数)とを定義する現在の動作点において動作していることがある。しかしながら、GPU12がそこにおいて動作すべきであるより良い動作点があり得る。たとえば、動作周波数、バス帯域幅、またはその両方が、必要以上に高いことがある。別の例として、動作周波数、バス帯域幅、またはその両方があまりにも低く、不十分な性能を生じることがある。DPM32は、GPU12の動作点を現在の動作点から別の動作点に調整すべきかどうかを決定し得る。
[0126] 一例では、本開示が、プロセッサアクティブ時間、ストール時間などを決定するための動作を実施するものとしてCPU6について説明するとき、CPU6は、回路25のDPM32を介してそのような動作を実施し得る。DPM32は、現在の動作点におけるGPU12のアクティブ時間およびストール時間を決定し、異なる動作点におけるGPU12のアクティブ時間およびストール時間を決定する(たとえば、GPU12がこの異なる動作点において動作すべきであった場合、GPU12のアクティブ時間およびストール時間がどのようになるかを決定する)。特に、DPM32は、ビジー時間が異なる動作点においてどのようになるかを直接決定するのではなく、アクティブ時間が異なる動作点においてどのようになるかと、ストール時間が異なる動作点においてどのようになるかとを別々に決定する。
[0127] さらに、回路25はCPU6内に示されているが、本開示で説明される例示的な技法は、そのように限定されない。いくつかの例では、回路25はGPU12の一部であり得、DPM32は、GPU12内の回路25上で、またはGPU12内の固定機能回路ブロックによって実行し得る。そのような例では、それの動作点が決定されつつある処理ユニット(たとえば、GPU12)は、動作点を決定するための回路を含む。いくつかの例では、回路25は、それの目的が、デバイス2中の様々な他の処理ユニットの動作点を決定することである、CPU6およびGPU12の外部のそれ自体のスタンドアロン処理ユニットであり得る。
[0128] 単に説明しやすいように、例示的な技法は、CPU6の回路25がDPM32を介してGPU12の動作点を決定するものとして説明される。しかしながら、これらの技法は、回路25がデジタル信号プロセッサ(DSP)のための動作点を決定する例に拡張可能である。また、これらの技法は、GPU12が回路25を含む例、ならびに回路25が、CPU6とGPU12とを含むSoC内のそれ自体のスタンドアロン処理ユニットである例に拡張可能である。
[0129] GPU12のアクティブ時間を決定するために、DPM32は、アクティブサイクルカウンタ値をアクティブサイクルカウンタレジスタ35から読み取り得る。いくつかの例では、GPU12の少なくとも1つの回路ブロックが、クロック生成器34によって生成されたクロック信号の立上りエッジまたは立下りエッジ上で機能を実施するときはいつでも、コントローラ30は、アクティブサイクルカウンタレジスタ35中のアクティブサイクルカウンタ値を増分する。たとえば、回路ブロックの各々は、回路ブロックの各々がクロックサイクル中に動作を実施したかどうかを示すアクティブ信号をコントローラ30に出力し得る。コントローラ30は、OR関数を受信されたアクティブ信号に適用し得、OR関数の出力が論理1である場合、コントローラ30は、アクティブサイクルカウンタレジスタ35に記憶されたアクティブサイクルカウンタ値を増分し、OR関数の出力が論理0である場合、コントローラ30は、アクティブサイクルカウンタ値を増分しない。
[0130] ある時間期間後に、DPM32は、GPU12が時間期間中にどのくらいの時間の間アクティブであったか(たとえば、GPU12のアクティブ時間)を決定するために、アクティブサイクルカウンタレジスタ35を読み取り、読み取られたアクティブサイクルカウンタ値をクロック生成器34の周波数で除算する。時間期間は、プリセットされた時間期間または変数であり得る(たとえば、DPM32は、GPU12がアイドルになるたびに、アクティブサイクルカウンタレジスタ35を読み取る)。アクティブ時間を決定するための他のやり方があり得、上記は一例である。
[0131] GPU12のストール時間を決定するために、DPM32は、期間時間の後にビジーサイクルカウンタ値をビジーサイクルカウンタレジスタ37から読み取り得る。たとえば、DPM32は、同じ期間時間の後にビジーサイクルカウンタレジスタ37とアクティブサイクルカウンタレジスタ35とを読み取る(たとえば、ほぼその時間に読み取る)。DPM32は、次いで、ストール時間を決定するために、ビジー時間値からアクティブ時間値を減算する。
[0132] いくつかの例では、コントローラ30が、クロック生成器34のクロックサイクルが経過し、GPU12の回路ブロックがバス20からのデータおよび/または命令を待ってストールされたと決定した場合、コントローラ30は、ビジーサイクルカウンタレジスタ37に記憶されたビジーサイクルカウンタ値を増分し得る。CPU6(たとえば、回路25のDPM32)は、ビジーサイクルからGPUアクティブサイクルを減算することによって、GPU12ストールサイクルを計算することができる。CPU6(たとえば、回路25のDPM32)はまた、GPUストールサイクルカウンタ値が利用可能な場合、それをストールカウンタレジスタから直接読み取ることができる。CPU6は、GPU12が時間期間中にどのくらいの時間の間ストールされたか(たとえば、GPU12のストール時間)を決定するために、ストールサイクルをクロック生成器34の周波数で除算する。
[0133] この場合も、GPU12のストール時間およびアイドル時間は、異なる概念であり、混同されるべきではないことを理解されたい。たとえば、コントローラ30は、GPU12が最初にデータまたは命令をキャッシュから取り出すことを試行し、次いで、キャッシュミスがある場合、データまたは命令をシステムメモリ10から取り出すことを試みたときにビジーサイクルカウンタレジスタ37を増分し得る。アイドル時間中に、取り出すべき命令またはデータがない。アイドル時間中に、コントローラ30は、ビジーサイクルカウンタレジスタ37を増分しないことがある。
[0134] 上記で説明されたように、GPU12は、GPU12内の1つまたは複数のブロックがクロックサイクル(立上りエッジ〜立上りエッジまたは立下りエッジ〜立下りエッジ)の間アクティブである場合、アクティブであると見なされる。アクティブ時間は、バス帯域幅の関数でなく、動作周波数の関数である。たとえば、アクティブ時間は、所与の作業負荷(たとえば、1つのフレームの処理)のための特定の動作周波数についてのGPU12のクロック領域における動作の数の関数であり、ここで、アクティブ時間は動作周波数に反比例する。
[0135] GPU12のストール時間は、GPU12のブロックがバスデータを待ってストールされる時間の量であり、特定のバス速度についてのメモリ動作(たとえば、システムメモリ10へのアクセス)の数の関数である。したがって、ストール時間は、大部分がバス帯域幅の関数である。
[0136] DPM32は、GPU12のビジー時間を決定するために、ビジーサイクルカウンタレジスタ37を読み取り得、ここで、ビジー時間はアクティブ時間+ストール時間に等しい。ビジー時間から、DPM32は、ビジー割合(たとえば、時間期間で除算されたビジー時間)を決定し得る。DPM32は、アクティブ時間を時間期間で除算し、ストール時間を時間期間で除算し、値を互いに加算することによってビジー割合を決定することができることを理解されたい。
[0137] ビジー割合に基づいて、DPM32は、GPU12の動作点を調整することが実現可能であるかどうかを決定し得る。たとえば、DPM32は、異なる動作点のテーブルを、動作点の各々に関連するあらかじめ設定されたアップスケールしきい値とともに記憶し得る。アップスケールしきい値は、しばしば、すべての動作点について同じであるが、異なることもある。DPM32を介した、回路25は、ビジー割合が、異なる動作点のうちの1つにおいてどのようになるかを計算し、ビジー割合をそれのアップスケールしきい値(たとえば、90%)と比較し、比較に基づいてGPU12の動作点を調整し得る。たとえば、現在の動作点のためのビジー割合が、現在の動作点のアップスケールしきい値よりも小さいと仮定する。より低い動作点におけるビジー割合が、依然として、このより低い動作点のアップスケールしきい値よりも小さい場合、DPM32を介した、回路25は、動作点をこのより低い動作点に調整し得る。より低い動作点は、現在の動作点の動作周波数よりも低い動作周波数と、現在の動作点のバス帯域幅と同じであるバス帯域幅とに関連する動作点、現在のバス帯域幅よりも低いバス帯域幅と、現在の動作点の動作周波数と同じである動作周波数とに関連する動作点、または現在の動作点の動作周波数よりも低い動作周波数と、現在のバス帯域幅よりも低いバス帯域幅とに関連する動作点である。現在の動作点のためのビジー割合が現在の動作点のアップスケールしきい値よりも大きい場合、DPM32を介した、回路25は、より高い動作点に調整し得る。
[0138] 他の動作点におけるビジー割合を決定するために、DPM32を介した、回路25は、他の動作点におけるアクティブ時間とストール時間とを別個の値として決定する。たとえば、GPU12が、第1の動作周波数と第1のバス帯域幅とを有する第1の動作点と呼ばれる、現在の動作点において動作していると仮定する。この例では、第2の動作点と呼ばれる、他の動作点は、第2の動作周波数と第2のバス帯域幅とを有する。
[0139] 第2の動作点におけるGPU12のアクティブ時間は、第1の動作点におけるGPU12のアクティブ時間、および第1の動作周波数と第2の動作周波数との間の比に基づく。たとえば、DPM32を介した、回路25は、第2の動作点におけるアクティブ時間が、(第1の動作周波数/第2の動作周波数)を乗算された第1の動作点におけるアクティブ時間に等しいと決定し得る。
[0140] 第2の動作点におけるGPU12のストール時間は、第1の動作点におけるGPU12のストール時間、および第1のバス帯域幅と第2のバス帯域幅との間の比に基づく。たとえば、DPM32を介した、回路25は、第2の動作点におけるストール時間が、(第1のバス帯域幅/第2のバス帯域幅)を乗算された第1の動作点におけるストール時間に等しいと決定し得る。第1のバス帯域幅は、有効な現在のバス帯域幅であり、必ずしも特定の動作点に関連するバス帯域幅とは限らないことを理解されたい。上記で説明されたように、デバイス2の、CPU6、GPU12、および場合によっては他の構成要素は、各々バス20上で転送しているデータの量を決定し、バス帯域幅がどのようになるべきであるかを決定するバスインターフェースを含む。これらの構成要素は、決定されたバス帯域幅情報を、CPU6または別の処理ユニット上で動作するバスドライバに出力し得、このバスドライバは、実際のバス帯域幅がどのようになるべきであるかを決定し得る。たとえば、CPU6は、特定のバス帯域幅に投票し得るが、他の構成要素からの投票に基づいて、異なるバス帯域幅を決定し得る。
[0141] 基本例として、現在の動作点(たとえば、第1の動作点)について、処理ユニットがアクティブ時間である5msであり、ストール時間が1msであり、動作周波数が200MHzであり、有効バス帯域幅が2GB/sであると仮定する。異なる動作点のための記憶されたテーブルによって示されるように、第2の動作点について、動作周波数が100MHzであり、バス帯域幅が1GB/sであると仮定する。この例では、DPM32を介した、回路25は、第2の動作点におけるアクティブ時間を5ms*(200MHz/100MHz)=10msと決定し、第2の動作点におけるストール時間を1ms*(2GB/s/1GB/s)=2msと決定し得る。
[0142] この例では、DPM32を介した、回路25は、第2の動作点におけるビジー時間を10ms+2ms=12msであると決定し得るが、第1の動作点におけるビジー時間は、5ms+1ms=6msであった。DPM32を介した、回路25が、アクティブサイクルカウンタレジスタ35またはビジーサイクルカウンタレジスタ37を読み取る時間期間が、16msごと場合、第1の動作点におけるビジー割合は、6ms/16ms=37.5%であり、第2の動作点におけるビジー割合は、12ms/16ms=75%である。しきい値が80%である場合、DPM32を介した、回路25は、性能に影響を及ぼすことなしに電力を節約するために、GPU12の動作点を第1の動作点から第2の動作点に調整することが安全であると決定し得る。しかしながら、しきい値が70%である場合、DPM32を介した、回路25は、GPU12の動作点を第1の動作点から第2の動作点に調整することが安全でないと決定し得、GPU12の動作点を調整しないことがあるか、または動作点が性能劣化なしにそれに調整され得る別の動作点を識別することを試み得る。
[0143] 第1の動作点は、GPU12のための第1の動作周波数と、GPU12をシステムメモリ10に相互接続するバス20のための第1のバス帯域幅とを識別する。しかしながら、第1のバス帯域幅は実際のバス帯域幅ではないことがある。例示的な技法では、DPM32を介した、回路25は、計算目的のために有効バス帯域幅を使用し得るが、DPM32を介した、回路25が、同様に計算のために第1の動作点に関連するバス帯域幅を使用することが可能である。本開示では、第1のバス帯域幅は、現在の動作点のための有効バス帯域幅、または現在の動作点に関連するバス帯域幅のいずれかを総称的に指すことがある。
[0144] 第2の動作点は、GPU12のための第2の動作周波数と、GPU12をシステムメモリ10に相互接続するバス20のための第2のバス帯域幅とを識別する。いくつかの例では、第1の動作周波数と第2の動作周波数とは異なり、第1のバス帯域幅と第2のバス帯域幅とは同じである。いくつかの例では、第1の動作周波数と第2の動作周波数とは同じであり、第1のバス帯域幅と第2のバス帯域幅とは異なる。いくつかの例では、第1の動作周波数と第2の動作周波数とは異なり、第1のバス帯域幅と第2のバス帯域幅とは異なる。
[0145] また、上記の例は、アクティブ時間およびストール時間から決定された、ビジー時間からビジー割合を決定することを用いて説明された。しかしながら、ビジー割合は、アクティブ時間割合およびストール時間割合から直接計算され得る。たとえば、DPM32を介した、回路25は、第1の動作点におけるアクティブ時間割合(たとえば、時間期間で除算されたアクティブ時間)を決定し、第1の動作点におけるストール時間割合(たとえば、時間期間で除算されたストール時間)を決定し得る。次いで、DPM32を介した、回路25は、第1の動作点におけるアクティブ時間割合に動作周波数間の比を乗算することによって、第2の動作点におけるアクティブ時間割合を決定し、ストール時間割合にバス帯域幅間の比を乗算することによって、第2の動作点におけるストール時間割合を決定し得る。DPM32を介した、回路25は、次いで、第2の動作点におけるビジー割合を決定するために、第2の動作点におけるアクティブ時間割合とストール時間割合とを加算する。
[0146] 本開示で説明される技法は、アクティブ時間とアクティブ時間割合とストール時間とストール時間割合とに基づいて適用され得るので、本開示は、アクティブ時間の量およびアクティブ時間割合を総称的に呼ぶために「アクティブ時間(active time)」という用語を使用し、ストール時間の量およびストール時間割合を総称的に呼ぶために「ストール時間(stall time)」という用語を使用する。また、本技法はCPU6およびGPU12に関して説明されるが、概して、本技法は、(処理回路とも呼ばれる)様々なタイプの処理ユニットに適用可能であり得る。
[0147] たとえば、CPU6の、DPM32を介した、回路25は、第1の動作点における処理ユニット(たとえば、GPU12、DSPなど)の第1のアクティブ時間(たとえば、アクティブ時間の第1の量または第1のアクティブ時間割合)を決定し、第1の動作点における処理ユニットの第1のストール時間(たとえば、ストール時間の第1の量または第1のストール時間割合)を決定する。DPM32を介した、回路25はまた、第2の動作点における第1のアクティブ時間に基づいて、処理ユニットの第2のアクティブ時間(たとえば、アクティブ時間の第2の量または第2のアクティブ時間割合)を決定し、第2の動作点における第1のストール時間に基づいて、処理ユニットの第2のストール時間(たとえば、ストール時間の第2の量または第2のストール時間割合)を決定する。
[0148] DPM32を介した、回路25は、第2のアクティブ時間と第2のストール時間とに基づいて、処理ユニットの動作点を、第1の動作点から第2の動作点に調整すべきかどうかを決定する。DPM32を介した、回路25は、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第1の動作点から第2の動作点に調整する。
[0149] DPM32を介した、回路25は、第2のアクティブ時間と第2のストール時間とに基づいてビジー割合を決定し、ビジー割合をしきい値と比較し、比較に基づいて、動作点を調整すべきかどうかを決定し得る。処理ユニットの第2のアクティブ時間を決定するために、DPM32を介した、回路25は、第1のアクティブ時間、および第1の動作点のための処理ユニットの動作周波数と第2の動作点のための処理ユニットの動作周波数との比(たとえば、第1の動作点における動作周波数と第2の動作点における動作周波数との間の比を乗算された第1のアクティブ時間)に基づいて、第2のアクティブ時間を決定する。第1のストール時間に基づいて第2のストール時間を決定するために、DPM32を介した、回路25は、第1のストール時間、および第1の動作点のためのバス帯域幅(たとえば、GPU12が第1の動作点において動作している間の有効バス帯域幅、または第1の動作点に関連するバス帯域幅)と、第2の動作点のためのバス帯域幅との比(たとえば、第1の動作点におけるバス帯域幅と第2の動作点におけるバス帯域幅との間の比を乗算された第1のストール時間)に基づいて、第2のストール時間を決定する。
[0150] 図3Aおよび図3Bは、本開示で説明される例による、動作周波数に応じたビジー割合の一例を示す概念図である。図3Aでは、動作周波数は200MHzであり、時間期間にわたって、GPU12は、時間の半分ビジーであり(たとえば、50%ビジー割合)、残りの50%の間アイドルである。異なる動作周波数におけるビジー時間が、現在の動作周波数におけるビジー時間、および周波数間の比のみに基づいて決定され得るという仮定が行われた場合、図3Aに示されているように、CPU6は、動作周波数が100MHzに半減されたときのビジー割合が100%(たとえば、50%*2)になると決定し得る。この場合、CPU6は、100%がしきい値(たとえば、90%ビジー割合)よりも大きいので、GPU12の動作周波数が100MHzに低減されるべきではないと決定し得る。
[0151] しかしながら、異なる動作周波数におけるビジー時間が、現在の動作周波数におけるビジー時間のみに基づくという仮定は、ストール時間が動作周波数の関数でないので、誤っていることがある。たとえば、図3Bに示されているように、アクティブ時間およびストール時間は、200MHz動作周波数と100MHz動作周波数の両方について別々に示されている。この例では、バス帯域幅が変化しない場合、ストール時間は、動作周波数が50%だけ低減された場合に変化しない。アクティブ時間のみが2倍になる。この場合、第2の動作周波数におけるアクティブ時間とストール時間との加算は、しきい値よりも小さく、CPU6は、GPU12の動作周波数を200MHzから100MHzに調整し得る。
[0152] たとえば、図3Bでは、200MHz動作周波数の場合、50%のビジー時間について、アクティブ時間割合は時間期間の30%であり、ストール時間割合は時間期間の20%であると仮定し、これは、図3Aに整合する。本開示で説明される技法によれば、CPU6は、100MHzにおけるアクティブ時間割合が60%(たとえば、30%*200MHz/100MHz)であり、ストール時間割合が20%のままであることになる(たとえば、バス帯域幅が一定である)と決定し得る。この場合、ビジー割合は、ビジー割合が、図3Aの場合のように、100%であり、しきい値よりも大きくなるという決定ではなく、80%であり、しきい値よりも小さい。
[0153] 図4Aおよび図4Bは、本開示で説明される例による、バス帯域幅に応じたビジー割合の一例を示す概念図である。図4Aおよび図4Bは、図3Aおよび図3Bのものと同様であるが、バス帯域幅が変化し、動作周波数が一定である観点からのものである。
[0154] たとえば、図4Aは、バス帯域幅が減少し、ビジー時間の増加を生じるビジー時間計算を示している。この場合、図3Aに関して説明された技法など、いくつかの技法は、ビジー時間の変化がないと決定し得る。しかしながら、バス20は、限られた帯域幅を有するので、ビジー時間は、図4Aに示されているように増加する。したがって、図3Aに関して説明された技法のような、技法を用いて、CPU6は、ビジー割合が、しきい値よりも小さいのか大きいのかを適切に決定する可能でないことがある。
[0155] しかしながら、本開示で説明される技法では、(たとえば、回路25のDPM32を介した)CPU6は、別々に、アクティブ時間、またはGPU12がアクティブである時間の割合(percentage of time)を決定し、ストール時間、またはGPU12がストールされる時間の割合を決定し、次いで、これらの成分値に基づいてビジー割合を決定し得る。この場合、CPU6は、バス帯域幅を低減すべきか否かをより良く決定するために、ビジー割合が、しきい値よりも大きいのか小さいのかをより良く決定することが可能であり得る。たとえば、図4Bに示されているように、CPU6は、バス帯域幅の低減があるときにストール時間のみが増加し、アクティブ時間が一定のままであることになると適切に決定し得る。CPU6は、動作点を調整すべきかどうかを決定するために、別個の値としてアクティブ時間とストール時間とを使用し得る。
[0156] 図5は、異なる動作周波数とバス帯域幅との組合せのための動作点の例を示す概念図である。たとえば、図5は、(たとえば、DPM32を介した)CPU6の回路25が、異なる動作点のために取り出し得るテーブルを概念的に示す。たとえば、図5に示されている例では、OPP00が、600MHzの動作周波数と12.7GB/sのバス帯域幅とを識別し、OPP10が、420MHzの動作周波数と12.7GB/sのバス帯域幅とを識別し、以下同様であり、ここで、OPP33が、200MHzの動作周波数と2.2GB/sのバス帯域幅とを識別する。図5は、異なる動作周波数およびバス帯域幅の一例にすぎず、動作周波数とバス帯域幅とのより多くの、より少ない、または異なる組合せが可能である。
[0157] 図5に示されている例では、GPU12がOPP11(たとえば、420MHzおよび7.0GB/s)において動作していると仮定する。しかしながら、有効バス帯域幅が7.0GB/sとは異なることが可能である。説明しやすいように、以下は、有効バス帯域幅が7.0GB/sであると仮定するが、有効バス帯域幅が異なる例では、有効バス帯域幅は計算において使用される。
[0158] また、OPP11において、ビジー割合がしきい値よりも実質的に小さいとCPU6が決定したと仮定する。たとえば、アップスケールしきい値は、それを超えると性能劣化があり得るビジー割合の上限を示し得る。CPU6が、OPP11におけるビジー割合が、OPP11のアップスケールしきい値よりも小さいと決定し、GPU12のより低い動作点におけるビジー割合が、これらのより低い動作点の対応するアップスケールしきい値よりも大きいと決定した場合、CPU6は、GPU12のこれらのより低い動作点に調整すべきかどうかを決定しないことがある。しかしながら、CPU6が、GPU12のより低い動作点のうちの1つにおけるビジー割合が、GPU12のこのより低い動作点のアップスケールしきい値よりも小さいと決定した場合、CPU6は、本開示で説明される例示的な技法を実施し得る。
[0159] CPU6が、動作点が調整されるべきであると決定した場合、CPU6は、隣接動作点において、本開示で説明される技法を使用して、ビジー割合がどのようになるかを決定し得る。たとえば、CPU6は、OPP11から延びる矢印によって示されているように、OPP21、OPP22、およびOPP12におけるビジー割合を決定し、この動作点のアップスケールしきい値未満のビジー割合をもつ最低動作点を決定し得る。CPU6は、次いで、GPU12に、決定された動作点において動作させ得る。
[0160] 別の例として、CPU6は、動作点の各々についてのビジー割合を順次決定し、CPU6が、ビジー割合がしきい値よりも小さい動作点を見つけたとき、決定することを停止し得る。ビジー割合がどのようになるかを決定するための動作点のシーケンスは、設計選択の事項であり得、本開示によって様々な置換が企図される。
[0161] 図5に示されている例では、CPU6は、最高3つの動作点におけるビジー割合を決定し得る。他の例では、CPU6は、3つの動作点よりも多いまたは少ない動作点におけるビジー割合を決定し得る。また、動作点は、必ずしも、現在の動作点に隣接する必要があるとは限らない。
[0162] 図6は、本開示で説明される技法による、動作周波数およびバス帯域幅決定の例示的な方法を示すフローチャートである。図6の例は、回路25が例示的な技法を実施するように構成されることに関して説明される。回路25は、図6に示されている例を実施するように回路25を構成するDPM32の命令を実行するように構成され得る。別の例として、DPM32は、回路25の固定機能回路ブロックであり得る。
[0163] さらに、回路25はCPU6の一部であるものとして示されているが、いくつかの例では、回路25は、それの動作点が決定されつつある処理ユニットの一部であり得る。たとえば、デバイス2は、処理ユニット(たとえば、GPU12またはDSP)と、本開示で説明される例示的な技法を使用して処理ユニットの動作点を決定するように構成された回路25とを含み得る。いくつかの例では、CPU6が回路25を含む。いくつかの例では、処理ユニットが回路25を含む。いくつかの例では、CPU6が回路25を含み、回路25は、例示的な技法を使用してCPU6の動作点を決定するように構成される。
[0164] 図6の例では、DPM32を介した、回路25は、第1の動作点における処理ユニットの第1のアクティブ時間を決定する(50)。第1のアクティブ時間は、処理ユニットが、時間期間内で、データを処理する際の処理ユニットのクロック領域において、アクティブである時間の量または時間の割合を示す。
[0165] 一例として、(たとえば、CPU6の回路25上で実行する、またはCPU6の回路25上の回路ブロックとして形成された)DPM32は、ある時間期間後にアクティブサイクルカウンタレジスタ35の値を読み取り、アクティブ時間を決定するためにその値を動作周波数で除算する。DPM32は、次いで、アクティブ時間割合を決定するために、アクティブ時間を時間期間で除算し得る。
[0166] 回路25は、第1の動作点における処理ユニットの第1のストール時間を決定する(52)。第1のストール時間は、処理ユニットが、時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示し得る。
[0167] 一例として、DPM32は、ある時間期間後にビジーサイクルカウンタレジスタ37の値を読み取り、ビジー時間値からアクティブ時間値を減算し、ストール時間を決定するために、得られた値を動作周波数で除算する。DPM32は、次いで、ストール時間割合を決定するために、ストール時間を時間期間で除算し得る。
[0168] 回路25は、第2の動作点における第1のアクティブ時間に基づいて、処理ユニットの第2のアクティブ時間を決定する(54)。たとえば、回路25は、第1のアクティブ時間、および第1の動作点のための処理ユニットの動作周波数と、第2の動作点のための処理ユニットの動作周波数との比に基づいて、第2のアクティブ時間を決定する。
[0169] 回路25は、第2の動作点における第1のストール時間に基づいて、処理ユニットの第2のストール時間を決定する(56)。たとえば、回路25は、第1のストール時間、および処理ユニットが第1の動作点において動作しているときの有効バス帯域幅と、第2の動作点のためのバス帯域幅との比に基づいて、第2のストール時間を決定する。
[0170] この例では、第1の動作点は、処理ユニットのための第1の動作周波数と、処理ユニットをシステムメモリ10に相互接続するバス20のための第1のバス帯域幅とを識別する。第2の動作点は、処理ユニットのための第2の動作周波数と、処理ユニットをシステムメモリ10に相互接続するバス20のための第2のバス帯域幅とを識別する。第1の動作周波数と第2の動作周波数とは異なり得(たとえば、第2の動作周波数は第1の動作周波数よりも小さい)、第1のバス帯域幅と第2のバス帯域幅とは同じであり得るか、第1の動作周波数と第2の動作周波数とは同じであり得、第1のバス帯域幅と第2のバス帯域幅とは異なり得る(たとえば、第2のバス帯域幅は第1のバス帯域幅よりも小さい)か、または第1の動作周波数と第2の動作周波数とは異なり得、第1のバス帯域幅と第2のバス帯域幅とは異なる(たとえば、第2の動作周波数は第1の動作周波数よりも小さく、第2のバス帯域幅は第1のバス帯域幅よりも小さい)。
[0171] 回路25は、第2のアクティブ時間と第2のストール時間とに基づいて、処理ユニットの動作点を、第1の動作点から第2の動作点に調整すべきかどうかを決定する(58)。たとえば、回路25は、第2のアクティブ時間と第2のストール時間とに基づいてビジー割合を決定し、ビジー割合をしきい値と比較し、比較に基づいて、処理ユニットの動作点を調整すべきかどうかを決定し得る。
[0172] 回路25は、処理ユニットの動作点を調整するという決定に基づいて、処理ユニットの動作点を、第1の動作点から第2の動作点に調整する(60)。このようにして、DPM32を介した、回路25は、性能に影響を及ぼすことなしに電力を最小限に抑えるように動作点を調整し得る。
[0173] 図7Aおよび図7Bは、動作点を決定する例示的なアルゴリズムを示すフローチャートである。図7Aおよび図7Bは、回路25のDPM32に関して説明される。DPM32は、現在の動作点における現在のアクティブ時間およびストール時間を決定する(70)。たとえば、DPM32は、現在のアクティブ時間を決定するために、アクティブ時間値をアクティブサイクルカウンタレジスタ35から読み取り得る。DPM32は、ビジーサイクルカウンタ値をビジーサイクルカウンタレジスタ37から読み取り、現在のストール時間を決定するためにアクティブ時間値を減算する。説明しやすいように、現在の動作点が図5のOPP11であると仮定する。
[0174] DPM32は、それぞれのより低い動作周波数およびより低いバス帯域幅におけるアクティブ時間およびストール時間を決定する(72)。たとえば、DPM32は、OPP22におけるアクティブ時間およびストール時間を決定し得、ここで、OPP22におけるアクティブ時間は、現在のアクティブ時間*(現在の動作周波数/OPP22の動作周波数)に等しく、OPP22におけるストール時間は、現在のストール時間*(現在の有効バス帯域幅/OPP22のバス帯域幅)に等しい。DPM32は、次いで、OPP22におけるビジー割合を決定する(74)。
[0175] OPP22におけるビジー割合がしきい値(たとえば、90%)よりも小さい場合(76のYES)、DPM32は、ターゲット動作周波数およびターゲットバス帯域幅をOPP22の動作周波数およびバス帯域幅に設定する(78)。アルゴリズムは、次いで、図7Bに記載されているブロックAに進み得る。
[0176] OPP22におけるビジー割合がしきい値(たとえば、90%)以上である場合(76のNO)、DPM32は、同じバス帯域幅およびより低い動作周波数(たとえば、OPP21)におけるビジー割合を決定する(80)。たとえば、上記と同様に、DPM32は、OPP21におけるアクティブ時間を、現在のアクティブ時間*(現在の動作周波数/OPP21の動作周波数)として決定し得、OPP21におけるストール時間は、現在のストール時間*(現在のバス帯域幅/OPP21のバス帯域幅)に等しい。OPP21におけるアクティブ時間およびストール時間に基づいて、DPM32は、OPP21におけるビジー割合を決定し得る。
[0177] OPP21におけるビジー割合がしきい値(たとえば、90%)よりも小さい場合(82のYES)、DPM32は、ターゲット動作周波数をOPP21の動作周波数に設定する(84)。アルゴリズムは、次いで、図7Bに記載されているブロックAに進み得る。
[0178] OPP21におけるビジー割合がしきい値(たとえば、90%)以上である場合(82のNO)、DPM32は、同じ動作周波数およびより低いバス帯域幅(たとえば、OPP12)におけるビジー割合を決定する(86)。たとえば、上記と同様に、DPM32は、OPP12におけるアクティブ時間を、現在のアクティブ時間*(現在の動作周波数/OPP12の動作周波数)として決定し得、OPP12におけるストール時間は、現在のストール時間*(現在のバス帯域幅/OPP12のバス帯域幅)に等しい。OPP12におけるアクティブ時間およびストール時間に基づいて、DPM32は、OPP12におけるビジー割合を決定し得る。
[0179] OPP12におけるビジー割合がしきい値(たとえば、90%)よりも小さい場合(88のYES)、DPM32は、ターゲットバス帯域幅をOPP12のバス帯域幅に設定し(90)、アルゴリズムは、次いで、図7Bに記載されているブロックAに進み得る。OPP12におけるビジー割合がしきい値(たとえば、90%)以上である場合(88のNO)、アルゴリズムは、次いで、図7Bに記載されているブロックAに進み得る。
[0180] 図7Bに示されているように、DPM32は、(ブロック78または84において決定されていることがある)ターゲット動作周波数が現在の周波数とは異なるかどうかを決定する(92)。ターゲット動作周波数が現在の周波数とは異なる場合(92のYES)、DPM32は、動作周波数をターゲット周波数にスケーリングする。
[0181] ターゲット動作周波数が現在の周波数とは異ならない場合(92のNO)、または動作周波数をスケーリングした後、DPM32は、(ブロック78または90において決定されていることがある)ターゲットバス帯域幅が現在のバス帯域幅とは異なるかどうかを決定する(96)。ターゲットバス帯域幅が現在のバス帯域幅とは異なる場合(96のYES)、DPM32はターゲットバス帯域幅のための投票を送る(98)。ターゲットバス帯域幅が現在のバス帯域幅とは異ならない場合(96のNO)、または動作周波数をスケーリングした後、DPM32は、一定の遅延の後に、または次のフレームの間アルゴリズムを繰り返し、再び現在のアクティブ時間およびストール時間を決定し、ブロック70〜98に示されているアルゴリズムを繰り返し得る。
[0182] 1つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、1つまたは複数の命令またはコードとしてコンピュータ可読媒体上に記憶され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含み得る。このようにして、コンピュータ可読媒体は、概して、非一時的である有形コンピュータ可読記憶媒体に対応し得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コードおよび/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る、任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
[0183] 限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスクストレージ、磁気ディスクストレージ、または他の磁気ストレージデバイス、フラッシュメモリ、あるいは命令またはデータ構造の形態の所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る、任意の他の媒体を備えることができる。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的媒体を含まないが、代わりに非一時的有形記憶媒体を対象とすることを理解されたい。本明細書で使用されるディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(登録商標)(disc)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびBlu−ray(登録商標)ディスク(disc)を含み、ここで、ディスク(disk)は、通常、データを磁気的に再生し、ディスク(disc)は、データをレーザーで光学的に再生する。上記の組合せもコンピュータ可読媒体の範囲内に含まれるべきである。
[0184] 命令は、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブル論理アレイ(FPGA)、あるいは他の等価な集積回路またはディスクリート論理回路など、1つまたは複数のプロセッサによって実行され得る。したがって、本明細書で使用される「プロセッサ(processor)」という用語は、上記の構造、または本明細書で説明された技法の実装に好適な他の構造のいずれかを指すことがある。さらに、いくつかの態様では、本明細書で説明された機能は、符号化および復号のために構成された専用ハードウェアおよび/またはソフトウェアモジュール内に与えられるか、あるいは複合コーデックに組み込まれ得る。また、本技法は、1つまたは複数の回路または論理要素で十分に実装され得る。
[0185] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置で実装され得る。本開示では、開示される技法を実施するように構成されたデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットが説明されたが、それらの構成要素、モジュール、またはユニットは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明されたように、様々なユニットが、好適なソフトウェアおよび/またはファームウェアとともに、上記で説明された1つまたは複数のプロセッサを含めて、コーデックハードウェアユニットにおいて組み合わせられるか、または相互動作可能なハードウェアユニットの集合によって与えられ得る。
[0186] 様々な例が説明された。これらおよび他の例は以下の特許請求の範囲内に入る。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
[C1]
動作点決定の方法であって、前記方法が、
第1の動作点における処理ユニットの第1のアクティブ時間を決定することと、
前記第1の動作点における前記処理ユニットの第1のストール時間を決定することと、
第2の動作点における前記第1のアクティブ時間に基づいて、前記処理ユニットの第2のアクティブ時間を決定することと、
前記第2の動作点における前記第1のストール時間に基づいて、前記処理ユニットの第2のストール時間を決定することと、
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの前記動作点を調整することと
を備える、方法。
[C2]
前記第1の動作点が第1の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第1の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第1のバス帯域幅であり、ここにおいて、前記第2の動作点が、第2の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第2のバス帯域幅を識別し、ここにおいて、
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第1のバス帯域幅と前記第2のバス帯域幅とが同じであるか、
前記第1の動作周波数と前記第2の動作周波数とが同じであり、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さく、異なるか、または
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さいか、
のうちの1つである、C1に記載の方法。
[C3]
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定することが、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定することを備える、
C1に記載の方法。
[C4]
前記処理ユニットの前記第2のアクティブ時間を決定することが、
前記第1のアクティブ時間、および前記第1の動作点のための前記処理ユニットの動作周波数と、前記第2の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第2のアクティブ時間を決定すること
を備える、C1に記載の方法。
[C5]
前記処理ユニットの前記第2のストール時間を決定することは、
前記第1のストール時間、および前記処理ユニットが前記第1の動作点において動作しているときの有効バス帯域幅と、前記第2の動作点のためのバス帯域幅との比に基づいて、前記第2のストール時間を決定すること
を備える、C1に記載の方法。
[C6]
前記第1のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第1のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、C1に記載の方法。
[C7]
前記処理ユニットが第2の処理ユニットを備え、ここにおいて、
前記第1のアクティブ時間を決定することが、第1の処理ユニットを用いて、前記第1のアクティブ時間を決定することを備え、
前記第1のストール時間を決定することが、前記第1の処理ユニットを用いて、前記第1のストール時間を決定することを備え、
前記第2のアクティブ時間を決定することが、前記第1の処理ユニットを用いて、前記第2のアクティブ時間を決定することを備え、
前記第2のストール時間を決定することが、前記第1の処理ユニットを用いて、前記第2のストール時間を決定することを備え、
前記動作点を調整すべきかどうかを決定することが、前記第1の処理ユニットを用いて、前記動作点を調整すべきかどうかを決定することを備え、
前記動作点を調整することが、前記第1の処理ユニットを用いて、前記動作点を調整することを備える、
C1に記載の方法。
[C8]
前記第1の処理ユニットが中央処理ユニット(CPU)を備え、前記第2の処理ユニットが、グラフィックス処理ユニット(GPU)またはデジタル信号プロセッサ(DSP)のうちの1つを備える、C7に記載の方法。
[C9]
前記第1の処理ユニットと前記第2の処理ユニットとが同じ処理ユニットである、C7に記載の方法。
[C10]
動作点決定のためのデバイスであって、前記デバイスが、
処理ユニットと、
回路と
を備え、前記回路が、
第1の動作点における前記処理ユニットの第1のアクティブ時間を決定することと、
前記第1の動作点における前記処理ユニットの第1のストール時間を決定することと、
第2の動作点における前記第1のアクティブ時間に基づいて、前記処理ユニットの第2のアクティブ時間を決定することと、
前記第2の動作点における前記第1のストール時間に基づいて、前記処理ユニットの第2のストール時間を決定することと、
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、前記処理ユニットの動作点を、前記第1の動作点から前記第2の動作点に調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの前記動作点を調整することと
を行うように構成された、
デバイス。
[C11]
前記回路が、前記第1のアクティブ時間を決定することと、前記第1のストール時間を決定することと、前記第2のアクティブ時間を決定することと、前記第2のストール時間を決定することと、前記動作点を調整すべきかどうかを決定することと、前記動作点を調整することとを行うように前記回路を構成する動的電力マネージャ(DPM)の命令を実行するように構成された、C10に記載のデバイス。
[C12]
中央処理ユニット(CPU)をさらに備え、ここにおいて、前記CPUが前記回路を備え、ここにおいて、前記処理ユニットが、グラフィックス処理ユニット(GPU)またはデジタル信号プロセッサ(DSP)のうちの1つを備える、
C10に記載のデバイス。
[C13]
前記処理ユニットが前記回路を含む、C10に記載のデバイス。
[C14]
システムメモリと、
前記処理ユニットを前記システムメモリに相互接続するバスと
をさらに備え、
ここにおいて、前記第1の動作点が第1の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第1の動作点において動作しているときの前記バスのバス帯域幅が、第1のバス帯域幅であり、ここにおいて、前記第2の動作点が、第2の動作周波数を識別し、前記バスのための第2のバス帯域幅を識別し、ここにおいて、
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第1のバス帯域幅と前記第2のバス帯域幅とが同じであるか、
前記第1の動作周波数と前記第2の動作周波数とが同じであり、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さく、異なるか、または
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さいか、
のうちの1つである、
C10に記載のデバイス。
[C15]
前記回路が、
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、ビジー割合を決定することと、
前記ビジー割合をしきい値と比較することと
を行うように構成され、
ここにおいて、前記動作点を調整すべきかどうかを決定するために、前記回路が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するように構成された、
C10に記載のデバイス。
[C16]
前記処理ユニットの前記第2のアクティブ時間を決定するために、前記回路が、
前記第1のアクティブ時間、および前記第1の動作点のための前記処理ユニットの動作周波数と、前記第2の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第2のアクティブ時間を決定すること
を行うように構成された、C10に記載のデバイス。
[C17]
前記処理ユニットの前記第2のストール時間を決定するために、前記回路は、
前記第1のストール時間、および前記処理ユニットが前記第1の動作点において動作しているときの有効バス帯域幅と、前記第2の動作点のためのバス帯域幅との比に基づいて、前記第2のストール時間を決定すること
を行うように構成された、C10に記載のデバイス。
[C18]
前記第1のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第1のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、C10に記載のデバイス。
[C19]
動作点決定のためのデバイスであって、前記デバイスが、
第1の動作点における処理ユニットの第1のアクティブ時間を決定するための手段と、
前記第1の動作点における前記処理ユニットの第1のストール時間を決定するための手段と、
第2の動作点における前記第1のアクティブ時間に基づいて、前記処理ユニットの第2のアクティブ時間を決定するための手段と、
前記第2の動作点における前記第1のストール時間に基づいて、前記処理ユニットの第2のストール時間を決定するための手段と、
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定するための手段と、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの前記動作点を調整するための手段と
を備える、デバイス。
[C20]
前記第1の動作点が第1の動作周波数を識別し、ここにおいて、前記処理ユニットが前記第1の動作点において動作しているとき前記処理ユニットをシステムメモリに相互接続するバスのバス帯域幅が、第1のバス帯域幅であり、ここにおいて、前記第2の動作点が、第2の動作周波数を識別し、前記処理ユニットを前記システムメモリに相互接続する前記バスのための第2のバス帯域幅を識別し、ここにおいて、
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第1のバス帯域幅と前記第2のバス帯域幅とが同じであるか、
前記第1の動作周波数と前記第2の動作周波数とが同じであり、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さく、異なるか、または
前記第2の動作周波数が前記第1の動作周波数よりも小さく、前記第2のバス帯域幅が前記第1のバス帯域幅よりも小さいか、
のうちの1つである、C19に記載のデバイス。
[C21]
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、ビジー割合を決定するための手段と、
前記ビジー割合をしきい値と比較するための手段と
をさらに備え、
ここにおいて、前記動作点を調整すべきかどうかを決定するための前記手段が、前記ビジー割合と前記しきい値との前記比較に基づいて、前記処理ユニットの前記動作点を調整すべきかどうかを決定するための手段を備える、
C19に記載のデバイス。
[C22]
前記処理ユニットの前記第2のアクティブ時間を決定するための前記手段が、
前記第1のアクティブ時間、および前記第1の動作点のための前記処理ユニットの動作周波数と、前記第2の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第2のアクティブ時間を決定するための手段
を備える、C19に記載のデバイス。
[C23]
前記処理ユニットの前記第2のストール時間を決定するための前記手段は、
前記第1のストール時間、および前記処理ユニットが前記第1の動作点において動作しているときの有効バス帯域幅と、前記第2の動作点のためのバス帯域幅との比に基づいて、前記第2のストール時間を決定するための手段
を備える、C19に記載のデバイス。
[C24]
前記第1のアクティブ時間は、前記処理ユニットが前記処理ユニットのクロック領域において時間期間内でデータをアクティブ処理している時間の量または時間の割合を示し、ここにおいて、前記第1のストール時間は、前記処理ユニットが、前記時間期間中の別のクロック領域における動作を待つ間ストールされる時間の量または時間の割合を示す、C19に記載のデバイス。
[C25]
実行されたとき、1つまたは複数のプロセッサに、
第1の動作点における処理ユニットの第1のアクティブ時間を決定することと、
前記第1の動作点における前記処理ユニットの第1のストール時間を決定することと、
第2の動作点における前記第1のアクティブ時間に基づいて、前記処理ユニットの第2のアクティブ時間を決定することと、
前記第2の動作点における前記第1のストール時間に基づいて、前記処理ユニットの第2のストール時間を決定することと、
前記第2のアクティブ時間と前記第2のストール時間とに基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの動作点を調整すべきかどうかを決定することと、
前記処理ユニットの前記動作点を調整するという前記決定に基づいて、前記第1の動作点から前記第2の動作点に、前記処理ユニットの前記動作点を調整することと
を行わせる命令を記憶するコンピュータ可読記憶媒体。
[C26]
前記処理ユニットの前記第2のアクティブ時間を決定するために、前記命令が、前記1つまたは複数のプロセッサに、
前記第1のアクティブ時間、および前記第1の動作点のための前記処理ユニットの動作周波数と、前記第2の動作点のための前記処理ユニットの動作周波数との比に基づいて、前記第2のアクティブ時間を決定すること
を行わせる、C25に記載のコンピュータ可読記憶媒体。
[C27]
前記処理ユニットの前記第2のストール時間を決定するために、前記命令は、前記1つまたは複数のプロセッサに、
前記第1のストール時間、および前記処理ユニットが前記第1の動作点において動作しているときの有効バス帯域幅と、前記第2の動作点のためのバス帯域幅との比に基づいて、前記第2のストール時間を決定すること
を行わせる、C25に記載のコンピュータ可読記憶媒体。