JP6001221B1 - グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム - Google Patents

グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム Download PDF

Info

Publication number
JP6001221B1
JP6001221B1 JP2016534126A JP2016534126A JP6001221B1 JP 6001221 B1 JP6001221 B1 JP 6001221B1 JP 2016534126 A JP2016534126 A JP 2016534126A JP 2016534126 A JP2016534126 A JP 2016534126A JP 6001221 B1 JP6001221 B1 JP 6001221B1
Authority
JP
Japan
Prior art keywords
command
buffer
execution
command buffer
preemption
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2016534126A
Other languages
English (en)
Other versions
JP2016538646A (ja
Inventor
フラシャティ、クリストファー・ポール
バルシー、ムラート
セーサラマイアー、アビナシュ
グルバー、アンドリュー・イバン
ボウルド、アレクセイ・ブラディミロビッチ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Qualcomm Inc filed Critical Qualcomm Inc
Application granted granted Critical
Publication of JP6001221B1 publication Critical patent/JP6001221B1/ja
Publication of JP2016538646A publication Critical patent/JP2016538646A/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09GARRANGEMENTS OR CIRCUITS FOR CONTROL OF INDICATING DEVICES USING STATIC MEANS TO PRESENT VARIABLE INFORMATION
    • G09G5/00Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators
    • G09G5/36Control arrangements or circuits for visual indicators common to cathode-ray tube indicators and other visual indicators characterised by the display of a graphic pattern, e.g. using an all-points-addressable [APA] memory
    • G09G5/39Control of the bit-mapped memory
    • G09G5/399Control of the bit-mapped memory using two or more bit-mapped memories, the operations of which are switched in time, e.g. ping-pong buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/483Multiproc
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Abstract

本開示は、制御処理での任意の制御ポイントでのプリエンプションのための技法および構造を提示する。グラフィックス処理の方法は、コマンドバッファ中のコマンドを実行することと、ここで、コマンドは、読取修正書込メモリリソース中のデータに作用する、第1のバッファが読取修正書込メモリリソースの元データを記憶し、第2のバッファが、コマンドバッファ中のコマンドを実行することによって生成される任意の修正済みデータを記憶するように、読取修正書込メモリリソース中のデータをダブルバッファすることと、コマンドバッファ中のすべてのコマンドを完了する前にコマンドバッファ中のコマンドの実行をプリエンプトするよう求める要求を受けることと、第1のバッファ中の元データを使用してコマンドバッファの初めからコマンドの実行を再開することとを備え得る。【選択図】 図5

Description

[0001] 本開示は、グラフィックス処理のための技法に関し、より具体的には、グラフィックス処理における任意の制御ポイントでのプリエンプションのための技法に関する。
[0002] グラフィカルユーザインターフェースおよびビデオゲーム用のコンテンツのような、表示用の視覚コンテンツは、グラフィックス処理ユニット(GPU)によって生成され得る。GPUは、2次元または3次元(3D)オブジェクトを、表示され得る2次元(2D)画素表現へと変換し得る。3Dオブジェクトについての情報を、表示可能なビットマップへと変換することは、画素レンダリングとして知られており、大量のメモリおよび処理電力を必要とする。これまで、3Dグラフィックス機能は、強力なワークステーション上でのみ利用可能であった。しかしながら、現在、3Dグラフィックスアクセラレータは、パーソナルコンピュータ(PC)に加え、スマートフォン、タブレットコンピュータ、ポータブルメディアプレーヤ、ポータブルビデオゲーミングコンソール、等のモバイルデバイスにおいてよく見受けられる。典型的に、モバイルデバイスは、計算電力およびメモリ容量が、従来のPCと比べて少ない。このように、3Dグラフィックスレンダリング技法の増加した複雑性は、モバイルデバイス上にそのような技法を実装する際に問題を提起する。
[0003] 多くのシステムでは、GPU処理を必要とするより高い優先度のタスクが実行され得るように、GPU上でのコマンドの実行をプリエンプトするための技法が利用される。そのようなプリエンプション技法は一般に、1つのコマンドストリームを通したGPUの進行がトラッキングされるプロセスを含む。このように、GPUは、より高い優先度のタスクへと移行し、そして、GPUが停止したポイントの元のタスクに戻り得る。
[0004] 一般に、本開示は、グラフィックス処理システムにおける任意の制御ポイントでのプリエンプションのための技法を説明する。具体的には、本開示の技法は、GPU上の現在実行中のコマンドバッファが任意のポイントでプリエンプトされること、およびGPUが、より高い優先度のタスクに迅速に移行することを可能にする。より高い優先度のタスクが完了した後、GPUは、元のコマンドバッファに戻り、最初から開始する。そのような再開(restart)を容易にするために、本開示の技法は、読取修正書込リソースの元の状態が復元され得るように、コマンドバッファ中のコマンドによって使用される任意の読取修正書込メモリリソースをダブルバッファすることを提案する。
[0005] 本開示の一例では、グラフィックス処理の方法は、グラフィックス処理ユニットに対してコマンドバッファ中のコマンドを実行することと、ここで、これらコマンドは、読取修正書込メモリリソース内のデータに作用する(operate on)、読取修正書込メモリリソースの元データを第1のバッファに記憶することと、コマンドバッファ中のコマンドを実行することによって生成される任意の修正済みデータを第2のバッファに記憶することと、コマンドバッファ中のすべてのコマンドを完了する前にコマンドバッファ中のコマンドの実行をプリエンプトすることと、実行をプリエンプトした後に、第1のバッファ中の元データを使用してコマンドバッファの初めからコマンドの実行を再開することとを備える。
[0006] 本開示の技法はまた、装置、グラフィックス処理ユニット、および、プロセッサに本技法を行わせるための命令を格納しているコンピュータ可読記憶媒体の観点から説明される。1つまたは複数の例の詳細は、添付の図面および以下の説明において示される。他の特徴、目的、および利点は、本説明および図面から、および特許請求の範囲から明らかになるであろう。
[0007] 図1は、本開示の技法を使用するように構成された例となるコンピューティングデバイスを示すブロック図である。 [0008] 図2は、例となるグラフィックスレンダリングシステムを示すブロック図である。 [0009] 図3は、GPUを使用する例となる汎用コンピューティングシステムを示すブロック図である。 [0010] 図4は、プリエンプション要求を示す概念的な図である。 [0011] 図5は、本開示の1つまたは複数の例に係る、プリエンプション要求の処理(handling)を示す概念的な図である。 [0012] 図6は、本開示の技法に係る、例となる方法を示すフローチャートである。
発明の詳細な説明
[0013] 本開示は、グラフィックス処理のための技法に関し、より具体的には、任意の制御ポイントでのプリエンプションのための技法に関する。具体的には、本開示は、コンピューティングシステム内の入力/出力(I/O)デバイスのためのプリエンプションメカニズムについての技法に関する。具体的には、本開示は、例えば、グラフィックス処理ユニット(GPU)上で実行されるグラフィックス処理のようなグラフィックス処理を停止および再開する(resume)ためにオペレーティングシステムで使用されるプリエンプションメカニズムの観点から説明されるだろう。
[0014] 簡単に言えば、GPUに対するプリエンプション要求は、GPU処理を必要とする別のより高い優先度の動作に有利なように(in favor of)コマンドバッファの現在のグラフィックス処理を停止するよう求める、グラフィックス処理システムの別のエンティティ(例えば、中央処理ユニット(CPU)上で実行されるアプリケーション)によって行われる要求である。多くの場合、そのようなプリエンプション要求は、オペレーティングシステムから発生する(originate)だろう。グラフィックス処理のプリエンプションのための従来の技法は、いわゆる「セーフポイント」の使用に頼る。すなわち、GPUが、現在の処理をプリエンプトするよう求める要求を受けると、GPUは、特定のポイント(例えば、コマンドバッファ中の特定のポイント)まで処理し続け、そのポイントでの処理の状態についての情報を保存する。そのような情報には、処理が停止したかつ再開されるべきコマンドバッファ中のポイント、GPU処理の出力を受ける任意のバッファのコンテンツ、およびコマンド中のそのポイントにおける任意のGPU処理のために入力データとして使用され得る1つまたは複数のバッファのコンテンツが含まれ得る。
[0015] そのような状態情報を保存することで、GPUは、正確な入力および出力データを用いて既知のポイントで処理を再開することができる。しかしながら、プリエンプション要求を受けたときにセーフポイントまで処理することおよび状態情報を保存することは、不確定の時間量がかかる。プリエンプション要求は、GPUによって実行されるコマンドバッファ中の非同期のポイントで発生し得、そのため、セーフポイントに到達するまでにGPUがどれだけ動作する必要があり得るかを予測することは可能ではないだろう。いくつかの状況では、プリエンプション要求に応答して、GPUがセーフポイントに到達し、状態情報を保存し、新しいコマンドバッファの処理を開始するための時間は、望ましくないほどに長い可能性がある。いくつかのアプリケーションは、より高い優先度のグラフィックスタスクが迅速に開始され得ない場合、乏しいユーザ経験に帰着し得る。
[0016] これら欠点に鑑みて、本開示は、任意の制御ポイントでプリエンプション要求を処理するための技法を提示する。具体的には、本開示の技法は、より高い優先度のタスクを実行するよう求めるプリエンプション要求に応答して、コマンドバッファの部分的な処理の結果が却下され得、このコマンドバッファが最初から再実行され得るように、元のタスクのためのコマンドバッファを実行するためにGPUによって使用される読取修正書込リソースをダブルバッファすることを含む。このように、プリエンプション要求は、元のタスクの処理を再開するための安定した状態を依然として維持しつつ、迅速に処理され得る。
[0017] 一例では、グラフィックス処理のためのコマンドストリームは、後続のフレームをレンダリンするために、以前にレンダリンされたフレームバッファのコンテンツを読み取り、次に修正し得る。現在のフレームのレンダリングが、このフレームが完了する前にプリエンプトされる場合、本開示の技法は、初めからコマンドバッファの実行を再開する(すなわち、最初からフレームのレンダリングを開始する)ことを含む。プリエンプション中、コマンドバッファのコンテンツ全体は、後のポイントでの再生のために記憶される。以前のフレームバッファの一部分が、プリエンプションの前に修正されている場合、フレームバッファのそのような部分は、現在処理されるフレームにとって正確な入力ではないだろう。そのため、本開示の技法はまた、コマンドバッファ全体が処理されるまで読取修正書込リソース(例えば、以前のフレームのフレームバッファのコンテンツ)の複写を記憶することを含む。以前のフレームバッファのコンテンツに対する任意の修正は、異なるバッファに記憶される(すなわち、読取修正書込バッファはダブルバッファされる)。
[0018] 図1は、任意の制御ポイントでのプリエンプションのための本開示の技法を実装するために使用され得る例となるコンピューティングデバイス2を例示するブロック図である。コンピューティングデバイス2は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、例えば、いわゆるスマートフォンを含む、例えば、セルラまたは衛星電話のようなモバイル電話、ランドライン電話、インターネット電話、ポータブルビデオゲームデバイスまたは携帯情報端末(PDA)のようなハンドヘルドデバイス、パーソナルミュージックプレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビジョン、テレビジョンセットトップボックス、サーバ、介在ネットワークデバイス、メインフレームコンピュータ、任意のモバイルデバイス、あるいはグラフィカルデータを処理および/または表示する任意の他のタイプのデバイスを備え得る。
[0019] 図1の例に例示されているように、コンピューティングデバイス2は、ユーザ入力インターフェース4、中央処理ユニット(CPU)6、メモリコントローラ8、システムメモリ10、グラフィックス処理ユニット(GPU)12、グラフィックスメモリ14、ディスプレイインターフェース16、ディスプレイ18、ならびにバス20および22を含み得る。いくつかの例では、グラフィックスメモリ14が、GPU12と「オンチップ」であり得ることに留意されたい。いくつかのケースでは、図1に示されるすべてのハードウェア素子は、オンチップ、例えば、例えば、システムオンチップ(SoC)設計であり得る。ユーザ入力インターフェース4、CPU6、メモリコントローラ8、GPU12、およびディスプレイインターフェース16は、バス20を使用して互いに通信し得る。メモリコントローラ8およびシステムメモリ10はまた、バス22を使用して互いと通信し得る。バス20、22は、第3世代バス(例えば、HyperTransportバスまたはInfiniBandバス)、第2世代バス(例えば、AGP(Advanced Graphics Port)バス、PCI(Peripheral Component Interconnect)エクスプレスバス、またはAXI(Advanced eXentisible Interface)バス)、あるいは別のタイプのバスまたはデバイス接続のような、様々なバス構造のうちの何れかであり得る。図1に示される異なる構成要素間のバスおよび通信インターフェースの特定の構成は単なる例であり、同じまたは異なる構成要素を有する他のグラフィックス処理および/またはシステムコンピューティングデバイスの他の構成が、本開示の技法を実装するために使用され得ることに留意されるべきである。
[0020] CPU6は、コンピューティングデバイス2の動作を制御する汎用プロセッサまたは専用プロセッサを備え得る。ユーザは、1つまたは複数のソフトウェアアプリケーションを実行することをCPU6に行わせるために、コンピューティングデバイス2への入力を提供し得る。CPU6上で実行されるソフトウェアアプリケーションには、例えば、オペレーティングシステム、ワードプロセッサアプリケーション、電子メールアプリケーション、スプレッドシートアプリケーション、メディアプレーヤアプリケーション、ビデオゲームアプリケーション、グラフィカルユーザインターフェースアプリケーション、または別のプログラムが含まれ得る。追加的に、CPU6は、GPU12の動作を制御するためのGPUドライバ7を実行し得る。ユーザは、キーボード、マウス、マイクロフォン、タッチパッド、または、ユーザ入力インターフェース4を介してコンピューティングデバイス2に結合された別の入力デバイスのような1つまたは複数の入力デバイス(示されない)を介してコンピューティングデバイス2への入力を提供し得る。
[0021] CPU6上で実行されるソフトウェアアプリケーションは、ディスプレイ18へのグラフィックスデータのレンダリングを引き起こすようCPU6に命令する1つまたは複数のグラフィックスレンダリング命令を含み得る。いくつかの例では、ソフトウェア命令は、グラフィックスアプリケーションプログラミングインターフェース(API)に一致し得、これは例えば、OpenGL(登録商標)(Open Graphics Library)API、OpenGL ES(Open Graphics Library Embedded Systems)API、Direct3D API、X3D API、RenderMan API、WebGL API、あるいは任意の他の公のまたは専有の標準的なグラフィックスAPIである。グラフィックスレンダリング命令を処理するために、CPU6は、グラフィックスデータのレンダリングのうちのいくつかまたはすべてを行うことをGPU12に行わせるために、GPU12に1つまたは複数のグラフィックスレンダリングコマンドを発し得る(例えば、GPUドライバ7を通して)。いくつかの例では、レンダリングされるべきグラフィックスデータは、例えば、点、線、三角形、四角形、トライアングルストリップストリップ(triangle strip)、等のグラフィックスプリミティブのリストを含み得る。
[0022] メモリコントローラ8は、システムメモリ10に出入りするデータの移送を容易にする。例えば、メモリコントローラ8は、コンピューティングデバイス2内の構成要素にメモリサービスを提供するために、メモリ読取および書込コマンドを受け、システムメモリ10に関するそのようなコマンドをサービスし得る。メモリコントローラ8は、メモリバス22を介してシステムメモリ10に通信的に結合される。メモリコントローラ8は、図1では、CPU6およびシステムメモリ10の両方とは別個の処理モジュールであると例示されているが、他の例では、メモリコントローラ8の機能性のうちのいくつかまたはすべては、CPU6およびシステムメモリ10の一方または両方に実装され得る。
[0023] システムメモリ10は、CPU6による実行のためにアクセス可能なプログラムモジュールおよび/または命令、ならびに/あるいは、CPU6上で実行されるプログラムにより使用するためのデータを記憶し得る。例えば、システムメモリ10は、ディスプレイ18上にグラフィカルユーザインターフェース(GUI)を提示するために、CPU6によって使用されるウィンドウマネージャアプリケーションを記憶し得る。加えて、システムメモリ10は、ユーザアプリケーションと、これらアプリケーションに関連付けられたアプリケーションサーフェスデータとを記憶し得る。システムメモリ10は、追加的に、コンピューティングデバイス2の他の構成要素による使用のためのおよび/またはそれらによって生成される情報を記憶し得る。例えば、システムメモリ10は、GPU12のためのデバイスメモリとして機能し得、GPU12によって作用されるデータに加え、GPU12によって行われる動作に起因するデータを記憶し得る。例えば、システムメモリ10は、テクスチャバッファ、深度バッファ、ステンシルバッファ、頂点バッファ、フレームバッファ、等の任意の組み合わせを記憶し得る。システムメモリ10は、例えば、ランダムアクセスメモリ(RAM)、静的メモリ(SRAM)、動的RAM(DRAM)、読取専用メモリ(ROM)、消去可能なプログラマブルROM(EPROM)、電気的消去可能なプログラマブルROM(EEPROM(登録商標))、フラッシュメモリ、磁気データ媒体、あるいは光記憶媒体のような、1つまたは複数の揮発性および不揮発性メモリまたは記憶デバイスを含み得る。
[0024] GPU12は、ディスプレイ18に1つまたは複数のグラフィックスプリミティブをレンダリングするためにグラフィックス動作を行うように構成され得る。ゆえに、CPU6上で実行されるソフトウェアアプリケーションのうちの1つがグラフィックス処理を必要とするとき、CPU6は、グラフィックスコマンドおよびグラフィックスデータを、ディスプレイ18へのレンダリングのためにGPU12に提供し得る。グラフィックスデータは、例えば、描画コマンド、状態情報、プリミティブ情報、テクスチャ情報、等を含み得る。GPU12は、いくつかの事例では、複雑なグラフィック関連動作をCPU6よりも効率的に処理することを提供する高度に並列な構造で築かれ得る。例えば、GPU12は、並列の手法で、複数の頂点または画素に作用するように構成される複数の処理素子を含み得る。GPU12の高度に並列な性質は、いくつかの事例では、GPU12が、グラフィックス画像(例えば、GUIおよび2次元(2D)および/または3次元(3D)グラフィックスシーン)をディスプレイ18上に、CPU18を用いてこれらのシーンを直接ディスプレイ18上に描画するよりも迅速に描画することを可能にし得る。
[0025] 他の例では、GPU12は、グラフィックス以外のアプリケーションに関する計算を行うために、汎用の「シェーダプログラム」実行するように構成され得る。GPUのそのような使用は、汎用GPU(GPGPU)と呼ばれることがある。GPU処理素子の高度に並列な性質により、いくつかのタイプの算出は、CPUよりも効率的にGPUによって行われ得る。
[0026] GPU12は、いくつかの事例では、コンピューティングデバイス2のマザーボードへと一体化され得る。他の事例では、GPU12は、コンピューティングデバイス2のマザーボードにおけるポートでインストールされるグラフィックスカード上にあり得るか、コンピューティングデバイス2と相互動作するように構成された周辺デバイス内にその他の方法で組み込まれ得る。GPU12は、1つまたは複数のマイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、デジタルシグナルプロセッサ(DSP)、あるいは他の等価的な集積回路またはディスクリート論理回路といった1つまたは複数のプロセッサを含み得る。
[0027] GPU12は、グラフィックスメモリ14に直接結合され得る。ゆえに、GPU12は、バス20を使用することなく、グラフィックスメモリ14からデータを読み取り、それにデータを書き込み得る。換言すると、GPU12は、オフチップメモリの代わりに、ローカル記憶装置を使用してローカルにデータを処理し得る。これにより、GPU12は、重いバストラフィックを経験し得る、GPU12がバス20を介してデータを読み取るおよび書き込む必要性を除去することによって、より効率的な手法で動作することができる。しかしながら、いくつかの事例では、GPU12は、別個のメモリを含まず、代わりに、バス20を介してシステムメモリ10を利用し得る。グラフィックスメモリ14は、例えば、ランダムアクセスメモリ(RAM)、静的メモリ(SRAM)、動的RAM(DRAM)、消去可能なプログラマブルROM(EPROM)、電気的消去可能なプログラマブルROM(EEPROM)、フラッシュメモリ、磁気データ媒体、あるいは光記憶媒体のような、1つまたは複数の揮発性および不揮発性メモリまたは記憶デバイスを含み得る。
[0028] CPU6および/またはGPU12は、レンダリングされた画像データをフレームバッファ15に記憶し得る。フレームバッファ15は、独立したメモリであり得るか、またはシステムメモリ10内に配置され得る。ディスプレイインターフェース16は、フレームバッファ15からデータを取り出し、レンダリングされた画像データによって表される画像を表示するようにディスプレイ18を構成し得る。いくつかの例では、ディスプレイインターフェース16は、フレームバッファから取り出されたデジタル値を、ディスプレイ18が消費可能なアナログ信号へと変換するように構成されたデジタル/アナログ変換器(DAC)を含み得る。他の例では、ディスプレイインターフェース16は、ディスプレイ18上でのディスプレイプロセッサによる処理のために、デジタル値をディスプレイ18に直接パスし得る。ディスプレイ18は、モニタ、テレビジョン、投影デバイス、液晶ディスプレイ(LCD)、プラズマディスプレイパネル、オーガニックLED(OLED)ディスプレイのような発光ダイオード(LED)アレイ、ブラウン管(CRT)ディスプレイ、電子ペーパ、表面電界ディスプレイ(SED)、レーザテレビジョンディスプレイ、ナノ結晶ディスプレイ、または別のタイプのディスプレイユニットを含み得る。ディスプレイ18は、コンピューティングデバイス2内に一体化され得る。例えば、ディスプレイ18は、モバイル電話のスクリーンであり得る。代替的に、ディスプレイ18は、ワイヤードまたはワイヤレス通信リンクを介してコンピューティングデバイス2に結合されたスタンドアローンデバイスであり得る。例えば、ディスプレイ18は、ケーブルまたはワイヤレスリンクを介してパーソナルコンピュータに接続されたコンピュータモニタまたはフラットパネルディスプレイであり得る。
[0029] 本開示のプリエンプション技術は、3Dレンダリング、2Dレンダリング、GPGPUアプリケーション、またはGPUによって行われ得る任意の他の計算を含む、GPUの任意のアプリケーションに使用され得る。図2および図3は、2つの異なるGPUアプリケーションの典型的なシステムアーキテクチャの2つの例を示す。図2は、2Dおよび/または3Dグラフィックスレンダリングアプリケーションにおける図1のCPU6、GPU12、およびシステムメモリ10の例となる実装を例示するブロック図である。CPU6は、少なくとも1つのソフトウェアアプリケーション24、グラフィックスAPI26、およびGPUドライバ7を含み得、それらの各々は、CPU6上で実行される1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る。GPU12は、グラフィックス処理コマンドを実行するために共に動作する複数のグラフィックス処理段を含むグラフィックス処理パイプライン30を含み得る。GPU12は、ビニングレンダリングモードおよびダイレクトレンダリングモードを含む様々なレンダリングモードでグラフィックス処理パイプライン30を実行するように構成され得る。図2に示されるように、グラフィックス処理パイプライン30は、コマンドエンジン32、ジオメトリ処理段34、ラスタライゼーション段36、および画素処理パイプライン38を含み得る。グラフィックス処理パイプライン30内の構成要素の各々は、固定機能(fixed-function)構成要素、プログラマブル構成要素(例えば、プログラマブルシェーダユニット上で実行されるシェーダプログラムの一部としての)として、または固定機能構成要素とプログラマブル構成要素の組み合わせとして実装され得る。CPU6およびGPU12に利用可能なメモリは、システムメモリ10およびフレームバッファ15を含み得る。フレームバッファ15は、システムメモリ10の一部であり得るか、またはシステムメモリ10とは別個であり得る。フレームバッファ15は、レンダリングされた画像データを記憶し得る。
[0030] ソフトウェアアプリケーション24は、GPU12の機能性を利用する任意のアプリケーションであり得る。例えば、ソフトウェアアプリケーション24は、GUIアプリケーション、オペレーティングシステム、ポータブルマッピングアプリケーション、光学および芸術アプリケーションのためのコンピュータ支援型設計プログラム、ビデオゲームアプリケーション、あるいは2Dまたは3Dグラフィックスを使用する別のタイプのソフトウェアアプリケーションであり得る。
[0031] ソフトウェアアプリケーション24は、グラフィカルユーザインターフェース(GUI)および/またはグラフィックスシーンをレンダリングするようGPU12に命令する1つまたは複数の描画命令を含み得る。例えば、描画命令は、GPU12によってレンダリングされるべき1つまたは複数のグラフィックスプリミティブのセットを定義する命令を含み得る。いくつかの例では、描画命令は、集合的に、GUIにおいて使用される複数のウィンドウサーフェス(windowing surfaces)のすべてまたは一部を定義し得る。追加の例では、描画命令は、集合的に、アプリケーションによって定義されたモデル空間またはワールド空間内に1つまたは複数のグラフィックスオブジェクトを含むグラフィックスシーンのすべてまたは一部を定義し得る。
[0032] ソフトウェアアプリケーション24は、1つまたは複数のグラフィックスプリミティブを、ディスプレイ可能なグラフィックス画像へとレンダリングするための1つまたは複数のコマンドをGPU12に発するために、グラフィックスAPI26を介して、GPUドライバ7を起動し得る。例えば、ソフトウェアアプリケーション24は、GPU12にプリミティブ定義を提供するために、グラフィックスAPI26を介して、GPUドライバ7を起動し得る。いくつかの事例では、プリミティブ定義が、例えば、三角形、四角形、トライアングルファン(triangle fan)、トライアングルストリップ、等の描画プリミティブのリストの形式で、GPU12に提供され得る。プリミティブ定義は、レンダリングされるべきプリミティブに関連付けられた1つまたは複数の頂点を指定する頂点仕様(vertex specification)を含み得る。頂点仕様は、各頂点についての位置座標、および、いくつかの事例では、この頂点に関連付けられた他の属性、例えば、色座標、法線ベクトル、およびテクスチャ座標を含み得る。プリミティブ定義はまた、プリミティブタイプ情報(例えば、三角形、四角形、トライアングルファン、トライアングルストリップ、等)、スケーリング情報、回転情報、等を含み得る。ソフトウェアアプリケーション24によってGPUドライバ7に発せられる命令に基づいて、GPUドライバ7は、プリミティブをレンダリングするためにGPU12が行う1つまたは複数の動作を指定する1つまたは複数のコマンドを公式化し得る。GPU12がCPU6からコマンドを受けると、グラフィックス処理パイプライン30は、このコマンドを復号し、このコマンドにおいて指定された動作を行うようにグラフィックス処理パイプライン30内の1つまたは複数の処理素子を構成する。指定された動作を行った後、グラフィックス処理パイプライン30は、レンダリングされたデータを、ディスプレイデバイスに関連付けられたフレームバッファ40に出力する。グラフィックスパイプライン30は、ビニングレンダリングモードおよびダイレクトレンダリングモードを含む、複数の異なるレンダリングモードのうちの1つにおいて実行するように構成され得る。ビニングレンダリングモードおよびダイレクトレンダリングモードの動作が以下により詳細に説明されるだろう。
[0033] GPUドライバ7は、1つまたは複数のシェーダプログラムをコンパイルするように、および、コンパイルされたシェーダプログラムを、GPU12内に含まれる1つまたは複数のプログラマブルシェーダユニットへとダウンロードするようにさらに構成され得る。シェーダプログラムは、例えば、GLSL(OpenGL Shading Language)、HLSL(High Level Shading Language)、Cg(C for Graphics)シェーディング言語、等の高レベルのシェーディング言語で書かれ得る。コンパイルされたシェーダプログラムは、GPU12内のプログラマブルシェーダユニットの動作を制御する1つまたは複数の命令を含み得る。例えば、シェーダプログラムは、頂点シェーダプログラムおよび/または画素シェーダプログラムを含み得る。頂点シェーダプログラムは、プログラマブル頂点シェーダユニットまたは統合シェーダユニットの実行を制御し、1つまたは複数の頂点単位の(per-vertex)動作を指定する命令を含み得る。画素シェーダプログラムは、プログラマブル画素シェーダユニットまたは統合シェーダユニットの実行を制御する画素シェーダプログラムを含み、1つまたは複数の画素単位の(per-pixel)動作を指定する命令を含み得る。本開示のいくつかの例となる実施形態にしたがって、画素シェーダプログラムはまた、ソース画素についての対応するデスティネーションアルファ値(destination alpha value)に基づいて、そのソース画素について、テクスチャ値が取り出されることを選択的に引き起こす命令を含み得る。
[0034] 以下でより詳細に説明されるように、グラフィックスドライバ7はまた、GPU12に、別のジョブに有利なようにその現在の処理を停止するよう求めるプリエンプション要求を発するためにソフトウェアアプリケーション24によって使用され得る。
[0035] グラフィックス処理パイプライン30は、グラフィックスドライバ28を介してCPU6から1つまたは複数のグラフィックス処理コマンドを受けるように、および、このグラフィックス処理コマンドを実行してディスプレイ可能なグラフィックス画像を生成するように構成され得る。上述したように、グラフィックス処理パイプライン30は、グラフィックス処理コマンドを実行するために共に動作する複数の段を含む。しかしながら、そのような段が、必ずしも、別個のハードウェアブロックにおいて実装される必要がないことは留意されるべきである。例えば、ジオメトリ処理段34および画素処理パイプライン38の一部は、統合シェーダユニットの一部として実装され得る。この場合も同様に、グラフィックスパイプライン30は、ビニングレンダリングモードおよびダイレクトレンダリングモードを含む、複数の異なるレンダリングモードのうちの1つにおいて実行するように構成され得る。
[0036] コマンドエンジン32は、グラフィックス処理コマンドを受け得、そして、このグラフィックス処理コマンドを実行するための様々な動作を行うようにグラフィックス処理パイプライン30内の残りの処理段を構成し得る。グラフィックス処理コマンドは、例えば、描画コマンドおよびグラフィックス状態コマンドを含み得る。描画コマンドは、1つまたは複数の頂点についての位置座標、および、いくつかの事例では、これら頂点の各々に関連付けられた他の属性値、例えば、色座標、法線ベクトル、テクスチャ座標、およびフォグ座標(fog coordinates)を指定する頂点仕様コマンドを含み得る。グラフィックス状態コマンドは、プリミティブタイプコマンド、変換コマンド、点灯コマンド(lighting command)、等を含み得る。プリミティブタイプコマンドは、レンダリングされるべきプリミティブのタイプ、および/または、プリミティブを形成するために頂点がどのように合成されるのかを指定し得る。変換コマンドは、頂点に対して実行すべき変換のタイプを指定し得る。点灯コマンドは、グラフィックスシーン内での異なる光の配置、タイプ、および/または方向を指定し得る。コマンドエンジン32は、1つまたは複数の受けたコマンドに関連付けられた頂点および/またはプリミティブに対してジオメトリ処理を行うことをジオメトリ処理段34に行わせ得る。
[0037] ジオメトリ処理段34は、1つまたは複数の頂点に対して頂点単位の動作および/またはプリミティブセットアップ動作を行い、ラスタライゼーション段36のためのプリミティブデータを生成し得る。各頂点は、属性のセット、例えば、位置座標、色値、法線ベクトル、およびテクスチャ座標、に関連付けられ得る。ジオメトリ処理段34は、様々な頂点単位の動作にしたがって、これら属性のうちの1つまたは複数を修正する。例えば、ジオメトリ処理段34は、頂点位置座標に対して1つまたは複数の変換を行い、修正済み頂点位置座標を生成し得る。ジオメトリ処理段34は、例えば、頂点位置座標に対してモデリング変換、ビューイング変換、投影変換、ModelView変換、ModelViewProjection変換、ビューポート変換、および深度範囲スケーリング変換のうちの1つまたは複数を適用して、修正済み頂点位置座標を生成し得る。いくつかの事例では、頂点位置座標は、モデル空間座標であり得、修正済み頂点位置座標は、スクリーン空間座標であり得る。スクリーン空間座標は、モデリング変換、ビューイング変換、投影変換、ビューポート変換の適用後に取得され得る。いくつかの事例では、ジオメトリ処理段34はまた、頂点に対して頂点単位の点灯動作を行い、これら頂点についての修正済み色座標を生成し得る。ジオメトリ処理段34はまた、例えば、正規変換、正規の正規化演算(normal normalization operation)、ビューボリュームクリッピング(view volume clipping)、同種分割(homogenous division)、および/またはバックフェースカリング演算(backface culling operation)を含む他の動作を行い得る。
[0038] ジオメトリ処理段34は、ラスタライズされるべきプリミティブを定義する1つまたは複数の修正済み頂点のセットを含むプリミティブデータに加え、プリミティブを形成するために頂点がどのように合成されるのかを指定するデータを生成し得る。修正済み頂点の各々は、例えば、修正済み頂点位置座標と、この頂点に関連付けられた処理された頂点属性値とを含み得る。プリミティブデータは、集合的に、グラフィックス処理パイプライン30のさらなる段によってラスタライズされるべきプリミティブに対応し得る。概念的に、各頂点は、プリミティブの2つのエッジが交わるプリミティブのコーナに対応し得る。ジオメトリ処理段34は、プリミティブデータを、さらなる処理のために、ラスタライゼーション段36に提供し得る。
[0039] いくつかの例では、ジオメトリ処理段34のすべてまたは一部は、1つまたは複数のシェーダユニット上で実行される1つまたは複数のシェーダプログラムによって実装され得る。例えば、ジオメトリ処理段34は、そのような例では、頂点シェーダ、ジオメトリシェーダ、またはそれらの任意の組み合わせによって実装され得る。他の例では、ジオメトリ処理段34は、固定機能ハードウェア処理パイプラインとして、または、固定機能ハードウェアと、1つまたは複数のシェーダユニット上で実行される1つまたは複数のシェーダプログラムとの組み合わせとして実装され得る。
[0040] ラスタライゼーション段36は、ジオメトリ処理段34から、ラスタライズされるべきプリミティブを表すプリミティブデータを受け、このプリミティブをラスタライズして、ラスタライズされたプリミティブに対応する複数のソース画素を生成するように構成される。いくつかの例では、ラスタライゼーション段36は、ラスタライズされるべきプリミティブによってどのスクリーン画素ロケーションがカバーされるのかを決定し、このプリミティブによってカバーされると決定された各スクリーン画素ロケーションに対するソース画素を生成し得る。ラスタライゼーション段36は、例えば、エッジウォーキング技法、評価エッジ式、等のような、当業者に知られている技法を使用することによって、プリミティブによってどのスクリーン画素ロケーションがカバーされるのかを決定し得る。ラスタライゼーション段36は、結果として生じるソース画素を、さらなる処理のために、画素処理パイプライン38に提供し得る。
[0041] ラスタライゼーション段36によって生成されるソース画素は、例えば、デスティネーション画素のようなスクリーン画素ロケーションに対応し、1つまたは複数の色属性に関連付けられ得る。特定のラスタライズされたプリミティブのために生成されるすべてのソース画素は、ラスタライズされたプリミティブに関連付けられていると考えられ得る。プリミティブによってカバーされるべきであると、ラスタライゼーション段36によって決定された画素は、概念的に、プリミティブの頂点を表す画素、プリミティブのエッジを表す画素、および、プリミティブの内部を表す画素を含み得る。
[0042] 画素処理パイプライン38は、ラスタライズされたプリミティブに関連付けられたソース画素を受け、ソース画素に対して1つまたは複数の画素単位の動作を行うように構成される。画素処理パイプライン38によって行われ得る画素単位の動作は、例えば、アルファテスト、テクスチャマッピング、色計算、画素シェーディング、画素単位の点灯、フォグ処理、ブレンディング、画素オーナーシップテスト、ソースアルファテスト、ステンシルテスト、深度テスト、シザーテスト(scissors test)、および/またはすストリッピング動作を含む。加えて、画素処理パイプライン38は、1つまたは複数の画素単位の動作を行うために、1つまたは複数の画素シェーダプログラムを実行し得る。画素処理パイプライン38によって生成される結果として生じるデータは、本明細書では、デスティネーション画素データと呼ばれ、フレームバッファ15に記憶され得る。デスティネーション画素データは、処理されたソース画素と同じディスプレイロケーションを有するフレームバッファ15内のデスティネーション画素に関連付けられ得る。デスティネーション画素データは、例えば、色値、デスティネーションアルファ値、深度値、等のデータを含み得る。
[0043] フレームバッファ15は、GPU12のためのデスティネーション画素を記憶する。各デスティネーション画素は、一意的なスクリーン画素ロケーションに関連付けられ得る。いくつかの例では、フレームバッファ15は、デスティネーション画素ごとに色成分およびデスティネーションアルファ値を記憶し得る。例えば、フレームバッファ15は、画素ごとに赤、緑、青、アルファ(RGBA)成分を記憶し得、ここで、「RGB」成分は、色値に対応し、「A」成分は、デスティネーションアルファ値に対応する。フレームバッファ15およびシステムメモリ10は別個のメモリユニットであるように例示されているが、他の例では、フレームバッファ15は、システムメモリ10の一部であり得る。
[0044] 図3は、GPGPUアプリケーションにおける図1のCPU6、GPU12、およびシステムメモリ10の例となる実装を例示するブロック図である。図1のシステムのGPU12が、GPU上で実行されるためにロードされるソフトウェア、および、GPUの動作を制御するために使用されるドライバに基づいて、グラフィックス処理タスク、GPGPUタスク、または、GPUに適した任意の他のタイプのタスクを行うために選択的に駆動され得ることに留意されるべきである。図3の例では、CPU6は、少なくとも1つのソフトウェアアプリケーション25およびGPGPUドライバ50を実行し得、これらの各々は、CPU6上で実行される1つまたは複数のソフトウェアアプリケーションまたはサービスであり得る。GPU12は、汎用シェーダ52を実行するように構成され得る。汎用シェーダ52は、算出を行うGPU12の処理素子の並列性質を利用するGPU12上での実行のために適用可能な任意のアプリケーションであり得る。この場合も同様に、CPU6およびGPU12に利用可能なメモリは、システムメモリ10を含み得る。GPU12はまた、より速いローカルグラフィックスメモリ14を利用し得る。
[0045] ソフトウェアアプリケーション25は、GPU12の機能性を利用する任意のアプリケーションであり得る。例えば、ソフトウェアアプリケーション25は、GPU2によって複雑な算出がなされることを必要とするアプリケーションであり得る。
[0046] ソフトウェアアプリケーション25は、例えば、汎用シェーダ52を実行するための1つまたは複数のコマンドをGPU12に発するために、GPGPUドライバ50を伴い得る。以下でより詳細に説明されるように、GPGPUドライバ50は、別のジョブに有利なようにその現在の処理を停止するよう求めるプリエンプション要求をGPU12に発するために、ソフトウェアアプリケーション25によって使用され得る。
[0047] 上述したように、本開示は、グラフィックス処理のための技法に関し、より具体的には、任意の制御ポイントでのプリエンプションのための技法に関する。具体的には、本開示は、コンピューティングシステムにおけるI/Oデバイスのためのプリエンプションメカニズムの技法に関する。具体的には、本開示は、グラフィックス処理動作、例えば、グラフィックス処理ユニット(GPU)上で実行されるグラフィックス処理、を停止および再開するためにオペレーティングシステムで使用されるプリエンプションメカニズムの観点から説明されるだろう。
[0048] 簡単に言えば、GPUに対するプリエンプション要求は、GPU処理を必要とする別のより高い優先度の動作に有利なようにコマンドバッファの現在のグラフィックス処理を停止するよう求める、グラフィックス処理システムの別のエンティティ(例えば、中央処理ユニット(CPU)上で実行されるアプリケーション)によって行われる要求である。典型的に、そのようなプリエンプション要求は、オペレーティングシステムから発生するだろう。このように、より高い優先度の動作は、その時点でオペレーティングシステムによってより高い優先度であるとみなされる、GPU12によって実行可能な任意の動作であり得る。
[0049] 図4は、例となるプリエンプション要求を例示するブロック図である。図4に示されるように、CPU6は、現在のタスクの実行を停止するよう求めるプリエンプション要求をGPU12に発し得る。いくつかの例では、プリエンプション要求は、GPUドライバ7を通してGPU12に通信され得る。図4の例では、GPU12によって実行される現在のタスクは、コマンドバッファ68中のレンダリングコマンドストリームである。コマンドバッファ68は、三角形プリミティブA、B、およびCに対する描画コマンドを描写する(depict)。CPU6のプリエンプション要求は、現在のタスクを停止し、代わりに、例えば、二次コマンドバッファ70中に示されるレンダリングコマンドのような、異なるタスクの処理を始めるようGPU12に命令する。この場合も同様に、二次コマンドバッファ70中のコマンドは、三角形プリミティブの異なるセットのための異なる描画コマンドである(例えば、コマンドバッファ68を通じて現在レンダリングされていた異なるフレームまたはタイルをレンダリングするために)。プリエンプション要求は、レンダリングコマンドストリームに限られず、しかしながら、任意のタイプのコマンドストリーム(レンダリング、汎用計算、または他のもの)に有利なようにGPU12によって現在実行されている何らかのコマンドストリームトをプリエンプトするように作られ得ることは留意されるべきである。
[0050] グラフィックス処理のプリエンプションのための従来の技法は、いわゆる「セーフポイント」の使用に頼る。すなわち、GPUが、現在の処理をプリエンプトするよう求める要求を受けると、GPUは、特定のポイント(例えば、コマンドバッファ中の特定のポイント)まで処理し続け、そのポイントで処理の状態に関する情報を保存する。そのような情報は、処理が停止したおよび再開されるべきコマンドバッファ中のポイント、GPU処理の出力を受ける任意のバッファのコンテンツ、コマンドのそのポイントで任意のGPU処理のために入力データとして使用され得る1つまたは複数のバッファのコンテンツを含み得る。
[0051] セーフポイントを利用する従来のプリエンプションメカニズムは、ハードウェア実装形態およびソフトウェア実装形態の両方を含む。いくつかのソフトウェアソリューションは、セーフポイントがどこに位置するのかを決定するために、ダイレクトメモリアクセスバッファのサイズを使用する。他のソフトウェアソリューションは、どこにセーフポイントを位置させるかを決定するために、描画境界またはビン境界(すなわち、フレームの特定の領域)を使用する。プリエンプションのための他の技法は、ビニング、三角形、または画素レベルで、粒度の細かいプリエンプションに影響を及ぼすための追加のハードウェアサポートを利用し得る。ソフトウェアだけの技法よりも早く動作することを生成するが、そのようなハードウェア技法は、より高い複雑性を必要とする。
[0052] いずれのケースにおいても、そのような状態情報を保存することで、GPUは、正確な入力および出力データを用いて既知のポイントで処理を再開することができる。しかしながら、プリエンプション要求を受けた場合に、セーフポイントまで処理し、状態情報を保存することは、不確定の時間量がかかる。プリエンプション要求は、GPUによって実行されるコマンドバッファ中の非同期ポイントで発生し得、このように、GPUがセーフポイントに到達するまでにどれだけ動作する必要があり得るかを予測することは可能ではないだろう。いくつかの状況では、プリエンプション要求に応答して、GPUがセーフポイントに到達し、状態情報を保存し、新しいコマンドバッファの処理を開始するための時間は、望ましくないほど長い可能性がある。いくつかのアプリケーションは、より高い優先度のグラフィックスタスクが迅速に開始され得ない場合、乏しいユーザ経験に帰着し得る。
[0053] 例えば、ユーザインターフェース(UI)は、プリエンプション要求に対する応答の長い遅延が望ましくないアプリケーションの例である。一般に、任意のアプリケーション、または、ユーザの注意の焦点となるように構成されたアプリケーションの一部は、別の例の低遅延プリエンプション要求によって利益を得得る(例えば、ビデオ、ポップアップテキスト、またはユーザの焦点の中心であるアプリケーションの任意の他の部分のレンダリングに有利なように背景のレンダリングをプリエンプトすること)。別の例となるアプリケーションは拡張現実アプリケーションであり、ここでは、ユーザの視点の動きに基づいてヘッドアップディスプレイ(HUD)を適切に配置された状態に保つことが、他のタスクがGPUによって実行されることよりも重要であり得る。
[0054] これらの欠点に鑑みて、本開示は、任意の制御ポイントでのプリエンプション要求を処理するための技法を提示する。具体的には、本開示の技法は、より高い優先度のタスクを実行するよう求めるプリエンプション要求に応答して、コマンドバッファの部分的な処理の結果が放棄(throw out)され得、そのコマンドバッファが最初から再実行され得るように、元のタスクのためのコマンドバッファを実行するためにGPUによって使用される読取修正書込リソースをダブルバッファすることを含む。このように、プリエンプション要求は、元のタスクの処理を再開するための安定かつ正常な(fault-free)状態(すなわち、正確な入力データを有する状態)を依然として維持しつつ、迅速に処理され得る。本開示の技法は、単独で、または、既存のセーフポイントプリエンプション技法とともに使用され得る。すなわち、本開示の技法は、状況別にまたはアプリケーション単位で適用され得、すべての他のプリエンプション技法には取って代わる必要はない。
[0055] 図5は、本開示のプリエンプション技法を例示する概念図である。図5に示されるように、GPU12は、コマンドバッファ68中のコマンドストリームを実行するように構成され得る。この場合も同様に、コマンドバッファ68は、3Dグラフィックス、2Dグラフィックス、GPGPUシェーダアプリケーションに対するコマンドを含む任意のタイプのコマンド、またはGPUにおいて実行され得る任意の他のタイプのコマンドを含み得る。図5に示されるように、コマンドバッファ68は、3Dグラフィックスレンダリングコマンド(例えば、三角形描画コマンド)を含む。
[0056] コマンドバッファ内の任意のポイントにおけるコマンドバッファ68のプリエンプションを許可するために、任意のデータがGPU12によって修正される前に、GPU12によって使用される任意の読取修正書込リソースが複写される。図5に示されるように、フレームバッファ72は、コマンドバッファ68中のコマンドストリームを実行するための入力データとして使用され得る読取修正書込リソースである。フレームバッファ72は、フレームバッファ72の任意のコンテンツがGPU12によって修正される前に、フレームバッファ72の複写(フレームバッファ複写74)がメモリ(例えば、第1のバッファ)に記憶されるように、GPU12またはCPU6によって複写される(すなわち、ダブルバッファされる)。フレームバッファ72の修正済みコンテンツは、第2のバッファと考えられ得る。本開示の技法は、フレームバッファに限定されず、フレームバッファ、レンダターゲット、非順序アクセスビュー(UAV)バッファ、サーフェス、等、を含む任意のタイプの読取修正書込リソースによって利用され得る。
[0057] フレームバッファのコンテキストでは、第1のバッファ(すなわち、フレームバッファ複写74)は、以前のフレームバッファ(すなわち、コマンドバッファ中のコマンドが実行される前のフレームバッファのコンテンツ)の複写である。第2のバッファ(すなわち、フレームバッファ72)は、現在レンダリングされたフレームバッファ(すなわち、現在のフレームバッファ)についての修正済みコンテンツを含む。
[0058] フレームバッファ72の元のコンテンツの複写を含む、第1のバッファ(すなわち、フレームバッファ複写74)ならびに第2のバッファ(フレームバッファ72の修正済みコンテンツを含む)は、別個のメモリユニット、単一のメモリユニットの別個の部分、または、第1のバッファと第2のバッファとが別々にアドレス可能な空間である任意の他の構成のメモリユニットとして構成され得る。
[0059] このコンテキストでは、ダブルバッファリングが、ピンポンバッファリングと同じではないことが理解されるべきである。ピンポンバッファリングは、2つのメモリバッファ(1つは読取り用で、1つは書込み用)を使用することを伴い得る。本開示のコンテキストでは、ダブルバッファリングは、読取修正書込リソースの複写を、そのリソースを使用するコマンドストリーム全体が完了したことが確認されるまで記憶すること(または、そのようなリソースの一部の複写を記憶すること)を伴う。
[0060] 本開示の一例では、未決のコマンドバッファ68(または、GPU12によって現在処理されている任意のコマンドストリーム)は、完了について、GPU12によってトラッキングされる。プリエンプション要求(例えば、GPUドライバ7のような、CPU6上で実行されるアプリケーションからの)が、コマンドバッファ68中のすべてのコマンドが完了する前のあるポイントで発生する場合、GPU12は、そのポイントまでに作られたフレームバッファ72中のすべての修正済みコンテンツを破棄する。プリエンプション要求の対象であったタスクを完了した後に、GPU12は、元のコマンドバッファ68に戻り、コマンドストリームの最初から開始する。従来のシステムでは、コマンドストリームにおいて使用される入力データのうちのいくつかが、コマンドストリームの処理を通して上書きされていたであろうことから(例えば、フレームバッファ72中の修正済みコンテンツ)、これは可能ではなかっただろう。しかしながら、フレームバッファ72がダブルバッファされているため、GPU12は、プリエンプションの後にコマンドバッファ68の実行を再開する(reinitiate)際に、フレームバッファ複写74を入力として使用し得る。次に、フレームバッファ複写74は、それ自体がダブルバッファされるだろう。
[0061] 本開示の別の例では、コマンドバッファが連続してプリエンプトされる状況を回避するために、さらなる技法が含まれ得る。本開示の技法は、プリエンプトされたコマンドバッファを最初から再開することを含むため、完了までにより長い時間がかかるいくつかのコマンドバッファが1回または複数回プリエンプトされ得ることは理解され得る。所望よりも長い時間の間コマンドバッファがプリエンプトされる状況を回避するために、本開示は、GPU12、GPUドライバ7、またはCPU6上で実行される何らかのアプリケーションのいずれかによって実行され、かつ、特定のコマンドバッファがプリエンプトされた回数をカウントするカウンティングメカニズムを含むことをさらに提案する。プリエンプションの回数が何らかの閾値を上回ると、そのコマンドバッファのこれ以上のプリエンプションは許可されない。閾値は、GPU12によって実行されているアプリケーションのタイプによって変動し得る。一般に、複雑な計算ジョブ(例えば、汎用GPUアプリケーション)は、他のアプリケーションよりも頻繁にプリエンプトされることを予期し得、プリエンプションの回数が制限されている技法から利益を享受し得る。
[0062] 図6は、本開示の一例に係る、方法を例示するフローチャートである。図6の技法は、GPU12および/またはCPU6を含む、1つまたは複数のプロセッサによって実行され得る。
[0063] 本開示の一例では、GPU12は、例えば、読取修正書込メモリリソース内のデータに作用するコマンドのような、コマンドバッファ中のコマンドを実行するように構成され得る(600)。GPU12は、読取修正書込メモリリソースの元データを第1のバッファに記憶し(602)、コマンドバッファ中のコマンドを実行することで生成された任意の修正済みデータを第2のバッファに記憶する(604)ようにさらに構成され得る。本開示の一例では、読取修正書込メモリリソースは、フレームバッファであり、第1のバッファは、以前のフレームのためのフレームバッファの複写であり、第2のバッファは、現在のフレームバッファである。
[0064] GPU12は、コマンドバッファ中のすべてのコマンドを完了する前に、コマンドバッファ中のコマンドの実行をプリエンプトする(606)ようにさらに構成され得る。本開示の一例では、GPU12は、すべてのコマンドが完了したことを決定するために、コマンドバッファ中のコマンドの完了をトラッキングするようにさらに構成され得る。実行をプリエンプトした後に、GPU12は、第1のバッファ中の元データを使用して、コマンドバッファの初めからコマンドの実行を再開する(608)ようにさらに構成され得る。
[0065] 本開示の別の例では、GPU12は、コマンドバッファをメモリに記憶し、コマンドバッファ中のコマンドの実行をプリエンプトすることに応答して二次コマンドバッファ中のコマンドを実行するように構成され得る。本開示の一例では、GPU12は、中央処理ユニット上で実行されるソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、コマンドの実行をプリエンプトするように構成される。一例では、ソフトウェアは、グラフィックスドライバを含む。
[0066] 本開示の別の例では、GPU12は、コマンドバッファがプリエンプトされる回数をトラッキングし、コマンドバッファがプリエンプトされる回数が閾値を上回るケースではプリエンプションを拒否し、コマンドバッファがプリエンプトされる回数が閾値を下回るケースではプリエンプションを許可するように構成され得る。
[0067] 1つまたは複数の例では、上述した機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組み合わせで実装され得る。ソフトウェアで実装される場合、これら機能は、非一時的なコンピュータ可読媒体を備える製品(article of manufacture)上に1つまたは複数の命令またはコードとして記憶され得る。コンピュータ可読媒体は、コンピュータデータ記憶媒体を含み得る。データ記憶媒体は、本開示で説明された技法の実装のための命令、コード、および/またはデータ構造を取り出すために、1つまたは複数のコンピュータあるいは1つまたは複数のプロセッサによってアクセスされ得る任意の利用可能な媒体であり得る。限定ではなく例として、このようなコンピュータ可読媒体には、RAM、ROM、EEPROM、CD−ROMまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、フラッシュメモリ、あるいは、データ構造または命令の形式で所望のプログラムコードを記憶または搬送するために使用されることができ、かつコンピュータによってアクセスされることができる任意の他の媒体が含まれ得る。本明細書で使用される場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピー(登録商標)ディスク、およびブルーレイディスクを含み、ここで、ディスク(disk)は通常、磁気的にデータを再生し、ディスク(disc)は、レーザーを用いて光学的にデータを再生する。上記の組み合わせもまた、コンピュータ可読媒体の範囲内に含まれるべきである。
[0068] コードは、1つまたは複数のDSP、汎用マイクロプロセッサ、ASIC、FPGA、あるいは他の等価的な集積回路またはディスクリート論理回路のような1つまたは複数のプロセッサによって実行され得る。加えて、いくつかの態様では、本明細書で説明された機能性は、専用のハードウェアおよび/またはソフトウェアモジュール内に提供され得る。また、本技法は、1つまたは複数の回路または論理素子で十分に実装され得る。
[0069] 本開示の技法は、ワイヤレスハンドセット、集積回路(IC)、またはICのセット(例えば、チップセット)を含む、幅広い種類のデバイスまたは装置で実装され得る。様々な構成要素、モジュール、またはユニットは、開示された技法を行うように構成されたデバイスの機能的な態様を強調するために、本開示では説明されているが、必ずしも異なるハードウェアユニットによる実現を必要とはしない。むしろ、上述したように、様々なユニットは、コーデックハードウェアユニットへと組み合わせられるか、あるいは、上述した1つまたは複数のプロセッサを含む、相互動作するハードウェアユニットの集合によって、適切なソフトウェアおよび/またはファームウェアと併せて提供され得る。
[0070] 様々な例が説明されている。これらの例および他の例は、以下の特許請求の範囲の範囲内にある。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
[C1]
グラフィックス処理の方法であって、
グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用する、
前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
を備える方法。
[C2]
前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
をさらに備える、C1に記載の方法。
[C3]
前記コマンドバッファをメモリに記憶することと、
前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
をさらに備える、C1に記載の方法。
[C4]
中央処理ユニット上で実行されるソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
をさらに備える、C1に記載の方法。
[C5]
前記ソフトウェアは、グラフィックスドライバを含む、C4に記載の方法。
[C6]
前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、C1に記載の方法。
[C7]
前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
をさらに備える、C1に記載の方法。
[C8]
グラフィックス処理のために構成された装置であって、
1つまたは複数のプロセッサ
を備え、前記1つまたは複数のプロセッサは、
グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用する、
前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
を行うようにさらに構成される、装置。
[C9]
前記1つまたは複数のプロセッサは、
前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
を行うようにさらに構成される、C8に記載の装置。
[C10]
前記1つまたは複数のプロセッサは、
前記コマンドバッファをメモリに記憶することと、
前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
を行うようにさらに構成される、C8に記載の装置。
[C11]
前記1つまたは複数のプロセッサは、
中央処理ユニット上で実行されるソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
を行うようにさらに構成される、C8に記載の装置。
[C12]
前記ソフトウェアは、グラフィックスドライバを含む、C11に記載の装置。
[C13]
前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、C8に記載の装置。
[C14]
前記1つまたは複数のプロセッサは、
前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
を行うようにさらに構成される、C8に記載の装置。
[C15]
グラフィックス処理のために構成された装置であって、
グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行するための手段と、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
前記読取修正書込メモリリソースの元データを第1のバッファに記憶するための手段と、
前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶するための手段と、
前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトするための手段と、
実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開するための手段と
を備える装置。
[C16]
前記コマンドバッファ中の前記コマンドの完了をトラッキングするための手段
をさらに備える、C15に記載の装置。
[C17]
前記コマンドバッファをメモリに記憶するための手段と、
前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行するための手段と
をさらに備える、C15に記載の装置。
[C18]
中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトするための手段
をさらに備える、C15に記載の装置。
[C19]
前記ソフトウェアは、グラフィックスドライバを含む、C18に記載の装置。
[C20]
前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、C15に記載の装置。
[C21]
前記コマンドバッファがプリエンプトされる回数をトラッキングするための手段と、
前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否するための手段と、
前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可するための手段と
をさらに備える、C15に記載の装置。
[C22]
命令を記憶したコンピュータ可読記憶媒体であって、前記命令は、実行されると、
グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
を、グラフィックス処理のためのデバイスの1つまたは複数のプロセッサに行わせる、コンピュータ可読記憶媒体。
[C23]
前記命令は、
前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
を前記1つまたは複数のプロセッサにさらに行わせる、C22に記載のコンピュータ可読記憶媒体。
[C24]
前記命令は、
前記コマンドバッファをメモリに記憶することと、
前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
を前記1つまたは複数のプロセッサにさらに行わせる、C22に記載のコンピュータ可読記憶媒体。
[C25]
前記命令は、
中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
を前記1つまたは複数のプロセッサにさらに行わせる、C22に記載のコンピュータ可読記憶媒体。
[C26]
前記ソフトウェアは、グラフィックスドライバを含む、C25に記載のコンピュータ可読記憶媒体。
[C27]
前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、C22に記載のコンピュータ可読記憶媒体。
[C28]
前記命令は、
前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
を前記1つまたは複数のプロセッサにさらに行わせる、C22に記載のコンピュータ可読記憶媒体。
[C29]
グラフィックス処理ユニットであって、
グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
を行うように構成されたグラフィックス処理ユニット。
[C30]
前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
を行うようにさらに構成される、C29に記載のグラフィックス処理ユニット。
[C31]
前記コマンドバッファをメモリに記憶することと、
前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
を行うようにさらに構成された、C29に記載のグラフィックス処理ユニット。
[C32]
中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
を行うようにさらに構成された、C29に記載のグラフィックス処理ユニット。
[C33]
前記ソフトウェアは、グラフィックスドライバを含む、C32にグラフィックス処理ユニット。
[C34]
前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、C29に記載のグラフィックス処理ユニット。
[C35]
前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
を行うようにさらに構成された、C29に記載のグラフィックス処理ユニット。

Claims (35)

  1. グラフィックス処理の方法であって、
    グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用する、
    前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
    前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
    前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
    実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
    を備える方法。
  2. 前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
    をさらに備える、請求項1に記載の方法。
  3. 前記コマンドバッファをメモリに記憶することと、
    前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
    をさらに備える、請求項1に記載の方法。
  4. 中央処理ユニット上で実行されるソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
    をさらに備える、請求項1に記載の方法。
  5. 前記ソフトウェアは、グラフィックスドライバを含む、請求項4に記載の方法。
  6. 前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、請求項1に記載の方法。
  7. 前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
    前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
    前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
    をさらに備える、請求項1に記載の方法。
  8. グラフィックス処理のために構成された装置であって、
    1つまたは複数のプロセッサ
    を備え、前記1つまたは複数のプロセッサは、
    グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用する、
    前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
    前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
    前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
    実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
    を行うようにさらに構成される、装置。
  9. 前記1つまたは複数のプロセッサは、
    前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
    を行うようにさらに構成される、請求項8に記載の装置。
  10. 前記1つまたは複数のプロセッサは、
    前記コマンドバッファをメモリに記憶することと、
    前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
    を行うようにさらに構成される、請求項8に記載の装置。
  11. 前記1つまたは複数のプロセッサは、
    中央処理ユニット上で実行されるソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
    を行うようにさらに構成される、請求項8に記載の装置。
  12. 前記ソフトウェアは、グラフィックスドライバを含む、請求項11に記載の装置。
  13. 前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、請求項8に記載の装置。
  14. 前記1つまたは複数のプロセッサは、
    前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
    前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
    前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
    を行うようにさらに構成される、請求項8に記載の装置。
  15. グラフィックス処理のために構成された装置であって、
    グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行するための手段と、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
    前記読取修正書込メモリリソースの元データを第1のバッファに記憶するための手段と、
    前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶するための手段と、
    前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトするための手段と、
    実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開するための手段と
    を備える装置。
  16. 前記コマンドバッファ中の前記コマンドの完了をトラッキングするための手段
    をさらに備える、請求項15に記載の装置。
  17. 前記コマンドバッファをメモリに記憶するための手段と、
    前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行するための手段と
    をさらに備える、請求項15に記載の装置。
  18. 中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトするための手段
    をさらに備える、請求項15に記載の装置。
  19. 前記ソフトウェアは、グラフィックスドライバを含む、請求項18に記載の装置。
  20. 前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、請求項15に記載の装置。
  21. 前記コマンドバッファがプリエンプトされる回数をトラッキングするための手段と、
    前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否するための手段と、
    前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可するための手段と
    をさらに備える、請求項15に記載の装置。
  22. 命令を記憶した非一時的なコンピュータ可読記憶媒体であって、前記命令は、実行されると、
    グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
    前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
    前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
    前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
    実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
    を、グラフィックス処理のためのデバイスの1つまたは複数のプロセッサに行わせる、非一時的なコンピュータ可読記憶媒体。
  23. 前記命令は、
    前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
    を前記1つまたは複数のプロセッサにさらに行わせる、請求項22に記載の非一時的なコンピュータ可読記憶媒体。
  24. 前記命令は、
    前記コマンドバッファをメモリに記憶することと、
    前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
    を前記1つまたは複数のプロセッサにさらに行わせる、請求項22に記載の非一時的なコンピュータ可読記憶媒体。
  25. 前記命令は、
    中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
    を前記1つまたは複数のプロセッサにさらに行わせる、請求項22に記載の非一時的なコンピュータ可読記憶媒体。
  26. 前記ソフトウェアは、グラフィックスドライバを含む、請求項25に記載の非一時的なコンピュータ可読記憶媒体。
  27. 前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、請求項22に記載の非一時的なコンピュータ可読記憶媒体。
  28. 前記命令は、
    前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
    前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
    前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
    を前記1つまたは複数のプロセッサにさらに行わせる、請求項22に記載の非一時的なコンピュータ可読記憶媒体。
  29. グラフィックス処理ユニットであって、
    グラフィックス処理ユニットのためにコマンドバッファ中のコマンドを実行することと、ここで、前記コマンドは、読取修正書込メモリリソース中のデータに作用し、
    前記読取修正書込メモリリソースの元データを第1のバッファに記憶することと、
    前記コマンドバッファ中の前記コマンドを実行することによって生成された任意の修正済みデータを第2のバッファに記憶することと、
    前記コマンドバッファ中のすべてのコマンドを完了する前に、前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることと、
    実行をプリエンプトした後に、前記第1のバッファ中の前記元データを使用して、前記コマンドバッファの初めから前記コマンドの実行を再開することと
    を行うように構成されたグラフィックス処理ユニット。
  30. 前記コマンドバッファ中の前記コマンドの完了をトラッキングすること
    を行うようにさらに構成される、請求項29に記載のグラフィックス処理ユニット。
  31. 前記コマンドバッファをメモリに記憶することと、
    前記コマンドバッファ中の前記コマンドの実行をプリエンプトすることに応答して、二次コマンドバッファ中のコマンドを実行することと
    を行うようにさらに構成された、請求項29に記載のグラフィックス処理ユニット。
  32. 中央処理ユニット上で実行するソフトウェアから受ける、実行をプリエンプトするよう求める要求に応答して、前記コマンドの前記実行をプリエンプトすること
    を行うようにさらに構成された、請求項29に記載のグラフィックス処理ユニット。
  33. 前記ソフトウェアは、グラフィックスドライバを含む、請求項32にグラフィックス処理ユニット。
  34. 前記読取修正書込メモリリソースは、フレームバッファであり、前記第1のバッファは、以前のフレームのための前記フレームバッファの複写であり、前記第2のバッファは、現在のフレームバッファである、請求項29に記載のグラフィックス処理ユニット。
  35. 前記コマンドバッファがプリエンプトされる回数をトラッキングすることと、
    前記コマンドバッファがプリエンプトされる前記回数が閾値を上回るケースにおいて、プリエンプションを拒否することと、
    前記コマンドバッファがプリエンプトされる前記回数が前記閾値を下回るケースにおいて、プリエンプションを許可することと
    を行うようにさらに構成された、請求項29に記載のグラフィックス処理ユニット。
JP2016534126A 2013-09-10 2014-09-05 グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム Expired - Fee Related JP6001221B1 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/023,170 2013-09-10
US14/023,170 US9230518B2 (en) 2013-09-10 2013-09-10 Fault-tolerant preemption mechanism at arbitrary control points for graphics processing
PCT/US2014/054271 WO2015038429A1 (en) 2013-09-10 2014-09-05 Fault-tolerant preemption mechanism at arbitrary control points for graphics processing

Publications (2)

Publication Number Publication Date
JP6001221B1 true JP6001221B1 (ja) 2016-10-05
JP2016538646A JP2016538646A (ja) 2016-12-08

Family

ID=51627352

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016534126A Expired - Fee Related JP6001221B1 (ja) 2013-09-10 2014-09-05 グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム

Country Status (6)

Country Link
US (1) US9230518B2 (ja)
EP (1) EP3044754B1 (ja)
JP (1) JP6001221B1 (ja)
KR (1) KR101697910B1 (ja)
CN (1) CN105518742B (ja)
WO (1) WO2015038429A1 (ja)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9418397B2 (en) * 2013-10-25 2016-08-16 Harman International Industries, Incorporated Start-up processing task distribution among processing units
US9690928B2 (en) * 2014-10-25 2017-06-27 Mcafee, Inc. Computing platform security methods and apparatus
GB2536964B (en) * 2015-04-02 2019-12-25 Ge Aviat Systems Ltd Avionics display system
JP2016212874A (ja) * 2015-05-08 2016-12-15 飛捜股▲ふん▼有限公司 アプリケーションプログラムとバーチャルマシンとの間のコミュニケーションのシステムと方法
CN105139356B (zh) * 2015-08-25 2018-06-22 北京锤子数码科技有限公司 一种图像数据的毛玻璃效果处理方法和装置
US9842376B2 (en) 2015-09-29 2017-12-12 Qualcomm Incorporated Graphics processing unit preemption with pixel tile level granularity
GB2545508B (en) 2015-12-18 2019-04-10 Imagination Tech Ltd Controlling operation of a GPU
JP6821924B2 (ja) * 2016-03-02 2021-01-27 株式会社リコー 画像処理装置、画像処理方法
US10198784B2 (en) 2016-07-29 2019-02-05 Microsoft Technology Licensing, Llc Capturing commands in a multi-engine graphics processing unit
US10402345B2 (en) * 2016-10-28 2019-09-03 Intel Corporation Deferred discard in tile-based rendering
US10657619B2 (en) * 2017-06-02 2020-05-19 Apple Inc. Task execution on a graphics processor using indirect argument buffers
US10628274B2 (en) 2017-12-05 2020-04-21 Qualcomm Incorporated Self-test during idle cycles for shader core of GPU
GB2572404B (en) * 2018-03-29 2020-04-15 Imagination Tech Ltd Method and system for controlling processing
WO2019209314A1 (en) 2018-04-27 2019-10-31 Hewlett-Packard Development Company, L.P. Failure shield
US10269167B1 (en) * 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
US10672099B2 (en) * 2018-06-01 2020-06-02 Apple Inc. Memory cache management for graphics processing
US10981059B2 (en) * 2019-07-03 2021-04-20 Sony Interactive Entertainment LLC Asset aware computing architecture for graphics processing
CN111080505B (zh) * 2019-12-27 2024-04-12 芯瞳半导体技术(山东)有限公司 一种提高图元装配效率的方法、装置及计算机存储介质
US11907764B2 (en) * 2020-05-20 2024-02-20 GE Precision Healthcare LLC Managing computer resources for clinical applications
US11605366B2 (en) * 2020-09-10 2023-03-14 Microchip Technology Incorporated LCC (low cost controllerless) graphics processing

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110084977A1 (en) * 2009-10-13 2011-04-14 Duluk Jr Jerome Francis State shadowing to support a multi-threaded driver environment
JP2013025823A (ja) * 2011-07-18 2013-02-04 Apple Inc 仮想gpu
US20130067133A1 (en) * 2002-11-18 2013-03-14 Arm Limited Handling interrupts in data processing

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7234144B2 (en) 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US6911983B2 (en) * 2003-03-12 2005-06-28 Nvidia Corporation Double-buffering of pixel data using copy-on-write semantics
US7545381B2 (en) * 2005-11-10 2009-06-09 Via Technologies, Inc. Interruptible GPU and method for context saving and restoring
US8310491B2 (en) * 2007-06-07 2012-11-13 Apple Inc. Asynchronous notifications for concurrent graphics operations
EP2558935A4 (en) 2010-04-13 2014-12-17 Int Inc RUNSPACE PROCESS, SYSTEM AND DEVICE
US20120188259A1 (en) 2010-12-13 2012-07-26 Advanced Micro Devices, Inc. Mechanisms for Enabling Task Scheduling
US8793696B2 (en) 2011-10-13 2014-07-29 Google, Inc. Dynamic scheduling for frames representing views of a geographic information environment
US20130124838A1 (en) 2011-11-10 2013-05-16 Lacky V. Shah Instruction level execution preemption
US20130132711A1 (en) 2011-11-22 2013-05-23 Lacky V. Shah Compute thread array granularity execution preemption
US20130162661A1 (en) 2011-12-21 2013-06-27 Nvidia Corporation System and method for long running compute using buffers as timeslices
US9164935B2 (en) * 2013-01-04 2015-10-20 International Business Machines Corporation Determining when to throttle interrupts to limit interrupt processing to an interrupt processing time period

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130067133A1 (en) * 2002-11-18 2013-03-14 Arm Limited Handling interrupts in data processing
US20110084977A1 (en) * 2009-10-13 2011-04-14 Duluk Jr Jerome Francis State shadowing to support a multi-threaded driver environment
JP2013025823A (ja) * 2011-07-18 2013-02-04 Apple Inc 仮想gpu

Also Published As

Publication number Publication date
EP3044754A1 (en) 2016-07-20
US9230518B2 (en) 2016-01-05
CN105518742B (zh) 2017-04-26
CN105518742A (zh) 2016-04-20
KR101697910B1 (ko) 2017-01-18
US20150070369A1 (en) 2015-03-12
WO2015038429A1 (en) 2015-03-19
EP3044754B1 (en) 2018-01-17
JP2016538646A (ja) 2016-12-08
KR20160038071A (ko) 2016-04-06

Similar Documents

Publication Publication Date Title
JP6001221B1 (ja) グラフィックス処理のための任意の制御ポイントでのフォールトトレラントプリエンプションメカニズム
JP5866457B2 (ja) オーバドロー・トラッカを用いたグラフィック処理におけるダイレクト・レンダリングとビニングとの切替
KR102327144B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 타일 기반 그래픽스 파이프라인을 수행하는 방법
CN107209923B (zh) 图形处理中的混合渲染
JP6073533B1 (ja) タイルベースのアーキテクチャ上での最適化されたマルチパスレンダリング
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
JP6884766B2 (ja) 帯域幅圧縮グラフィックスデータの記憶
KR102381945B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치에서 그래픽스 파이프라인을 수행하는 방법
JP6595101B2 (ja) 後期深度試験と保守的深度試験との間の動的切替え
WO2017052746A1 (en) Efficient saving and restoring of context information for context switches
US10694197B2 (en) Composition based dynamic panel mode switch
US20140146064A1 (en) Graphics memory load mask for graphics processing
US10319068B2 (en) Texture not backed by real mapping
EP3427229B1 (en) Visibility information modification
US9324127B2 (en) Techniques for conservative rasterization
US10416808B2 (en) Input event based dynamic panel mode switch
US10346943B2 (en) Prefetching for a graphics shader
CN107077716B (zh) 用于图形处理的动态管线
US20190220411A1 (en) Efficient partitioning for binning layouts

Legal Events

Date Code Title Description
A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20160725

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160802

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160831

R150 Certificate of patent or registration of utility model

Ref document number: 6001221

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees