JP2014508982A - 異種処理デバイスの動的ワークパーティション - Google Patents

異種処理デバイスの動的ワークパーティション Download PDF

Info

Publication number
JP2014508982A
JP2014508982A JP2013544627A JP2013544627A JP2014508982A JP 2014508982 A JP2014508982 A JP 2014508982A JP 2013544627 A JP2013544627 A JP 2013544627A JP 2013544627 A JP2013544627 A JP 2013544627A JP 2014508982 A JP2014508982 A JP 2014508982A
Authority
JP
Japan
Prior art keywords
processor
apd
task
cpu
dequeuing
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
JP2013544627A
Other languages
English (en)
Other versions
JP2014508982A5 (ja
JP6373586B2 (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
Application filed by Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2014508982A publication Critical patent/JP2014508982A/ja
Publication of JP2014508982A5 publication Critical patent/JP2014508982A5/ja
Application granted granted Critical
Publication of JP6373586B2 publication Critical patent/JP6373586B2/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
    • 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
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)

Abstract

異種の処理デバイスにおいてワークロードのバランスをとるための方法、システムおよび製品である。本方法は、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、別の種類のプロセッサによって処理可能なタスクを、記憶装置内の複数のタスクから識別するステップと、記憶装置にアクセス可能な複数のデキューイング実体を同期するステップと、記憶装置からタスクを取り出すステップと、を含む。
【選択図】図1A

Description

本発明は、概して、コンピュータシステムを対象とする。さらに詳細には、本発明は、コンピュータシステム内のコンピュータ構成要素を統一するアーキテクチャを対象とする。
グラフィックス処理ユニット(GPU:graphics processing unit)を一般的な演算に用いる要請は、GPUの単位電力および/またはコストあたりの能力が優れることから、最近ではより顕著となってきている。GPUの計算能力は、対応する中央処理装置(CPU:central processing unit)の計算能力の成長速度を超える速度で成長してきた。モバイルコンピューティング市場(例えば、ノートブック、モバイルスマートフォン、タブレット、その他)およびその必要な支援サーバ/企業システムの爆発的な成長と組み合わされたこの成長は、特定品質の所望のユーザ経験を提供するために用いられてきている。したがって、並列データの内容を有する作業負荷(ワークロード)を実行するためにCPUとGPUとを併用することはボリュームテクノロジとなりつつある。
しかし、GPUは、従来、主にグラフィックの高速化のために利用可能な制約されたプログラミング環境で動作する。これらの制約は、GPUが、CPUと同程度に豊かなプログラミングエコシステムを有さないという事実に起因するものである。したがって、GPUの使用は、主に、グラフィックスおよびビデオのアプリケーションプログラミングインターフェース(API:application programming interface)を処理することに既に順応した、2次元(2D)グラフィックスと、3次元(3D)グラフィックスと、少数の最先端マルチメディアアプリケーションとに限られていた。
マルチベンダにサポートされるOpenCL(登録商標)、DirectCompute(登録商標)、標準的なAPIおよびサポート用ツールの出現とともに、従来の用途におけるGPUの限界は、従来のグラフィックスを越えて拡張されてきている。OpenCL(登録商標)およびDirectCompute(登録商標)は将来性のあるスタートではあるが、大部分のプログラミングタスクに対して、CPUと同程度に流動的にCPUとGPUとの組合せが用いられることを可能にする環境およびエコシステムを作成するには、多数のハードルが残されている。
既存のコンピューティングシステムは、大抵、複数の処理装置を含む。例えば、いくつかのコンピューティングシステムは、CPUおよびGPUの両方を、別個のチップ上(例えば、CPUはマザーボード上に、GPUはグラフィックカード上に配置され得る)または単一チップパッケージ上に有し得る。これらの構成の両方は、(i)別個のメモリシステム、(ii)効率的なスケジューリング、(iii)プロセス間のサービス品質(QoS)の保証を提供すること、(iv)プログラミングモデルおよび(v)複数のターゲット命令セットアーキテクチャ(ISA:instruction set architecture)へのコンパイル、の全項目を、電力消費を最小化しながら満足することに関して顕著な問題点を依然として含む。
例えば、個別チップ構成においては、各プロセッサがメモリにアクセスするためには、システムアーキテクチャおよびソフトウェアアーキテクチャは、チップ間インターフェースを利用することを余儀なくされる。これらの外部インターフェース(例えばチップ間インターフェース)においては、異機プロセッサを協働させるために、メモリレイテンシおよび電力消費に弊害がもたらされる一方で、別個のメモリシステム(すなわち、別個のアドレス空間)およびドライバに管理される共有メモリにおいては、きめ細かな負荷軽減に対しては許容されないオーバーヘッドが生成されてしまうこととなる。
CPUおよびGPUは、従来、異なるタスクを実行するにも関わらず、多くの種類の作業負荷(ワークロード)が、CPUまたはGPUを使用して実行され得る。CPUまたはGPUの何れかが自由である場合に、ワークロードをプロセッサ間で再分配することができれば、このコンピューティング環境が役立つ。
ワークロードは、処理の前に、多くの個別タスクに分割される。各タスクは、CPUまたはGPUに関連するワークキューへ割り当てられる。従来のコンピューティング環境では、CPUおよびGPUを含み、処理のためにタスクがCPUまたはGPUに一旦割り当てられると、別の種類の処理デバイスへのワーク再分配をすることができない。従来のシステムでは、CPUに、他のCPUへのタスクの再分配をさせることが可能であり、このGPUは、ワークを再分配する機能を有するものではない。また、このことは、GPUが自由である間CPUがビジーとなるために、またその逆のために、処理を妨げる。このバランスのとれていない処理は、特に、タスクが処理デバイスの何れかで処理される場合に、不十分であり、かつ、最適以下の性能になるという結果となる。
したがって、CPUおよびGPUの間で、タスクを再分配し、且つ、バランスをとることができるシステムおよび方法が求められている。
GPUと、アクセラレーテッドプロセッシングユニット(APU)と、GPUによる汎目的計算(GPGPU)とは、この分野において一般に用いられる用語であるが、「アクセラレーテッド処理デバイス」(APD)は、より広い表現とみなされる。例えば、APDは、従来のCPU、従来のGPU、ソフトウェアおよび/またはこれらの組合せと比較して高速化された方法で行われる、グラフィックス処理タスク、データ並列タスク、またはネスト化されたデータ並列タスクの高速化に関連する機能および演算を実行する任意のハードウェアおよび/またはソフトウェアの協働的集合体を指す。
本発明の実施形態は、ある特定の状況では、異種の処理デバイスにおいてワークロードのバランスをとるための方法、システムおよび製品を含む。本方法は、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、別の種類のプロセッサによって処理可能なメモリ内の複数のタスクからタスクを識別するステップと、記憶装置にアクセス可能な複数のデキューイング実体を同期させるステップと、記憶装置からタスクをデキューイングする(取り出す)ステップと、を含む。
本発明の追加的な特徴および利点、ならびに本発明の様々な実施形態の構造および動作は、添付の図面を参照して以下で詳細に説明される。本発明は、本明細書において説明される特定の実施形態に制限されないことに注意すべきである。係る実施形態は、例示目的のみのために本明細書において提示される。追加的な実施形態は、本明細書に含まれる教示に基づいて当業者に明らかとなるであろう。
添付の図面は、本明細書に組み込まれ本明細書の一部を構成するものであって、本発明を例示し、説明とともに、本発明の原理を説明し、当業者が本発明を実施することを可能にするように、さらに機能する。本発明の様々な実施形態は、添付の図面を参照して以下で説明される。なお、添付の図面の全体を通じて、同様の参照番号は同様の構成要素を参照するために用いられる。
本発明の実施形態に係る処理システムの例示的ブロック図である。 図1Aに示されたAPDの例示的ブロック図である。 CPUおよびAPDが同一のシリコン基板上に取付けられたキューイングシステムの例示的なブロック図である。 分散システム環境におけるキューイングシステムの例示的なブロック図である。 複数のCPUおよびAPD用のタスクのバランスをとる複数のキューの例示的なブロック図である。 融合環境において、CPUで処理されるタスクを記憶するキューからタスクを取り出す(デキューする)APDの例示的なフローチャートである。 APDで処理されるタスクを記憶するキューからタスクを取り出すAPDの例示的なフローチャートである。 分散環境において、CPUで処理されるタスクを記憶するキューからタスクを取り出す(デキューする)CPUの例示的なフローチャートである。
本発明は、添付された図を参照して説明される。概して、構成要素が最初に現れる図面は、通常、対応する参照番号の最も左側の桁によって示される。
以下の詳細な説明においては、「1つの実施形態」、「ある実施形態」、「例示的実施形態」またはその他を参照することは、本明細書において説明される実施形態が、特定の特徴、構造または特性を有することを示すが、全ての実施形態がその特定の特徴、構造または特性を必ずしも含むとは限らない。さらに、係る語句は、同一の実施形態を参照するとは限らない。さらに、特定の特徴、構造または特性が1つの実施形態に関連して説明されるとき、係る特長、構造または特性を他の実施形態との関連で実施することは、明示されているか否かによらず、当業者の知識の範囲内であることが提起される。
「本発明の実施形態」という用語は、本発明の実施形態の全てが検討の対象である特徴、利点または操作モードを含むことを必ずしも要求しない。代替的な実施形態が本発明の範囲から逸脱することなく考案され、本発明の既知の構成要素は、本発明の関連する詳細を不明瞭化しないために、必ずしも詳細に説明されるとは限らず、または省略され得る。また、本明細書において用いられる用語は、特定の実施形態を説明することのみを目的とし、本発明を制限することを意図するものではない。例えば、本明細書において用いられる単数形の「1つの」および「その」は、内容的に明らかに単数のみを指す場合を除き、複数形をも含むことを意図するものである。本明細書において用いられる場合、「含む」、「備える」、「包含する」および/または「有する」という用語は、述べられた特徴、整数、ステップ、操作、構成要素および/またはコンポーネントが存在することを指定するが、1つまたは複数の他の特徴、整数、ステップ、操作、構成要素、コンポーネントおよび/またはこれらの群の存在または追加を除外しない。
図1Aは、CPU102およびAPD104を含む、統合化されたコンピューティングシステム100の例示的な図である。CPU102は、1つ以上のシングルコアまたはマルチコアCPUを含み得る。本発明の一実施形態において、システム100は、統合化されたプログラミング環境および実行環境を提供するために、CPU102およびAPD104を組み合わせた単一のシリコンダイまたはパッケージ上に形成される。この環境は、APD104が、いくつかのプログラミングタスクに対して、CPU102と同程度に流動的に用いられることを可能にする。しかし、CPU102およびAPD104が単一のシリコンダイ上に形成されることは、本発明の絶対的な要件ではない。いくつかの実施形態において、CPU102およびAPD104は別個に形成され、同一の基板または異なる基板上に搭載されることが可能である。
1つの例において、システム100は、メモリ106、オペレーティングシステム108および通信インフラストラクチャ109を含む。オペレーティングシステム108および通信インフラストラクチャ109は、以下でより詳細に説明される。
システム100は、カーネルモードドライバ(KMD:kernel mode driver)110と、ソフトウェアスケジューラ(SWS:software scheduler)112と、例えば入出力メモリ管理ユニット(IOMMU:input/output memory management unit)等のメモリ管理ユニット116とを含む。システム100の構成品は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組合せとして実装され得る。当業者は、システム100が図1Aに示される実施形態において示されるものに加えて、またはこれらとは異なる、1つ以上のソフトウェアコンポーネント、ハードウェアコンポーネントおよびファームウェアコンポーネントを含み得ることを理解するであろう。
1つの例において、KMD110等のドライバは、通常、ハードウェアが接続されたコンピュータバスまたは通信サブシステムを通してデバイスと通信する。呼び出しプログラムがドライバにおいてルーチンを呼び出すと、ドライバは、デバイスに対してコマンドを発行する。デバイスがドライバに対してデータを戻すと、ドライバは、元の呼び出しプログラムにおいてルーチンを呼び出し得る。1つの例において、ドライバは、ハードウェア依存的であり、オペレーティングシステム固有である。ドライバは、通常、任意の必要な非同期的時間依存性のハードウェアインターフェースに対して要求されるインタラプトハンドリングを提供する。
デバイスドライバは、特に現代のマイクロソフト・ウィンドウズ(登録商標)プラットフォームにおいては、カーネルモード(リング0)またはユーザモード(リング3)において実行され得る。ドライバをユーザモードにおいて実行することの主要な利益は、安定性が改善されることである。なぜなら、不完全な形で書かれたユーザモードデバイスドライバは、カーネルメモリを上書きすることによってシステムをクラッシュさせることができないためである。一方、ユーザモード/カーネルモードの遷移は、通常、顕著な性能オーバーヘッドを与え、それにより、低レイテンシおよび高スループット要件のためにユーザモードドライバを阻害する。カーネルスペースは、システムコールの使用を通してのみ、ユーザモジュールからのアクセスが可能である。UNIX(登録商標)シェルまたは他のGUIベースのアプリケーションなどのエンドユーザプログラムは、ユーザスペースの一部である。これらのアプリケーションは、カーネルにサポートされた機能を通してハードウェアと相互作用する。
CPU102は、制御プロセッサ、フィールド・プログラマブル・ゲートアレイ(FPGA:field programmable gate array)、特定用途集積回路(ASIC:application specific integrated circuit)またはデジタル・シグナル・プロセッサ(DSP:digital signal processor)のうち1つ以上を含み得る(図示せず)。CPU102は、例えば、コンピューティングシステム100の動作を制御する、オペレーティングシステム108、KMD110、SWS112およびアプリケーション111を含む制御ロジックを実行する。この例示的な実施形態において、CPU102は、1つの実施形態によれば、アプリケーション111の実行の起動および制御を、例えばそのアプリケーションに関連する処理をCPU102とAPD104等の他の処理リソースとの間に分散させることにより行う。
APD104は、とりわけ、グラフィックス演算や、例えば特に並列処理に好適となり得る他の演算等の、選択された機能のためのコマンドおよびプログラムを実行する。一般に、APD104は、ピクセル処理、幾何学演算およびディスプレイに対する画像のレンダリング等のグラフィックスパイプライン処理を実行するために、しばしば用いられ得る。本発明の様々な実施形態において、APD104は、CPU102から受信したコマンドまたは命令に基づいて、計算処理演算(例えば、ビデオ演算、ビデオ演算、物理シミュレーション、計算流体力学その他等の、グラフィックスに関連しない演算)も実行し得る。
例えば、コマンドは、命令セットアーキテクチャ(ISA:instruction set architecture)において通常定義されない特殊な命令であるとみなすことができる。コマンドは、例えばディスパッチプロセッサ、コマンドプロセッサまたはネットワークコントローラ等の特殊なプロセッサにより実行され得る。一方、命令は、例えばコンピュータアーキテクチャ内のプロセッサの単一の演算であるとみなされ得る。1つの例において、2セットのISAが用いられる場合には、いくつかの命令は、x86プログラムを実行するために用いられ、いくつかの命令は、APD計算ユニット上でカーネルを実行するために用いられる。
例示的な実施形態において、CPU102は、選択されたコマンドをAPD104に伝達する。これらの選択されたコマンドは、並列実行に適したグラフィックスコマンドと、並列実行に適した他のコマンドとを含み得る。計算処理コマンドを含み得るこれらの選択されたコマンドは、実質的にCPU102から独立して実行され得る。
APD104は、例えば1つ以上のSIMD処理コア等ではあるがこれに制限されない、自身の計算ユニット(図示せず)を含み得る。本明細書で参照されるSIMDは、パイプライン、すなわち、それぞれが自身のデータおよび共有プログラムカウンタを有する複数の処理エレメント上でカーネルが同時に実行されるプログラミングモデルである。全ての処理エレメントは、同一の1組の命令を実行する。プレディケーションを用いることにより、発行された各コマンドに対して、ワークアイテムを関与させることまたはさせないことが可能となる。
1つの例において、各APD104計算ユニットは、1つ以上のスカラーおよび/またはベクトル浮動小数点演算ユニットおよび/または算術論理ユニット(ALU:arithmetic and logic unit)を含み得る。APD計算ユニットは、逆平方根ユニットおよびサイン/コサインユニット等の特殊用途処理ユニット(図示せず)も含み得る。1つの例において、APD計算ユニットは、本明細書においてシェーダコア122と総称される。
1つ以上のSIMDが存在することにより、一般に、APD104は、グラフィックス処理において一般的なデータ並列タスク等のデータ並列タスクの実行に、理想的に好適なものとなる。
ピクセル処理等のいくつかのグラフィックスパイプライン処理と、他の並列演算処理とは、同一のコマンドストリームまたは計算カーネルが、ストリームまたは入力データ要素の集合体上で実行されることを要求する。同一の計算カーネルのそれぞれのインスタンス化は、上記データ要素を並列に処理するために、シェーダコア122の複数の計算ユニット上で同時に実行され得る。本明細書で参照されるように、例えば計算カーネルは、プログラム上で宣言され、APD計算ユニット上で実行される命令を含む関数である。この関数は、カーネル、シェーダ、シェーダプログラムまたはプログラムとも称される。
1つの例示的な実施形態において、各計算ユニット(例えばSIMD処理コア)は、入力されるデータを処理するために、特定ワークアイテムのそれぞれのインスタンス化を実行し得る。ワークアイテムは、コマンドによりデバイス上で呼び出されるカーネルの並列実行の集合体のうちの1つである。ワークアイテムは、計算ユニット上で実行されるワークグループの一部として、1つ以上の処理エレメントにより実行され得る。
ワークアイテムは、自身のグローバルIDおよびローカルIDによって、集合体内の他の実行から区別される。1つの例において、ワークグループにおいて1つのSIMDで同時に実行されるワークアイテムの一部は、ウェーブフロント136と称され得る。ウェーブフロントの幅は、計算ユニット(例えば、SIMD処理コア)のハードウェアの特性である。本明細書で参照されるワークグループは、単一の計算ユニット上で実行される関連するワークアイテムの集合体である。ワークグループ内のワークアイテムは、同一のカーネルを実行し、ローカルメモリおよびワークグループバリアを共有する。
代表的な実施形態において、1つのワークグループからの全てのウェーブフロントは、同一のSIMD処理コアで処理される。ウェーブフロントにわたる命令は1つずつ発行され、全てのワークアイテムが同一の制御フローに従う場合には、各ワークアイテムは、同一のプログラムを実行する。ウェーブフロントは、ワープ、ベクトルまたはスレッドと称され得る。
実行マスクおよびワークアイテムプレディケーションは、ウェーブフロントにおける拡散的な制御フローを可能にするために用いられる。なお、拡散的な制御フローでは、個別のワークアイテムは、カーネルを通る一意的なコードパスを実際に取り得る。部分的に占められたウェーブフロントは、ワークアイテムの全てのセットがウェーブフロント開始時に必ずしも利用可能とは限らない場合に、処理され得る。例えば、シェーダコア122は、所定数のウェーブフロント136を同時に実行し得る。なお、各ウェーブフロント136は、複数のワークアイテムを含む。
システム100において、APD104は、グラフィックスメモリ130等の自身のメモリを含む(なお、メモリ130は、グラフィックス専用に制限されるとは限らない)。グラフィックスメモリ130は、APD104における計算実行の間の使用のために、ローカルメモリを提供する。シェーダコア122内の個々の計算ユニット(図示せず)は、自身のローカルデータ記憶装置(図示せず)を有し得る。1つの実施形態において、APD104は、ローカルグラフィックスメモリ130へのアクセス、ならびにメモリ106へのアクセスを含む。他の実施形態において、APD104は、ダイナミックランダムアクセスメモリ(DRAM:dynamic random access memory)、または、APD104には直接的に接続されているがメモリ106からは分離している他のメモリ(図示せず)へのアクセスを含み得る。
図示の例において、APD104は、1つまたは「n」個のコマンドプロセッサ(CP:command processor)124を含み得る。CP124は、APD104内の処理を制御する。CP124は、実行されるべきコマンドを、メモリ106内のコマンドバッファ125から取得し、APD104でのこれらのコマンドの実行を調整する。
1つの例において、CPU102は、アプリケーション111に基づくコマンドを、適切なコマンドバッファ125に入力する。本明細書において参照されるように、アプリケーションは、CPU内またはAPD内の計算ユニット上で実行されるプログラム部分の組合せである。
複数のコマンドバッファ125は、各プロセスがAPD104での実行のためにスケジュールされた状態で、保持され得る。
CP124は、ハードウェア、ファームウェア、ソフトウェアまたはこれらの組合せにおいて実装され得る。1つの実施形態において、CP124は、スケジューリングロジックを含むロジックを実装するためのマイクロコードを有する縮小命令セットコンピュータ(RISC:reduced instruction set computer)エンジンとして実装される。
APD104は、1つまたは「n」個のディスパッチコントローラ(DC:dispatch controller)126を含み得る。本願において、ディスパッチという用語は、1セットの計算ユニット上の1セットのワークグループに対するカーネルの実行のスタートを起動するために、コンテキスト状態を使用するディスパッチコントローラにより実行されるコマンドを指す。DC126は、シェーダコア122内でワークグループを起動するためのロジックを含む。いくつかの実施形態において、DC126は、CP124の一部として実装され得る。
システム100は、APD104上で実行するためのプロセスを実行リスト150から選択するためのハードウェアスケジューラ(HWS:hardware scheduler)128を含む。HWS128は、ラウンドロビン方式、優先レベルを用いて、または他のスケジューリングポリシーに基づいて、プロセスを実行リスト150から選択し得る。優先レベルは、例えば、動的に決定され得る。HWS128は、例えば、新規のプロセスを追加することによって、あるいは既存のプロセスを実行リスト150から削除することによって、実行リスト150を管理する機能を含み得る。HWS128の実行リスト管理ロジックは、実行リストコントローラ(RLC:run list controller)と称されることもある。
本発明の様々な実施形態において、HWS128が、RLC150からプロセスの実行を開始すると、CP124は、対応するコマンドバッファ125からのコマンドの取得および実行を開始する。いくつかの事例において、CP124は、CPU102から受信したコマンドに対応する、APD104内で実行される1つ以上のコマンドを生成し得る。1つの実施形態において、CP124は、APD104および/またはシステム100のリソースの利用が改善または最大化されるように、APD104におけるコマンドの優先化およびスケジューリングを、他のコンポーネントとともに実装する。
APD104は、インタラプトジェネレータ146に対してアクセスを有するか、またはインタラプトジェネレータ146を含み得る。インタラプトジェネレータ146は、APD104がページフォールト等のインタラプトイベントに遭遇すると、APD104によってオペレーティングシステム108にインタラプトをかけるよう構成され得る。例えば、APD104は、IOMMU116内のインタラプト生成ロジックに依存して、上述のページフォールトインタラプトを生成し得る。
APD104は、シェーダコア122内で現在実行中のプロセスを切り替えるためのプリエンプションおよびコンテキストスイッチロジック120を含み得る。コンテキストスイッチロジック120は、例えばプロセスを停止させ、その現在状態(例えばシェーダコア122状態およびCP124状態)を保存する機能を含む。
本明細書において参照される状態という用語は、初期状態、中間状態および/または最終状態を含み得る。初期状態は、機械がプログラム順序に従って入力データセットを処理することによって、データの出力セットを生成する開始点である。例えば、処理を前進させるためにいくつかのポイントにおいて記憶される必要がある中間状態が存在する。この中間状態は、他のプロセスによってインタラプトがかけられた場合に、後に実行を継続することを可能にするために記憶される場合もある。出力データセットの一部として記録され得る最終状態も存在する。
プリエンプションおよびコンテキストスイッチロジック120は、他のプロセスを、APD104にコンテキストスイッチするためのロジックを含み得る。他のプロセスをAPD104で実行するようにコンテキストスイッチするための機能は、APD104上で実行するために、例えばCP124およびDC126によってプロセスをインスタンス化することと、当該プロセスに対して以前に保存された状態を復元することと、当該プロセスの実行を開始することと、を含み得る。
メモリ106は、DRAM(図示せず)等の非永続型メモリを含み得る。メモリ106は、例えば、アプリケーションまたは他の処理ロジックの部分を実行する間に、処理ロジック命令、定数および様々な変数を記憶し得る。例えば、1つの実施形態において、CPU102上で1つ以上の演算を実行するための制御ロジックの部分は、CPU102によって演算のそれぞれの部分が実行される間、メモリ106内に常駐し得る。
実行中、個別のアプリケーション、オペレーティングシステム関数、処理ロジックコマンドおよびシステムソフトウェアは、メモリ106に常駐し得る。オペレーティングシステム108に対して必須である制御ロジックコマンドは、一般に、実行中にはメモリ106に常駐することとなるであろう。他のソフトウェアコマンド、例えばKMD110およびソフトウェアスケジューラ112は、システム100の実行中にはメモリ106に常駐し得る。
この例において、メモリ106は、コマンドをAPD104に送るために、CPU102によって用いられるコマンドバッファ125を含む。メモリ106は、プロセスリストおよびプロセス情報(例えば、アクティブリスト152およびプロセス制御ブロック154)を含み得る。これらのリストおよび情報は、スケジュール情報を、APD104および/または関連するスケジューリングハードウェアに伝えるために、CPU102上で実行されるスケジューリングソフトウェアによって使用される。メモリ106に対するアクセスは、メモリ106に接続されたメモリコントローラ140によって管理され得る。例えば、メモリ106に対する読み出しおよび書き込みを実行するための、CPU102または他のデバイスからの要求は、メモリコントローラ140によって管理される。
システム100の他の態様に戻ると、IOMMU116は、マルチコンテキスト・メモリ管理ユニットである。
本明細書で用いられるコンテキストという用語は、カーネルが実行される環境であって、同期およびメモリ管理が定義されるドメインであるとみなされる。コンテキストは、1セットのデバイスと、これらのデバイスに対してアクセス可能であるメモリと、対応するメモリ特性と、メモリオブジェクトにおけるカーネル(単数または複数)または演算の実行をスケジュールするために用いられる1つ以上のコマンドキューとを含む。
図1Aにおいて示される例に戻ると、IOMMU116は、APD104を含むデバイスに対するメモリページアクセスに対して、仮想アドレスから物理アドレスへの変換を実行するためのロジックを含む。IOMMU116は、例えば、APD104等のデバイスによるページアクセスの結果としてページフォールトが生じる場合に、インタラプトを生成するためのロジックを含み得る。IOMMU116は、トランスレーションルックアサイドバッファ(TLB:translation lookaside buffer)118を含むか、あるいはTLB118に対するアクセスを有し得る。TLB118は、1つの例として、メモリ106内のデータ用にAPD104によりなされた要求に対して、論理(すなわち仮想)メモリアドレスから物理メモリアドレスへの変換を高速化するために、コンテントアドレサブルメモリ(CAM:content addressable memory)に実装され得る。
示された例において、通信インフラストラクチャ109は、必要に応じてシステム100のコンポーネントを相互接続する。通信インフラストラクチャ109は、周辺構成要素相互接続(PCI)バス、拡張PCI(PCI−E)バス、アドバンスト・マイクロコントローラ・バス・アーキテクチャ(AMBA)バス、アドバンスト・グラフィックス・ポート(AGP)または他の通信インフラストラクチャのうち1つ以上を含み得る(図示せず)。通信インフラストラクチャ109は、イーサネット(登録商標)若しくは同様のネットワークまたはアプリケーションの転送速度要求を満足する任意の好適な物理的通信インフラストラクチャを含み得る。通信インフラストラクチャ109は、コンピューティングシステム100のコンポーネントを含むコンポーネントを相互接続するための機能を含む。
この例において、オペレーティングシステム108は、システム100のハードウェアコンポーネントを管理する機能と、共通サービスを提供するための機能とを含む。様々な実施形態において、オペレーティングシステム108は、CPU102上で実行し、共通サービスを提供する。これらの共通サービスは、例えば、CPU102内での実行のためにアプリケーションをスケジューリングすることと、フォールト管理と、インタラプトサービスと、他のアプリケーションの入力および出力を処理することと、を含む。
いくつかの実施形態において、オペレーティングシステム108は、例えばインタラプトコントローラ148等のインタラプトコントローラによって生成されたインタラプトに基づいて、適切なインタラプトハンドリングルーチンを呼び出す。例えば、オペレーティングシステム108は、ページフォールト・インタラプトを検出すると、関連するページをメモリ106にロードし始め、且つ、対応するページテーブルを更新するために、インタラプトハンドラを呼び出す。
オペレーティングシステム108は、オペレーティングシステムにより管理されるカーネル機能を通して、ハードウェア部品に対するアクセスが仲介されることを確保することによって、システム100を保護する機能を含み得る。事実、オペレーティングシステム108は、アプリケーション111等のアプリケーションが、CPU102上でユーザスペースにおいて実行されることを確保する。オペレーティングシステム108は、アプリケーション111が、ハードウェアにアクセスするためにオペレーティングシステムにより提供されるカーネル機能および/または入出力機能を呼び出すことも確保する。
例として、アプリケーション111は、CPU102上でも実行されるユーザ計算を実行するための様々なプログラムまたはコマンドを含む。CPU102は、選択されたコマンドを、APD104上で処理するためにシームレスに送信し得る。
1つの例において、KMD110は、CPU102、CPU102上で実行されるアプリケーションまたは他のロジックが、APD104の機能を呼び出し得るアプリケーションプログラミングインタフェース(API)を実装する。例えば、KMD110は、CPU102からのコマンドを、コマンドバッファ125に加え(エンキューし)得る。なお、APD104は、このコマンドバッファ125からコマンドを続けて取得することとなる。加えて、KMD110は、APD104上で実行されるプロセスのスケジューリングを、SWS112とともに実行する。SWS112は、例えば、APD上で実行されるプロセスの優先度リストを保持するためのロジックを含み得る。
本発明の他の実施形態において、CPU102上で実行するアプリケーションは、コマンドをエンキューするときに、KMD110を完全にバイパスし得る。
いくつかの実施形態において、SWS112は、APD104上で実行されるプロセスのアクティブリスト152を、メモリ106に保持する。SWS112は、アクティブリスト152におけるプロセスのうち、ハードウェアのHWS128により管理される一部を選択する。各プロセスをAPD104上で実行することに関する情報は、CPU102からプロセス制御ブロック(PCB:process control block)154を通して、APD104に伝えられる。
アプリケーション、オペレーティングシステムおよびシステムソフトウェアのための処理ロジックは、マスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することで、本明細書において説明される本発明の態様を具体化するハードウェア装置を生成することを可能にするための、例えば、C言語等のプログラム言語および/またはVerilog、RTL等のハードウェア記述言語もしくはネットリストにおいて指定されるコマンドを含み得る。
当業者は、コンピューティングシステム100が、図1Aにおいて示されるコンポーネントよりも多数または少数のコンポーネントを含み得ることを、本明細書を読むことで理解するであろう。例えば、コンピューティングシステム100は、1つ以上の入力インターフェースと、不揮発性ストレージと、1つ以上の出力インターフェースと、ネットワークインターフェースと、1つ以上のディスプレイまたはディスプレイインターフェースと、を含み得る。
図1Bは、図1Aにおいて示されるAPD104のより詳細な例示を示す実施形態である。図1Bにおいて、CP124は、CPパイプライン124a,124b,124cを含み得る。CP124は、図1Aにおいて示されるコマンドバッファ125から入力として提供されるコマンドリストを、処理するように構成され得る。図1Bの典型的な動作において、CP入力0(124a)は、コマンドをグラフィックスパイプライン162に駆動することを担当する。CP入力1および2(124bおよび124c)は、コマンドを計算パイプライン160に伝える。HWS128の動作を制御するためのコントローラ機構166も提供される。
図1Bにおいて、グラフィックスパイプライン162は、本明細書において順序化パイプライン164と称される、1セットのブロックを含み得る。例えば、順序化パイプライン164は、頂点グループ変換器(VGT:vertex group translator)164aと、プリミティブアセンブラ(PA:primitive assembler)164bと、スキャンコンバータ(SC:scan converter)164cと、シェーダエクスポート・レンダーバック・ユニット(SX/RB:shader−export,render−back unit)176とを含む。順序化パイプライン164内の各ブロックは、グラフィックスパイプライン162内の異なる段階のグラフィックス処理を表し得る。順序化パイプライン164は、固定機能ハードウェアパイプラインであり得る。
本発明の精神および範囲に含まれ得る他の実装を用いることも可能である。わずかな量のデータが、入力としてグラフィックスパイプライン162に提供されるが、このデータは、グラフィックスパイプライン162からの出力として提供されるときまで増幅されることとなるであろう。グラフィックスパイプライン162は、CPパイプライン124aから受け取ったワークアイテムグループ内の範囲にわたってカウントするためのDC166も含む。DC166を通して提示された計算作業は、グラフィックスパイプライン162と準同期している。
計算パイプライン160は、シェーダDC168,170を含む。DC168,170のそれぞれは、CPパイプライン124b,124cから受け取ったワークグループ内の計算範囲にわたってカウントするように構成されている。
図1Bにおいて示されるDC166,168,170は、入力範囲を受け取り、入力範囲をワークグループに分割し、次いでこれらのワークグループをシェーダコア122に伝える。
グラフィックスパイプライン162は、一般に固定機能パイプラインであるため、その状態を保存および復元することは困難であり、そのためグラフィックスパイプライン162は、コンテキストスイッチが困難である。したがって、ほとんどの場合、本明細書において論じられるコンテキストスイッチは、グラフィックス処理におけるコンテキストスイッチに関係しない。例外は、シェーダコア122におけるグラフィックス作業であり、これはコンテキストスイッチされ得る。
グラフィックスパイプライン162のワーク処理が完了した後、完了したワークはレンダーバックユニット176を通して処理される。このレンダーバッククユニット176は、デプス計算およびカラー計算を行い、次いでその最終結果をメモリ130に書き込む。
シェーダコア122は、グラフィックスパイプライン162および計算パイプライン160により共有され得る。シェーダコア122は、汎用プロセッサであり、ウェーブフロントを実行するように構成されている。
1つの例において、計算パイプライン160内の全てのワークは、シェーダコア122内で処理される。シェーダコア122は、プログラム可能なソフトウェアコードを実行し、多様な形態のデータ(例えば、状態データ)を含む。
図2は、ワークロードが、CPUおよびAPD処理デバイスでの処理のためにバランスが取られ、且つ、再分配されるキューイングシステム200の例示的なブロック図である。キューイングシステム200は、キュー202と、タスク204と、セマフォブロック206と、(本明細書に記載された)CP124と、1つ以上のSIMDスケジューラ208と、シェーダコア122と、CPU同期化モジュール210と、CPUデキューイングモジュール212と、CPUコア214とを備える。
CPU102は、本明細書に記載したように、1つ以上のCPUコア214を含む、各CPUコア214は、CPU102内でコンピュータの命令およびデータを処理する。
キュー202は、システムメモリ106から割り当てられたメモリのセグメントである。先入れ先出方式(FIFO)の原則により、キューが作動する。すなわち、キューに最初に加えられる(エンキューされる)ワークロードは、キューから最初に取り出される(デキューされる)ワークロードである。さらに、当業者は、特定のキューデータ構造の説明は、例示として示され、限定するものではなく、他のメモリ記憶データ構造を使用してもよいことを認識するであろう。
キュー202は、パブリックキューである。パブシックキューは、例えばCPU102およびAPD104などの処理デバイスにアクセスすることができる。キュー202は、FIFOの原則によりキュー202に加えられ、且つ、取り出される複数のタスク204を記憶する。タスク204は、独立したジョブ(job)であり、APD104またはCPU102での処理のためにスケジュールされたオペレーティングシステム命令、アプリケーション、命令、イメージおよびデータを含む。ジョブは、グレイン(grain)に基づいてタスク204へ分割される。グレインは、タスク204のサイズを表す。このグレインのサイズは、APD104およびCPU102プロセッサにスケジュールされるタスク204によって異なる。例えば、CPU102上で処理されるタスク204のグレインの大きさは、一般的に、APD104上で処理されるタスク204のグレインの大きさよりも小さい。
タスク204は、情報の命令および/または処理を必要とするデータへのポインタを保持するデータ構造を含む。例えば、タスク204の情報を保持するデータ構造は、MyTask構造体(Mytask structure)として定義することができる。限定するものではないが、例において、MyTask構造体は、以下のパラメータを含む。
struct MyTask {
MyPtr myCodePtr
myCPUCodePtr : pointer to code (x86 binary format)
myAPDCodePtr :
//Pointer to code (shader binary format)
MyPtr myDataPtr :
myExecRange:
//Global grid dimensions
//Local grid dimensions
myArgSize
myArgs {(variable size)}
MyNotification
//Pointer to notification mechanism
MyAffinity
//processing preference
}
MyTask構造体は、システムメモリ106または別のメモリデバイスに記憶された、コンパイルされたCPUコードおよびAPDマイクロコードへのポインタを含む。上記の例において、MyPtr myCodePtrは、myAPDCodePtrとしてCP124で実行されるマイクロコードに対して、およびmyCPUCodePtrとしてCPU102で実行される、コンパイルされたソースコードに対して、ポインタを定義する。myAPDCodePtrは、シェーダコア122が、タスク204内のデータを実行するために使用する機能を含むマイクロコードをポイントする。例えば、タスク204がAPDにて実行される場合には、APD104は、myAPDCodePtrにアドレスが記憶されている機能にアクセスする。タスク204がCPU102にて実行される場合には、CPU102は、myCPUCodePtrにアドレスが記憶されている機能にアクセスする。一実施形態において、myCodePtrは、所定のイベントの後に実行可能となる従属情報を含む中間言語表現をもポイントする。
上記の例において、MyTask構造体は、MyPtr myDataPtrを含む。myDataPtrは、タスク204が処理する必要のあるシステムメモリ106内のデータの位置に対するポインタである。同様に、myDataPtrは、タスク204のデータに関連する情報を含むパラメータを含む。例えば、パラメータmyArgsは、引数のリストを含み、myArgSizeは引数の数を含み、myExecRangeはデータグリッドの次元を含む。
本発明の実施形態において、MyTask構造体は、MyAffinityパラメータを含む。MyAffinityの値は、タスク204を実行する処理デバイスを決定する。例えば、MyAffinityの値は、例えばCPU102またはAPD104などの処理デバイスの優先度、要求、ヒントなどを示す。
当業者は、MyTaskなどのデータ構造体が、他のパラメータを同様に含むことを理解し得るであろう。
CPUデキューイングモジュール212およびCP124は、デキューイング実体として機能する。デキューイング実体は、処理デバイスで処理するためのタスクを、キュー202から取り出し(デキューし)または移動させる。
CPUデキューイングモジュール212は、キュー202にアクセスし、CPU202で処理するためのタスク204を取り出すソフトウェアモジュールである。一実施形態において、CPUデキューイングモジュール212は、CPU102が処理を行うためにタスク204を必要とする場合に、APD104に関連するキュー202からタスクを取り出す。例えば、CPU102に関連するキュー202が空であるが、APD104に関連するキュー202が、処理を必要とするタスク204を記憶している場合である。
典型的には、CPUデキューイングモジュール212は、FIFOの原則を用いてタスク204を取得する。CPUデキューイングモジュール212は、タスク204を取り出す前に、MyAffinityパラメータにアクセスし、タスク204がCPU102での処理に適するか否かを決定する。例えば、CPUデキューイングモジュール212は、MyAffinityパラメータが要求としてAPD104での処理にセットされていないタスク204を、キューから取り出す。別の実施形態において、CPUデキューイングモジュール212は、MyAffinityパラメータが優先度としてAPD104での処理にセットされていないタスク204を、キューから取り出す。典型的には、並列プロセッサによって実行可能な複雑な数学的処理を含むタスク204は、優先度または要求として、APD104処理にセットされたMyAffinityパラメータを有することができる。
マルチCPUコア214環境において、CPUデキューイングモジュール212は、特定のCPUコア214に対応する。
CP124は、キュー202にアクセスし、APDで処理するタスク204を取り出す。CP124は、APD104で処理するためのキュー202からタスク204を取り出すハードウェアモジュールである。CPUデキューイングモジュール212と同様に、CP124は、APD104に関連するキュー202が空であるが、CPU102に関連するキュー202が、処理を必要とするタスク204を記憶している場合には、CPU102に関連するキュー202からタスク204を取り出すことができる。
CP124は、FIFOの原則に従ってタスク204を取得する。CP124は、タスク204を取り出す前に、MyAffinityパラメータを用いて、タスク204がAPD104の処理に適するか否かを決定する。例えば、CP124は、MyAffinityパラメータが要求としてCPU102での処理にセットされていないタスク204を、キューから取り出す。別の例において、CP124は、MyAffinityパラメータが優先度としてCPU102での処理にセットされていないタスク204を、キューから取り出す。典型的には、分岐コード(branch−like code)を含むタスク204は、優先度または要求として、CPU102処理にセットされたMyAffinityパラメータを有することができる。
CP124は、タスク204を取り出した後に、1つ以上のシェーダパイプ補間器(SPI:shader pipe interpolator)208へタスク204を転送する。SPI208は、シェーダコア122での処理用のタスク204を準備する。一実施形態において、SPI208は、タスク204の処理に必要とされる作業アイテムおよびシェーダコア122の数を決定する。
CPUデキューイングモジュール212およびCP124は、キュー202からタスク204を取り出す前に、同期される。同期は、タスク204が取り出されるときに、キュー202に対しての連続的かつ独占的なアクセスを保証するものである。CPU同期化モジュール210は、CPUデキューイングモジュール212がキュー202からタスク204を取り出す前に、キュー202およびAPD104と、CPUデキューイングモジュール212とを同期する。CPU同期化モジュール210は、CPUデキューイングモジュール212が、CPU102での処理のためのタスク204を取り出そうと試みる場合に、CPUデキューイングモジュール212がキュー202に対して単一のアクセスを有することを保証する。
CPU同期化モジュール210は、不可分操作(atomic operation)を用いて、CPUデキューイングモジュール212が、キュー202に対して独占的なアクセスを有することを保証する。不可分操作は、あるメモリ位置にアクセスするプロセスまたはハードウェアが当該アクセスを完了するまで、別のプロセスまたはハードウェアが当該メモリ位置に対する読み込みまたは書き込みを実行することを防ぐことを、当業者は理解するであろう。
セマフォブロック206は、APD104での処理のためのタスク204を取り出す前に、キュー202およびCPU102と、CP124とを同期する。また、セマフォブロック206は、CP124のキュー202に対する独占的なアクセスを保証する。1つの実施形態において、セマフォブロック206は、不可分操作を用いて、CP124が、キュー202に対して独占的なアクセスを有することを保証する。別の実施形態において、セマフォブロック206は、イベント通知メカニズムを用いて、キュー202に対する独占的なアクセスを保証する。イベント通知メカニズムは、プロセスまたはハードウェアデバイスに対して、特定のメモリ位置が別のプロセスまたはハードウェアデバイスによってアクセスされているのを通知することを、当業者は理解するであろう。
APD104およびCPU102は、キュー202から異なる数のタスク204を取得する。当業者は、APD104が多くのタスク204を並行して処理することができるため、より多くのタスク204を取得することを理解するであろう。結果として、CP124およびCPUデキューイングモジュール212がキュー202からタスク204を取得する場合、各デキューイングデバイスがキュー202から取り出すタスク204の数は、処理を要求するのがAPD104であるかCPU102であるかに依存する。
個々のプロセッサ環境において、セマフォブロック216は、キュー202を直接同期できず、追加的な構成要素を必要とする。図3は、分散処理環境においてワークロードを再分配するキューイングシステムのブロック図である。本明細書に記載した構成要素に加えて、分散システム環境におけるAPD104は、APDドライバモジュール302と、APDデキューイングモジュール304とを含み、キュー202からタスク204を取り出す。APDドライバモジュール302は、APD104にて総合的な実行を制御するソフトウェアモジュールである。APDデキューイングモジュール302は、キュー202からタスク204を取得するソフトウェアベースのモジュールである。
APD104がワークを要求すると、セマフォブロック206は、APDドライバモジュール302と通信する。APDドライバモジュール302は、APDデキューイングモジュール304と通信する。APDデキューイングモジュール304は、キュー202からタスク204を取り出し、タスク204をCP124に送る。
図4は、CPU102およびAPD104と通信する複数のキュー202を含むオペレーティング環境のブロック図である。
各キュー202は、複数のCPU102およびAPD104と通信することができるが、キュー202は、特定のCPU102、特定のCPUコア214または特定のAPD104のタスクを、最初に記憶することができる。
CP124は、CPU102に関連する複数のキュー202からタスク204を取り出すことができ、本明細書に記載したように、処理するためのAPD104に対してタスク204を転送することができる。同様に、CPUデキューイングモジュール212は、本明細書に記載したように、CPU102で処理するためのAPD104に関連する複数のキュー202から、タスク204を取り出すことができる。
図5は、キュー202からタスク204を取り出すCP124の例示的な実施形態のフローチャート500である。
動作502では、APD104は、処理を必要とするタスク204を要求する。
動作504では、CP124は、キュー202にアクセスする。
動作506では、CP124は、処理を必要とし、且つ、APD104で処理されることができるタスク204を識別する。例えば、CP124は、タスク204のMyAffinityパラメータの値を識別する。一実施形態において、CP124は、キュー202から取り出されるようにスケジュールされたタスク204のMyAffinityパラメータを識別する。CP124がタスク204を識別した場合には、フローチャートは、動作508に進む。そうでない場合には、フローチャート500は終了する。
動作508では、セマフォブロック206は、キュー202およびCPU同期化モジュール210を同期する。
動作510では、CP124は、キュー202からタスク204を取り出す。
動作512では、CP124は、SPI208へタスク204を送る。
動作514では、SPI208は、シェーダコア122でのタスク204の処理に必要なリソースを決定する。
動作516において、タスク204は、シェーダコア122上で処理される。
図6は、キュー202からタスク204を取り出すAPDデキューイングモジュール210の例示的実施形態のフローチャート600である。
動作602において、CPU102は、キュー202からタスク204を要求する。
動作604において、CPUデキューイングモジュール212は、処理を必要とし、且つ、CPU102で処理することができるタスク204を識別する。例えば、CP124は、タスク204のMyAffinityパラメータの値を識別する。一実施形態において、CP124は、キュー202から取り出されるようにスケジュールされたタスク204のMyAffinityパラメータを識別する。CPUデキューイングモジュール212がタスク204を識別した場合には、フローチャートは動作606に進み、識別しなかった場合には、フローチャートは終了する。
動作606において、CPU同期化モジュール212は、キュー202およびAPD104を同期する。その結果、CPUデキューイングモジュール212のみが、キュー202に対するアクセスを有するようになる。
動作608において、CPUデキューイングモジュール212は、本明細書に記載したように、キュー202からタスク204を取り出し、CPU102で処理するためのタスク204を送る。
動作610において、CPU102は、タスク204を処理する。
図7は、分散環境においてAPD104上の処理のためのキュー202からタスク204を除去するAPDデキューイングモジュールの例示的な実施形態のフローチャート700である。
動作702において、APD104は、動作502に記載したように、処理を必要とするタスク204を要求する。
動作706において、APD104は、タスク204用の要求を、APDドライバモジュール302に送る。
動作708において、APDドライバモジュール302は、APDデキューイングモジュール304に対して、当該要求を送る。
動作710において、APDデキューイングモジュール304は、処理を必要とし、且つ、動作506に記載したようにAPD104で処理できるタスクを識別する。
動作712において、セマフォブロック206は、動作508に記載したように、キュー202およびCPU同期化モジュール210を同期する。
動作714において、APDデキューイングモジュール304は、動作510に記載したように、APD104で処理するためのタスク204をキューから取り出し、当該タスク204をAPDドライバモジュール302に送る。
動作716において、APDドライバモジュール302は、タスク204をAPD104に送り、タスク204は、動作508〜512に記載したように処理される。
本発明の様々な実施態様は、ソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせにより実行することができる。例えば、図5の500、図6の600、図7の700のフローチャートにより例示される方法は、図1の統一されたコンピューティングシステム100において実行することができる。本発明の様々な実施態様は、この例の統一されたコンピューティングシステム100の用語において記述される。他のコンピューティングシステムおよび/またはコンピュータアーキテクチャを用いて本発明を実行する方法は、当業者にとって明らかである。
本テキストにおいて、用語「コンピュータプログラム媒体」および「コンピュータ使用可能媒体」は、一般的に、着脱可能な記憶ユニットまたはハードディスクドライブなどの媒体を意味して使用される。コンピュータプログラム媒体およびコンピュータ使用可能媒体は、同様に、システムメモリ106およびグラフィックメモリ130などのメモリをも意味し、メモリ半導体(例えば、DRAMなど)であってもよい。これらのコンピュータプログラム製品は、統一されたコンピューティングシステム100に対してソフトウェアを提供する意味を有する。
本発明は、同様に、いずれかのコンピュータ使用可能媒体に記憶されるソフトウェアを含むコンピュータプログラム製品を対象とする。上記ソフトウェアは、1つ以上のデータ処理デバイスにて実行されると、当該データ処理デバイスを、本明細書に記載したように動作させるか、あるいは、上述したように、本明細書に記載した本発明の実施形態を実施するために、コンピューティングデバイス(例えば、ASICまたはプロセッサなど)の合成/製造を可能にする。本発明の実施形態は、現在または将来知られる、いずれかのコンピュータ使用可能または可読媒体を使用する。コンピュータ使用可能媒体の例は、限定するものではないが、一次記憶装置デバイス(例えば、いずれかの種類のランダムアクセスメモリ)、二次記憶装置デバイス(例えば、ハードドライブ、フロッピー(登録商標)ディスク、CDROM、ZIPディスク、テープ、磁性記憶デバイス、光学記憶デバイス、MEMS、ナノテクノロジー記憶デバイスなど)および通信媒体(例えば、有線およびワイヤレスネットワーク、ローカルエリアネットワーク、広域ネットワーク、イントラネットなど)を含む。
本発明の様々な実施形態が上述したように説明されており、限定するものではないが、例のみの方法により表されることが理解されるべきである。添付された請求項に定義される本発明の趣旨および範囲から逸脱することなく、形態および詳細における多様な変化が作成されることは、関連する当業者に理解されるものである。本発明は、これらの例に限定されるものではない。本発明は、本明細書に記載したようにいずれかの構成要素の作動に適用可能である。したがって、本発明の範囲は、上述の代表的な実施形態のいずれよっても限定されるものではなく、以下の特許請求項およびそれらの均等物にしたがって定められるべきである。

Claims (23)

  1. 異種の処理デバイスにおいてワークロードのバランスをとるための方法であって、
    ある種類のプロセッサの記憶装置に対して、別の種類のプロセッサに関連するデキューイング実体がアクセスするステップと、
    前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別するステップと、
    前記記憶装置にアクセス可能な複数のデキューイング実体を同期するステップと、
    前記記憶装置から前記タスクを取り出すステップと、
    を含む、方法。
  2. 前記アクセスするステップは、前記別の種類のプロセッサからの要求に応じて行われる、
    請求項1に記載の方法。
  3. 前記プロセッサは、中央処置装置(CPU)およびアクセラレーテッドプロセッシングデバイス(APD)を含む、
    請求項1に記載の方法。
  4. 前記APDに関連する前記デキューイング実体は、ハードウェアデバイスである、
    請求項3に記載の方法。
  5. 前記CPUに関連する前記デキューイング実体は、ソフトウェアモジュールである、
    請求項3に記載の方法。
  6. 前記識別するステップは、タスクパラメータにアクセスするステップを含む、
    請求項1に記載の方法。
  7. 前記記憶装置はキューである、
    請求項1に記載の方法。
  8. 前記デキューイング実体が取り出すタスクの数は、前記プロセッサの種類に関連している、
    請求項1に記載の方法。
  9. 異種の処理デバイスにおいてワークロードのバランスをとるためのシステムであって、
    複数のタスクを記憶するように構成されたある種類のプロセッサに関連する記憶装置と、
    別の種類のプロセッサに関連するデキューイング実体であって、前記別の種類のプロセッサによって処理可能なタスクを、前記複数のタスクから識別するように構成されたデキューイング実体と、
    前記デキューイング実体が前記タスクを前記記憶装置から取り出す場合に、前記複数のデキューイング実体を同期するように構成された同期化構成要素と、
    を含む、システム。
  10. 前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
    請求項9に記載のシステム。
  11. 前記プロセッサは、中央処理装置(CPU)およびアクセラレーテッドプロセッシングデバイス(APD)を含む、
    請求項9に記載のシステム。
  12. 前記APDに関連するデキューイング実体は、ハードウェアデバイスである、
    請求項9に記載のシステム。
  13. 前記識別は、タスクパラメータにアクセスすることを含む、
    請求項9に記載のシステム。
  14. 前記記憶装置はキューである、
    請求項9に記載のシステム。
  15. 前記デキューイング実体が取り出すタスクの数は、前記プロセッサの種類に関連している、
    請求項9に記載のシステム。
  16. コンピュータ可読媒体を含む製品であって、前記コンピュータ可読媒体に記憶される命令を有し、前記命令が処理デバイスにより実行されると、
    ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスすることと、
    前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別することと、
    前記記憶装置にアクセス可能な複数のデキューイング実体を同期することと、
    前記記憶装置から前記タスクを取り出すことと、
    を前記処理デバイスに行わせることにより、前記処理デバイスに、異種の処理デバイスにおいてワークロードのバランスをとらせる、
    製品。
  17. 前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
    請求項16に記載の製品。
  18. 前記プロセッサは、中央処理装置(CPU)およびアクセラレーテッドプロセッシングデバイス(APD)を含む、
    請求項16に記載の製品。
  19. APDに関連する前記デキューイング実体は、ハードウェアデバイスである、
    請求項16に記載の製品。
  20. 命令が記憶されたコンピュータ可読媒体であって、前記命令がコンピューティングデバイスにより実行されると、
    キューの分析に応じて、ある種類のプロセッサの記憶装置に、別の種類のプロセッサに関連するデキューイング実体がアクセスすることと、
    前記別の種類のプロセッサによって処理可能なタスクを、前記記憶装置内の複数のタスクから識別することと、
    前記記憶装置にアクセス可能な複数のデキューイング実体を同期することと、
    前記記憶装置から前記タスクを取り出すことと、
    を、前記コンピュータデバイスに実行させる、
    コンピュータ可読媒体。
  21. 前記アクセスは、前記別の種類のプロセッサからの要求に応じて行われる、
    請求項20に記載のコンピュータ可読媒体。
  22. 前記プロセッサは、中央処理装置(CPU)およびアクセラレーテッドプロセッシングデバイス(APD)を含む、
    請求項20に記載のコンピュータ可読媒体。
  23. APDに関連する前記デキューイング実体は、ハードウェアデバイスである、
    請求項20に記載のコンピュータ可読媒体。
JP2013544627A 2010-12-15 2011-12-09 異種処理デバイスの動的ワークパーティション Active JP6373586B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US42346510P 2010-12-15 2010-12-15
US61/423,465 2010-12-15
US13/287,418 2011-11-02
US13/287,418 US9645854B2 (en) 2010-12-15 2011-11-02 Dynamic work partitioning on heterogeneous processing devices
PCT/US2011/064172 WO2012082557A2 (en) 2010-12-15 2011-12-09 Dynamic work partitioning on heterogeneous processing devices

Publications (3)

Publication Number Publication Date
JP2014508982A true JP2014508982A (ja) 2014-04-10
JP2014508982A5 JP2014508982A5 (ja) 2015-01-29
JP6373586B2 JP6373586B2 (ja) 2018-08-15

Family

ID=46245295

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013544627A Active JP6373586B2 (ja) 2010-12-15 2011-12-09 異種処理デバイスの動的ワークパーティション

Country Status (6)

Country Link
US (1) US9645854B2 (ja)
EP (1) EP2652617B1 (ja)
JP (1) JP6373586B2 (ja)
KR (1) KR101961396B1 (ja)
CN (1) CN103608776B (ja)
WO (1) WO2012082557A2 (ja)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012052774A2 (en) * 2010-10-21 2012-04-26 Bluwireless Technology Limited Data processing units
US8789065B2 (en) 2012-06-08 2014-07-22 Throughputer, Inc. System and method for input data load adaptive parallel processing
US9448847B2 (en) 2011-07-15 2016-09-20 Throughputer, Inc. Concurrent program execution optimization
US20130145202A1 (en) * 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Handling Virtual-to-Physical Address Translation Failures
US20130141446A1 (en) * 2011-12-06 2013-06-06 Advanced Micro Devices, Inc. Method and Apparatus for Servicing Page Fault Exceptions
US8842122B2 (en) * 2011-12-15 2014-09-23 Qualcomm Incorporated Graphics processing unit with command processor
EP2972907B1 (en) * 2013-03-15 2019-09-25 Intel Corporation Work stealing in heterogeneous computing systems
US10360652B2 (en) * 2014-06-13 2019-07-23 Advanced Micro Devices, Inc. Wavefront resource virtualization
US9959142B2 (en) * 2014-06-17 2018-05-01 Mediatek Inc. Dynamic task scheduling method for dispatching sub-tasks to computing devices of heterogeneous computing system and related computer readable medium
US9678806B2 (en) * 2015-06-26 2017-06-13 Advanced Micro Devices, Inc. Method and apparatus for distributing processing core workloads among processing cores
US9703605B2 (en) * 2015-09-04 2017-07-11 Mediatek, Inc. Fine-grained heterogeneous computing
US10528613B2 (en) * 2015-11-23 2020-01-07 Advanced Micro Devices, Inc. Method and apparatus for performing a parallel search operation
US10223436B2 (en) * 2016-04-27 2019-03-05 Qualcomm Incorporated Inter-subgroup data sharing
US10725667B2 (en) 2017-01-19 2020-07-28 Seoul National University R&Db Foundation Method of transferring data in parallel system, and parallel system for performing the same
KR102066212B1 (ko) * 2017-01-19 2020-01-14 서울대학교산학협력단 병렬 시스템에서의 데이터 복사 방법 및 이를 수행하기 위한 병렬 시스템
US10990436B2 (en) * 2018-01-24 2021-04-27 Dell Products L.P. System and method to handle I/O page faults in an I/O memory management unit
US10908940B1 (en) * 2018-02-26 2021-02-02 Amazon Technologies, Inc. Dynamically managed virtual server system
US11720408B2 (en) * 2018-05-08 2023-08-08 Vmware, Inc. Method and system for assigning a virtual machine in virtual GPU enabled systems
US10963300B2 (en) 2018-12-06 2021-03-30 Raytheon Company Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems
US11340942B2 (en) * 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
KR102441045B1 (ko) * 2020-12-14 2022-09-05 현대오토에버 주식회사 멀티 코어 구조의 전자 제어 유닛에서 수행되는 방법, 그리고 이를 구현하기 위한 장치

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1055284A (ja) * 1996-05-06 1998-02-24 Sun Microsyst Inc スレッドをスケジュールする方法及びそのシステム
JP2003167726A (ja) * 2001-11-22 2003-06-13 Univ Of Washington コプロセッサ装置およびデータ転送を容易にするための方法
JP2009510613A (ja) * 2005-09-27 2009-03-12 株式会社ソニー・コンピュータエンタテインメント セルプロセッサのためのspuタスクマネージャ

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7233998B2 (en) * 2001-03-22 2007-06-19 Sony Computer Entertainment Inc. Computer architecture and software cells for broadband networks
US7167916B2 (en) * 2002-08-30 2007-01-23 Unisys Corporation Computer OS dispatcher operation with virtual switching queue and IP queues
US7159221B1 (en) 2002-08-30 2007-01-02 Unisys Corporation Computer OS dispatcher operation with user controllable dedication
US7015915B1 (en) * 2003-08-12 2006-03-21 Nvidia Corporation Programming multiple chips from a command buffer
US7650601B2 (en) * 2003-12-04 2010-01-19 International Business Machines Corporation Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment
US7898545B1 (en) * 2004-12-14 2011-03-01 Nvidia Corporation Apparatus, system, and method for integrated heterogeneous processors
US8149242B2 (en) * 2006-11-10 2012-04-03 Sony Computer Entertainment Inc. Graphics processing apparatus, graphics library module and graphics processing method
US8286196B2 (en) 2007-05-03 2012-10-09 Apple Inc. Parallel runtime execution on multiple processors
CN101706741B (zh) 2009-12-11 2012-10-24 中国人民解放军国防科学技术大学 一种基于负载平衡的cpu和gpu两级动态任务划分方法
US8819690B2 (en) * 2009-12-30 2014-08-26 International Business Machines Corporation System for reducing data transfer latency to a global queue by generating bit mask to identify selected processing nodes/units in multi-node data processing system

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1055284A (ja) * 1996-05-06 1998-02-24 Sun Microsyst Inc スレッドをスケジュールする方法及びそのシステム
JP2003167726A (ja) * 2001-11-22 2003-06-13 Univ Of Washington コプロセッサ装置およびデータ転送を容易にするための方法
JP2009510613A (ja) * 2005-09-27 2009-03-12 株式会社ソニー・コンピュータエンタテインメント セルプロセッサのためのspuタスクマネージャ

Also Published As

Publication number Publication date
CN103608776B (zh) 2017-09-05
EP2652617A2 (en) 2013-10-23
WO2012082557A3 (en) 2013-12-27
US20120192201A1 (en) 2012-07-26
KR101961396B1 (ko) 2019-03-22
CN103608776A (zh) 2014-02-26
US9645854B2 (en) 2017-05-09
KR20130127480A (ko) 2013-11-22
WO2012082557A2 (en) 2012-06-21
EP2652617B1 (en) 2019-10-09
EP2652617A4 (en) 2017-06-14
JP6373586B2 (ja) 2018-08-15

Similar Documents

Publication Publication Date Title
JP6373586B2 (ja) 異種処理デバイスの動的ワークパーティション
JP6381734B2 (ja) グラフィックス計算プロセススケジューリング
JP6228459B2 (ja) システムコール要求の通信の最適化
EP2652614B1 (en) Graphics processing dispatch from user mode
US20120179851A1 (en) Computer System Interrupt Handling
US20120229481A1 (en) Accessibility of graphics processing compute resources
US10146575B2 (en) Heterogeneous enqueuing and dequeuing mechanism for task scheduling
JP5805783B2 (ja) コンピュータシステムインタラプト処理
US20120194526A1 (en) Task Scheduling
JP2014503898A (ja) 処理装置の同期動作のための方法およびシステム
WO2012082777A1 (en) Managed task scheduling on an accelerated processing device (apd)
US20130155074A1 (en) Syscall mechanism for processor to processor calls

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20141208

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20141208

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151216

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160126

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160425

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20160920

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170118

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20170207

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20170224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20180309

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180718

R150 Certificate of patent or registration of utility model

Ref document number: 6373586

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