JP2013504131A - 非同期タスクディスパッチを可能にする処理ユニット - Google Patents

非同期タスクディスパッチを可能にする処理ユニット Download PDF

Info

Publication number
JP2013504131A
JP2013504131A JP2012528081A JP2012528081A JP2013504131A JP 2013504131 A JP2013504131 A JP 2013504131A JP 2012528081 A JP2012528081 A JP 2012528081A JP 2012528081 A JP2012528081 A JP 2012528081A JP 2013504131 A JP2013504131 A JP 2013504131A
Authority
JP
Japan
Prior art keywords
task
tasks
type
processing unit
shader core
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.)
Granted
Application number
JP2012528081A
Other languages
English (en)
Other versions
JP5791608B2 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices 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
Family has litigation
First worldwide family litigation filed litigation Critical https://patents.darts-ip.com/?family=43501178&utm_source=google_patent&utm_medium=platform_link&utm_campaign=public_patent_search&patent=JP2013504131(A) "Global patent litigation dataset” by Darts-ip is licensed under a Creative Commons Attribution 4.0 International License.
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2013504131A publication Critical patent/JP2013504131A/ja
Application granted granted Critical
Publication of JP5791608B2 publication Critical patent/JP5791608B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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/461Saving or restoring of program or task context
    • G06F9/463Program control block organisation
    • 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
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • 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/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • 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
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5017Task decomposition

Landscapes

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

Abstract

【解決手段】
複数の仮想エンジンとシェーダコアとを含む処理ユニット。複数の仮想エンジンは、(i)オペレーティングシステム(OS)から複数のタスクを互いに実質的に並列に受信すると共に(ii)複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される。シェーダコアは、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクを実質的に並列に実行するように構成される。処理ユニットは、複数のタスクがシェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを含んでいてもよい。
【選択図】図4

Description

