JP5735187B2 - コマンドプロセッサを備えるグラフィックス処理ユニット - Google Patents

コマンドプロセッサを備えるグラフィックス処理ユニット Download PDF

Info

Publication number
JP5735187B2
JP5735187B2 JP2014547259A JP2014547259A JP5735187B2 JP 5735187 B2 JP5735187 B2 JP 5735187B2 JP 2014547259 A JP2014547259 A JP 2014547259A JP 2014547259 A JP2014547259 A JP 2014547259A JP 5735187 B2 JP5735187 B2 JP 5735187B2
Authority
JP
Japan
Prior art keywords
tasks
processor
processing unit
task
shader
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.)
Active
Application number
JP2014547259A
Other languages
English (en)
Other versions
JP2015506036A (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
Publication of JP2015506036A publication Critical patent/JP2015506036A/ja
Application granted granted Critical
Publication of JP5735187B2 publication Critical patent/JP5735187B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Graphics (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Description

本開示の側面はグラフィックス処理に関する。
グラフィックス処理ユニット(GPU)は、2次元ビジュアルディプレイの提示に関して、3次元(3D)グラフィックスコンテンツをレンダリングするために概して実装される。例えば、GPUは、3Dコンテンツを示すピクセルをディスプレイ上にレンダリングするために実装される。GPUは、シーンをレンダリングするときに、ディスプレイの各ピクセルに関してピクセル値を生成するためにグラフィックス処理を実行する。
一部のGPUは一時に全体のシーンをレンダリングする。あるいは、GPUは、しばしばシーンの“タイル”と呼ばれる、シーンの小さな部分におけるグラフィックスをレンダリングする。例えば、GPUは、シーンを複数のタイルに分割し、タイルの各々を個々にレンダリングする。GPUは次に、レンダリングされたタイルの各々を組み合わせることによってシーンを再構成する。タイルのサイズは、レンダリングの間、特定のタイルがローカルGPUメモリ資源に記憶可能なように決定される。
概して、この開示は、グラフィックス処理ユニット(GPU)を制御するための技術を記述する。より詳細には、この開示は、一体化された処理ユニットを用いてGPUの資源を管理するための技術を記述する。すなわち、例えば、GPUの資源がどのように利用されるかを記述するCPUからコマンドストリームを受信するのではなく、GPUの一体化された処理ユニットは、GPUによって実行されるべきワーク(work)を概して規定する計算タスクを受け取ることができる。前記GPUの一体化された処理ユニットは次に、前記GPUの資源によって当該タスクがどのように実行されるのかを決定する。例えば、前記GPUの一体化された処理ユニットはタスクを受け取って、特定のGPU資源に対して前記タスクを独立に(independently)スケジューリングし、これによって、当該タスクを実行する前記GPUの資源を制御する。
一例において、グラフィックス処理ユニットは、シェーダプロセッサ(shader processor)と、1つ以上の固定関数ハードウエアユニット(fixed function hardware unit)と、コマンドプロセッサ(command processor)を備える。シェーダプロセッサは、複数の命令を並列に実行するように構成される。1つ以上の固定関数ハードウエアユニットは、グラフィックスデータをレンダリングするように構成される。コマンドプロセッサは、ホストプロセッサから1つ以上のタスクを受け取って、前記シェーダプロセッサと前記1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを独立にスケジューリングするように構成される。
他の例において、グラフィックス処理ユニットを制御するための方法は、ホストプロセッサから1つ以上のタスクを受け取ることと、シェーダプロセッサおよび1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべきタスクを、前記ホストプロセッサから独立してスケジューリングすることであって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成されることと、を備える。
他の例において、グラフィックス処理ユニットを制御するための装置は、ホストプロセッサから1つ以上のタスクを受け取るための手段と、シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングするための手段であって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される手段と、を具備する。
他の例において、命令が記憶されたコンピュータ読み取り可能な媒体を備えるコンピュータプログラムプロダクトは、前記命令が実行されたときに、1つ以上のプロセッサに、ホストプロセッサからの1つ以上のタスクを受け取らせ、シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングさせ、ここにおいて、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される。
この開示の1つ以上の側面の詳細は、添付の図面及び以下の記述において述べられる。他の特徴、目的、およびこの開示の利点は、説明及び図面及び特許請求の範囲から明らかである。
図1は、この開示の技術を実装することができるグラフィックス処理ユニットを有する計算装置を示す。 図2は、例示的なグラフィックスレンダリングパイプラインを示すブロック図である。 図3は、図1に示される例のグラフィックス処理ユニットをより詳細に示すブロック図である。 図4は、本開示の側面にしたがった、コマンドプロセッサの例示的オペレーションを示すフローチャートである。 図5は、本開示の側面にしたがった、コマンドプロセッサの他の例示的オペレーションを示すフローチャートである。
概して、この開示は、グラフィック処理ユニット(GPU)を制御するための技術を記述する。より詳細にはこの開示は、一体化された(integrated)処理ユニットを用いてGPUの資源を管理するための技術を記述する。すなわち、例えば、GPUの資源がどのように利用されるかを記述するCPUからのコマンドストリームを受信するのではなく、GPUの一体化された処理ユニットは、GPUによって実行されるべきワークを概して規定する計算上のタスクを受け取る。GPUの一体化された処理ユニットはGPUの処理ユニットによってタスクがどのように実行されるかを決定する。例えばGPUの一体化された処理ユニットは、特定のGPU資源に対するタスクを独立にスケジューリングするタスクを受け取り、これによって当該タスクを実行するGPUの資源を制御する。
図1は、本開示の側面にしたがって、GPUの資源を管理するための技術を実装する計算装置20を示すブロック図である。図1に示すように、計算装置20はホストプロセッサ24、記憶装置28、メモリ32、ネットワークモジュール36、ユーザインタフェース40、そしてディスプレイ44を含む。計算装置20はまた、1つ以上のシェーダプロセッサ52、1つ以上の固定関数ユニット54そしてコマンドプロセッサ56をもつグラフィック処理ユニット(GPU)を含む。一部の実施形態において、計算装置20は携帯可能なあるいは移動体計算装置(例えば携帯電話、ネットブック、ラップトップ、タブレットデバイス、デジタルメディアプレーヤ、ゲームデバイス、あるいは他のポータブル計算デバイス)を含むかあるいはそれらの一部である。あるいは、計算装置20は、デスクトップコンピュータ、サーバ、テレビ、テレビジョンセットトップボックス、ゲームコンソール、などの静的な計算装置をとして構成されることができる。
図1に示される計算装置20は、単に1つの例である。GPU48などのGPUの資源を管理するための技術は、他の構成要素をもつ多様な他の計算装置によって実行されることができる。一部の例において、計算装置20は明確さの目的のために図1に示されていない付加的な構成要素を含む。例えば、計算装置20は、計算装置20の構成要素間でデータを交換するための1つ以上の通信ブリッジを含む。さらに、図1に示される計算装置20の構成要素は、計算装置20の全部の例において必要なわけではない。例えば、計算装置20がデスクトップコンピュータである場合には、ユーザインタフェース40およびディスプレイ44は、計算装置20の外部デバイスとなる。
ホストプロセッサ24は、1つ以上のマイクロプロセッサ、コントローラ、デジタルシグナルプロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)、あるいは同等の離散あるいは集積ロジック回路を含むことができる。さらに、この開示においてホストプロセッサ24に属する機能は、ソフトウエア、ファームウエア、ハードウエア、あるいはそれらの組み合わせとして具体化される。
ホストプロセッサ24は、計算装置20内の実行のための命令を処理する。ホストプロセッサ24は、記憶装置28に記憶された命令あるいはメモリ32に記憶された命令を処理することができる。ホストプロセッサ24は、GPU48のための(例えばホストプロセッサ24によって実行されるソフトウエアにおいて実装される)ドライバを用いてコマンドストリームを生成する。すなわち、ホストプロセッサ24は、GPU48によって実行されるべきオペレーションを規定するコマンドストリームを生成する。
ホストプロセッサ24は、可視のコンテンツをディスプレイ44上に表示させるGPU48によって実行されるべきコマンドストリームを生成する。例えば、ホストプロセッサ24はグラフィックデータをレンダリングするためにGPU48のための命令を提供するコマンドストリームを生成する。この例において、ホストプロセッサ24は、図2に関して示されかつ記述されるパイプラインなどの、グラフィックスレンダリングパイプラインによって実行される。
付加的にあるいは代替的に、ホストプロセッサ24は、GPU48に他のオペレーションを実行させるGPU48によって実行されるべきコマンドストリームを生成する。例えば一部の例において、ホストプロセッサ24は、GPU48を、汎用のグラフィック処理ユニット(GPGPU)として使用するためのコマンドストリームを生成する。例えば、GPU48は、従来ホストプロセッサ24によって実行される種々の汎用計算機能を実行する。一例として、映像復号処理及び後処理(例えばデ・ブロックキング、ノイズ低減、カラー補正など)および他の特定用途向け画像処理機能(例えば顔面検出/認識、パターン認識、ウエーブレット変換など)を含む、種々の画像処理機能を含む。一部の例において、GPU48は、そのようなGPGPUアプリケーションを実行するためにホストプロセッサ24と協働する。例えば、ホストプロセッサ24は、GPU48に、GPU48による実行のためのコマンドストリームを提供することによって、ある種の機能をGPU48に負荷分散(offload)する。
記憶装置28は、1つ以上のコンピュータ読み取り可能な記憶媒体を含む。記憶装置28は情報を長期的に記憶可能なように構成される。一部の例において、記憶装置28は、不揮発性の記憶要素を含む。そのような不揮発性記憶要素の一例は、磁気ハードディスク、光学ディスク、フロッピー(登録商標)ディスク、フラッシュメモリ、あるいは電気的プログラマブルメモリ(EPROM)または電気的消去可能およびプログラマブル(EEPROM)メモリの形態を含む。一部の例において、記憶装置28は、非一時的記憶媒体として考慮される。術語“非一時的”は、記憶媒体は搬送波あるいは伝搬された信号として具体化されないことを意味することができる。しかしながら、術語“非一時的”は記憶装置28が不動であるという意味に解釈されるべきではない。一例として、記憶装置28は計算装置20から取り除かれて他の装置に移動させることができる。他の例として、記憶装置は実質的に記憶装置28に類似するが、計算装置20内に挿入されることができる。記憶装置28は、ホストプロセッサ24あるいはGPU48による1つ以上のアプリケーションの実行のための命令を記憶することができる。
メモリ23は、オペレーションの間、情報を計算装置20内に記憶するように構成される。一部の例において、メモリ32は一時的メモリであり、これはメモリ32の主な目的は長期的記憶ではないことを意味する。一部の例において、メモリ32はコンピュータ読み取り可能な記憶媒体として記述される。したがって、メモリ32は、時間の経過に従って変化するデータを記憶するにもかかわらず、“非一時的”であるとみなされる。また一部の例において、メモリ32は、揮発性メモリとして記述されるが、これは、メモリ32はコンピュータが電源オフされたときに記憶されたコンテンツを維持しないことを意味する。揮発性メモリの一例は、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)そして業界で知られた揮発性メモリの他の形態を含む。
一部の例において、メモリ32は、ホストプロセッサ24あるいはGPU48による実行のためのプログラム命令を記憶するのに用いられる。メモリ32は、プログラムの実行の間、情報を一時的に記憶するために、ソフトウエアまたは計算装置20上で動作するアプリケーションによって用いられる。したがって、メモリ32は、ホストプロセッサ24やGPU48などの、計算装置20の他の構成要素によってアクセスされる。
開示の一部の側面によれば、メモリ32は、データがディスプレイ44によって表示される前に、画素データ(例えば、1フレームの映像データ、コンピュータ生成されたグラフィック画像、静止画像など)を記憶する表示バッファとして実装される。例えば、GPU48は画素データがディスプレイ44によって表示される前に、画素データをメモリ32に分割(resolve)する。
計算装置20は、1つ以上の無線ネットワークなどの1つ以上のネットワークを介して、外部装置と通信するためにネットワークモジュール36を使用する。ネットワークモジュール36は、イーサネット(登録商標)カード、光学トランシーバ、無線周波数トランシーバ、あるいは情報を送信および受信可能な任意の他のタイプの装置、であることができる、ネットワークインタフェースカードであることができる。一部の例において、計算装置20は、サーバ、携帯電話、あるいは他のネット接続された計算装置などの外部装置と無線で通信するために、ネットワークモジュール36を利用する。
計算装置20はまた、ユーザインタフェースを含む。ユーザインタフェース40の一例は、トラックボール、マウス、キーボード、他のタイプの入力装置を含むが、これらに限定されない。ユーザインタフェース40は、ディスプレイ44の一部として組み込まれた接触感知スクリーンを含む。ディスプレイ44は液晶ディスプレイ(LCD)、有機光出力ダイオード(OLED)ディスプレイ、プラズマディスプレイ、あるいは他のタイプのディスプレイ装置を備える。
計算装置20のGPU48は、グラフィックをレンダリングするとともにGPGPUアプリケーションを実行するための固定機能及びプログラマブル構成要素を有する専用ハードウエアユニットであることができる。例えば、図1に示される例によれば、GPU48はプログラマブルシェーダプロセッサ52、(固定機能ハードウエア構成要素を含むことができる)固定機能ユニット54、そしてコマンドプロセッサ56を含む。GPU48は、DSP、汎用マイクロプロセッサ、ASIC、FPGA、あるいは他の同等の集積あるいは離散論理回路を含むことができる。GPU48はまた、図3,4に関してより詳細に記述されているように、専用GPUメモリなどの他の構成要素を含む。
さらに、図1において分離した構成要素として示されているが、一部の例において、GPU48は、ホストプロセッサ24の一部として形成される。GPU48は、種々のアプリケーションプログラミングインタフェース(API)にしたがって、処理技術を利用するように構成される。例えば、ユーザは、複数のプラットフォーム、オペレーティングシステムそしてハードウエア上で走る標準のソフトウエアインタフェースを使用して、GPU48によって実行されるアプリケーションをプログラミングできる。
一部の例においては、GPU48は、OpenGL for Embedded Systems(“OpenGL ES”、2007年3月に公表され、一般に利用可能)を含む、OpenGLプラットフォームを用いて生成されたアプリケーションを利用するように構成される。他の例示的なAPIは、Compute Unified Device Architecture (“CUDA”、NVIDIAコーポレーションによって開発され、バージョン3.2が2010年9月17日に公表された)、そして、DirectX(マイクロソフトInc.によって開発され、バージョン1.1が2009年10月27日に公表された)を含む。概して、APIは、関連するハードウエアによって実行される所定の標準化された組のコマンドを含む。APIコマンドは、ユーザが、ハードウエア構成要素の詳細についてのユーザ知識なしに、GPUのハードウエア構成要素に指示することを可能にする。
図1の例は、単一ブロックとしてのシェーダプロセッサ52を示しているが、シェーダプロセッサ52は、1つ以上のシェーダ処理ユニットを含み、概して、“一体化されたシェーダプロセッサ”と呼ばれる。すなわち、例えば、シェーダプロセッサ52は、グラフィックスをレンダリングするために、ジオメトリ(geometry)、頂点(vertex)、ピクセル(pixel)あるいは(図2の例に示されるシェーダステージに関連して記述されたものなどの)他のシェーディングオペレーションを実行する。他の例において、シェーダプロセッサ52は、汎用の計算を実行する。すなわち、シェーダプロセッサ52は、GPGPUアプリケーションに関連した命令を実行する。GPGPUアプリケーションは概して、種々の入力データを解析あるいは変更するのに用いられる機能を規定する1つ以上のカーネルを含む。一例としては、比較的大きな数値データセットを並列に処理するための機能を含む。画像処理の観点から言うと、機能は例えば、カラー補正アルゴリズム、顔検出アルゴリズム、或いは拡張現実(augmented reality)アプリケーションを実行するための機能を含む。他の例は、変換関数、レイトレーシングのための機能、あるいは種々の他の機能を含む。
シェーダプロセッサ52は概して、複数の命令を並列に実行するように構成される。例えば、シェーダプロセッサ52は、命令を並列に実行する(例えば算術ロジックユニット(“ALU”などの)処理ユニットアレイを含む。すなわち、シェーダプロセッサ52は、命令を取り込み及び解読するためのコンポーネントやロードバランシングのためのコンポーネントなどの、図3に特に示されていない1つ以上のコンポーネント、および1つ以上のALUあるいは計算を実行するための他の計算ユニットを含む。シェーダプロセッサ52は、(図3の例に関連して示され記述されたシェーダプロセッサメモリ60などの)1つ以上のメモリ、キャッシュ、あるいはレジスタを含む。
固定関数ユニット54はグラフィックスデータをレンダリングするための固定関数ハードウエアコンポーネントなどの、1つ以上のユニットを含む。例えば、固定関数ユニット54は、レンダリングのためのグラフィックスデータ(トライアングル、ライン、ポイント)を準備するためにグラフィックデータの初期入力アッセンブリを実行するためのユニットを含む。他の例において、固定関数ユニット54は、ラスター化を実行するためのユニットを含む。すなわち、固定関数ユニット54は、ラスター化の間シェーディングのためのプリミティブを準備する。固定関数ユニット54はまた、グラフィックデータをレンダリングすること及び/又は他のオペレーションを実行することに関連する種々の他のオペレーションを実行する。
上記したように、GPU48は、ディスプレイ44上の表示のためのグラフィックをレンダリングする。例えば、GPU48は、図2に示される例示的パイプラインなどの、グラフィックレンダリングパイプラインのステージに関連するオペレーションを実行するために、シェーダプロセッサ52及び/または固定関数ユニット54を使用する。開示の一部の側面によれば、GPU48はタイルに基づくレンダリングアーキテクチャを実装する。例えば、(例えば1フレームのビデオデータ、コンピュータ生成されたグラフィックイメージ、静止画などの)ピクセルデータの全体のシーンをレンダリングする代わりに、GPU48は、1つのシーンを複数の断片(例えば、“タイル”)に分割し、タイルを個々にレンダリングする。GPU48は、レンダリングされたタイルを、メモリ32に含まれたディスプレイバッファなどのバッファに、レンダリングされたタイルの各々を書き込む。シーンの全てのタイルをメモリ32に書き込んだ後、計算装置20はレンダリングされたタイルを組み立ててディスプレイ44上にシーンを表示する。
GPU48は、GPGPUとして実装されたとき、ここにおいてカーネルと呼んでいるシェーダプログラムを実行する。例えば図3に関して詳細に記述されるように、シェーダプロセッサ52は、画像処理機能および他の機能などの種々の汎用計算機能を行うためにカーネルを実行する。カーネルは、上記の例示的APIなどのAPIを使用してユーザによって規定することができる。カーネルは、ワークグループにグループ化される個々のワークアイテム(例えばGPUにおけるワークの基本ユニット)を備える。一部の例において、GPU48は、GPGPUコマンドストリームを実行するときに、特定のシーケンスにおいてカーネルを実行する。すなわち、シェーダプロセッサ52は、次のカーネルに移行する前に、同一のカーネルの複数インスタンスを並列に実行する。他の例において、GPU48は、複数のカーネルを同時に実行することができる。
概して、GPU48は、上記したように、ホストプロセッサ24などのホストプロセッサからコマンドストリームを受信する。コマンドストリームは概して、ホストプロセッサ24によって実行されるソフトウエアドライバによって生成され、シェーダプロセッサ52および固定関数ユニット54のオペレーションを制御する。例えば、コマンドストリームは概して、GPU48のどのコンポーネントがコマンドストリームにおいて規定されたオペレーションを実行するのかを制御する。
一部のGPUの構成によって課された拘束およびコマンドストリームの制限のために、GPU48などのGPUは一度に単一のタスクを実行する。例えば、GPU48はコマンドストリームに含まれる各オペレーションを直列に実行する。すなわち、GPUの他の資源がコマンドストリームにしたがって命令を処理している間、GPUのある資源はアイドル状態になる。すなわち、GPU48のシェーダプロセッサ52は、固定関数ユニット54がアイドル状態にあるときにコマンドストリームにしたがってオペレーションを実行する。
一部の例において、マルチタスク処理は、1つ以上のコマンドストリーム間で適時に切り替えることによってホストプロセッサ24によってエミュレーションされる。しかしながら、コマンドストリームの切り替えは比較的時間を要するものであり、複数のタスクを実行するためにGPU資源を効率よく共有することを困難にしてしまう。例えば、1つのコマンドストリームから他のコマンドストリームに交換することに関連して比較的高いレイテンシが存在する。したがって、種々のレンダリングオペレーションおよび汎用オペレーションなどの他のオペレーション(例えば画像処理、レイトレーシング、など)間で切り替えを行うことは効率的でない。加えて、タスクがいつ実行されるかは不確定であるため、高い優先度をもつ多くの時間を要するタスク(例えば音声処理などのマルチメディア処理タスク)をコマンドストリームを介してGPU48に割り当てることは効率的ではない。例えば、コマンドストリームに含まれるオペレーションの実行の時間を決定することは困難であり、GPU48によって実行される現存のコマンドによって大きく異なる。
本開示の側面によれば、コマンドプロセッサ56は、ホストプロセッサ24などのホストプロセッサあるいは他のホスト処理ユニット(例えば、中央処理ユニット(CPU)による介在なしに、GPU資源を局部的に制御する。例えば、本開示の側面によれば、GPU48のコマンドプロセッサ56は、ホストプロセッサ24から1つ以上の“タスク”を受け取る。コマンドプロセッサ56は、例えばシェーダプロセッサ52や固定関数ユニット54を含む、GPU48の資源によって実行されるべきタスクを独立にスケジューリングする。すなわち、GPU資源がどのように利用されるかを指図するホストプロセッサ24からコマンドストリームを受信する代わりに、コマンドプロセッサ56は、GPUによって実行されるべきワークを概して規定する1つ以上のより高いレベルのタスクを受け取る。そのようなタスクは、オペレーションを実行するためにGPU48のどの資源を使用すべきかを指令することなしに、GPU48によって実行されるべきオペレーションを規定する。
コマンドプロセッサ56は、タスクをいつ実行するのか及び/又はタスクを実行するためにどの資源を使用するのかを独立に決定する。すなわち、この開示の側面は、タスクをいつ実行するのか及び/又はタスクを実行するのにどの資源を使用するのかを独立に決定するコマンドプロセッサ56に関する。この開示の側面は概して、ホストプロセッサ24からの介在なしに(例えばホストプロセッサ24によって生成されるコマンドストリームから提供される介在なしに)、タスクの実行を制御するコマンドプロセッサ24に関する。以下に詳細に述べるように、そのような決定は、他の考えられる配慮の中で資源利用可能性及び/又はタスク優先度に基づいて行われる。コマンドプロセッサ56はまた、GPU48の種々の資源間でデータフローを独立に制御する。
コマンドプロセッサ56は、シェーダプロセッサ52及び/又は固定機能ユニット54などの、GPU48の異なる資源に対してタスクを独立してかつ選択的に分配することを含み、複数のタスクを同時に制御する。すなわち、コマンドプロセッサ56は、ホストプロセッサ24からの介在なしに、タスクの実行を制御し、単一のタスクを実行することに必要上専念する、GPU48の全ての資源なしに、GPU48のどの資源が各タスクを実行するのかを選択する。一例において、コマンドプロセッサ56は、GPU48のシェーダプロセッサ52によって同時に実行されるべき計算タスクを選択的にスケジューリングするとともに、GPU48の固定関数ユニット54によって実行されるべきグラフィックレンダリングタスクをスケジューリングする。このようにして、コマンドプロセッサ56は、ホストプロセッサ24がコマンドストリームの切り替えのために待機することなしに、GPU48が複数のタスクを並列に実行することを可能にする。好ましくは、ホストプロセッサ24は、コマンドプロセッサ56に複数のタスクを送信することができ、コマンドプロセッサ56は、そのようなタスクの実行を制御することができる。
ホストプロセッサ24による介在なしにGPU資源を局所的に制御するGPU48の能力は、柔軟性を増大するとともにGPU資源の効率的な管理を促進する。例えば上記したように、ホストプロセッサ24は従来、コマンドストリームをGPU48に送信し、GPU48はGPU48の資源を用いてパイプライン様式で順次実行する。概して単一のオペレーションが所定時にGPU48によって実行され、これによって、他の資源が特定のコマンドストリームを実行することを終了するのを待機している間、GPUの一部の資源はアイドル状態となる。すなわち、例示の目的のための例において、シェーダプロセッサ52がアイドル状態にある間、ある種の固定関数ユニット54はグラフィックレンダリングオペレーションを実行する。
本開示の側面によれば、コマンドプロセッサ56は、GPUの資源がアイドル状態となる時間の量を減らすことによって効率を増大することができる。例えばGPU資源を、一度に1つのみのコマンドストリームを処理する一連の連結されたコンポーネントとして取り扱うのではなく、コマンドプロセッサ56は、GPU48の資源を独立にかつ選択的に制御する。上記した例において、コマンドプロセッサ56は、GPU48の固定関数ユニット54に対してグラフィックレンダリングタスクをスケジューリングするとともに、異なる計算タスクをGPU48のシェーダプロセッサ52に対してスケジューリングする。それゆえ、コマンドプロセッサ56は、GPUのすべての資源に一度に1つのタスクを実行させるのではなく、タスクを、GPU48の異なる資源に対して選択的にスケジューリングすることによって、GPU資源がアイドル状態となる時間の量を可能なかぎり減らす。
図2は、グラフィックスレンダリングパイプライン80を示す。概して、グラフィックスレンダリングパイプライン80は、GPU48(図1)などのGPUによってグラフィックをレンダリングするのに用いられる。パイプライン80は説明の都合上例示したものであり、パイプライン80には、より少ないステージ、さらなるステージあるいは代替的なステージが含まれる。
グラフィックスレンダリングパイプライン80は概して(例えば丸い角部で示された)プログラマブルステージと、(例えば四角の角部で示された)固定関数ステージとを含む。例えば、グラフィックスレンダリングパイプライン80のある種のステージに関連するグラフィックスレンダリングオペレーションは概してシェーダプロセッサ52などのプラグラマブルシェーダプロセッサによって実行されるとともに、グラフィックスレンダリングパイプライン80の他のステージに関連する他のグラフィックスレンダリングオペレーションは概して、固定関数ユニット54などの非プログラマブルな固定関数ハードウエアユニットによって実行される。シェーダプロセッサ52によって実行されるグラフィックスレンダリングステージは概して、“プログラマブル”ステージと呼ばれ、固定関数ユニット54によって実行されるステージは概して、固定関数ステージと呼ばれる。
図2の例示の中に入力アッセンブラステージ82が固定関数ステージとして示され、概してグラフィックスデータ(トライアングル、ラインおよびポイント)をグラフィックスレンダリングパイプライン80に供給する役割を負っている。例えば、入力アッセンブラステージ82は、高次元サーフィス、プリミティブなどのための頂点データを収集するとともに、頂点データと頂点シェーダステージ84に対する属性を出力する。
頂点シェーダステージ84は、受信した頂点データおよび属性を処理する。例えば、頂点シェーダステージ84は、トランスフォメーション、スキミング、頂点ディスプレイスメントなどの頂点ごとの処理(per-vertex processing)を実行するとともに、頂点ごとの材料属性を計算する。一部の例において、頂点シェーダステージ84は、テクスチャ座標、頂点カラー、頂点ライティング、フォグファクタ等を生成する。頂点シェーダステージ84は概して、単一の入力頂点を取り込んで単一の処理された出力頂点を出力する。
テッセレーション(tessellation)の処理は概して、ハルシェーダステージ86、テッセレータステージ88、ドメインシェーダステージ90によって実行される。例えば、ハルシェーダステージ86は、テッセレータステージ88に渡すためにテッセレーションファクタを生成する。この例において、ハルシェーダステージ86は低次サーフェイスを規定する入力データをパッチを作り上げている制御点に変換する。パッチは、オブジェクトのサーフェイスの比較的小さな部分のある種の特性(例えばジオメトリなど)をともに特定する複数のノードの各々に関するデータを含む。テッセレータステージ88は、パッチを、複数のトライアングルあるいはクワッドプリミティブにテッセレート(すなわち副分割)するために、ハルシェーダステージ86からのテッセレーションファクタを使用する固定関数ステージである。テッセレータステージ88で得られた各頂点は、ドメインシェーダステージ90へと出力される。ドメインシェーダステージ90は、各頂点でのサーフェイス表現(representation)を評価する。ドメインシェーダステージ90は各頂点(例えば位置、テクスチャ座標など)に関する完全なデータをジオメトリシェーダ92に送る。
ジオメトリシェーダステージ92は、頂点データ(例えばトライアングルに関する3つの頂点、ラインに関する2つの頂点、あるいはポイントに関する単一の頂点など)によって規定されたプリミティブを受信し、さらに当該プリミティブを処理する。例えば、ジオメトリシェーダステージ92は、他の処理オペレーションの中で、シルエットエッジ検出およびシャドウボリューム抽出などのプリミティブごとの処理を実行する。
ラスタライザステージ94は概して、プリミティブをクリップしたり、ピクセルシェーダステージ96のためにプリミティブを準備する役目を持っている。例えば、ラスタライザステージ94は、ピクセルシェーダ96によるシェーディングのために多数のフラグメントを生成する。ピクセルシェーダステージ96は、ラスタライザ94からフラグメントを受信してカラーなどのピクセルごとのデータを生成する。ピクセルシェーダステージ96はまた、テクスチャブレンディングおよびライティングモデル計算などのピクセルごとの処理を行う。出力合成ステージ98は概して、最終結果を生成するために、(ピクセルシェーダ値、深さおよびステンシル情報などの)種々のタイプの出力データを組み合わせる。
上記したように、グラフィックスレンダリングパイプライン80は概して、(例えば丸い角部で示された)プログラマブルステージと、(例えば四角の角部で示された)固定関数ステージとを含む。すなわち、グラフィックスレンダリングパイプライン80の一部のステージは概して、シェーダプロセッサ(例えば図1の例で示されたシェーダプロセッサ52)などのプログラマブルコンポーネントによって実行されるが、グラフィックスレンダリングパイプライン80の他のステージは概して、プログラマブルでない固定関数ハードウエアユニット(例えば図1の例で示された固定関数ユニット54)によって実行される。
この開示の側面によれば、コマンドプロセッサ(例えば図1の例で示されたコマンドプロセッサ56)は、グラフィックスレンダリングパイプライン80のステージの各々を独立に制御するために用いられる。例えば、この開示の側面によれば、パイプライン80の各ステージによってデータを順次処理するのではなく、コマンドプロセッサ56がパイプライン80のステージを独立に制御する。すなわちコマンドプロセッサ56は、第1の計算タスクを入力アッセンブラ82に分配し、第2の計算タスクを(シェーダプロセッサ52を使用する)シェーダステージの1つに分配する。この例において、第2の計算タスクは、パイプライン処理において通常起こりうるように、入力アッセンブラ82によって回送されるかあるいは実行される。すなわち、入力アッセンブラ82はグラフィックスレンダリング機能を実行するとともに、シェーダプロセッサ52は(GPGPUオペレーションなどの)他のタスクを実行する。
図3は、GPU48をより詳細に示すブロック図であり、この開示の技術を実行するために実装される。図3に示される例において、GPU48は、シェーダプロセッサ56、固定関数ユニット54およびコマンドプロセッサ56を含む。さらに、図3に示される例において、GPUは、(シェーダプロセッサ52と組み合わせて示される)シェーダプロセッサメモリ60と、メモリコピーエンジン62を含む。図3のある種のモジュール及び/又はユニットは高度に一体化されているが、概念を説明するためにここでは別々に示されていることを理解されたい。さらに、ある種のモジュールは、概念を説明するために単一モジュールとして記述されているが、1つ以上の機能及び/又は構造ユニットを含むことができる。
図3は、この開示において記述された技術を利用できるGPUの単なる一例として提供されていることを理解されたし。この開示に関連して記述された技術は、他のコンポーネントを有する種々の他のGPUによって実行される。すなわち、他の例において、GPU48は、画像をレンダリングし、画像を解析し、及び/又は他の計算を実行することに関連する種々の他のコンポーネントを含むことができる。例えば、GPU48は、テクスチャユニット、スケジューリングユニット、算術ロジックユニット(ALU)あるいは、明確さのために図3には示されていない他のGPUコンポーネントを含む。
図1の例に関して示したように、シェーダプロセッサ52は、グラフィックスレンダリング及び/又は他の汎用オペレーションを実行する1つ以上のシェーダ処理ユニットを含む。すなわち、例えば、シェーダプロセッサ52は、グラフィックスをレンダリングするために、ジオメトリ、頂点、あるいは他のシェーディングオペレーションを実行する。他の例においては、シェーダプロセッサ52は、汎用の計算を実行する。
上記した図1の例に関して述べたように、シェーダプロセッサ52は、グラフィックスレンダリング及び/又は他の汎用オペレーションを実行する1つ以上のシェーダ処理ユニットを含む。すなわち、例えば、シェーダプロセッサ52は、グラフィックスをレンダリングするために、ジオメトリ、頂点、ピクセルあるいは他のシェーディングオペレーションを実行する。他の例において、シェーダプロセッサ52は、汎用計算を実行する。
固定関数ユニット54は概して、グラフィックスデータをレンダリングするために、固定関数ハードウエアコンポーネントなどの1つ以上のユニットを含む。例えば、固定関数ユニット54は、レンダリングのためグラフィックスデータ(トライアングル、ラインおよびポイント)を準備するために、グラフィックスデータの初期入力アッセンブリを実行するためのユニットを含む。他の例において、固定関数ユニット54は、ラスター化を実行するためのユニットを含む。すなわち、固定関数ユニット54は、ラスター化の間シェーディングのためのプリミティブを準備する。固定関数ユニット54はまた、グラフィックデータをレンダリングすること及び/又は他のオペレーションを実行することに関連する種々の他のオペレーションを実行する。
コマンドプロセッサ56は、1つ以上のマイクロプロセッサ、コントローラ、デジタルシグナルプロセッサ(DSP),特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)あるいは同等の離散あるいは一体化ロジック回路を含む。さらに、コマンドプロセッサ56に属する機能は、一部の例において、ソフトウエア、ファームウエア、ハードウエア、あるいはそれらの組み合わせとして具体化される。ここに開示されたコマンドプロセッサ56はシェーダプロセッサ52から分離されたユニットとして示されたが、一部の例において、コマンドプロセッサ56は、シェーダプロセッサ52と一体化することができる。
図1に関連して上記したように、コマンドプロセッサ56は、ホストプロセッサ24あるいは他の処理ユニットによる干渉なしにGPU資源を局部的に制御することができる。例えば、この開示の側面によれば、GPU48のコマンドプロセッサ56は、ホストプロセッサ24から1つ以上の“タスク”を受け取る。コマンドプロセッサ56は、例えば、シェーダプロセッサ52および固定関数ユニット54を含む、GPU48の資源によって実行されるべきタスクを独立にスケジューリングすることができる。すなわち、GPU資源がどのように利用されるのかを記述するホストプロセッサ24からコマンドストリームを受信するのではなく、コマンドプロセッサ56は、GPUによって実行されるべきワークを概して規定する1つ以上の高レベルのタスクを受け取る。そのようなタスクは、オペレーションを実行するのにGPU48のどの資源を使用するのかを記述することなしに、GPU48によって実行されるべきオペレーションを規定する。GPU48は、いつタスクを実行するのか及び/又はタスクを実行するのにどの資源を用いるのかを独立に決定する。
GPUメモリ58は、図1に示されるメモリ32と類似している。すなわち、一部の例において、GPUメモリ58は一時的なコンピュータ読み取り可能な記憶媒体であることができる。GPUメモリ58の例は、ランダムアクセスメモリ(RAM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)そして業界で知られたレジスタおよびメモリの他の形態を含む。GPU48がホストプロセッサ24などの他のプロセッサの一部として形成される例においては、GPUメモリ58は、GPU48以外のコンポーネントによってアクセスされる。概して、GPUメモリ58はGPU48によって実行されるオペレーションにおいて用いられるデータを記憶する。一部の例において、GPUメモリ58は、計算装置20のメモリ32などの他のメモリユニットからデータを受信する。すなわち、計算装置20は、メモリ32からGPUメモリ58にデータを転送し、これによって当該データはGPU48にとってアクセス可能となる。
図3に示される例において、シェーダプロセッサ52は、シェーダプロセッサメモリ60(“SPメモリ”)を含む。メモリコピーエンジン61に関連して以下に詳細に記述するように、データはSPメモリ60とGPUメモリ58間で交換される。例えば、SPメモリ60は、GPUメモリ58から、シェーダプロセッサ52による実行のために未処理のデータを受信して記憶する。すなわち、SPメモリ60は、データが例えばシェーダプロセッサ52のALUによって処理される前にデータを記憶する。さらに、SPメモリは、処理されたデータをGPUメモリ58に転送する前に、処理されたデータを記憶する。SPメモリ60は、シェーダプロセッサ52内のユニットによって比較的迅速にアクセスされることができる。しかしながら、SPメモリ60とGPUメモリ58間でのデータ転送は1つ以上のクロックサイクルを消費する。この間、シェーダプロセッサ52は他のデータを処理しない。
この開示の側面によれば、GPU48はまた、GPU48の1つ以上のメモリユニットと通信するメモリコピーエンジン62を含む。例えば図3に示すように、メモリコピーエンジン62は、メモリ32、GPUメモリ58、及び/又はSPメモリ60と通信する。一部の例において、メモリコピーエンジン62は、メモリ32(例えばシステムメモリ)とSPメモリ60間のデータ転送を確立する。例えば、この開示の側面によれば、メモリコピーエンジン62は、メモリ32とSPメモリ60(そして逆も同様)間でデータを転送するためのデータを特定する、コマンドプロセッサ56からの命令を受信する。さらに、メモリコピーエンジン62は、メモリ32とSPメモリ60(そして逆も同様)でデータをいつ転送するかを特定する、コマンドプロセッサ56からの命令を受信する。コマンドプロセッサ56からの命令を受信すると、メモリコピーエンジン62は、メモリ32及びSPメモリ60間でのデータ転送を実行する。他の例においては、メモリコピーエンジン62は、GPUメモリ58とSPメモリ60間などの、GPU48の他のメモリユニット間でのデータ転送を受け持つ。
一部の例において、この開示の側面によれば、GPU48のある種のユニット(例えばシェーダプロセッサ52、SPメモリ60、メモリ32及び/又はGPUメモリ58)は、メモリコピーエンジン62のオペレーションに“気づかない”可能性がある。すなわち、メモリコピーエンジン62は、データのコピー先とコピー元のユニットとは独立に動作することができる。図示の目的の例において、シェーダプロセッサ52がメモリ32からSPメモリ60にデータをコピーする(及びデータ転送を行うために関連する資源及びクロックサイクルを使用する)のではなく、そのようなデータ転送はメモリコピーエンジン62によって処理される。すなわち、メモリコピーエンジン62は、シェーダプロセッサ52による使用のために、データをメモリ32からSPメモリ60にデータをコピーする。したがって、シェーダプロセッサ52は、データがSPメモリ60とメモリ32間で転送されるべきデータを待つことなしに、SPメモリ60内に記憶されたデータを利用することができる。このようにして、メモリコピーエンジン62は、シェーダプロセッサ52に必要なデータを供給し、シェーダプロセッサ52は、データ転送のためのクロックサイクルを利用することなしに、当該データに関してオペレーションを実行することを継続できる。例えばコマンドプロセッサ56は、メモリコピーエンジン62を、コマンドプロセッサ56によってスケジューリングされるタスクと同期させ、これによって、SPメモリ60には特定のタスクを実行するときに適切なデータが供給される。上記したように、メモリコピーエンジン62は、GPUメモリ58とSPメモリ60間で処理されたデータを転送する役目をもつ。追加的あるいは代替的に、メモリコピーエンジン62は、固定関数ユニット54及び/又はGPU48の他のコンポーネントに対してデータの転送を行う。
オペレーション時、本開示の側面によれば、ホストプロセッサ24は、GPU48によって実行委されるべき1つまたはそれ以上のタスクを含むコマンドストリームを生成する。このタスクは、グラフィクスレンダリングの実行及び/又は他の汎用オペレーションなどの、GPU48によって行われるべき種々のワークを記述する。GPU48のコマンドプロセッサ56は、当該コマンドストリームを受信して当該コマンドストリーム内に含まれるタスクの各々の実行を促進する。
この開示の側面によれば、コマンドプロセッサ56はまず、受信したコマンドストリームを解析し、GPU48によって実行されるべき各タスクを特定する。コマンドストリームからのタスクを解析することに加えて、コマンドプロセッサ56は、GPU48のコンポーネントによって実行されるべきタスクの各々を分類(organize)するためのコマンドキューを維持する。例えば、コマンドプロセッサ56は、コマンドキューを使用して、(シェーダプロセッサ52及び/又は固定関数ユニット54などの)GPU48のコンポーネントによって実行されるべきタスクをスケジューリングする。一部の例において、コマンドキューは固定関数ハードウエアユニット(例えばファーストインファーストアウト(FIFO)レジスタなど)であることができる。他の例において、コマンドキューは汎用メモリあるいはレジスタユニットであることができる。
コマンドプロセッサ56はまた、GPU48に関連する他の機能を制御するためのコマンドキューを維持する。例えば、コマンドプロセッサ56は、ホストプロセッサ(例えば中央処理装置(CPU))とのデータ交換を編成するためのコマンドキューを維持する。他の例において、コマンドプロセッサ56は、デジタルシグナルプロセッサ(DSP)あるいはマルチメディアユニットなどの他の計算コンポーネントとデータ交換を編成するためのコマンドキューを維持する。
一部の例において、コマンドプロセッサ56は、GPU資源48の利用可能性に基づいてタスクをスケジューリングすることができる。例えば、コマンドプロセッサ56は、利用可能な入力/出力インタフェースに基づいてタスクをスケジューリングする。他の例において、コマンドプロセッサ56は、実行されているデータの処理に対する準備ができているか否かに基づいてタスクをスケジューリングする。他の例において、コマンドプロセッサ56は、タスクの結果を記憶するために、メモリ(例えばGPUメモリ58)内にスペースが存在するかどうかに基づいて、タスクをスケジューリングする。
この開示の側面によれば、コマンドプロセッサ56は、コマンドキュー内におけるタスクに優先度を付ける。一部の例において、タスクを生成する役目を負っているコンポーネント(例えばホストプロセッサ24)は、タスクの優先度を示す役目を負っている。他の例において、コマンドプロセッサ56は、コマンドキュー内に含まれるタスクに基づいて優先度を決定する。例えばコマンドプロセッサ56は、コマンドキューにおいて、他のタスクよりも時間集約度のより大きいタスクを特定し、コマンドキュー内の高い優先度のタスクに優先権を与え、これによって当該タスクは他のタスクに先立ってスケジューリングされて実行される。
一部の例において、コマンドプロセッサ56は、GPU48のコンポーネントによって実行されるアクティブタスクのリストを維持するとともに、当該タスクを実行する役目を請け負うコンポーネントを追跡する。アクティブタスクリストは例えば、タスクの状態を追跡するために使用される。タスクの状態を追跡することによって、コマンドプロセッサ56はタスクをスケジューリングするためにGPU48のどの資源が利用可能であるかを決定することができる。すなわち、あるタスクがGPU資源によって現在実行されている(例えばタスクが“アクティブ”)のであれば、その資源はアクティブタスクが完了するまで利用可能とならない。一部の例において、コマンドプロセッサ56は、(例えばポーリングによってあるいはコンポーネントはビジーであることを決定することによって)GPU48のどのコンポーネントがアクティブにタスクを実行しているかを特定する役目を負っている。他の例において、コマンドプロセッサ56は、特定のタスクが当該タスクを実行する役目を負っているコンポーネントによって、あるいは、GPUメモリ58に書き込まれているデータを監視することによって、完了されたという指示を受け取ることができる。
一例において、コマンドプロセッサ52はシェーダプロセッサ52によってタスクの実行を開始する。コマンドプロセッサ56はつぎに、シェーダプロセッサ52によって現在実行されているアクティブタスクのリストに当該タスクを加える。タスクリストを使用することによって、コマンドプロセッサ56は、現在タスクを実行している資源を追跡するとともに、現在タスクを実行していない利用可能な資源を特定する。
コマンドプロセッサ56は、優先度情報及び/又はアクティブタスクのリストを使用して、もしも高い優先度のタスクがコマンドキューに追加され、当該高い優先度のタスクについて実行の準備ができている(例えば当該タスクに関連するデータについて実行の準備ができている)のであれば、GPU48のコンポーネントによって実行されているタスクにとって代わる。すなわち、コマンドプロセッサ56は、もしも高い優先度のタスクについて実行の準備ができているのであれば、高い優先度のタスクを実行するために、低い優先度のタスクの実行を停止することができる。コマンドプロセッサ56は、高い優先度のタスクの実行を完了した後で当該低い優先度のタスクを再開する。
このようにして、コマンドプロセッサ56は、ホストプロセッサによる介在なしに、シェーダプロセッサ52及び/又は固定関数ユニット54などの、GPU48の異なる資源に対してタスクを独立に分配することができる。図示の目的の例において、GPU48を含む計算装置20はデジタルカメラ(例えばデジタルカメラを含むモバイル装置)であることができる。この例において、デジタルカメラのGPU48は、ビューファインダ内での表示のために画像をレンダリングする。デジタルカメラのユーザは、表示された画像に関して実行すべき画像処理機能(画像の鋭利化、ノイズの低減など)を選択する。GPU48は、画像のレンダリングから(汎用の)画像処理機能の実行に切り替えることができる。この例において、GPU48の機能間の切り替えはコマンドプロセッサ56によって独立に達成される。
ホストプロセッサ24による介在なしにGPU資源を局所的に制御するというGPU48の能力は、柔軟性を増大し、GPU資源の効率の良い管理を促進する。例えば、この開示の側面によれば、コマンドプロセッサ56は、GPU48の資源がアイドル状態になっている時間の量を低減することができる。上記した例において、コマンドプロセッサ56は、グラフィックスレンダリングタスクをGPU48の固定関数ユニット54にスケジューリングするとともに、計算に関するタスクをGPU48のシェーダプロセッサ52にスケジューリングすることができる。すなわち、例えば、上記したデジタルカメラの例に関連して、コマンドプロセッサ56は、グラフィックスレンダリングタスク(例えばビューファインダ内での表示のために画像をレンダリングすること)をスケジューリングするとともに、計算に関するタスク(例えば画像処理)をスケジューリングすることができる。それゆえに、コマンドプロセッサ56は、GPU資源がアイドル状態となる時間の量を可能な限り低減することができる。
この開示の側面によれば、ホストプロセッサ24からの“タスク”は、APIを使用してユーザ(例えばアプリケーションの開発者)によって決められる。例えば、上記したように、DirectXおよびOpenGLなどのAPIは、ユーザがグラフィックスをレンダリングしたりGPU48による他のオペレーションを実行するためのアプリケーションを開発することを可能にする。しかしながら、従来のAPIは、固定された(例えばパイプラインされた)データフローに制限されるが、これは、1つのタイプのグラフィックスレンダリングに対しては適しているが、他のタスク(例えばレイトレーシングあるいはレイキャスティング)を効率よく提供することができない。すなわち、従来のAPIを用いて開発されたアプリケーションでは、各ステージが特定のオペレーションを実行する必要があるか否かにかかわらず、データを、(図2の例において示されたグラフィックスレンダリングパイプライン80などの)レンダリングパイプラインの各ステージを介して通過させる。
この開示の側面は、ユーザは、比較的高いレベルの計算タスクをもつアプリケーションを生成するために適用するAPIに関する。例えば、APIは、ユーザが、GPUによって実行されるべきワークを概して記述するタスクを決めることを可能にする。すなわち、タスクは、オペレーションを実行するためにGPU48のどの資源を使用すべきかを指示することなしに、GPU48によって実行されるべきオペレーションを規定する。一部の例において、種々のタスクがAPIに含まれ、アプリケーション開発者に露出される。アプリケーション開発者は、APIを使用して、実行されるときに、(例えば従来のAPIのグラフィックスパイプラインに対して)カスタムパイプラインを利用するアプリケーションを生成する。一例において、アプリケーション開発者は、レイトレーシングあるいはレイキャスティングなどの特定のレンダリングオペレーションを実行するのに最適なカスタムグラフィックスパイプラインを使用する。
しかしながら、この開示の技術を実行するのにAPIは必要ではない。例えば、一部の側面によれば、コンパイラ(例えばC/C++コンパイラなどのコンパイラプログラム)は、GPU48のコンポーネントによって実行されるようにプログラムコードの部分をマッピングすることができる。すなわち、コンパイラは、プログラムコードの所定部分を実行するためにGPU48の適切なコンポーネントを識別するとともに、コードの所定部分を含むタスクを特定する。コマンドプロセッサ56はつぎに、コードのマッピングされた部分を受信して、それにしたがってタスクをスケジューリングする。
図4は、この開示の側面にしたがって、コマンドプロセッサによって実行されるべき例示的方法100を示すフローチャートである。すなわち、例えば、図4に示される方法は、図1及び図3に示されるコマンドプロセッサ56によって実行される。しかしながら、図4の例に示される方法は、コマンドプロセッサ56に関連して記述されているが、他の計算装置の他のグラフィックス処理ユニットは、コマンドプロセッサ56に属する機能の一部あるいはすべてを実行することができる。
図4の例示的方法100において、コマンドプロセッサ56はまず、例えばホストプロセッサ23などのホストプロセッサから1つ以上のタスクを受け取る(102)。例えばコマンドプロセッサ56は、GPU48のコンポーネントによって実行されるべきワークを規定する1つ以上のタスクを含むコマンドプロセッサを受信する。コマンドプロセッサ56は、コマンドストリーム内に含まれる各タスクを特定するためにコマンドストリームを解析する(104)。
コマンドプロセッサ56はまた、タスク優先度を決定する(106)。例えば、この開示の一部の側面によれば、コマンドプロセッサ56は、受け取ったタスクの各々をGPU48のコンポーネントによっていつ実行すべきかを決定することができる1つ以上のコマンドキューを維持する。コマンドプロセッサ56は、タスク優先度にしたがって1つ以上のコマンドキューを分類し、これによってより重要な及び/又は時間のかかるタスクが他のタスクに先立って実行される。一部の例において、タスクを生成する役目を負っているコンポーネント(例えばホストプロセッサ24)は、タスクについて優先度を示す役目を負っている。他の例において、コマンドプロセッサ56は、コマンドキューに含まれるタスクに基づいて、優先度を決定することができる。
コマンドプロセッサ56はまた、資源の利用可能性を決定する(108)。例えば、コマンドプロセッサ56は、タスクを実行する役目を負っているコンポーネントが利用可能(例えば他のタスクを実行していない)かどうかを決定する。さらに、コマンドプロセッサ56は、タスクに関連するデータが利用可能かを決定する。
タスク優先度に基づいて1つ以上のコマンドキューを分類することに加えてあるいは分類することの代わりに、コマンドプロセッサ56は、資源の利用可能性に基づいて1つ以上のコマンドキューを分類することができる。すなわち、例えば、コマンドプロセッサ56は、タスクを実行するためにコンポーネントが利用可能であるときでないと、GPU48のコンポーネントによって実行されるべきタスクをスケジューリングしない。さらに、コマンドプロセッサ56は、タスクに関連するデータが利用可能であるとき以外には、GPU48のコンポーネントによって実行されるべきタスクをスケジューリングしない。すなわち、コマンドプロセッサ56は、実行のためにタスクをスケジューリングするに先立って、特定のタスクに関連するデータがメモリコピーエンジン62によってSPメモリ60に移動されるまで待機することができる。さらにコマンドプロセッサ56は、タスクをスケジューリングすることに先立って、特定のタスクに関連するデータが他のコンポーネントによって変更されないことを確実にする。
コマンドプロセッサ56はつぎに、GPU48のコンポーネントの1つ以上によって実行するためのタスクをスケジューリングする(110)。一部の例において、この開示の側面によれば、コマンドプロセッサ56は、GPU48のコンポーネントが異なるタスクを並列に実行するように、タスクを独立に監督する。例えば、コマンドプロセッサ56は、シェーダプロセッサ52によって実行されるべきタスクを、固定関数ユニット54によって実行されるべきタスクと並列にスケジューリングする。
タスクをスケジューリングするとき、コマンドプロセッサ56は、アクティブタスクのリストすなわちアクティブタスクリストを更新する(112)。例えば、コマンドプロセッサ56は、GPU48のコンポーネントによって実行されるべきアクティブタスクのリストを維持するとともに、タスクを実行する役目を負っているコンポーネントを追跡する。アクティブタスクリストは、例えばタスクの状態を追跡するために使用される。タスクの状態を追跡することによって、コマンドプロセッサ56は、タスクをスケジューリングするためにGPU48のどの資源が利用可能であるか、GPU48のどの資源がタスクを実行するのにビジーであるかを決定する。すなわち、もしタスクが現在GPU48によって実行されている(例えばタスクは“アクティブ”)のであれば、当該アクティブタスクが完了するまでその資源は利用可能とならない。一例において、シェーダプロセッサ52によるタスクの実行を開始した後で、コマンドプロセッサ56は、シェーダプロセッサ52によって現在実行されているアクティブタスクのリストに当該タスクを加える。一部の例において、コマンドプロセッサ56は、(例えばポーリングによってあるいはコンポーネントはビジー状態であると決定することによって)GPU48のどのコンポーネントがアクティブにタスクを実行しているかを特定する役目を負っている。他の例において、コマンドプロセッサ56は、特定のタスクが、タスクを実行する役目を負っているコンポーネントによってあるいはGPUメモリに書き込まれているデータを監視することによって完了された、という指示を受け取ることができる。
図4に関連して示されかつ記述されたステップは単に一例として提供されたことを理解されたし。すなわち、図4の方法のステップは、図4に示される順番によって実行される必要はなく、より少ないステップ、追加のあるいは代替的なステップが実行される。例えば、図4は、資源の利用可能性の決定に先立って決定されたタスク優先度を示している。他の例において、資源の利用可能性を決定することは、タスク優先度の決定に先立って実行される。
図5は、この開示の側面にしたがって、コマンドプロセッサ56などのコマンドプロセッサによって実行される例示的方法120を示すフローチャートである。すなわち、例えば、図5に示される方法は、図1及び3に示されるコマンドプロセッサ56によって実行される。しかしながら、図5の例に示される方法はコマンドプロセッサ56に関連して記述されているが、他の計算装置の他のグラフィックス処理ユニットは、コマンドプロセッサ56に属する機能の一部あるいはすべてを実行することができる。
一部の例において、方法120は、図4の例に示される方法100の代わりにあるいは方法100と一体で実行されることができる。例えば、図5の例に示される方法は、実行のためのタスクをスケジューリングするときに実行される(例えば図4に示されるステップ110)。
コマンドプロセッサ56はまず現在のタスクを実行するのに要する1つ以上の資源(例えばデータ、入力/出力インタフェース、メモリ、及び/又は処理ユニット)が利用可能かどうかを決定する(122)。もし資源が利用可能であるならば(ステップ122の分岐がイエス)、コマンドプロセッサ56は、必要に応じて、データコピーエンジン62に、適切なデータをGPUメモリ58からSPメモリ60にコピーするように指示する(124)。加えて、コマンドプロセッサ56は、GPU48の適当なコンポーネントによって実行されるべきタスクをスケジューリングする。
もし現在のタスクを実行するための資源が利用可能でないならば(ステップ122の分岐がノー)、コマンドプロセッサ56は、現在のタスクが、当該タスクを実行するのに要する資源に対して最も高い優先度のタスクかどうかを決定する(128)。現在のタスクが最も高い優先度のタスクであるならば(ステップ128の分岐がイエス)、コマンドプロセッサ56は、資源によって現在実行されているタスクにとって代わる(130)。すなわち、コマンドプロセッサ56は、現在のタスクが実行されるように、タスクを実行するのに要する資源のオペレーションを中断する(例えば、タスクを実行するのに必要でないGPU資源は他のタスクの実行を継続することができる)。現在実行中のタスクに取って代わったあと、コマンドプロセッサ56は、上記したような現在のタスクを実行するためにステップ124および126を実行する。一部の例において、取って代わられたタスクの状態は、現在のタスクが実行されたあとに当該タスクの再開を可能にするために記憶される(例えばGPUメモリ58に記憶される)。
もし現在のタスクが、当該タスクを実行するのに要する資源に対して最も高い優先度のタスクではないのであれば(ステップ128の分岐がノー)、コマンドプロセッサ56は、資源によって現在実行中のタスクが実行を終了するのを待つ(132)。資源がタスクを完了したとき(ステップ134の分岐がイエス)、コマンドプロセッサは例えば、上記したステップ124および126を実行することによって現在のタスクを実行する。
図5に関連して示されかつ記述されたステップは単に例として提供されたものである。すなわち、図5の方法のステップは、図5に示される順番によって実行される必要はなく、より少ないステップ、追加のあるいは代替的なステップが実行される。
さらに、ここに記述された方法のいくつかの動作あるいはイベントは、例に応じて、異なる順番で実行可能であり、追加され、合体され、あるいはすべて除去される(例えば、当該方法の実施のためにここに記述された全部の動作あるいはイベントが必要なわけではない)。さらに、ある例において、順次ではなく、動作あるいはイベントは例えばマルチスレッド処理、インタラプト処理あるいは複数のプロセッサによって同時に実行されることができる。
さらに、1つ以上の例において、ここに記述された機能はハードウエア、ソフトウエア、ファームウエア、あるいはそれらの組み合わせにおいて実装することができる。ソフトウエアにおいて実装される場合、機能は1つ以上の命令あるいはコードとしてコンピュータ読み取り可能な媒体に関して記憶あるいは送信されることができ、ハードウエア主体の処理ユニットによって実行される。コンピュータ読み取り可能な媒体は、データ記憶媒体などの触知できる媒体あるいは、例えば通信プロトコルにしたがって、コンピュータプログラムを1つの場所から他の場所に転送可能な任意の媒体を含む通信媒体、に対応するコンピュータ読み取り可能な記憶媒体を含むことができる。
ここにおいて、コンピュータ読み取り可能な媒体は概して、(1)非一時的な触知可能なコンピュータ読み取り可能な記憶媒体かあるいは、(2)信号あるいは搬送波などの通信媒体に対応する。この開示で記述された技術の実装のために、データ記憶媒体は、命令、コード及び/又はデータ構造を取り出すべく1つ以上のコンピュータあるいは1つ以上のプロセッサによってアクセス可能な任意の利用可能な媒体であることができる。コンピュータプログラムプロダクトはコンピュータ読み取り可能な媒体を含むことができる。
例において、限定されるわけではないが、そのようなコンピュータ読み取り可能な記憶媒体は、RAM、ROM、EEPROM,CD−ROM、あるいは他の光学ディスク記憶媒体、磁気ディスク記憶媒体、あるいは他の磁気記憶装置、フラッシュメモリ、あるいは所望のプログラムコードを命令あるいはデータ構造の形態で記憶するのに使用可能であり、コンピュータによってアクセス可能な任意の他の媒体、を備えることができる。さらに、任意の接続媒体(connection)をコンピュータ読み取り可能な媒体と呼ぶこともできる。例えば、もし命令が、同軸ケーブル、ファイバー光学ケーブル、ツイストペアケーブル、DSL、あるいは赤外波、電波、マイクロ波などのワイヤレス技術、を用いて、ウエブサイト、サーバあるいは他の遠隔ソースから送信されたならば、そのような同軸ケーブル、ファイバー光学ケーブル、ツイストペアケーブル、DSL、あるいは赤外波、電波、マイクロ波などのワイヤレス技術は、媒体の定義に含まれるものである。
しかしながら、コンピュータ読み取り可能な記憶媒体およびデータ記憶媒体は、接続媒体、搬送波、信号、あるいは他の一時的な媒体を含まず、その代わりに、非一時的な触知可能な記憶媒体に向けられている。ここで用いられる磁気ディスク(概してデータを磁気的に再生する)、光学ディスク(データをレーザによって光学的に再生する)は、コンパクトディスク(CD)、レーザディスク、光学ディスク、デジタルバーサタイルディスク(DVD)、フロッピーディスク、ブルーレイディスクを含む。上記の組み合わせは、コンピュータ読み取り可能な媒体の範囲に含まれる。
命令は、1つ以上のデジタルシグナルプロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラマブルロジックアレイ(FPGA)あるいは他の同等の一体化あるいは離散的ロジック回路などの1つ以上のプロセッサによって実行される。ここにおいて用いられる術語“プロセッサ”は上記した構造の任意のものあるいは、ここに記述された技術の実装に適した任意の他の構造、を意味するものとする。さらに、一部の例において、ここに記述された機能は、専用のハードウエア及び/又は符号化および復号用として構成され、あるいは組み合わされたコーデックの中に組み込まれた、ソフトウエアモジュールにおいて提供される。さらに、当該技術は、1つ以上の回路あるいはロジック要素の中に完全に実装される。
この開示の技術は、ワイヤレスハンドセット、集積回路(IC)、あるいはICの組(例えばチップセット)を含む、広範囲のデバイスあるいは装置において実装される。種々のコンポーネント、モジュールあるいはユニットは、開示された技術を実行するように構成された装置の機能的な側面を強調するためにこの開示において記述されたが、かならずしも異なるハードウエアユニットによる実現を必要とするものではない。どちらかというと、上記したように、種々のユニットは、コーデックハードウエアユニットにおいて組み合わされるかあるいは適当なソフトウエア及び/又はファームウエアに関連して、上記した1つ以上のプロセッサを含む、協働するハードウエアユニットの収集物によって提供される。
種々の例が記述された。これらの及び他の例は次の特許請求の範囲の権利範囲内に含まれる。
以下に本願出願当初の特許請求の範囲を付記する。
[C1] グラフィックス処理ユニットであって、
複数の命令を並列に実行するように構成されたシェーダプロセッサと、
グラフィックスデータをレンダリングするように構成された1つ以上の固定関数ハードウエアユニットと、
ホストプロセッサから1つ以上のタスクを受け取って、前記シェーダプロセッサと前記1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを独立にスケジューリングするように構成されたコマンドプロセッサと、を備えるグラフィックス処理ユニット。
[C2] 前記コマンドプロセッサは、受け取った前記1つ以上のタスクのコマンドキューを維持するように構成され、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるC1に記載のグラフィックス処理ユニット。
[C3] 前記コマンドプロセッサは、前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするように構成されるC1記載のグラフィックス処理ユニット。
[C4] 前記コマンドプロセッサは、ホストプロセッサから前記1つ以上のタスクの各優先度の指示を受け取るように構成されるC1記載のグラフィックス処理ユニット。
[C5] 前記コマンドプロセッサは、アクティブタスクのリストを維持するように構成され、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるC1記載のグラフィックス処理ユニット。
[C6] 前記コマンドプロセッサは、前記1つ以上のタスクの第1のタスクの実行を停止して、前記1つ以上のタスクの第2のタスクの実行を開始するように構成されるC1に記載のグラフィックス処理ユニット。
[C7] 前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーするように構成されるメモリコピーエンジンをさらに備えるC1記載のグラフィックス処理ユニット。
[C8] 前記コマンドプロセッサは、前記メモリコピーエンジンのオペレーションを制御するC7記載のグラフィックス処理ユニット。
[C9] グラフィックス処理ユニットを制御するための方法であって、
ホストプロセッサから1つ以上のタスクを受け取ることと、
シェーダプロセッサおよび1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべきタスクを、前記ホストプロセッサから独立してスケジューリングすることであって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成されることと、を備える方法。
[C10] 受け取った前記1つ以上のタスクのコマンドキューを維持することをさらに備え、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるC9に記載の方法。
[C11] 前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングすることをさらに備えるC9記載のグラフィックス処理ユニット。
[C12] アクティブタスクのリストを維持することをさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるC9記載の方法。
[C13] 前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始することをさらに備えるC9記載の方法。
[C14] 前記1つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備えるC9に記載の方法。
[C15] グラフィックス処理ユニットを制御するための装置であって、
ホストプロセッサから1つ以上のタスクを受け取るための手段と、
シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングするための手段であって、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される手段と、を具備する装置。
[C16] 受け取った前記1つ以上のコマンドキューを維持するための手段をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるC15記載の装置。
[C17] 前記1つ以上のタスクの各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするための手段をさらに備えるC15記載の装置。
[C18] アクティブタスクのリストを維持するための手段をさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるC15記載の装置。
[C19] 前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始することをさらに備えるC15記載の装置。
[C20] 前記1つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備えるC15に記載の装置。
[C21] 命令が記憶されたコンピュータ読み取り可能な媒体を備えるコンピュータプログラムプロダクトであって、前記命令は、実行されたときに、1つ以上のプロセッサに、
ホストプロセッサからの1つ以上のタスクを受け取らせ、
シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記ホストプロセッサから独立してスケジューリングさせ、ここにおいて、前記シェーダプロセッサは、複数の命令を並列に実行するように構成され、前記1つ以上の固定関数ハードウエアユニットはグラフィックスデータをレンダリングするように構成される、コンピュータプログラムプロダクト。
[C22] 実行されたときに、前記1つ以上のプロセッサに、受け取った前記1つ以上のタスクのコマンドキューを維持させる命令をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備えるC21に記載のコンピュータプログラムプロダクト。
[C23] 実行されたときに、前記1つ以上のプロセッサに、前記1つ以上のタスクの各優先度を決定させ、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングさせる命令をさらに備えるC21に記載のコンピュータプログラムプロダクト。
[C24] 実行されたときに、前記1つ以上のプロセッサに、アクティブタスクのリストを維持させる命令をさらに備え、ここにおいて、アクティブタスクは前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクであるC21に記載のコンピュータプログラムプロダクト。
[C25] 実行されたときに、前記1つ以上のプロセッサに、前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始させる命令をさらに備えるC9記載のコンピュータプログラムプロダクト。
[C26] 実行されたときに、前記1つ以上のプロセッサに、前記1つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーさせる命令をさらに備えるC21に記載のコンピュータプログラムプロダクト。

Claims (24)

  1. グラフィックス処理ユニットであって、
    複数の命令を並列に実行するように構成された処理ユニットアレイを有するシェーダプロセッサと、
    前記シェーダプロセッサの前記処理ユニットアレイから分離された、1つ以上の固定関数ハードウエアユニットと、ここで、前記1つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される、
    ホストプロセッサから1つ以上のタスクを受け取って、前記1つ以上のタスクの各々のオペレーションのタイプおよび前記1つ以上のタスクの各優先度に基づいて前記シェーダプロセッサと前記1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを独立にスケジューリングするように構成されたコマンドプロセッサと、を備えるグラフィックス処理ユニット。
  2. 前記コマンドプロセッサは、受け取った前記1つ以上のタスクのコマンドキューを維持するように構成され、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項1に記載のグラフィックス処理ユニット。
  3. 前記コマンドプロセッサは、前記1つ以上のタスクの前記各優先度を決定して、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするように構成される請求項1記載のグラフィックス処理ユニット。
  4. 前記コマンドプロセッサは、前記ホストプロセッサから前記1つ以上のタスクの前記各優先度の指示を受け取り、前記1つ以上のタスクの前記各優先度に基づいて、前記1つ以上のタスクをスケジューリングするように構成される請求項1記載のグラフィックス処理ユニット。
  5. 前記コマンドプロセッサは、アクティブタスクのリストを維持するように構成され、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項1記載のグラフィックス処理ユニット。
  6. 前記コマンドプロセッサは、前記1つ以上のタスクの第1のタスクの実行を停止して、前記1つ以上のタスクの第2のタスクの実行を開始するように構成される請求項1に記載のグラフィックス処理ユニット。
  7. 前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーするように構成されるメモリコピーエンジンをさらに備える請求項1記載のグラフィックス処理ユニット。
  8. 前記コマンドプロセッサは、前記メモリコピーエンジンのオペレーションを制御する請求項7記載のグラフィックス処理ユニット。
  9. グラフィックス処理ユニットを制御するための方法であって、
    ホストプロセッサから1つ以上のタスクを受け取ることと、
    シェーダプロセッサおよび1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記1つ以上のタスクの各々のオペレーションのタイプおよび前記1つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングすることであって、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記1つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成されることと、を備える方法。
  10. 受け取った前記1つ以上のタスクのコマンドキューを維持することをさらに備え、前記コマンドキューは、前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項9に記載の方法。
  11. アクティブタスクのリストを維持することをさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項9記載の方法。
  12. 前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始することをさらに備える請求項9記載の方法。
  13. 前記1つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーすることをさらに備える請求項9に記載の方法。
  14. グラフィックス処理ユニットを制御するための装置であって、
    ホストプロセッサから1つ以上のタスクを受け取るための手段と、
    シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記1つ以上のタスクの各々のオペレーションのタイプおよび前記1つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングするための手段であって、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記1つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される手段と、を具備する装置。
  15. 受け取った前記1つ以上のタスクのコマンドキューを維持するための手段をさらに備え、前記コマンドキューは前記グラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項14記載の装置。
  16. アクティブタスクのリストを維持するための手段をさらに備え、アクティブタスクは、前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項14記載の装置。
  17. 前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始する手段をさらに備える請求項14記載の装置。
  18. 前記1つ以上のタスクの実行に先立って、前記グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーする手段をさらに備える請求項14に記載の装置。
  19. 令を備えるコンピュータプログラムであって、前記命令は、実行されたときに、1つ以上のプロセッサに、
    ホストプロセッサからの1つ以上のタスクを受け取らせ、
    シェーダプロセッサ及び1つ以上の固定関数ハードウエアユニットによって選択的に実行されるべき前記1つ以上のタスクを、前記1つ以上のタスクの各々のオペレーションのタイプおよび前記1つ以上のタスクの各優先度に基づいて、前記ホストプロセッサから独立してスケジューリングさせ、ここで、前記シェーダプロセッサは、複数の命令を並列に実行するように構成された処理ユニットアレイを含み、前記1つ以上の固定関数ハードウエアユニットは、前記シェーダプロセッサから分離されており、前記シェーダプロセッサによって実行されないグラフィックスレンダリングオペレーションを実行するように構成される、コンピュータプログラム。
  20. 実行されたときに、前記1つ以上のプロセッサに、受け取った前記1つ以上のタスクのコマンドキューを維持させる命令をさらに備え、前記コマンドキューはグラフィックス処理ユニットによって実行されるべきタスクのリストを備える請求項19に記載のコンピュータプログラム。
  21. 実行されたときに、前記1つ以上のプロセッサに、アクティブタスクのリストを維持させる命令をさらに備え、ここにおいて、アクティブタスクは前記シェーダプロセッサの少なくとも1つおよび前記1つ以上の固定関数ハードウエアユニットによって現在実行されているタスクである請求項19に記載のコンピュータプログラム。
  22. 実行されたときに、前記1つ以上のプロセッサに、前記1つ以上のタスクの第1のタスクの実行を中断して、前記1つ以上のタスクの第2のタスクの実行を開始させる命令をさらに備える請求項19記載のコンピュータプログラム。
  23. 実行されたときに、前記1つ以上のプロセッサに、前記1つ以上のタスクの実行に先立って、グラフィックス処理ユニットのメモリから前記シェーダプロセッサのメモリにデータをコピーさせる命令をさらに備える請求項19に記載のコンピュータプログラム。
  24. 前記オペレーションのタイプに基づいて、前記1つ以上のタスクを独立にスケジューリングするために、前記コマンドプロセッサが、前記1つ以上のタスクがグラフィックスレンダリングオペレーションまたは汎用オペレーションに関連するかどうかを決定するように構成される請求項1に記載のグラフィックス処理ユニット。
JP2014547259A 2011-12-15 2012-11-20 コマンドプロセッサを備えるグラフィックス処理ユニット Active JP5735187B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/327,069 US8842122B2 (en) 2011-12-15 2011-12-15 Graphics processing unit with command processor
US13/327,069 2011-12-15
PCT/US2012/066079 WO2013089989A1 (en) 2011-12-15 2012-11-20 Graphics processing unit with command processor

Publications (2)

Publication Number Publication Date
JP2015506036A JP2015506036A (ja) 2015-02-26
JP5735187B2 true JP5735187B2 (ja) 2015-06-17

Family

ID=47428989

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2014547259A Active JP5735187B2 (ja) 2011-12-15 2012-11-20 コマンドプロセッサを備えるグラフィックス処理ユニット

Country Status (9)

Country Link
US (1) US8842122B2 (ja)
EP (1) EP2791910B1 (ja)
JP (1) JP5735187B2 (ja)
KR (1) KR101563098B1 (ja)
CN (1) CN103999128B (ja)
ES (1) ES2614716T3 (ja)
HU (1) HUE031474T2 (ja)
IN (1) IN2014CN04203A (ja)
WO (1) WO2013089989A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422852B2 (en) 2017-12-11 2022-08-23 Samsung Electronics Co., Ltd. Electronic device capable of increasing task management efficiency of digital signal processor

Families Citing this family (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8941671B2 (en) 2012-01-13 2015-01-27 Microsoft Corporation Para-virtualized domain, hull, and geometry shaders
US8941670B2 (en) * 2012-01-17 2015-01-27 Microsoft Corporation Para-virtualized high-performance computing and GDI acceleration
WO2013178245A1 (en) * 2012-05-29 2013-12-05 Qatar Foundation A graphics processing unit controller, host system, and methods
US10002021B2 (en) * 2012-07-20 2018-06-19 Qualcomm Incorporated Deferred preemption techniques for scheduling graphics processing unit command streams
US8963933B2 (en) * 2012-07-23 2015-02-24 Advanced Micro Devices, Inc. Method for urgency-based preemption of a process
WO2014143067A1 (en) * 2013-03-15 2014-09-18 Intel Corporation Work stealing in heterogeneous computing systems
US20160062930A1 (en) * 2013-03-25 2016-03-03 Mitsubishi Electric Corporation Bus master, bus system, and bus control method
US9632834B2 (en) * 2013-05-17 2017-04-25 Nvidia Corporation Assigning priorities to computational work streams by mapping desired execution priorities to device priorities
CN103679789B (zh) * 2013-12-09 2017-01-18 北京大学 基于数据流图的并行绘制与可视化方法及系统
US9632761B2 (en) * 2014-01-13 2017-04-25 Red Hat, Inc. Distribute workload of an application to a graphics processing unit
KR101555426B1 (ko) * 2014-02-07 2015-09-25 고려대학교 산학협력단 지형 렌더링 방법 및 장치
US9679347B2 (en) 2014-02-18 2017-06-13 Qualcomm Incorporated Shader pipeline with shared data channels
US9530174B2 (en) 2014-05-30 2016-12-27 Apple Inc. Selective GPU throttling
CN106687927B (zh) * 2014-09-12 2021-11-05 英特尔公司 促进在计算装置上的图形处理单元的命令分组的动态并行调度
US10521874B2 (en) 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
US9697580B2 (en) * 2014-11-10 2017-07-04 Qualcomm Incorporated Dynamic pipeline for graphics processing
US10068306B2 (en) * 2014-12-18 2018-09-04 Intel Corporation Facilitating dynamic pipelining of workload executions on graphics processing units on computing devices
US20160335064A1 (en) * 2015-05-12 2016-11-17 Advanced Micro Devices, Inc. Infrastructure to support accelerator computation models for active storage
CN104933752B (zh) * 2015-06-29 2018-08-07 上海兆芯集成电路有限公司 一种计算机系统、图形处理单元及其图形处理方法
JP6540294B2 (ja) * 2015-07-08 2019-07-10 富士通株式会社 制御装置、制御方法及びプログラム
KR102399686B1 (ko) * 2015-07-28 2022-05-19 삼성전자주식회사 3d 렌더링 방법 및 장치
GB2545508B (en) 2015-12-18 2019-04-10 Imagination Tech Ltd Controlling operation of a GPU
GB2545507B (en) 2015-12-18 2019-07-17 Imagination Tech Ltd Controlling scheduling of a GPU
US9892544B2 (en) * 2015-12-22 2018-02-13 Intel Corporation Method and apparatus for load balancing in a ray tracing architecture
US10460513B2 (en) * 2016-09-22 2019-10-29 Advanced Micro Devices, Inc. Combined world-space pipeline shader stages
US10929944B2 (en) * 2016-11-23 2021-02-23 Advanced Micro Devices, Inc. Low power and low latency GPU coprocessor for persistent computing
CN106651745A (zh) * 2016-12-12 2017-05-10 中国航空工业集团公司西安航空计算技术研究所 一种分离式图形处理器指令处理系统
US10026145B2 (en) 2016-12-13 2018-07-17 Qualcomm Incorporated Resource sharing on shader processor of GPU
US10417815B2 (en) * 2017-01-27 2019-09-17 Advanced Micro Devices, Inc. Out of order pixel shader exports
US10614611B2 (en) * 2017-04-07 2020-04-07 Intel Corporation Apparatus and method for implementing bounding volume hierarchy (BVH) operations on tesselation hardware
US11003592B2 (en) * 2017-04-24 2021-05-11 Intel Corporation System cache optimizations for deep learning compute engines
GB2563588B (en) 2017-06-16 2019-06-26 Imagination Tech Ltd Scheduling tasks
GB2563587B (en) * 2017-06-16 2021-01-06 Imagination Tech Ltd Scheduling tasks
US10373287B2 (en) 2017-08-18 2019-08-06 Apple Inc. Fast GPU context switch
GB2573316B (en) * 2018-05-02 2021-01-27 Advanced Risc Mach Ltd Data processing systems
US20190370059A1 (en) * 2018-05-30 2019-12-05 Advanced Micro Devices, Inc. Multi-kernel wavefront scheduler
CN109684144B (zh) * 2018-12-26 2021-11-02 郑州云海信息技术有限公司 一种gpu-box系统测试的方法及装置
CN109992422A (zh) * 2019-04-11 2019-07-09 北京朗镜科技有限责任公司 一种面向gpu资源的任务调度方法、装置和系统
US11017773B2 (en) * 2019-07-09 2021-05-25 Bank Of America Corporation Voice-based time-sensitive task processing over a high generation cellular network
CN110716805A (zh) * 2019-09-27 2020-01-21 上海依图网络科技有限公司 图形处理器的任务分配方法、装置、电子设备及存储介质
US11734873B2 (en) 2019-12-13 2023-08-22 Sony Group Corporation Real-time volumetric visualization of 2-D images
US20200226067A1 (en) * 2020-03-24 2020-07-16 Intel Corporation Coherent multiprocessing enabled compute in storage and memory
GB2599125B (en) * 2020-09-24 2023-09-20 Imagination Tech Ltd Memory allocation in a ray tracing system
CN112398915B (zh) * 2020-10-28 2022-07-01 武汉大势智慧科技有限公司 一种云渲染平台的app应用审核方法及系统
US11789711B2 (en) * 2020-12-30 2023-10-17 Mercury Mission Systems, Llc Using artificial intelligence to optimize software to run on heterogeneous computing resource

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP1687732A4 (en) * 2003-11-19 2008-11-19 Lucid Information Technology Ltd METHOD AND SYSTEM FOR A MULTIPLEXED 3D GRAPHIC PIPELINE VIA A PC BUS
US7583268B2 (en) 2005-11-10 2009-09-01 Via Technologies, Inc. Graphics pipeline precise interrupt method and apparatus
US9135017B2 (en) * 2007-01-16 2015-09-15 Ati Technologies Ulc Configurable shader ALU units
US8325184B2 (en) * 2007-09-14 2012-12-04 Qualcomm Incorporated Fragment shader bypass in a graphics processing unit, and apparatus and method thereof
US20100262773A1 (en) * 2009-04-08 2010-10-14 Google Inc. Data striping in a flash memory data storage device
US20100262979A1 (en) * 2009-04-08 2010-10-14 Google Inc. Circular command queues for communication between a host and a data storage device
TWI393067B (zh) 2009-05-25 2013-04-11 Inst Information Industry 具有電源閘控功能之繪圖處理系統及電源閘控方法,及其電腦程式產品
US8310492B2 (en) 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
US9142057B2 (en) 2009-09-03 2015-09-22 Advanced Micro Devices, Inc. Processing unit with a plurality of shader engines
US8854381B2 (en) * 2009-09-03 2014-10-07 Advanced Micro Devices, Inc. Processing unit that enables asynchronous task dispatch
US8884957B2 (en) 2009-09-09 2014-11-11 Advanced Micro Devices, Inc. Tessellation engine and applications thereof
US8743131B2 (en) 2009-09-10 2014-06-03 Advanced Micro Devices, Inc. Course grain command buffer
US8499305B2 (en) * 2010-10-15 2013-07-30 Via Technologies, Inc. Systems and methods for performing multi-program general purpose shader kickoff
US9645854B2 (en) * 2010-12-15 2017-05-09 Advanced Micro Devices, Inc. Dynamic work partitioning on heterogeneous processing devices
US9092267B2 (en) * 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US9239793B2 (en) * 2011-12-13 2016-01-19 Ati Technologies Ulc Mechanism for using a GPU controller for preloading caches

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11422852B2 (en) 2017-12-11 2022-08-23 Samsung Electronics Co., Ltd. Electronic device capable of increasing task management efficiency of digital signal processor

Also Published As

Publication number Publication date
HUE031474T2 (en) 2017-07-28
US20130155080A1 (en) 2013-06-20
EP2791910B1 (en) 2016-11-09
US8842122B2 (en) 2014-09-23
EP2791910A1 (en) 2014-10-22
KR101563098B1 (ko) 2015-10-23
IN2014CN04203A (ja) 2015-07-17
WO2013089989A1 (en) 2013-06-20
CN103999128A (zh) 2014-08-20
JP2015506036A (ja) 2015-02-26
KR20140109431A (ko) 2014-09-15
CN103999128B (zh) 2015-09-30
ES2614716T3 (es) 2017-06-01

Similar Documents

Publication Publication Date Title
JP5735187B2 (ja) コマンドプロセッサを備えるグラフィックス処理ユニット
CN109478310B (zh) 在计算环境中使用纹素着色器的多分辨率延迟着色
JP5960368B2 (ja) ビジビリティ情報を用いたグラフィックスデータのレンダリング
CN106575430B (zh) 用于像素哈希的方法和装置
TW201706840A (zh) 促進圖形處理命令的動態運行時變換以用於在計算裝置之改善的圖形效能
TWI725024B (zh) 促進高效圖形命令產生和執行的設備、方法及非暫態機器可讀取媒體
US9501860B2 (en) Sparse rasterization
TW201539372A (zh) 對單片程式之映射多重速率著色技術
EP3646177B1 (en) Early virtualization context switch for virtualized accelerated processing device
JP2009543195A (ja) グラフィックスパイプラインステートの高速再構成
US10388056B2 (en) Split frame rendering
KR102266962B1 (ko) 그래픽 파이프라인의 메모리 사용 감소를 위한 컴파일러 지원 기술
CN114028804A (zh) 流式传输压缩光场
JP2017097870A (ja) グラフィックス処理装置を含むコンピューティング装置、及びグラフィックス処理装置においてグラフィックスパイプラインを実行する方法
CN113393564B (zh) 利用全局照明数据结构的基于水塘的时空重要性重采样
US20230205608A1 (en) Hardware supported split barrier
US11972518B2 (en) Hybrid binning
US20210089423A1 (en) Flexible multi-user graphics architecture
US10832465B2 (en) Use of workgroups in pixel shader
US11880924B2 (en) Synchronization free cross pass binning through subpass interleaving
US20240070961A1 (en) Vertex index routing for two level primitive batch binning
CN115205091A (zh) 动态场景中改进的时间降噪器质量

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141201

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20141201

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20141209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150113

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150224

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: 20150317

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150415

R150 Certificate of patent or registration of utility model

Ref document number: 5735187

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250