(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-15
(54)【発明の名称】選択的優先度ベースの2レベルビニングを有する処理システム
(51)【国際特許分類】
G06F 9/50 20060101AFI20240408BHJP
【FI】
G06F9/50 150A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023525972
(86)(22)【出願日】2021-11-12
(85)【翻訳文提出日】2023-06-05
(86)【国際出願番号】 US2021059172
(87)【国際公開番号】W WO2022104082
(87)【国際公開日】2022-05-19
(32)【優先日】2020-11-13
(33)【優先権主張国・地域又は機関】US
(32)【優先日】2021-04-15
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】アニルーダ アール. アチャリャ
(72)【発明者】
【氏名】ルイジン ウー
(72)【発明者】
【氏名】ヨン イン ヨ
(57)【要約】
システム[100]のグラフィックス処理ユニット(GPU)[102]を用いてワークロードを実行するための、2レベルビニングモード等のレンダリングモードの優先度ベース及び性能ベースの選択に関するシステム及び方法が提供されている。中央処理ユニット(CPU)[104]で実行されるユーザモードドライバ(UMD)[110]又はカーネルモードドライバ(KMD)[112]は、2レベルビニングモードで実行される低及び中優先度のワークロードを構成し、1つ以上のビニング条件又はオーバーライド条件が満たされたことを性能ヒューリスティックスが示すかどうかに基づいて、高優先度ワークロードのためのビニングモードを選択する。GPUにおける低及び中優先度のワークロードの実行は、高優先度ワークロードの実行が優先してプリエンプトされ得るように高優先度ワークロードが高優先度キューに維持される一方で、低及び中優先度のワークロードが低/中優先度キューに維持される。
【選択図】
図1
【特許請求の範囲】
【請求項1】
方法であって、
システムの少なくとも1つの処理ユニットが、第1のビニングモードで第1のワークロードを実行することと、
前記少なくとも1つの処理ユニットが、前記システムの性能ヒューリスティックスに基づいて、前記第1のビニングモード及び第2のビニングモードのうち何れかから選択された、選択されたビニングモードで第2のワークロードを実行することと、を含む、
方法。
【請求項2】
前記少なくとも1つの処理ユニットが、前記第1のワークロードの第1の優先度インジケータに基づいて、前記第1のワークロードが低優先度ワークロードであると判定することであって、前記第1のワークロードは、前記第1のワークロードが低優先度ワークロードであると判定したことに応じて前記第1のビニングモードで実行される、ことと、
前記少なくとも1つの処理ユニットが、前記第2のワークロードの第2の優先度インジケータに基づいて、前記第2のワークロードが高優先度ワークロードであると判定することであって、前記第2のワークロードは、前記第2のワークロードが高優先度ワークロードであると判定したことに応じて前記第2のビニングモードで実行される、ことと、を更に含む、
請求項1の方法。
【請求項3】
前記第1のビニングモードは2レベルビニングモードであり、前記第2のビニングモードは非2レベルビニングモードである、
請求項1又は2の方法。
【請求項4】
前記第1のビニングモードは2レベルビニングモードであり、
前記方法は、
前記第1のビニングモードで実行されるように前記第1のワークロードを構成することを更に含み、
前記第1のワークロードを構成することは、
前記第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、
前記複数の粗いビンの各々に対して、その粗いビンを複数の細かいビンに分割することと、
前記第1のワークロードの前記画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、
によって行われる、
請求項1~3の何れかの方法。
【請求項5】
前記少なくとも1つの処理ユニットが、前記第1のワークロードの前記複数の粗いビンのうち第1の粗いビンを実行している間にプリエンプション通知を受信することと、
前記少なくとも1つの処理ユニットが、前記プリエンプション通知を受信したことに応じて前記第1のワークロードの実行を停止することであって、前記第2のワークロードを実行することは、前記第1のワークロードの実行が停止されている間に行われる、ことと、
前記少なくとも1つの処理ユニットが、前記第2のワークロードを実行すると前記第1のワークロードの実行を再開することと、を更に含む、
請求項4の方法。
【請求項6】
前記第1のワークロードの実行を停止する前に、前記第1のワークロードの前記第1の粗いビンの実行を完了することを更に含み、
前記第1のワークロードの実行を再開することは、
前記第1のワークロードの前記複数の粗いビンのうち第2の粗いビンの実行を開始することを含む、
請求項5の方法。
【請求項7】
前記第2のワークロードに対して前記選択されたビニングモードを選択することを更に含み、
前記選択することは、
前記システムの前記性能ヒューリスティックスに基づいて、2レベルビニングモードに対応する2レベルビニング条件が満たされたかどうかを判定することと、
前記システムの前記性能ヒューリスティックスに基づいて、オーバーライド条件が満たされたかどうかを判定することと、
によって行われる、
請求項1~6の何れかの方法。
【請求項8】
前記2レベルビニング条件は、前記少なくとも1つの処理ユニットを含む前記システムの平均温度が第1の事前定義された温度閾値を超えること、前記システムの前記平均温度の第1の変化率が第2の事前定義された閾値を超えること、前記システムの定義されたロケーションにおける局所温度が第3の事前定義された閾値を超えること、前記局所温度の第2の変化率が第4の事前定義された閾値を超えること、前記システムの平均電力消費が第5の事前定義された閾値を超えること、前記システムのピーク瞬時電力消費が第6の事前定義された閾値を超えること、又は、バッテリの充電状態が第7の事前定義された閾値を下回ること、のうち少なくとも1つを含む、
請求項7の方法。
【請求項9】
前記性能ヒューリスティックスは、前記少なくとも1つの処理ユニットを含む前記システムの平均温度、前記システムの前記平均温度の第1の変化率、前記システムの平均電力消費、前記平均電力消費の第2の変化率、前記システムのピーク瞬時電力消費、前記システムのバッテリの充電状態、又は、前記2レベルビニングモードで実行するための前記第2のワークロードの適用可能性のうち少なくとも1つを含む、
請求項7又は8の方法。
【請求項10】
デバイスであって、
少なくとも1つの処理ユニットを備え、
前記少なくとも1つの処理ユニットは、
第1のビニングモードで第1のワークロードを実行することと、
前記デバイスの性能ヒューリスティックスに基づいて、前記第1のビニングモード及び第2のビニングモードのうち何れかから選択された、選択されたビニングモードで第2のワークロードを実行することと、
を行うように構成されている、
デバイス。
【請求項11】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの第1の優先度インジケータに基づいて、前記第1のワークロードが低優先度ワークロードであると判定することであって、前記第1のワークロードは、前記第1のワークロードが低優先度ワークロードであると判定したことに応じて前記第1のビニングモードで実行される、ことと、
前記第2のワークロードの第2の優先度インジケータに基づいて、前記第2のワークロードが高優先度ワークロードであると判定することであって、前記第2のワークロードは、前記第2のワークロードが高優先度ワークロードであると判定したことに応じて前記選択されたビニングモードで実行される、ことと、
を行うように更に構成されている、
請求項10のデバイス。
【請求項12】
第1のビニングモードは2レベルビニングモードであり、前記第2のビニングモードは非2レベルビニングモードである、
請求項11のデバイス。
【請求項13】
前記少なくとも1つの処理ユニットは、
前記2レベルビニングモードで実行されるように前記第1のワークロードを構成するように構成されており、
前記第1のワークロードを構成することは、
前記第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、
前記複数の粗いビンの各々に対して、その粗いビンを複数の細かいビンに分割することと、
前記第1のワークロードの前記画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、
によって行われる、
請求項12のデバイス。
【請求項14】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの前記複数の粗いビンのうち第1の粗いビンを実行している間にプリエンプション通知を受信することと、
前記プリエンプション通知を受信したことに応じて前記第1のワークロードの実行を停止することと、
前記第1のワークロードが停止されている間に前記第2のワークロードを実行することと、
前記第2のワークロードを実行すると前記第1のワークロードの実行を再開することと、
を行うように更に構成されている、
請求項13のデバイス。
【請求項15】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの実行を停止する前に、前記第1の粗いビンの実行を完了するように更に構成されており、
前記第1のワークロードの実行を再開することは、
前記第1のワークロードの前記複数の粗いビンのうち第2の粗いビンの実行を再開することを含む、
請求項14のデバイス。
【請求項16】
デバイスであって、
少なくとも1つの処理ユニットを備え、
前記少なくとも1つの処理ユニットは、
第1のワークロードの画像フレームの第1の粗いビンを2レベルビニングモードで実行している間にプリエンプション通知を受信することと、
プリエンプション通知を受信したことに応じて、且つ、前記第1の粗いビンの実行を完了した後に、前記第1のワークロードの実行を停止することと、
前記第1のワークロードが停止されている間に、選択されたビニングモードで第2のワークロードを実行することと、
前記第2のワークロードを実行すると前記第1のワークロードの実行を再開することと、
を行うように構成されている、
デバイス。
【請求項17】
前記少なくとも1つの処理ユニットは、
前記デバイスの性能ヒューリスティックスに基づいて、前記2レベルビニングモード及び非2レベルビニングモードのうち何れかから、前記選択されたビニングモードを選択するように更に構成されている、
請求項16のデバイス。
【請求項18】
前記少なくとも1つの処理ユニットは、
前記2レベルビニングモードで実行されるように前記第1のワークロードを構成するように更に構成されており、
前記第1のワークロードを構成することは、
前記第1のワークロードに関連付けられた画像フレームを、前記第1の粗いビンを含む複数の粗いビンに分割することと、
前記複数の粗いビンの各々に対して、その粗いビンを複数の細かいビンに分割することと、
前記第1のワークロードの前記画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、
によって行われる、
請求項17のデバイス。
【請求項19】
前記少なくとも1つの処理ユニットは、前記第1のワークロードの実行を再開すると前記画像フレームの前記複数の粗いビンのうち第2の粗いビンを実行するように構成されている、
請求項18のデバイス。
【請求項20】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの第1の優先度インジケータに基づいて、前記第1のワークロードが低優先度ワークロードであると判定することと、
前記第2のワークロードの第2の優先度インジケータに基づいて、前記第2のワークロードが高優先度ワークロードであると判定することと、
前記第1のワークロードを第1のキューにサブミットさせることと、
前記第2のワークロードを前記第1のキューとは異なる第2のキューにサブミットさせることと、
を行うように更に構成されている、
請求項17のデバイス。
【発明の詳細な説明】
【背景技術】
【0001】
コンピュータ処理システムは、概して、グラフィックス処理ユニット(graphics processing unit、GPU)を用いて、テクスチャマッピング、レンダリング、頂点変換等のグラフィックス動作を実行する。GPUに関する性能要件又は仕様は、関連付けられた電子デバイスのタイプに応じて変化し得る。例えば、モバイルデバイス又は他のバッテリ駆動デバイスで使用されるGPUは、他の非バッテリ駆動プラットフォームから大幅に分化し得る特性及び要件を有する。性能、バッテリ寿命及び熱は、一般に、バッテリ駆動デバイスプラットフォームにとって重要な基準であり、持続的な性能と低アイドル電力消費及び温度が望ましい。しかしながら、一般に、バッテリ駆動デバイスにおけるGPU性能とバッテリ寿命/熱との間にはトレードオフが存在する。
【0002】
本開示は、添付の図面を参照することによってより良好に理解され、その数々の特徴及び利点が当業者に明らかになり得る。異なる図面における同じ符号の使用は、類似又は同一のアイテムを示す。
【図面の簡単な説明】
【0003】
【
図1】いくつかの実施形態による、GPU性能データに基づいてGPUワークロードのビニングモードを設定する例示的なデバイスのブロック図である。
【
図2】いくつかの実施形態による、性能ヒューリスティックスに基づいてGPUワークロードのビニングモードを設定するための方法を示すフロー図である。
【
図3】いくつかの実施形態による、判定されたビニングモードに基づいてコマンドをGPUにサブミットする前に、保留中のワークロードに選択的にパッチを当てるための方法を示すフロー図である。
【
図4】いくつかの実施形態による、2レベルビニングモード又は非2レベルビニングモードでワークロードを選択的に実行するための方法を示すフロー図である。
【
図5】いくつかの実施形態による、GPUによって実行されるワークロードの優先度ベースの編成及び選択のための高優先度及び低/中優先度キューのブロック図である。
【
図6】いくつかの実施形態による、性能ヒューリスティックス及びワークロード優先度に基づいて、2レベルビニングモード又は非2レベルビニングモードでワークロードを選択的に実行する方法を示すフロー図である。
【
図7】いくつかの実施形態による、より高い優先度のワークロードを実行するために、2レベルビニングモードでのより低い優先度のワークロードの実行をプリエンプトする方法を示すフロー図である。
【発明を実施するための形態】
【0004】
本明細書で説明する技術を使用して、処理システムのGPUは、処理システムの性能特性に基づいて、及び、それらのワークロードのそれぞれの優先度に基づいて、1つ以上のワークロードを実行するためのプリミティブビニングモード(本明細書では「ビニングモード」と時折呼ばれる)を選択する。画像フレームをレンダリングする場合、ビニングモードは、画像フレームが領域に分割され、プリミティブが各領域に対応するビンに割り当てられる技術を定義する。性能特性に基づいてビニングモードを選択することによって、処理システムは、システムの動作条件に応じてレンダリングプロセスを適応させる。様々な例によれば、処理システムは、処理システムの電力消費を低減するために、又は、処理システム温度を低下させるために、低い残存バッテリ寿命又は高い処理システム温度等の状態を検出することに応じて画像フレームをレンダリングするために、2レベルビニングモード等のより少ないハードウェア集約度のビニングモードを選択することによって、ユーザエクスペリエンスを改善する。
【0005】
例示すると、フレームをレンダリングするために(すなわち、ディスプレイパネル等のディスプレイデバイスに転送し、そこで表示するためのフレームを準備するために)、GPUは、三次元(three-dimensional、3D)オブジェクトについての情報を、表示可能な二次元(two-dimensional、2D)画像フレームに変換する。このプロセスは、少なくとも場合によっては、かなりの処理能力及びメモリリソースを必要とする。レンダリングプロセス中、画像フレーム内の画素は、それぞれの画素の色値を判定するためにグラフィカルオブジェクトをレンダリングすることによって生成される。例示的なグラフィカルオブジェクトは、点、線、多角形及び三次元(3D)のより高次の表面を含む。点、線及び多角形は、ほとんどの3Dレンダリング命令の基礎であるレンダリングプリミティブを表す。3Dオブジェクト等のより複雑な構造は、そのようなプリミティブの組み合わせ又はメッシュから形成される。従来のレンダリング技術を使用して特定のシーンを表示するために、GPUは、各プリミティブのエッジ内に入る画素を判定し、それらの画素の各々に対応するプリミティブの属性を取得することによって、プリミティブごとに、個々にシーンに関連付けられた潜在的な寄与画素を有するプリミティブをレンダリングする。
【0006】
他の場合には、GPUは、ビニングプロセスを使用してプリミティブをレンダリングし、GPUは、画像フレームを領域に分割し、所定の領域と交差するプリミティブを識別し、識別されたプリミティブを所定の領域に対応するビンに配置する。したがって、フレームの各領域は、対応するビンに関連付けられ、ビンは、関連付けられたビンと交差するプリミティブ又はプリミティブの一部を含む。GPUは、ビンに対応するフレームの領域と交差するプリミティブの画素をレンダリングすることによって、ビンごとにフレームをレンダリングする。これは、GPUが、少なくとも場合によっては、より少ないメモリアクセスを必要とすること、キャッシュ使用量を増加させること等によって、フレームをより効率的にレンダリングすることを可能にする。
【0007】
ビニングプロセスの一例は、プリミティブバッチビニング(primitive batch binning、PBB)であり、GPUは、プリミティブのシーケンスを受信し、プリミティブを時間的に関連するプリミティブバッチに都合よくセグメント化する。バッチフル条件、状態ストレージフル条件等の所定の条件が満たされるまで、又は、以前にレンダリングされたプリミティブに対する依存性が判定されるまで、順次プリミティブがキャプチャされる。PBBを実行する場合に、レンダリングされたプリミティブを表示する画像フレームは、いくつかのブロックに分割される。画像フレームの各ブロックは、それぞれのビンに関連付けられる。バッチのプリミティブの受信されたシーケンスの各プリミティブは、1つ以上のビンと交差する。バッチ内の受信された各プリミティブに対して、初期ビンインターセプトが計算され、初期ビンインターセプトは、プリミティブが交差する画像フレームの最も左上のビンである。バッチが閉じられた後、処理のための第1のビンが識別される。識別されたビンをインターセプトするプリミティブが処理される。ビンをインターセプトする識別された各プリミティブについて、次のビンインターセプトが識別され、識別されたビンによって囲まれたプリミティブに含まれる画素が、詳細なラスタ化のために送信される。次のビンインターセプトは、処理されたプリミティブが交差するラスタ順で次の最も左上のビンである。
【0008】
いくつかの実施形態では、GPUは、本明細書でビニングモード又はプリミティブビニングモードと呼ばれる異なるビニング技術を実装し、異なるビニングモードは、各ビンの異なる領域サイズ、異なる数のビニングレベル等、又は、それらの任意の組み合わせ等のような、異なるビニング特性を用いる。例えば、いくつかの実施形態では、GPUは、単一レベルビニングモード及び2レベルビニングモードの両方を含む。プリミティブバッチビニング(PBB)モードとも呼ばれる単一レベルビニングモードでは、GPUは、画像フレームを指定された数の領域に分割し、上述したように各領域をレンダリングする。
【0009】
2レベルビニングモードでは、粗いレベルビニングと細かいレベルビニングの2タイプのビニングが実行される。いくつかの実施形態では、粗いレベルビニングは、大きなビン(例えば、表示領域全体をカバーするために合計32個のビン)を使用し、これはビニングオーバーヘッドを低減する。粗いビンごとの可視性情報は、第1の粗いビン(すなわち、粗いビン0)のレンダリング中に生成され、他の粗いビンをレンダリングするために使用される。粗いレベルビニングの後に、細かいレベルビニングが各粗いビンに対して順次実行される。いくつかの実施形態では、細かいレベルビニングは、プリミティブバッチビニング(PBB)を実行して、PBBベースの細かいレベルビニング中に各粗いビンを細かいビンの64×64アレイに更にビニングすること等によって、各粗いビンをより小さい「細かい」ビンに分割することを伴う。次いで、各細かいビンは、対応する粗いビンに対して生成されたプリミティブ可視性情報等のレンダリング情報を使用してレンダリングされる。いくつかの実施形態では、2レベルビニングは、グラフィックス処理パイプラインのトップで(例えば、頂点処理及びラスタ化の前に)発生し、これは、グラフィックス処理パイプラインの中間で(例えば、頂点処理の後、且つ、画素シェーディングの前に)発生する単一レベルPBBのみのビニングモードとは対照的である。
【0010】
場合によっては、異なるビニングモードが異なるデバイス条件に好適である。例えば、いくつかの条件下での単一レベル又はPBBビニングモード(上述した粗いレベルビニングと細かいレベルビニングとの組み合わせなしにPBBのみが使用される)は、2レベルビニングよりも良好な性能を提供するが、デバイスの電力消費の増加及び動作温度の上昇を犠牲にする。対照的に、場合によっては、2レベルビニングは、一部の性能を犠牲にして電力消費の低減をサポートする。
【0011】
デバイス条件に従ってビニングモードを適応させるために、いくつかの実施形態では、GPUは、レンダリングモードのランタイム選択をサポートする選択的な2レベルビニングアーキテクチャを採用する。例えば、いくつかの実施形態では、選択的な2レベルビニングアーキテクチャを実装するデバイスは、2レベルビニングモードと、PBBのみが実行されるPBBレンダリングモード等のデフォルトレンダリングモードと、のうち何れかのランタイム選択を実装する。ビニングモードの選択は、熱特性、電力特性(例えば、バッテリ寿命)等のようないくつかの性能基準の何れかに基づく。例えば、いくつかの実施形態では、ユーザモードドライバ(user-mode driver、UMD)又はカーネルモードドライバ(kernel-mode driver、KMD)等のドライバは、センサデータ及び性能カウンタデータ等の性能データを受信し、性能データに基づいてビニングモードを選択する。
【0012】
追加的に、いくつかの実施形態では、GPUは、所定のワークロードのためのビニングモードを、そのワークロードの優先度に基づいて選択するように構成されている。したがって、GPUは、GPU又はシステムの性能特性に基づいて、2レベルビニングモード又は非2レベルビニングモードの何れかで高優先度ワークロードを実行しながら、2レベルビニングモードで全ての適用可能な低優先度又は中優先度ワークロードを実行することができる。全ての適用可能な低優先度及び中優先度ワークロードを2レベルビニングモードで実行することによって(すなわち、性能ヒューリスティックスに基づかない)、GPUのプリエンプションの粒度が改善される。例えば、アプリケーションプログラミングインターフェース(Application Programming Interface、API)は、通常、ワークロードをフルドローコールよりも細かいものに分割する手段を提供しない。対照的に、本明細書で説明するように、2レベルビニングは、レンダリングされているフレームを複数の粗いビンに分割し、ここで、各粗いビンは別々にレンダリングされ、それによって、フレームの複数の粗いビンにまたがるドローコールをより小さいチャンクに分解する。高優先度ワークロードが代わりに実行され得るように、GPUが、GPUによって実行されている低優先度又は中優先度ワークロードをプリエンプトすることが時折必要であるか又は望ましい。本明細書では「ドローコールプリエンプション」と時折呼ばれる、より高い優先度のワークロードを優先して、より低い優先度のワークロードの実行をこのようにプリエンプトすることで、より高い時間的重要性のワークロードの実行が、より低い時間的重要性のワークロードの実行によって不必要に遅延されないことを保証するのに役立つ。
【0013】
本明細書で説明する技術は、性能ヒューリスティックス及びワークロード優先度の一方又は両方に基づいて、現在の2レベルビニングモード又はPBBレンダリングモード等の非2レベルビニングモードに従って、ワークロードを選択的に実行することを伴う。
【0014】
図1は、並列プロセッサ、特にGPU102を含み、画像データをレンダリングするレンダリングモードのランタイム選択を可能にする2レベルビニングアーキテクチャを実装する、デバイス100の例を示している。GPU102に加えて、デバイス100は、CPU104、メモリコントローラ105、システムメモリ106、センサ108、及び、バッテリ111を含む。いくつかの実施形態では、GPU102、CPU104、メモリコントローラ105、及び、センサ108は、バス126を介して互いに通信可能に結合されている。メモリコントローラ105は、システムメモリ106にアクセスするために、GPU102、CPU104及びセンサ108によって提供されるメモリアクセス要求を管理する。
【0015】
グラフィックス処理動作中、システムメモリ106におけるアプリケーションは、デバイス100の電子ディスプレイ(図示せず)における画像フレームにおける後続の表示のために、システムメモリ106内の定義されたロケーションにおいて画像データをレンダリングするようにGPU102に命令するためのコマンドを生成する。アプリケーションによって出力されたコマンドは、CPU104において実行されるUMD110によって1つ以上のコマンドバッファ114に記録される。所定のコマンドバッファ114は、1つ以上のワークロードに対応するコマンドを含み、各ワークロードは、2レベルビニングモード、非2レベルビニングモードで実行されるように構成されているか、又は、何れかのモードで実行可能である。UMD110によるコマンドバッファ114へのコマンドの記録が完了すると、KMD112は、コマンドバッファ114をGPU102にサブミットし、そこでコマンドバッファ114のコマンドは、GPU102の1つ以上のリングバッファ120のうち何れかにロードされる。ここで、リングバッファ120等のリングバッファは、キューとして時折表わされる。一例では、リングバッファ120のうち第1のリングバッファは、高優先度キューに対応し、GPU102による実行のための高優先度ワークロードを受け取り、一方、リングバッファ120のうち第2のリングバッファは、低/中優先度キューに対応し、GPU102による実行のための低優先度及び中優先度ワークロードを受け取る。GPU102の1つ以上のコマンドプロセッサ122は、リングバッファ120から特定のコマンドバッファ114に対応するコマンドを取り出し、例えば、システムメモリ106から画像データを取り出し、取り出された画像データをレンダリングするようにシェーダ、計算ユニット及び他のグラフィックス処理回路(図示せず)に命令することによって、それらのコマンドを実行する。本明細書では、「ワークロード」は、GPU102等のGPUによって処理されるコマンド又はコマンドのグループを指す。様々な実施形態によれば、ワークロードは、典型的には、レンダリングターゲット、深度ステンシルターゲット又はバッファ(例えば、順序付けられていないアクセスビュー(unordered access views、UAV))の所定のセットに対するワークのセット(例えば、グラフィックス描画)を含む。
図1の例では、GPU102は、コマンドバッファ114のワークロードを実行する場合、2レベルビニングモードと、PBBモード(本明細書では「単一レベルPBBモード」又は「単一レベルPBB専用ビニングモード」と時折呼ばれる)等の単一レベルビニングモードと、の間で選択する。いくつかの実施形態では、GPU102は、システムメモリ106に記憶された1つ以上のステータスビットに基づいて、又は、GPUメモリ124に記憶された1つ以上のパッチ有効ビット(後述する)に基づいて、コマンドバッファ114のワークロードを実行するために何れのビニングモードを使用すべきかを選択する。いくつかの実施形態では、GPU102は、GPU102にステータスビット又はパッチ有効ビットをチェックさせて、コマンドバッファ114の対応するワークロードの実行のために何れのビニングモードを使用すべきかを判定させるコマンドバッファ114の対応するロジックを実行する場合に、ステータスビット又はパッチ有効ビットに基づいてビニングモードを選択する。いくつかの実施形態では、CPU104は、デバイス100及びGPU102の何れか又は両方の識別された性能特性(本明細書では、「性能データ」又は「性能ヒューリスティックス」と時折呼ばれる)に基づいて、ステータスビット及びパッチ有効ビットの値を選択的に設定する。いくつかの実施形態では、コマンドバッファ114に記憶された各ワークロードは、高優先度、中優先度又は低優先度であるように示される(例えば、ワークロードに含まれる、ワークロードと共に記憶される、又は、ワークロードの機能に基づいてCPU104によって生成されるもの等の優先度インジケータによって)。いくつかの実施形態では、CPU104は、識別された性能特性に基づいて、2レベルビニングモード又は非2レベルビニングモードの何れかで実行される高優先度ワークロードのためのステータスビット及びパッチ有効ビットの値を選択的に設定し、CPU104は、2レベルビニングモードで実行される全ての適用可能な低優先度及び中優先度ワークロードを構成する(例えば、低優先度及び中優先度ワークロードのプリエンプション粒度を改善するために)。いくつかのワークロードは、低又は中優先度ワークロードとして識別されたとしても、2レベルビニングモードでの実行に適用可能ではないことに留意されたい。例えば、所定のワークロードが、テッセレートされたドローコール、シェーダにおけるアトミック、シェーダにおけるバッファのリード-モディファイ-ライト(read-modify-write)、ストリームアウト等の使用等のように、2レベルビニングと互換性のないAPI機能を使用する場合、ワークロードは、2レベルビニングモードでの実行に適用可能ではない。いくつかの実施形態では、高優先度ワークロードは、低優先度及び中優先度ワークロードとは異なるキューに記憶される。
【0016】
いくつかの実施形態では、所定のコマンドバッファ114は、コマンドバッファ114内に記憶されたいくつかのワークロードが、1レベルビニングモードで実行され、同じコマンドバッファ114内の他のワークロードが、2レベルビニングモードで実行されるように構成されている。例えば、いくつかのワークロードは、1レベルビニングを使用してのみ実行可能であり、したがって、それらが低優先度若しくは中優先度ワークロードであっても、又は、それらが高優先度ワークロードであり、2レベルビニング条件が満たされ、2レベルビニングモードが有効化されていても、常に1レベルビニングモードで実行されるように構成されている。いくつかの実施形態では、ワークロード(例えば、高優先度ワークロード)は、1レベルビニングモード及び2レベルビニングモードの何れかで実行可能となるように、UMD110によってコマンドバッファ114に記録され、これらのワークロードが実行されるビニングモードは、その後、ワークロードが実行される場合にGPUによって選択される。
【0017】
概して、オペレーティングシステム内のドライバは、ユーザモード、カーネルモード、又は、その両方で動作する。UMD110等のUMDは、保護されたサブシステムコードを含む他のアプリケーションコードが実行される非特権プロセッサモードで動作する。UMDは、システムサービスを呼び出すAPIを呼び出すことによる以外、システムデータ又はハードウェアへのアクセスを得ることができない。KMD112等のKMDは、オペレーティングシステムの一部として動作し、1つ以上の保護されたサブシステムをサポートする。UMD及びKMDは、異なる構造、異なるエントリポイント、及び、異なるシステムインターフェースを有する。KMDは、一定の保護された動作を実行することができ、UMDがアクセスすることができないシステム構造にアクセスすることができる。一例では、アプリケーションによって生成されたプリミティブに対応するドローコールコマンドは、UMD110によって1つ以上のコマンドバッファ114に記録され、KMD112は、プリミティブの後続のレンダリングのためにドローコールコマンドをGPU102にサブミットする。コマンドプロセッサ122は、2レベルビニングモード、又は、PBBレンダリングモード等の非2レベルビニングモード等の特定のレンダリングモードに従って画像データがレンダリングされるようにする。いくつかの実施形態では、コマンドプロセッサ122は、2レベルビニングモードで低優先度及び中優先度ワークロードを実行し、性能ヒューリスティックスに基づいて高優先度ワークロードを実行する。いくつかの実施形態では、コマンドプロセッサ122は、2レベルビニングモードが有効化されているか又は無効化されているかを判定することによって、特定の高優先度ワークロードに関連付けられた画像データをレンダリングするために何れのレンダリングモードを使用するかを選択する。いくつかの実施形態では、コマンドプロセッサ122は、GPUメモリ124又はシステムメモリ106に記憶された1つ以上のステータスビットをチェックすることによって、2レベルビニングモードが有効化されているか又は無効化されているかを判定する。
【0018】
いくつかの実施形態では、CPU104は、システムメモリ106に記憶された性能カウンタ116から受信された性能カウンタデータ、センサ108によってシステムメモリ106に記憶されたセンサデータ118、又は、その両方を含む性能データに基づいて、2レベルビニングモードを有効化又は無効化する(例えば、高優先度ワークロードに対して)。いくつかの実施形態では、CPU104のUMD110又はKMD112は、性能データを受信し、性能データを処理して、2レベルビニングモードを有効化するか無効化するか(例えば、高優先度ワークロードに対して)を判定する。
【0019】
いくつかの実施形態では、センサ108によって生成されるセンサデータ118は、1つ以上の温度測定値、電圧測定値、電流測定値、瞬時電力測定値、ピーク電力測定値、又は、他の適用可能なセンサデータを含む。いくつかの実施形態では、センサ108は、1つ以上の温度センサ、電流センサ、電圧センサ又は電力センサを含む。
【0020】
いくつかの実施形態では、性能カウンタ116は、バッテリ111、CPU104、リングバッファ120、レベル1(L1)キャッシュ、レベル2(L2)キャッシュ又はGPU102のシェーダ等のようなデバイスの様々なモジュールにおけるアクティビティを追跡する。いくつかの実施形態では、性能カウンタデータは、キャッシュアクセス、キャッシュヒット率、キャッシュミス率、メモリアクセス、GPU102の利用率、CPU104の利用率、GPU102に供給される電流、CPU104に供給される電流、GPU102における電圧、CPU104における電圧、GPU102の周波数、及び/又は、CPU104の周波数のうち1つ以上のそれぞれの数量を含む。
【0021】
いくつかの実施形態では、性能データは、デバイス100の平均温度、デバイス100の平均温度の変化率(rate of change、RoC)、所定の期間にわたるデバイス100のピーク瞬間電力消費、所定の期間にわたるデバイス100の平均電力消費、デバイス100の平均電力消費のRoC、又は、バッテリ111の充電状態(state of charge、SoC)(すなわち、バッテリ111の充電容量のパーセンテージとして表されるバッテリ111の残存充電)等のように、センサデータ118又は性能カウンタ116によって生成される性能カウンタデータから導出される1つ以上のパラメータを含む。本明細書では、様々な実施形態によれば、デバイス100の「平均温度」は、デバイスの様々なロケーション(例えば、CPU104、GPU102、バッテリ111、又は、これらの組み合わせ)において測定される瞬間温度の平均値、中央値若しくは最頻値、定義された期間にわたってデバイスの様々なロケーションにおいて測定される温度の平均値、中央値若しくは最頻値、又は、定義された期間にわたって性能カウンタ116によって生成される性能カウンタデータに基づいた推定電力消費から導出されたデバイス100の推定温度の平均値、中央値若しくは最頻値を指す。本明細書では、デバイス100の「平均電力消費」は、様々な実施形態によれば、定義された期間にわたってバッテリ111において測定される瞬時電力消費の平均値、中央値若しくは最頻値、又は、定義された期間にわたって性能カウンタ116によって生成される性能カウンタデータに基づいた推定瞬時電力消費の平均値、中央値若しくは最頻値を指す。
【0022】
UMD110又はKMD112は、性能データを監視して、本明細書で「2レベルビニング条件」と時折呼ばれる、2レベルビニングモードを有効化する(例えば、高優先度ワークロードに対して)ための1つ以上の事前定義された条件が発生したかどうかを判定する。いくつかの実施形態では、2レベルビニングモードを有効化又は無効化することは、UMD110又はKMD112が、2レベルビニングモードが有効化されているどうか(例えば、高優先度ワークロードに対して)を示す、システムメモリ106又はGPU102内の1つ以上のステータスビットの値を設定することを伴う。いくつかの実施形態では、2レベルビニング条件は、事前定義された温度閾値を超えるデバイスの平均温度、事前定義されたRoC閾値を超えるデバイスの平均温度のRoC、事前定義された温度閾値を超えるデバイスの定義されたロケーションにおける局所温度、事前定義されたRoC閾値を超えるそのような局所温度のRoC、事前定義された閾値を超えるデバイスのピーク瞬間電力消費、事前定義された閾値を超えるデバイスの平均電力消費、事前定義された閾値を超えるデバイスの平均電力消費のRoC、事前定義されたSoC閾値を下回るバッテリSoC、又は、これらの条件の組み合わせのうちの1つ以上を含む。いくつかの実施形態では、2レベルビニング条件が満たされ、2レベルビニングモードがUMD110又はKMD112によって有効化された後に、性能データの変化に基づいてその2レベルビニング条件がもはや満たされないとその後判定された場合、デバイスは、2レベルビニングモードを無効化する(例えば、高優先度ワークロードに対して)と理解されたい。しかしながら、いくつかの実施形態では、本明細書で「オーバーライド条件」と時折呼ばれる他の検出可能な条件が、2レベルビニング条件の検出をオーバーライドする。例えば、デバイス100がUMD110又はKMD112によって2レベルビニング条件を満たすと判定されたが、プラグインされているオーバーライド条件を満たすと判定された場合(例えば、バッテリが「充電中」状態にあると判定された場合)、2レベルビニングモードが無効化される(例えば、高優先度ワークロードに対して)。いくつかの実施形態では、デバイス100の平均電力消費が閾値を下回ったと判定すること、又は、GPU102若しくはCPU104がもはや熱的にスロットリングされていないと判定すること(例えば、GPU102若しくはCPU104のクロック周波数が閾値を上回ったことに基づいて判定可能)等のような、代替的又は追加的なオーバーライド条件が設定される。
【0023】
いくつかの実施形態では、ワークロードをコマンドバッファ114に記録する場合に、UMD110は、システムメモリ106に記憶された対応するステータスビットに基づいて2レベルビニングモードが有効化されているか又は無効化されているかに応じて、コマンドバッファ114に異なるように所定のワークロード(例えば、高優先度ワークロード)を記録する。いくつかの実施形態では、2レベルビニングモードを有効化すると、UMD110は、少なくとも2レベルビニングモードが再び無効化されるまで、2レベルビニングモードに従って実行可能となるように、全ての後続の高優先度ワークロードをコマンドバッファ114に記録する。いくつかの実施形態では、2レベルビニングモードを無効化すると、UMD110は、非2レベル、又は、単一レベルPBBモード等の単一レベルビニングモードに従って実行可能となるように、全ての後続の高優先度ワークロードをコマンドバッファ114内に記録する。いくつかの実施形態では、UMD110又はKMD112は、高優先度ワークロードがUMD110によって記録される場合に2レベルビニングモードが有効化されているかどうかに基づいて、及び、いくつかの事例では、所定の高優先度ワークロードが2レベルビニングモードで実行され得るかどうかに基づいて、所定のコマンドバッファ114内に記憶された各高優先度ワークロードについてビニングモードを個々に判定する。
【0024】
例えば、いくつかの実施形態では、UMD110は、デフォルトでは1レベルビニングモードでコマンドバッファ114に高優先度ワークロードを記録するように構成され、2レベルビニング条件が満たされた場合に、GPU102へのサブミットの前に2レベルビニングモードで実行されるようにコマンドバッファ114の1つ以上の保留中の高優先度ワークロードを変更するように構成されている。他の実施形態では、UMD110は、デフォルトでは2レベルビニングモードでコマンドバッファ114に全ての適用可能なワークロードを記録するように構成され、2レベルビニング条件が満たされない場合に、GPU102へのそれらのサブミットの前に1レベルビニングモードで実行されるようにコマンドバッファ114内の1つ以上の保留中の高優先度ワークロードを変更するように構成されている。
【0025】
場合によっては、2レベルビニングモードの状態(すなわち、有効化/無効化)は、UMD110が、そのような事例では「保留中のワークロード」と呼ばれる、コマンドバッファ114内の1つ以上の高優先度ワークロードを既に記録した、又は、記録し始めた後であるが、保留中のワークロードがGPU102によって実行される前に変化する。いくつかの実施形態では、そのような保留中の高優先度ワークロードは、2レベルビニングモードが有効化されているかどうかに応じて、2レベルビニングモード又は非2レベルビニングモードに従って実行されるようにコマンドバッファパッチ当てを介して変更される。本明細書では、コマンドバッファパッチ当ては、CPU104又はGPU102によって実行されるドライバ又は他のモジュールによるコマンドバッファ内のデータ(例えば、ワークロード、コマンド)の変更を指し、CPU104又はGPU102の何れかにおいて実行される。
【0026】
一例では、2レベルビニングモードが有効化された間に記録されたコマンドバッファ判定114内の保留中の高優先度ワークロードは、保留中の高優先度ワークロードの記録の開始以来、2レベルビニングモードが無効化されたというCPU104又はGPU102による判定に応じて、非2レベルビニングモードに従って実行するようにコマンドバッファパッチ当てを介してCPU104又はGPU102によって変更される。別の例として、2レベルビニングモードが無効化された間に記録されたコマンドバッファ114内の保留中の高優先度ワークロードは、保留中の高優先度ワークロードの記録の開始以来、2レベルビニングモードが有効化されたというCPU104又はGPU102による判定に応じて、2レベルビニングモードに従って実行するようにコマンドバッファパッチ当てを介してCPU104又はGPU102によって変更される。概して、GPU102が所定のワークロードの少なくとも一部を実行することを開始すると、そのワークロードにパッチを当ててそのビニングモードを変更することができない。
【0027】
コマンドバッファパッチ当てがCPU104において実行されるいくつかの実施形態では、UMD110又はKMD112は、コマンドバッファ記録プロセスの終わり近くにコマンドバッファパッチ当てを実行する。いくつかの実施形態では、コマンドバッファパッチ当てがCPU104において実行される場合、UMDは、コマンドバッファ114内の保留中の高優先度ワークロードが同時に2回以上実行されるように構成されている場合(ワークロードをコマンドバッファ114に記録する時点で既知である事前定義された条件)を除き、コマンドバッファ114からGPU102にパッチ当てされた高優先度ワークロードをサブミットする直前にコマンドバッファパッチ当てを実行する。
【0028】
CPU側コマンドバッファパッチ当てを伴ういくつかの実施形態では、UMD110は、各高優先度ワークロードに対してメタデータを記憶する。いくつかの実施形態では、各高優先度ワークロードに対して記憶されるメタデータは、1つ以上のトークン及び1つ以上のオフセットを含む。各オフセットは、2レベルビニングモードが有効化される場合に変更される必要があるコマンドバッファ114内のロケーションを定義する。各トークンは、2レベルビニングモードが有効化される場合に、対応するオフセットにおいて定義されたロケーションにおけるコマンドバッファ114内に記憶されたコードがどのように変更されるべきかを定義する。一例では、メタデータのトークンは、UMD110に、プリミティブの可視性を記述する、コマンドバッファ114内のコードを変更させる。いくつかの実施形態では、コマンドバッファパッチ当ては、2レベルビニングモードが有効化されている場合にのみ必要とされ、UMD110は、記録プロセスの終了時に、又は、コマンドバッファ114に記憶されたワークロードをGPU102にサブミットする直前に、コマンドバッファ114を2レベルビニングモードで実行可能にするようにパッチを当てるかどうかの判定を行う前に、そのような実施形態では非2レベルビニングモードで実行するために、各高優先度ワークロードをコマンドバッファ114に最初に(すなわち、デフォルトで)記録する。上述したように、いくつかの実施形態では、UMD110は、代替的には、少なくとも2レベルビニングモードで実行することができるワークロードに対して、2レベルビニングモードで実行するように各ワークロードをコマンドバッファ判定114に記録し、次いで、2レベルビニングモードが有効化されているかどうか、及び、いくつかの事例では、事前定義されたオーバーライド条件が満たされているかどうかに基づいて、非2レベルビニングモードで代わりに実行するようにそれらのワークロードのうち1つ以上の高優先度ワークロードを変更するかどうかする。
【0029】
いくつかの実施形態では、コマンドバッファパッチ当ては、本明細書で「パッチ有効値」と呼ばれる、値又は値のグループに基づいてGPU102において実行され、値又は値のグループは、GPUメモリ124又はシステムメモリ106等のような、GPU102とCPU104との間で共有される統合メモリに記憶される。いくつかの実施形態では、各パッチ有効値は、それぞれの保留中のコマンドバッファ114内の高優先度ワークロードに対応する単一のブール値である。いくつかの実施形態では、KMD112は、システムメモリ106に記憶された対応するステータスビットに基づいて、又は、性能データの分析に基づいて、2レベルビニングモードが有効化されているかどうかを判定し、次いで、KMD112は、GPU102によるコマンドバッファ114の実行の前に、2レベルビニングモードが有効化されているかどうかに従って、パッチ有効値を設定させる。GPU側パッチ当てが実行されるいくつかの実施形態では、UMD110は、2レベルビニングモード及び非2レベルビニングモードの両方で実行可能となるように高優先度ワークロードをコマンドバッファ114に記録しなければならず、コマンドプロセッサ122は、対応するパッチ有効値に基づいて、何れのモードで高優先度ワークロードを実行するかを判定する。
【0030】
いくつかの実施形態では、パッチ有効値は、代わりに、記録中にUMD110によってコマンドバッファ114に記憶されるコマンドバッファベースのパッチ有効値である。一例では、GPU102は、所定の高優先度ワークロードを実行する場合、そのワークロードについて1つ以上のパッチ有効値をチェックし、パッチ有効値は、コマンドバッファ114内に高優先度ワークロードと共に記憶されている。そのような実施形態では、GPU102は、GPU102によって実行される場合に、コマンドバッファベースのパッチ有効値に基づいて、2レベルビニングモード又は非2レベルビニングモードで実行可能となるようにコマンドバッファ114内に記憶された1つ以上の高優先度ワークロードを変更する。一例では、GPU102のコマンドプロセッサ又はGPU102のシェーダコアは、GPU側パッチ当てが必要とされるかどうかの判定に基づいて、2レベルビニングモード又は非2レベルビニングモードの何れかで実行するように高優先度ワークロードを変更する。いくつかの実施形態では、GPU側パッチ当ての必要性は、上述したように、GPUメモリ124に記憶されたパッチ有効ビット又はシステムメモリ106に記憶されたステータスビットに基づいて判定される。
【0031】
図2は、性能カウンタ又はセンサによって生成された性能データに基づいて、第1のビニングモード又は第2のビニングモードで、1つ以上のコマンドバッファ内のワークロード(例えば、高優先度ワークロード)を選択的に実行する方法200の例示的なプロセスフローを示す。いくつかの実施形態では、第1のビニングモードは2レベルビニングモードであり、第2のビニングモードはPBBモード等の単一レベルビニングモードである。方法200は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して記載される。
【0032】
ブロック202において、UMD110又はKMD112(例えば、CPU104によって実行されている)は、性能データを取り出すか又は他の方法で受信する。いくつかの実施形態では、性能データは、センサ108によって生成されるセンサデータ118を含む。いくつかの実施形態では、データは、性能カウンタ116によって生成される性能カウンタデータを含む。いくつかの実施形態では、性能データは、性能カウンタデータ及びセンサデータ118の両方を含む。いくつかの実施形態では、センサ108によって生成されるセンサデータ118は、1つ以上の温度測定値、電圧測定値、電流測定値、瞬時電力測定値、ピーク電力測定値、又は、他の適用可能なセンサデータを含む。いくつかの実施形態では、性能カウンタデータは、キャッシュアクセス、キャッシュヒット率、キャッシュミス率、メモリアクセス、GPU102の利用率、CPU104の利用率、GPU102に供給される電流、CPU104に供給される電流、GPU102における電圧、CPU104における電圧、GPU102の周波数、及び/又は、CPU104の周波数のうち1つ以上のそれぞれの数量を含み、各々は、バッテリ111、CPU104、リングバッファ120、レベル1(L1)キャッシュ、レベル2(L2)キャッシュ又はGPU102のシェーダ等のように、デバイス100の1つ以上のモジュールにおいて発生するアクティビティに対応する。いくつかの実施形態では、性能データは、デバイスの平均温度、デバイスの平均温度の変化率(RoC)、所定の期間中のデバイスのピーク瞬間電力消費、所定の期間にわたるデバイスの平均電力消費、デバイスの平均電力消費のRoC、又は、バッテリの充電状態(SoC)(すなわち、いくつかの実施形態ではバッテリの充電容量のパーセンテージとして表されるバッテリの残存充電)等のように、センサデータ118又は性能カウンタ116によって生成される性能カウンタデータから導出される1つ以上のパラメータを含む。いくつかの実施形態では、所定のワークロードについての性能特性は、ワークロードが2レベルビニングモードでの実行に適用可能であるかどうかを示す、そのワークロードについてのワークロード特性を含む。例えば、そのようなワークロード特性は、テッセレートされたドローコール、シェーダにおけるアトミック、シェーダにおけるバッファのリード-モディファイ-ライト、又は、ワークロードにおけるストリームアウトの使用を含む。いくつかの実施形態では、導出されるパラメータは、UMD110又はKMD112によって計算される。
【0033】
ブロック204において、UMD110又はKMD112は、性能データに基づいてビニング条件(例えば、2レベルビニング条件)が満たされているかどうかを判定する。例えば、いくつかの実施形態では、ビニング条件は、事前定義された温度閾値を超えるデバイスの平均温度、事前定義されたRoC閾値を超えるデバイスの平均温度のRoC、事前定義された温度閾値を超えるデバイスの定義されたロケーションにおける局所温度、事前定義されたRoC閾値を超えるそのような局所温度のRoC、事前定義された閾値を超えるデバイスのピーク瞬間電力消費、事前定義された閾値を超えるデバイスの平均電力消費、事前定義された閾値を超えるデバイスの平均電力消費のRoC、事前定義されたSoC閾値を下回るバッテリSoC、又は、これらの条件の組み合わせのうち1つ以上を含む1つ以上の2レベルビニング条件を含む。ビニング条件が満たされているとUMD110又はKMD112が判定する場合、方法200は、ブロック206に進む。そうではなく、ビニング条件が満たされていないとUMD110又はKMD112が判定する場合、方法200は、ブロック214に進む。
【0034】
ブロック206において、UMD110又はKMD112は、性能データに基づいてオーバーライド条件が満たされているかどうかを判定する。いくつかの実施形態では、オーバーライド条件は、デバイス100が、バッテリ111が充電されている充電条件に入ること、デバイス100の平均温度が所定の閾値を下回ること、デバイス100の平均温度のRoCが所定の閾値を下回ること、又は、これらの組み合わせのうち1つ以上を含む。いくつかの実施形態では、1つ以上のオーバーライド条件は、ワークロードが2レベルビニングモードでの実行に適用可能であるかどうかを示す所定のワークロードについてのワークロード特性に基づいて判定される。一例では、オーバーライド条件は、ワークロード特性に基づいて、所定のワークロードが、テッセレートされたドローコール、シェーダにおけるアトミック、シェーダにおけるバッファのリード-モディファイ-ライト、又は、ワークロードにおけるストリームアウトのうち1つ以上の使用を含むと判定したことに応じてトリガされる。オーバーライド条件が満たされていないとUMD110又はKMD112が判定する場合、方法200は、ブロック208に進む。そうではなく、オーバーライド条件が満たされているとUMD110又はKMD112が判定する場合、方法200は、ブロック214に進む。
【0035】
ブロック208において、UMD110又はKMD112は、コマンドバッファ114に記憶される新たに生成された高優先度ワークロードのための第1のビニングモードを有効化する。いくつかの実施形態では、第1のビニングモードは2レベルビニングモードである。例えば、第1のビニングモードを有効化するために、UMD110又はKMD112は、システムメモリ106内のステータスビット値を設定して、第1のビニングモードが高優先度ワークロードに対して有効化されていることを示す。いくつかの実施形態では、コマンドバッファ114に後続の高優先度ワークロードを記録する場合、UMD110は、ステータスビット値をチェックし、高優先度ワークロードが第1のビニングモードで実行するように構成されるべきであると判定する。いくつかの実施形態では、第1のビニングモードは、デフォルトでは低優先度又は中優先度のワークロードに対して有効化される(例えば、自動的に有効化されるが、ビニング条件が満たされ、オーバーライド条件が満たされていないことに応答してではない)。
【0036】
ブロック210において、CPU104又はGPU102は、コマンドバッファ114内の保留中の高優先度ワークロードにパッチを当てて、第1のビニングモードでそれらの高優先度ワークロードの実行を有効化する。いくつかの実施形態では、UMD110は、コマンドバッファ114に記録されている場合に、CPU104を介してそのような高優先度ワークロードにパッチを当て、その結果、パッチ当てされたワークロードは、記録されると第1のビニングモードで実行されるように構成されている。いくつかの実施形態では、UMD110は、保留中の高優先度ワークロードがコマンドバッファ114に既に記録された後、且つ、保留中の高優先度ワークロードがコマンドバッファ114からGPU102に提供される前(例えば、直前まで)に、第1のビニングモードで実行するために、CPU104を介して保留中のワークロードにパッチを当てる。いくつかの実施形態では、GPU102は、GPUメモリ124に記憶された1つ以上のパッチ有効値に基づいて、保留中の高優先度ワークロードの実行前に(例えば、直前に)第1のビニングモードで実行するために、保留中の高優先度ワークロードにパッチを当てる。
【0037】
ブロック212において、高優先度ワークロードは、GPU102において第1のビニングモードで実行される(例えば、1つ以上のビニング条件が満たされ、オーバーライド条件が満たされない限り)。いくつかの実施形態では、そのような高い優先度のワークロードの実行は、より低い優先度のワークロードの実行をプリエンプトする。
【0038】
ブロック214において、UMD110又はKMD112は、コマンドバッファ114に記憶される新たに生成された高優先度ワークロードに対して第1のビニングモードを無効化する。例えば、第1のビニングモードを無効化するために、UMD110又はKMD112は、システムメモリ106内のステータスビット値を設定して、第1のビニングモードが高優先度ワークロードに対して無効化されていることを示す。いくつかの実施形態では、ブロック204においてビニング条件が満たされないことを検出することに応じて、コマンドバッファ114に高優先度ワークロードを記録する場合、UMD110は、ステータスビット値をチェックし、適用可能な場合、高優先度ワークロードが第2のビニングモードで実行するように構成されるべきであることを判定する。いくつかの実施形態では、第2のビニングモードは、PBBモード等の単一レベルビニングモードである。いくつかの実施形態では、システムは、低優先度及び中優先度ワークロードに対して、第1のビニングモードを有効化されたままにさせる。
【0039】
ブロック216において、UMD110又はKMD112は、コマンドバッファ114に既に記憶されている保留中の高優先度ワークロードに対して第1のビニングモードを無効化する。UMD110が、デフォルトでは第2のビニングモードで実行されるようにコマンドバッファ114に高優先度ワークロードを記録する実施形態では、高優先度ワークロードに対して第1のビニングモードを無効化するために、ブロック214においてステータスビットを変更すること以外の更なるアクションが必要とされないので、ブロック216はスキップされる。GPU側パッチ当てが実行されるいくつかの実施形態では、KMD112は、GPUメモリ124内の1つ以上のパッチ有効値を設定することによって、コマンドバッファ114内の保留中の高優先度ワークロードに対して第1のビニングモードを無効化して、第1のビニングモードが無効化されたことを示す。
【0040】
ブロック218において、高優先度ワークロードは、GPU102において第2のビニングモードで実行される(例えば、ビニング条件が満たされていないか、又は、少なくとも1つのオーバーライド条件が満たされているため)。いくつかの実施形態では、そのような高い優先度のワークロードの実行は、より低い優先度のワークロードの実行をプリエンプトする。
【0041】
図3は、2レベルビニングモード又は非2レベルビニングモードで実行可能となるように、CPUにおいてコマンドバッファに選択的にパッチを当てる方法300の例示的なプロセスフローを示す。方法300は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して記載される。いくつかの実施形態では、方法300の1つ以上のステップは、
図2のブロック210と併せて実行される。
【0042】
ブロック302において、UMD110は、高優先度ワークロードをコマンドバッファ114内に記録する場合に、所定のコマンドバッファ114の各高優先度ワークロードに対してメタデータ(すなわち、「ワークロードごとのメタデータ」)を収集する。いくつかの実施形態では、各高優先度ワークロードに対して記憶されるメタデータは、1つ以上のトークン及び1つ以上のオフセットを含む。各オフセットは、コマンドバッファ114の対応する高優先度ワークロードを実行するために2レベルビニングモードが有効化される場合に変更される必要があるコマンドバッファ114内のロケーションを定義する。各トークンは、2レベルビニングモードが有効化される場合に、対応するオフセットにおいて定義されたロケーションにおけるコマンドバッファ114のコードがどのように変更されるべきかを定義する。一例では、メタデータのトークンは、UMD110に、2レベルビニングモードが有効化される場合に所定の高優先度ワークロードのプリミティブの可視性を記述するコードを変更させ、コードは、高優先度ワークロード自体に含まれるか、又は、高優先度ワークロードに関連付けられたコマンドバッファ114に記憶される。
【0043】
ブロック304において、UMD110は、2レベルビニングモードが、コマンドバッファ114に記録されている所定の高優先度ワークロードのための記録プロセスの終了時又はその付近で有効化されているかどうかを判定する。いくつかの実施形態では、UMD110は、システムメモリ106に記憶された1つ以上のステータスビットの値をチェックして、2レベルビニングモードが有効化されているかどうかを判定する。2レベルビニングモードが有効化されていると判定された場合、方法は、ブロック310に進む。2レベルビニングモードが無効化されていると判定された場合、方法300は、ブロック306に進む。
【0044】
ブロック306において、UMD110は、高優先度ワークロードをコマンドバッファ114に記録した後、且つ、コマンドバッファ114からGPU102に高優先度ワークロードをサブミットする前(例えば、直前)に、2レベルビニングモードが有効化されているかどうかを判定する。いくつかの実施形態では、UMD110は、システムメモリ106に記憶された1つ以上のステータスビットの値をチェックして、2レベルビニングモードが有効化されているかどうかを判定する。2レベルビニングモードが有効化されていると判定された場合、方法は、ブロック312に進む。2レベルビニングモードが無効化されていると判定された場合、方法300は、ブロック308に進む。
【0045】
ブロック308において、スケジューラ(例えば、KMD112を介してCPU104を介して実装されるか、又は、ファームウェアを介してGPU102を介して実装される)が、コマンドバッファ114からGPU102に高優先度ワークロードをサブミットする。
【0046】
ブロック310において、UMD110は、高優先度ワークロードがコマンドバッファ114に記録されている間(例えば、記録プロセスの終わり付近で)、ワークロードごとのメタデータに基づいて、2レベルビニングモードで実行可能となるように高優先度ワークロードを構成するためにコマンドバッファ114にパッチを当てる。概して、UMD110によってコマンドバッファ114にパッチが当てられる方法は、デバイス100のハードウェア実装に依存する。
【0047】
一例では、2レベルビニングは、本質的に、何れのプリミティブが何れのビンにおいて可視であるかを判定するためのベースとして、バッファ(すなわち、「可視性情報バッファ」)内の可視性情報を使用する。本例では、UMD110が、1レベルビニングを使用して実行されるように高優先度ワークロードをコマンドバッファ114に記録し、UMDは、GPUがそのような可視性情報バッファをバインドするためのコマンドを含まないが、2レベルビニングを使用して実行されるように高優先度ワークロードがUMD110によって記録された場合、高優先度ワークロードは、そのようなコマンドを含む必要がある。したがって、UMD110は、コマンドバッファ114内のロケーションを示すトークン及びオフセットを含むメタデータを生成し、可視性情報バッファをバインドするコマンドは、2レベルビニングモードで実行される場合、高優先度ワークロードに対して含まれる必要があるだろう。このようにして、コマンドバッファ114からGPU102に高優先度ワークロードをサブミットする前に2レベルビニングモードが有効化されている場合に、UMD110又はKMD112は、高優先度ワークロードにパッチを当てて、メタデータ中で示されたロケーションにおいて可視性情報バッファをバインドするコマンドを含める。
【0048】
別の例では、GPU102は、概して、いくつのビンが存在するか、それらのビンのサイズ、及び/又は、2レベルビニングモードで実行する場合にビンが処理されるべき順序を示すビン情報を受信する必要がある。本例では、UMD110は、ビンの数、各ビンのサイズ、及び、ビンが処理されるべき順序を示すビニング情報を含む、コマンドバッファ114に記録される各高優先度ワークロードに対してメタデータを生成し、ビニング情報は、2レベルビニングモードでその高優先度ワークロードを実行するために必要とされる。このようにして、高優先度ワークロードをコマンドバッファ114にGPU102にサブミットする前に2レベルビニングモードが有効化されている場合に、UMD110又はKMD112は、メタデータ中で示されたビニング情報を含むようにコマンドバッファ114の高優先度ワークロードにパッチを当てる。
【0049】
ブロック312において、UMDは、高優先度ワークロードをコマンドバッファ114に記録した後、且つ、高優先度ワークロードをコマンドバッファ114からGPU102にサブミットする前に、ワークロードごとのメタデータに基づいて、2レベルビニングモードで実行可能であるように、コマンドバッファ114にパッチを当て、コマンドバッファ114に記憶された高優先度ワークロードを構成する。
【0050】
図4は、2レベルビニングモード又は非2レベルビニングモードでGPUにおいてコマンドバッファのワークロードを選択的に実行する方法400の例示的なプロセスフローを示す。いくつかの実施形態では、GPUは、UMDによって生成された対応するメタデータに基づいて、2レベルビニングモード又は非2レベルビニングモードの何れかでワークロードを実行可能にするために、コマンドバッファのコマンドバッファパッチ当てを実行する。方法400は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して記載される。いくつかの実施形態では、方法400の1つ以上のステップは、
図2の方法200と併せて実行される。
【0051】
ブロック402において、UMD110は、ワークロードをコマンドバッファ114に記録する。いくつかの実施形態では、UMD110は、パッチ当てなしで2レベルビニングモード又は非2レベルビニングモードの何れかで実行可能となるように記録されたワークロードを構成する。いくつかの他の実施形態では、UMD110は、デフォルトでは非2レベルビニングモードで実行される記録された高優先度ワークロードを構成し、必要な場合(すなわち、高優先度ワークロードがコマンドバッファ114に記録された後、且つ、GPU102によるそれらの実行の前に2レベルビニングモードが有効化されている場合)、GPU102が2レベルビニングモードで実行されるように記録されたワークロードを変更することを可能にするメタデータを生成する。いくつかの実施形態では、UMD110は、デフォルトでは2レベルビニングモードで実行されるように、記録された低優先度及び中優先度ワークロードを構成する。
【0052】
一例では、UMD110は、コマンドバッファ114における1つ以上の高優先度ワークロードのための条件文を記録し、条件文は、GPU102に、GPUメモリ124内のレジスタに記憶されたパッチ有効値をチェックさせ、パッチ有効値の値に応じて2レベルビニングモード又は非2レベルビニングモードでコマンドバッファ114における各高優先度ワークロードを実行させる。いくつかの実施形態では、パッチ有効値は、GPUメモリ124内のレジスタの単一ビットに記憶されたブール値である。いくつかの実施形態では、パッチ有効値は、UMD110又はKMD112によって設定される。
【0053】
ブロック404において、KMD112は、コマンドバッファ114からのワークロードをGPU102にサブミットする。いくつかの実施形態では、GPU102にサブミットされると、ワークロードがリングバッファ120に追加される。
【0054】
ブロック406において、GPU102は、2レベルビニングモードがサブミットされたワークロードに対して有効化されているかどうかを判定する。いくつかの実施形態では、GPU102が、GPUメモリ124に記憶された1つ以上のパッチ有効値をチェックして、2レベルビニングモードが高優先度ワークロードに対して有効化されているかどうかを判定する。いくつかの実施形態では、KMD112が、対応する性能データに基づいて2レベルビニングモードがサブミットされた高優先度ワークロードに対して有効化されているかどうかを判定し、それに応じてGPUメモリ124内のパッチ有効値を設定する。サブミットされたワークロードに対して2レベルビニングモードが有効化されているとGPU102が判定する場合、方法400は、ブロック408に進む。そうではなく、サブミットされたワークロードに対して2レベルビニングモードが有効化されていないとGPU102が判定する場合、方法400は、ブロック410に進む。いくつかの実施形態では、2レベルビニングモードは、デフォルトでは低優先度及び中優先度ワークロードに対して有効化され、そのようなワークロードは、それらの優先度に基づいて(例えば、性能ヒューリスティックスではなく)2レベルビニングモードで実行される。
【0055】
ブロック408において、GPU102は、サブミットされたワークロードを2レベルビニングモードで実行する。いくつかの実施形態では、GPU102は、上述したように、コマンドバッファ114へのワークロードの記録中にUMD110によって生成されたメタデータを利用して、コマンドバッファ114の1つ以上の高優先度ワークロードにパッチを当てて、パッチ有効値が、これらの高優先度ワークロードが2レベルビニングモードで実行されることを示すと判定することに応じて2レベルビニングモードで実行する。いくつかの他の実施形態では、UMD110は、2レベルビニングモード又は非2レベルビニングモードの何れかで実行可能となるように、2レベルビニングモードで実行される可能性がある各高優先度ワークロードを記録し、GPU102は、パッチ有効値に基づいて、2レベルビニングモード又は非2レベルビニングモードのうち選択された1つでそれらの高優先度ワークロードを実行するように構成されている。
【0056】
ブロック410において、GPU102は、コマンドバッファ114のサブミットされたワークロードを非2レベルビニングモードで実行する。いくつかの実施形態では、非2レベルビニングモードはPBBレンダリングモードである。
【0057】
図5は、GPU(
図1のGPU102の実施形態)が、高優先度ワークロードを実行するために、低優先度及び中優先度ワークロードをプリエンプトするように構成された例を示す。本例は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して記載される。
【0058】
本例では、GPU102のコマンドプロセッサ122は、高優先度キュー502(例えば、リングバッファ120のうち1つ)及び低/中優先度キュー504(例えば、リングバッファ120のうち別のもの)からワークロードを受信し、実行するように構成されている。例えば、コマンドバッファ114に記憶された各ワークロードは、そのワークロードの優先度レベル(例えば、高優先度、中優先度、低優先度等)を指定する優先度インジケータを含む。いくつかの実施形態では、所定のワークロードに対する優先度インジケータは、そのワークロードの機能に基づいて判定される(例えば、全ての表示構成ワークロードは、高優先度に指定される)。この例では、GPU102による実行のためにサブミットされた高優先度ワークロードは、高優先度キュー502に記憶され、GPU102による実行のためにサブミットされた低優先度ワークロード及び中優先度ワークロードは、低/中優先度キュー504に記憶される。
【0059】
いくつかの実施形態では、GPU102は、高優先度キュー502で高優先度ワークロードを受信すると、コマンドプロセッサ122によって実行されている低優先度ワークロード又は中優先度ワークロードの実行をプリエンプトするように構成されている。例えば、コマンドプロセッサは、高優先度ワークロード502が高優先度キュー502において実行の準備ができていることを示すプリエンプションインジケータ506を受信することに応答して、低/中優先度キュー504からワークロードの実行をプリエンプトする。
【0060】
従来、APIは、通常、ワークロードをフルドローコールよりも細かいものに分割する手段を提供しないので、所定の低優先度又は中優先度ワークロードのプリエンプションは、コマンドプロセッサ122がプリエンプトされているワークロードのフルドローコールの実行を終了するのにかかる時間量だけ遅延される。本明細書では、ドローコールは、レンダリング中に1つ以上のオブジェクト(例えば、1つ以上のプリミティブ)を描画させるグラフィックスAPIへのコールを指す。例えば、所定のドローコールのプリミティブカウントは、通常、ドローコールコマンドの一部として指定される。そのような遅延は、GPU102が、指定されたデッドラインの前に、より低い優先度のワークロードのプリエンプションを開始した高優先度ワークロードを適時に実行することに失敗する結果を潜在的にもたらすので、望ましくないか又は許容できない。したがって、典型的には、そのような高優先度ワークロードの実行デッドラインを見逃すことを避けるために、そのような遅延を低減することが望ましい。
【0061】
例えば、仮想現実(virtual reality、VR)、拡張現実(augmented reality、AR)又は複合現実(mixed reality、MR)アプリケーション等のエクステンデッド現実(extended reality、XR)アプリケーションでは、XRシーン内の仮想オブジェクトをレンダリングするためのワークロードは、典型的には、低又は中優先度が割り当てられる一方、周期的再投影ワークロードは、高優先度が割り当てられる。XRアプリケーションでは、非同期再投影と時折呼ばれる再投影は、XRアプリケーションを実行するシステム(例えば、ヘッドセット、ウェアラブルディスプレイ等)が、特に、GPUボトルネックが低減されたフレームレート、したがって知覚される入力遅延又はレイテンシを引き起こす状況において、システムの動きに対する適切なディスプレイ応答性を保証するプロセスである。例えば、再投影は、1つ以上の以前にレンダリングされた画像フレームと、システムの1つ以上の動きセンサによって生成された動きデータとに基づいて、画像フレームがどのように見えるかの予測を生成し、典型的には、動きデータは、以前の画像フレームがレンダリングされた後に生成される。再投影ワークロードは、典型的には、通常の画像レンダリングワークロードと並行して生成される。典型的なXRアプリケーションでは、ユーザの入力遅延の知覚を低減するために、GPUの各垂直同期(vertical sync、Vsync)に対して少なくとも1つの再投影ワークロードが実行される必要がある。再投影ワークロードが各Vsyncに対して実行されることを確実にするために、再投影ワークロードが実行される準備ができている場合に、システムがより低い優先度の画像レンダリングワークロードを実行している場合、システムは、ドローコールプリエンプションを使用して、より低い優先度の画像レンダリングワークロードの実行をプリエンプトし(例えば、一時的に停止し)、より低い優先度のワークロードが首尾よく停止されると、再投影ワークロードを実行する。
【0062】
別の例として、ヒューマンマシンインターフェース(human machine interface、HMI)ディスプレイ、ナビゲーションディスプレイ及びインストルメントクラスタを有する自動車システム等の自動車用途では、HMI及びナビゲーション画像をレンダリングするためのワークロードには、通常、低又は中優先度が割り当てられ、インストルメントクラスタ画像をレンダリングするためのワークロードには、高優先度が割り当てられる。自動車用途では、典型的には、車両の操作者が、インストルメントクラスタを介して示される車両の様々なパラメータ(例えば、速度、温度、走行距離、rpm、燃料レベル等)の正確且つ最新の理解を有するように、車両のインストルメントクラスタディスプレイを定期的に更新する必要がある。いくつかの事例では、自動車システムにおけるインストルメントクラスタの最小リフレッシュレートは、業界標準に従って設定されるので、この最小リフレッシュレートが自動車システムによって一貫して満たされることを保証することが有益である。いくつかの実施形態では、インストルメントクラスタディスプレイは、Vsyncごとに1回更新される(例えば、対応するインストルメントクラスタワークロードの実行を介して)ように構成されている。それぞれのインストルメントクラスタワークロードが各Vsyncに対して実行されることを確実にするために、インストルメントクラスタワークロードが実行される準備ができている場合に、自動車システムがより低い優先度のHMI又はナビゲーションワークロードを実行している場合、自動車システムは、ドローコールプリエンプションを使用して、より低い優先度のワークロードの実行を一時的に停止し、より低い優先度のワークロードが首尾よく停止されると、インストルメントクラスタワークロードを実行する。
【0063】
上記で提供されたXR及び自動車の例の両方において、ドローコールプリエンプションが発生すると、元々実行されていたより低い優先度のワークロードが首尾よく停止された後まで、より高い優先度のワークロードを実行することができない。上で示されるように、APIは、通常、ワークロードがフルドローコールよりも小さい分割に分解される手段を提供せず、所定のフルドローコールは、対応するワークロードが首尾よく停止され得る前に実行を終了しなければならない。しかしながら、低又は中優先度ワークロードのフルドローコールが複雑であるほど、実行するのにより多くの時間がかかり、そのような複雑なフルドローコールをプリエンプトしようと試みる場合にドローコールプリエンプションにおける許容できない遅延につながる。そのような遅延は、再投影ワークロード又はインストルメントクラスタワークロード等の高優先度ワークロードの実行が、その高優先度ワークロードが実行されるデッドライン(例えば、次のVsync)を見落とす原因となる可能性を有する。XRの例では、この結果、再投影/予測された画像フレームが予想よりも遅くレンダリング及び表示され、ユーザの乗り物酔い又は方向感覚の喪失を引き起こす可能性がある。自動車の例では、これは、インストルメントクラスタディスプレイをリフレッシュする際に許容できない遅延をもたらし、自動車システムが関連する標準に準拠しなくなることを引き起こす可能性がある。したがって、ドローコールプリエンプションがより迅速に実行され得るように、低及び中優先度のワークロードが、フルドローコールよりも小さい分割に分解されることが望ましい。所定のワークロードの各プリエンプション可能な分割のサイズは、本明細書では「プリエンプション粒度」と呼ばれる。2レベルビニングモードでの実行のために構成されたワークロードは、PBB又は即時モードレンダリング等の非2レベルビニングモードで実行されるワークロードよりも良好なプリエンプション粒度(例えば、より小さい分割)を有し、2レベルビニングモードワークロードは、個々に実行可能な粗いビンに分割され、ドローコールプリエンプションによるワークロード実行の停止は、各粗いビンの実行時に起こり得る。PBBモードワークロードのバッチは独立して実行可能ではなく、即時モードレンダリングワークロードはバッチ又はビンに分割されないので、PBB又は即時モードレンダリングのために構成されたもの等の非2レベルビニングワークロードは、このようにして個々に実行可能な部分に分割することができない。したがって、本明細書で説明されるいくつかの実施形態では、システムは、そのようなワークロードのプリエンプション粒度を改善するために、性能ヒューリスティックスを考慮することなく、2レベルビニングモードで実行するための低優先度及び中優先度ワークロードを構成する一方で、性能ヒューリスティックスに基づいて高優先度ワークロードのためのビニングモードを選択する。
【0064】
本例では、GPU102は、実行される2レベルビニングモードで実行される全ての適用可能な低優先度及び中優先度ワークロードを構成することによって、ドローコールプリエンプション遅延を低減するように構成されている。先に示したように、2レベルビニングモードで実行のために適用可能なワークロードは、2レベルビニングモードで機能的に実行可能なワークロードである。2レベルビニングモードで実行されるように構成されたワークロードは、粗いビンに分割され、各々が、表示される画像フレームの異なる領域を表し、例えば、各粗いビンは、コマンドプロセッサ122によって独立して実行可能である。実行される場合に画像フレーム全体がレンダリングされることを必要とするフルドローコールを典型的に含む、2レベルビニングモードで実行するように構成されていないワークロードとは対照的に、2レベルビニングモードで実行するように構成されているワークロードのドローコールは、2レベルビニングモードでワークロードのドローコールを実行する場合に画像フレーム全体が一度に全てレンダリングされる必要がないように、より小さく独立して実行可能な粗いビンに分解される。2レベルビニングモードでの低優先度又は中優先度のワークロードの実行が、より高い優先度のワークロードによってプリエンプトされる場合、コマンドプロセッサ122は、プリエンプションインジケータ506が受信されたときに実行されていたドローコール全体のレンダリングを完了する必要はない。むしろ、コマンドプロセッサ122は、プリエンプションインジケータ506が受信されたときに実行されていた粗いビンのレンダリングを完了するだけであり、これは、プリエンプション粒度を望ましく改善し、プリエンプション遅延を低減し、プリエンプトする高優先度ワークロードがその指定されたデッドラインまでに首尾よく実行する可能性を改善する。
【0065】
本例では、高優先度キュー502は、本例において、2レベルビニングモードで実行されるように構成されていない単一のフルドローコールコマンド(ここでは「DC」と示される)からなる高優先度ワークロードを含み、一方、低/中優先度キューは、2レベルビニングモードで実行するための複数の粗いビンCB0~CB5を含んでいた単一のドローコールコマンドからなる低優先度ワークロードを含む。例えば、コマンドプロセッサ122が、粗いビンCB3を実行している間にプリエンプションインジケータ506を受信する場合、コマンドプロセッサ122は、粗いビンCB3の実行を終了し、次いで、高優先度キュー502内の高優先度ワークロードを実行し始める。高優先度ワークロードが実行されると、コマンドプロセッサは、次の粗いビンCB4のレンダリングを開始することによって、低優先度ワークロードの実行を再開する。いくつかの実施形態では、所定のドローコールが分割される粗いビンの量及び各粗いビンのサイズは、自動的に又は手動で調整可能であり、粗いビンの量及びサイズを調整することによって、プリエンプション粒度も調整される。
【0066】
本例は、例示的であることを意図しており、限定的であることを意図していないことを理解されたい。様々な実施形態によれば、高優先度キュー502及び低/中優先度キュー504の各々は、各々1つ以上のドローコールを有する複数のワークロードを含むことができ、高優先度キュー502に含まれるドローコールは、場合によっては、性能ベースのヒューリスティックスに基づく2レベルビニングモードに従って(例えば、
図2、
図3、
図4の方法200、300、400のうち1つ以上に従って)実行するために粗いビンに分割される。
【0067】
図6は、それぞれの優先度に基づいてワークロードをキューに割り当て、それぞれの優先度に基づいて、及び、高優先度ワークロードについては、性能カウンタ又はセンサによって生成された性能データに基づいて、2レベルビニングモード又は非2レベルビニングモードでワークロードを選択的に実行する方法600の例示的なプロセスフローを示す。方法600は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して、並びに
図5の例に関して記載される。
【0068】
ブロック602において、UMD110(例えば、CPU104によって実行されている)は、コマンドバッファ114に記録される準備ができている新しいワークロードを識別する。
【0069】
ブロック604において、UMD110は、ワークロードの優先度を判定する。いくつかの実施形態では、各ワークロードは、そのワークロードの優先度レベル(例えば、本例における、高優先度、中優先度又は低優先度)を指定する優先度インジケータを含む。ワークロードが高優先度ワークロードであると判定したことに応じて、方法600は、ブロック606に進む。ワークロードが低優先度ワークロード又は中優先度ワークロードであると判定したことに応じて、方法600は、ブロック614に進む。
【0070】
ブロック606において、UMD110は、高優先度ワークロードのビニングモードを判定する。いくつかの実施形態では、UMD110は、1つ以上のビニング条件(例えば、2レベルビニング条件)が満たされたかどうか、及び、オーバーライド条件が満たされたかどうか(例えば、
図2の方法200のブロック204及び206に関連して提供されるような)に基づいて、高優先度ワークロードのためのビニングモードを判定する。いくつかの実施形態では、UMD110は、センサ108によって生成されたセンサデータ118又は性能カウンタ116によって生成された性能カウンタデータ等の性能データに基づいて、ビニング条件又はオーバーライド条件が満たされたかどうかを判定する。いくつかの実施形態では、導出されるパラメータは、UMD110又はKMD112によって計算される。
【0071】
例えば、ビニング条件が満たされており、オーバーライド条件が満たされていないと判定したことに応じて、UMD110は、高優先度ワークロードが2レベルビニングモードでの実行のために構成されるべきであると判定し、方法600は、ブロック614に進む。
【0072】
例えば、ビニング条件が満たされていない、又は、ビニング条件が満たされており、オーバーライド条件が満たされていると判定したことに応じて、UMD110は、高優先度ワークロードが非2レベルビニングモードでの実行のために構成されるべきであると判定し、方法600は、ブロック608に進む。
【0073】
ブロック608において、UMD110は、高優先度ワークロードに対して非2レベルビニングモードを有効化する。いくつかの実施形態では、UMD110は、コマンドバッファ114のうち1つに高優先度ワークロードを記録する場合に、非2レベルビニングモードで実行されるように高優先度ワークロードを構成する。いくつかの実施形態では、全ての高優先度ワークロードは、デフォルトでは非2レベルビニングモードで実行されるように構成される。いくつかの実施形態では、UMD110は、1つ以上のパッチ有効値、ステータスビット、又は、両方を設定して、高優先度ワークロード(及びいくつかの事例では、全ての高優先度ワークロード)が非2レベルビニングモードで実行されるべきであることを示す。
【0074】
ブロック614において、UMD110は、高優先度ワークロードに対して2レベルビニングモードを有効化する。いくつかの実施形態では、UMD110は、高優先度ワークロードをコマンドバッファ114のうち1つに記録する場合に、高優先度ワークロードが2レベルビニングモードで実行されるように構成する。いくつかの実施形態では、UMD110は、1つ以上のパッチ有効値、ステータスビット、又は、その両方を設定して、高優先度ワークロード(及びいくつかの事例では、全ての高優先度ワークロード)が2レベルビニングモードで実行されるべきであることを示す。
【0075】
ブロック610において、UMD110が高優先度ワークロードに対して判定されたビニングモードを有効化した後、UMD110は高優先度ワークロードをGPU102にサブミットし、高優先度ワークロードは高優先度キュー(例えば、
図5の高優先度キュー502の例示的な実施形態)に追加される。
【0076】
ブロック612において、高優先度ワークロードは、ブロック606において判定されたビニングモード(例えば、2レベルビニングモード又は非2レベルビニングモード)でGPU102において実行される。いくつかの実施形態では、高優先度ワークロードの実行は、より低い優先度のワークロードの実行をプリエンプトする。
【0077】
ブロック616において、UMD110は、低優先度又は中優先度のワークロードに対して2レベルビニングモードを有効化する。いくつかの実施形態では、UMD110は、低優先度又は中優先度のワークロードをコマンドバッファ114のうち1つに記録する場合に、低優先度又は中優先度のワークロードが2レベルビニングモードで実行されるように構成する。いくつかの実施形態では、全ての低優先度又は中優先度のワークロードは、適用可能(すなわち、機能的に可能)な場合、デフォルトでは2レベルビニングモードで実行するように自動的に構成される。
【0078】
ブロック618において、UMD110が低優先度又は中優先度のワークロードに対して2レベルビニングモードを有効化した後、UMD110は、低優先度又は中優先度のワークロードをGPU102にサブミットし、低優先度又は中優先度のワークロードは低/中優先度キュー(例えば、
図5の高優先度キュー502の例示的な実施形態)に追加される。
【0079】
ブロック620において、低優先度又は中優先度のワークロードが、2レベルビニングモードでGPU102において実行される。いくつかの実施形態では、1つ以上の高優先度ワークロードがGPU102において実行されることを可能にするために、低優先度又は中優先度のワークロードの実行が一時的に停止される(例えば、ドローコールプリエンプションを介して)。
【0080】
図7は、GPUにおいて、高優先度キューから高優先度ワークロードを実行するために、低/中優先度キューから2レベルビニングモードでより低い優先度のワークロード(例えば、低優先度又は中優先度ワークロード)の実行をプリエンプトする方法700の例示的なプロセスフローを示す。方法700は、
図1のデバイス100及びその構成コンポーネント及びモジュールにおける例示的な実装に関して、並びに
図5の例に関して記載される。
【0081】
ブロック702において、GPU102のコマンドプロセッサ122は、2レベルビニングモードで低/中優先度キュー504からの第1のワークロード(すなわち、低優先度又は中優先度のワークロード)の実行を開始する。例えば、第1のワークロードの各フルドローコールは、複数の粗いビンに分割され、所定のドローコールの粗いビンの各々は、ドローコールを介してレンダリングされる画像フレームのそれぞれ異なる領域を表し、粗いビンの各々は、個別に実行可能である。
【0082】
ブロック704において、第1のワークロードを実行している間に、GPU102は、プリエンプション通知506等のプリエンプション通知がGPU102によって受信されたかどうかを連続的に又は周期的に判定する。いくつかの実施形態では、スケジューラ(例えば、CPU104におけるUMD110又はKMD112等のドライバを介して、又は、GPU102におけるファームウェアを介して実装される)は、高優先度ワークロードが高優先度キュー502にサブミットされたと判定したことに応じて、プリエンプション通知をGPU102に送信する。第1のワークロードの実行を継続している間にプリエンプション通知がGPU102によって受信されない場合、方法700は、ブロック706に進み、ここで、GPU102は、2レベルビニングモードでの第1のワークロードの実行を終了する。第1のワークロードを実行している間、プリエンプション通知がGPU102によって受信された場合、方法700は、ブロック708に進む。
【0083】
ブロック708において、GPU102は、第1のワークロードを実行している間にプリエンプション通知が受信された時点で、第1のワークロードの粗いビンが部分的にのみレンダリングされた(例えば、GPU102が粗いビンをレンダリングしている間にプリエンプション通知が受信された)かどうかを判定する。GPU102が部分的にレンダリングされた粗いビンを識別したことに応じて、方法700は、ブロック708に進む。そうでない場合、方法700は、ブロック712に進む。
【0084】
ブロック710において、GPU102(例えば、GPU102のコマンドプロセッサ122)は、粗いビンをレンダリングすることを終了する。
【0085】
ブロック712において、部分的にレンダリングされた粗いビンがないこと、又は、全ての識別された部分的にレンダリングされた粗いビンがレンダリングされたことの何れかを判定すると、GPU102は、高優先度キュー504からの第2のワークロード(例えば、高優先度ワークロード)を実行し(例えば、コマンドプロセッサ122を使用して)、第2のワークロードは、ブロック704の直近の反復においてGPU102によって受信されたプリエンプション通知に対応する。
【0086】
ブロック714において、第2のワークロードを実行すると、GPU102は、2レベルビニングモードで第1のワークロードの実行を再開する。第1のワークロードの実行を再開すると、方法700はブロック704に戻って、第1のワークロードの実行を終了する前に、任意の追加的なプリエンプション通知がGPU102によって受信されるかどうかを判定する。
【0087】
上述したように、いくつかの実施形態では、方法は、システムの少なくとも1つの処理ユニットによって、第1のビニングモードで第1のワークロードを実行することと、少なくとも1つの処理ユニットによって、システムの性能ヒューリスティックスに基づいて、第1のビニングモード及び第2のビニングモードのうち1つから選択される選択されたビニングモードで第2のワークロードを実行することと、を含む。一態様では、本方法は、少なくとも1つの処理ユニットによって、第1のワークロードの第1の優先度インジケータに基づいて、第1のワークロードが低優先度ワークロードであると判定することであって、第1のワークロードが、第1のワークロードが低優先度ワークロードであると判定したことに応じて第1のビニングモードで実行される、判定することと、少なくとも1つの処理ユニットによって、第2のワークロードの第2の優先度インジケータに基づいて、第2のワークロードが高優先度ワークロードであると判定することであって、第2のワークロードが、第2のワークロードが高優先度ワークロードであると判定したことに応じて第2のビニングモードで実行される、ことと、を含む。別の態様では、第1のビニングモードが、2レベルビニングモードであり、第2のビニングモードが、非2レベルビニングモードである。
【0088】
一態様では、第1のビニングモードが、2レベルビニングモードであり、本方法は、第1のビニングモードで実行されるように第1のワークロードを構成することを更に含み、第1のワークロードを構成することが、第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、複数の粗いビンの各粗いビンに対して、その粗いビンを複数の細かいビンに分割することと、第1のワークロードの画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、によって行われる。別の態様では、本方法は、少なくとも1つの処理ユニットによって、第1のワークロードの複数の粗いビンのうち第1の粗いビンを実行している間にプリエンプション通知を受信することと、プリエンプション通知を受信したことに応じて、少なくとも1つの処理ユニットによって、第1のワークロードの実行を停止することであって、第2のワークロードを実行することが、第1のワークロードの実行が停止されている間に起こる、ことと、少なくとも1つの処理ユニットによって、第2のワークロードを実行すると、第1のワークロードの実行を再開することと、を含む。更に別の態様では、本方法は、第1のワークロードの実行を停止する前に、第1のワークロードの第1の粗いビンの実行を完了することを含み、第1のワークロードの実行を再開することが、第1のワークロードの複数の粗いビンのうち第2の粗いビンの実行を開始することを含む。
【0089】
一態様では、本方法は、システムの性能ヒューリスティックスに基づいて、2レベルビニングモードに対応する2レベルビニング条件が満たされたかどうかを判定することと、システムの性能ヒューリスティックスに基づいて、オーバーライド条件が満たされたかどうかを判定することとによって、第2のワークロードに対して選択されたビニングモードを選択することを含む。別の態様では、2レベルビニング条件は、第1の事前定義された温度閾値を超える少なくとも1つの処理ユニットを含むシステムの平均温度、第2の事前定義された閾値を超えるシステムの平均温度の第1の変化率、第3の事前定義された閾値を超えるシステムの定義されたロケーションにおける局所温度、第4の事前定義された閾値を超える局所温度の第2の変化率、第5の事前定義された閾値を超えるシステムの平均電力消費、第6の事前定義された閾値を超えるシステムのピーク瞬時電力消費、又は、第7の事前定義された閾値を下回るバッテリの充電状態のうち少なくとも1つを含む。更に別の態様では、性能ヒューリスティックスは、少なくとも1つの処理ユニットを含むシステムの平均温度、システムの平均温度の第1の変化率、システムの平均電力消費、平均電力消費の第2の変化率、システムのピーク瞬時電力消費、システムのバッテリの充電状態、又は、2レベルビニングモードで実行するための第2のワークロードの適用可能性のうち少なくとも1つを含む。
【0090】
いくつかの実施形態では、デバイスは、第1のビニングモードで第1のワークロードを実行し、デバイスの性能ヒューリスティックスに基づいて第1のビニングモード及び第2のビニングモードのうち1つから選択される選択されたビニングモードで第2のワークロードを実行するように構成された少なくとも1つの処理ユニットを含む。一態様では、少なくとも1つの処理ユニットは、第1のワークロードの第1の優先度インジケータに基づいて、第1のワークロードが低優先度ワークロードであると判定することであって、第1のワークロードが、第1のワークロードが低優先度ワークロードであると判定したことに応じて、第1のビニングモードで実行される、ことと、第2のワークロードの第2の優先度インジケータに基づいて、第2のワークロードが高優先度ワークロードであると判定することであって、第2のワークロードが、第2のワークロードが高優先度ワークロードであると判定したことに応じて、選択されたビニングモードで実行される、ことと、を行うように更に構成されている。別の態様では、第1のビニングモードが、2レベルビニングモードであり、第2のビニングモードが、非2レベルビニングモードである。
【0091】
一態様では、少なくとも1つの処理ユニットは、2レベルビニングモードで実行されるように第1のワークロードを構成するように構成されており、第1のワークロードを構成することは、第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、複数の粗いビンの各粗いビンに対して、その粗いビンを複数の細かいビンに分割することと、第1のワークロードの画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、によって行われる。別の態様では、少なくとも1つの処理ユニットは、第1のワークロードの複数の粗いビンのうちの第1の粗いビンを実行している間にプリエンプション通知を受信することと、プリエンプション通知を受信したことに応じて、第1のワークロードの実行を停止することと、第1のワークロードが停止されている間に第2のワークロードを実行することと、第2のワークロードを実行すると、第1のワークロードの実行を再開することと、を行うように更に構成されている。更に別の態様では、少なくとも1つの処理ユニットは、第1のワークロードの実行を停止する前に第1の粗いビンの実行を完了するように、更に構成されており、第1のワークロードの実行を再開することが、第1のワークロードの複数の粗いビンのうち第2の粗いビンの実行を再開することを含む。
【0092】
いくつかの実施形態では、デバイスは、少なくとも1つの処理ユニットであって、第1のワークロードの画像フレームの第1の粗いビンを2レベルビニングモードで実行している間に、プリエンプション通知を受信することと、プリエンプション通知を受信することに応じて、第1の粗いビンの実行を完了した後に、第1のワークロードの実行を停止することと、第1のワークロードが中断されている間に、選択されたビニングモードで第2のワークロードを実行することと、第2のワークロードを実行すると、第1のワークロードの実行を再開することと、を行うように構成されている、少なくとも1つの処理ユニット、を含む。一態様では、少なくとも1つの処理ユニットは、デバイスの性能ヒューリスティックスに基づいて、2レベルビニングモード及び非2レベルビニングモードのうち1つから選択されたビニングモードを選択するように更に構成されている。別の態様では、少なくとも1つの処理ユニットは、2レベルビニングモードで実行されるように第1のワークロードを構成するように更に構成されており、第1のワークロードを構成することが、第1のワークロードに関連付けられた画像フレームを、第1の粗いビンを含む複数の粗いビンに分割することと、複数の粗いビンの各粗いビンに対して、その粗いビンを複数の細かいビンに分割することと、第1のワークロードの画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、によって行われる。
【0093】
一態様では、少なくとも1つの処理ユニットは、第1のワークロードの実行を再開すると、画像フレームの複数の粗いビンのうち第2の粗いビンを実行するように構成されている。別の態様では、少なくとも1つの処理ユニットは、第1のワークロードの第1の優先度のインジケータに基づいて、第1のワークロードが低優先度ワークロードであると判定することと、第2のワークロードの第2の優先度インジケータに基づいて、第2のワークロードが高優先度ワークロードであると判定することと、第1のワークロードを第1のキューにサブミットさせることと、第2のワークロードを第1のキューとは異なる第2のキューにサブミットさせることと、を行うように更に構成されている。
【0094】
いくつかの実施形態では、上述した装置及び技術は、
図1を参照して説明したGPU102、CPU104及びシステムメモリ106を含むデバイス100等の1つ以上の集積回路(integrated circuit、IC)デバイス(集積回路パッケージ又はマイクロチップとも呼ばれる)を含むシステムに実装される。電子設計自動化(electronic design automation、EDA)及びコンピュータ支援設計(computer aided design、CAD)ソフトウェアツールは、これらのICデバイスの設計及び製造に使用することができる。これらの設計ツールは、典型的には、1つ以上のソフトウェアプログラムとして表される。1つ以上のソフトウェアプログラムは、回路を製造するための製造システムを設計するか又は適応させるためのプロセスの少なくとも一部を実行するために、1つ以上のICデバイスの回路を表すコードで動作するようにコンピュータシステムを操作するための、コンピュータシステムによって実行可能なコードを含む。このコードは、命令、データ、又は、命令及びデータの組み合わせを含み得る。設計ツール又は製造ツールを表すソフトウェア命令は、典型的には、コンピューティングシステムにアクセス可能なコンピュータ可読記憶媒体に記憶される。同様に、ICデバイスの設計又は製造の1つ以上の段階を表すコードは、同じコンピュータ可読記憶媒体又は異なるコンピュータ可読記憶媒体に記憶され、そこからアクセスされる。
【0095】
コンピュータ可読記憶媒体は、命令及び/又はデータをコンピュータシステムに提供するために、使用中にコンピュータシステムによってアクセス可能な任意の非一時的な記憶媒体又は非一時的な記憶媒体の組み合わせを含む。このような記憶媒体には、限定されないが、光学媒体(例えば、コンパクトディスク(CD)、デジタル多用途ディスク(DVD)、ブルーレイ(登録商標)ディスク)、磁気媒体(例えば、フロッピー(登録商標)ディスク、磁気テープ、磁気ハードドライブ)、揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)若しくはキャッシュ)、不揮発性メモリ(例えば、読取専用メモリ(ROM)若しくはフラッシュメモリ)、又は、微小電気機械システム(MEMS)ベースの記憶媒体が含まれ得る。コンピュータ可読記憶媒体(例えば、システムRAM又はROM)はコンピューティングシステムに内蔵されてもよいし、コンピュータ可読記憶媒体(例えば、磁気ハードドライブ)はコンピューティングシステムに固定的に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、光学ディスク又はユニバーサルシリアルバス(USB)ベースのフラッシュメモリ)はコンピューティングシステムに着脱可能に取り付けられてもよいし、コンピュータ可読記憶媒体(例えば、ネットワークアクセス可能ストレージ(NAS))は有線又は無線ネットワークを介してコンピュータシステムに結合されてもよい。
【0096】
いくつかの実施形態では、上述した技術の特定の態様は、ソフトウェアを実行する処理システムの1つ以上のプロセッサによって実装される。ソフトウェアは、非一時的なコンピュータ可読記憶媒体に記憶されるか、別の方法で明確に具体化された実行可能命令の1つ以上のセットを含む。ソフトウェアは、命令及び特定のデータを含んでもよく、当該命令及び特定のデータは、1つ以上のプロセッサによって実行されると、上述した技術の1つ以上の態様を実行するように1つ以上のプロセッサを操作する。非一時的なコンピュータ可読記憶媒体は、例えば、磁気又は光ディスク記憶デバイス、フラッシュメモリ等のソリッドステート記憶デバイス、キャッシュ、ランダムアクセスメモリ(RAM)、又は、他の不揮発性メモリデバイス(単数又は複数)等を含み得る。非一時的なコンピュータ可読記憶媒体に記憶された実行可能命令は、ソースコード、アセンブリ言語コード、オブジェクトコード、又は、1つ以上のプロセッサによって解釈され若しくは別の方法で実行可能な他の命令形式で実装可能である。
【0097】
上述したものに加えて、概要説明において説明した全てのアクティビティ又は要素が必要とされているわけではなく、特定のアクティビティ又はデバイスの一部が必要とされない場合があり、1つ以上のさらなるアクティビティが実行される場合があり、1つ以上のさらなる要素が含まれる場合があることに留意されたい。さらに、アクティビティが列挙された順序は、必ずしもそれらが実行される順序ではない。また、概念は、特定の実施形態を参照して説明された。しかしながら、当業者であれば、特許請求の範囲に記載されているような本発明の範囲から逸脱することなく、様々な変更及び変形を行うことができるのを理解するであろう。したがって、明細書及び図面は、限定的な意味ではなく例示的な意味で考慮されるべきであり、これらの変更形態の全ては、本発明の範囲内に含まれることが意図される。
【0098】
利益、他の利点及び問題に対する解決手段を、特定の実施形態に関して上述した。しかし、利益、利点、問題に対する解決手段、及び、何かしらの利益、利点若しくは解決手段が発生又は顕在化する可能性のある特徴は、何れか若しくは全ての請求項に重要な、必須の、又は、不可欠な特徴と解釈されない。さらに、開示された発明は、本明細書の教示の利益を有する当業者には明らかな方法であって、異なっているが同様の方法で修正され実施され得ることから、上述した特定の実施形態は例示にすぎない。添付の特許請求の範囲に記載されている以外に本明細書に示されている構成又は設計の詳細については限定がない。したがって、上述した特定の実施形態は、変更又は修正されてもよく、かかる変更形態の全ては、開示された発明の範囲内にあると考えられることが明らかである。したがって、ここで要求される保護は、添付の特許請求の範囲に記載されている。
【手続補正書】
【提出日】2023-06-30
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
方法であって、
システムの少なくとも1つの処理ユニットが、第1のビニングモードで第1のワークロードを実行することと、
前記少なくとも1つの処理ユニットが、前記システムの性能ヒューリスティックスに基づいて、前記第1のビニングモード及び第2のビニングモードのうち何れかから選択された、選択されたビニングモードで第2のワークロードを実行することと、を含む、
方法。
【請求項2】
前記少なくとも1つの処理ユニットが、前記第1のワークロードの第1の優先度インジケータに基づいて、前記第1のワークロードが低優先度ワークロードであると判定することであって、前記第1のワークロードは、前記第1のワークロードが低優先度ワークロードであると判定したことに応じて前記第1のビニングモードで実行される、ことと、
前記少なくとも1つの処理ユニットが、前記第2のワークロードの第2の優先度インジケータに基づいて、前記第2のワークロードが高優先度ワークロードであると判定することであって、前記第2のワークロードは、前記第2のワークロードが高優先度ワークロードであると判定したことに応じて前記第2のビニングモードで実行される、ことと、を更に含む、
請求項1の方法。
【請求項3】
前記第1のビニングモードは2レベルビニングモードであり、前記第2のビニングモードは非2レベルビニングモードである、
請求項1又は2の方法。
【請求項4】
前記第1のビニングモードは2レベルビニングモードであり、
前記方法は、
前記第1のビニングモードで実行されるように前記第1のワークロードを構成することを更に含み、
前記第1のワークロードを構成することは、
前記第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、
前記複数の粗いビンの各々に対して、その粗いビンを複数の細かいビンに分割することと、
前記第1のワークロードの前記画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、
によって行われる、
請求項1~3の何れかの方法。
【請求項5】
前記少なくとも1つの処理ユニットが、前記第1のワークロードの前記複数の粗いビンのうち第1の粗いビンを実行している間にプリエンプション通知を受信することと、
前記少なくとも1つの処理ユニットが、前記プリエンプション通知を受信したことに応じて前記第1のワークロードの実行を停止することであって、前記第2のワークロードを実行することは、前記第1のワークロードの実行が停止されている間に行われる、ことと、
前記少なくとも1つの処理ユニットが、前記第2のワークロードを実行すると前記第1のワークロードの実行を再開することと、を更に含む、
請求項4の方法。
【請求項6】
前記第1のワークロードの実行を停止する前に、前記第1のワークロードの前記第1の粗いビンの実行を完了することを更に含み、
前記第1のワークロードの実行を再開することは、
前記第1のワークロードの前記複数の粗いビンのうち第2の粗いビンの実行を開始することを含む、
請求項5の方法。
【請求項7】
前記第2のワークロードに対して前記選択されたビニングモードを選択することを更に含み、
前記選択することは、
前記システムの前記性能ヒューリスティックスに基づいて、2レベルビニングモードに対応する2レベルビニング条件が満たされたかどうかを判定することと、
前記システムの前記性能ヒューリスティックスに基づいて、オーバーライド条件が満たされたかどうかを判定することと、
によって行われる、
請求項1~6の何れかの方法。
【請求項8】
前記2レベルビニング条件は、前記少なくとも1つの処理ユニットを含む前記システムの平均温度が第1の事前定義された温度閾値を超えること、前記システムの前記平均温度の第1の変化率が第2の事前定義された閾値を超えること、前記システムの定義されたロケーションにおける局所温度が第3の事前定義された閾値を超えること、前記局所温度の第2の変化率が第4の事前定義された閾値を超えること、前記システムの平均電力消費が第5の事前定義された閾値を超えること、前記システムのピーク瞬時電力消費が第6の事前定義された閾値を超えること、又は、バッテリの充電状態が第7の事前定義された閾値を下回ること、のうち少なくとも1つを含む、
請求項7の方法。
【請求項9】
前記性能ヒューリスティックスは、前記少なくとも1つの処理ユニットを含む前記システムの平均温度、前記システムの前記平均温度の第1の変化率、前記システムの平均電力消費、前記平均電力消費の第2の変化率、前記システムのピーク瞬時電力消費、前記システムのバッテリの充電状態、又は、前記2レベルビニングモードで実行するための前記第2のワークロードの適用可能性のうち少なくとも1つを含む、
請求項7又は8の方法。
【請求項10】
デバイスであって、
少なくとも1つの処理ユニットを備え、
前記少なくとも1つの処理ユニットは、
第1のビニングモードで第1のワークロードを実行することと、
前記デバイスの性能ヒューリスティックスに基づいて、前記第1のビニングモード及び第2のビニングモードのうち何れかから選択された、選択されたビニングモードで第2のワークロードを実行することと、
を行うように構成されている、
デバイス。
【請求項11】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの第1の優先度インジケータに基づいて、前記第1のワークロードが低優先度ワークロードであると判定することであって、前記第1のワークロードは、前記第1のワークロードが低優先度ワークロードであると判定したことに応じて前記第1のビニングモードで実行される、ことと、
前記第2のワークロードの第2の優先度インジケータに基づいて、前記第2のワークロードが高優先度ワークロードであると判定することであって、前記第2のワークロードは、前記第2のワークロードが高優先度ワークロードであると判定したことに応じて前記選択されたビニングモードで実行される、ことと、
を行うように更に構成されている、
請求項10のデバイス。
【請求項12】
第1のビニングモードは2レベルビニングモードであり、前記第2のビニングモードは非2レベルビニングモードである、
請求項11のデバイス。
【請求項13】
前記少なくとも1つの処理ユニットは、
前記2レベルビニングモードで実行されるように前記第1のワークロードを構成するように構成されており、
前記第1のワークロードを構成することは、
前記第1のワークロードに関連付けられた画像フレームを複数の粗いビンに分割することと、
前記複数の粗いビンの各々に対して、その粗いビンを複数の細かいビンに分割することと、
前記第1のワークロードの前記画像フレームに関連付けられた複数のプリミティブを時間的に関連するプリミティブバッチにセグメント化することと、
によって行われる、
請求項12のデバイス。
【請求項14】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの前記複数の粗いビンのうち第1の粗いビンを実行している間にプリエンプション通知を受信することと、
前記プリエンプション通知を受信したことに応じて前記第1のワークロードの実行を停止することと、
前記第1のワークロードが停止されている間に前記第2のワークロードを実行することと、
前記第2のワークロードを実行すると前記第1のワークロードの実行を再開することと、
を行うように更に構成されている、
請求項13のデバイス。
【請求項15】
前記少なくとも1つの処理ユニットは、
前記第1のワークロードの実行を停止する前に、前記第1の粗いビンの実行を完了するように更に構成されており、
前記第1のワークロードの実行を再開することは、
前記第1のワークロードの前記複数の粗いビンのうち第2の粗いビンの実行を再開することを含む、
請求項14のデバイス。
【国際調査報告】