本発明は概してコンピュータシステムにおいて行われるコンピューティング動作に向けられている。より特定的には、本発明はコンピューティング動作を行うグラフィクス処理ユニット(GPU)等の処理ユニット及びそのアプリケーションに向けられている。
GPUは、グラフィクス処理タスク等のデータ並列コンピューティングタスクを行うことに適合させられている複雑な集積回路である。GPUは、例えば、ビデオゲームアプリケーション等のエンドユーザアプリケーションによって要求されるグラフィクス処理タスクを実行することができる。GPUは、ディスクリートな(即ち別個の)デバイス及び/又はパッケージであることがあり、あるいは別のプロセッサ(例えば中央処理ユニット(CPU))と同じデバイス及び/又パッケージ内に含まれていることがある。例えばGPUは、経路付けデバイス又は例えばノースブリッジ等のブリッジデバイス内にしばしば集積化される。
エンドユーザアプリケーションとGPUの間には何層ものソフトウエアが存在する。エンドユーザアプリケーションは、アプリケーションプログラミングインタフェース(API)と通信する。APIは、GPUに依存するフォーマットでよりはむしろ標準的なフォーマットでエンドユーザアプリケーションがグラフィクスデータ及びコマンドを出力することを可能にする。ワシントン、レドモンドのマイクロソフト社(Microsoft Corporation of Redmond, Washington)によって開発されたダイレクトX(DirectX)(登録商標)及びクロノスグループ(Khronos Group)によって推奨されているオープンGL(OpenGL)(登録商標)を含めて様々な種類のAPIが商業的に利用可能である。APIはドライバと通信する。ドライバは、APIから受信した標準コードを、GPUによって理解されるネイティブフォーマットの命令にトランスレートする。ドライバは典型的にはGPUの製造業者によって書かれる。GPUは次いでドライバからの命令を実行する。
GPUによって行われるグラフィクス処理タスクは、典型的には、行列操作及びベクトル操作等の複雑な数学的計算を伴う。単一のグラフィクス処理タスクを行うために、GPUは複数の異なるスレッド(命令のシーケンス)を実行することがある。各スレッドは、幾何シェーダ(shader)、画素シェーダ、頂点シェーダ等のシェーダプログラムを備えているかもしれない。各スレッド(例えばシェーダプログラム)は、典型的には、GPUのデータ記憶ユニット内にローカル的に記憶される状態データ(例えばテクスチャハンドル、シェーダ定数、変形行列、等)のセットと関連付けられている。ローカル的に記憶される状態データはコンテクストと称される。
単一のグラフィクス処理タスクの種々のスレッド(例えばシェーダプログラム)を効率的に実行するために、GPUはシェーダコアと称される処理要素のアレイを含む。処理要素のアレイは、単一命令多重データ(SIMD)デバイスへと組織化される。多重スレッド(例えばシェーダプログラム)がシェーダコアに同時に発行されることがあり、各スレッド(例えばシェーダプログラム)を実行するために必要とされるデータは、シェーダコアの異なる処理要素へ並列に分配される。異なる処理要素は次いで、データ上での動作を並列に行うことができる。このようにしてGPUは、グラフィクス処理タスクに必要な複雑な数学的計算を典型的な中央処理ユニット(CPU)よりも速く行うことができる。結果として、コンピューティングシステムがGPUを含む場合には、グラフィクス処理タスク(及び他の種類のデータ並列処理タスク)は、典型的にはCPUよりはむしろGPUへ渡される。
タスクをGPUへ渡すために、オペレーティングシステム(OS)スケジューラはタスクをコマンドバッファ内に記憶する。従来のGPUは1度に1つのコマンドバッファを処理する。OSスケジューラはコマンドバッファ内にタスクをシリアルに置き、そしてGPUは典型的にはタスクをそれらがコマンドバッファ内に置かれている順で処理する。しかし、場合によっては、GPUはタスクをそれらがコマンド内に置かれた順ではなく処理するかもしれない。例えばGPUは、第1のタスクの実行に割り込んで、第1のタスクの後にコマンドバッファ内に置かれた更に重要な(例えば低遅延な(low-latency))タスクを実行することがある。
第1のタスクがGPUのシェーダコア内での完了を終えてしまう前にその更に重要な(例えば低遅延な)タスクを行うために、従来のGPUはコンテクストスイッチを行う。即ち、第1のタスクのスレッドに関連付けられる状態データは、従来のGPUによって維持されているバックアップ記憶ユニット内へと交換され、そしてその更に重要な(例えば低遅延な)タスクのスレッド(例えばシェーダプログラム)に関連付けられる新たな状態データがリトリーブされて(retrieved)シェーダコアのデータ記憶ユニット内に置かれる。シェーダコアは次いで、その更に重要な(例えば低遅延な)タスクのスレッド(例えばシェーダプログラム)をデータ記憶ユニット内に記憶される新たな状態データに基づいて実行する。その更に重要な(例えば低遅延な)タスクが実行を完了した後に、その更に重要な(例えば低遅延な)タスクのスレッドに関連付けられる状態データはデータ記憶ユニットからフラッシュされ(flushed)、そして第1のタスクのスレッドからの状態データがシェーダコアのデータ記憶ユニット内へと交換され戻される。次いでシェーダコアは第1のタスクのスレッドの実行を再開する(resume)ことができる。
コンテクストスイッチにより、GPUは複数のタスクをそれらがコマンドバッファ内に置かれた順ではなく処理することが可能になるが、コンテクストスイッチには幾つかの理由により問題がある。先ず、コンテクストスイッチを行うのに相当量の時間が必要であり、GPUの性能を制限してしまう。また、コンテクストスイッチは、スイッチされているコンテクストを記憶するために追加的なローカルメモリ(例えばバックアップ記憶ユニット)を必要とする。追加的なローカルメモリは貴重なチップ面積を占め、結果としてGPUの大型化を招く。
相当量の時間と面積を必要とすることに加えて、コンテクストスイッチは、低遅延高優先度タスクを処理するのには効果的でない。低遅延高優先度タスクを実行するようシェーダコアを準備するために、従来のGPUはコンテクストスイッチを行う必要がある。コンテクストスイッチに伴う時間(例えば数百クロックサイクル)は、低遅延高優先度タスクを実行するための実際の時間がたとえ比較的短い(例えば数十クロックサイクル)ことがあるとしても、低遅延高優先度タスクを実行するための実効時間を比較的長くしてしまう。
上述に鑑み、コンテクストスイッチなしに重要な(例えば低遅延な)タスクを効率的に処理することができる処理ユニットが必要とされている。
本発明の実施形態は、非同期タスクディスパッチを可能にするための方法、装置及びシステム並びにそれらのアプリケーションを提供することによって、上述の必要性を満たす。
例えば、本発明の実施形態は、複数の仮想エンジンとシェーダコアとを含む処理ユニットを提供する。複数の仮想エンジンは、(i)オペレーティングシステム(OS)から複数のタスクを互いに実質的に並列に受信すると共に(ii)複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される。シェーダコアは、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクを実質的に並列に実行するように構成される。処理ユニットは、複数のタスクがシェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを含んでいてもよい。
別の実施形態では、処理ユニットはソフトウエアにおいて定義される。この実施形態では、コンピュータプログラム製品は、コンピューティングデバイス上で実行される場合に処理ユニットを定義する命令が入っているコンピュータ可読記憶媒体を含む。
更なる実施形態では、処理ユニットはコンピューティングシステム内に含まれる。この実施形態では、コンピューティングシステムは、メモリと、第1の処理ユニットと、第2の処理ユニットと、メモリ、第1の処理ユニット及び処理ユニットに結合されるバスと、を含む。例示的なコンピューティングシステムは、限定はされないが、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス(例えば携帯電話、スマートフォン、MP3プレイヤ、カメラ、GPSデバイス等)、又は処理ユニットを含み若しくは処理ユニットを含むように構成される何らかの他のデバイスを含んでいてよい。
本発明の別の実施形態は、処理ユニットにおいてタスクを処理するためのコンピュータ実装の方法(computer-implemented method)を提供する。このコンピュータ実装の方法は幾つかの動作を含む。第1の動作においては、オペレーティングシステム(OS)から複数のタスクが互いに並列に受信される。第2の動作においては、複数のタスクの各々に関連付けられる状態データのセットがロードされる。第3の動作においては、複数のタスクの各々に関連付けられる状態データのセットに基づいて複数のタスクがシェーダコア内で実質的に並列に実行される。このコンピュータ実装の方法は、複数のタスクがシェーダコアへ発行されるようにスケジューリングすることを含んでいてもよい。
本発明の更なる実施形態は、処理ユニットへタスクを提供するためのコンピュータ実装の方法を提供する。この方法は幾つかの動作を含む。第1の動作においては、複数のタスクが1つ以上のアプリケーションから受信され、ここで各タスクは優先度種類の表示を含む。第2の動作においては、複数のタスク及び各タスクに関連付けられる優先度種類の表示が処理ユニットへ提供される。ある実施形態においては、コンピュータプログラム製品のコンピュータ可読記憶媒体上に記憶される命令は、その命令がコンピューティングデバイスによって実行される場合に、コンピューティングデバイスにこの方法を行わせてよい。
本発明の更なる特徴及び利点の他、本発明の種々の実施形態の構成及び動作は、添付の図面を参照して以下に詳細に説明される。尚、本発明はここに説明される特定の実施形態に限定されない。そのような実施形態は例示の目的のみのためにここに提示されている。追加的な実施形態はここに含まれる教示に基き関連分野を含めた当業者にとって明らかであろう。
ここに組み込まれ且つ出願書類の一部をなす添付の図面は本発明を示し、そして明細書と共に、本発明の原理を説明すること及び関連分野を含めた当業者が本発明を作りそして使用するのを可能にすることに更に役立つ。
図1は本発明の実施形態に従う例示的なコンピュータシステムを示すブロック図である。
図2は本発明の実施形態に従う例示的なGPUのブロック図である。
図3Aは本発明の実施形態に従いGPUの仮想エンジンにタスクを発行するための例示的なワークフローを示すブロック図(その1)である。 図3Bは本発明の実施形態に従いGPUの仮想エンジンにタスクを発行するための例示的なワークフローを示すブロック図(その2)である。
図4は本発明の実施形態に従いGPUの仮想エンジンにタスクを発行するための更に詳細な例示的なワークフローを示す図である。
図5は本発明の実施形態が実装され得る例示的なコンピュータシステムのブロック図である。
本発明の特徴及び利益は、図面と共に以下に記述される詳細な説明からより明らかになり、図面において同様の参照符号は全体を通して対応する要素を識別する。図面において、同様の参照数字は一般的に同一の、機能的に類似の、及び/又は構造的に類似の要素を示す。ある要素が最初に現れる図面は対応する参照番号の一番左の単一又は複数の桁によって示される。
I.概説
本発明の実施形態は、非同期タスクディスパッチを可能にする処理ユニット及びそのアプリケーションを提供する。以下の詳細な説明において、「1つの実施形態」、「ある実施形態」、「例示的実施形態」等に対する言及は、説明される実施形態が特定の特徴、構造又は特性を含んでいてよいが、全ての実施形態が必ずしも当該特定の特徴、構造又は特性を含む必要がなくてよいことを示している。また、そのような表現は必ずしも同じ実施形態を参照しているとは限らない。更に、特定の特徴、構造又は特性がある実施形態に関連して説明されている場合には、明示的に説明されていようとなかろうと、他の実施形態に関連して当該特定の特徴、構造又は特性を具現化することは当業者の知識の範囲内にあることと言える。
ある実施形態によると、処理ユニットは単一のシェーダコア上で具現化される複数の仮想エンジンを含む。各仮想エンジンは、データ並列処理タスク(例えばグラフィクス処理タスク及び一般計算タスク)を受信すると共にこれらのタスクを単一のシェーダコア上で独立して実行するように構成される。このようにして処理ユニットは、処理タスクの2つ以上の異なるストリーム、例えば低遅延処理タスクの第1のストリーム及び標準グラフィクス処理タスクの第2のストリームを、コンテクストスイッチを必要とせずに実行することができる。処理タスクの2つ以上の異なるストリームを実行することは、処理ユニットを停止し処理ユニットからデータを流出させることに関連するオーバーヘッドなしに、コンテクストスイッチの低遅延利益を提供する。事実、本発明の実施形態は、多重コンテクストが単一のシェーダコア内で存在し且つ(実質的に)同時に実行されることを可能にする。
例示のみを目的とし且つ限定を目的とせずに、本発明の実施形態はGPUに関してここに説明されることになる。しかし、関連分野を含めた当業者であれば、本発明の実施形態は処理タスクの複数のストリームを受信する他の種類の処理ユニット、例えば中央処理ユニット及びコプロセッサ、にも適用され得ることを理解するであろう。これら他の種類のプロセッサは本発明の精神及び範囲内で検討される。
実施形態においては、GPUは複数のコマンドバッファを処理する。低遅延処理タスクは例えば第1のコマンドバッファ内に置かれてよく、また標準グラフィクス処理タスクは例えば第2のコマンドバッファ内に置かれてよい。GPUの第1の仮想エンジンは低遅延処理タスクをリトリーブし、またGPUの第2の仮想エンジンは標準グラフィクス処理タスクをリトリーブする。各仮想エンジンからのタスクは次いで、実質的に互いに並列で単一のシェーダコアに発行される。
2つ以上の異なる仮想エンジンからの複数のタスクを単一のシェーダコアが(実質的に)同時に処理することを可能にするために、シェーダコアの資源は空間的且つ/又は時間的に区分化される。空間的な区分化を達成するためには、例えば、第1の仮想エンジンからの第1の(例えば低遅延の)タスクはシェーダコアの複数の処理要素(SIMD)の第1のサブセットへ発行され、また第2の仮想エンジンからの第2の(例えば標準グラフィクスの)タスクはシェーダコアの複数の処理要素(SIMD)の第2のサブセットへ発行される。時間的な区分化を達成するためには、例えば、第1及び第2のタスクは、シェーダコアの処理要素(SIMD)の一定の割合の時間を共有する。ある実施形態においては、GPUは、2つ以上の異なる仮想エンジンからのタスクをシェーダコア上での実行のためにスケジューリングするスケジューリングモジュールを含む。
本発明の実施形態に従いGPUの資源を共有して複数の仮想エンジンを提供することは、特に大きなチップ上でのGPU資源の使用を改善する。タスクの2つ以上のストリームが単一のシェーダコアに発行され得るので、GPUが効率的に計算上の及び入力/出力の設備を使用することが可能になる。例えば、GPUシェーダコアの資源(例えばSIMD)は、デマンド限界、優先度限界、及び/又はプリセット限界に基づいて並列タスク間で分割され得るが、任意の1つのタスクがGPUの資源を(実質的に)完全に消費することを一時的に可能にする。
本発明の実施形態に従う例示的なGPUの更なる詳細が以下に説明される。しかし、これらの詳細を提供するのに先立ちそのようなGPUが実装されるであろう例示的なシステムを説明することは有用である。
II.例示的なシステム
図1は実施形態に従うコンピューティングシステム100のブロック図である。コンピューティングシステム100は、CPU102、GPU110を含み、そして随意的にコプロセッサ112を含んでいてよい。図1の実施形態においては、CPU102及びGPU110が別個のブロックとして示されている。これは例示のみを目的としており且つ限定を目的としていない。関連分野を含めた当業者であれば、CPU102及びGPU110は別々のパッケージ内に含まれてよく又は単一のパッケージ若しくは集積回路内で結合されていてよいことを理解するはずである。
コンピューティングシステム100はまた、CPU102、GPU110及びコプロセッサ112によってアクセスされてよいシステムメモリ104を含む。実施形態においては、コンピューティングシステム100は、スーパーコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、ビデオゲームコンソール、埋め込みデバイス、携帯デバイス(例えば携帯電話、スマートフォン、MP3プレイヤ、カメラ、GPSデバイス等)、又はGPUを含み若しくはGPUを含むように構成される何らかの他のデバイスを備えていてよい。
GPU110は、特定の特別の機能(例えばグラフィクス処理タスク及びデータ並列一般計算タスク)を、CPU102がソフトウエアにおいてそれらを行い得るであろうよりも通常は高速に行うことによって、CPU102を支援する。GPU110は、単一のシェーダコアの資源を共有する複数の仮想エンジンを含む。このようにして、GPU110の複数の仮想エンジンは、複数のタスクを実質的に並列で実行することができる。実施形態においては、GPU110はチップセット及び/又はCPU102内に集積化されていてよい。GPU110の追加的な詳細は後で提供される。
コプロセッサ112もまたCPU102を支援する。コプロセッサ112は、限定はされないが、浮動小数点コプロセッサ、GPU、ネットワーキングコプロセッサ、並びに関連する分野を含めて当業者に明らかであろうような他の種類のコプロセッサ及びプロセッサを含んでいてよい。
GPU110及びコプロセッサ112は、CPU102及びシステムメモリとバス114を介して通信する。バス114は、周辺要素インタフェース(peripheral component interface)(PCI)バス、アクセラレーテッドグラフィクスポート(accelerated graphics port)(AGP)バス、PCIエクスプレス(PCI Express)(PCIE)バス、又は現在利用可能であり若しくは将来開発される別の種類のバスを含めてコンピュータシステムにおいて用いられる任意の種類のバスであってよい。
システムメモリ104に加えて、コンピューティングシステム100はローカルメモリ106及びローカルメモリ108を更に含む。ローカルメモリ106はGPU110に結合されており、またバス114に結合されていてもよい。ローカルメモリ108はコプロセッサ112に結合されており、またバス114に結合されていてもよい。ローカルメモリ106及び108は、特定のデータ(例えば頻繁に用いられるデータ)への、そのデータがシステムメモリ104内に記憶されていたとした場合に可能であろうよりも高速なアクセスを提供するために、それぞれGPU110及びコプロセッサ112に利用可能である。
ある実施形態においては、GPU110及びコプロセッサ112は、CPU102と並列に命令をデコードし、そしてそれらを対象としている命令のみを実行する。別の実施形態においては、GPU110及びコプロセッサ112を対象としている命令をCPU102がそれぞれのコマンドバッファへ送る。
図1には具体的に示されていないが、コンピューティングシステム100は、ディスプレイデバイス(例えば陰極線管、液晶ディスプレイ、プラズマディスプレイ等)を含み又はディスプレイデバイスに接続されていてもよい。ディスプレイデバイスは、コンテンツをユーザに表示するために用いられる(例えば、コンピューティングシステム100がコンピュータ、ビデオゲームコンソール又は携帯デバイスを備えている場合)。
III.例示的なプロセッサ
上述したように、GPU110はシェーダコア上で具現化される複数の仮想エンジンを含む。各仮想エンジンは、OSスケジューラによって提供される処理タスクのストリームを実行するように構成され、ここでは所与のストリームの各処理タスクは、複数の個別の処理スレッドを含んでいてよい。GPU110は複数の仮想エンジンを含むので、GPU110は、コンテクストスイッチを必要とせずに、OSスケジューラからの処理タスクの異なるストリームを実行することができる。事実、実施形態においては、GPU110は、複数の異なるコンテクストに対応する複数のストリームからのタスクを、タスク間でシェーダコアの資源を共有することによって、単一のシェーダコア内で(実質的に)同時に実行する。
図2はGPU110の例示的なハードウエア要素を示すブロック図である。図2を参照すると、GPU110は、コマンドプロセッサ230、入力論理(頂点解析器208、走査変換器212及び調整論理(arbitration logic)222を含む)、シェーダコア214、出力論理224、及びメモリシステム210を含む。これらの要素の各々は以下に説明される。
A.コマンドプロセッサ
コマンドプロセッサ230は、OSスケジューラによって満たされる1つ以上のコマンドバッファからタスク(例えばグラフィクス処理タスク及び一般計算タスク)を受信する。図3に示されるように、コマンドプロセッサ230は、GPU110の資源を共有する複数の仮想エンジンを含む。コマンドプロセッサ230の異なる仮想エンジンは異なる種類のタスクを処理する。
図2の実施形態においては、コマンドプロセッサ230は、第1の背景エンジン202A、第2の背景エンジン202B、実時間低遅延エンジン202C、主3Dエンジン202D、及び低遅延3Dエンジン202Eを含む。背景エンジン202は低優先度タスクを処理する。しかし、コマンドプロセッサ230は他の種類の仮想エンジンを含んでいてもよいことが理解されるべきである。背景エンジン202は、他の仮想エンジンがGPU110の資源を使用していない場合にのみGPU110の資源を引き継ぐ。実時間低遅延エンジン202Cは、高優先度タスクを処理するためにGPU110の資源への優先アクセスを有している。主3Dエンジン202Dは標準グラフィクス処理タスクを処理し、また低遅延3Dエンジン202Eは高優先度グラフィクス処理タスクを処理する。低遅延3Dエンジン202Eは、GPU110のグラフィクス処理資源への優先アクセスを有している。
GPU110のシェーダコア214へ発行されるのに先立ち、コマンドプロセッサ230からのタスクは入力論理に供給される。
B.入力論理
入力論理は、どのタスクがシェーダコア214へ発行されるのかを調整する(arbitrates)。ある実施形態においては、入力論理は、シェーダコア214の資源の利用可能性及び種々のタスクの相対的な優先度に基づいてタスクをシェーダコア214内での実行のために経路付けるソフトウエアルーチンを実装している。図3の実施形態においては、入力論理は、グラフィクス前処理論理(シェーダコア214への発行のためにグラフィクス処理タスクを準備する)及び調整論理222(タスクをシェーダコア214へ供給する)を含む。
グラフィクス前処理論理は、頂点解析器208及び走査変換器212を含む。主3Dエンジン202D及び低遅延3Dエンジン202Eからのタスクがグラフィクス前処理論理へ送られる。先入れ先出し(FIFO)バッファ204Aは主3Dエンジン202Dからのタスクを受信し、またFIFOバッファ204Bは低遅延3Dエンジン202Eからのタスクを受信する。マルチプレクサ206は、FIFOバッファ204の1つからのタスクを頂点解析器208へ供給する。
頂点解析器208は、グラフィクス処理タスク及び/又は一般計算タスクに関連するシェーダプログラムを識別し、そして利用可能になるはずの入力データ及び出力データに基づいて各シェーダプログラムがシェーダコア214においていつ着手され得るのかをスケジューリングする。着手のためにシェーダプログラムをスケジューリングすることに加えて、頂点解析器208はまた、頂点バッファへのポインタを生成し、そして接続性データ(connectivity data)を含む。ポインタは頂点バッファから頂点を読み出すために用いられる。頂点が既に処理されてしまっており且つ頂点バッファ内に記憶されている場合、頂点解析器208はその頂点を頂点バッファから読み出してよく、その結果、頂点は1回だけ処理される。接続性データは、複数の頂点が互いにどのように適合してプリミティブ(例えば三角形)を作成するのかを指定し、その結果、プリミティブは適切にラスタライズされ(rasterized)得る。
頂点解析器208は、グラフィクス処理タスクを走査変換器212へ送り、また一般計算タスクを調整論理222へ送る。走査変換器212は、プリミティブを横断して(traverse)、シェーダコア214によって処理されるべき画素を決定する。走査変換器212は次いで、画素を調整論理222へ送る。調整論理222は、コマンドプロセッサ230の異なる仮想エンジンからのタスクをシェーダコア214へ供給する。
C.シェーダコア
シェーダコア214は、GPU110に供給されるタスクを実行するための複数の処理要素220を含む。処理要素220はSIMDデバイスとして配置され、シェーダコア214が複数のデータ並列処理タスクを(実質的に)同時に実行することを可能にしている。コマンドプロセッサ230の複数の仮想エンジンからのタスクをシェーダコア214が(実質的に)同時に処理することを可能にするために、シェーダコア214の処理要素220は空間的に且つ/又は時間的に区分化されている。
空間的な区分化を達成するためには、処理要素220の異なるサブセットが異なるタスクを実行するように構成される。例えば、第1の仮想エンジン(例えば実時間低遅延エンジン202C)からの第1の(例えば低遅延の)タスクはシェーダコア214の処理要素220の第1のサブセットへ発行されてよく、また第2の仮想エンジン(例えば主3Dエンジン202D)からの第2の(例えば標準グラフィクスの)タスクはシェーダコア214の処理要素220の第2のサブセットへ発行されてよい。処理要素220の各サブセットは次いで、それが受信したタスクを独立して実行する。
時間的な区分化を達成するためには、異なる仮想エンジンの異なる処理タスクは、シェーダコア214の処理要素220の一定の割合の時間を共有する。上述の例からは、第1及び第2のタスクがシェーダコア214の処理要素220の一定の割合の時間を共有する。
シェーダコア214はまた、OSスケジューラによって供給される処理タスクを実行するために、処理要素220によって用いられるデータを記憶する1つ以上のローカルデータシェア(LDS)228を含む。LDS228は、シェーダコア214によって実行されるべき各タスクに関連付けられる状態データを記憶する。ある実施形態においては、LDS228は複数の異なるコンテクストの状態データを記憶して、コンテクストスイッチを必要とせずに、複数の異なるコンテクストに関連付けられるOSスケジューラからの複数の異なるタスクをシェーダコア214が(実質的に)同時に実行することを可能にしている。
処理要素220の中間結果は、シェーダコア214において再処理されてよい。例えば処理要素220は、複数の異なるシェーダプログラ(例えば幾何シェーダ、頂点シェーダ、画素シェーダ、テセレーション(tessellation)シェーダ等)を実装して、OSスケジューラによって供給される単一のグラフィクス処理タスクを完了してよい。異なるシェーダプログラムの中間結果は、頂点解析器208及び/又は走査変換器212へ送り戻され、そして最終的には処理要素220に再循環させられる。OSスケジューラによって提供されるタスクを処理要素220が完了した後に、最終的な結果は出力論理224へ供給される。
D.出力論理
出力論理224は複数のバッファを含み、これらバッファは書き込み結合(write-combining)キャッシュ、深さバッファ及び色バッファを含む。書き込み結合キャッシュは、オフチップメモリへ書き込まれるべきデータを結合して、オフチップメモリへの効率的なアクセスを可能にする。深さバッファはz試験のために結果をバッファリングする。色バッファは色混合のために結果をバッファリングする。書き込み結合キャッシュ、深さバッファ及び色バッファに関連する処理を行った後に、出力論理224は結果をメモリシステム210へ供給する。
E.メモリシステム
メモリシステム210は、1つ以上のオンチップキャッシュ及び1つ以上のオフチップメモリインタフェースを含む。メモリシステム210は、コマンドプロセッサ230、頂点解析器208、走査変換器212、シェーダコア214及び出力論理224の各々に結合される。これらのうちの任意の要素がシェーダプログラムを実行するためデータを必要とすると、要求がメモリシステム210のオンチップキャッシュへ作成される。オンチップキャッシュ内でヒットがある(即ち要求されたデータがオンチップキャッシュ内にある)場合、データはそれを要求した要素へと転送される。オンチップキャッシュ内でミスがある(即ち要求されたデータがオンチップキャッシュ内にない)場合、要求されたデータは、メモリシステム210のオフチップメモリインタフェースを介してオフチップメモリ(例えば図1のシステムメモリ104)からリトリーブされる必要がある。オフチップメモリからデータがリトリーブされた後、データはそれを要求した要素へと転送される。加えて、データは、関連分野を含めた当業者によく知られているキャッシュメモリ技術を用いてオンチップキャッシュ内に記憶される。
IV.例示的な動作
GPU110は、OSスケジューラによって供給される処理タスクの複数のストリームを実行するように構成される。処理タスクの複数のストリームは、単一のアプリケーション又は2つ以上のアプリケーションによって生成されてよい。
図3Aはシェーダコア214が処理タスクの2つ(又は3つ以上)の異なるストリームを(実質的に)同時に実行する例を示しており、ここでは処理タスクのストリームは単一のアプリケーション302によって生成される。アプリケーション302は、例えば、グラフィクス処理タスクを生成するエンドユーザアプリケーション(例えばビデオゲームアプリケーション、コンピュータ支援設計(CAD)アプリケーション等)、又はGPU上で実行されるべき一般計算タスク(例えば数学的アルゴリズム、物理的シミュレーション等)を生じさせるエンドユーザアプリケーションであってよい。図3Aを参照すると、アプリケーション302は第1のタスク308A及び第2のタスク308Bを生成する。アプリケーション302が生成する各タスク308は優先度種類を含む。例えば、アプリケーション302は、第1のタスク308Aが低遅延高優先度タスクであり且つ第2のタスク308Bが標準優先度タスクであることを表示してよい。OSスケジューラ310は、アプリケーション302によって生成されたタスクを受信し、そしてタスクをGPU110の異なる仮想エンジンへ発行する。例えばOSスケジューラ310は、第1のタスク308Aを第1の仮想エンジン312Aへ発行し、また第2のタスク308Bを第2の仮想エンジン312Bへ発行する。各仮想エンジン312からのタスクは次いで、GPU110のシェーダコア214によって(実質的に)同時に実行される。
図3Bはシェーダコア214が処理タスクの2つ(又は3つ以上)の異なるストリームを(実質的に)同時に実行する例を示しており、ここでは各ストリームは異なるアプリケーションによって生成される。図3Bに示されるように、第1の処理タスク330Aは第1のアプリケーション302Aによって生成され、また第2の処理タスク330Bは第2のアプリケーション302Bによって生成される。各タスク330は優先度種類を含む。OSスケジューラ310はタスク330を受信し、そしてそれらをGPU110の異なる仮想エンジンへ発行する。例えばOSスケジューラ310は、第1のタスク330Aを第1の仮想エンジン332Aへ発行し、また第2のタスク330Bを第2の仮想エンジン332Bへ発行する。各仮想エンジン332からのタスクは次いで、GPU110のシェーダコア214によって(実質的に)同時に実行される。
図3A及び3Bの例においては、GPU110はタスク及び優先度種類の両方を受信する。優先度種類をGPU110に提供するために、アプリケーション302はビットをAPIに提供して各タスクの優先度種類を表示する。APIはこの情報をGPU110のドライバに順に提供する。ある実施形態においては、GPU110は、シェーダコア214上で実行されるべきタスクを、アプリケーションによって指定される優先度種類に少なくとも部分的に基づいてスケジューリングするスケジューリングモジュールを含む。
図3A及び3Bの例は処理タスクの2つのストリームのみを実行するシェーダコア214を示しているが、これは例示のみを目的としており且つ限定を目的としていない。シェーダコア214は1つ以上のアプリケーションによって生成される処理タスクの2つ以上のストリームを(実質的に)同時に実行してよいことが理解されるべきである。
例えば、図4はコンピューティングシステム(例えばコンピューティングシステム100)上で実行している1つ以上のアプリケーションとそのコンピューティングシステム内に含まれるGPU110との間でのソフトウエア及びハードウエアの種々の層を示す例示的なワークフローである。図4の例では、2つの異なる種類の処理ユニット、即ちCPU102及びGPU110がある。また、2つのアプリケーション、即ち第1のアプリケーション402A及び第2のアプリケーション402Bがコンピュータシステム上で実行中である。CPU102はアプリケーション402によって必要とされる主たる機能性を提供する。例えば、CPU102は複数のコア412A〜Nを含んでいてよく、ここでは第1のアプリケーション402Aは主として第1のコア412A上で動作し、また第2のアプリケーション402Bは主として第2のコア412N上で動作する。
動作の経過の間、アプリケーション402は、CPU102上でよりはむしろGPU110上で実行されるべき複数のタスク404A〜Dを生成してよい。タスク404は、CPU102がソフトウエアにおいて実行し得たであろうよりもGPU110がおそらく高速に実行し得るデータ並列処理タスク(例えばグラフィクス処理タスク、一般計算タスク等)を備えていてよい。各タスク404は、アプリケーション402によって指定されるような優先度種類の表示を含む(図3A及び3Bに示されるタスクに含まれる優先度種類と同様)。従来のシステムにおいては、OSスケジューラはタスク404を単一のコマンドバッファへシリアルに供給していたであろうし、また従来のGPUはタスクをシリアルに処理していたであろう。このような従来のシステムとは異なり、スケジューラ310は、アプリケーション402によって指定される優先度種類に基づいて、各タスク404を複数のコマンドバッファ420A〜Nの1つへ供給する。例えばOSスケジューラ310は、第1の種類のタスク(例えば高優先度タスク)を第1のコマンドバッファ420Aへ供給し、第2の種類のタスク(例えばグラフィクス処理タスク)を第2のコマンドバッファ420Bへ供給し、以下同様である。
GPU110は複数の仮想エンジン432A〜Nを含み、各々はコマンドバッファ420A〜Nの1つをサービスするように構成される。例えば、第1の仮想エンジン432Aは第1のコマンドバッファ420Aをサービスするように構成され、第2の仮想エンジン432Bは第2のコマンドバッファ420Bをサービスするように構成され、そして第Nの仮想エンジン432Nは第Nのコマンドバッファ420Nをサービスするように構成される。仮想エンジン432からのタスクは次いで、上述したようにシェーダコア214によって(実質的に)同時に実行される。ある実施形態においては、GPU110のスケジューリングモジュール434は、(i)アプリケーション402によって指定される優先度種類、(ii)仮想エンジン432によって処理される複数のタスク404の間での相対的優先度、及び(iii)シェーダコア214内の資源の利用可能性、の条件に少なくとも基づいて、シェーダコア214によって実行されるべきタスクをスケジューリングする。例えばスケジューリングモジュール434は、デマンド限界、優先度限界、及び/又はプリセット限界に基づいて並列タスク404間でシェーダコア214の資源を分割してよい一方で、任意の1つのタスク404がGPU110の資源を完全に消費することを一時的に可能にする。シェーダコア214内で処理タスクの2つ以上の異なるストリームを実行することによって、GPU110は、コンテクストスイッチに関与するデータを記憶すること、交換すること、及び流出させることに伴うオーバーヘッドなしに、コンテクストスイッチの低遅延利益を提供する。
V.例示的なコンピュータ実装
本発明の実施形態は、ハードウエア、ソフトウエア又はそれらの組み合わせを用いて実装されてよく、また1つ以上のコンピュータシステム又は他の処理システム内に実装されてよい。コンピュータシステム500の例が図5に示されている。
コンピュータシステム500は1つ以上のプロセッサ、例えばプロセッサ504を含む。プロセッサ504は汎用プロセッサ(例えばCPU102)又は専用プロセッサ(例えばGPU110)であってよい。プロセッサ504は通信基盤506(例えば通信バス、クロスオーバーバー又はネットワーク)に接続される。種々のソフトウエア実施形態がこの例示的なコンピュータシステムに関して説明される。この明細書を読んだ後に、他のコンピュータシステム及び/又はアーキテクチャを用いて本発明をどのように実装するのかが、関連分野を含めた当業者にとって明らかになるはずである。
コンピュータシステム500は、通信基盤506からの(又は図示しないフレームバッファからの)グラフィクスデータ、テキストデータ及び他のデータをディスプレイユニット530上での表示のために転送するディスプレイインタフェース502を含む。
コンピュータシステム500はまた、主メモリ508、望ましくはランダムアクセスメモリ(RAM)を含み、そして補助メモリ510を含んでいてもよい。補助メモリ510は例えば、ハードディスクドライブ512及び/又はリムーバブル記憶ドライブ514を含んでいてよく、フロッピー(登録商標)ディスクドライブ、磁気テープドライブ、光学ディスクドライブ等を代表する。リムーバブル記憶ドライブ514は周知の方法でリムーバブル記憶ユニット518から読み出し且つ/又はリムーバブル記憶ユニット518へ書き込みする。リムーバブル記憶ユニット518はフロッピー(登録商標)ディスク、磁気テープ、光学ディスク等を代表し、リムーバブル記憶ドライブ514によって読み出され且つ書き込まれる。理解されるであろうように、リムーバブル記憶ユニット518はコンピュータソフトウエア及び/又はデータが既に記憶されたコンピュータ使用可能記憶媒体を含む。
代替的な実装においては、補助メモリ510は、コンピュータプログラム又は他の命令がコンピュータシステム500にロードされることを可能にするための他の同様のデバイスを含むことができる。そのようなデバイスは例えばリムーバブル記憶ユニット522及びインタフェース520を含み得る。そのような例は、プログラムカートリッジ及びカートリッジインタフェース(ビデオゲームデバイスにおいて見られるようなもの)、リムーバブルメモリチップ(例えば消去可能プログラム可能リードオンリメモリ(EPROM)又はプログラム可能リードオンリメモリ(PROM))及び関連するソケット、並びにソフトウエア及びデータがリムーバブル記憶ユニット522からコンピュータシステム500へ転送されることを可能にする他のリムーバブル記憶ユニット522及びインタフェース520を含み得る。
コンピュータシステム500はまた通信インタフェース524を含むことができる。通信インタフェース524は、ソフトウエア及びデータがコンピュータシステム500と外部デバイスの間で転送されることを可能にする。通信インタフェース524の例は、モデム、ネットワークインタフェース(例えばイーサネット(登録商標)カード)、通信ポート、パーソナルコンピュータメモリカード国際協会(Personal Computer Memory Card International Association)(PCMCIA)スロット及びカード等を含み得る。通信インタフェース524を介して転送されるソフトウエア及びデータは、通信インタフェース524によって受信されることが可能な電子的信号、電磁気的信号、光学的信号又は他の信号であってよい信号528の形態にある。これらの信号は通信パス(例えばチャネル)526を介して通信インタフェース524へ供給される。このチャネル526は信号を伝え、そしてワイヤ若しくはケーブル、光ファイバ、電話線、携帯電話リンク、ラジオ周波数(RF)リンク又は他の通信チャネルを用いて実装され得る。
この文書では、「コンピュータ可読記憶媒体」の用語は、リムーバブル記憶ドライブ514、及びハードディスクドライブ512内に組み込まれるハードディスクを一般的には参照して用いられる。これらのコンピュータプログラム製品は、コンピュータシステム500にソフトウエアを提供する。
コンピュータプログラム(コンピュータ制御論理とも称される)は主メモリ508及び/又は補助メモリ510内に記憶される。コンピュータプログラムはまた、通信インタフェース524を介して受信されてもよい。そのようなコンピュータプログラムは、実行されるときに、ここで論じられるような本発明の特徴をコンピュータシステム500が行うことを可能にする。特に、コンピュータプログラムは、実行されるときに、本発明の特徴をプロセッサ504が行うことを可能にする。従って、そのようなコンピュータプログラムはコンピュータシステム500の制御器を代表する。
ある実施形態においては、ソフトウエアは、コンピュータプログラム製品内に記憶されていてよく、そしてリムーバブル記憶ドライブ514、ハードドライブ512、又は通信インタフェース524を用いてコンピュータシステム500内にロードされてよい。制御論理(ソフトウエア)は、プロセッサ504によって実行されるときに、ここに説明されるような本発明の実施形態の機能をプロセッサ504に行わせる。
VI.例示的なソフトウエア実装
処理ユニット(例えばCPU102及び/又はGPU110)のハードウエア実装に加えて、そのような処理ユニットはまた、例えばソフトウエア(例えばコンピュータ可読プログラムコード)を記憶するように構成されるコンピュータ可読媒体内に配置されるソフトウエアにおいて具現化されてもよい。プログラムコードは、(i)ここに開示されるシステムの機能及び技術(例えばGPU110にタスクを供給すること、GPU110内でタスクをスケジューリングすること、GPU110内でタスクを実行すること、等)、(ii)ここに開示されるシステムの製造及び技術(例えばGPU110の製造)又は(iii)ここに開示されるシステムの機能及び製造並びに技術の組み合わせ、の実施形態を含めて本発明の実施形態の実施可能性を生じさせる。
このことは、例えば、一般的なプログラミング言語(例えばC又はC++)、ベリログ(Verilog)HDL、VHDL、アルテラ(Altera)HDL(AHDL)等を含むハードウエア記述言語(hardware description languages)(HDL)、あるいは他の利用可能なプログラミング及び/又は回路図等(schematic)キャプチャツール(capture tools)(例えば回路キャプチャツール)の使用を通して達成され得る。プログラムコードは、半導体、磁気ディスク、又は光学ディスク(例えばCD−ROM、DVD−ROM)を含む任意の既知のコンピュータ可読媒体内に配置され得る。従って、コードは、インターネット及びそれと同等のもの(the Internet and internets)を含む通信ネットワークを介して伝送され得る。上述したシステム及び技術によって達成される機能及び/又は提供される構造は、プログラムコードにおいて具現化されるコア(例えばGPUコア)内で表現することができ、また集積回路の生産の一部としてハードウエアに変換されてよいことが理解される。
VII.結論
概要及び要約の欄ではなく詳細な説明の欄が特許請求の範囲を解釈するために用いられることを意図されていることが理解されるべきである。概要及び要約の欄は、発明者によって検討されているような本発明の1つ以上であるが全てではない例示的な実施形態を記述することができ、従って、本発明及び添付の特許請求の範囲を限定することを意図されるものでは決してない。

