(57)【要約】  プロセッサが、グラフィックス処理ユニット（ＧＰＵ）が現在のフレームのレンダリングを完了したときと、ＧＰＵが現在のフレームの直前にある、前のフレームのレンダリングを完了したときとの間の時間間隔に基づいて、現在のフレームをレンダリングするのにＧＰＵがどのくらいビジー状態であったかを決定する技法が説明される。プロセッサは、現在のフレームをレンダリングするのにＧＰＵがどのくらいビジー状態であったかの決定に基づいてＧＰＵのクロックレートを設定する。
2019508804.tif 000002
【特許請求の範囲】
【請求項１】
クロックレート決定の方法であって、
プロセッサを用いて、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記プロセッサを用いて、前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記プロセッサを用いて、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記プロセッサを用いて、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を備える、方法。
【請求項２】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項１に記載の方法。
【請求項３】
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
をさらに備え、
前記クロックレートを設定することは、前記クロックレートを前記決定されたクロックレートに設定することを備える、請求項１に記載の方法。
【請求項４】
前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、請求項１に記載の方法。
【請求項５】
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、請求項１に記載の方法。
【請求項６】
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、請求項１に記載の方法。
【請求項７】
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、請求項１に記載の方法。
【請求項８】
他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定すること
をさらに備える、請求項１に記載の方法。
【請求項９】
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
をさらに備え、
前記第１の時間インスタンスを決定することは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定することを備える、請求項１に記載の方法。
【請求項１０】
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定することは、前記ホストプロセッサを用いて、前記ＧＰＵに、前記クロックレートを設定するように命令することを備える、請求項１に記載の方法。
【請求項１１】
前記プロセッサは前記ＧＰＵを備える、請求項１に記載の方法。
【請求項１２】
クロックレート決定のためのデバイスであって、
第１のフレームおよび第２のフレームをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）によって使用されるグラフィックスデータを記憶するように構成されたメモリと、
集積回路を備えるプロセッサと
を備え、前記プロセッサは、
前記ＧＰＵが前記第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行うように構成される、デバイス。
【請求項１３】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項１２に記載のデバイス。
【請求項１４】
前記プロセッサは、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するように構成され、前記クロックレートを設定するために、前記プロセッサは、前記クロックレートを前記決定されたクロックレートに設定するように構成される、請求項１２に記載のデバイス。
【請求項１５】
前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、請求項１２に記載のデバイス。
【請求項１６】
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、請求項１２に記載のデバイス。
【請求項１７】
前記プロセッサは、
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、請求項１２に記載のデバイス。
【請求項１８】
前記プロセッサは、
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、請求項１２に記載のデバイス。
【請求項１９】
前記プロセッサは、他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定するように構成される、請求項１２に記載のデバイス。
【請求項２０】
前記プロセッサは、
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
を行うように構成され、
前記第１の時間インスタンスを決定するために、前記プロセッサは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定するように構成される、請求項１２に記載のデバイス。
【請求項２１】
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定するために、前記ホストプロセッサは、前記ＧＰＵに、前記クロックレートを設定するように命令するように構成される、請求項１２に記載のデバイス。
【請求項２２】
前記プロセッサは前記ＧＰＵを備える、請求項１２に記載のデバイス。
【請求項２３】
命令を記憶した非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されると１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行わせる、非一時的なコンピュータ可読記憶媒体。
【請求項２４】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項２３に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２５】
前記１つまたは複数のプロセッサに、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
を行わせる命令をさらに備え、
前記１つまたは複数のプロセッサに前記クロックレートを設定させる前記命令は、前記１つまたは複数のプロセッサに前記クロックレートを前記決定されたクロックレートに設定させる命令を備える、請求項２３に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２６】
前記１つまたは複数のプロセッサはホストプロセッサを備える、請求項２３に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２７】
クロックレート決定デバイスであって、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定するための手段と、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定するための手段と、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定するための手段と、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定するための手段と、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定するための手段と
を備える、デバイス。
【請求項２８】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項２７に記載のデバイス。
【請求項２９】
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するための手段
をさらに備え、
前記クロックレートを設定するための前記手段は、前記クロックレートを前記決定されたクロックレートに設定するための手段を備える、請求項２７に記載のデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
[0001]  本開示は、クロックレート調整に関し、より具体的には、グラフィック処理ユニット（ＧＰＵ）のクロックレート調整に関する。
【背景技術】
【０００２】
[0002]  モバイルデバイスは、限られたサイズおよび／または能力のバッテリによって電力供給される。典型的には、モバイルデバイスは、特に、電話をかける、電子メールをチェックする、画像／ビデオを録画／再生する、ラジオを聴く、ナビゲーション、ウェブブラウジング、ゲームをする、デバイスを管理する、および計算を行うために使用される。これらのアクションの多くは、いくつかのタスクを行うためにグラフィックス処理ユニット（ＧＰＵ：graphics processing unit）を利用する。例となるＧＰＵのタスクは、ディスプレイへのコンテンツのレンダリングと、（例えば、汎用ＧＰＵ（ＧＰＧＰＵ：general purpose GPU）動作における）汎用コンピュート計算を行うこととを含む。それゆえ、ＧＰＵは典型的には、モバイルデバイスにおいて電力を多く消費する。したがって、バッテリ寿命を長くするために、ＧＰＵの電力消費を管理することが有益である。
【発明の概要】
【０００３】
[0003]  一般に、本開示は、グラフィックス処理ユニット（ＧＰＵ）のクロック信号の周波数を事前に（proactively）調整するための技法を説明する。いくつかの例では、中央処理ユニット（ＣＰＵ）は、ＧＰＵが１つのフレームのレンダリングを完了したときと、ＧＰＵが直前のフレーム（immediately preceding frame）のレンダリングを完了したときとの間の時間間隔を決定する。ＣＰＵはまた、この時間間隔中ＧＰＵがどのくらいビジー状態（busy）であったかを決定し、時間間隔中ＧＰＵがどのくらいビジー状態であったかの決定に基づいてＧＰＵのクロック信号の周波数を決定する。このように、ＣＰＵは、クロック信号の周波数を決定する前に複数のフレームが処理されるのを待機するのではなく、単一フレームについてのビジーレベル（busy level）に基づいて、クロック信号の周波数を迅速に決定し得る。
【０００４】
[0004]  １つの例では、本開示はクロックレート決定の方法を説明しており、本方法は、プロセッサを用いて、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンス（time instance）を決定することと、前記プロセッサを用いて、前記ＧＰＵが前記第１のフレームの直前にある（immediately precedes）第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、前記プロセッサを用いて、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、前記プロセッサを用いて、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと、を備える。
【０００５】
[0005]  １つの例では、本開示は、クロックレート決定のためのデバイスを説明し、本デバイスは、第１のフレームおよび第２のフレームをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）によって使用されるグラフィックスデータを記憶するように構成されたメモリと、集積回路を備えるプロセッサとを備え、前記プロセッサは、前記ＧＰＵが前記第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、前記ＧＰＵが前記第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと、を行うように構成される。
【０００６】
[0006]  １つの例では、本開示は、命令を記憶した非一時的なコンピュータ可読記憶媒体を説明し、本命令は、実行されると、１つまたは複数のプロセッサに、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと、を行わせる。
【０００７】
[0007]  １つの例では、本開示は、クロックレート決定のためのデバイスを説明し、本デバイスは、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定するための手段と、前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定するための手段と、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定するための手段と、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定するための手段と、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定するための手段と、を備える。
【０００８】
[0008]  １つまたは複数の例の詳細が、添付の図面および以下の説明において述べられる。他の特徴、目的、および利点は、その説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】[0009]  本開示において説明される１つまたは複数の例となる技法にしたがった、データを処理するための例となるデバイスを例示するブロック図。
【図２】[0010]  より詳細に、図１に例示されているデバイスのコンポーネントを例示するブロック図。
【図３Ａ】[0011]  グラフィックス処理ユニット（ＧＰＵ）がフレームをレンダリングするためのコマンドを受信する一例を例示するタイミング図。
【図３Ｂ】グラフィックス処理ユニット（ＧＰＵ）がフレームをレンダリングするためのコマンドを受信する一例を例示するタイミング図。
【図３Ｃ】グラフィックス処理ユニット（ＧＰＵ）がフレームをレンダリングするためのコマンドを受信する一例を例示するタイミング図。
【図４】[0012]  ＧＰＵがフレームをレンダリングするためのコマンドを受信する別の例を例示するタイミング図。
【図５】[0013]  ある時間の期間にわたってＧＰＵが実行することになるコマンドの数を例示するグラフ。
【図６Ａ】[0014]  １つの例となる技法を利用する、図５に例示されている時間の期間にわたるビジーレベル率（busy level percentage）の決定を例示するグラフ。
【図６Ｂ】[0015]  別の例となる技法を利用する、図５に例示されている時間の期間にわたるビジーレベル率の決定を例示するグラフ。
【図７】[0016]  本開示において説明されている技法による、クロックレート決定の例となる方法を例示するフローチャート。
【詳細な説明】
【００１０】
[0017]  グラフィックス処理ユニット（ＧＰＵ）のような処理ユニットは、ＧＰＵが命令を処理するレートを設定する（例えば、ＧＰＵの動作周波数を設定する）内部クロックを含む。より高いクロックレートは、ＧＰＵによるより高い電力消費をもたらすが、ＧＰＵが毎秒より多くのコマンドを処理することを可能にする。言い換えると、より高いクロックレートは、ＧＰＵがより高いパフォーマンスを提供することを可能にするが、より高い電力消費という代償を払う。より低いクロックレートは、ＧＰＵによるより少ない電力消費をもたらすが、ＧＰＵが毎秒処理することができるコマンドの数を低減する。言い換えると、より低いクロックレートは、ＧＰＵがより低いパフォーマンスを提供することを引き起こすが、より低い電力消費という利益がある。例えば、ＧＰＵまたはＧＰＵ内の発振器に印加される電圧レベルがクロックレートを設定し、より高い電圧レベルは、より高いクロックレートをもたらすが、より多くの電力消費をもたらし、より低い電圧レベルは、より低いクロックレート、およびより低い電力消費をもたらす。
【００１１】
[0018]  いくつかの例では、ホストプロセッサ（例えば、中央処理ユニット（ＣＰＵ））は、ＧＰＵが動作するべき周波数を決定し得る。上述されたように、より高い周波数で動作することは、高速完了をもたらすが、余分な電力消費という代償を払う。したがって、ホストプロセッサは、適時の（timely）完了に影響を与えることなく電力消費を低く保つようにＧＰＵの動作周波数を設定しようと試みる。
【００１２】
[0019]  説明しやすくするために、本開示は、ＧＰＵの動作周波数（例えば、クロックレート）を決定するホストプロセッサを説明する。しかしながら、本開示において説明される技法はそのように限定されるものではなく、例となる技法は、以下でも説明されるように、ＧＰＵに対して適用され得る。
【００１３】
[0020]  本開示は、１つのフレームをレンダリングするためにＧＰＵによって使用されたリソースに基づいてＧＰＵのクロックレートを事前に調整する（例えば、ＧＰＵの動作周波数を調整する）ための例となる方法を説明する。動作周波数を決定するために、ホストプロセッサは、ある特定量の時間にわたってどのくらいビジー状態であるか（例えば、いくつの演算ユニットが動作可能であるか）を決定する。１つの例として、ホストプロセッサは、設定された時間間隔においてＧＰＵがどのくらいビジー状態であったかを決定し得る。別の例として、ホストプロセッサは、ＧＰＵがアイドル状態（idle）である度にＧＰＵがどのくらいビジー状態であったか（例えば、ＧＰＵが前回アイドル状態であったときからＧＰＵが再度アイドル状態であったインスタンスまでの時間間隔）を決定し得る。いくつかのケースでは、ＧＰＵが処理することになるデータ量は比較的に一定であり得るが、ＧＰＵは、規則的間隔でデータを受信しないこともある。それゆえ、設定された間隔で、またはＧＰＵがアイドル状態である度にＧＰＵがどのくらいビジー状態であるかを決定することは、ホストプロセッサが、大きく変動するＧＰＵの動作周波数レベルを決定することをもたらし得る。ＧＰＵがそのクロックレートを決定する例では、ＧＰＵは、ホストプロセッサについて上述されたものと同様の機能を実行し得、ホストプロセッサのように、ＧＰＵは、大きく変動する動作周波数レベルを決定し得る。
【００１４】
[0021]  本開示において説明される技法では、ホストプロセッサは、ＧＰＵがいつフレームをレンダリングし終えたかを（例えば、ＧＰＵがフレームの処理を完了し、フレームの終わりに達する度に）決定する。ホストプロセッサは次いで、フレームの処理の完了から、すぐ前のフレームの処理の完了までＧＰＵがどのくらいビジー状態であったかを決定する。ＧＰＵがどのくらいビジー状態であるかをフレームごとに（frame-to-frame）測定することによって、ホストプロセッサは、ＧＰＵの動作周波数をより正確に決定し得る。いくつかの例では、ＧＰＵは、フレームの処理の完了から、すぐ前のフレームの処理の完了までＧＰＵがどのくらいビジー状態であったかを決定し、ＧＰＵの動作周波数を決定し得る。
【００１５】
[0022]  ホストプロセッサが、ＧＰＵがいつフレームの処理を完了したかを決定し得る様々な方法があり得る。１つの例として、ＧＰＵは、フレームを処理するのに必要な複数のタスクのうちの１つのタスクをＧＰＵが完了する度にホストプロセッサに示し得る。最後のタスクを完了した後、ホストプロセッサは、ＧＰＵがフレームの終わりにあることを決定し得る。いくつかのケースでは、ＧＰＵがフレームの処理を完了した後、ホストプロセッサは、次のフレームの処理のためのバッファ空間を空けるためにバッファをスワップ（swap）する機能を実行する。例えば、バッファをスワップする機能は、一方のフレームバッファを読取りから書込みに変更し、他方を書込みから読取りに変更し、その結果、一方は他方が表示されている間に書き込まれる。バッファをスワップする機能は、ホストプロセッサがそれからフレームの終わりを決定することができる命令を含むように構成され得る。
【００１６】
[0023]  ＧＰＵがそれ自体のクロックレートを設定する例では、ＧＰＵは（例えば、コントローラを介して）、ＧＰＵが各フレームの処理をいつ完了したかを決定し得る。これに応答して、コントローラは、ＧＰＵがどのくらいビジー状態であったかをフレームごとに決定し、フレームごとのビジー時間に基づいてクロックレートを決定し得る。
【００１７】
[0024]  例となる技法は、ホストプロセッサ、ＧＰＵ、または一部の機能を実行するホストプロセッサと一部の機能を実行するＧＰＵとの何らかの組合せによってインプリメントされ得るので、本開示において説明される技法は、プロセッサによって行われるとみなされ得る。プロセッサの１つの例は、ホストプロセッサであり（例えば、ここで、ホストプロセッサはＧＰＵについてのクロックレートを決定し、ＧＰＵにクロックレートを設定するように命令する）、プロセッサの１つの例はＧＰＵであり（例えば、ここで、ＧＰＵはそれ自体のクロックレートを決定し、それに応じてクロックレートを設定する）、プロセッサの１つの例はホストプロセッサとＧＰＵの組合せである（例えば、ここで、ホストプロセッサとＧＰＵが共に、ＧＰＵのクロックレートを決定し、ＧＰＵのクロックレートを設定する）。
【００１８】
[0025]  したがって、プロセッサは、ＧＰＵが第１のフレームの処理を完了した第１の時間インスタンスと、ＧＰＵが第１のフレームの直前にある第２のフレームの処理を完了した第２の時間インスタンスとを決定し得る。プロセッサは、第１および第２の時間インスタンスに基づいて時間間隔を決定し、その時間間隔中のＧＰＵのビジーレベルを決定し得る。ビジーレベルに基づいて、プロセッサはＧＰＵのクロックレートを設定する。
【００１９】
[0026]  例えば、プロセッサは、ビジーレベルに基づいてＧＰＵの動作周波数（例えば、クロックレート）を決定し得る。ホストプロセッサがクロックレートを決定する例では、ホストプロセッサは、ＧＰＵに、決定されたクロックレートに基づいてクロックレートを設定するように命令し得る。ＧＰＵがクロックレートを決定する例では、ＧＰＵは、決定されたクロックレートに基づいてクロックレートを設定し得る。
【００２０】
[0027]  図１は、本開示の技法をインプリメントするために使用され得る例となるコンピューティングデバイス２を例示するブロック図である。コンピューティングデバイス２は、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、ワイヤレス通信デバイス（例えば、モバイル電話、セルラ電話、衛星電話、および／またはモバイル電話ハンドセット、等）、固定電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末（ＰＤＡ）のようなハンドヘルドデバイス、パーソナルミュージックプレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、中間ネットワークデバイス（intermediate network device）、メインフレームコンピュータ、あるいはグラフィカルデータを処理および／または表示する他の任意のタイプのデバイスを備え得る。
【００２１】
[0028]  図１の例に例示されるように、コンピューティングデバイス２は、ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、システムメモリ１０、グラフィックス処理ユニット（ＧＰＵ）１２、ローカルメモリ１４、ディスプレイインターフェース１６、ディスプレイ１８、およびバス２０を含む。ユーザ入力インターフェース４、ＣＰＵ６、メモリコントローラ８、ＧＰＵ１２、およびディスプレイインターフェース１６は、バス２０を使用して互いに通信し得る。バス２０は、第３世代バス（例えば、HyperTransportバスまたはInfiniBandバス）、第２世代バス（例えば、Advanced Graphics Portバス、ＰＣＩ（Peripheral Component Interconnect）エクスプレスバス、またはＡＸＩ（Advanced eXentisible Interface）バス）、あるいは別のタイプのバスまたはデバイス相互接続のような、様々なバス構造のうちの任意のものであり得る。図１に示されている異なるコンポーネント間のバスおよび通信インターフェースの特定の構成は実例的なものにすぎず、同一または異なるコンポーネントを有する他のグラフィックス処理システムおよび／またはコンピューティングデバイスの他の構成が、本開示の技法をインプリメントするために使用され得ることが留意されるべきである。
【００２２】
[0029]  ＣＰＵ６は、コンピューティングデバイス２の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、ＣＰＵ６に１つまたは複数のソフトウェアアプリケーションを実行させるために、コンピューティングデバイス２への入力を提供し得る。ＣＰＵ６上で実行されるソフトウェアアプリケーションは、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、表計算アプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムを含み得る。ユーザは、キーボード、マウス、マイクロフォン、タッチパッド、または、ユーザ入力インターフェース４を介してコンピューティングデバイス２に結合された別の入力デバイスのような１つまたは複数の入力デバイス（図示せず）を介してコンピューティングデバイス２への入力を提供し得る。
【００２３】
[0030]  ＣＰＵ６上で実行されるソフトウェアアプリケーションは、ＣＰＵ６にディスプレイ１８へのグラフィックスデータのレンダリングをさせるように命令する、１つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、例えば、ＯｐｅｎＧＬ（登録商標）（Open Graphics Library）グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）、ＯｐｅｎＧＬ ＥＳ（Open Graphics Library Embedded Systems）ＡＰＩ、ＯｐｅｎＣＬ ＡＰＩ、Ｄｉｒｅｃｔ３Ｄ ＡＰＩ、Ｘ３Ｄ ＡＰＩ、ＲｅｎｄｅｒＭａｎ ＡＰＩ、ＷｅｂＧＬ ＡＰＩ、または他の任意の公のまたは専有の標準的なグラフィックスＡＰＩのような、ＡＰＩに準拠し得る。本技法は、特定のＡＰＩを必要とするように限定されるものとみなされるべきではない。
【００２４】
[0031]  グラフィックスレンダリング命令を処理するために、ＣＰＵ６は、ＧＰＵ１２にグラフィックスデータのレンダリングの一部または全部を行わせるように１つまたは複数のグラフィックスレンダリングコマンドをＧＰＵ１２に発行し得る。いくつかの例では、レンダリングされることになるグラフィックスデータは、例えば、点、線、三角形、四角形、三角形ストリップ等の、グラフィックスプリミティブのリストを含み得る。
【００２５】
[0032]  メモリコントローラ８は、システムメモリ１０に出入りするデータの転送を容易にする。例えば、メモリコントローラ８は、コンピューティングデバイス２内のコンポーネントにメモリサービスを提供するために、メモリ読取りおよび書込みコマンドを受信し、メモリ１０に関連するそのようなコマンドをサービスし得る。メモリコントローラ８は、システムメモリ１０に通信的に結合される。メモリコントローラ８は、ＣＰＵ６およびシステムメモリ１０の両方から分離している処理モジュールであるとして図１の例となるコンピューティングデバイス２に例示されているが、他の例では、メモリコントローラ８の機能の一部または全部は、ＣＰＵ６およびシステムメモリ１０の一方または両方でインプリメントされ得る。
【００２６】
[0033]  システムメモリ１０は、ＣＰＵ６による実行のためにアクセス可能なプログラムモジュールおよび／または命令、ならびに／あるいは、ＣＰＵ６上で実行されるプログラムによる使用のためのデータを記憶し得る。例えば、システムメモリ１０は、ユーザアプリケーションと、これらアプリケーションに関連付けられたグラフィックスデータとを記憶し得る。システムメモリ１０は、追加的に、コンピューティングデバイス２の他のコンポーネントによる使用のための、および／またはそれらによって生成される、情報を記憶し得る。例えば、システムメモリ１０は、ＧＰＵ１２のためのデバイスメモリとして機能し得、ＧＰＵ１２によって作用されるデータに加え、ＧＰＵ１２によって行われる動作に起因するデータを記憶し得る。例えば、システムメモリ１０は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファ、又は同様のものの任意の組合せを記憶し得る。加えて、システムメモリ１０は、ＧＰＵ１２による処理のためのコマンドストリームを記憶し得る。システムメモリ１０は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体、または光記憶媒体のような、１つまたは複数の揮発性または不揮発性メモリあるいは記憶デバイスを含み得る。
【００２７】
[0034]  いくつかの態様では、システムメモリ１０は、ＣＰＵ６および／またはＧＰＵ１２に、本開示においてＣＰＵ６およびＧＰＵ１２に帰するとされる機能を行わせる命令を含み得る。したがって、システムメモリ１０は、実行されると、１つまたは複数のプロセッサ（例えば、ＣＰＵ６およびＧＰＵ１２）に様々な機能を実行させる命令を記憶したコンピュータ可読記憶媒体であり得る。
【００２８】
[0035]  いくつかの例では、システムメモリ１０は、非一時的な記憶媒体である。「非一時的」という用語は、記憶媒体が、搬送波または伝播信号で具現化されないことを示す。しかしながら、「非一時的」という用語は、システムメモリ１０が移動不可であること、またはそのコンテンツが静的であることを意味するように解釈されるべきではない。１つの例として、システムメモリ１０は、デバイス２から取り外され、別のデバイスに移動され得る。別の例として、システムメモリ１０と実質的に同様のメモリが、デバイス２へと挿入され得る。ある特定の例では、非一時的な記憶媒体は、時間にわたって変化し得るデータを（例えば、ＲＡＭに）記憶し得る。
【００２９】
[0036]  ＧＰＵ１２は、ディスプレイ１８に１つまたは複数のグラフィックスプリミティブをレンダリングするためにグラフィックス動作を行うように構成され得る。よって、ＣＰＵ６上で実行されるソフトウェアアプリケーションのうちの１つがグラフィックス処理を必要とするとき、ＣＰＵ６は、ディスプレイ１８へのレンダリングのために、ＧＰＵ１２にグラフィックスコマンドおよびグラフィックスデータを提供し得る。グラフィックスコマンドは、例えば、ドローコール（draw call）のような描画コマンド、ＧＰＵ状態プログラミングコマンド、メモリ転送コマンド、汎用計算コマンド、カーネル実行コマンド、等を含み得る。いくつかの例では、ＣＰＵ６は、コマンドおよびグラフィックスデータをメモリ１０に書き込むことによって、コマンドおよびグラフィックスデータをＧＰＵ１２に提供し得、それらはＧＰＵ１２によってアクセスされ得る。いくつかの例では、ＧＰＵ１２は、ＣＰＵ６上で実行されるアプリケーションのための汎用計算を行うようにさらに構成され得る。
【００３０】
[0037]  ＧＰＵ１２は、いくつかの事例では、ＣＰＵ６よりも効率的なベクトル演算の処理を提供する、並列性の高い構成（highly-parallel structure）で構築され得る。例えば、ＧＰＵ１２は、並列的に複数の頂点またはピクセルに作用するように構成された複数の処理要素を含み得る。ＧＰＵ１２の並列性の高い性質は、いくつかの事例では、ＧＰＵ１２が、グラフィックス画像（例えば、ＧＵＩおよび２次元（２Ｄ）および／または３次元（３Ｄ）グラフィックスシーン）を、ＣＰＵ６を使用してこれらシーンを直接ディスプレイ１８に描画するよりも迅速に、ディスプレイ１８上へと描画することを可能にし得る。加えて、ＧＰＵ１２の並列性の高い性質は、ＧＰＵ１２が、ＣＰＵ６よりも迅速に、汎用計算アプリケーションのためのある特定のタイプのベクトルおよび行列演算を処理することを可能にし得る。
【００３１】
[0038]  ＧＰＵ１２は、いくつかの事例では、コンピューティングデバイス２のマザーボードへと一体化され得る。他の事例では、ＧＰＵ１２は、コンピューティングデバイス２のマザーボード内のポートにインストールされたグラフィックスカード上に存在し得るか、またはそうでない場合、コンピューティングデバイス２と相互動作するように構成された周辺デバイス内に組み込まれ得る。さらなる事例では、ＧＰＵ１２は、システムオンチップ（ＳｏＣ）を形成するＣＰＵ６と同じマイクロチップ上に位置付けられ得る。ＧＰＵ１２およびＣＰＵ６は、１つまたは複数のマイクロプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、デジタルシグナルプロセッサ（ＤＳＰ）、または他の同等の集積回路またはディスクリート論理回路のような、１つまたは複数のプロセッサを含み得る。
【００３２】
[0039]  ＧＰＵ１２は、ローカルメモリ１４に直接結合され得る。よって、ＧＰＵ１２は、バス２０を必ずしも使用することなく、ローカルメモリ１４からデータを読み取り、それにデータを書き込み得る。言い換えると、ＧＰＵ１２は、オフチップメモリではなくローカル記憶装置を使用してローカルにデータを処理し得る。これは、重いバストラフィックを経験し得る、ＧＰＵ１２がバス２０を介してデータを読み取るおよび書き込む必要性を取り除くことによって、ＧＰＵ１２が、より効率的に動作することを可能にする。しかしながら、いくつかの事例では、ＧＰＵ１２は、別個のキャッシュを含まないこともあり、代わりにバス２０を介してシステムメモリ１０を利用し得る。ローカルメモリ１４は、例えば、ランダムアクセスメモリ（ＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）、消去可能なプログラマブルＲＯＭ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体、または光記憶媒体のような、１つまたは複数の揮発性または不揮発性メモリあるいは記憶デバイスを含み得る。
【００３３】
[0040]  ＣＰＵ６および／またはＧＰＵ１２は、レンダリングされた画像データを、システムメモリ１０内に割り当てられたフレームバッファに記憶し得る。ディスプレイインターフェース１６は、フレームバッファからデータを取り出し、レンダリングされた画像データによって表わされる画像を表示するようにディスプレイ１８を構成し得る。いくつかの例では、ディスプレイインターフェース１６は、フレームバッファから取り出されたデジタル値を、ディスプレイ１８によって消費可能なアナログ信号へと変換するように構成されたデジタル・アナログ変換器（ＤＡＣ）を含み得る。他の例では、ディスプレイインターフェース１６は、デジタル値を、処理のためにディスプレイ１８に直接渡し得る。ディスプレイ１８は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ（ＬＣＤ）、プラズマディスプレイパネル、発光ダイオード（ＬＥＤ）アレイ、ブラウン管（ＣＲＴ）ディスプレイ、電子ペーパー、表面伝導型電子放出素子ディスプレイ（ＳＥＤ：surface-conduction electron-emitted display）、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ１８は、コンピューティングデバイス２内に一体化され得る。例えば、ディスプレイ１８は、モバイル電話ハンドセットまたはタブレットコンピュータのスクリーンであり得る。代替的に、ディスプレイ１８は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス２に結合されたスタンドアロンデバイスであり得る。例えば、ディスプレイ１８は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
【００３４】
[0041]  説明されたように、ＣＰＵ６は、超並列演算（massive parallel operations）を必要とするタスクのような、グラフィックス処理をＧＰＵ１２にオフロード（offload）し得る。１つの例として、グラフィックス処理は超並列演算を必要とし、ＣＰＵ６は、そのようなグラフィックス処理タスクをＧＰＵ１２にオフロードし得る。しかしながら、行列演算のような他の演算もまた、ＧＰＵ１２の並列処理能力から恩恵を受け得る。これらの例では、ＣＰＵ６は、ＧＰＵ１２に非グラフィックス関連の演算を行わせるためにＧＰＵ１２の並列処理能力を活用し得る。
【００３５】
[0042]  本開示において説明されている技法では、第１の処理ユニット（例えば、ＣＰＵ６）がある特定のタスクを第２の処理ユニット（例えば、ＧＰＵ１２）にオフロードする。タスクをオフロードするために、ＣＰＵ６は、ＧＰＵ１２によって実行されることになるコマンドと、それらコマンドのオペランド（operands）であるデータ（例えば、コマンドが作用するデータ）とを、システムメモリ１０に、および／または直接ＧＰＵ１２に出力する。ＧＰＵ１２は、ＣＰＵ６から直接、および／またはシステムメモリ１０からコマンドおよびデータを受信し、コマンドを実行する。いくつかの例では、ＧＰＵ１２によって実行されることになるコマンドと、それらコマンドのためのデータオペランドとをシステムメモリ１０に記憶するのではなくむしろ、ＣＰＵ６は、ＧＰＵ１２およびＣＰＵ６を含むＩＣに対してローカルであり、ＣＰＵ６およびＧＰＵ１２の両方によって共有されるローカルメモリ（例えば、ローカルメモリ１４）に、コマンドおよびデータオペランドを記憶し得る。一般に、本開示において説明されている技法は、ＣＰＵ６がＧＰＵ１２上での実行のためにコマンドを利用可能にし得る様々な方法に適用可能であり、本技法は上記例に限定されるものではない。
【００３６】
[0043]  ＧＰＵ１２がコマンドを実行するレートは、クロック信号の周波数（ＧＰＵ１２のクロックレートまたは動作周波数とも称される）によって設定される。例えば、ＧＰＵ１２は、クロック信号の立ち上がりエッジまたは立ち下がりエッジごとにコマンドを実行し得るか、またはクロック信号の立ち上がりエッジごとに１つのコマンドを実行し、立ち下がりエッジごとに別のコマンドを実行し得る。したがって、クロック信号の立ち上がりエッジまたは立ち下がりエッジが、ある時間期間内にどのくらいの頻度で生じるか（例えば、クロック信号の周波数）は、時間期間内にＧＰＵ１２がいくつのコマンドを実行するかを設定する。
【００３７】
[0044]  ＣＰＵ６がＧＰＵ１２によって実行されることになるコマンドをメモリ（例えば、システムメモリ１０またはローカルメモリ）に記憶する例のような、いくつかの例では、ＣＰＵ６は、ＧＰＵ１２が実行することになるコマンドのグループを識別するメモリアドレス情報を出力し得る。ＧＰＵ１２が実行することになるコマンドのグループは、サブミットされたコマンド（submitted commands）と称される。ＣＰＵ６がＧＰＵ１２にコマンドを直接出力する例では、サブミットされたコマンドは、ＣＰＵ６がＧＰＵ１２にすぐに実行するように命令するコマンドを含む。
【００３８】
[0045]  ＣＰＵ６がコマンドをグループ化し得る様々な方法があり得る。１つの例として、コマンドのグループは、１つのフレームをレンダリングするのにＧＰＵ１２によって必要とされる全コマンドを含む。別の例として、コマンドのグループは、ＧＰＵ１２が他のコマンドにスイッチすることなく共に実行されることになる、いわゆる「アトミックコマンド（atomic commands）」であり得る。ＧＰＵ１２にサブミットされるコマンドをグループ化する他の方法が可能であり得、本開示は、上記例となる技法に限定されるものではない。
【００３９】
[0046]  いくつかのケースでは、ＧＰＵ１２は、サブミットされたコマンドを設定された時間期間内に実行し得る。例えば、デバイス２はハンドヘルドデバイスであり得、ここでは、ディスプレイ１８はまた、ユーザインターフェースとして機能する。１つの例として、スタッターフリー（stutter free）（ジャンクフリー（jank-free）とも称される）ユーザインターフェースを達成するために、ＧＰＵ１２は、６０フレーム毎秒というフレームレートを仮定して、約１６ミリ秒（ｍｓ）以内に、サブミットされたコマンドの実行を完了し得る（他の時間期間が可能）。この１６ｍｓの時間期間は、「ｖｓｙｎｃ」ウィンドウと称され得、ＧＰＵ１２がｖｓｙｎｃウィンドウ内にサブミットされたコマンドの実行を完了しない場合、ジャンクで満ちた（jank filled）ユーザインターフェースを引き起こす「バブル（bubbles）」がＧＰＵ１２の実行パイプラインに存在し得る。
【００４０】
[0047]  ＧＰＵ１２の実行パイプラインにおける「バブル」は、コマンドを実行しているＧＰＵ１２のユニットが、いくつかの中間データ（intermediate data）を生成するためにコマンドの実行を部分的に完了しているが、中間データを受信することになるＧＰＵ１２のユニットが、中間データが構築し続けることを引き起こす他のコマンドを実行するのに依然としてビジー状態である状態を指す。例えば、ＧＰＵ１２の実行パイプラインは一連のユニットを含み、その各々が、その一連の中の（すなわち、パイプラインにおける）次のユニットによってさらに処理される、中間データを生成する。いくつかのケースでは、ＧＰＵ１２の実行パイプラインのアップストリームユニットは、ＧＰＵ１２の実行パイプラインのダウンストリームユニットが消費することができるよりも速く中間データを生成しており、いわゆるバブルを作り出している。
【００４１】
[0048]  ＣＰＵ６がサブミットするコマンドの量と、ＣＰＵ６がコマンドをサブミットするときのタイミングは必ずしも一定である必要はない。ＧＰＵ１２が実行することになるコマンドの数に流入（influx）または低減があり得る。例えば、ＣＰＵ６上で実行されるアプリケーション（例えば、サードパーティのアプリケーション）は、ＧＰＵ１２によって実行されることになるコマンドの数を増加または減少させ得るか、またはＣＰＵ６上で実行されるオペレーティングシステム（例えば、フレームワーク自体）は、ＧＰＵ１２によって実行されることになるコマンドの数を増加または減少させ得る。別の例として、ＣＰＵ６は、時間０で第１のグループのコマンドをサブミットし、時間１で第２のグループのコマンドをサブミットし、時間２で第３のグループのコマンドをサブミットし得る。しかしながら、第１のグループのコマンドのサブミッション（submission）と第２のグループのコマンドのサブミッションとの間の時間間隔は、第２のグループのコマンドのサブミッションと第３のグループのコマンドのサブミッションとの間の時間間隔とは異なり得る。
【００４２】
[0049]  設定された時間期間（例えば、１６ｍｓ）内にＧＰＵ１２が実行することになるコマンドの量が変化し得るので、ＧＰＵ１２のクロック信号の周波数（すなわち、ＧＰＵ１２のクロックレートまたはＧＰＵ１２の動作周波数）は増加または減少する必要があり得、その結果、ＧＰＵ１２は、不必要に電力消費を増加させることなく、設定された時間期間内にコマンドを実行することができる。設定された時間期間内に実行される必要のあるコマンドのグループに、より多くのコマンドまたはより少ないコマンドがあるので、設定された時間期間内に実行される必要のあるコマンドのグループの数に増加または減少があるので、またはその２つの組合せにより、設定された時間期間内にＧＰＵ１２が実行する必要があるコマンドの量は変化し得る。
【００４３】
[0050]  クロック信号の周波数が比較的高い周波数で恒久的に保たれたら、ＧＰＵ１２は、ほとんどの事例でサブミットされたコマンドを適時に実行することができるであろう。しかしながら、比較的高い周波数でコマンドを実行すると、ＧＰＵ１２の電力消費が増加することを引き起こす（例えば、より高いクロックレートでＧＰＵ１２を駆動するのにより多くの電気電力が必要である）。クロック信号の周波数が比較的低い周波数で恒久的に保たれた場合、ＧＰＵ１２の電力消費は低減され得る（例えば、より低いクロックレートでＧＰＵ１２を駆動するのにより少ない電気電力が必要である）が、ＧＰＵ１２は、ほとんどの事例でサブミットされたコマンドを適時に実行することができないこともあり、ジャンキー挙動（janky behavior）および可能性として他の望まない効果につながる。
【００４４】
[0051]  本開示において説明されている技法は、特定の時間間隔にわたるＧＰＵ１２の使用量（usage）に基づいてＧＰＵ１２のクロックレート（すなわち、クロック信号の周波数）を事前に増加または減少させる例となる方法を説明する。ＧＰＵ１２のクロックレートを決定するために使用される時間間隔の１つの例は、ＧＰＵ１２が現在のフレームのレンダリングを完了したときと、ＧＰＵ１２が現在のフレームの直前にある、前のフレームのレンダリングを完了したときとの間の時間間隔である。フレームのレンダリングの完了は、本開示で使用される場合、必ずしも常に含むわけではないが、レンダリングされたフレームをシステムメモリ１０に記憶するためのコマンドを含む、ＧＰＵ１２がフレームをレンダリングするのに必要な全コマンドを実行することを指す。例えば、フレームのレンダリングの完了は、ＧＰＵ１２がフレームの最後のピクセルのピクセル値を決定したインスタンス、またはＧＰＵ１２がフレームの最後のピクセルのピクセル値をシステムメモリ１０に書き込んだインスタンスとしてみなされ得る。
【００４５】
[0052]  フレームは、本開示で使用される場合、提示されることができるフル画像を指すが、いくつかの例ではフル画像の一部分であり得る。例えば、毎回再レンダリングされない静的バックグラウンドがあり得るが、ＧＰＵ１２によってレンダリングされるフレームは、フル画像を生成するように静的バックグラウンドと（例えば、ディスプレイインターフェース１６によって）合成され得る。別の例として、ディスプレイインターフェース１６は、ＧＰＵ１２によってレンダリングされるフレームとビデオを組み合わせ得る。
【００４６】
[0053]  フレームは、グラフィカルコンテンツを表す複数のピクセルを含み、各ピクセルはピクセル値を有する。例えば、ＧＰＵ１２がフレームをレンダリングした後、ＧＰＵ１２は、システムメモリ１０内にあり得る、フレームバッファにフレームのピクセルの結果として生じるピクセル値を記憶する。ディスプレイインターフェース１６は、ディスプレイ１８にフレームのグラフィカルコンテンツを表示させるために、フレームバッファからフレームのピクセルのピクセル値を受信し、それらピクセル値に基づく値を出力する。いくつかの例では、ディスプレイインターフェース１６は、ディスプレイ１８に６０フレーム毎秒（ｆｐｓ）というレートでフレームを表示させる（例えば、フレームはほぼ１６．６７ｍｓごとに表示される）。
【００４７】
[0054]  以下の説明では、ＣＰＵ６がＧＰＵ１２のビジーレベルを決定し、ＧＰＵ１２のクロックレートを設定することに関連して、例となる技法が説明される。しかしながら、このような技法はまた、ＧＰＵ１２によって、またはＣＰＵ６とＧＰＵ１２によって共同で、インプリメントされ得る。
【００４８】
[0055]  ６０ｆｐｓ要件が満たされることを確実にするのに十分高い、ただし高すぎない動作周波数でＧＰＵ１２が動作していることを確実にするために、ＣＰＵ６は、フレームをレンダリングするためにＧＰＵ１２がどのくらいビジー状態であったかを示す、ＧＰＵ１２のビジーレベルを決定し得る。ビジーレベルは、ＧＰＵ１２が時間間隔中にフレームをレンダリングするためのコマンドを実行していた時間量を指す。別の方法を考慮すると、ビジーレベルは、フレームをレンダリングするために時間間隔中にいくつのＧＰＵサイクル（例えば、ＧＰＵ１２のクロックサイクル）が使用されたかを示す。ビジーレベル測定は、時間の単位であり得、時として割合（percentage）（例えば、ビジー状態の時間量、割ることの時間間隔に１００を乗じたもの）として表され得る。一般に、ビジーレベルは、ＧＰＵ１２がフレーム作業負荷（workload）を完了するのにかかる時間量を指す。
【００４９】
[0056]  ＧＰＵ１２は、ＧＰＵ１２内のユニットが１つまたは複数の汎用レジスタ（ＧＰＲ：general purpose register）にデータを記憶し、および／またはそれからデータを読み取る度に、カウンタをインクリメント（increment）する回路を含み得る。時間間隔の終局に（例えば、ＧＰＵ１２がフレームのレンダリングを完了した後）、ＣＰＵ６は、フレームをレンダリングするためにＧＰＵ１２内のユニットが１つまたは複数ＧＰＲにアクセスした回数を決定し得る。例えば、ＣＰＵ６は、ＧＰＵ１２内のユニットがフレームをレンダリングするために１つまたは複数のＧＰＲにアクセスした回数を決定するために、直前のフレームのレンダリングの完了の終わりのときのカウンタ値と、現在のフレームのレンダリングの完了の終わりのときのカウンタ値との間の差を決定し得る。
【００５０】
[0057]  ＧＰＵ１２でのユニットが１つまたは複数のＧＰＲにアクセスした回数は、フレームをレンダリングするために使用されたクロックサイクルの数の良好な近似値であり得る。フレームのレンダリング中のＧＰＵ１２のクロックレートと、フレームをレンダリングするために使用されたクロックサイクルの数とに基づいて、ＣＰＵ６は、フレームのレンダリング中にＧＰＵ１２がビジー状態であった時間量を決定し得る。例えば、フレームをレンダリングするために使用されたクロックサイクルの数に、ＧＰＵ１２のクロックレートの期間を乗算したものは、ＧＰＵ１２がフレームのレンダリング中ビジー状態であった時間量（例えば、フレームをレンダリングするためのＧＰＵ１２のビジーレベル）を示す。
【００５１】
[0058]  別の例として、ＧＰＵ１２は、任意のＧＰＵサブブロック（例えば、ＧＰＵ１２内のユニット）がビジー状態である限り、ＧＰＵ１２のクロックサイクルを用いて、カウンタをインクリメントする回路を含み得る。カウンタの値は、フレームをレンダリングするために使用されたクロックサイクルの数を示す。
【００５２】
[0059]  上記は、ＣＰＵ６がＧＰＵ１２のビジーレベルを決定する例となる２つの方法である。本開示において説明されている技法は、ＧＰＵ１２のビジーレベルを決定するためのこの特定の例に限定されるものではない。ＧＰＵ１２のビジーレベルを決定する複数の異なる方法があり得、ＣＰＵ６は、ＧＰＵ１２のビジーレベルを決定する異なる方法のうちの１つまたは複数を用い得る。
【００５３】
[0060]  ＣＰＵ６は、ＧＰＵ１２のビジーレベル率を決定するために、ＧＰＵ１２が現在のフレームをレンダリングするのにビジー状態であった時間量を、時間間隔における時間量で除算し得る。いくつかの例では、ＣＰＵ６は、ＧＰＵ１２のビジーレベル率を決定するために、ＧＰＵ１２が現在のフレームをレンダリングするためにビジー状態であった時間量を、前のＮ個の時間間隔についての平均時間量で除算し得る。いずれの例でも、ビジーレベル率は、現在のフレームのビジーレベルに基づいており、他の任意のフレームのビジーレベルには基づいていない（例えば、ＧＰＵ１２が現在のフレームだけをレンダリングするのにどのくらいビジー状態であったか）。
【００５４】
[0061]  ＣＰＵ６は次いで、ＧＰＵ１２のクロックレートを増加させるべきか減少させるべきかを決定し得る。例えば、ビジーレベル率が第１のしきい値よりも大きい場合、ＣＰＵ６は、ＧＰＵ１２のクロックレートを増加させ得、ビジー率が第２のしきい値よりも少ない場合、ＣＰＵ６はＧＰＵ１２のクロックレートを減少させ得る。第１のしきい値および第２のしきい値は、異なるしきい値または同じしきい値であり得る。いくつかの例では、ＣＰＵ６がＧＰＵ１２のクロックレートをどのくらい増加または減少させるべきかをそれから決定することができる複数のしきい値があり得る。
【００５５】
[0062]  いくつかの例では、ＣＰＵ６またはＣＰＵ６との組合せではなくむしろＧＰＵ１２は、ＧＰＵ１２が現在のフレームのレンダリングを完了したときと、ＧＰＵ１２が現在のフレームの直前にある、前のフレームのレンダリングを完了したときとの間の時間間隔を決定し得る。例えば、ＧＰＵ１２のコントローラは、前のＮ個の時間間隔レンダリングするためにＧＰＵ１２がビジー状態であった平均時間量を用いてフレームのレンダリング中にＧＰＵ１２がどのくらいビジー状態であったかを決定するために、上述された例となるカウンタから読み取り得る。ＧＰＵ１２のコントローラは次いで、ＣＰＵ６に関連して説明された上記例と同様のクロックレートを増加または減少させ得る。
【００５６】
[0063]  フレームの終わりからフレームの終わり（end-of-frame to end-of-frame）（例えば、ＧＰＵ１２が現在のフレームのレンダリングを完了したときと、ＧＰＵ１２が現在のフレームの直前にある、前のフレームのレンダリングを完了したときとの間の時間間隔）に基づいてビジーレベルを決定することによって、ＣＰＵ６および／またはＧＰＵ１２は、ＧＰＵ１２のクロックレートを比較的迅速かつ比較的正確に決定し得る。いくつかの技法では、ＣＰＵ６および／またはＧＰＵ１２がフレームの終わりからフレームの終わりに基づいてビジーレベルまたはビジーレベル率を決定する時間間隔を決定するのではなくむしろ、ＣＰＵ６は、ＧＰＵ１２がアイドル状態であるインスタンスに基づいて時間間隔を決定し得る。
【００５７】
[0064]  しかしながら、ＧＰＵ１２がいつアイドル状態であるかに基づいて、または現在の時間間隔に基づいて、ビジーレベルまたはビジーレベル率を決定することは、正確なビジーレベルまたはビジーレベル率を決定するために複数のビジーレベルまたはビジーレベル率を平均化することを必要とし得る。ＣＰＵ６がＧＰＵ１２のクロックレートを決定することができるので、平均値としてビジーレベルまたはビジーレベル率を決定することは、ＧＰＵ１２が複数のフレームをレンダリングするのをＣＰＵ６が待機することを必要とする。ＧＰＵ１２が複数のフレームをレンダリングするのを待機することは、ビジーレベルまたはビジーレベル率を決定するために長い遅延をもたらし、ＧＰＵ１２のクロックレート調整を遅延させ、これは、ジャンキー挙動につながり得る。
【００５８】
[0065]  例えば、ＧＰＵ１２は、ＧＰＵ１２がしきい値量の時間の間いずれのグラフィックスデータも出力しない場合、アイドル状態であるとみなされる。いくつかの例では、しきい値量の時間の間いずれのグラフィックスデータも出力されていないことを決定するために、ＣＰＵ６は、ＧＰＵ１２がピクセル値を記憶する記憶ロケーションへのＧＰＵ１２によるアクセスをモニタする。これに応答して、ＣＰＵ６は、ビジーレベルおよびビジーレベル率を決定するために、上述されたカウンタから読み取る。例えば、ＣＰＵ６は、ＧＰＵ１２がアイドル状態であった前回から、ＧＰＵ１２がアイドル状態である現在のインスタンスまで（例えば、アイドル状態からアイドル状態までの時間（idle-to-idle time））のカウンタの差を決定する。
【００５９】
[0066]  しかしながら、ＧＰＵ１２がアイドル状態になるとき、およびＧＰＵ１２がアイドル状態になるときとＧＰＵ１２がアイドル状態になるときとの間に処理されるフレームの数が比較的無作為であり得るので、ＧＰＵ１２がアイドル状態になるときのインスタンスに頼ることは全状況で有益であるわけではないこともある。例えば、何度も、１つのフレームが別のフレームのすぐあとに続いており、これは、ＧＰＵ１２のアイドル状態からアイドル状態までの時間ごとに（between idle-to-idle time of GPU 12）比較的大きいギャップが存在することを意味する。ＧＰＵ１２のアイドル状態からアイドル状態までの時間の合間に１つのフレームのみがレンダリングされる場合、アイドル状態からアイドル状態までの時間は比較的短いこともある。これは、フレームの各々の作業負荷が同じである場合でも、ビジーレベル率を変動させることをもたらす。変動を釣り合わせるために、ＣＰＵ６は、アイドル状態からアイドル状態までの複数の時間間隔にわたるビジーレベル率を平均化し得、これは、ＧＰＵ１２のクロックレートが設定されるときを遅延させる。また、アイドル状態がある前に長い遅延がある場合（例えば、合間にアイドル時間がなく複数のフレームがレンダリングされるので）、ＣＰＵ６は、ＧＰＵ１２についてのクロックレートを決定するのが遅延し得る。
【００６０】
[0067]  さらに、いくつかのケースでは、フレームの処理の中にアイドル時間があり得る。例えば、ＣＰＵ６がフレームをレンダリングするためのコマンドをＧＰＵ１２にサブミットし得る手法は、ＣＰＵ６が、フレームをレンダリングするための複数のコマンドをＧＰＵにサブミットし、次いで、その間ＣＰＵ６がいずれの追加のコマンドもサブミットしない一部分があり、次いでその一部分の後に、ＣＰＵ６がフレームをレンダリングするための残りのコマンドをＧＰＵにサブミットする、というシナリオを含み得る。このケースでは、コマンドのサブミッションの合間のこの一部分の間、ＧＰＵ１２はアイドル状態であり得る。ＧＰＵ１２がフレームのレンダリングの一部分の間アイドル状態である１つだけのインスタンスよりも多くのアイドル時間があり得る。ＧＰＵ１２がフレームをレンダリングする途中のときに起きるこのアイドル時間は、クロックレートを決定するようにＣＰＵ６をトリガし得るが、これは、ＧＰＵ１２が依然としてフレームをレンダリングしているので不十分な情報に基づき得る。
【００６１】
[0068]  クロックレートを決定することの遅延は、ＧＰＵ１２が実行する必要があるコマンドの量の変化にＧＰＵ１２が迅速に反応していないことを意味する。例えば、ＧＰＵ１２のクロックレートが作業負荷の増加に応答して上昇（ramp up）しない場合、フレームが場合によってはドロップされることにより、ディスプレイ１８上に表示されるユーザインターフェースにジャンクがあり得る。ＧＰＵ１２のクロックレートが作業負荷の減少に応答して下降（ramp down）しない場合、ＧＰＵ１２は電力を浪費し得る。いくつかのケースでは、作業負荷に低減があった後にＧＰＵ１２のクロックレートを落とすのに２００〜８００ｍｓの遅延があり得、その間ＧＰＵ１２によって消費される電力は、そうあるべき電力よりも不必要に多くなる。
【００６２】
[0069]  本開示において説明されている技法を用いると、ＣＰＵ６は、クロックレートを決定するために単一のフレームのレンダリングに関する情報に頼り得、これは、ＣＰＵ６が、ビジーレベルまたはビジーレベル率の複数の測定を必要とせずにＧＰＵ１２のクロックレートを決定することを可能にする。また、ＣＰＵ６がビジーレベルまたはビジーレベル率をいつ決定するべきかをトリガするためにフレームの終わりを使用するので、アイドル時間のない連続した（back-to-back）フレームがある場合でも、またはフレームのレンダリングの最中にアイドル時間がある場合でも、ビジーレベルまたはビジーレベル率の決定にほとんどまたは全く影響ないこともある。いくつかの例では、ＣＰＵ６がＧＰＵ１２のクロックレートを決定するのではなくむしろ、ＧＰＵ１２は、それ自体のクロックレートを決定するために同様の技法をインプリメントし得る。
【００６３】
[0070]  ＧＰＵ１２がいつフレームをレンダリングし終えたかを決定するために、ＣＰＵ６は、ＧＰＵ１２がフレームをレンダリングし終えた（例えば、フレームの最後のピクセルのピクセル値を出力した）ことを決定するためにＣＰＵ６が使用する情報を、ＧＰＵ１２から受信し得る。１つの例として、ＯｐｅｎＧＬ ＡＰＩの一部として、フレームのレンダリングの終局に、ＧＰＵ１２は、次のフレームをレンダリングするためのシステムメモリ１０におけるメモリ空間について要求し得る。メモリ空間を要求するために、ＧＰＵ１２はメモリ空間についての要求をＣＰＵ６に出力し得、ＣＰＵ６は、このメモリ要求の受信を、ＧＰＵ１２がフレームのレンダリングを完了したことを決定するために使用し得る。例えば、ＧＰＵ１２は、メモリ空間についての要求を出力するためにｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩを実行する。一例として、ｇｌ．ＳｗａｐＢｕｆｆｅｒは、あるバッファを書込みから読取りに、別のバッファを読取りから書込みに変更し得るが、メモリ空間について要求するための他の方法が可能である。ＣＰＵ６は、要求の受信を、ＧＰＵ１２がフレームのレンダリングを完了したことを決定するために使用する。
【００６４】
[0071]  別の例として、ＧＰＵ１２のソフトウェアツールキットは、開発元がフレームのレンダリングの完了時にコールするようにＧＰＵ１２をプログラミングするユーザモードドライバ（ＵＭＤ：user mode driver）を含み得、ＵＭＤの実行は、ＧＰＵ１２にフレームの終わりマーカ（end-of-frame marker）を出力させる。ＣＰＵ６は、フレームの終わりマーカを、ＧＰＵ１２がフレームのレンダリングを完了したことを決定するために使用する。別の例として、ｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩは直接ＵＭＤを用いて更新され得、その結果、ＣＰＵ６は、ｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩに基づくフレームの終わりマーカを受信し、開発元の介入が必要ない。
【００６５】
[0072]  ＧＰＵ１２がフレームのレンダリングを完了したことをＣＰＵ６が決定するための他の技法が可能であり、本開示において説明されている技法は、上記例に限定されるとみなされるべきではない。さらに、ＧＰＵ１２がフレームの終わりからフレームの終わりまでの時間間隔を決定する例では、ＧＰＵ１２のコントローラは、ＧＰＵ１２がいつｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩを実行したか、またはＵＭＤがいつ実行されるかを決定し得る。このようなケースでは、コントローラは、ＧＰＵ１２がフレームの終わりに達したことを決定し得る。
【００６６】
[0073]  本開示において説明されている技法では、プロセッサ（例えば、ホストプロセッサとも称されるＣＰＵ６、ＧＰＵ１２、またはその２つの組合せ）は、ＧＰＵ１２が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定し、ＧＰＵ１２が第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定し得る。第１の時間インスタンスは、ＧＰＵ１２が現在のフレームの最後のピクセルのピクセル値を決定したインスタンス、またはＧＰＵ１２が現在のフレームの最後のピクセルのピクセル値を出力したインスタンスである。第２の時間インスタンスは、ＧＰＵ１２が前のフレームの最後のピクセルのピクセル値を決定したインスタンス、またはＧＰＵ１２が現在のフレームの最後のピクセルのピクセル値を出力したインスタンスである。
【００６７】
[0074]  いくつかのケースでは、ＧＰＵ１２は、現在のフレームのレンダリング中の少なくとも一部分の間アイドル状態であり得る。例えば、ＧＰＵ１２が第１のフレームのレンダリングを開始した時間から、ＧＰＵ１２は連続的にフレームをレンダリングしないこともあり、しばらくの間アイドル状態であり得る。その一部分の間アイドル状態であった後、ＧＰＵ１２は、第１のフレームのレンダリングを継続し得、次いで、第１のフレームのレンダリングがいつ完了したかをＣＰＵ６に示すか、または第１のフレームのレンダリングがいつ完了したかを（例えば、コントローラを介して）決定する。
【００６８】
[0075]  いくつかのケースでは、前のフレームと現在のフレームとの合間にいずれのアイドル時間もないこともある。例えば、ＣＰＵ６は、ＧＰＵ１２に、第２の前のフレームをレンダリングするように命令し、次いですぐに、ＧＰＵ１２に、第１の現在のフレームをレンダリングするように命令し得る。この例では、ＧＰＵ１２は、第２のフレームのレンダリングと第１のフレームのレンダリングとの間にＧＰＵ１２のアイドル時間がないように、第２のフレームのレンダリングの完了直後に第１のフレームのレンダリングを始める。
【００６９】
[0076]  ＣＰＵ６は、次のフレームをレンダリングするためのメモリについての要求を受信することに基づいて第１の時間インスタンスおよび第２の時間インスタンスを決定し得る。同様に、ＧＰＵ１２は、次のフレームをレンダリングするためのメモリについての要求がいつ送信されたかに基づいて第１の時間インスタンスおよび第２の時間インスタンスを決定し得る。このように、プロセッサは、ＧＰＵ１２がアイドル状態になるより前に、および前のフレームまたは現在のフレームのレンダリングの完了の本質的に直後に、第１の時間インスタンスおよび第２の時間インスタンスを決定し得る。例えば、プロセッサは、ＧＰＵ１２が第２の（前の）フレームまたは第１の（現在の）フレームをレンダリングし終えたときから、５ｍｓ、２ｍｓ未満、またはさらには可能性として１ｍｓ未満で（例えば、ＧＰＵ１２がアイドル状態であることをＣＰＵ６が決定するのにかかる時間よりも少ない時間で）、ＧＰＵ１２が第２のフレームまたは第１のフレームをレンダリングし終えたことを決定し得る。
【００７０】
[0077]  プロセッサ（例えば、ＣＰＵ６および／またはＧＰＵ１２）は、第１の時間インスタンスおよび第２の時間インスタンス（例えば、第１の時間インスタンスについての時間と第２の時間インスタンスの時間との間の差）に基づいて時間間隔を決定し得る。プロセッサは、時間間隔中に現在のフレームをレンダリングするためのＧＰＵ１２のビジーレベル（例えば、時間間隔中にフレームをレンダリングするための作業負荷を処理するための時間量）を決定し得る。
【００７１】
[0078]  決定されたビジーレベルに基づいて、プロセッサは、ＧＰＵ１２のクロックレートを決定し得る。例えば、プロセッサは、決定されたビジーレベルおよび決定された時間間隔に基づいてビジーレベル率を決定し得る（例えば、時間間隔中に作業負荷を処理するための時間量を時間間隔の時間量で除算する）。プロセッサは、ビジーレベル率をしきい値と比較し、比較に基づいてクロックレートを決定し得る。
【００７２】
[0079]  別の例として、プロセッサは、平均時間間隔を決定するために、時間間隔と１つまたは複数の前の時間間隔とを平均化し得る。この例では、１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示す。例えば、プロセッサは、Ｎ個の時間間隔について、現在のフレームのレンダリングと前のフレームのレンダリングとの間の時間間隔、前のフレームのレンダリングと前のフレームの直前のフレームのレンダリングとの間の時間間隔、および同様に続くものを平均化し得る。このような平均化は、ウィンドウ化された移動平均（windowed running average）とみなされ得る。
【００７３】
[0080]  プロセッサは、決定されたビジーレベルおよび平均時間間隔に基づいてビジーレベル率を決定し、ビジーレベル率をしきい値と比較し得る。上記と同様に、プロセッサは、比較に基づいてクロックレートを決定し得る。
【００７４】
[0081]  プロセッサは、決定されたビジーレベルに基づいてＧＰＵ１２のクロックレートを決定し得る。いくつかの例では、プロセッサは、他のフレームは含めず第１のフレームのみをレンダリングする（rendering the first frame and no other frame）ための決定されたビジーレベルに基づいてＧＰＵ１２のクロックレートを決定し得る。このように、プロセッサは、ＧＰＵ１２が複数のフレームをレンダリングした後ではなくむしろ単一のフレームに基づいてクロックレートを決定するように構成され、これは、ＧＰＵ１２が、ほとんど遅延なくその動作周波数を上昇または下降させることを可能にし、その結果、ＧＰＵ１２は、その最低周波数レベルで動作しながら依然として適時にコマンドの実行を完了する。
【００７５】
[0082]  プロセッサは、ＧＰＵ１２のクロックレートを、決定されたクロックレートに設定し得る。例えば、プロセッサがＣＰＵ６である例では、ＣＰＵ６は、ＧＰＵ１２に、ＧＰＵ１２のクロックレートを、決定されたクロックレートに設定するように命令し得る。プロセッサがＧＰＵ１２である例では、ＧＰＵ１２のコントローラは、ＧＰＵ１２に、ＧＰＵ１２のクロックレートを設定するように命令し得る。ＧＰＵ１２は次いで、決定されたクロックレートで動作し得る。プロセッサは、後続のフレームをレンダリングするためのクロックレートを設定する現在のフレームに基づいてＧＰＵ１２のクロックレートを決定するが、クロックレートを決定するために１つのみのフレームを使用することによって、プロセッサは、クロックレートが正しくなかった場合にクロックレートをすぐに更新し得、これは、プロセッサが、ＧＰＵ１２が次のフレームのレンダリングを完了した直後にクロックレートを更新し得るからである。
【００７６】
[0083]  図２は、より詳細に図１に例示されているデバイスのコンポーネントを例示するブロック図である。図２に例示されているように、ＧＰＵ１２は、コントローラ３０、発振器３４、カウンタレジスタ３５、シェーダコア（shader core）３６、および固定機能パイプライン（fixed-function pipeline）３８を含む。シェーダコア３６および固定機能パイプライン３８は共に、グラフィックスまたは非グラフィックス関連機能を実行するために使用される実行パイプラインを形成し得る。１つのシェーダコア３６のみが例示されているが、いくつかの例では、ＧＰＵ１２は、シェーダコア３６と同様の１つまたは複数のシェーダコアを含み得る。
【００７７】
[0084]  ＧＰＵ１２が実行することになるコマンドは、ＧＰＵ１２のコントローラ３０によって決定されたように、シェーダコア３６および固定機能パイプライン３８によって実行される。コントローラ３０は、ＧＰＵ１２上のハードウェアとして、またはＧＰＵ１２のハードウェア上で実行されるソフトウェアあるいはファームウェアとしてインプリメントされ得る。コントローラ３０は、ＧＰＵ１２がクロックレートを決定しているケースにおいて例となる技法を行うための上述されたコントローラの例である。
【００７８】
[0085]  コントローラ３０は、システムメモリ１０のコマンドバッファ４０から、または直接ＣＰＵ６から、フレームをレンダリングするために実行されることになるコマンドを受信（例えば、ＧＰＵ１２によってこれから実行されるべきとＣＰＵ６が決定したサブミットされたコマンドを受信）し得る。コントローラ３０はまた、システムメモリ１０のデータバッファ４２から、または直接ＣＰＵ６から、コマンドのためのオペランドデータを取り出し得る。例えば、コマンドバッファ４０は、ＡとＢを加算するためのコマンドを記憶し得る。コントローラ３０は、このコマンドをコマンドバッファ４０から取り出し、ＡとＢの値をデータバッファ４２から取り出す。コントローラ３０は、どのコマンドがシェーダコア３６によって実行されることになるかと（例えば、ソフトウェア命令はシェーダコア３６上で実行される）、どのコマンドが固定機能パイプライン３８によって実行されることになるかと（例えば、固定機能パイプライン３８のユニットのためのコマンド）を決定し得る。
【００７９】
[0086]  いくつかの例では、コマンドバッファ４０およびデータバッファ４２の一方または両方からのコマンドおよび／またはデータは、ＧＰＵ１２のローカルメモリ１４の一部であり得る。例えば、ＧＰＵ１２は命令キャッシュおよびデータキャッシュを含み得、これらは、コマンドバッファ４０からのコマンドと、データバッファ４２からのデータとをそれぞれ記憶する、ローカルメモリ１４の一部であり得る。これらの例では、コントローラ３０は、ローカルメモリ１４からコマンドおよび／またはデータを取り出し得る。
【００８０】
[0087]  シェーダコア３６および固定機能パイプライン３８は、互いにデータを送信および受信し得る。例えば、シェーダコア３６が実行するコマンドのいくつかは、固定機能パイプライン３８のユニットが実行することになるコマンドのためのオペランドである中間データを生成し得る。同様に、固定機能パイプライン３８のユニットが実行するコマンドのいくつかは、シェーダコア３６が実行することになるコマンドのためのオペランドである中間データを生成し得る。このように、受信されたデータは、パイプライン化方式（pipelined fashion）で固定機能パイプライン３８およびシェーダコア３６のユニットを通して徐々に処理される。したがって、シェーダコア３６および固定機能パイプライン３８は、実行パイプラインをインプリメントするものとして言及され得る。いくつかの例では、ＧＰＵ１２は、１つより多くのシェーダコア３６を含み得、図２の例は、単に理解を助けるために提供されている。
【００８１】
[0088]  一般に、シェーダコア３６は、実行されることになる様々なタイプのコマンドを与え、これは、ユーザが、最も考えられる手法で所望のタスクを行うようにシェーダコア３６をプログラミングすることができるので、シェーダコア３６がプログラム可能であり、機能的な柔軟性をユーザに提供することを意味する。しかしながら、固定機能パイプライン３８の固定機能ユニットは、固定機能ユニットがタスクを行う手法の場合ハードワイヤード（hardwired）である。したがって、固定機能ユニットは、あまり機能的柔軟性を提供しないこともある。
【００８２】
[0089]  図２にも例示されているように、ＧＰＵ１２は発振器３４を含む。発振器３４は、シェーダコア３６および／または固定機能パイプライン３８のユニットがコマンドを実行する時間インスタンスを設定するクロック信号を出力する。発振器３４がＧＰＵ１２の内部にあると例示されているが、いくつかの例では、発振器３４はＧＰＵ１２の外部にあり得る。また、発振器３４は、必ずしもただＧＰＵ１２にクロック信号を提供する必要があるわけではなく、他のコンポーネントにも同様にクロック信号を提供し得る。
【００８３】
[0090]  発振器３４は、方形波、正弦波、三角波、または他のタイプの周期波を生成し得る。発振器３４は、生成された電波の電圧を増幅するための増幅器を含み、結果として生じる電波をＧＰＵ１２のためのクロック信号として出力し得る。
【００８４】
[0091]  いくつかの例では、発振器３４によって出力されたクロック信号の立ち上がりエッジまたは立ち下がりエッジ上で、シェーダコア３６および固定機能パイプライン３８の各ユニットは、１つのコマンドを実行し得る。いくつかのケースでは、コマンドはサブコマンドへと分割され得、シェーダコア３６および固定機能パイプライン３８の各ユニットは、クロック信号の立ち上がりエッジまたは立ち下がりエッジに応答してサブコマンドを実行し得る。例えば、Ａ＋ＢというコマンドはＡの値とＢの値を取り出すサブコマンドを含み、シェーダコア３６または固定機能パイプライン３８は、クロック信号の立ち上がりエッジまたは立ち下がりエッジにおいてこれらのサブコマンドの各々を実行し得る。
【００８５】
[0092]  シェーダコア３６および固定機能パイプライン３８のユニットがコマンドを実行するレートは、ＧＰＵ１２の電力消費に影響を及ぼし得る。例えば、発振器３４によって出力されるクロック信号の周波数が比較的高い場合、シェーダコア３６および固定機能パイプライン３８のユニットがクロック信号の比較的低い周波数の場合に実行することになるコマンドの数と比較して、シェーダコア３６および固定機能パイプライン３８のユニットは、時間期間内により多くのコマンドを実行し得る。しかしながら、ＧＰＵ１２の電力消費は、シェーダコア３６および固定機能パイプライン３８のユニットが、（発振器３４からのクロック信号のより低い周波数により）時間の期間においてより少ないコマンドを実行している事例と比較するよりも、シェーダコア３６および固定機能パイプライン３８のユニットが、（発振器３４からのクロック信号のより高い周波数により）時間の期間においてより多くのコマンドを実行している事例ではより多くなり得る。
【００８６】
[0093]  上述されたように、ＣＰＵ６は、ＧＰＵ１２の超並列処理能力によりＧＰＵ１２にタスクをオフロードし得る。例えば、ＧＰＵ１２は、ＳＩＭＤ（single instruction, multiple data）構造を用いて設計され得る。ＳＩＭＤ構造では、シェーダコア３６は複数のＳＩＭＤ処理要素を含み、ここで、各ＳＩＭＤ処理要素は、異なるデータに対してであるが同じコマンドを実行する。
【００８７】
[0094]  特定のＳＩＭＤ処理要素上で実行される特定のコマンドは、スレッド（thread）と称される。各ＳＩＭＤ処理要素は、所与のスレッドのためのデータが異なり得るので、異なるスレッドを実行すると考えられ得るが、しかしながら、処理要素上で実行されるスレッドは、他の処理要素上で実行されるコマンドと同じコマンドである。このように、ＳＩＭＤ構造は、ＧＰＵ１２が並列に（例えば、同時に）多くのタスクを行うことを可能にする。このようなＳＩＭＤ構造のＧＰＵ１２の場合、各ＳＩＭＤ処理要素は、クロック信号の立ち上がりエッジまたは立ち下がりエッジ上で１つのスレッドを実行し得る。
【００８８】
[0095]  混乱を避けるために、本開示は、シェーダコア３６または固定機能パイプライン３８のユニットによって実行されるプロセスを概して指すために、「コマンド」という用語を使用する。例えば、コマンドは、実際のコマンド、成分サブコマンド（constituent sub-commands）（例えば、メモリコールコマンド（memory call commands））、スレッド、またはＧＰＵ１２が特定の機能を実行する他の方法を含む。ＧＰＵ１２は、シェーダコア３６および固定機能パイプライン３８を含むので、ＧＰＵ１２は、コマンドを実行するとみなされ得る。
【００８９】
[0096]  また、上記例では、シェーダコア３６または固定機能パイプライン３８のユニットは、発振器３４によって出力されたクロック信号の立ち上がりエッジまたは立ち下がりエッジに応答してコマンドを実行する。しかしながら、いくつかの例では、シェーダコア３６または固定機能パイプライン３８のユニットは、クロック信号の立ち上がりエッジ上で１つのコマンドを実行し、立ち下がりエッジ上で別の後続のコマンドを実行し得る。コマンドを「クロックする」ための他の方法があり得、本開示において説明されている技法は、上記例に限定されるものではない。
【００９０】
[0097]  ＧＰＵ１２は立ち上がりエッジ、立ち下がりエッジ、または両方ごとにコマンドを実行するので、発振器３４によって出力されるクロック信号の周波数（クロックレートとも称される）は、ＧＰＵ１２がある特定の時間内に実行することができるコマンドの量を設定する。例えば、ＧＰＵ１２がクロック信号の立ち上がりエッジにつき１つのコマンドを実行し、クロック信号の周波数が１ＭＨｚである場合、ＧＰＵ１２は１秒で１００万個のコマンドを実行することができる。
【００９１】
[0098]  図２に例示されているように、ＣＰＵ６は、点線のボックスによって例示されているアプリケーション２６を実行する。実行中、アプリケーション２６は、シェーダプログラム（例えば、頂点シェーダ、フラグメントシェーダ、非グラフィックスアプリケーションのためのコンピュートシェーダ（compute shaders）、および同様のもの）を取り出し実行するようにＧＰＵ１２に命令するコマンドを含む、ＧＰＵ１２実行されることになるコマンドを生成する。さらに、アプリケーション２６は、コマンドがそれに対して作用するデータ（すなわち、コマンドのためのオペランド）を生成する。ＣＰＵ６は、生成されたコマンドをコマンドバッファ４０に記憶し、オペランドデータをデータバッファ４２に記憶する。
【００９２】
[0099]  ＣＰＵ６が、生成されたコマンドをコマンドバッファ４０に記憶した後、ＣＰＵ６は、ＧＰＵ１２による実行のためにコマンドを利用可能にする。例えば、ＣＰＵ６は、記憶されたコマンドのセットのメモリアドレスと、それらのオペランドデータと、ＧＰＵ１２がいつコマンドのセットを実行することになるかを示す情報とをＧＰＵ１２に通信する。このように、ＣＰＵ６は、フレームをレンダリングするように実行するためのコマンドをＧＰＵ１２にサブミットする。
【００９３】
[0100]  図２に例示されているように、ＣＰＵ６はまた、グラフィックスドライバ２８を実行し得る。いくつかの例では、グラフィックスドライバ２８は、ＣＰＵ６のハードウェアまたはハードウェアユニット上で実行されるソフトウェアあるいはファームウェアであり得る。グラフィックスドライバ２８は、ＣＰＵ６およびＧＰＵ１２が互いに通信することを可能にするように構成され得る。例えば、ＣＰＵ６は、グラフィックスまたは非グラフィックス処理タスクをＧＰＵ１２にオフロードするとき、ＣＰＵ６は、グラフィックスドライバ２８を介してＧＰＵ１２にそのような処理タスクをオフロードする。例えば、ＧＰＵ１２が実行することになるコマンドの量を示す情報をＣＰＵ６が出力するとき、グラフィックスドライバ２８は、ＧＰＵ１２に情報を出力するＣＰＵ６のユニットであり得る。
【００９４】
[0101]  追加の例として、アプリケーション２６は、グラフィックスデータおよびグラフィックスコマンドを生成し、ＣＰＵ６は、このグラフィックスデータの処理をＧＰＵ１２にオフロードし得る。この例では、ＣＰＵ６は、グラフィックスデータをデータバッファ４２に、グラフィックスコマンドをコマンドバッファ４０に記憶し得、グラフィックスドライバ２８は、グラフィックスデータおよびグラフィックスコマンドをそれぞれデータバッファ４２およびコマンドバッファ４０からいつ取り出すべきかと、それぞれデータバッファ４２およびコマンドバッファ４０からのグラフィックスデータおよびグラフィックスコマンドをどこから取り出すべきかと、コマンドのセットのうちの１つまたは複数のコマンドを実行することによってグラフィックスデータをいつ処理するべきかと、をＧＰＵ１２に命令し得る。
【００９５】
[0102]  また、アプリケーション２６は、ＧＰＵ１２が１つまたは複数のシェーダプログラムを実行することを必要とし得る。例えば、アプリケーション２６は、（例えば、図１のディスプレイ１８上に）表示されることになるフレームについてのピクセル値を生成するために、シェーダコア３６が頂点シェーダおよびフラグメントシェーダを実行することを必要とし得る。グラフィックスドライバ２８は、シェーダプログラムをいつ実行するべきかをＧＰＵ１２に命令し、データバッファ４２からのグラフィックスデータをどこで取り出すべきかと、コマンドバッファ４０からの、またはシステムメモリ１０内の他のロケーションからのコマンドをどこで取り出すべきかと、をＧＰＵ１２に命令し得る。このように、グラフィックスドライバ２８は、ＣＰＵ６とＧＰＵ１２との間にリンクを形成し得る。
【００９６】
[0103]  グラフィックスドライバ２８は、アプリケーション処理インターフェース（ＡＰＩ）にしたがって構成され得るが、グラフィックスドライバ２８は、特定のＡＰＩにしたがって構成されるものと限定される必要はない。デバイス２がモバイルデバイスである例では、グラフィックスドライバ２８は、ＯｐｅｎＧＬ ＥＳ ＡＰＩにしたがって構成され得る。ＯｐｅｎＧＬ ＥＳ ＡＰＩは、モバイルデバイス用に特別に設計されている。デバイス２が非モバイルデバイスである例では、グラフィックスドライバ２８は、ＯｐｅｎＧＬ ＡＰＩにしたがって構成され得る。
【００９７】
[0104]  サブミットされたコマンドにおけるコマンドの量は、ユーザインターフェースまたはゲームアプリケーションの１つのフレームをレンダリングするのに必要なコマンドに基づき得る。ユーザインターフェースの例の場合、ＧＰＵ１２は、ジャンクフリーのユーザエクスペリエンスを提供するために、ｖｓｙｎｃウィンドウ（例えば、１６ｍｓごとなどの、それまでに新たなフレームが表示のために準備ができているべき時間）内に、ユーザインターフェースの１つのフレームをレンダリングするのに必要なコマンドを実行する必要があり得る。比較的大量のコンテンツが表示される必要がある場合、比較的少量のコンテンツが表示される必要がある場合よりも、コマンドの量が多くなり得る。
【００９８】
[0105]  設定された時間期間内にＧＰＵ１２がサブミットされたコマンドを実行することができることを確実にするために、コントローラ３０は、発振器３４が出力するクロック信号の周波数（すなわち、クロックレート）を調整し得る。しかしながら、クロックレートが、設定された時間期間内にＧＰＵ１２がサブミットされたコマンドを実行することを可能にするのに十分高くなるようにクロック信号のクロックレートを調整するために、コントローラ３０は、発振器３４のクロックレートを増加させるべきか、減少させるべきか、同じに保つべきかを示す情報を受信し得る。いくつかの例では、コントローラ３０は、発振器３４が出力するクロック信号についての特定のクロックレートを示す情報を受信し得る。
【００９９】
[0106]  ＣＰＵ６がＧＰＵ１２のクロックレートを決定する本開示において説明されている技法では、周波数管理モジュール３２は、発振器３４が出力するクロック信号のクロックレートを決定するように構成され得る。ＧＰＵ１２がクロックレートを決定するいくつかの例では、コントローラ３０は、ＧＰＵ１２上でだが、周波数管理モジュール３２に関連して説明された例となる技法を行うように構成され得る。
【０１００】
[0107]  動的クロックおよび電圧スケーリング（ＤＣＶＳ：dynamic clock and voltage scaling）モジュールとも称される、周波数管理モジュール３２は、ＣＰＵ６上で実行されるソフトウェアであると例示されている。しかしながら、周波数管理モジュール３２は、ＣＰＵ６上のハードウェア、またはハードウェアとソフトウェアあるいはファームウェアの組合せであり得る。
【０１０１】
[0108]  周波数管理モジュール３２は、ＧＰＵ１２が第１の（現在の）フレームのレンダリングを完了した第１の時間インスタンスと、ＧＰＵ１２が現在のフレームの直前にある第２の（前の）フレームのレンダリングを完了した第２の時間インスタンスとを決定するように構成され得る。本開示では、現在のフレームの直前にある前のフレームは、現在のフレームより前にあり、他のいずれのフレームも前のフレームと現在のフレームとの合間にないフレームを指す。いくつかのケースでは、ＧＰＵ１２が前のフレームのレンダリングを完了したときから、ＧＰＵ１２が現在のフレームをレンダリングし始めたときまでの間に何らかのアイドル時間があり得る。しかしながら、いくつかの例では、ＧＰＵ１２が前のフレームのレンダリングを完了したときから、ＧＰＵ１２が現在のフレームをレンダリングし始めたときまでの間にそのようなアイドル時間はなくてもよい。
【０１０２】
[0109]  例えば、グラフィックスドライバ２８は、２つのフレームをレンダリングするためのコマンドを一度にサブミットし得る。この例では、コントローラ３０は、２つのフレームのうちの第１のフレームをレンダリングするためのコマンドを受信し、コマンドを実行するようにシェーダコア３６および固定機能パイプライン３８に命令する。コマンドがグラフィックスパイプラインを通って進むので、第１のフレームをレンダリングするための最後のコマンドがＧＰＵ１２のグラフィックスパイプラインにおける第１のユニットを過ぎたらすぐに、コントローラ３０は、第２のフレームの実行を始める第１のコマンドを取り出す（例えば、第２のフレームをレンダリングするためのコマンドの実行を始めるように、ＧＰＵ１２のグラフィックスパイプラインの第１のユニットに命令する）。この例では、フレーム間のＧＰＵ１２による処理に中断はない（例えば、１つのフレームのレンダリングと１つのフレームのレンダリングとの間（between the rendering of two frames）にアイドル時間はない）。いくつかのケースでは、グラフィックスドライバ２８は、２つより多くのフレームについてのコマンドを一度にサブミットし得る。
【０１０３】
[0110]  いくつかのケースでは、グラフィックスドライバ２８は、必ずしもフレームをレンダリングするのに必要な全コマンドを一度にＧＰＵ１２にサブミットするわけではないこともあるか、または全コマンドをサブミットし得るが全コマンドをすぐに順々に実行するようにＧＰＵ１２に命令しないこともある。例えば、グラフィックスドライバ２８は、フレームをレンダリングするための第１のセットのコマンドをサブミットし、次いで、ＧＰＵ１２がアイドル状態になる間さらなるコマンドを送るのを中断し、次いで、フレームをレンダリングするための残りのコマンドをサブミットし得る。別の例として、グラフィックスドライバ２８は、ＧＰＵ１２に全コマンドをサブミットし、次いで、ＧＰＵ１２に第１のセットのコマンドを実行するように命令し、次いで、ＧＰＵ１２がアイドル状態になる間コマンドの実行を中断するようにＧＰＵ１２に命令し、次いで、残りの命令を実行するようにＧＰＵ１２に命令し得る。フレームのレンダリング中にＧＰＵ１２がアイドル状態になる１つより多くの持続時間があり得、ＧＰＵ１２がフレームのレンダリング中に１つの持続時間だけの間アイドル状態になる上記例は、例示の目的のためだけに提供されている。
【０１０４】
[0111]  上述されたように、ＧＰＵ１２が現在のフレームまたは前のフレームのレンダリングを完了したインスタンスは、ＧＰＵ１２がそれぞれ現在のフレームまたは前のフレームの最後のピクセルのピクセル値を決定したインスタンスであるか、またはＧＰＵ１２がそれぞれ現在のフレームまたは前のフレームの最後のピクセルのピクセル値を出力したインスタンスである。１つの例として、ＧＰＵ１２がフレーム（例えば、現在のフレームまたは前のフレーム）のレンダリングを完了したインスタンスは、シェーダコア３６上のピクセルシェーダの最後の実行のインスタンスであるか、または、シェーダコア３６上で実行されるピクセルシェーダがフレームの最後のピクセル値を出力したインスタンスである。
【０１０５】
[0112]  周波数管理モジュール３２が、ＧＰＵ１２が（例えば、フレームのレンダリングの５ｍｓ、２ｍｓ、またはさらには１ｍｓ以内に）フレームをレンダリングし終えたところであると決定する１つの方法は、システムメモリ１０におけるメモリについての要求の受信に基づく。例示されていないが、ＧＰＵ１２は、システムメモリ１０内のフレームバッファにピクセル値（例えば、グラフィックスデータ）を出力する。フレームをレンダリングした後、コントローラ３０は、次のフレームのためのピクセル値をどこに記憶するべきかについてメモリロケーションをＣＰＵ６から要求するためにｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩを実行する。コントローラ３０がｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩを実行することになる非常に高いレベルの確実性があり得、それは、これが次のフレームをレンダリングするためのメモリがＧＰＵ１２に割り当てられる方法であるからである。
【０１０６】
[0113]  この例では、コントローラ３０は、グラフィックスドライバ２８にメモリについての要求を出力する。グラフィックスドライバ２８は、オペレーティングシステム２４および周波数管理モジュール３２に要求を転送する。周波数管理モジュール３２は、次に、ＧＰＵ１２がフレームのレンダリングを完了した時間インスタンスを、周波数管理モジュール３２が要求を受信した時間インスタンスとして決定する。オペレーティングシステム２４は、次のフレームについてのピクセル値を出力するためにＧＰＵ１２にメモリを割り当てる。
【０１０７】
[0114]  別の例として、コントローラ３０は、コントローラ３０に、グラフィックスドライバ２８にフレームの終わりマーカを出力させるＵＭＤ（ユーザモードドライバ）を実行し得、それは次いで、周波数管理モジュール３２にフレームの終わりマーカを転送する。別の例として、ｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩは、ＵＭＤを用いて更新され得るので、ｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩの通常の実行以外に追加の実行は必要ではない。
【０１０８】
[0115]  コントローラ３０がＧＰＵ１２のクロックレートを決定する例では、コントローラ３０は、ＵＭＤまたはｇｌ．ＳｗａｐＢｕｆｆｅｒ ＡＰＩがいつ実行されたかを決定し得る。実行に基づいて、コントローラ３０は、ＧＰＵ１２がフレームのレンダリングを完了したことを決定し得、実行のタイミングに基づいて、コントローラ３０は、フレームの終わりからフレームの終わりまでのレンダリング間に過ぎた時間量を決定し得る。
【０１０９】
[0116]  周波数管理モジュール３２は、第１の時間インスタンスおよび第２の時間インスタンスに基づいて時間間隔を決定し得る（例えば、第１の時間インスタンス、引くことの第２の時間インスタンス）。さらに、周波数管理モジュール３２は、時間間隔中に現在のフレームをレンダリングするためのＧＰＵ１２のビジーレベルを決定し得る。コントローラ３０は、コントローラ３０がそのクロックレートを決定する例で同様の機能を実行するように構成され得る。
【０１１０】
[0117]  コントローラ３０、シェーダコア３６、または固定機能パイプライン３８が、ローカルメモリ１４内の汎用レジスタ（ＧＰＲ）からデータを読み取る、またはそれにデータを記憶する度に、コントローラ３０は、カウンタレジスタ３５におけるカウンタを更新（例えば、インクリメント）し得る。周波数管理モジュール３２および／またはコントローラ３０は、前のフレームのレンダリング後にカウンタレジスタ３５を読み取っていたこともあり、現在のフレームのレンダリング後にカウンタレジスタ３５を読み取り得る。周波数管理モジュール３２および／またはコントローラ３０は、カウンタレジスタ３５から読み取られた２つの値の間の差を決定し得、結果として生じる値は、ＧＰＵ１２が現在のフレームをレンダリングするのにかかった発振器３４のクロックサイクルの数の近似値であり得る。周波数管理モジュール３２および／またはコントローラ３０は、ＧＰＵ１２がビジー状態であった時間量（例えば、ＧＰＵ１２のビジーレベル）を決定するために、クロックサイクルの決定された数に、発振器３４が現在のフレームのレンダリング中に出力していたクロック信号のクロックレートの時間期間を乗じ得る。
【０１１１】
[0118]  別の例として、ＧＰＵ１２の任意のＧＰＵサブブロックがビジー状態である限り、コントローラ３０は、カウンタレジスタ３５におけるカウンタを更新（例えば、インクリメント）し得る。上記のように、周波数管理モジュール３２および／またはコントローラ３０は、前のフレームのレンダリング後にカウンタレジスタ３５を読み取っていたこともあり、現在のフレームのレンダリング後にカウンタレジスタ３５を読み取り得る。周波数管理モジュール３２および／またはコントローラ３０は、カウンタレジスタ３５から読み取られた２つの値の間の差を決定し得、結果として生じる値は、ＧＰＵ１２が現在のフレームをレンダリングするのにかかった発振器３４のクロックサイクルの数の近似値であり得る。また、上記のように、周波数管理モジュール３２および／またはコントローラ３０は、ＧＰＵ１２がビジー状態であった時間量（例えば、ＧＰＵ１２のビジーレベル）を決定するために、クロックサイクルの決定された数に、発振器３４が現在のフレームのレンダリング中に出力していたクロック信号のクロックレートの時間期間を乗じ得る。ＧＰＵのビジーレベルを決定するための他の様々な方法があり得、上記は例となる２つの技法を提供している。
【０１１２】
[0119]  周波数管理モジュール３２および／またはコントローラ３０は、決定されたビジーレベルに基づいて、発振器３４が出力するクロック信号のクロックレートを決定し得る。ＣＰＵ６がクロックレートを設定する例では、周波数管理モジュール３２は次いで、発振器３４が出力するクロック信号のクロックレートを、決定されたクロックレートに設定するようにＧＰＵ１２のコントローラ３０に命令することを、グラフィックスドライバ２８に行わせ得る。ＧＰＵ１２がクロックレートを設定する例では、コントローラ３０は、発振器３４が出力するクロック信号のクロックレートを設定し得る。このように、周波数管理モジュール３２および／またはコントローラ３０は、他のフレームは含めず現在のフレームのみをレンダリングするための決定されたビジーレベルに基づいて、発振器３４が出力するクロック信号のクロックレートを決定し得る。
【０１１３】
[0120]  １つの例では、周波数管理モジュール３２および／またはコントローラ３０は、決定されたビジーレベルおよび決定された時間間隔に基づいてビジーレベル率を決定し得る（例えば、ビジーレベルを時間間隔で除算し１００を乗じる）。周波数管理モジュール３２および／またはコントローラ３０は、ビジーレベル率をしきい値と比較し、比較に基づいて、発振器３４が出力するクロック信号のクロックレートを決定し得る。
【０１１４】
[0121]  １つの例では、周波数管理モジュール３２および／またはコントローラ３０は、現在のフレームをレンダリングするための時間間隔と、１つまたは複数の前のフレーム（例えば、合計５個のフレーム）をレンダリングするための時間間隔とをトラッキングし得る。周波数管理モジュール３２および／またはコントローラ３０は、時間間隔の平均（すなわち、平均フレーム時間（ＡＦＴ：average frame time））を決定し得る。この例では、最初のフレーム時間は１つのｖｓｙｎｃ間隔（ディスプレイ１８のリフレッシュレートに依存してデフォルトでは１６．６７ｍｓ）に設定され得る。フレーム毎秒（ＦＰＳ）は、１／ＡＦＴに等しくてもよい。ｖｓｙｎｃ境界の（vsync-bound）グラフィックスアプリケーションのＦＰＳは通常、一定値であり、ＡＦＴは比較的安定している。
【０１１５】
[0122]  この例では、周波数管理モジュール３２および／またはコントローラ３０は、現在のフレームをレンダリングするためのビジーレベルを平均フレーム時間で除算することによってビジーレベル率を決定し得る。上記と同様に、周波数管理モジュール３２および／またはコントローラ３０は、ビジーレベル率をしきい値と比較し、比較に基づいて、発振器３４が出力するクロック信号のクロックレートを決定し得る。また、上記と同様に、周波数管理モジュール３２および／またはコントローラ３０は、クロックレートを決定するために現在のフレームのみをレンダリングするためのビジーレベルを使用し得るが、この例では、複数の前のフレームの時間間隔を使用し得る。
【０１１６】
[0123]  説明されたように、周波数管理モジュール３２および／またはコントローラ３０は、クロックレート決定のためのフレーム境界をトラッキングし得る。例えば、周波数管理モジュール３２および／またはコントローラ３０は、ＧＰＵ１２のビジーレベル（例えば、ＧＰＵ１２のフレーム負荷（frame load））と、フレームの終わりからフレームの終わりの時間間隔（例えば、前のフレームのレンダリングの完了から、現在のフレームのレンダリングの完了のフレーム時間または時間間隔）とを決定する。周波数管理モジュール３２および／またはコントローラ３０は、それにわたって周波数管理モジュール３２および／またはコントローラ３０がフレームをレンダリングするためのＧＰＵ１２のビジーレベルを決定する持続時間とビジーレベル率とを決定するためのタイムスタンプとして、メモリについての要求またはフレームの終わりマーカを使用し得る。
【０１１７】
[0124]  このように、周波数管理モジュール３２および／またはコントローラ３０は、クロックレートを正確に決定するために５個以上のフレームを必要とし得る他の技法と比較して、１つのフレーム時間に対してクロックレート決定が行われるときまでのレイテンシを低減させ得る。クロックレートの低レイテンシおよび正確な決定は、ジャンクがより少ない、よりスムーズなＵＩエクスペリエンスをもたらし、同時使用ケースにおいてなど厳密なクロックレート管理が必要であるケースで特に役立ち得る。また、本技法を用いると、クロックレートは、徐々に変化する必要はなく、必要な場合は急増し得る。例えば、クロックレートが２００ＭＨｚであるが、ＧＰＵ１２のビジーレベル率が３００％である場合、周波数管理モジュール３２は、発振器３４が３００ＭＨｚ、４００ＭＨｚ、および５００ＭＨｚのクロックレートオプションを無視して（bypassing）、クロックレートを６００ＭＨｚに急増することを発振器３４またはコントローラ３０が行わせ得ることを引き起こすようにコントローラ３０に命令し得る。
【０１１８】
[0125]  さらに、例となる技法がクロックレートを決定するためにフレームのレンダリングの完了に頼るので、ＧＰＵ１２がアイドル状態である、フレームのレンダリング中の１つまたは複数の部分がある場合でも、周波数管理モジュール３２および／またはコントローラ３０は、クロックレートフレーム中間レンダリングを決定しないこともあり、クロックレートを決定するより前にフレームがレンダリングされるまで待機し得る。また、本技法は、クロックレートを決定するためにＧＰＵ１２のアイドル時間に頼らないので、本開示において説明されている技法は、クロックレートをいつ決定するべきかを決定するためにアイドル時間に頼る他の技法と比較して、フレームのレンダリングとフレームのレンダリングとの間にアイドル時間がない事例においてでさえも、正確にかつ低レイテンシでクロックレートを決定し得る。
【０１１９】
[0126]  図３Ａ〜図３Ｃは、ＧＰＵ１２がフレームをレンダリングするためのコマンドを受信する例を例示するタイミング図である。図３Ａ〜図３Ｃは、ＧＰＵ１２がフレームをレンダリングするために受信するコマンドの異なるセットを例示している。図３Ａ〜図３Ｃに例示されている例では、ビジーレベル率が決定されるごとのＧＰＵ１２の実際のビジーレベル率が同じである（例えば、５０％のビジーレベル率）が、しかしながら、決定されるビジーレベル率は変わり得る。図３Ａ〜図３Ｃでは、ＧＰＵ１２のビジーレベル率は、ＧＰＵ１２のビジーレベルをＧＰＵ１２の２つのアイドル状態間の時間間隔で除算したものである。
【０１２０】
[0127]  図３Ａ〜図３Ｃのｘ軸の数字は、ＣＰＵ６がビジーレベル率を決定するインスタンスを例示している。例示されているように、ＧＰＵ１２がアイドル状態であるとの決定が行われる前に、ＧＰＵ１２がフレームのレンダリングを完了した後、いくらかの時間が過ぎている。したがって、ＣＰＵ６がビジーレベル率を決定する時間はフレームのレンダリング後であり、フレームのレンダリング時またはその直後ではない。図３Ａ〜図３Ｃでは、ビジーレベル率の決定が行われる前に、ＧＰＵ１２が最後のピクセルについてのピクセル値を出力した後、いくらかの時間が経過する。上述されたように、ＧＰＵ１２がアイドル状態であるときに基づいてビジーレベル率を決定することは、ビジーレベル率の正確な決定が行われることができる前に長い遅延を必要とし得る。
【０１２１】
[0128]  例えば、図３Ａは、ＧＰＵ１２がフレームをレンダリングし、次いでＧＰＵ１２がアイドル状態である設定された時間があり、次いでＧＰＵ１２が次のフレームをレンダリングする設定された量の時間があり、その後ＧＰＵ１２がアイドル状態である設定された時間が続く、というように続く理想的なケースを例示している。この例では、実際のビジーレベル率と測定ビジーレベル率が互いにあとを追う（track one another）（例えば、両方が５０％である）。しかしながら、理想的なＧＰＵトラフィックはまれである。
【０１２２】
[0129]  図３Ｂは、ＧＰＵ１２がフレームをレンダリングすることになるときの間隔が、それが一定であった図３Ａとは異なり、一定ではないケースを例示している。例えば、最後の２つのフレームについては、フレームのレンダリングとフレームのレンダリングとの間にＧＰＵ１２のためのアイドル時間がないこともある。この例では、サンプル１（例えば、第１のフレームのすぐ後）において、ＣＰＵ６は、ビジーレベル率が５０％であると決定し得、それは、実際のビジーレベル率と同じである。サンプル２（例えば、第２のフレームのすぐ後）では、時間間隔はより短いが、実行されるコマンドの量が各フレームについて同じである（例えば、フレーム負荷が同じである）ので、ＣＰＵ６は、ビジーレベル率が６０％であると決定し得る。このケースでは、フレーム３のレンダリングとフレーム４のレンダリングとの間にアイドル時間がないので、フレーム３をレンダリングした後いずれのサンプルも得られない。サンプル３（例えば、第４のフレームのすぐ後）では、時間間隔の量がさらにより大きくなり得るので、ＣＰＵ６は、ビジーレベル率が４０％であると決定し得る。決定された３つのビジーレベル率の平均は５０％（例えば、（５０％＋６０％＋４０％）割ることの３）であるが、５０％に達する前に４つのフレームが処理されている。
【０１２３】
[0130]  図３Ｃは、その間にＣＰＵ６がビジーレベル率を決定し得る、フレームのレンダリング中にアイドル時間があるケースを例示している。この例では、サンプル１においてＣＰＵ６は、ビジーレベル率を５０％と決定し得、サンプル２においてＣＰＵ６は、ビジーレベル率を６０％と決定し得、サンプル３においてＣＰＵ６は、ビジーレベル率を３０％と決定し得、サンプル４においてＣＰＵ６は、ビジーレベル率を３０％と決定し得、サンプル５においてＣＰＵ６は、ビジーレベル率を８０％と決定し得る。これらサンプルの平均は５０％であるが、５０％に達する前に５個のサンプルが処理されている。
【０１２４】
[0131]  それゆえ、図３Ａ〜図３Ｃでは、一定のビジーレベルを用いても、ＧＰＵ１２がアイドル状態になるときにＣＰＵ６がビジーレベル率を決定する場合、ＣＰＵ６が決定するビジーレベル率は変動し得る。これは、フレーム間アイドル状態の持続時間（inter-frame idle duration）が均等に分配されないため、および／またはフレームのレンダリングの一部分の間アイドル時間があり得るため、であり得る。いくつかの例では、ＣＰＵ６は、変動をフィルタリングして取り除く（filter out）ために、サンプル（例えば、図３Ｂおよび図３Ｃに例示されているように３個または５個のサンプル）の大きいスライドウィンドウ（sliding window）を使用し得る。しかしながら、大きいスライドウィンドウを待機する際、ＧＰＵ１２の発振器３４のクロック信号のクロックレートを設定するのに大きい遅延がある。
【０１２５】
[0132]  本開示において説明されている技法では、ＣＰＵ６がアイドル時間中ではなくむしろフレームのレンダリングの完了時にクロックレートを決定するので。したがって、変動が存在しないこともあり、ＣＰＵ６は、複数のフレームのレンダリングではなく１つのフレームをレンダリングした後にクロックレートを決定することができ得る。また、図３Ａ〜図３Ｃに例示されている例がＣＰＵ６に関連して説明されているが、例となる技法は、ＧＰＵ１２によっても同様に行われ得る。
【０１２６】
[0133]  図４は、ＧＰＵ１２がフレームをレンダリングするためのコマンドを受信する別の例を例示するタイミング図である。図４は、本開示において説明されている技法が、発振器３４が出力するクロック信号のクロックレートを決定することのレイテンシをなぜ低減するのかを例示するために使用されている。ＣＰＵ６に関連して例が例示されているが、ＧＰＵ１２によっても同様に行われ得る。レイテンシの低減を例示するために、図４は、ＣＰＵ６が現在のフレームのみをレンダリングすることに基づいてビジーレベル率を決定することに関連して説明され、ＣＰＵ６がビジーレベル率を平均化することによってビジーレベル率を決定することに関連して説明される。ＧＰＵ１２がアイドル状態になる時間がフレームの終わりと同じであると仮定したとしても、レンダリングされることになる複数のフレームに頼り、そして平均化することは、ＧＰＵ１２のクロックレートが設定されることができるより前の時間量を遅延させる。アイドル時間がちょうどフレームの終わりにあるのは、どのようにプロセスが実際に作用するかではなく、例示のために、この仮定が理解しやすいように行われていることが理解されるべきである。
【０１２７】
[0134]  図４には、６個のフレームがある。最初の５個のフレームについてのビジーレベル（例えば、フレーム負荷）は１０ｍｓであり、第６のフレームについてのビジーレベルは１５ｍｓである。第１のフレームのためのフレーム間隔（例えば、理解しやすさのためだけに、アイドル時間からアイドル時間までと同じであると仮定されているフレームの終わりからフレームの終わりまで）は１６ｍｓであり、第２のフレームは１２ｍｓであり、第３のフレームは２０ｍｓであり、第４のフレームは２０ｍｓであり、第５のフレームは１２ｍｓであり、第６のフレームは１６ｍｓである。
【０１２８】
[0135]  ＣＰＵ６が現在のフレームのビジー時間率のみを使用する例の場合、ＣＰＵ６は、（最初のフレーム時間が１６ｍｓであると仮定して）第１のフレームについての平均時間間隔が１６ｍｓ（１６＋１６）／２）であると決定し、第１のフレームについてのビジー時間率が６３％（１０／１６）であると決定し得る。第２のフレームについて、ＣＰＵ６は、平均時間間隔が１５ｍｓ（（１６＋１６＋１２）／３））と決定し、ビジー時間率が６７％（１０／１５）と決定し得る。第３のフレームについて、ＣＰＵ６は、平均時間間隔が１６ｍｓ（（１６＋１６＋１２＋２０）／４））と決定し、ビジー時間率が６３％（１０／１６）と決定し得る。第４のフレームについて、ＣＰＵ６は、平均時間間隔が１７ｍｓ（（１６＋１６＋１２＋２０＋２０）／５））と決定し、ビジー時間率が５９％（１０／１７）と決定し得る。第５のフレームについて、ＣＰＵ６は、平均時間間隔が１６ｍｓ（（１６＋１６＋１２＋２０＋２０＋１２）／６））と決定し、ビジー時間率が６３％（１０／１６）と決定し得る。第６のフレームについて、ＣＰＵ６は、平均時間間隔が１６ｍｓ（（１６＋１６＋１２＋２０＋２０＋１２＋１６）／７））と決定し、ビジー時間率が９４％（１５／１６）と決定し得る。
【０１２９】
[0136]  この例で見られるように、ＣＰＵ６は時間間隔の平均を決定し得るが、ＣＰＵ６は、ビジー時間率を決定するために現在のフレームのみのビジーレベルを使用し得る。例えば、ＣＰＵ６は、移動平均（moving average）ではなく、最新のフレーム利用率（the most current frame utilization）を使用し得る。いくつかの例では、ユーザモードドライバ（ＵＭＤ）は、ＣＰＵ６がフレーム境界におけるＧＰＵ１２の作業負荷を決定することを可能にする、フレーム境界情報（例えば、フレームの終わり）を用いてカーネルデバイスドライバ（例えば、グラフィックスドライバ２８）を助け得る。
【０１３０】
[0137]  この例では、前の５個のフレームがすべて６３％というサンプルのビジー率を有していたと仮定する。また、前の５個のフレームが平均ビジー率を決定するために使用されると仮定する。ＣＰＵ６がＧＰＵ１２のアイドル時間を待機するケースの場合、第１のフレームについて、ＣＰＵ６は、ビジーレベル率が６３％（１０／１６）と決定し、平均ビジーレベル率が６３％（例えば、（６３＋６３＋６３＋６３＋６３）／５＝６３）と決定し得る。第２のフレームについて、ＣＰＵ６は、ビジーレベル率が８３％（１０／１２）と決定し、平均ビジーレベル率が６７％（例えば、（６３＋６３＋６３＋６３＋８３）／５＝６７）と決定し得る。第３のフレームについて、ＣＰＵ６は、ビジーレベル率が５０％（１０／２０）と決定し、平均ビジーレベル率が６５％（例えば、（６３＋６３＋６３＋８３＋５０）／５＝６４．４）と決定し得る。第４のフレームについて、ＣＰＵ６は、ビジーレベル率が５０％（１０／２０）と決定し、平均ビジーレベル率が６２％（例えば、（６３＋６３＋８３＋５０＋５０）／５＝６１．８）と決定し得る。第５のフレームについて、ＣＰＵ６は、ビジーレベル率が８３％（１０／１２）と決定し、平均ビジーレベル率が６６％（例えば、（６３＋８３＋５０＋５０＋８３）／５＝６５．８）と決定し得る。第６のフレームについて、ＣＰＵ６は、ビジーレベル率が９４％（１５／１６）と決定し、平均ビジーレベル率が７２％（例えば、（８３＋５０＋５０＋８３＋９４）／５＝７２）と決定し得る。
【０１３１】
[0138]  図５は、ＧＰＵが時間の期間にわたって実行することになるコマンドの数を例示するグラフである。図５の例では、フレームレートは３０フレーム毎秒であり、例示されているように、ビジーレベルがそれから導出されることができる、ＧＰＵ１２のフレーム負荷は、２４，０００でほぼ一定である。
【０１３２】
[0139]  図６Ａは、１つの例となる技法を利用する、図５に例示されている時間の期間にわたるビジーレベル率の決定を例示するグラフである。図６Ｂは、別の例となる技法を利用する、図５に例示されている時間の期間にわたるビジーレベル率の決定を例示するグラフである。図６Ａの例では、ＣＰＵ６および／またはＧＰＵ１２は、ＧＰＵ１２のアイドル状態からアイドル状態までの時間に基づいて発振器３４のクロック信号のクロックレートを決定し得、図６Ｂの例では、ＣＰＵ６および／またはＧＰＵ１２は、フレームの終わりからフレームの終わりまでに基づいて発振器３４のクロック信号のクロックレートを決定し得る。図６Ａに例示されているように、クロックレートは変動する。しかしながら、図６Ｂでは、クロックレートは、ある程度一定である。
【０１３３】
[0140]  図７は、本開示において説明されている技法による、クロックレート決定の例となる方法を例示するフローチャートである。説明されたように、例となる技法は、ＣＰＵ６、ＧＰＵ１２、またはＣＰＵ６とＧＰＵ１２の組合せによって行われ得る。したがって、図７は、プロセッサに関連して説明されている。プロセッサの１つの例はＣＰＵ６であり、プロセッサの１つの例はＧＰＵ１２であり、プロセッサの１つの例はＣＰＵ６とＧＰＵ１２の組合せである。
【０１３４】
[0141]  例示されているように、プロセッサ（例えば、ＣＰＵ６および／またはＧＰＵ１２）は、ＧＰＵ１２が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定する（５０）。第１の時間インスタンスは、ＧＰＵ１２が第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、またはＧＰＵ１２が第１のフレームの最後のピクセルのピクセル値を出力したインスタンスを備える。プロセッサは、ＧＰＵ１２が現在のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定する（５２）。第２の時間インスタンスは、ＧＰＵ１２が第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、またはＧＰＵ１２が第２のフレームの最後のピクセルのピクセル値を出力したインスタンスを備える。
【０１３５】
[0142]  いくつかのケースでは、ＧＰＵ１２は、第１のフレームのレンダリング中の少なくとも一部分の間アイドル状態である。また、いくつかのケースでは、ＧＰＵ１２は、第２のフレームのレンダリングと第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、第２のフレームのレンダリングの完了直後に第１のフレームのレンダリングを始める。ＣＰＵ６は、次のフレームをレンダリングするためのメモリについての要求を受信し、ＣＰＵ６は、次のフレームをレンダリングするためのメモリについての要求を受信することに応答して第１の時間インスタンスを決定する。
【０１３６】
[0143]  プロセッサは、第１の時間インスタンスおよび第２の時間インスタンスに基づいて時間間隔を決定する（５４）。プロセッサは、時間間隔中に第１のフレームをレンダリングするためのＧＰＵ１２のビジーレベルを決定する（５６）。決定されたビジーレベルに基づいて、プロセッサは、ＧＰＵ１２のクロックレートを設定し得る（５８）。
【０１３７】
[0144]  いくつかの例では、プロセッサは、決定されたビジーレベルに基づいてＧＰＵ１２のクロックレートを決定し、プロセッサは、決定されたクロックレートに基づいてＧＰＵ１２のクロックレートを設定する。例えば、ＣＰＵ６は、発振器３４のクロックレートを設定するようにコントローラ３０に命令し得る、またはコントローラ３０は、発振器３４のクロックレートを直接設定し得る。プロセッサは、他のフレームは含めず第１のフレームのみをレンダリングするための決定されたビジーレベルに基づいてＧＰＵ１２のためのクロックレートを決定し得る。
【０１３８】
[0145]  いくつかの例では、プロセッサは、決定されたビジーレベルおよび決定された時間間隔に基づいてビジーレベル率を決定し、ビジーレベル率をしきい値と比較し、比較に基づいてクロックレートを決定し得る。いくつかの例では、プロセッサは、平均時間間隔を決定するために時間間隔および１つまたは複数の前の時間間隔を平均化し得、１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示す。プロセッサは、決定されたビジーレベルおよび平均時間インターフェースに基づいてビジーレベル率を決定し得、ビジーレベル率をしきい値と比較し、比較に基づいてクロックレートを決定し得る。
【０１３９】
[0146]  １つまたは複数の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せにおいてインプリメントされ得る。ソフトウェアにおいてインプリメントされる場合、機能は、１つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶され、ハードウェアベースの処理ユニットによって実行され得る。コンピュータ可読媒体は、データ記憶媒体のような有形媒体に対応する、コンピュータ可読記憶媒体を含み得る。このように、コンピュータ可読媒体は概して、非一時的である有形のコンピュータ可読記憶媒体に対応し得る。データ記憶媒体は、本開示において説明された技法のインプリメンテーションのための命令、コード、および／またはデータ構造を取り出すために、１つまたは複数のコンピュータあるいは１つまたは複数のプロセッサによってアクセスされることができる任意の利用可能な媒体であり得る。コンピュータプログラム製品は、コンピュータ可読媒体を含み得る。
【０１４０】
[0147]  限定ではなく例として、このようなコンピュータ可読記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置、またはその他の磁気記憶デバイス、フラッシュメモリ、あるいは、データ構造または命令の形態で所望のプログラムコードを記憶するために使用されることができ、かつコンピュータによってアクセスされることができる他の任意の媒体を備えることができる。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的な媒体を含まないが、代わりとして非一時的な有形の記憶媒体を対象とすることが理解されるべきである。ディスク（disk）およびディスク（disc）は、本明細書で使用されるとき、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル多用途ディスク（ＤＶＤ）、フロッピー（登録商標）ディスク、およびＢｌｕ−ｒａｙ（登録商標）ディスクを含み、ここで、ディスク（disk）は通常、磁気的にデータを再生するが、ディスク（disc）は、レーザーを用いて光学的にデータを再生する。上記の組合せもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
【０１４１】
[0148]  命令は、１つまたは複数のデジタルシグナルプロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、のような１つまたは複数のプロセッサ、特定用途集積回路（ＡＳＩＣ）、フィールドプログラマブル論理アレイ（ＦＰＧＡ）、または、他の同等の集積回路またはディスクリート論理回路によって実行され得る。したがって、「プロセッサ」という用語は、本明細書で使用される場合、前述の構造、または本明細書において説明された技法のインプリメンテーションに好適な他の任意の構造のいずれも指し得る。さらに、いくつかの態様では、本明細書において説明された機能は、符号化および復号のために構成された専用ハードウェアモジュールおよび／またはソフトウェアモジュール内で提供され得るか、または組み合わされたコーデックに組み込まれ得る。また、本技法は、１つまたは複数の回路または論理要素において十分にインプリメントされることができる。
【０１４２】
[0149]  本開示の技法は、ワイヤレスハンドセット、集積回路（ＩＣ）、またはＩＣのセット（例えば、チップセット）を含む、幅広い種類のデバイスまたは装置においてインプリメントされ得る。開示された技法を行うように構成されたデバイスの機能的な態様を強調するために、様々なコンポーネント、モジュール、またはユニットが本開示において説明されているが、異なるハードウェアユニットによる実現を必ずしも必要とするわけではない。むしろ、上述されたように、様々なユニットは、好適なソフトウェアおよび／またはファームウェアとともに、コーデックハードウェアユニットに組み合わされ得るか、または、上述された１つまたは複数のプロセッサを含む、相互動作のハードウェアユニットの集合によって提供され得る。
【０１４３】
[0150]  様々な例が説明されてきた。これらの例および他の例は、以下の特許請求の範囲内にある。
【図１】
2019508804.tif 000003
【図２】
2019508804.tif 000004
【図３Ａ】
2019508804.tif 000005
【図３Ｂ】
2019508804.tif 000006
【図３Ｃ】
2019508804.tif 000007
【図４】
2019508804.tif 000008
【図５】
2019508804.tif 000009
【図６Ａ】
2019508804.tif 000010
【図６Ｂ】
2019508804.tif 000011
【図７】
2019508804.tif 000012
【手続補正書】
【提出日】平成30年9月11日(2018.9.11)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
クロックレート決定の方法であって、
プロセッサを用いて、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記プロセッサを用いて、前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記プロセッサを用いて、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記プロセッサを用いて、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、ここにおいて、前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を備える、方法。
【請求項２】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項１に記載の方法。
【請求項３】
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
をさらに備え、
前記クロックレートを設定することは、前記クロックレートを前記決定されたクロックレートに設定することを備える、請求項１に記載の方法。
【請求項４】
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、請求項１に記載の方法。
【請求項５】
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、請求項１に記載の方法。
【請求項６】
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、請求項１に記載の方法。
【請求項７】
他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定すること
をさらに備える、請求項１に記載の方法。
【請求項８】
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
をさらに備え、
前記第１の時間インスタンスを決定することは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定することを備える、請求項１に記載の方法。
【請求項９】
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定することは、前記ホストプロセッサを用いて、前記ＧＰＵに、前記クロックレートを設定するように命令することを備える、請求項１に記載の方法。
【請求項１０】
前記プロセッサは前記ＧＰＵを備える、請求項１に記載の方法。
【請求項１１】
クロックレート決定のためのデバイスであって、
第１のフレームおよび第２のフレームをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）によって使用されるグラフィックスデータを記憶するように構成されたメモリと、
集積回路を備えるプロセッサと
を備え、前記プロセッサは、
前記ＧＰＵが前記第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、ここにおいて、前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行うように構成される、デバイス。
【請求項１２】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項１１に記載のデバイス。
【請求項１３】
前記プロセッサは、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するように構成され、前記クロックレートを設定するために、前記プロセッサは、前記クロックレートを前記決定されたクロックレートに設定するように構成される、請求項１１に記載のデバイス。
【請求項１４】
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、請求項１１に記載のデバイス。
【請求項１５】
前記プロセッサは、
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、請求項１１に記載のデバイス。
【請求項１６】
前記プロセッサは、
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、請求項１１に記載のデバイス。
【請求項１７】
前記プロセッサは、他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定するように構成される、請求項１１に記載のデバイス。
【請求項１８】
前記プロセッサは、
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
を行うように構成され、
前記第１の時間インスタンスを決定するために、前記プロセッサは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定するように構成される、請求項１１に記載のデバイス。
【請求項１９】
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定するために、前記ホストプロセッサは、前記ＧＰＵに、前記クロックレートを設定するように命令するように構成される、請求項１１に記載のデバイス。
【請求項２０】
前記プロセッサは前記ＧＰＵを備える、請求項１１に記載のデバイス。
【請求項２１】
命令を記憶した非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されると１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、ここにおいて、前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、
前記ＧＰＵの前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行わせる、非一時的なコンピュータ可読記憶媒体。
【請求項２２】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項２１に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２３】
前記１つまたは複数のプロセッサに、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
を行わせる命令をさらに備え、
前記１つまたは複数のプロセッサに前記クロックレートを設定させる前記命令は、前記１つまたは複数のプロセッサに前記クロックレートを前記決定されたクロックレートに設定させる命令を備える、請求項２１に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２４】
前記１つまたは複数のプロセッサはホストプロセッサを備える、請求項２１に記載の非一時的なコンピュータ可読記憶媒体。
【請求項２５】
クロックレート決定のためのデバイスであって、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定するための手段と、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定するための手段と、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定するための手段と、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定するための手段と、ここにおいて、前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定するための手段と
を備える、デバイス。
【請求項２６】
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、請求項２５に記載のデバイス。
【請求項２７】
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するための手段
をさらに備え、
前記クロックレートを設定するための前記手段は、前記クロックレートを前記決定されたクロックレートに設定するための手段を備える、請求項２５に記載のデバイス。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１４３
【補正方法】変更
【補正の内容】
【０１４３】
[0150]  様々な例が説明されてきた。これらの例および他の例は、以下の特許請求の範囲内にある。
以下に、本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
クロックレート決定の方法であって、
プロセッサを用いて、グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記プロセッサを用いて、前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記プロセッサを用いて、前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記プロセッサを用いて、前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を備える、方法。
［Ｃ２］
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、Ｃ１に記載の方法。
［Ｃ３］
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
をさらに備え、
前記クロックレートを設定することは、前記クロックレートを前記決定されたクロックレートに設定することを備える、Ｃ１に記載の方法。
［Ｃ４］
前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、Ｃ１に記載の方法。
［Ｃ５］
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、Ｃ１に記載の方法。
［Ｃ６］
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、Ｃ１に記載の方法。
［Ｃ７］
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
をさらに備え、
前記クロックレートを設定することは、前記決定されたクロックレートに基づいて前記ＧＰＵの前記クロックレートを設定することを備える、Ｃ１に記載の方法。
［Ｃ８］
他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定すること
をさらに備える、Ｃ１に記載の方法。
［Ｃ９］
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
をさらに備え、
前記第１の時間インスタンスを決定することは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定することを備える、Ｃ１に記載の方法。
［Ｃ１０］
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定することは、前記ホストプロセッサを用いて、前記ＧＰＵに、前記クロックレートを設定するように命令することを備える、Ｃ１に記載の方法。
［Ｃ１１］
前記プロセッサは前記ＧＰＵを備える、Ｃ１に記載の方法。
［Ｃ１２］
クロックレート決定のためのデバイスであって、
第１のフレームおよび第２のフレームをレンダリングするためにグラフィックス処理ユニット（ＧＰＵ）によって使用されるグラフィックスデータを記憶するように構成されたメモリと、
集積回路を備えるプロセッサと
を備え、前記プロセッサは、
前記ＧＰＵが前記第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行うように構成される、デバイス。
［Ｃ１３］
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、Ｃ１２に記載のデバイス。
［Ｃ１４］
前記プロセッサは、前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するように構成され、前記クロックレートを設定するために、前記プロセッサは、前記クロックレートを前記決定されたクロックレートに設定するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１５］
前記ＧＰＵは、前記第１のフレームの前記レンダリング中の少なくとも一部分の間アイドル状態である、Ｃ１２に記載のデバイス。
［Ｃ１６］
前記ＧＰＵは、前記第２のフレームのレンダリングと前記第１のフレームのレンダリングとの間にＧＰＵのアイドル時間がないように、前記第２のフレームのレンダリングの完了直後に前記第１のフレームのレンダリングを始める、Ｃ１２に記載のデバイス。
［Ｃ１７］
前記プロセッサは、
前記決定されたビジーレベルおよび前記決定された時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１８］
前記プロセッサは、
平均時間間隔を決定するために前記時間間隔および１つまたは複数の前の時間間隔を平均化することと、前記１つまたは複数の前の時間間隔の各々は、それぞれの前のフレームのレンダリングの完了間の時間間隔を示し、
前記決定されたビジーレベルおよび前記平均時間間隔に基づいて、ビジーレベル率を決定することと、
前記ビジーレベル率をしきい値と比較することと、
前記比較に基づいて前記クロックレートを決定することと
を行うように構成され、
前記クロックレートを設定するために、前記プロセッサは、前記決定されたクロックレートに基づいて前記クロックレートを設定するように構成される、Ｃ１２に記載のデバイス。
［Ｃ１９］
前記プロセッサは、他のフレームは含めず前記第１のフレームのみをレンダリングするための前記決定されたビジーレベルに基づいて前記ＧＰＵの前記クロックレートを決定するように構成される、Ｃ１２に記載のデバイス。
［Ｃ２０］
前記プロセッサは、
次のフレームをレンダリングするためのメモリについての要求を、前記ＧＰＵから受信すること
を行うように構成され、
前記第１の時間インスタンスを決定するために、前記プロセッサは、前記次のフレームをレンダリングするための前記メモリについての前記要求を受信することに応答して前記第１の時間インスタンスを決定するように構成される、Ｃ１２に記載のデバイス。
［Ｃ２１］
前記プロセッサはホストプロセッサを備え、前記クロックレートを設定するために、前記ホストプロセッサは、前記ＧＰＵに、前記クロックレートを設定するように命令するように構成される、Ｃ１２に記載のデバイス。
［Ｃ２２］
前記プロセッサは前記ＧＰＵを備える、Ｃ１２に記載のデバイス。
［Ｃ２３］
命令を記憶した非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されると１つまたは複数のプロセッサに、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定することと、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定することと、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定することと、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定することと、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定することと
を行わせる、非一時的なコンピュータ可読記憶媒体。
［Ｃ２４］
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、Ｃ２３に記載の非一時的なコンピュータ可読記憶媒体。
［Ｃ２５］
前記１つまたは複数のプロセッサに、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定すること
を行わせる命令をさらに備え、
前記１つまたは複数のプロセッサに前記クロックレートを設定させる前記命令は、前記１つまたは複数のプロセッサに前記クロックレートを前記決定されたクロックレートに設定させる命令を備える、Ｃ２３に記載の非一時的なコンピュータ可読記憶媒体。
［Ｃ２６］
前記１つまたは複数のプロセッサはホストプロセッサを備える、Ｃ２３に記載の非一時的なコンピュータ可読記憶媒体。
［Ｃ２７］
クロックレート決定デバイスであって、
グラフィックス処理ユニット（ＧＰＵ）が第１のフレームのレンダリングを完了した第１の時間インスタンスを決定するための手段と、
前記ＧＰＵが前記第１のフレームの直前にある第２のフレームのレンダリングを完了した第２の時間インスタンスを決定するための手段と、
前記第１の時間インスタンスおよび前記第２の時間インスタンスに基づいて時間間隔を決定するための手段と、
前記時間間隔中に前記第１のフレームをレンダリングするための前記ＧＰＵのビジーレベルを決定するための手段と、
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを設定するための手段と
を備える、デバイス。
［Ｃ２８］
前記第１の時間インスタンスは、前記ＧＰＵが前記第１のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第１のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備え、前記第２の時間インスタンスは、前記ＧＰＵが前記第２のフレームの最後のピクセルのピクセル値を決定したインスタンス、または前記ＧＰＵが前記第２のフレームの前記最後のピクセルの前記ピクセル値を出力したインスタンスを備える、Ｃ２７に記載のデバイス。
［Ｃ２９］
前記決定されたビジーレベルに基づいて前記ＧＰＵのクロックレートを決定するための手段
をさらに備え、
前記クロックレートを設定するための前記手段は、前記クロックレートを前記決定されたクロックレートに設定するための手段を備える、Ｃ２７に記載のデバイス。
【国際調査報告】
2019508804.tif 000013
2019508804.tif 000014