(57)【要約】  グラフィックス処理の方法は、グラフィックス処理ユニット(GPU)において、コマンドストリームを受信するステップであって、コマンドストリームが、GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、ステップと、GPUによって、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するステップと、GPUによって、コマンドストリームを実行するステップとを備える。
2018533112.tif 000002
【特許請求の範囲】
【請求項１】
データ処理の方法であって、
グラフィックス処理ユニット(GPU)において、コマンドストリームを受信するステップであって、前記コマンドストリームが、前記GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、ステップと、
前記GPUによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するステップと、
前記GPUによって、前記コマンドストリームを実行するステップと
を備える、方法。
【請求項２】
プロセッサによって、前記1つまたは複数のコマンドを生成するステップと、
前記プロセッサによって、前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成するステップと、
前記プロセッサによって、前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成するステップと
をさらに備える、請求項1に記載の方法。
【請求項３】
前記電力管理プロセスを実施するステップが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項４】
前記電力管理プロセスを実施するステップが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整するステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項５】
前記電力管理プロセスを実施するステップが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整するステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項６】
前記電力管理プロセスを実施するステップが、
前記GPUによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントおよび温度センサの出力に基づいて前記電力管理プロセスを実施するステップ
を備える、請求項1に記載の方法。
【請求項７】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項1に記載の方法。
【請求項８】
前記電力管理プロセスを実施するステップが、
前記コンテキストタイプが計算コンテキストタイプであることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項９】
前記電力管理プロセスを実施するステップが、
前記サービス品質レベルの範囲がしきい値を下回ることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧または動作周波数のうちの少なくとも1つを低下させるステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項１０】
前記電力管理プロセスを実施するステップが、
前記コンテキストタイプが2Dグラフィックス処理であることと、前記作業負荷サイズがしきい値を上回ることとを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項１１】
データを処理するように構成される装置であって、
コマンドストリームを記憶するように構成されるメモリと、
グラフィックス処理ユニット(GPU)であって、
前記コマンドストリームを受信することであって、前記コマンドストリームが、前記GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、受信することを行うように構成されるフロントエンドプロセッサと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するように構成される電力管理ユニットと、
前記コマンドストリームを実行するように構成される複数の処理ユニットと
を備える、GPUと
を備える、装置。
【請求項１２】
プロセッサであって、
前記1つまたは複数のコマンドを生成し、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成し、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成する
ように構成されるプロセッサ
をさらに備える、請求項11に記載の装置。
【請求項１３】
前記プロセッサが中央処理ユニットである、請求項12に記載の装置。
【請求項１４】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項11に記載の装置。
【請求項１５】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作電圧レベルを調整する
ようにさらに構成される、請求項11に記載の装置。
【請求項１６】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作クロック周波数を調整する
ようにさらに構成される、請求項11に記載の装置。
【請求項１７】
前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントおよび温度センサの出力に基づいて前記電力管理プロセスを実施する
ようにさらに構成される、請求項11に記載の装置。
【請求項１８】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項11に記載の装置。
【請求項１９】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コンテキストタイプが計算コンテキストタイプであることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項18に記載の装置。
【請求項２０】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記サービス品質レベルの範囲がしきい値を下回ることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作電圧または動作周波数のうちの少なくとも1つを低下させる
ようにさらに構成される、請求項18に記載の装置。
【請求項２１】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コンテキストタイプが2Dグラフィックス処理であることと、前記作業負荷サイズがしきい値を上回ることとを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項18に記載の装置。
【請求項２２】
前記装置がモバイルデバイスである、請求項11に記載の装置。
【請求項２３】
データを処理するように構成される装置であって、
コマンドストリームを受信するための手段であって、前記コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するための手段と、
前記コマンドストリームを実行するための手段と
を備える、装置。
【請求項２４】
前記1つまたは複数のコマンドを生成するための手段と、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成するための手段と、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成するための手段と
をさらに備える、請求項23に記載の装置。
【請求項２５】
前記電力管理プロセスを前記実施するための手段が、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするための手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整するための手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整するための手段であって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、手段と
を備える、請求項23に記載の装置。
【請求項２６】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項23に記載の装置。
【請求項２７】
実行されたとき、データを処理するように構成されるデバイスの1つまたは複数のプロセッサに、
コマンドストリームを受信することであって、前記コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、受信することと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施することと、
前記コマンドストリームを実行することと
を行わせる命令を記憶する、コンピュータ可読記憶媒体。
【請求項２８】
前記命令が、前記1つまたは複数のプロセッサに、
前記1つまたは複数のコマンドを生成することと、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成することと、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成することと
をさらに行わせる、請求項27に記載のコンピュータ可読記憶媒体。
【請求項２９】
前記命令が、前記1つまたは複数のプロセッサに、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスすることと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整することと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整することであって、各それぞれの電力領域が処理ユニットのうちの1つまたは複数を含む、調整することと
をさらに行わせる、請求項27に記載のコンピュータ可読記憶媒体。
【請求項３０】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項27に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、グラフィックス処理に関し、より詳細には、グラフィックス処理ユニット(GPU)のための作業負荷の特徴づけおよび電力管理技法に関する。
【背景技術】
【０００２】
モバイルデバイスは、サイズおよび/または容量が制限されたバッテリーによって電力供給される。一般に、モバイルデバイスはとりわけ、電話をかけること、電子メールをチェックすること、画像/映像の記録/再生、ラジオを聞くこと、ナビゲーション、ウェブブラウジング、ゲームをすること、デバイスを管理すること、計算を実施することのために使用される。これらのアクションの多くは、いくつかのタスクを実施するためにグラフィックス処理ユニット(GPU)を利用する。例示的なGPUタスクは、ディスプレイへのコンテンツのレンダリングおよび(たとえば、汎用GPU(GPGPU)演算における)汎用計算コンピュテーションを行うことを含む。したがって、GPUは一般に、モバイルデバイスにおいて多くの電力を消費する。したがって、バッテリー寿命を延ばすためにGPUの電力消費を管理することが有益である。
【発明の概要】
【課題を解決するための手段】
【０００３】
一般に、本開示は、グラフィックス処理ユニット(GPU)における電力管理のための技法について説明する。本開示の技法は、コマンドストリームによって表される作業負荷を特徴づけるために、コマンドストリームヒントをGPUコマンドストリームに挿入することを含んでもよい。次いで、GPU内の電力管理ユニットは、コマンドストリームを実行する前に電力管理プロセスを実施するためにコマンドストリームヒントを使用してもよい。
【０００４】
一例では、本開示はデータ処理の方法について説明し、本方法は、GPUにおいてコマンドストリームを受信するステップであって、コマンドストリームが、GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、ステップと、GPUによって、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するステップと、GPUによって、コマンドストリームを実行するステップとを備える。
【０００５】
別の例では、本開示はデータを処理するように構成される装置について説明し、本装置はGPUを備える。GPUは、コマンドストリームを受信することであって、コマンドストリームが、GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、受信することを行うように構成されるフロントエンドプロセッサと、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するように構成される電力管理ユニットと、コマンドストリームを実行するように構成される処理ユニットとを備える。
【０００６】
別の例では、本開示はデータを処理するように構成される装置について説明し、本装置は、コマンドストリームを受信するための手段であって、コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、手段と、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するための手段と、コマンドストリームを実行するための手段とを備える。
【０００７】
別の例では、本開示は、実行されたとき、データを処理するように構成されるデバイスの1つまたは複数のプロセッサに、コマンドストリームを受信することであって、コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、受信することと、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施することと、コマンドストリームを実行することとを行わせる命令を記憶するコンピュータ可読記憶媒体について説明する。
【０００８】
1つまたは複数の例の詳細が、添付の図面および以下の説明に記載されている。他の特徴、目的、および利点は、説明、図面、および特許請求の範囲から明らかになるであろう。
【図面の簡単な説明】
【０００９】
【図１】本開示で説明する1つまたは複数の例示的な技法による、データを処理するための例示的なデバイスを示すブロック図である。
【図２】図1に示すデバイスの構成要素をより詳細に示すブロック図である。
【図３】本開示の技法による例示的なコマンドストリームを示す概念図である。
【図４】本開示の技法による例示的な電力管理プロセスを示すフローチャートである。
【図５】本開示で説明する技法による例示的な方法を示すフローチャートである。
【発明を実施するための形態】
【００１０】
本開示は、グラフィックス処理ユニット(GPU)における電力管理のための技法を対象とする。GPUにおける電力消費を管理するための技法の一般的な例は、グラフィックスドライバベースの電力管理技法およびハードウェアベースの(たとえば、GPUベースの)電力管理技法を含む。
【００１１】
グラフィックスドライバベースの電力管理技法の一例では、グラフィックスドライバは、GPUおよび関連するメモリの動作電圧および/または動作周波数(たとえば、クロックレート)を制御する。一例では、GPUドライバは、GPUビジー率(すなわち、GPUがアイドルであるときと比較される、GPUがビジーである時間)を判定してもよい。次いで、GPUビジー率は、1つまたは複数のしきい値と比較される。比較に基づいて、グラフィックスドライバは、GPUの電力状態(たとえば、動作電圧および/または動作周波数)を上げるまたは下げる場合がある。
【００１２】
ハードウェアベースの電力管理技法の一例では、GPU内のハードウェアユニットは、GPUパイプラインの処理ユニットの異なるグループを電力コラプスする(たとえば、オフにする)および/またはGPUの電力状態を調整するように構成されてもよい。電力管理を担うGPUのハードウェアブロックは、GPU電力管理ユニット(GPMU:GPU Power Management Unit)と呼ばれることがある。一例では、GPMUは電力バジェットを追跡するように構成されてもよい。その電力バジェットを超えるとき、GPMUは、GPU内の処理ユニットを電力コラプスするおよび/またはGPUの電力状態を下げることによって、GPUの電力消費を低減するように構成されてもよい。
【００１３】
上記で説明した例示的な電力管理技法の1つの欠点は、作業負荷のきめの粗い属性、たとえば、GPU利用率または電力バジェットの使用である。たとえば、入ってくる作業負荷のGPU利用率を予測するためにスライディングウィンドウ内のGPU利用率履歴を示す情報を使用する従来の電力管理技法は、前の作業負荷とは異なる入ってくる作業負荷については正確ではないことがある。しばしば、過去のGPU利用率は、コンテキストアウェアネス(たとえば、入ってくる作業負荷の性質を示す情報)を提供せず、次の入ってくる作業負荷の特定の性能および電力要件を識別するのに十分ではないことがある。
【００１４】
本開示の例によれば、作業負荷の特徴づけは、GPUにおける電力管理のための1つの基礎として使用される場合がある。電力管理は、作業負荷の正確な特徴づけによって改善される場合がある。すなわち、本開示の技法によれば、コンテキスト(すなわち、実施されるべき作業の特徴づけ)を示す情報は、作業負荷がGPUによって処理される前に電力管理機能を実施するためにGPUによって使用される場合がある。このようにして、本開示の技法を使用するGPUは、将来の作業負荷について、よりきめの細かい、より正確な電力管理を達成する場合がある。以下で説明する例では、本開示は、入ってくる作業負荷を特徴づけるヒントがその作業負荷のためのコマンドストリームに含まれる技法について説明する。GPUの電力管理ユニットは、コマンドストリームの実行前に管理技法を実施するために、コマンドストリームからのヒントを使用する場合がある。
【００１５】
図1は、本開示で説明する1つまたは複数の例示的な技法による、データを処理するための例示的なデバイスを示すブロック図である。図1はデバイス10を示し、デバイス10の例は、限定はしないが、メディアプレーヤなどのビデオデバイス、セットトップボックス、携帯電話などのモバイルデバイス、携帯情報端末(PDA)、デスクトップコンピュータ、ラップトップコンピュータ、ゲームコンソール、ビデオ会議ユニット、タブレットコンピューティングデバイスなどを含む。
【００１６】
図1の例では、デバイス10は、プロセッサ12と、GPU14と、システムメモリ16とを含む。デバイス10がモバイルデバイスである例などのいくつかの例では、プロセッサ12およびGPU14は、システムオンチップ(SoC)などの集積回路(IC)として形成される場合がある。たとえば、ICは、チップパッケージ内の処理チップとして形成される場合がある。デバイス10がGPU14を収容する別個のグラフィックスカードを有するデスクトップコンピュータまたはラップトップコンピュータである例などのいくつかの例では、プロセッサ12およびGPU14は、異なる集積回路(すなわち、異なるチップパッケージ)に収容される場合がある。しかしながら、デバイス10がモバイルデバイスである例では、プロセッサ12およびGPU14が異なる集積回路に収容されることが可能である場合がある。
【００１７】
プロセッサ12およびGPU14の例は、限定はしないが、1つまたは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の同等の集積論理回路もしくは個別論理回路を含む。プロセッサ12は、デバイス10の中央処理ユニット(CPU)であってもよい。いくつかの例では、GPU14は、グラフィックス処理に適した超並列処理能力をGPU14に提供する集積論理回路および/または個別論理回路を含む専用ハードウェアであってもよい。いくつかの事例では、GPU14は汎用処理能力も含む場合があり、汎用処理タスク(たとえば、いわゆる「計算」タスク)を実装するときに汎用GPU(GPGPU)と呼ばれることがある。
【００１８】
例示のために、本開示で説明する技法は、GPU14に関して説明される。しかしながら、本開示で説明する技法はそのように限定されない。本開示で説明する技法は、他のタイプの処理ユニットに拡張される場合がある。
【００１９】
プロセッサ12は、様々なタイプのアプリケーションを実行してもよい。アプリケーションの例は、ウェブブラウザ、電子メールアプリケーション、スプレッドシート、ビデオゲーム、または表示するための可視オブジェクトを生成する他のアプリケーションを含む。システムメモリ16は、1つまたは複数のアプリケーションの実行のための命令を記憶してもよい。プロセッサ12上でのアプリケーションの実行は、プロセッサ12に、表示されるべき画像コンテンツ用のグラフィックスデータを生成させる。プロセッサ12は、さらなる処理のために画像コンテンツのグラフィックスデータをGPU14に送信してもよい。GPU14は、2Dおよび/または3Dグラフィックス処理を実施するように構成されてもよい。
【００２０】
いくつかの非グラフィックス関連の計算の例では、プロセッサ12は、GPU14によって処理されるのにより適しているデータを生成してもよい。そのようなデータは、必ずしもグラフィックス用途またはディスプレイ用途のために必要とされなくてもよい。たとえば、プロセッサ12は、行列演算が実施される必要があるデータをGPU14に出力してもよく、今度はGPU14が行列演算を実施してもよい。
【００２１】
一般に、プロセッサ12は、超並列演算を必要とするタスクなどの処理タスクをGPU14にオフロードしてもよい。一例として、グラフィックス処理は超並列演算を必要とし、プロセッサ12はそのようなグラフィックス処理タスクをGPU14にオフロードしてもよい。しかしながら、行列演算などの他の演算は、GPU14の並列処理能力から恩恵を受ける場合もある。これらの例では、プロセッサ12は、GPU14に非グラフィックス関連の演算を実施させるためにGPU14の並列処理能力を活用してもよい。
【００２２】
プロセッサ12は、特定のアプリケーション処理インターフェース(API:application processing interface)に従ってGPU14と通信してもよい。そのようなAPIの例は、Microsoft(登録商標)によるDirectX(登録商標)、KhronosグループによるOpenGL(登録商標)またはOpenGL ES(登録商標)、およびOpenCL(商標)を含むが、本開示の態様はDirectX API、OpenGL API、またはOpenCL APIに限定されず、他のタイプのAPIに拡張される場合がある。さらに、本開示で説明する技法はAPIに従って機能することが必要とされず、プロセッサ12およびGPU14は通信のために任意の技法を利用してもよい。
【００２３】
システムメモリ16はデバイス10用のメモリであってもよく、1つまたは複数のコンピュータ可読記憶媒体を備えてもよい。システムメモリ16の例は、限定はしないが、ランダムアクセスメモリ(RAM)、電気的消去可能プログラマブル読取り専用メモリ(EEPROM)、フラッシュメモリ、あるいは命令および/またはデータ構造の形態の所望のプログラムコードを搬送または記憶するために使用することができ、コンピュータまたはプロセッサによってアクセスすることができる他の媒体を含む。
【００２４】
いくつかの態様では、システムメモリ16は、プロセッサ12および/またはGPU14に、本開示ではプロセッサ12およびGPU14に帰する機能を実施させる命令を含んでもよい。したがって、システムメモリ16は、実行されたとき、1つまたは複数のプロセッサ(たとえば、プロセッサ12およびGPU14)に様々な機能を実施させる命令を記憶したコンピュータ可読記憶媒体であってもよい。
【００２５】
いくつかの例では、システムメモリ16は非一時的記憶媒体である。「非一時的」という用語は、記憶媒体が搬送波または伝搬信号において具現化されないことを示す場合がある。しかしながら、「非一時的」という用語は、システムメモリ16が非可動であること、またはその内容が静的であることを意味すると解釈されるべきではない。一例として、システムメモリ16は、デバイス10から取り外され、別のデバイスに移動されてもよい。別の例として、システムメモリ16と実質的に同様のメモリがデバイス10に挿入されてもよい。いくつかの例では、非一時的記憶媒体は、経時的に変化する可能性があるデータを(たとえば、RAMに)記憶してもよい。
【００２６】
デバイス10はまた、ディスプレイ18と、ユーザインターフェース20と、トランシーバモジュール22とを含んでもよい。デバイス10は、明確のために図1には示されていない追加のモジュールまたはユニットを含んでもよい。たとえば、デバイス10がモバイルワイヤレス電話である例では、デバイス10は、電話通信を実施するためにスピーカーおよびマイクロフォンを含んでもよく、それらはいずれも図1には示されていない。さらに、デバイス10内に示した様々なモジュールおよびユニットは、デバイス10のあらゆる例において必要ではない場合がある。たとえば、デバイス10がデスクトップコンピュータである例では、ユーザインターフェース20およびディスプレイ18は、デバイス10の外部にあってもよい。別の例として、ディスプレイ18がモバイルデバイスのタッチセンシティブディスプレイまたはプレゼンスセンシティブディスプレイである例では、ユーザインターフェース20は、ディスプレイ18の一部であってもよい。
【００２７】
ディスプレイ18は、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ、プラズマディスプレイ、タッチセンシティブディスプレイ、プレゼンスセンシティブディスプレイ、または別のタイプのディスプレイデバイスを備えてもよい。ユーザインターフェース20の例は、限定はしないが、トラックボール、マウス、キーボード、および他のタイプの入力デバイスを含む。ユーザインターフェース20は、タッチスクリーンである場合もあり、ディスプレイ18の一部として組み込まれる場合がある。
【００２８】
トランシーバモジュール22は、デバイス10と別のデバイスまたはネットワークとの間のワイヤレス通信またはワイヤード通信を可能にするための回路を含んでもよい。トランシーバモジュール22は、変調器、復調器、増幅器、およびワイヤード通信またはワイヤレス通信用の他のそのような回路を含んでもよい。
【００２９】
本開示で説明する技法では、第1の処理ユニット(たとえば、プロセッサ12)は、いくつかのタスクを第2の処理ユニット(たとえば、GPU14)にオフロードする。タスクをオフロードするために、プロセッサ12は、GPU14によって実行されるべきコマンドと、コマンドのオペランドであるデータ(たとえば、コマンドが動作する対象となるデータ)とを、システムメモリ16におよび/または直接GPU14に出力する。GPU14は、プロセッサ12からおよび/またはシステムメモリ16からコマンドおよびデータを受信し、コマンドを実行する。いくつかの例では、GPU14によって実行されるべきコマンドと、コマンドのためのデータオペランドとをシステムメモリ16に記憶するのではなく、プロセッサ12は、コマンドおよびデータオペランドを、GPU14およびプロセッサ12を含むICにローカルであり、プロセッサ12とGPU14の両方によって共有されるローカルメモリに記憶してもよい。一般に、本開示で説明する技法は、プロセッサ12がコマンドをGPU14上で実行するために利用可能にすることができる様々な方法に適用可能であり、これらの技法は、上記の例に限定されない。
【００３０】
プロセッサ12がGPU14によって実行されるべきコマンドをメモリ(たとえば、システムメモリ16またはローカルメモリ)に記憶する例などのいくつかの例では、プロセッサ12は、GPU14が実行することになるコマンドのグループを識別するメモリアドレス情報を出力してもよい。GPU14が実行することになるコマンドのグループは、コマンドストリームと呼ばれる。プロセッサ12がコマンドをGPU14に直接出力する例では、コマンドストリームは、プロセッサ12が直ちに実行するようGPU14に命令する、それらのコマンドを含む。
【００３１】
プロセッサ12がコマンドをコマンドストリームにグループ化することができる様々な方法があってもよい。一例として、コマンドのグループは、GPU14が1つのフレームをレンダリングするために必要とされるすべてのコマンドを含む。別の例として、コマンドのグループは、GPU14が他のコマンドに切り替えることなしに一緒に実行されることになる、いわゆる「アトミックコマンド」であってもよい。コマンドをGPU14にサブミットされるコマンドストリームにグループ化する他の方法が可能であってもよく、本開示は上記の例示的な技法に限定されない。
【００３２】
本開示の技法によれば、以下でより詳細に説明するように、プロセッサ12は、コマンドストリームにアドバイザリヒント(たとえば、コマンドストリームヒント)を含むように構成されてもよい。コマンドストリームヒントは、GPU14の将来の作業負荷の特徴づけを提供する情報を含む。以下でより詳細に説明するように、コマンドストリームに含まれるコマンドストリームヒントは、将来の作業負荷についてのアプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、および/または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数などの特徴づけ情報を含んでもよい。いくつかの例では、コマンドストリームヒント(たとえば、特徴づけ情報)は、コマンドストリームに直接含まれてもよい。他の例では、コマンドストリーム内のコマンドストリームヒントは、(たとえば、メモリ内の)どこで特徴づけ情報にアクセスするかをGPU14に通知するポインタ、インデックス、または他の間接的な指示を備えてもよい。GPU14(たとえば、GPU14の電力管理ユニット)は、コマンドストリームからコマンドストリームヒントを取り出し、GPU14がコマンドストリームヒントを含んでいるコマンドストリームを実行する前にコマンドストリームヒントに基づいて電力管理プロセスを実施するように構成されてもよい。電力管理プロセスは、GPU14の処理ユニットを電力コラプスすること、GPU14の処理ユニットの動作電圧を調整すること、動作周波数を調整すること、および/または、GPU14の電力消費を制御するために使用されてもよい任意の他の技法もしくはプロセスを実施することのうちの1つまたは複数を含んでもよい。処理ユニットを電力コラプスすることは、処理ユニットの電源を完全に切断することを伴う場合がある。
【００３３】
したがって、本開示の一例によれば、デバイス10は、GPU14が実行するための1つまたは複数のコマンドを生成することと、1つまたは複数のコマンドに基づいて少なくとも1つのコマンドストリームヒントを生成することであって、少なくとも1つのコマンドストリームヒントが、コマンドストリームの作業負荷の特徴づけを提供する、生成することと、1つまたは複数のコマンドおよび少なくとも1つのコマンドストリームヒントを含めるためのコマンドストリームを生成することとを行うように構成されるデバイスの一例である。デバイス10は、GPU14によってコマンドストリームを受信し、コマンドストリームを実行する前に少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施し、コマンドストリームを実行するようにさらに構成されてもよい。
【００３４】
図2は、図1に示すデバイスの構成要素をより詳細に示すブロック図である。図2に示すように、プロセッサ12は、アプリケーション40およびGPUドライバ42を実行するように構成されてもよい。アプリケーション40は、プロセッサ12によって実行されたとき、1つまたは複数のコマンドが処理のためにGPU14にオフロードされる、任意のアプリケーションであってもよい。アプリケーション40の例は、プロセッサ12に3DレンダリングコマンドをGPU14にオフロードさせるアプリケーション(たとえば、ビデオゲームアプリケーション)、プロセッサ12に2DレンダリングコマンドをGPU14にオフロードさせるアプリケーション(たとえば、ユーザインターフェースアプリケーション)、またはプロセッサ12に汎用計算タスクをGPU14にオフロードさせるアプリケーション(たとえば、GPGPUアプリケーション)を含んでもよい。
【００３５】
上記で説明したように、プロセッサ12は、GPU14の超並列処理能力により、タスクをGPU14にオフロードしてもよい。たとえば、GPU14は、単一命令複数データ(SIMD)構造を用いて設計されてもよい。SIMD構造では、GPU14の処理ユニット46は、複数のSIMD処理要素を含んでもよく、各SIMD処理要素は、異なるデータに対して同じコマンドを実行する。
【００３６】
特定のSIMD処理要素上で実行されている特定のコマンドは、スレッドと呼ばれる。所与のスレッドについてのデータは異なることがあるので、各SIMD処理要素は異なるスレッドを実行するとみなされることがあるが、ある処理要素上で実行されているスレッドは、その他の処理要素上で実行されているコマンドと同じコマンドである。このようにして、SIMD構造は、GPU14が多くのタスクを並行して(たとえば、同時に)実施することを可能にする。
【００３７】
混乱を避けるために、本開示は、GPU14の処理ユニット46によって実行されるプロセスを総称的に指すために、「コマンド」という用語を使用する。コマンドは、実際のコマンド、構成サブコマンド(たとえば、メモリ呼出しコマンド)、スレッド、またはGPU14が特定の関数を実施する他の方法を含んでもよい。処理ユニット46は、1つもしくは複数のシェーダコア(たとえば、算術論理ユニットを含むプログラマブル処理ユニット)または固定機能パイプラインの1つもしくは複数のユニットを含んでもよい。いくつかの例では、処理ユニット46の一部分(たとえば、電力領域)が2Dグラフィックス処理専用であってもよく、処理ユニット46の別の部分(たとえば、電力領域)が3Dグラフィックス処理専用であってもよい。
【００３８】
プロセッサ12は、2つ以上のコマンドをコマンドストリームにグループ化するように構成されてもよい。図2は、システムメモリ16に記憶されたコマンドストリーム50、52、および54を示す。コマンド"C"58は、コマンドストリーム50内の1つのコマンドを表す。いくつかの例では、コマンドストリームの各々は、別個のタイプの作業負荷(たとえば、3Dレンダリング、2Dレンダリング、計算タスクなど)を表してもよい。他の例では、コマンドストリームは、2つ以上の異なるタイプの作業負荷のためのコマンドを含んでもよい。本開示の技法によれば、プロセッサ12は、(たとえば、GPUドライバ42の実行を通じて)コマンドストリームヒントをコマンドストリームに含めるように構成されてもよい。コマンドストリームヒントは、コマンドストリームの作業負荷を特徴づける1つまたは複数のシンタックス要素であってもよい。コマンドストリームヒント"H"56は、コマンドストリーム50内の1つまたは複数のコマンドストリームヒントを表す。
【００３９】
いくつかの例では、GPUドライバ42によって生成されるコマンドストリームヒントHは、コマンドストリームの作業負荷の属性を特徴づける。例示的なコマンドストリームヒントは、とりわけ、作業負荷のアプリケーションタイプ、作業負荷のコンテキストタイプ、作業負荷のレンダモード、作業負荷のサイズ、および/または作業負荷の許容可能なサービス品質(QoS)レベルの範囲を示す情報(たとえば、シンタックス要素)を含む。以下でより詳細に説明するように、GPU14の電力管理ユニット70は、特定のコマンドストリームを実行する前に電力管理プロセスを実施するために、コマンドストリーム50、52、および54に挿入されたコマンドストリームヒントを使用してもよい。いくつかの例では、電力管理ユニット70は、固定機能ステートマシンとして実装されてもよい。他の例では、電力管理ユニット70は、ソフトウェアおよび/またはファームウェアを実行するプログラマブルプロセッサと組み合わせて動作する1つまたは複数の固定機能ハードウェアブロックの組合せとして実装されてもよい。他の例では、電力管理ユニット70は、ソフトウェアおよび/またはファームウェアを実行するプロセッサとして完全に実装されてもよい。コマンドストリームヒントは、入ってくる作業負荷を特徴づけ、したがって特定のコマンドストリームのために必要とされる処理能力の指示を与えるので、GPU14は、作業負荷を処理する前に電力をより効果的に管理することが可能である。
【００４０】
アプリケーションタイプのコマンドストリームヒントは、GPU14によって実施されるべきコマンドをオフロードしているアプリケーション(たとえば、アプリケーション40)のタイプを示す指示(たとえば、シンタックス要素)であってもよい。例示的なアプリケーションタイプは、ユーザインターフェース、ビデオゲーム、2Dレンダリング、3Dレンダリング、計算アプリケーション(たとえば、GPGPUアプリケーション)などを含む。アプリケーションタイプは、作業負荷を実施するために必要とされる処理能力の量および/または作業負荷を完了するための任意のタイミング要件を示す場合がある。たとえば、グラフィックスアプリケーション(たとえば、ユーザインターフェースアプリケーション、ゲームなど)は、良好なユーザエクスペリエンスを維持するために、時間通りに高いフレームレートでGPUタスクを完了するための強い要件を有する場合がある。たとえば、グラフィックスアプリケーションは、作業負荷が完了されなければならない(たとえば、フレーム毎秒(FPS)換算で)ターゲットフレームレート期限を有する場合がある。しかしながら、計算アプリケーションは、そのような要件を有しない場合がある。しかしながら、一般的には、できるだけ迅速に計算作業負荷を完了することが望ましい。
【００４１】
コンテキストタイプのコマンドストリームヒントは、コマンドストリームによって表される作業負荷が、グラフィックスアプリケーション(たとえば、1つまたは複数の画像がレンダリングされ表示されるアプリケーション)用か、計算アプリケーション(たとえば、GPUが計算を行うために使用され、必ずしも任意の画像を表示するために使用されるとは限らないアプリケーション)用かを示す場合がある。いくつかの例では、グラフィックスアプリケーションは、(たとえば、どれだけ迅速に作業負荷が完了されなければならないかという点で)計算アプリケーションよりも高い電力およびタイミング要件を有する場合がある。
【００４２】
レンダモードのコマンドストリームヒントは、作業負荷のレンダリングモードを示す場合がある。そのようなコマンドストリームヒントは、コンテキストタイプのコマンドストリームヒントがグラフィックスコンテキストタイプであるときに挿入されてもよい。例示的なレンダリングモードは、ダイレクトレンダリングおよびビニングレンダリング(タイルベースのレンダリングとも呼ばれる)を含む。ダイレクトレンダリングは、フレーム全体が同時にレンダリングされるレンダリング技法である。ビニングレンダリングは、フレームがセクション(たとえば、ビンまたはタイル)に分割され、各セクションが別々にレンダリングされるレンダリング技法である。一般に、高速GPUメモリ(GMEM)が限られているモバイルデバイスまたは任意のデバイス上では、バス80を介してシステムメモリ16への多くのアクセスが行われる可能性があるので、ダイレクトレンダリングは、より遅く、より電力集約的な動作である場合がある。
【００４３】
作業負荷サイズのコマンドストリームヒントは、処理されるべき作業負荷のサイズを示す場合がある。グラフィックスコンテキストタイプの場合、サイズのコマンドストリームヒントは、レンダリングされるべきフレームまたはサーフェスのサイズを示す場合がある。計算コンテキストタイプの場合、サイズのコマンドストリームヒントは、計算作業負荷のカーネルサイズ(すなわち、一般的には、計算が実施される数の行列のサイズ)を示す場合がある。作業負荷のサイズが大きくなるほど、GPU14の電力要件が大きくなる。
【００４４】
許容可能なQoSレベルの範囲のコマンドストリームヒントは、グラフィックスコンテキストタイプについて達成されるべき最小FPSおよびターゲットFPSを示す場合がある。最小FPSまたはターゲットFPSが高くなるほど、作業負荷を処理するためのGPU14の電力要件が高くなる。
【００４５】
GPUドライバ42は、アプリケーション40から、ユーザ設定から、ならびに/またはコマンドストリーム50、52、および54内のコマンドの解析から、上記で説明したコマンドストリームヒントのうちの1つまたは複数を決定するように構成されてもよい。一例では、GPUドライバ42は、API監視プロセスを使用して(たとえば、アプリケーション40によって行われるAPI呼を監視することによって)コマンドストリームヒントを決定し、次いで、決定されたコマンドストリームヒントをビットストリームに挿入するように構成されてもよい。加えて、別の例では、GPUドライバ42は、所与のアプリケーションについてのGPU14の作業負荷履歴、性能履歴、および/またはQoS履歴を解析するように構成されてもよい。作業負荷履歴の例は、GPU14の移動平均ビジーおよび/またはアイドル持続時間、GPU14のアイドル/ビジー比、GPU14の作業負荷の移動平均の変動、および/またはGPU14の作業負荷の移動平均の傾向を含んでもよい。
【００４６】
図3は、本開示の技法による例示的なコマンドストリームを示す概念図である。図3は、コマンドストリームヒント56および57を含んでもよいコマンドストリーム50を示す。本開示の一例では、コマンドストリームヒント56は、コマンドストリームヒント56に続き、コマンドストリーム50内の次のコマンドストリームヒント(たとえば、コマンドストリームヒント57)に先行する、すべてのコマンド"C"によって表される作業負荷に関係する場合がある。次いで、コマンドストリームヒント57は、コマンドストリームヒント57に続き、コマンドストリーム内の次のコマンドストリームヒントに先行する、すべてのコマンド"C"によって表される作業負荷に適用されてもよい。いくつかの例では、コマンドストリーム50は、コマンドストリーム全体に対して、1つのコマンドストリームヒントのみ、またはコマンドストリームヒントのセットを有してもよい。他の例では、コマンドストリームは、複数の異なる作業負荷を含んでもよく、各作業負荷は、それ自体に関連するコマンドストリームヒントまたはコマンドストリームヒントのセットを有してもよい。
【００４７】
本開示の一例では、コマンドストリームヒント56は、複数の異なるタイプのコマンドストリームヒントのためのフィールドを含むデータ構造の形態であってもよい。図3の例では、コマンドストリームヒント56は、上記で説明したように、アプリケーションタイプ、コンテキスト、レンダモード、サイズ、および/またはQoSの指示(たとえば、シンタックス要素)を記憶するためのフィールドを含むデータ構造であってもよい。たとえば、コマンドストリームヒントは、アプリタイプフィールド56Aと、コンテキストフィールド56Bと、レンダモードフィールド56Cと、サイズフィールド56Dと、QOSフィールド56Eとを含んでもよい。いくつかの例では、フィールドの各々は、GPUドライバ42が特定のフィールドについての指示を生成するかどうかにかかわらず、コマンドストリームヒント56のデータ構造中に存在してもよい。たとえば、GPUドライバ42は、シンタックス要素をフィールド56A〜Eの各々に挿入するように構成されてもよく、各それぞれのシンタックス要素の値は、作業負荷の特性を表す。
【００４８】
他の例では、GPUドライバ42は、コマンドストリームの特定の作業負荷に関連する特定のコマンドストリームヒントのみを挿入するように構成されてもよい。すなわち、コマンドストリームヒントを固定データ構造内に含むのではなく、GPUドライバ42は、所与の作業負荷を特徴づけるコマンドストリームヒントについての1つまたは複数の個々の指示(たとえば、シンタックス要素)を含んでもよい。たとえば、GPUドライバ42は、コマンドストリームヒントのサブセット、たとえば、56A(アプリケーションタイプ)、56B(コンテキスト)、および56D(サイズ)のうちの1つまたは複数、たとえば、すべてまたはすべてよりも少ないコマンドストリームヒントを図3のコマンドストリーム51に挿入するように構成されてもよい。すなわち、GPUドライバ42は、すべての考えられるタイプのコマンドストリームヒントをあらゆるコマンドストリームに挿入する必要はない。いくつかの状況では、いくつかのタイプのコマンドストリームヒントは、いくつかの作業負荷に適用可能ではない場合がある。たとえば、計算作業負荷はレンダリングを伴わないので、レンダモードのコマンドストリームヒントは計算作業負荷のために必要とされない。この場合、レンダモードのコマンドストリームヒントは、コマンドストリームから省略することができる。
【００４９】
図2に戻ると、プロセッサ12が生成されたコマンドおよびコマンドストリームヒントをシステムメモリ16に記憶した後、プロセッサ12は、GPU14が実行するためのコマンドを利用可能にする。たとえば、プロセッサ12は、記憶されたコマンドおよびそれらのオペランドデータのセットのメモリアドレスと、GPU14がコマンドのセットを実行することになる場合、いつGPU14がコマンドのセットを実行することになるかを示す情報とをGPU14に通信する。このようにして、プロセッサ12は、実行のためにコマンドをGPU14にサブミットする。
【００５０】
図2に示すように、プロセッサ12はまた、GPUドライバ42を実行してもよい。コマンドストリームヒントをコマンドストリーム50、52、および54に挿入することに加えて、GPUドライバ42は、プロセッサ12およびGPU14が互いに通信するための機構を提供するように構成されてもよい。たとえば、プロセッサ12がグラフィックス処理タスクまたは非グラフィックス(たとえば、計算)処理タスクをGPU14にオフロードするとき、プロセッサ12は、GPUドライバ42を介してそのような処理タスクをGPU14にオフロードする。たとえば、プロセッサ12が、GPU14が実行することになるコマンドの量を示す情報を出力するとき、GPUドライバ42は、情報をGPU14に出力するプロセッサ12のユニットであってもよい。
【００５１】
GPUドライバ42はアプリケーション処理インターフェース(API)に従って構成されてもよいが、GPUドライバ42は特定のAPIに従って構成されることに限定される必要はない。デバイス10がモバイルデバイスである一例では、GPUドライバ42はOpenGL ES APIに従って構成されてもよい。OpenGL ES APIは、モバイルデバイス用に特別に設計されている。デバイス10が非モバイルデバイスである一例では、GPUドライバ42はOpenGL APIに従って構成されてもよい。
【００５２】
処理のためにGPU14がコマンドストリーム(たとえば、コマンドストリーム50、52、および/または54)を利用できるようになると、フロントエンドプロセッサ48は、システムメモリ16からバス80を介してコマンドストリームにアクセスするように構成されてもよい。フロントエンドプロセッサ48はまた、システムメモリ16から、または直接プロセッサ12から、コマンド用のオペランドデータを取り出してもよい。フロントエンドプロセッサ48は、どのコマンドが処理ユニット46の特定の部分によって実行されることになるかを決定してもよい。
【００５３】
本開示の技法によれば、フロントエンドプロセッサ48は、コマンドストリーム50をパースし、コマンドストリームヒント56を電力管理ユニット70に通信するか、またはそうでなければ、電力管理ユニット70がコマンドストリームヒント56を利用できるようにするように構成されてもよい。電力管理ユニット70は、コマンドストリームヒント56内の指示を読み取り、GPU14の処理ユニット46がコマンドストリーム内のコマンドを実行する前にコマンドストリームヒント56に基づいてGPU14用の電力管理プロセスを実施するように構成されてもよい。
【００５４】
本開示の文脈では、電力管理プロセスは、GPU14の電力使用量を制御するために使用される任意のプロセスである。電力使用量を制御することは、過去の電力使用量に対して現在の電力使用量を減少させること、過去の電力使用量に対して現在の電力使用量を増加させること、または現在の電力使用量を過去の電力使用量と同じレベルに維持することのうちのいずれかを含んでもよい。本開示のいくつかの非限定的な例では、電力管理ユニット70は、GPU14の1つまたは複数の電力領域の動作電圧レベルを調整する(すなわち、増加させるまたは減少させるのいずれか)こと、GPU14の1つまたは複数の電力領域の動作クロック周波数を調整する(すなわち、増加させるまたは減少させるのいずれか)こと、および/あるいはGPU14の1つまたは複数の電力領域を電力コラプスする(たとえば、それらへの電力を遮断する)ことによって、電力管理プロセスを実施するように構成されてもよい。動作電圧および/または動作周波数が調整される場合があるか、または電力コラプスされる場合がある、GPU14の任意の電力領域は、コラプス可能な電力領域と呼ばれることがある。他の例では、電力管理ユニット70は、コマンドストリームヒントに基づいてバス80およびシステムメモリ16のうちの1つまたは複数に対する動作電圧および/または動作周波数の調整を要求するように構成されてもよい。
【００５５】
電力管理ユニット70は、クロックおよび電圧制御ユニット60の出力を制御することによって、GPU14の動作電圧もしくは動作クロック周波数のうちの1つもしくは複数、またはGPU14の個々の電力領域44を調整するように構成されてもよい。クロックおよび電圧制御ユニット60は、GPU14の動作電圧および/または動作クロック周波数を調節することを担う場合がある。電力管理ユニット70は、GPU14の1つまたは複数の電力領域44の動作電圧および/または動作クロック周波数が変更されるように、クロックおよび電圧制御ユニット60の出力を制御するおよび/または他の方法でクロックおよび電圧制御ユニット60に命令するように構成されてもよい。
【００５６】
処理ユニット46がコマンドを実行するレート(たとえば、クロック周波数)は、GPU14の電力消費に影響を及ぼす場合がある。たとえば、クロックおよび電圧制御ユニット60によって出力される動作クロック周波数が比較的高い場合、処理ユニット46は、比較的低い動作クロック周波数に対して実行される処理ユニット46の数と比較して、ある時間期間内により多くのコマンドを実行することがある。しかしながら、処理ユニット46が増加した量のコマンドを実行している事例では、GPU14の電力消費はより大きくなる場合がある。一般に、動作クロック周波数がより低くなると、GPU14の電力消費はより低くなる。いくつかの例では、処理ユニット46の動作電圧を低下させることによって、処理ユニット46の動作クロック周波数が低下する場合がある。他の例では、クロックおよび電圧制御ユニット60は、GPU14の動作電圧および動作クロック周波数を独立して制御するように構成されてもよい。加えて、より低い動作電圧は、より少ない電流ドロー、したがって、GPU14によって生成されるより少ない熱を生じる場合がある。熱は、GPU14の性能を劣化させる場合がある。したがって、過剰な熱が検出される状況では、より低い動作電圧が望ましい場合がある。熱上昇を弱めるためにGPU14の電力消費を低下させることは、熱緩和と呼ばれることがある。
【００５７】
本開示の他の例では、電力管理ユニット70は、コマンドストリームヒントに基づいてバス80および/またはシステムメモリ16のうちの1つまたは複数に対する動作電圧および/または動作周波数の調整に「投票する(vote)」ように構成されてもよい。この文脈では、動作電圧および/または動作周波数の調整への「投票(vote)」とは、電力管理ユニット70からクロックおよび電圧制御ユニット60に送信される、そのような調整を行うという要求である。いくつかの例では、電力管理ユニット70からの「投票」(または要求)は、いつどのようにクロックおよび電圧制御ユニット60がバス80およびシステムメモリ16に対して動作電圧および/または動作周波数の調整を行うかを直接制御してもよい。他の例では、電力管理ユニット70からの「投票」(または要求)は、バス80およびシステムメモリ16に対する動作電圧および/または動作周波数の調整を行うためにクロックおよび電圧制御ユニット60によって使用される多くの要因のうちの1つであってもよい。いくつかの例では、データおよびコマンドがより遅いレートでGPU14によって受信されるようにバス80および/またはシステムメモリ16の動作電圧および/または動作周波数の調整を減少させることによって、特定の作業負荷の電力使用量が低下する場合がある。他の例では、データおよびコマンドがより速いレートでGPU14によって受信されるようにバス80および/またはシステムメモリ16の動作電圧および/または動作周波数の調整を増加させることによって、(たとえば、アイドル時間の低減の点で)GPU14の作業負荷効率が上がる場合がある。
【００５８】
図2の例では、GPU14の処理ユニット46は1つまたは複数の電力領域44に分割される場合がある。電力領域44の個々の電力領域は、それにより電力管理ユニット70が他の電力領域とは無関係に電力管理プロセスを実施することができる、処理ユニット46のグループを指す。すなわち、電力管理ユニット70は、必ずしも同じ電力管理プロセスをすべての他の電力領域44に対しても実施することなしに、電力領域44のうちの1つの電力領域に対して電力管理プロセスを実施することができるように構成されてもよい。電力管理ユニット70は、個々に各電力領域に対して、電力領域のサブセットに対して、および/または集合的にすべての電力領域に対して電力管理プロセスを実施するように構成される。
【００５９】
電力管理ユニット70は、コマンドストリーム50を実行する前に電力管理プロセスを実行するやり方で、コマンドストリームヒント56を受信し、解析し、使用するように構成されてもよいことを理解されたい。すなわち、コマンドストリームヒント56によって表される作業負荷の特徴づけは、必ずしも電力管理ユニット70によって取られる特定の措置を規定するとは限らない。電力管理ユニット70は、GPU14の電力消費をどのように管理するかを決定するためにコマンドストリームヒント56のみを使用してもよく、またはコマンドストリームヒント56を他の要因と組み合わせて使用してもよい。電力管理ユニット70がどのようにコマンドストリームヒントを使用する場合があるかのいくつかの非限定的な例について、以下で説明する。
【００６０】
一例では、GPU14は、最小QoS要件を有するスタンドアロン2Dまたは3Dグラフィックスコマンドストリーム内の複合作業負荷(すなわち、1つまたは複数の画像の組合せ)であるコマンドストリーム54を受信してもよい。この例では、GPUドライバ42は、コマンドストリームヒント56内にアプリケーションタイプ、コンテキストタイプ、およびQoSコマンドストリームヒントを含んでもよい。たとえば、図3を参照すると、GPUドライバ42は、アプリタイプフィールド56Aに複合アプリケーションの指示、コンテキストフィールド56Bにグラフィックスコンテキストの指示、QoSフィールド56Eに(たとえば、最小FPS換算で)最小QoSの指示を含んでもよい。この例では、電力管理は、電力管理プロセスを実施して熱緩和を助けるために、温度センサ62からの温度データおよび/または電流センサ64からの電流データとともにコマンドストリームヒントを使用してもよい。
【００６１】
一般に、熱緩和は困難な問題を提示する。GPU14が熱スロットルモード(たとえば、GPU動作電圧および/または動作クロック周波数が限界温度まで下げられるモード)であるとき、温度および電流漏れは性能よりも優先される。しかしながら、熱緩和はQoSに影響を及ぼす場合がある。理想的には、GPU14によってレンダリングされている(たとえば、複合作業負荷からの)ユーザインターフェースは応答性があり、スタッターがないままであるべきである。十分な複合QoSを提供しながら有効電力を低減するために、電力管理ユニット70は、熱緩和とQoSとの間のトレードオフを行うように構成されてもよい。1つのアプローチは、最小QoSが確実に満たされることを助けるために、比較的高い動作クロック周波数および動作電圧において、現在の例の作業負荷によって表される複合作業負荷などの複合作業負荷を保つことである。
【００６２】
電力管理ユニット70は、複合作業負荷(たとえば、ユーザインターフェース)を正確に識別し、クロックおよび電圧制御ユニット60に最小QoSを満たすように十分な動作クロック周波数および動作電圧を設定させるために、この例のコマンドストリームヒントを使用してもよい。次いで、電力管理ユニット70は、次いでクロックおよび電圧制御ユニット60に任意の熱緩和要件を満たすように動作クロック周波数および動作電圧を低下させるために、他のタイプの作業負荷を識別するコマンドストリームヒントを使用してもよい。このようにして、すべての作業負荷、ただし最小QoS要件を有する作業負荷に対して、熱緩和が維持される。
【００６３】
別の例では、次世代グラフィックスAPIは、アプリケーションがグラフィックス作業負荷と計算作業負荷の両方に単一のAPIを使用することを可能にする。すなわち、グラフィックス作業負荷と計算作業負荷の両方は、単一のコマンドストリーム中に存在してもよい。この例では、電力管理ユニット70は、同じコマンドストリーム内の計算作業負荷およびグラフィックス作業負荷を識別するためにコンテキストフィールド56Bおよびレンダモード56Cを使用してもよい。グラフィックス作業負荷および計算作業負荷は、異なる最適動作クロック周波数および異なる動作電圧を有する傾向がある。電力管理ユニット70は、クロックおよび電圧制御ユニット60に、コンテキストフィールド56Bがグラフィックス作業負荷を示すか計算作業負荷を示すかに基づいて、動作クロック周波数および動作電圧を設定させるように構成されてもよい。さらに、グラフィックス作業負荷の場合、電力管理ユニット70は、クロックおよび電圧制御ユニット60に、レンダモードフィールド56Cがダイレクトレンダリングを示したかビニングレンダリングを示したかに基づいて、動作クロック周波数および動作電圧を設定させるように構成されてもよい。いくつかの例では、ダイレクトレンダリングは、より高い動作電圧および/または動作クロック周波数でより効率的に動作する場合がある。加えて、計算作業負荷の場合、処理ユニット46のいくつかの電力領域を電力コラプスすることができる。
【００６４】
別の例では、コマンドストリームヒントは、入ってくる作業負荷に対して電力管理の変更が必要ではない場合がある作業負荷を識別するために使用されてもよい。たとえば、2Dグラフィックス作業負荷を考える。この例では、GPUドライバ42は、アプリタイプフィールド56A、コンテキストフィールド56B、およびサイズフィールド56Dにコマンドストリームヒントを含んでもよい。アプリタイプフィールド56Aおよび/またはコンテキストフィールド56Bは、作業負荷が2Dグラフィックスであることを示す場合がある。サイズフィールド56Dは、ジョブのサイズを示す。いくつかの例では、電力管理ユニット70は、2D処理に使用されない処理ユニット46の部分を含む電力領域44のうちのいくつかの電力領域を電力コラプスするように構成されてもよい。しかしながら、サイズフィールド56D内の指示によって表される作業負荷のサイズが何らかの所定のしきい値よりも大きくない場合、処理ユニット46の一部分を電力コラプスすることによって実現される可能性がある電力節約は、そのような電力領域を再起動するために必要な電力のせいでほとんど失われる場合がある。すなわち、2Dグラフィックス作業負荷が十分に小さい場合、処理ユニット46の一部分を電力コラプスすることによって節約できる電力量はごくわずかにすぎないか、存在しない。したがって、電力管理ユニット70は、作業負荷のサイズが何らかのしきい値よりも大きい場合、2Dグラフィックス作業負荷用の処理ユニット46の部分のみを電力コラプスするように構成されてもよい。
【００６５】
電力管理ユニット70は、本開示で説明するコマンドストリームヒントに加えて情報を使用して、どの電力管理プロセスを実施するかについての決定を行ってもよいことを理解されたい。上記で説明したように、電力管理ユニット70はまた、温度センサ62および電流センサ64からの入力に基づいて熱緩和電力管理プロセスを実施するように構成されてもよい。加えて、電力管理ユニット70は、どの電力管理プロセスを実施するかを決定する際に、別の入力として過去のGPU性能メトリックを使用してもよい。
【００６６】
たとえば、電力管理ユニット70は、GPU14の作業負荷の移動統計を維持してもよい。たとえば、電力管理ユニット70は、移動平均ビジーおよび/またはアイドル持続時間、アイドル/ビジー比、移動平均の変動、ならびに作業負荷の移動平均の傾向のうちの1つまたは複数を維持してもよい。GPU14の作業負荷の統計、ならびに上記で説明したコマンドストリームヒントに基づいて、電力管理ユニット70は、クロックおよび電圧制御ユニット60によって出力されるべき動作電圧および/または動作クロック周波数を継続的に決定してもよい。
【００６７】
電力管理ユニット70を含むGPU14はまた、相対的にまたは現在の電力レベルに対してのいずれかでコマンドストリームヒントを使用して電力管理プロセスを実施するように構成されてもよいことを理解されたい。すなわち、コマンドストリームヒントのある一定の組合せは、電力管理ユニット70に、(たとえば、電力領域44の動作電圧レベル、動作クロック周波数、および電力状態の点で)現在の電力状態と無関係に、動作電圧レベルを調整させ、動作クロック周波数を調整させ、および/または電力領域44を電力コラプスさせる場合がある。
【００６８】
しかしながら、他の例では、電力管理ユニット70を含むそのGPU14は、特定のあらかじめ定義された電力状態が達成されるようにコマンドストリームヒントを使用して電力管理プロセスを実施するように構成されてもよい。あらかじめ定義された電力状態は、1つまたは複数の電力領域44についての特定の動作電圧、特定の動作クロック周波数、および特定の電力コラプスの状態によって定義されてもよい。この点について、コマンドストリームヒントによって示される、将来の作業負荷についてのあらかじめ定義された電力状態が、現在の作業負荷についての現在の状態と同じである場合、電力管理ユニット70によって実施される電力管理プロセスは、結果的に現在の電力状態に何の変更も行わないことがある。この例では、コマンドストリームヒントによって特徴づけられる将来の作業負荷についての現在の電力状態の変更は、将来の電力状態が現在の電力状態とは異なることが望まれる場合にのみ行われてもよい。したがって、電力領域44の動作電圧、動作クロック周波数、または電力コラプスの状態に何の変更も行わないことは、1つのタイプの電力管理プロセスであるとみなされる場合がある。
【００６９】
要約すれば、上記で説明したコマンドストリームヒントを生成および使用するための技法および構造は、小さい追加のドライバオーバーヘッドで基本的なGPU作業負荷の特徴を記述するための効果的な技法である場合がある。加えて、コマンドストリームヒントは、全体的な作業負荷の変化に対する予測能力を提供する場合がある。コマンドストリームヒントは、GPU14内の電力管理ユニット70が作業負荷の変化をプロアクティブに検出し、作業負荷の実行前に電力管理の決定を行い、全体的なGPU14電力プロファイルを改善し、QoSとGPU14の昇温(thermal ramp)およびピーク電流消費量のより良いバランスを取るのを助けることができる。
【００７０】
図4は、本開示の技法による例示的な電力管理プロセスを示すフローチャートである。図4の例では、電力管理ユニット70は、コマンドストリームによって受信されたおよび/または示されたコマンドストリームヒントに基づいて、GPU14の電力状態を複数のあらかじめ定義された電力状態のうちの1つに調整するように構成されてもよい。例示的なあらかじめ定義された電力状態は、電力状態PC1、PC2、PC3、VF1、VF2、およびVF3を含んでもよい。電力状態PC1では、電力管理ユニット70は、2D処理に使用されない処理ユニット46の部分を電力コラプスする。電力状態PC2では、電力管理ユニット70は、計算処理に使用されない処理ユニット46の部分を電力コラプスする。電力状態PC3では、電力管理ユニット70は、処理ユニット46のいずれも電力コラプスしない(たとえば、電力は電力領域44のすべてに供給される)。
【００７１】
電力状態VF1では、電力管理ユニット70は、たとえば、性能クリティカルなアプリケーションのために、動作電圧および/または動作クロック周波数をあらかじめ定義された「ハイ」レベルに設定する。電力状態VF2では、電力管理ユニット70は、たとえば、電力消費を制限するためにおよび/またはGPU14の温度を下げるために、動作電圧および/または動作クロック周波数をあらかじめ定義された「ロー」レベルに設定する。電力状態VF3では、電力管理ユニット70は、動作電圧および/または動作クロック周波数を、コマンドストリームヒントによって示されるコンテキストタイプ(CT1、CT2、CT3、CT4)、作業負荷サイズ(WS)、および/またはQoSメトリック(QM)のうちの1つまたは複数に依存する場合がある特定のあらかじめ定義されたレベルに設定する。
【００７２】
図4の例では、電力管理ユニット70は最初に、コマンドストリームヒントによって示されるコンテキストタイプ(82)を判定してもよい。2Dグラフィックスを示すコンテキストタイプは、電力管理ユニット70に電力状態PC1を設定させてもよい。計算アプリケーションを示すコンテキストタイプは、電力管理ユニット70に電力状態PC2を設定させてもよい。2Dグラフィックスまたは計算以外の何かを示すコンテキストタイプは、電力管理ユニット70に電力状態PC3を設定させてもよい。
【００７３】
次いで、電力管理ユニット70は、コマンドストリームヒントによって示されるアプリケーションタイプ(84)を判定してもよい。複合を示すアプリケーションタイプは、電力管理ユニット70に電力状態VF1を設定させてもよい。任意の他のアプリケーションタイプの場合、電力管理ユニット70は次いで、たとえば、温度センサ62によって示される温度違反が生じた(86)かどうかを判定してもよい。温度違反は、ある一定のしきい値を上回る任意の温度測定値であってもよい。温度違反が生じた場合、電力管理ユニット70は電力状態VF2を設定してもよい。
【００７４】
温度違反が生じなかった場合、電力管理ユニット70は次いで、コマンドストリームヒントによって示されるコンテキストタイプ(88)を再び参照してもよい。例示的なコンテキストタイプは、3Dグラフィックス、2Dグラフィックスおよび計算を含んでもよい。電力管理ユニット70は、2Dグラフィックス作業負荷をコンテキストタイプ3(CT3)に、計算作業負荷をコンテキストタイプ4(CT4)に割り当ててもよい。電力管理ユニット70は、3Dグラフィックス作業負荷について、コマンドストリームヒントからレンダモード(90)をさらに判定してもよい。電力管理ユニット70は、ダイレクトレンダリングモードを有する3Dグラフィックス作業負荷をコンテキストタイプ1(CT1)に割り当て、ビニングレンダリングモードを有する3Dグラフィックス作業負荷をコンテキストタイプ2(CT2)に割り当ててもよい。
【００７５】
コンテキストタイプが判定された後、電力管理ユニット70は次いで、コマンドストリームヒントによって示される場合、作業負荷サイズメトリック(WS)(92)を判定してもよい。電力管理ユニット70はまた、コマンドストリームヒントによって示される場合、QoSメトリック(QM)(94)を判定してもよい。コンテキストタイプ、作業負荷サイズメトリック(利用可能な場合)およびQoSメトリック(利用可能な場合)に基づいて、電力管理ユニット70は電力状態VF3を設定してもよい。
【００７６】
図5は、本開示で説明する技法による例示的な方法を示すフローチャートである。図5の技法は、プロセッサ12およびGPU14の1つまたは複数の構造によって実装されてもよい。一例では、プロセッサ12は、GPU14が実行するための1つまたは複数のコマンド58を生成し(100)、1つまたは複数のコマンド58に基づいて(たとえば、GPUドライバ42の実行を通じて)少なくとも1つのコマンドストリームヒント56を生成し(102)、1つまたは複数のコマンド58および少なくとも1つのコマンドストリームヒント56を含めるようにコマンドストリーム50を生成する(104)ように構成されてもよい。本開示の一例では、少なくとも1つのコマンドストリームヒント56は、アプリケーションタイプの指示、コンテキストタイプの指示、レンダモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む。
【００７７】
GPU14のフロントエンドプロセッサ48は、GPUにおいて、コマンドストリーム50を受信するように構成されてもよい(106)。コマンドストリーム50は、GPU14によって実施されるべき1つまたは複数のコマンド58および少なくとも1つのコマンドストリームヒント56を含む。コマンドストリームヒント56は、コマンドストリーム50の作業負荷の特徴づけを提供する。電力管理ユニット70は、コマンドストリーム50を実行する前に少なくとも1つのコマンドストリームヒント56に基づいて電力管理プロセスを実施するように構成されてもよい(108)。処理ユニット46は、コマンドストリーム50を実行するように構成される(110)。
【００７８】
本開示の一例では、電力管理プロセスを実施するために、電力管理ユニット70は、コマンドストリーム50を実行する前に少なくとも1つのコマンドストリームヒント56に基づいてGPU14の1つまたは複数の電力領域44を電力コラプスするようにさらに構成され、各それぞれの電力領域は、処理ユニット46のうちの1つまたは複数を含む。本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、コマンドストリーム50を実行する前に少なくとも1つのコマンドストリームヒント56に基づいてGPU14の1つまたは複数の電力領域44の動作電圧レベルを調整するようにさらに構成される。本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、コマンドストリーム50を実行する前に少なくとも1つのコマンドストリームヒント56に基づいてGPU14の1つまたは複数の電力領域44の動作クロック周波数および/または動作電圧を調整するようにさらに構成される。
【００７９】
本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、コマンドストリーム50を実行する前に少なくとも1つのコマンドストリームヒント56および温度センサ62の出力に基づいて電力管理プロセスを実施するようにさらに構成される。本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、コンテキストタイプが計算コンテキストタイプであることを示す少なくとも1つのコマンドストリームヒント56に基づいて、GPU14の1つまたは複数の電力領域44を電力コラプスするようにさらに構成される。本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、サービス品質レベルの範囲がしきい値を下回ることを示す少なくとも1つのコマンドストリームヒント56に基づいて、GPU14の1つまたは複数の電力領域44の動作電圧または動作周波数のうちの少なくとも1つを低下させる(たとえば、低減する)ようにさらに構成される。本開示の別の例では、電力管理プロセスを実施するために、電力管理ユニット70は、コンテキストタイプが2Dグラフィックス処理であることと、作業負荷サイズがしきい値を上回ることとを示す少なくとも1つのコマンドストリームヒント56に基づいて、GPU14の1つまたは複数の電力領域44を電力コラプスするようにさらに構成される。
【００８０】
本開示で使用する(「AはBに基づく」のような)「〜に基づいて」という用語は、(i)「〜から導出される」(たとえば、「BはAの先行物である」)、(ii)「少なくとも〜に基づいて」(たとえば、「Aは少なくともBに基づく」)、および、特定の文脈において適切な場合、(iii)「〜に等しい」(たとえば、「AはBに等しい」または「AはBと同じである」)場合を含む、その通常の意味のいずれかを示すために使用される。
【００８１】
1つまたは複数の例では、説明した機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せにおいて実装されてもよい。ソフトウェアにおいて実装される場合、機能は、1つまたは複数の命令またはコードとして、コンピュータ可読媒体上に記憶されるか、またはコンピュータ可読媒体を介して送信され、ハードウェアベースの処理ユニットによって実行される場合がある。コンピュータ可読媒体は、データ記憶媒体などの有形媒体に対応するコンピュータ可読記憶媒体を含んでもよい。このようにして、コンピュータ可読媒体は一般に、非一時的である有形コンピュータ可読記憶媒体に対応する場合がある。データ記憶媒体は、本開示で説明する技法の実装のための命令、コードおよび/またはデータ構造を取り出すために1つもしくは複数のコンピュータまたは1つもしくは複数のプロセッサによってアクセスすることができる任意の利用可能な媒体であってもよい。コンピュータプログラム製品は、コンピュータ可読媒体を含んでもよい。
【００８２】
限定ではなく例として、そのようなコンピュータ可読記憶媒体は、RAM、ROM、EEPROM、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気ストレージデバイス、フラッシュメモリ、または、命令もしくはデータ構造の形態の所望のプログラムコードを記憶するために使用することができ、コンピュータによってアクセスすることができる任意の他の媒体を備えることができる。コンピュータ可読記憶媒体およびデータ記憶媒体は、搬送波、信号、または他の一時的媒体を含まないが、代わりに、非一時的な有形記憶媒体を対象とすることを理解されたい。本明細書で使用するディスク(disk)およびディスク(disc)は、コンパクトディスク(disc)(CD)、レーザーディスク(disc)(登録商標)、光ディスク(disc)、デジタル多用途ディスク(disc)(DVD)、フロッピーディスク(disk)およびBlu-ray(登録商標)ディスク(disc)を含み、ディスク(disk)は通常、データを磁気的に再生し、ディスク(disc)は、レーザーを用いてデータを光学的に再生する。上記の組合せも、コンピュータ可読媒体の範囲内に含まれるべきである。
【００８３】
命令は、1つもしくは複数のデジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、または他の等価な集積論理回路もしくは個別論理回路などの、1つまたは複数のプロセッサによって実行されてもよい。したがって、本明細書で使用する「プロセッサ」という用語は、上記の構造、または本明細書で説明する技法の実装に適した任意の他の構造のいずれかを指すことがある。加えて、いくつかの態様では、本明細書で説明する機能は、符号化および復号のために構成される専用のハードウェアモジュールおよび/またはソフトウェアモジュール内で与えられることがあり、あるいは複合コーデックに組み込まれることがある。また、技法は、1つまたは複数の回路または論理要素において完全に実装される可能性がある。
【００８４】
本開示の技法は、ワイヤレスハンドセット、集積回路(IC)またはICのセット(たとえば、チップセット)を含む、多種多様なデバイスまたは装置において実装されてもよい。本開示では、開示する技法を実施するように構成されるデバイスの機能的態様を強調するために、様々な構成要素、モジュール、またはユニットについて説明するが、それらは、必ずしも異なるハードウェアユニットによる実現を必要とするとは限らない。むしろ、上記で説明したように、様々なユニットは、コーデックハードウェアユニットにおいて組み合わされることがあり、あるいは適切なソフトウェアおよび/またはファームウェアとともに、上記で説明した1つまたは複数のプロセッサを含む相互動作可能なハードウェアユニットの集合によって提供されることがある。
【００８５】
様々な例について説明した。これらおよび他の例は、以下の特許請求の範囲内に入る。
【符号の説明】
【００８６】
10  デバイス
12  プロセッサ
14  GPU
16  システムメモリ
18  ディスプレイ
20  ユーザインターフェース
22  トランシーバモジュール
40  アプリケーション
42  GPUドライバ
44  電力領域
46  処理ユニット
48  フロントエンドプロセッサ
50、51、52、54  コマンドストリーム
56、57  コマンドストリームヒント
56A  アプリタイプフィールド
56B  コンテキストフィールド
56C  レンダモードフィールド
56D  サイズフィールド
56E  QOSフィールド
58  コマンド
60  クロックおよび電圧制御ユニット
62  温度センサ
64  電流センサ
70  電力管理ユニット
80  バス
82  コンテキストタイプ
84  アプリケーションタイプ
86  温度違反
88  コンテキストタイプ
90  レンダモード
92  作業負荷サイズメトリック(WS)
94  QoSメトリック(QM)
【図１】
2018533112.tif 000003
【図２】
2018533112.tif 000004
【図３】
2018533112.tif 000005
【図４】
2018533112.tif 000006
【図５】
2018533112.tif 000007
【手続補正書】
【提出日】平成30年3月1日(2018.3.1)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データ処理の方法であって、
グラフィックス処理ユニット(GPU)において、コマンドストリームを受信するステップであって、前記コマンドストリームが、前記GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、ステップと、
前記GPUのフロントエンドプロセッサによって、前記少なくとも1つのコマンドストリームヒントを識別するために前記コマンドストリームをパースするステップと、
前記GPUの前記フロントエンドプロセッサによって、前記識別された少なくとも1つのコマンドストリームヒントを前記GPUの電力管理ユニットに送信するステップと、
前記GPUの前記電力管理ユニットによって、前記GPUが前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するステップと、
前記GPUによって、前記コマンドストリームを実行するステップと
を備える、方法。
【請求項２】
プロセッサによって、前記1つまたは複数のコマンドを生成するステップと、
前記プロセッサによって、前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成するステップと、
前記プロセッサによって、前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成するステップと
をさらに備える、請求項1に記載の方法。
【請求項３】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項４】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整するステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項５】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整するステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項1に記載の方法。
【請求項６】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントおよび温度センサの出力に基づいて前記電力管理プロセスを実施するステップ
を備える、請求項1に記載の方法。
【請求項７】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダーモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項1に記載の方法。
【請求項８】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コンテキストタイプが計算コンテキストタイプであることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項９】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記サービス品質レベルの範囲がしきい値を下回ることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧または動作周波数のうちの少なくとも1つを低下させるステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項１０】
前記電力管理プロセスを実施するステップが、
前記GPUの前記電力管理ユニットによって、前記コンテキストタイプが2Dグラフィックス処理であることと、前記作業負荷サイズがしきい値を上回ることとを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするステップであって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、ステップ
を備える、請求項7に記載の方法。
【請求項１１】
データを処理するように構成される装置であって、
コマンドストリームを記憶するように構成されるメモリと、
グラフィックス処理ユニット(GPU)であって、
フロントエンドプロセッサであって、
前記コマンドストリームを受信することであって、前記コマンドストリームが、前記GPUによって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、受信することと、
前記少なくとも1つのコマンドストリームヒントを識別するために前記コマンドストリームをパースすることと、
前記識別された少なくとも1つのコマンドストリームヒントを前記GPUの電力管理ユニットに送信することと
を行うように構成されるフロントエンドプロセッサと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するように構成される前記電力管理ユニットと、
前記コマンドストリームを実行するように構成される複数の処理ユニットと
を備える、GPUと
を備える、装置。
【請求項１２】
プロセッサであって、
前記1つまたは複数のコマンドを生成し、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成し、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成する
ように構成されるプロセッサ
をさらに備える、請求項11に記載の装置。
【請求項１３】
前記プロセッサが中央処理ユニットである、請求項12に記載の装置。
【請求項１４】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項11に記載の装置。
【請求項１５】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作電圧レベルを調整する
ようにさらに構成される、請求項11に記載の装置。
【請求項１６】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作クロック周波数を調整する
ようにさらに構成される、請求項11に記載の装置。
【請求項１７】
前記電力管理ユニットが、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントおよび温度センサの出力に基づいて前記電力管理プロセスを実施する
ようにさらに構成される、請求項11に記載の装置。
【請求項１８】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダーモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項11に記載の装置。
【請求項１９】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コンテキストタイプが計算コンテキストタイプであることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項18に記載の装置。
【請求項２０】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記サービス品質レベルの範囲がしきい値を下回ることを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数の動作電圧または動作周波数のうちの少なくとも1つを低下させる
ようにさらに構成される、請求項18に記載の装置。
【請求項２１】
前記GPUが複数のコラプス可能な電力領域をさらに備え、前記複数のコラプス可能な電力領域の各々が前記複数の処理ユニットのうちの少なくとも1つを含み、前記電力管理ユニットが、
前記コンテキストタイプが2Dグラフィックス処理であることと、前記作業負荷サイズがしきい値を上回ることとを示す前記少なくとも1つのコマンドストリームヒントに基づいて前記複数のコラプス可能な電力領域のうちの1つまたは複数を電力コラプスする
ようにさらに構成される、請求項18に記載の装置。
【請求項２２】
前記装置がモバイルデバイスである、請求項11に記載の装置。
【請求項２３】
データを処理するように構成される装置であって、
コマンドストリームを受信するための手段であって、前記コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、手段と、
前記少なくとも1つのコマンドストリームヒントを識別するために前記コマンドストリームをパースするための手段と、
前記識別された少なくとも1つのコマンドストリームヒントを前記GPUの電力管理ユニットに送信するための手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施するための手段と、
前記コマンドストリームを実行するための手段と
を備える、装置。
【請求項２４】
前記1つまたは複数のコマンドを生成するための手段と、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成するための手段と、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成するための手段と
をさらに備える、請求項23に記載の装置。
【請求項２５】
前記電力管理プロセスを前記実施するための手段が、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスするための手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整するための手段と、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整するための手段であって、各それぞれの電力領域が前記GPUの1つまたは複数の処理ユニットを含む、手段と
を備える、請求項23に記載の装置。
【請求項２６】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダーモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項23に記載の装置。
【請求項２７】
実行されたとき、データを処理するように構成されるデバイスの1つまたは複数のプロセッサに、
コマンドストリームを受信することであって、前記コマンドストリームが、グラフィックス処理ユニット(GPU)によって実施されるべき1つまたは複数のコマンドと、少なくとも1つのコマンドストリームヒントとを含み、前記少なくとも1つのコマンドストリームヒントが、前記コマンドストリームの作業負荷の特徴づけを提供する、受信することと、
前記少なくとも1つのコマンドストリームヒントを識別するために前記コマンドストリームをパースすることと、
前記識別された少なくとも1つのコマンドストリームヒントを前記GPUの電力管理ユニットに送信することと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて電力管理プロセスを実施することと、
前記コマンドストリームを実行することと
を行わせる命令を記憶する、コンピュータ可読記憶媒体。
【請求項２８】
前記命令が、前記1つまたは複数のプロセッサに、
前記1つまたは複数のコマンドを生成することと、
前記1つまたは複数のコマンドに基づいて前記少なくとも1つのコマンドストリームヒントを生成することと、
前記1つまたは複数のコマンドおよび前記少なくとも1つのコマンドストリームヒントを含めるように前記コマンドストリームを生成することと
をさらに行わせる、請求項27に記載のコンピュータ可読記憶媒体。
【請求項２９】
前記命令が、前記1つまたは複数のプロセッサに、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域を電力コラプスすることと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作電圧レベルを調整することと、
前記コマンドストリームを実行する前に前記少なくとも1つのコマンドストリームヒントに基づいて前記GPUの1つまたは複数の電力領域の動作クロック周波数を調整することであって、各それぞれの電力領域が処理ユニットのうちの1つまたは複数を含む、調整することと
をさらに行わせる、請求項27に記載のコンピュータ可読記憶媒体。
【請求項３０】
前記少なくとも1つのコマンドストリームヒントが、アプリケーションタイプの指示、コンテキストタイプの指示、レンダーモードの指示、作業負荷サイズの指示、または許容可能なサービス品質レベルの範囲の指示のうちの1つまたは複数を含む、請求項27に記載のコンピュータ可読記憶媒体。
【国際調査報告】
2018533112.tif 000008
2018533112.tif 000009
2018533112.tif 000010