Claims (25)

  1. (i)オペレーティングシステム(OS)から複数のタスクを互いに実質的に並列に受信すると共に(ii)前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
    前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備える処理ユニット。
  2. 前記シェーダコアは、
    第1のタスクを前記第1のタスクに関連付けられる状態データの第1のセットに基づいて実行するように構成される第1の複数の処理要素と、
    第2のタスクを前記第2のタスクに関連付けられる状態データの第2のセットに基づいて実行するように構成される第2の複数の処理要素と、を備える請求項1の処理ユニット。
  3. 前記複数の仮想エンジンは、(i)第1の種類のタスクを受信するように構成される第1のキューと、(ii)第2の種類のタスクを受信するように構成される第2のキューと、を備える請求項1の処理ユニット。
  4. 前記第1の種類のタスクは低遅延タスクを備え、前記第2の種類のタスクは標準遅延タスクを備える請求項3の処理ユニット。
  5. 前記第1の種類のタスクはグラフィクス処理タスクを備え、前記第2の種類のタスクは一般計算タスクを備える請求項3の処理ユニット。
  6. 前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項1の処理ユニット。
  7. コンピューティングデバイス上で実行される場合に処理ユニットを定義する命令が入っているコンピュータ可読記憶媒体を備えるコンピュータプログラム製品であって、前記処理ユニットは、
    (i)オペレーティングシステム(OS)から複数のタスクを互いに実質的に並列に受信すると共に(ii)前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
    前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備えるコンピュータプログラム製品。
  8. 前記シェーダコアは、
    第1のタスクを前記第1のタスクに関連付けられる状態データの第1のセットに基づいて実行するように構成される第1の複数の処理要素と、
    第2のタスクを前記第2のタスクに関連付けられる状態データの第2のセットに基づいて実行するように構成される第2の複数の処理要素と、を備える請求項7のコンピュータプログラム製品。
  9. 前記複数の仮想エンジンは、(i)第1の種類のタスクを受信するように構成される第1のキューと、(ii)第2の種類のタスクを受信するように構成される第2のキューと、を備える請求項7のコンピュータプログラム製品。
  10. 前記第1の種類のタスクは低遅延タスクを備え、前記第2の種類のタスクは標準遅延タスクを備える請求項9のコンピュータプログラム製品。
  11. 前記第1の種類のタスクはグラフィクス処理タスクを備え、前記第2の種類のタスクは一般計算タスクを備える請求項9のコンピュータプログラム製品。
  12. 前記プロセッサは、
    前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項7のコンピュータプログラム製品。
  13. メモリと、
    処理ユニットと、
    前記メモリ及び前記処理ユニットに結合されるバスと、を備えるコンピューティングシステムであって、前記処理ユニットは、
    (i)オペレーティングシステム(OS)から複数のタスクを互いに実質的に並列に受信すると共に(ii)前記複数のタスクの各々に関連付けられる状態データのセットをロードするように構成される複数の仮想エンジンと、
    前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクを実質的に並列に実行するように構成されるシェーダコアと、を備えるコンピューティングシステム。
  14. 前記シェーダコアは、
    第1のタスクを前記第1のタスクに関連付けられる状態データの第1のセットに基づいて実行するように構成される第1の複数の処理要素と、
    第2のタスクを前記第2のタスクに関連付けられる状態データの第2のセットに基づいて実行するように構成される第2の複数の処理要素と、を備える請求項13のコンピューティングシステム。
  15. 前記複数の仮想エンジンは、(i)第1の種類のタスクを受信するように構成される第1のキューと、(ii)第2の種類のタスクを受信するように構成される第2のキューと、を備える請求項13のコンピューティングシステム。
  16. 前記第1の種類のタスクは低遅延タスクを備え、前記第2の種類のタスクは標準遅延タスクを備える請求項15のコンピューティングシステム。
  17. 前記第1の種類のタスクはグラフィクス処理タスクを備え、前記第2の種類のタスクは一般計算タスクを備える請求項15のコンピューティングシステム。
  18. 前記処理ユニットは、
    前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングするスケジューリングモジュールを更に備える請求項13のコンピューティングシステム。
  19. 処理ユニットにおいてタスクを処理するためのコンピュータ実装の方法であって、
    オペレーティングシステム(OS)から複数のタスクを互いに並列に受信することと、
    前記複数のタスクの各々に関連付けられる状態データのセットをロードすることと、
    前記複数のタスクの各々に関連付けられる状態データの前記セットに基づいて前記複数のタスクをシェーダコア内で実質的に並列に実行することと、を備えるコンピュータ実装の方法。
  20. 前記実行することは、
    第1のタスクを前記第1のタスクに関連付けられる状態データの第1のセットに基づいて前記シェーダコアの第1の複数の処理要素において実行することと、
    第2のタスクを前記第2のタスクに関連付けられる状態データの第2のセットに基づいて前記シェーダコアの第2の複数の処理要素において実行することと、を備える請求項19のコンピュータ実装の方法。
  21. 前記受信することは、
    第1の種類のタスクを第1のキュー内にキューすることと、
    第2の種類のタスクを第2のキュー内にキューすることと、を備える請求項19のコンピュータ実装の方法。
  22. 前記第1の種類のタスクは低遅延タスクを備え、前記第2の種類のタスクは標準遅延タスクを備える請求項21のコンピュータ実装の方法。
  23. 前記第1の種類のタスクはグラフィクス処理タスクを備え、前記第2の種類のタスクは一般計算タスクを備える請求項21のコンピュータ実装の方法。
  24. 前記処理ユニットのスケジューリングモジュールを用いて前記複数のタスクが前記シェーダコアへ発行されるようにスケジューリングすることを更に備える請求項19のコンピュータ実装の方法。
  25. 処理ユニットへタスクを提供するためのコンピュータ実装の方法であって、
    各々が優先度種類の表示を含む複数のタスクを1つ以上のアプリケーションから受信することと、
    前記複数のタスク及び各タスクに関連付けられる前記優先度種類の前記表示を前記処理ユニットへ提供することと、を備えるコンピュータ実装の方法。
JP2012528081A 2009-09-03 2010-09-03 非同期タスクディスパッチを可能にする処理ユニット Active JP5791608B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US23971209P 2009-09-03 2009-09-03
US61/239,712 2009-09-03
US12/874,134 2010-09-01
US12/874,134 US8854381B2 (en) 2009-09-03 2010-09-01 Processing unit that enables asynchronous task dispatch
PCT/US2010/047786 WO2011028986A2 (en) 2009-09-03 2010-09-03 A processing unit that enables asyncronous task dispatch

Publications (2)

Publication Number Publication Date
JP2013504131A true JP2013504131A (ja) 2013-02-04
JP5791608B2 JP5791608B2 (ja) 2015-10-07

Family

ID=43501178

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012528081A Active JP5791608B2 (ja) 2009-09-03 2010-09-03 非同期タスクディスパッチを可能にする処理ユニット

Country Status (7)

Country Link
US (1) US8854381B2 (ja)
EP (1) EP2473920B8 (ja)
JP (1) JP5791608B2 (ja)
KR (1) KR101642105B1 (ja)
CN (1) CN102640115B (ja)
IN (1) IN2012DN02726A (ja)
WO (1) WO2011028986A2 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150130307A (ko) * 2013-03-14 2015-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 다수의 프리미티브들을 사용하는 그래픽 처리
JP2017507398A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両
JP2017507401A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両
JP2017522659A (ja) * 2014-06-26 2017-08-10 インテル コーポレイション 仮想化環境におけるインテリジェントgpuスケジューリング
JP2021531561A (ja) * 2018-07-09 2021-11-18 マイクロソフト テクノロジー ライセンシング,エルエルシー 3d移行
JP7490791B2 (ja) 2020-02-28 2024-05-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド マルチテナントグラフィック処理ユニットの動的透過再構成

Families Citing this family (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9430281B2 (en) * 2010-12-16 2016-08-30 Advanced Micro Devices, Inc. Heterogeneous enqueuing and dequeuing mechanism for task scheduling
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9195501B2 (en) * 2011-07-12 2015-11-24 Qualcomm Incorporated Instruction culling in graphics processing unit
US9727385B2 (en) * 2011-07-18 2017-08-08 Apple Inc. Graphical processing unit (GPU) implementing a plurality of virtual GPUs
WO2013090605A2 (en) * 2011-12-14 2013-06-20 Advanced Micro Devices, Inc. Saving and restoring shader context state and resuming a faulted apd wavefront
US20130155077A1 (en) * 2011-12-14 2013-06-20 Advanced Micro Devices, Inc. Policies for Shader Resource Allocation in a Shader Core
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
US9430807B2 (en) * 2012-02-27 2016-08-30 Qualcomm Incorporated Execution model for heterogeneous computing
US9996394B2 (en) 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
US10535185B2 (en) 2012-04-04 2020-01-14 Qualcomm Incorporated Patched shading in graphics processing
CN104662531A (zh) * 2012-04-23 2015-05-27 惠普发展公司,有限责任合伙企业 使用图形处理单元的统计分析
US20130311548A1 (en) * 2012-05-15 2013-11-21 Nvidia Corporation Virtualized graphics processing for remote display
CN103064657B (zh) * 2012-12-26 2016-09-28 深圳中微电科技有限公司 单个处理器上实现多应用并行处理的方法及装置
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
EP3049959A1 (en) * 2013-09-27 2016-08-03 Hewlett Packard Enterprise Development LP Processing a hybrid flow associated with a service class
US10198788B2 (en) * 2013-11-11 2019-02-05 Oxide Interactive Llc Method and system of temporally asynchronous shading decoupled from rasterization
WO2015074239A1 (en) * 2013-11-22 2015-05-28 Intel Corporation Method and apparatus to improve performance of chained tasks on a graphics processing unit
US9530174B2 (en) 2014-05-30 2016-12-27 Apple Inc. Selective GPU throttling
US10437650B2 (en) * 2014-06-19 2019-10-08 Nec Corporation Controlling execution of tasks in a series of operational processing by identifying processing units based on task command, task setting information, state of operational processing
KR102263326B1 (ko) 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
US10423414B2 (en) * 2014-11-12 2019-09-24 Texas Instruments Incorporated Parallel processing in hardware accelerators communicably coupled with a processor
US10210655B2 (en) * 2015-09-25 2019-02-19 Intel Corporation Position only shader context submission through a render command streamer
CN106598705B (zh) * 2015-10-15 2020-08-11 菜鸟智能物流控股有限公司 一种异步任务的调度方法、装置、系统以及电子设备
US9830678B2 (en) * 2016-03-03 2017-11-28 International Business Machines Corporation Graphics processing unit resource sharing
KR102577184B1 (ko) * 2016-05-24 2023-09-11 삼성전자주식회사 전자 장치 및 그의 동작 방법
US20180033114A1 (en) * 2016-07-26 2018-02-01 Mediatek Inc. Graphics Pipeline That Supports Multiple Concurrent Processes
CN106648551A (zh) * 2016-12-12 2017-05-10 中国航空工业集团公司西安航空计算技术研究所 一种混合图形处理器指令处理系统
US11609791B2 (en) * 2017-11-30 2023-03-21 Advanced Micro Devices, Inc. Precise suspend and resume of workloads in a processing unit
US11436783B2 (en) 2019-10-16 2022-09-06 Oxide Interactive, Inc. Method and system of decoupled object space shading
US11340942B2 (en) * 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US12020349B2 (en) 2020-05-01 2024-06-25 Samsung Electronics Co., Ltd. Methods and apparatus for efficient blending in a graphics pipeline
EP4258645A4 (en) * 2020-12-04 2024-08-28 Nippon Telegraph & Telephone CONTROL DEVICE, CONTROL METHOD AND PROGRAM
US11941723B2 (en) 2021-12-29 2024-03-26 Advanced Micro Devices, Inc. Dynamic dispatch for workgroup distribution
US12106115B2 (en) * 2023-01-26 2024-10-01 International Business Machines Corporation Searching an array of multi-byte elements using an n-byte search instruction

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080109810A1 (en) * 2006-11-07 2008-05-08 Microsoft Corporation Parallel engine support in display driver model

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2050658C (en) 1990-09-14 1997-01-28 John M. Peaslee Dual hardware channels and hardware context switching in a graphics rendering processor
US6252600B1 (en) * 1998-10-02 2001-06-26 International Business Machines Corporation Computer graphics system with dual FIFO interface
US6943800B2 (en) * 2001-08-13 2005-09-13 Ati Technologies, Inc. Method and apparatus for updating state data
US7659898B2 (en) * 2005-08-08 2010-02-09 Via Technologies, Inc. Multi-execution resource graphics processor
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US8284205B2 (en) * 2007-10-24 2012-10-09 Apple Inc. Methods and apparatuses for load balancing between multiple processing units
US20090160867A1 (en) * 2007-12-19 2009-06-25 Advance Micro Devices, Inc. Autonomous Context Scheduler For Graphics Processing Units
US8629878B2 (en) * 2009-08-26 2014-01-14 Red Hat, Inc. Extension to a hypervisor that utilizes graphics hardware on a host

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080109810A1 (en) * 2006-11-07 2008-05-08 Microsoft Corporation Parallel engine support in display driver model

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20150130307A (ko) * 2013-03-14 2015-11-23 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 다수의 프리미티브들을 사용하는 그래픽 처리
JP2016517574A (ja) * 2013-03-14 2016-06-16 マイクロソフト テクノロジー ライセンシング,エルエルシー 複数のプリミティブを使用するグラフィック処理
KR102213727B1 (ko) * 2013-03-14 2021-02-05 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 다수의 프리미티브들을 사용하는 그래픽 처리
US11069020B2 (en) 2013-03-14 2021-07-20 Microsoft Technology Licensing, Llc Graphics processing using multiple primitives
JP2017507398A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両
JP2017507401A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両
JP2017522659A (ja) * 2014-06-26 2017-08-10 インテル コーポレイション 仮想化環境におけるインテリジェントgpuスケジューリング
JP2021531561A (ja) * 2018-07-09 2021-11-18 マイクロソフト テクノロジー ライセンシング,エルエルシー 3d移行
JP7418393B2 (ja) 2018-07-09 2024-01-19 マイクロソフト テクノロジー ライセンシング,エルエルシー 3d移行
JP7490791B2 (ja) 2020-02-28 2024-05-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド マルチテナントグラフィック処理ユニットの動的透過再構成

Also Published As

Publication number Publication date
EP2473920B8 (en) 2018-05-16
WO2011028986A2 (en) 2011-03-10
JP5791608B2 (ja) 2015-10-07
KR101642105B1 (ko) 2016-07-22
EP2473920A2 (en) 2012-07-11
US20110115802A1 (en) 2011-05-19
IN2012DN02726A (ja) 2015-09-11
EP2473920B1 (en) 2018-03-14
CN102640115B (zh) 2015-03-25
CN102640115A (zh) 2012-08-15
US8854381B2 (en) 2014-10-07
KR20120064097A (ko) 2012-06-18
WO2011028986A3 (en) 2011-11-24

Similar Documents

Publication Publication Date Title
JP5791608B2 (ja) 非同期タスクディスパッチを可能にする処理ユニット
US11443405B2 (en) Mechanism to accelerate graphics workloads in a multi-core computing architecture
US9142057B2 (en) Processing unit with a plurality of shader engines
US10192281B2 (en) Graphics command parsing mechanism
CN110352403B (zh) 图形处理器寄存器重命名机制
US10430189B2 (en) GPU register allocation mechanism
US10776156B2 (en) Thread priority mechanism
US20170069054A1 (en) Facilitating efficient scheduling of graphics workloads at computing devices
US10908939B2 (en) Efficient fine grained processing of graphics workloads in a virtualized environment
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
EP3591519B1 (en) Method and apparatus for simultaneously executing multiple contexts on a graphics engine
US20170154403A1 (en) Triple buffered constant buffers for efficient processing of graphics data at computing devices
US10037625B2 (en) Load-balanced tessellation distribution for parallel architectures
US9830676B2 (en) Packet processing on graphics processing units using continuous threads
CN109564676B (zh) 管芯上曲面细分分配
US10402345B2 (en) Deferred discard in tile-based rendering
CN115131193A (zh) 用于减少处理器中的等待时间的曲面细分重新分配
US10831483B1 (en) Memory mapped virtual doorbell mechanism

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130903

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140924

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141224

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150310

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20150804

R150 Certificate of patent or registration of utility model

Ref document number: 5791608

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