JP6062506B2 - 汎用グラフィクス処理装置における計算リソースパイプライン化 - Google Patents

汎用グラフィクス処理装置における計算リソースパイプライン化 Download PDF

Info

Publication number
JP6062506B2
JP6062506B2 JP2015145991A JP2015145991A JP6062506B2 JP 6062506 B2 JP6062506 B2 JP 6062506B2 JP 2015145991 A JP2015145991 A JP 2015145991A JP 2015145991 A JP2015145991 A JP 2015145991A JP 6062506 B2 JP6062506 B2 JP 6062506B2
Authority
JP
Japan
Prior art keywords
local memory
parallel processing
data
memory buffers
gpgpu
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
JP2015145991A
Other languages
English (en)
Other versions
JP2016006657A (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 JP2016006657A publication Critical patent/JP2016006657A/ja
Application granted granted Critical
Publication of JP6062506B2 publication Critical patent/JP6062506B2/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Image Input (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Description

[0001] 本開示は、データを処理することに関し、より具体的には、汎用グラフィクス処理装置を使用してデータを処理することに関する。
[0002] 汎用グラフィック処理装置(GPGPU)は、2Dおよび3Dグラフィックスを処理するように元々設計されたグラフィック処理装置の一般化されたバージョンである。GPGPUは、GPUのハイパワー並行処理を、グラフィクス処理を超えて汎用データ処理アプリケーションに拡張する。一例として、GPUは、非グラフィカル計算のためにグラフィクス処理装置に一定のアプリケーションアクセスを与えるOpenCL仕様にしたがってデータを処理するように構成されうる。「OpenCL Specification, Version 1.1」は2010年6月にリリースされ、公的に入手可能である。
[0003] GPGPUは、処理装置間の同期またはデータ共有を許容しない高並列構造(highly parallel structure)で配置されたプログラム可能な処理装置を含む。代わりに、個々の処理装置は、外部メモリとデータセットのみ交換する。この構造により、GPGPUのためのアプリケーションは、本質的に並行であるものに限定される。GPGPUアーキテクチャは高並列処理されうるので、それらは、パイプラインベース計算の効率的な実装を阻む。この限定は各処理ステージにおける並行処理を使用する2Dおよび3Dグラフィクス処理に及ぶが、ステージ間の計算リソースのパイプライン化を必要とする。
[0004] 本開示は、パイプラインベースのアプリケーションの効率的な処理を許容するために並行処理装置によって汎用グラフィクス処理装置(GPGPU)のアーキテクチャを拡張するための技法を説明する。例えば、本技法は、並行処理装置間の移送についてのデータを保持するように処理パイプラインのステージとして動作する並行処理装置に接続されたローカルメモリバッファを構成することを含めうる。ローカルメモリバッファは、並行処理装置間の、オンチップ、低電力、直接なデータ移送を可能にする。ローカルメモリバッファは、並行処理装置間のデータ移送を可能にするためにハードウェアベースのデータフロー制御メカニズムを含めうる。このように、データは、ローカルメモリバッファを介して処理パイプラインにおいて1つの並行処理装置から次の並行処理装置へと直接受け渡され、実際には並行処理装置を一連のパイプラインステージに変換する。ローカルメモリバッファは、処理パイプラインにおける並行処理装置の各々がシステムメモリへの呼び出しを行ない、データを取り出すおよび/または格納する必要性を減らすまたは取り除くことによって、メモリ帯域幅使用量を著しく減らすことができる。
[0005] 本技法は、いくつかの例では、前の並行処理装置からのデータ出力を保持するためにバッファに必要とされる幅を有するようにローカルメモリバッファの各々を構成することを含めうる。例えば、ローカルメモリバッファは、幅と深さを交換することが構成可能であるハードウェアベースのバッファでありうる。さらに、いくつかの例では、本技法は、処理パイプライン内でデータシーケンスをプリザーブ(preserve)するためにシーケンシングバリア(sequencing barriers)を実行することを含めうる。例えば、データセットのデータスレッドのシーケンスは、並行処理装置にデータセットが入るときに記録され、データセットが処理された後で、データセットのデータスレッドは、記録されるのと同じシーケンスで並行処理装置からリリースされうる。
[0006] 一例では、本開示は、処理パイプラインのステージとして選択的に動作するように構成された2以上の並行処理装置と、並行処理装置間の移送のためにデータを保持するように構成された1以上のローカルメモリバッファであって、バッファの各々が並行処理装置のうち少なくとも2つの間で接続される、1以上のローカルメモリバッファと、を備えるGPGPUを対象とする。
[0007] 別の例では、本開示は、処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成することと;行処理装置間の移送のためにデータを保持するように1以上のローカルメモリバッファを構成することと、なお、バッファの各々は、並行処理装置のうち少なくとも2つの間で接続される;を備えるGPGPUによってタを処理する方法を対象とする。
[0008] さらなる例では、本開示は、処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成するための手段と;並行処理装置間の移送のためにデータを保持するように1以上のローカルメモリバッファを構成するための手段と、なお、バッファの各々は、並行処理装置のうち少なくとも2つの間で接続される;を備えるGPGPUを対象とする。
[0009] 別の例では、本開示は、GPGPUによってデータを処理するための命令を備えるコンピュータ可読媒体であって、実行時に、プログラム可能なプロセッサに、処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成させ、並行処理装置間の移送のためにデータを保持するように1以上のローカルメモリバッファを構成させる、なお、バッファの各々が並行処理装置のうち少なくとも2つの間で接続される、コンピュータ可読媒体を対象とする。
[0010] 1以上の例の詳細は、添付図面および下記の詳細な説明で記載されている。他の特徴、目的および利点は、明細書および図面、ならびに、特許請求の範囲から明らかとなるであろう。
図1は、処理パイプラインを実装することが構成可能である汎用グラフィックス処理装置(GPGPU)を含むデバイスを図示するブロック図である。 図2は、並行処理を実行するように構成された並行処理装置を含む従来のGPGPUを図示するブロック図である。 図3は、処理パイプラインを実装するように構成されたローカルメモリバッファと並行処理装置を含む図1のGPGPUの一例を図示するブロック図である。 図4は、処理パイプラインのステージとして並行処理装置間でデータを移送するために並行処理装置に接続されたローカルメモリバッファを含むGPGPUの例示的な動作を図示するフローチャートである。 図5は、GPGPUのローカルメモリバッファと並行処理装置によって実装される処理パイプライン内でデータシーケンスをプリザーブする例示的な動作を図示するフローチャートである。
詳細な説明
[0016] 本開示は、パイプラインベースのアプリケーションの効率的な処理を許容するために並行処理装置によって汎用グラフィクス処理装置(GPGPU)のアーキテクチャを拡張するための技法を説明する。具体的には、本技法は、並行処理装置間の移送についてのデータを保持するように処理パイプラインのステージとして動作する並行処理装置に接続されたローカルメモリバッファを構成することを含む。ローカルメモリバッファは、並行処理装置間の、オンチップ、低電力、直接なデータ移送を可能にする。ローカルメモリバッファは、並行処理装置間のデータ移送を可能にするためにハードウェアベースのデータフロー制御メカニズムを含めうる。このように、データは、ローカルメモリバッファを介して処理パイプラインにおいて1つの並行処理装置から次の並行処理装置へと直接受け渡され、実際には並行処理装置を一連のパイプラインステージに変換する。ローカルメモリバッファは、処理パイプラインにおける並行処理装置の各々がシステムメモリへの呼び出しを行ない、データを取り出しおよび/または格納する必要性を減らすまたは取り除くことによって、メモリ帯域幅使用量を著しく減らすことができる。
[0017] 図1は、処理パイプライン10を実装することが構成可能である汎用グラフィックス処理装置(GPGPU)6を含むデバイス2を図示するブロック図である。以下でより詳細に説明されるように、GPGPU6の処理パイプライン10は、処理パイプライン10のステージとして動作するように構成された2以上の並行処理装置と、処理パイプライン10を実装するために並行処理装置間の移送のためにデータを保持するように構成された1以上のローカルメモリバッファとを含む。
[0018] デバイス2は、データを送信および受信すること、様々なデータ処理アプリケーションをサポートすること、および、ユーザへの提示のために処理されたデータを出力すること、が可能である。デバイス2の例は、限定されないが、モバイル無線電話、携帯情報端末(PDA)、ビデオゲーミングデバイス、ビデオゲーミングコンソール、ビデオコンファレンシング装置(video conferencing units)、ラップトップコンピュータ、デスクトップコンピュータ、タブレットコンピュータ、テレビセットトップボックス、デジタル記録デバイス、デジタルメディアプレイヤ、および同様なものを含む。
[0019] 図1で図示された例では、デバイス2は、ホストプロセッサ4、処理パイプライン10を伴うGPGPU6、ディスプレイ8、スピーカ10、デバイスメモリ12、トランシーバモジュール14、およびユーザ入力デバイス16を含む。他のケースでは、例えば、デバイス2がデスクトップコンピュータである場合、ディスプレイ8、スピーカ10および/またはユーザインタフェース16はデバイス2に外付けであってもよい。ホストプロセッサ4とGPGPU6は、デジタル信号プロセッサ(DSP)、汎用マイクロプロセッサ、特定用途向け集積回路(ASIC)、フィールドプログラム可能なゲートアレイ(FPGA)、または他の同等な集積またはディスクリート論理回路を備えうる。
[0020] ホストプロセッサ4は1以上のアプリケーションを実行しうる。アプリケーションの例は、ウェブブラウザ、eメールアプリケーション、スプレッドシート、ビデオゲーム、オーディオおよびビデオ編集アプリケーション、または、ディスプレイ8および/またはスピーカ10を介したユーザへの提示のためのビジュアルおよび/またはオーディオ出力を生成する他のアプリケーション、を含む。GPGPU6はまた1以上のアプリケーションを実行しうる。GPGPU6は、ホストプロセッサ4によって実行されたアプリケーションをサポートしてアプリケーションを実行しうる。具体的には、GPGPU6は、ディスプレイ8および/またはスピーカ10を介してユーザへの提示のためのデータを準備するためにアプリケーションを実行しうる。
[0021] GPGPU6は、グラフィクス処理を超えて汎用データ処理アプリケーションにGPUの高電力並行処理を拡張するグラフィクス処理装置(GPU)の一般化されたバージョンである。例として、GPGPU6は、非グラフィカル計算のためにGPUに一定のアプリケーションアクセスを与えるOpenCL仕様にしたがってデータを処理するように構成されうる。従来のGPGPUは、図2を参照して以下でさらに詳細に説明され、パイプラインベースのアプリケーションの効率的な実装を防ぐ高並列構造で並べられるプログラム可能な処理装置を含む。この限定は各処理ステージで並行処理を使用する2Dおよび3Dグラフィクス処理アプリケーションに及ぶが、ステージ間の計算リソースのパイプライン化を必要とする。
[0022] パイプラインベースのアプリケーションは、第1ステージがオリジナルデータセットを処理するように構成され、第2ステージが第1ステージの出力を処理するように構成され、第3ステージが第3ステージの出力を処理するように構成され、アプリケーションに必要とされるステージの数について同様に続くようにステージで処理されるべきデータセットを必要とする。パイプラインベースのアプリケーションの最も効率的な実装は、処理パイプラインにおいてあるステージから次のステージへと直接データセットを受け渡すことである。パイプラインベースのアプリケーションのあまり効率的でない実装は、処理パイプラインにおける各ステージについて、オフチップメモリから前回のステージによって処理されたデータを取り出し、そのあとで、次のステージのためのオフチップメモリに戻って処理されたデータを格納することである。このあまり効率的でない実装はいまだに、データセットが処理パイプラインにおいて各ステージによって正しいシーケンスで処理されることを確実にするシーケンシングメカニズムを必要とする。従来のGPGPUは、処理パイプライン、または、パイプラインベースアプリケーションを実行するのに必要なシーケンシングメカニズムさえも実装するように構成されることができない。
[0023] 本開示における技法によれば、また、従来のGPGPUとは異なり、いくつかの例において、GPGPU6は、2Dおよび3Dグラフィクス処理アプリケーションを含むパイプラインベースのアプリケーションを実行するために処理パイプライン10を実装することが構成可能である。図3を参照して以下でより詳細に説明されるように、GPGPU6の処理パイプライン10は、処理パイプライン10のステージとして動作するように構成された2以上の並行処理装置と、処理パイプライン10を実装するために並行処理装置間の移送のためにデータを保持するように構成された1以上のローカルメモリバッファとを含む。処理パイプライン10に含まれるローカルメモリバッファは、並行処理装置間の、オンチップ、低電力、直接なデータ移送を可能にする。このように、データは、ローカルメモリバッファを介して処理パイプライン10において1つの並行処理装置から次の並行処理装置へと直接受け渡され、実際には並行処理装置を一連のパイプラインステージに変換する。処理パイプライン10の実装は、処理パイプライン10における並行処理装置の各々がGPGPU6からオフチップで位置されるデバイスメモリ12への呼び出しを行ない、データを取り出すおよび/または格納する必要性を減らすまたは取り除くことによって、メモリ帯域幅使用量を著しく減らすことができる。
[0024] 本開示の技法は、前の並行処理装置からのデータ出力を保持するためにバッファに必要とされる幅を有するように処理パイプライン10内でローカルメモリバッファの各々を構成することを含めうる。例えば、ローカルメモリバッファは、深さを幅と交換することが構成可能であるハードウェアベースのバッファでありうる。さらに、本技法は、処理パイプライン10内でデータシーケンスをプリザーブするためにシーケンシングバリアを実行することを含む。例えば、データセットのデータスレッドのシーケンスは、データセットが処理パイプライン10内の並行処理装置に入るときに記録され、データセットが処理された後で、データセットのデータスレッドは、記録されるのと同じシーケンスで並行処理装置からリリースされうる。
[0025] 例えば、GPGPU6が処理パイプライン10を実装するように構成されるとき、GPGPU6は、ウェブブラウザ、eメール、ビデオゲーム、およびホストプロセッサ4によって実行されるビデオ編集アプリケーションをサポートして、パイプラインベースの2Dおよび3Dグラフィクス処理アプリケーションを実行しうる。別の例として、GPGPU6が処理パイプライン10を実装するように構成されないとき、GPGPU6は、画像ベースの探索アプリケーション、画像記述子生成/抽出、ラジオメトリック画像調整(radiometric image adjustments)、オーディオ処理、およびホストプロセッサ4によって一般的に実行される他の動作のような高並行構造で効率的に動作するアプリケーションを実行しうる。
[0026] ある場合には、GPGPU6が、パイプラインベースのグラフィック処理アプリケーションをサポートしてアプリケーションを実行しうる。パイプラインベースのグラフィクス処理アプリケーションは、処理パイプライン10を使用するGPGPU6自体によって、または、デバイス2に含まれる別個のGPUによって実行されうる。例えば、GPGPU6は、画像特殊効果アプリケーション、GPUパイプラインのための頂点(vertices)生成、およびGPUパイプラインからのカラーバッファを使用するグラフィクスポスト処理アプリケーションを実行しうる。
[0027] ディスプレイ8およびスピーカ10は双方とも、デバイス2のための出力デバイスを備える。あるケースでは、ディスプレイ8とスピーカ10は、ユーザにビジュアルおよびオーディオ出力の両方を提示するために一緒に使用されうる。他のケースでは、ディスプレイ8とスピーカ10は、ユーザに出力を提示するために、別々に使用されうる。例として、ディスプレイ8は、液晶ディスプレイ(LCD)、ブラウン管(CRT)ディスプレイ、プラズマディスプレイまたは別のタイプのディスプレイデバイスを備えうる。
[0028] ユーザ入力デバイス16は、デバイス2のための1以上のユーザ入力デバイスを備える。例えば、ユーザ入力デバイス16は、トラックボール、マウス、キーボード、マイクロフォン、および/または他のタイプの入力デバイスを含めうる。他の例では、ユーザ入力デバイス16は、タッチスクリーンを備え、ディスプレイ8の一部として組み込まれうる。ユーザは、ユーザ入力デバイス16を介してホストプロセッサ4および/またはGPGPU6によって実行されるべき1以上のアプリケーションを選択しうる。
[0029] ホストプロセッサ4は、トランシーバモジュール14を介してホストプロセッサ4および/またはGPGPU6によって処理されるべきデータをダウンロードしうる。ホストプロセッサ4はまた、トランシーバモジュール14を介してホストプロセッサ4および/またはGPGPU6によって実行される1以上のアプリケーションをダウンロードしうる。トランシーバモジュール14は、デバイス2と他のデバイスとの間の無線通信または有線通信、またはネットワークを可能にする回路を含めうる。トランシーバモジュール14は、変調器、復調器、増幅器、および有線通信または無線通信のための他の当該回路を含めうる。
[0030] デバイスメモリ12は、ホストプロセッサ4および/またはGPGPU6によって処理されるべきデータを格納し、また、ホストプロセッサ4および/またはGPGPU6から受信される処理されたデータを格納しうる。さらに、デバイスメモリ12は、ホストプロセッサ4および/またはGPGPU6によって実行された1以上のアプリケーションを格納しうる。デバイスメモリ12は、1以上のコンピュータ可読記憶媒体を備えうる。デバイスメモリ12の例は、限定されないが、ランダムアクセスメモリ(RAM)、読み出し専用メモリ(ROM)、電子的に消去可能なプログラム可能な読み出し専用メモリ(EEPROM(登録商標))、CD−ROMまたは他の光学ディスクストレージ、磁気ディスクストレージまたは他の磁気ストレージデバイス、フラッシュメモリ、または命令またはデータ構造の形式で所望プログラムコードを搬送または格納するために使用されることができる、また、コンピュータまたはプロセッサによってアクセスされることができる、任意の他の媒体を含む。
[0031] 図2は、並行処理を実行するように構成された並行処理装置22A−22Dを含む従来のGPGPU18を図示するブロック図である。いくつかの例では、GPGPU18は、図1を参照して上述されているデバイス2と実質的に同様なデバイス内に含まれうる。GPGPU18は、データ配信装置20、並行処理装置22A−22D(「並行処理装置22」)、およびGPGPU18に外付けのデバイスメモリ26に並行処理装置22を接続するバス24を含む。
[0032] 従来のGPGPU18は、2Dおよび3Dグラフィックスを処理するように元々設計されたGPUの一般化バージョンである。GPGPU18は、GPUの高電力並行処理を、グラフィクス処理を超えて汎用処理アプリケーションに拡張することができる。例として、GPGPU18は、OpenCL仕様に従ってデータを処理するように構成されうる。OpenCL仕様は、非グラフィカルコンピューティングのためにGPUに一定のアプリケーションアクセスを与える。OpenCL用語では、データスレッドは作業項目 (work item)と呼ばれ、データセットは作業グループ(work group)と呼ばれ、処理装置は計算装置(compute units)と呼ばれ、処理装置の集まりは、計算グループ(compute group)と呼ばれる。
[0033] 一般的なGPUタスクは高度に並行であり、所与の処理装置内で処理されているデータセットのデータスレッド間での情報交換を必要としない。例えば、頂点について計算された値は、異なる頂点について計算された値から独立しており、ピクセルについて計算された値は、異なるピクセルについて計算された値から独立している。GPUの並行性質を模倣するために、GPGPU18は、高並行構造で配列された並行処理装置22を含むように設計される。
[0034] GPGPU18のアーキテクチャは、並行処理装置22間のデータ共有または同期を許容しないほど、高並行である。動作において、データ配信装置20は、並行処理装置22の各々に、デバイスメモリ26に格納されたデータセットを割り当てる。処理中、割り当てられたデータセットのデータスレッドは、並行処理装置22の各々の内で共有され同期されうる。しかしながら、異なるデータセットのデータスレッドは、並行処理装置22間で共有または同期されることができない。代わりに、並行処理装置22の各々は、バス24を介してデバイスメモリ26と割り当てられたデータセットのみ交換する。より具体的には、並行処理装置22の各々は、バス24を介してデバイスメモリ26から処理についての割り当てられたデータセットを取り出し、データセットを処理した後で、バス24を介してデバイスメモリ26に戻って処理されたデータセットを格納する。
[0035] GPGPU18の並行アーキテクチャは、並行処理装置22間のパイプラインベースアプリケーションの効率的な実装を阻む。パイプラインベースのアプリケーションでは、処理装置は、異なる処理タスクについて1つのステージから別のステージへとデータが移動することを可能にするためにパイプラインにおいてステージとして接続される。GPGPU18におけるパイプラインベースのアプリケーションに対する限定は、2Dおよび3Dグラフィクス処理アプリケーションに拡張する、そしてそれは各処理ステージで並行処理を使用するが、ステージ間でのパイプライン化を必要とする。
[0036] したがって、GPGPU18のアプリケーションは、本質的に並行であるものに限定される。並行処理装置22の各々は算術論理装置(ALU)のクラスタまたは他の構成可能な論理素子を備えうる。したがって、並行処理装置22は、GPGPU18によって実行されるアプリケーションに依存して異なる動作を実行することがプログラム可能または構成可能である。GPGPU18の高並行構造で効率的に動作するアプリケーションは、画像ベースの探索アプリケーション、画像記述子生成/抽出、ラジオメトリック画像調整(radiometric image adjustments)、オーディオ処理、およびデジタル信号プロセッサ(DSP)によって一般的に実行される他の動作および同様なものを含めうる。さらに、GPGPU18によって実行されるアプリケーションは、画像特殊効果生成、GPUパイプラインのための頂点生成、GPUパイプラインからのカラーバッファを使用してグラフィクスポスト処理動作のようなパイプラインベースのグラフィクス処理アプリケーションとのインタラクションを必要としうる。
[0037] 図3は、図1の例示的なGPGPU6を図示するブロック図であり、処理パイプライン10を実装するように構成されたローカルメモリバッファ44A−44Cと並行処理装置42A−42Dとを含む。他の例では、GPGPU6は、より多数またはより少数の並行処理装置およびローカルメモリバッファを含めうる。
[0038] 図3の例では、GPGPU6は、データ配信装置40、並行処理装置42A−42D(「並行処理装置42」)およびGPGPU6に外付けのデバイスメモリ12(図1)に並行処理装置42を接続するバス46を含む。従来のGPGPUとは異なり(例えば、図3のGPGPU18)、GPGPU6はまた、並行処理装置42間で接続されたローカルメモリバッファ44A−44C(「ローカルメモリバッファ44」)を含む。並行処理装置42と並行処理装置42間で接続されたローカルメモリバッファ44の組み合わせは、処理パイプライン10と呼ばれうる。GPGPU6はまた、制御装置30およびローカルメモリ38を含む。ローカルメモリ38は、ローカルメモリバッファ44に類似したバッファ、レジスタ、またはGPGPU6のデータを一時的に格納するキャッシュを備えうる。制御装置30は、アプリケーションプログラミングインタフェース(API)32、バッファマネージャ34、およびシーケンスマネージャ36を含む。
[0039] ローカルメモリバッファ44は、並行処理装置42間のデータ移送を可能にするハードウェアベースのデータフロー制御メカニズムを含めうる。例えば、ローカルメモリバッファ44は、ハードウェアベースの先入れ先出し(FIFO)バッファ、後入れ先出し(LIFO)バッファまたはインデクス付けされたバッファのような他のタイプのハードウェアベースのバッファを備えうる。ローカルメモリバッファ44AがハードウェアベースのFIFOを備える場合には、例えば、ローカルメモリバッファ44Aは、バッファにデータを書き込むスペースがあるときローカルメモリバッファ44Aへデータを並行処理装置42Aが送信し、そうでないときには書き込み要求をストールすることを可能にするデータフロー制御メカニズムを含む。その場合、ローカルメモリバッファ44Aはまた、バッファから読み出すのに利用可能なデータがあるとき、ローカルメモリバッファ44Aからデータを並行処理装置42Bが受信し、そうでないときには読み出し要求をストールすることを可能にするデータフロー制御メカニズムを含む。ローカルメモリバッファ44がハードウェアベースのデータフロー制御メカニズムを含むとき、あまり効率的でないソフトウェアベースのデータフロー制御は、並行処理装置42間のデータの移送を可能にするのに必要ではない。
[0040] ローカルメモリバッファ44は、並行処理装置42間の、オンチップ、低電力、直接なデータ移送を可能にする。ローカルメモリバッファ44は「ローカル」である、なぜならば、それらは、GPGPU6内で、処理装置42と同じチップ上で位置されるからである。このように、データは、ローカルメモリバッファ44を介して処理パイプライン10において並行処理装置42の一方から並行処理装置42の他方へと直接受け渡されうる。並行処理装置42は、GPGPU6に外付けであるまたはGPGPU6からオフチップに配置されているデバイスメモリ12でデータを繰り返し取り出し格納することを必要としていない。したがって、ローカルメモリバッファ44は、並行処理装置42を一連のパイプラインステージに変換し、GPGPU6内で処理パイプライン10を実装する。
[0041] 図示された例では、ローカルメモリバッファ44の各々は、処理パイプライン10が純粋に直列なパイプラインであるように連続順で並行処理装置42の2つの間で直接接続される。ローカルメモリバッファ44は、それが2つの並行処理装置42によってのみアクセス可能であるように、それらが接続され並行処理装置42のいずれによってもアドレス可能なバスではなく、「直接」接続される。例えば、ローカルメモリバッファ44Aは、並行処理装置42Aおよび42Bとの間で直接接続され、ローカルメモリバッファ44Bは、並行処理装置42Bと42Cとの間で直接接続され、ローカルメモリバッファ44Cは、並行処理装置42Cと42Dとの間で直接接続される。
[0042] 他の例では、メモリバッファ44の各々はまた、連続順でない並行処理装置42のうち1以上に直接接続されうる。この場合、ローカルメモリバッファ44の各々は、クロスバー接続を介して並行処理装置42のいずれかに直接接続されうる。例えば、ローカルメモリバッファ44Aは、並行処理装置42Aがローカルメモリバッファ44Aを介して並行処理装置42B−42Dのいずれかにデータを移送しうるように、クロスバー接続を介して並行処理装置42の各々に直接接続されうる。クロスバー接続の使用は、ローカルメモリバッファ44を並行処理装置42に対してより幅広くアクセス可能にし、純粋に直列ではない処理パイプラインの実装を可能にする。
[0043] 処理パイプライン10が純粋に直列なパイプラインを備える図示された例では、並行処理装置42は、ローカルメモリバッファ44の次のもの(successive one)にデータを書き込む許可のみを有し、ローカルメモリバッファ44の前のものからデータを読み出す許可のみを有しうる。例えば、並行処理装置42Bは、ローカルメモリバッファ44Aからデータを読み出すことのみ可能であり、ローカルメモリバッファ44Bにデータを書き込むことのみ可能でありうる。処理パイプラインがクロスバー接続を含める場合、並行処理装置42は、ローカルメモリバッファ44のいずれかに読み出し且つ書き込む許可を有しうる。例えば、並行処理装置42Bは、ローカルメモリバッファ44Aで、また、ローカルメモリバッファ44Bで、データを読み出し書き込むことが可能であることがある。
[0044] 上述されるように、ローカルメモリバッファ44は、FIFOバッファ、LIFOバッファ、またはインデクス付けされたバッファのうちの少なくとも1つを備えうる。ローカルメモリバッファ44に使用されるバッファのタイプは、処理パイプライン10で必要とされるハードウェアベースのデータフロー制御メカニズムのタイプに依存しうる。ローカルメモリバッファ44に使用されるバッファのタイプはまた、ローカルメモリバッファ44が1対1接続またはクロスバー接続を介して並行処理装置42に接続されるかに依存しうる。さらに、クロスバー接続が使用されるとき、制御装置30のバッファマネージャ34は、どの並行処理装置42が所与時間にどのローカルメモリバッファ44にアクセスするかを管理するために、いくらかのメモリ制御を実行する必要があることがある。
[0045] 上述されるように、ローカルメモリバッファ44は、1対1またはクロスバー接続のいずれかを介して並行処理装置42の少なくとも2つの間で直接接続されうる。しかしながら、ローカルメモリバッファ44は、並行処理装置42によってアドレス可能なバスでないことがある。このように、ローカルメモリバッファ44の指定されたメモリコントローラは必要でないことがある。具体的には、メモリコントローラは、バスにわたってローカルメモリバッファ44に対して読み出しおよび書き込みコマンドを処理する必要はない。
[0046] ローカルメモリバッファ44は、並行処理装置42の各々がバス46を介してデバイスメモリ12への呼び出しを行ない、データを取り出すおよび/または格納する必要性を減らすまたは取り除くことによって、メモリ帯域幅使用量を著しく減らすことができる。動作において、並行処理装置42Aは、処理パイプライン10の第1の処理装置として、バス46を介してデバイスメモリ12からオリジナルデータセットを取り出す。データセットは、データ配信装置40によって並行処理装置42Aに割り当てられうる。さらに、並行処理装置42Dは、処理パイプライン10の最終処理装置として、バス46を介してデバイスメモリ12にポストパイプラインデータセットを格納する。並行処理装置42Bおよび42Cは、処理パイプライン10の中間処理装置として、ローカルメモリバッファ44のうち一方を介して並行処理装置42のうちの前のものからデータセットを受信し、ローカルメモリバッファ44のうち他方を介して並行処理装置42のうち後続のものにデータセットを送信する。したがって、中間処理装置は、データを取り出しおよび/または格納するためにデバイスメモリ12と相互作用することを必要とされない。いくつかの場合では、中間処理装置は、処理パイプライン10の特定のステージを実行するためにデバイスメモリから補助データを取り出しうる。しかしながら、処理用の主要なデータセットは、ローカルメモリバッファ44を介して処理パイプライン10に沿って直接受け渡される。
[0047] 上述されるように、GPGPU6は、グラフィクス処理を超えて汎用データ処理アプリケーションにGPUの高電力並行処理を拡張するGPUの一般化されたバージョンである。例として、GPGPU6は、非グラフィカル計算のためにグラフィクス処理装置に一定のアプリケーションアクセスを与えるOpenCL仕様にしたがってデータを処理するように構成されうる。OpenCL用語では、データスレッドは作業項目(work item)と呼ばれ、データセットは作業グループ(work group)と呼ばれ、処理装置は計算装置(compute units)と呼ばれ、処理装置の集まりは、計算グループ(compute group)と呼ばれる。
[0048] 本開示の技法によれば、GPGPU6は、2Dおよび3Dグラフィクス処理アプリケーションを含むパイプラインベースのアプリケーションを実行するために処理パイプライン10を実装することが構成可能である。より具体的には、GPGPU6の制御装置30は、処理パイプラインのステージとして動作するように並行処理装置42を構成する。制御装置30はまた、並行処理装置42間の移送のためのデータを保持するように、並行処理装置42間で接続されたローカルメモリバッファ44を構成する。
[0049] 並行処理装置42は、GPGPU6によって実行されるアプリケーションに依存して異なる動作を実行することがプログラム可能または構成可能でありうる。制御装置30は、アプリケーションにしたがって動作するように並行処理装置42の各々を構成しうる。例えば、並行処理装置22の各々は算術論理装置(ALU)のクラスタまたは他の構成可能な論理素子を備えうる。
[0050] ローカルメモリバッファ44はまた、GPGPU6によって実行されるアプリケーションに依存して並行処理装置42からの異なるタイプのデータ出力を保持することがプログラム可能または構成可能でありうる。例えば、ローカルメモリバッファ44は、ハードウェアベースのバッファを備えうるが、構成可能な態様のセット(a set if configurable aspects)を含めうる。構成可能な態様の1つは、並行処理装置42からの異なるタイプのデータ出力を適応させるためのローカルメモリバッファ44の幅でありうる。例えば、ローカルメモリバッファ44は、深さを幅とトレードすることが構成可能でありうる。制御装置30のバッファマネージャ34は、並行処理装置42のうち前のもののデータ出力を保持するためにローカルメモリバッファ44の各々に必要とされる幅を決定しうる。バッファマネージャ34は、並行処理装置42の各々からデータ出力のタイプを認識するので、データを保持するためにローカルメモリバッファ44の各々によって必要とされる幅を認識する。バッファマネージャ34は、そのあとで、決定された幅を有するようにローカルメモリバッファ44の各々を構成しうる。
[0051] いったん並行処理装置42とローカルメモリバッファ44がGPGPU6内で処理パイプライン10を実装するように構成されると、並行処理装置42は、ローカルメモリバッファ44を介してデータを移送しうる。制御装置30は、ローカルメモリバッファ44にデータを送信するように並行処理装置42のうち1以上を構成し、ローカルメモリバッファ44からデータを受信するように並行処理装置44のうち1以上を構成しうる。例えば、制御装置30は、それぞれ、ローカルメモリバッファ44A、44B、および44Cにデータを送信するように並行処理装置42A、42Bおよび42Cを構成しうる。制御装置30はまた、それぞれ、ローカルメモリバッファ44A、44B、および44Cからデータ受信するように並行処理装置42B、42C、および42Dを構成しうる。
[0052] ハードウェアベースのフロー制御メカニズムを有するローカルメモリバッファ44は、新規API32を導入することによって、OpenCL規格のようなGPGPU規格を使用して露出されうる(exposed)。例えば、制御装置30は、API32の1以上を実行して、ローカルメモリバッファ44の各々に必要とされる幅を決定し、決定された幅でローカルメモリバッファ44の各々を構成し、ローカルメモリバッファ44の各々の深さを決定しうる。さらに、制御装置30は、API32の1以上を実行してローカルメモリバッファ44にデータを送信しローカルメモリバッファ44からデータを受信するように並行処理装置42を構成しうる。ローカルメモリバッファ44に含まれるハードウェアベースのデータフロー制御メカニズムは、並行処理装置42が、さらなるソフトウェアベースのデータフロー制御なしに、ローカルメモリバッファ44にデータを送信し、ローカルメモリバッファ44からデータを受信することを可能にする。
[0053] さらにGPGPU6の制御装置30は、並行処理装置42のうち1以上内でデータシーケンスをプリザーブすることによって処理パイプライン10内でデータシーケンスをプリザーブしうる。GPGPU6によって実行されるパイプラインベースのアプリケーション、特に3Dグラフィクスアプリケーションは、処理パイプライン10内で一定のシーケンスで処理されるべきデータを必要としうる。データが処理パイプラインの各ステージで処理されるとき、データは、条件、キャッシュヒットまたはミス、および同様なもののような実行課題(execution issues)に起因してシーケンスを変更しうる。制御装置30のシーケンスマネージャ36は、並行処理装置42の少なくともいくつかの内でデータシーケンスをプリザーブするためにシーケンシングバリアを実行しうる。シーケンシングバリアは、処理パイプライン10内の処理速度を減速させることができるので、シーケンスマネージャ36は、精確な処理のためにデータシーケンスプリザべーションを必要とするこれらの並行処理装置42においてシーケンシングバリアのみを実行しうる。
[0054] シーケンスマネージャ36によって実行されるシーケンシングバリアは、シーケンス決定カウンタ(SDC)およびシーケンスエンフォーシングバリア(SEB)を含めうる。例えば、シーケンシングバリアは、SDCおよびSEBについてOpenCL C言語に新しい関数呼び出しを追加することによって、OpenCL規格のようなGPGPU規格を使用して露出されうる(exposed)。
[0055] シーケンスマネージャ36は、データセットが並行処理装置42のいずれか1つに入るときSDCを実行しうる。シーケンスマネージャ36は、そのあとで、ローカルメモリ38内で受信されたデータセットのデータスレッドのシーケンスを記録することによってSDC動作を実行する。例えば、シーケンスマネージャ36は、データスレッドがデバイスメモリ12から受信される順でデータセットの各データスレッドのインデクスを記録しうる。
[0056] シーケンスマネージャ36は、データセットが並行処理装置42のうちの1つから出るときに、SEBを実行しうる。シーケンスマネージャ36は、そのあとで、SDCによって記録されるのと同じシーケンスで並行処理装置42のうちの1つからデータセットのデータスレッドをリリースすることによってSEB動作を実行する。例えば、シーケンスマネージャ36は、ローカルメモリ38に記録されたデータスレッドインデクスにアクセスし、インデクスが記録された順にしたがって各データスレッドをリリースする。このように、データセットのデータスレッドは、データセットのデータスレッドが並行処理装置42のうち現在のものに入るのと同じ順で並行処理装置42の後続のものに入るであろう。
[0057] 一例では、制御装置30は、パイプラインベースの3Dグラフィクス処理アプリケーションを実行するようにGPGPU6を構成しうる。その場合、制御装置30は、3Dグラフィクス処理パイプラインのステージとして動作するように並行処理装置42を構成しうる。例えば、制御装置30は、頂点シェーダとして動作するように並行処理装置42Aを構成し、トライアングルラステライザとして動作するように並行処理装置42Bを構成し、フラグメントシェーダとして動作するように並行処理装置42Cを構成し、ピクセルブレンダとして動作するように並行処理装置42Dを構成しうる。
[0058] 制御装置30はまた、3Dグラフィクス処理パイプライン10を実装するために並行処理装置42間の移送のためのデータを保持するようにハードウェアベースのデータフロー制御メカニズムによってローカルメモリバッファ44を構成しうる。例えば、制御装置30は、頂点シェーダとして動作する並行処理装置42Aと、トライアングルラステライザとして動作する並行処理装置42Bとの間の移送のためのポスト頂点シェーダの頂点データを保持するようにローカルメモリバッファ44Aを構成しうる。制御装置30は、トライアングルラステライザとして動作する並行処理装置42Bと、フラグメントシェーダとして動作する並行処理装置42Cとの間の移送のためにプレフラグメントシェーダピクセルデータを保持するようにローカルメモリバッファ44Bを構成しうる。最後に、制御装置30は、フラグメントシェーダとして動作している並行処理装置42Cとピクセルブレンダとして動作している並行処理装置42Dとの間の移送のためにポストフラグメントシェーダピクセル値を保持するようにローカルメモリバッファ44Cを構成しうる。
[0059] 3Dグラフィクス処理アプリケーションを実行するとき、データ配信装置40は、頂点シェーダとして動作している並行処理装置42Aにオリジナル頂点データセットを割り当てうる。並行処理装置42Aは、バス46を介して、デバイスメモリ12から、割り当てられたオリジナル頂点データセットを取り出す。データセットが入るとき、シーケンスマネージャ36は、頂点データのシーケンスを記録するためにSDCを実行する。並行処理装置42Aはそのあとで頂点シェーディング動作を実行し、ローカルメモリバッファ44Aにポスト頂点シェーダの頂点データを送信する。データセットが並行処理装置42Aから出るとき、シーケンスマネージャ36は、SDCによって記録されるのと同じシーケンスで頂点データをリリースするためにSEBを実行する。このように、頂点データは、頂点シェーダとして動作する並行処理装置42Aに頂点データが入ったのと同じ順で、トライアングルラステライザとして動作する並行処理装置42Bに到達するであろう。
[0060] トライアングルラステライザとして動作する並行処理装置42Bは、ローカルメモリバッファ44Aからポスト頂点シェーダの頂点データを受信する。いくつかの場合においては、並行処理装置42Bはまた、トライアングルラステライズ化動作を実行するためにバス46を介してデバイスメモリ12から補助データを取り出しうる。並行処理装置42Bはそのあとでトライアングルラステライズ化動作を実行し、ローカルメモリバッファ44Bにプレフラグメントシェーダピクセルデータを送信する。いくつかの例では、シーケンスマネージャ36は、頂点データが並行処理装置42Bに入るときSDCを実行し、ピクセルデータが並行処理装置42Bから出るときSEBを実行してデータシーケンスをプリザーブしうる。他の例では、シーケンシングバリアは必須ではないので、並行処理装置42Bに対して実行されない。
[0061] 並行処理装置42Cは、フラグメントシェーダを動作し、ローカルメモリバッファ44Bからプレフラグメントシェーダピクセルデータを受信する。データセットが入るとき、シーケンスマネージャ36は、ピクセルデータのシーケンスを記録するためにSDCを実行する。いくつかの場合においては、並行処理装置42Cはまた、フラグメントシェーダ動作を実行するためにバス46を介してデバイスメモリ12から補助データを取り出しうる。並行処理装置42Cはそのあとでフラグメントシェーディング動作を実行し、ポストフラグメントシェーダピクセル値をローカルメモリバッファ44Cに送信する。データセットが並行処理装置42Cから出るとき、シーケンスマネージャ36は、SDCによって記録されるのと同じシーケンスでピクセルデータをリリースするためにSEBを実行する。このように、ピクセルデータは、フラグメントシェーダとして動作している並行処理装置42Cにピクセルデータが入ったのと同じ順で、ピクセルブレンダとして動作する並行処理装置42Dに到達するであろう。
[0062] 並行処理装置42Dは、ピクセルブレンダとして動作し、ローカルメモリバッファ44Cからポストフラグメントシェーダピクセル値を受信する。並行処理装置44Dは、ピクセルブレンディング動作を実行し、バス46を介してデバイスメモリ12にポストパイプラインデータセットを格納する。いくつかの例では、シーケンスマネージャ36は、ピクセルデータが並行処理装置42Dに入るときSDCを実行し、画像データが並行処理装置42Dから出るときSEBを実行してデータシーケンスをプリザーブしうる。他の例では、シーケンシングバリアは必須ではないので、並行処理装置42Dに対して実行されない。3Dグラフィクス処理アプリケーションの上述された例は、単なる例示であり、開示された技法は、GPGPU6において様々なパイプラインベースのアプリケーションを実行するために使用されうる。
[0063] 図4は、処理パイプライン10のステージとしての並行処理装置間でデータを移送するために並行処理装置42に接続されたローカルメモリバッファ44を含むGPGPU6の例示的な動作を図示するフローチャートである。図示される動作は、図3のGPGPU6を参照して説明される。
[0064] GPGPU6の制御装置30は、処理パイプライン10のステージとして動作するように並行処理装置42を構成する(50)。例えば、制御装置30は、3Dグラフィクス処理パイプラインのステージとして動作するように並行処理装置42を構成する。その例では、制御装置30は、頂点シェーダとして動作するように並行処理装置42Aを構成し、トライアングルラステライザとして動作するように並行処理装置42Bを構成し、フラグメントシェーダとして動作するように並行処理装置42Cを構成し、ピクセルブレンダとして動作するように並行処理装置42Dを構成しうる。
[0065] 制御装置30はまた、並行処理装置42間の移送のためのデータを保持するようにローカルメモリバッファ44を構成し、結果、並行処理装置42を処理パイプライン10に変換する(52)。ローカルメモリバッファ44は、並行処理装置42間のデータ移送を可能にするためにハードウェアベースのデータフロー制御メカニズムを含めうる。例えば、ローカルメモリバッファ44は、ハードウェアベースのFIFO、LIFO、またはインデクス付けされたバッファを備えうる。ローカルメモリバッファ44は、並行処理装置42の少なくとも2つの間で直接接続されうる。例えば、3Dグラフィックス処理パイプラインの場合、ローカルメモリバッファ44Aは、頂点シェーダとして動作する並行処理装置42Aと、トライアングルラステライザとして動作する並行処理装置42Bとの間で直接接続され、ポスト頂点シェーダの頂点データ(post-vertex shader vertex data)を保持するように構成されうる。ローカルメモリバッファ44Bは、トライアングルラステライザとして動作する並行処理装置32Bと、フラグメントシェーダとして動作する並行処理装置42Cとの間で直接接続され、プレフラグメントシェーダのピクセルデータを保持するように構成されうる。最後に、ローカルメモリバッファ44Cは、フラグメントシェーダとして動作する並行処理装置42Cと、ピクセルブレンダとして動作する並行処理装置42Dとの間で直接接続され、ポストフラグメントシェーダピクセル値を保持するように構成されうる。
[0066] さらに、制御装置30のバッファマネージャ34は、並行処理装置42のうち前のものからのデータ出力を保持するためにローカルメモリバッファ44の各々に必要とされる幅を決定しうる(54)。バッファマネージャ34は、並行処理装置42の各々からデータ出力のタイプを認識するので、データを保持するためにローカルメモリバッファ44の各々によって必要とされる幅を認識する。バッファマネージャ34は、そのあとで、決定された幅を有するようにローカルメモリバッファ44の各々を構成しうる(56)。ある場合においては、ローカルメモリバッファ44は、ハードウェアベースでありうるが、構成可能な態様のセット(a set of configurable aspects)を含む。例えば、ローカルメモリバッファ44は、深さを幅とトレードすることが構成可能でありうる。
[0067] 例えば、バッファマネージャ34は、頂点シェーダとして動作している並行処理装置42Aがポスト頂点シェーダの頂点データを出力するということを認識し、ポスト頂点シェーダの頂点データを保持するのに必要とされた幅を有するようにローカルメモリバッファ44Aを構成しうる。バッファマネージャ34はまた、トライアングルラステライザとして動作している並行処理装置42Bがプレフラグメントシェーダピクセルデータを出力するということを認識し、プレフラグメントシェーダ画素データを保持するのに必要とされた幅を有するようにローカルメモリバッファ44Bを構成しうる。さらに、バッファマネージャ34は、フラグメントシェーダとして動作している並行処理装置42Cがポストフラグメントシェーダピクセル値を出力するということを認識し、ポストフラグメントシェーダピクセル値を保持するのに必要とされる幅を有するようにローカルメモリバッファ44Cを構成しうる。
[0068] いったん並行処理装置42とローカルメモリバッファ44がGPGPU6内で処理パイプライン10を実装するように構成されると、並行処理装置42は、ローカルメモリバッファ44を介して互いの間でデータを移送しうる(58)。より具体的には、制御装置30は、ローカルメモリバッファ44にデータを送信するように並行処理装置42のうち1以上を構成し、ローカルメモリバッファ44からデータを受信するように並行処理装置44のうち1以上を構成しうる。例えば、制御装置30は、それぞれ、ローカルメモリバッファ44A、44B、および44Cにデータを送信するように並行処理装置42A、42B、および42Cを構成しうる。制御装置30はまた、それぞれ、ローカルメモリバッファ44A、44B、および44Cからデータ受信するように並行処理装置42B、42C、および42Dを構成しうる。
[0069] 図5は、GPGPU6の並行処理装置42とローカルメモリバッファ44とによって実装される処理パイプライン内でデータシーケンスをプリザーブする例示的な動作を図示するフローチャートである。GPGPU6の制御装置30は、並行処理装置42のうち1以上内でデータシーケンスをプリザーブすることによって処理パイプライン内でデータシーケンスをプリザーブしうる。図示される動作は、図3のGPGPU6の並行処理装置42Aを参照して説明される。同様な動作が他の並行処理装置42のうちのいずれについても実行されうる。
[0070] 例として、並行処理装置42およびローカルメモリバッファ44は、3Dグラフィクス処理パイプラインを実装するように構成されうる。その例では、並行処理装置42Aは、頂点シェーダとして動作するように構成され、並行処理装置42Bは、トライアングルラステライザとして動作するように構成され、並行処理装置42Cは、フラグメントシェーダとして動作するように構成され、並行処理装置42Dは、ピクセルブレンダとして動作するように構成されうる。
[0071] 処理パイプライン10のステージ、例えば頂点シェーダとして動作するように構成された並行処理装置42Aは、処理のためにデータセットを受信する(62)。例えば、データ配信装置40は、頂点データのデータセットを並行処理装置42Aに割り当て、並行処理装置42Aは、バス46を介してデバイスメモリ12から割り当てられたデータセットを受信しうる。データセットが並行処理装置42Aに入る時に、制御装置30のシーケンスマネージャ36は、シーケンス決定カウンタ(SDC)を実行する(64)。SDCにしたがって、シーケンスマネージャ36は、ローカルメモリ38内で受信されたデータセットのデータスレッドのシーケンスを記録する(66)。例えば、シーケンスマネージャ36は、データスレッドがデバイスメモリ12から受信される順でデータセットの各データスレッドのインデクスを記録しうる。
[0072] 頂点シェーダとして動作するように構成された並行処理装置42Aは、そのあとで、ポスト頂点シェーダの頂点データを生成するためにデータセットを処理する(68)。上述されているように、並行処理装置42Aは、トライアングルラステライザとして動作するように構成された並行処理装置42Bにデータセットを移送するために、ローカルメモリバッファ44Aにポスト頂点シェーダの頂点データを送信するように構成されうる。データセットが並行処理装置42Aから出る時に、シーケンスマネージャ36は、シーケンスエンフォーシングバリア(SEB)を実行する(70)。SEBにしたがって、シーケンスマネージャ36は、SDCによって記録されるのと同じシーケンスで並行処理装置42Aからデータセットのデータスレッドをリリースする(72)。例えば、シーケンスマネージャ36は、ローカルメモリ38に記録されたデータスレッドインデクスにアクセスし、インデクスが記録された順にしたがって各データスレッドをリリースする。このように、頂点シェーダとして動作するように構成された並行処理装置42Aに複数の頂点が入ったのと同じ順でトライアングルラステライザとして動作するように構成された並行処理装置42Bに複数の頂点が入るであろう。
[0073] 1以上の例では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらのいずれの組み合わせにおいて実装されうる。ソフトウェアで実装される場合には、機能または動作は、非一時的なコンピュータ可読媒体で1以上の命令またはコードとして格納され、ハードウェアベースの処理装置によって実行されうる。コンピュータ可読媒体は、データ記憶媒体のようなタンジブル媒体に対応するコンピュータ可読媒体、または、例えば通信プロトコルにしたがって、1つの場所から別の場所へとコンピュータプログラムの移送を容易にする任意の媒体を含む通信媒体、を含めうる。このように、コンピュータ可読媒体は一般的に、(1)非一時的であるタンジブルコンピュータ可読記憶媒体または(2)信号または搬送波のような通信媒体に対応しうる。データ記憶媒体は、本開示で説明される技法の実装についての命令、コードおよび/またはデータ構造を取り出すために1以上のコンピュータまたは1以上のプロセッサによってアクセスされることができる任意の利用可能な媒体でありうる。コンピュータプログラムプロダクトは、コンピュータ可読媒体を含めうる。
[0074] 例として、また限定されないが、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD−ROMあるいは他の光学ディスクストレージ、磁気ディスクストレージあるいは他の磁気ストレージデバイス、フラッシュメモリ、のようなノントランジトリ媒体、あるいは、命令あるいはデータス構造の形態で所望プログラムコードを格納または搬送するために使用されることができる、また、コンピュータによってアクセスされることができる、任意の他の媒体を備えることができる。また、いずれの接続もコンピュータ可読媒体と適切に名付けられる。例えば、命令がウェブサイト、サーバ、あるいは、同軸ケーブル、光ファイバーケーブル、ツイストペア、デジタル加入者ライン(DSL)、あるいは赤外線、無線、およびマイクロ波のような無線技術を使用している他の遠隔ソース、から送信される場合には、そのときには、同軸ケーブル、光ファイバーケーブル、ツイストペア、DSL、あるいは赤外線、無線、およびマイクロ波のような無線技術は、媒体の定義に含まれる。しかしながら、コンピュータ可読記憶媒体およびデータ記憶媒体は接続、搬送波、信号、または他のトランジエント媒体を含まないが、代わりに、ノントランジエント、タンジブル記憶媒体を対象としているということは理解されるべきである。ここに使用されているように、ディスク(disk)とディスク(disc)は、コンパクトディスク(compact disc)(CD)、レーザーディスク(登録商標)(laser disc)、光学ディスク(optical disc)、デジタル汎用ディスク(digital versatile disc)(DVD)、フロッピー(登録商標)ディスク(disk)およびブルーレイ(登録商標)ディスクを含んでおり、「ディスク(disks)」は、大抵、データを磁気で再生し、「ディスク(discs)」は、レーザーで光学的に再生する。上記のものの組み合わせも、コンピュータ可読媒体の範囲内に含まれるべきである。
[0075] 命令は、1以上のDSP、汎用マイクロプロセッサ、ASIC、FPGA、または他の同等な集積またはディスクリートな論理回路のような1以上のプロセッサによって実行されうる。したがって、ここで使用される用語「プロセッサ」は、前述の構造のうちのいずれかまたはここで説明される技法の実施に適切な任意の他の構造を指す。さらに、いくつかの態様では、ここで説明される機能は、符号化および復号のために構成された専用のハードウェアおよび/またはソフトウェアのモジュール内で提供されうる、または、組み合わせられたコーデックに組み込まれうる。また、本技法は、1つまたは複数の回路または論理構成要素において十分に実装されることができる。
[0076] 本開示の技法は、無線ハンドセット、集積回路(IC)または1セットのIC(例えばチップセット)を含む種々さまざまなデバイスまたは装置で実装されうる。様々なコンポーネント、モジュールまたは装置は、開示された技法を実行するように構成されたデバイスの機能的態様を強調するために本開示で説明されており、異なるハードウェア装置による実現を必ずしも必要としていない。むしろ、上述されているように、様々な装置は、コーデックハードウェア装置で組み合わせられ、または、適切なソフトウェアおよび/またはファームウェアと併せて上述されるような1以上のプロセッサを含むインタオペラティブハードウェア装置の集まりによって与えられうる。
[0077] 様々な例が説明されている。これらおよび他の例は、特許請求の範囲内にある。
以下に本願発明の当初の特許請求の範囲に記載された発明を付記する。
[C1]
汎用グラフィック処理装置(GPGPU)であって、
処理パイプラインのステージとして選択的に動作するように構成された2以上の並行処理装置と、
前記並行処理装置間の移送のためにデータを保持するように構成された1以上のローカルメモリバッファであって、前記バッファの各々が前記並行処理装置のうち少なくとも2つの間で接続される、1以上のローカルメモリバッファと、
を備えるGPGPU。
[C2]
前記1以上のローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち前記少なくとも2つの間で直接接続される、C1に記載のGPGPU。
[C3]
前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、C1に記載のGPGPU。
[C4]
前記1以上のローカルメモリバッファは、ハードウェアベースの先入れ先出しバッファ(FIFO)、後入れ先出しバッファ(LIFOS)またはインデクス付けされたバッファのうちの少なくとも1つを備える、C1に記載のGPGPU。
[C5]
前記1以上のローカルメモリバッファにデータを送信するように前記並行処理装置のうち1以上を構成し、前記1以上のローカルメモリバッファからデータを受信するように前記並行処理装置のうち1以上を構成するように構成された制御装置、
をさらに備えるC1に記載のGPGPU。
[C6]
前記制御ユニットは、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行するように構成される、C5に記載のGPGPU。
[C7]
前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定するように、前記決定された幅を有するように前記ローカルメモリバッファの各々を構成するように、構成された制御装置、
をさらに備えるC1に記載のGPGPU。
[C8]
前記制御装置は、1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定するように構成される、C7に記載のGPGPU。
[C9]
前記ローカルメモリバッファの各々は深さを幅とトレードすることが構成可能である、C7に記載のGPGPU。
[C10]
前記処理パイプライン内でデータシーケンスをプリザーブする制御装置、をさらに備えるC1に記載のGPGPU。
[C11]
前記制御装置は、
前記データセットのデータスレッドのシーケンスを記録するために前記並行処理装置のうちの少なくとも1つにデータセットが入るときにシーケンス決定カウンタを実行するように、
前記シーケンス決定カウンタによって記録されるのと同じシーケンスで前記並行処理装置から前記データセットの前記データスレッドをリリースするために前記並行処理装置のうちの前記少なくとも1つから前記データセットが出るときにシーケンスエンフォーシングバリアを実行するように、
構成される、C10に記載のGPGPU。
[C12]
前記並行処理装置のうちの1つは、前記処理パイプラインの第1ステージとして動作し、デバイスメモリからオリジナルデータセットを取り出すように構成される、C1に記載のGPGPU。
[C13]
前記並行処理装置のうちの1つは、前記処理パイプラインの最終ステージとして動作し、デバイスメモリにパイプライン処理されたデータセットを格納するように構成される、C1に記載のGPGPU。
[C14]
前記並行処理装置のうちの少なくとも1つは、前記処理パイプラインの中間ステージとして動作し、前記ローカルメモリバッファのうち一方を介して前記処理パイプラインにおいて前記並行処理装置のうちの前のものからデータセットを受信し、前記ローカルメモリバッファのうち他方を介して前記処理パイプラインにおいて前記並行処理装置のうち後続のものに前記データセットを送信するように構成される、C1に記載のGPGPU。
[C15]
前記並行処理装置のうちの前記少なくとも1つは、前記データセットを処理するために、デバイスメモリから補助データを取り出すように構成される、C14に記載のGPGPU。
[C16]
汎用グラフィック処理装置(GPGPU)によってデータを処理する方法であって、前記方法は、
処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成することと;
前記並行処理装置間の移送のためのデータを保持するように1以上のローカルメモリバッファを構成することと、なお、前記バッファの各々は、前記並行処理装置のうち少なくとも2つの間で接続される;
を備える、方法。
[C17]
前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち前記少なくとも2つの間で直接接続される、C16に記載の方法。
[C18]
前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、C16に記載の方法。
[C19]
前記1以上のローカルメモリバッファは、ハードウェアベースの先入れ先出しバッファ(FIFO)、後入れ先出しバッファ(LIFOS)またはインデクス付けされたバッファのうちの少なくとも1つを備える、C16に記載の方法。
[C20]
前記1以上のローカルメモリバッファにデータを送信するように前記並行処理装置の1以上を構成することと、
前記1以上のローカルメモリバッファからデータを受信するように前記並行処理装置の1以上を構成することと、
をさらに備えるC16に記載の方法。
[C21]
前記1以上の並行処理装置を構成することは、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行することを備える、C20に記載の方法。
[C22]
前記1以上のローカルメモリバッファを構成することは、
前記前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定することと、
前記決定された幅を有するように前記ローカルメモリバッファの各々を構成することと、
を備える、C16に記載の方法。
[C23]
前記1以上のローカルメモリバッファを構成することは、1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定することを備える、C22に記載の方法。
[C24]
前記ローカルメモリバッファの各々は深さを幅とトレードすることが構成可能である、C22に記載の方法。
[C25]
前記処理パイプライン内でデータシーケンスをプリザーブすること、
をさらに備えるC16に記載の方法。
[C26]
前記データシーケンスをプリザーブすることは、
前記データセットのデータスレッドのシーケンスを記録するために前記並行処理装置のうちの少なくとも1つにデータセットが入るときにシーケンス決定カウンタを実行することと、
前記シーケンス決定カウンタによって記録されるのと同じシーケンスで前記並行処理装置から前記データセットの前記データスレッドをリリースするために前記並行処理装置のうちの前記少なくとも1つから前記データセットが出るときにシーケンスエンフォーシングバリアを実行することと、
をさらに備える、C25に記載の方法。
[C27]
前記2以上の並行処理装置を構成することは、前記並行処理装置のうちの1つを、前記処理パイプラインの第1ステージとして動作し、デバイスメモリからオリジナルデータセットを取り出すように構成することを備える、C16に記載の方法。
[C28]
前記2以上の並行処理装置を構成することは、前記並行処理装置のうちの1つを、前記処理パイプラインの最終ステージとして動作し、デバイスメモリにパイプライン処理されたデータセットを格納するように構成することを備える、C16に記載の方法。
[C29]
前記2以上の並行処理装置を構成することは、前記並行処理装置のうちの少なくとも1つを、前記処理パイプラインの中間ステージとして動作し、前記ローカルメモリバッファのうち一方を介して前記処理パイプラインにおいて前記並行処理装置のうちの前のものからデータセットを受信し、前記ローカルメモリバッファのうち他方を介して前記処理パイプラインにおいて前記並行処理装置のうち後続のものに前記データセットを送信するように構成することを備える、C16に記載の方法。
[C30]
前記並行処理装置のうちの少なくとも1つを構成することは、前記データセットを処理するために、デバイスメモリから補助データを取り出すように前記並行処理装置のうちの前記少なくとも1つを構成することを備える、C29に記載の方法。
[C31]
汎用グラフィック処理装置(GPGPU)であって、
処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成するための手段と;
前記並行処理装置間の移送のためのデータを保持するように1以上のローカルメモリバッファを構成するための手段と、なお、前記バッファの各々は、前記並行処理装置のうち少なくとも2つの間で接続される;
を備えるGPGPU。
[C32]
前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち前記少なくとも2つの間で直接接続される、C31に記載のGPGPU。
[C33]
前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、C31に記載のGPGPU。
[C34]
前記1以上のローカルメモリバッファにデータを送信するように前記並行処理装置の1以上を構成するための手段と、
前記1以上のローカルメモリバッファからデータを受信するように前記並行処理装置の1以上を構成するための手段と、
をさらに備えるC31に記載のGPGPU。
[C35]
前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行するための手段、をさらに備えるC34に記載のGPGPU。
[C36]
前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定するための手段と、
前記決定された幅を有するように前記ローカルメモリバッファの各々を構成するための手段と、
をさらに備えるC31に記載のGPGPU。
[C37]
1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定すること、をさらに備えるC36に記載のGPGPU。
[C38]
前記ローカルメモリバッファの各々は深さを幅とトレードすることが構成可能である、C36に記載のGPGPU。
[C39]
前記処理パイプライン内でデータシーケンスをプリザーブするための手段、をさらに備えるC31に記載のGPGPU。
[C40]
前記データセットのデータスレッドのシーケンスを記録するために前記並行処理装置のうちの少なくとも1つにデータセットが入るときにシーケンス決定カウンタを実行するための手段と、
前記シーケンス決定カウンタによって記録されるのと同じシーケンスで前記並行処理装置から前記データセットの前記データスレッドをリリースするために前記並行処理装置のうちの前記少なくとも1つから前記データセットが出るときにシーケンスエンフォーシングバリアを実行するための手段と、
をさらに備えるC39に記載のGPGPU。
[C41]
汎用グラフィクス処理装置(GPGPU)によってデータを処理するための命令を備えるコンピュータ可読媒体であって、実行時に、プログラム可能なプロセッサに、
処理パイプラインのステージとして選択的に動作するように2以上の並行処理装置を構成させる;
前記並行処理装置間の移送のためにデータを保持するように1以上のローカルメモリバッファを構成させる、なお、前記バッファの各々は、前記並行処理装置のうち少なくとも2つの間で接続される;
コンピュータ可読媒体。
[C42]
前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち前記少なくとも2つの間で直接接続される、C41に記載のコンピュータ可読媒体。
[C43]
前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、C41に記載のコンピュータ可読媒体。
[C44]
前記プログラム可能なプロセッサに、
前記1以上のローカルメモリバッファにデータを送信するように前記並行処理装置の1以上を構成させる命令と、
前記1以上のローカルメモリバッファからデータを受信するように前記並行処理装置の1以上を構成させる命令と、
をさらに備えるC41に記載のコンピュータ可読媒体。
[C45]
前記プログラム可能なプロセッサに、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行させる命令、をさらに備えるC44に記載のコンピュータ可読媒体。
[C46]
前記プログラム可能なプロセッサに、
前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定させる命令と、
前記決定された幅を有するように前記ローカルメモリバッファの各々を構成させる命令と、
をさらに備えるC41に記載のコンピュータ可読媒体。
[C47]
前記プログラム可能なプロセッサに、1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定させる命令、をさらに備えるC46に記載のコンピュータ可読媒体。
[C48]
前記ローカルメモリバッファの各々は深さを幅とトレードすることが構成可能である、C46に記載のコンピュータ可読媒体。
[C49]
前記プログラム可能なプロセッサに前記処理パイプライン内でデータシーケンスをプリザーブさせる命令、をさらに備えるC41に記載のコンピュータ可読媒体。
[C50]
前記プログラム可能なプロセッサに、
前記データセットのデータスレッドのシーケンスを記録するために前記並行処理装置のうちの少なくとも1つにデータセットが入るときにシーケンス決定カウンタを実行させる命令と、
前記シーケンス決定カウンタによって記録されるのと同じシーケンスで前記並行処理装置から前記データセットの前記データスレッドをリリースするために前記並行処理装置のうちの前記少なくとも1つから前記データセットが出るときにシーケンスエンフォーシングバリアを実行させる命令と、
をさらに備えるC49に記載のコンピュータ可読媒体。

Claims (26)

  1. 汎用グラフィック処理装置(GPGPU)であって、
    処理パイプラインのステージとして選択的に動作するように構成された前記GPGPUの2以上のプログラム可能な並行処理装置と、
    前記パイプライン内に含まれ、前記並行処理装置間の移送のためにデータを保持するように構成された前記GPGPUの1以上のローカルメモリバッファであって、前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち少なくとも2つの間で直接接続され、前記データは、前記ローカルメモリバッファを介して前記並列処理装置のうちの一方から前記並列処理装置のうちの他方に直接受け渡される、1以上のローカルメモリバッファと、
    前記並列処理装置のうちの前記一方が直接接属される前記ローカルメモリバッファのうちのそれぞれにデータを送信するように前記並列処理装置のうちの前記一方を構成することと、前記並列処理装置のうちの前記他方が直接接続される前記ローカルメモリバッファのうちの前記それぞれからデータを受信するように前記並列処理装置のうちの前記他方を構成することとを行うように構成された制御装置と
    を備えるGPGPU。
  2. 前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、請求項1に記載のGPGPU。
  3. 前記1以上のローカルメモリバッファは、ハードウェアベースの先入れ先出しバッファ(FIFO)、後入れ先出しバッファ(LIFO)またはインデクス付けされたバッファのうちの少なくとも1つを備える、請求項1に記載のGPGPU。
  4. 前記制御装置は、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行するように構成される、請求項1に記載のGPGPU。
  5. 前記制御装置は、前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定するように、前記決定された幅を有するように前記ローカルメモリバッファの各々を構成するようにさらに構成された請求項1に記載のGPGPU。
  6. 前記制御装置は、1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定するように構成される、請求項5に記載のGPGPU。
  7. 前記制御装置は、前記ローカルメモリバッファの各々の深さを決定するようにさらに構成され、前記ローカルメモリバッファの各々は前記深さを前記幅とトレードすることが構成可能である、請求項5に記載のGPGPU。
  8. 汎用グラフィック処理装置(GPGPU)によってデータを処理する方法であって、前記方法は、
    処理パイプラインのステージとして選択的に動作するように前記GPGPUの2以上のプログラム可能な並行処理装置を構成することと、
    前記パイプライン内に含まれ、前記並行処理装置間の移送のためのデータを保持するように前記GPGPUの1以上のローカルメモリバッファを構成することであって、前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち少なくとも2つの間で直接接続され、前記データは、前記ローカルメモリバッファを介して前記並列処理装置のうちの一方から前記並列処理装置のうちの他方に直接受け渡される、構成することと、
    前記並列処理装置のうちの前記一方が直接接属される前記ローカルメモリバッファのうちのそれぞれにデータを送信するように前記並列処理装置のうちの前記一方を構成することと、
    前記並列処理装置のうちの前記他方が直接接続される前記ローカルメモリバッファのうちの前記それぞれからデータを受信するように前記並列処理装置のうちの前記他方を構成することと
    を備える、方法。
  9. 前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、請求項8に記載の方法。
  10. 前記1以上のローカルメモリバッファは、ハードウェアベースの先入れ先出しバッファ(FIFO)、後入れ先出しバッファ(LIFO)またはインデクス付けされたバッファのうちの少なくとも1つを備える、請求項8に記載の方法。
  11. 前記1以上の並行処理装置を構成することは、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行することを備える、請求項8に記載の方法。
  12. 前記1以上のローカルメモリバッファを構成することは、
    記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定することと、
    前記決定された幅を有するように前記ローカルメモリバッファの各々を構成することと、
    を備える、請求項8に記載の方法。
  13. 前記1以上のローカルメモリバッファを構成することは、1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定することを備える、請求項12に記載の方法。
  14. 前記1以上のローカルメモリバッファを構成することは、前記ローカルメモリバッファの各々の深さを決定するようにさらに構成され、前記ローカルメモリバッファの各々は前記深さを前記幅とトレードすることが構成可能である、請求項12に記載の方法。
  15. 汎用グラフィック処理装置(GPGPU)であって、
    処理パイプラインのステージとして選択的に動作するように前記GPGPUの2以上のプログラム可能な並行処理装置を構成するための手段と、
    前記パイプライン内に含まれ、前記並行処理装置間の移送のためのデータを保持するように前記GPGPUの1以上のローカルメモリバッファを構成するための手段であって、前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち少なくとも2つの間で直接接続され、前記データは、前記ローカルメモリバッファを介して前記並列処理装置のうちの一方から前記並列処理装置のうちの他方に直接受け渡される、構成するための手段と、
    前記並列処理装置のうちの前記一方が直接接属される前記ローカルメモリバッファのうちのそれぞれにデータを送信するように前記並列処理装置のうちの前記一方を構成するための手段と、
    前記並列処理装置のうちの前記他方が直接接続される前記ローカルメモリバッファのうちの前記それぞれからデータを受信するように前記並列処理装置のうちの前記他方を構成するための手段と、
    を備えるGPGPU。
  16. 前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、請求項15に記載のGPGPU。
  17. 前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行するための手段、をさらに備える請求項15に記載のGPGPU。
  18. 前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定するための手段と、
    前記決定された幅を有するように前記ローカルメモリバッファの各々を構成するための手段と、
    をさらに備える請求項15に記載のGPGPU。
  19. 1以上のアプリケーションプログラミングインタフェース(API)を実行して、前記ローカルメモリバッファの各々についての前記幅を決定し、前記決定された幅によって前記ローカルメモリバッファの各々を構成し、前記ローカルメモリバッファの各々の深さを決定するための手段、をさらに備える請求項18に記載のGPGPU。
  20. 前記ローカルメモリバッファの各々の深さを決定するための手段をさらに備え、前記ローカルメモリバッファの各々は前記深さを前記幅とトレードすることが構成可能である、請求項18に記載のGPGPU。
  21. 汎用グラフィクス処理装置(GPGPU)によってデータを処理するための命令を備えるコンピュータ可読媒体であって、実行時に、プログラム可能なプロセッサに、
    処理パイプラインのステージとして選択的に動作するように前記GPGPUの2以上のプログラム可能な並行処理装置を構成させ、
    前記パイプライン内に含まれ、前記並行処理装置間の移送のためにデータを保持するように前記GPGPUの1以上のローカルメモリバッファを構成させることであって、前記ローカルメモリバッファの各々は、前記処理パイプラインにおいて前記並行処理装置のうち少なくとも2つの間で直接接続され、前記データは、前記ローカルメモリバッファを介して前記並列処理装置のうちの一方から前記並列処理装置のうちの他方に直接受け渡される、構成させ、
    前記並列処理装置のうちの前記一方が直接接属される前記ローカルメモリバッファのうちのそれぞれにデータを送信するように前記並列処理装置のうちの前記一方を構成させ、
    前記並列処理装置のうちの前記他方が直接接続される前記ローカルメモリバッファのうちの前記それぞれからデータを受信するように前記並列処理装置のうちの前記他方を構成させる、
    コンピュータ可読媒体。
  22. 前記1以上のローカルメモリバッファは、前記並行処理装置間の前記データの移送を可能にするハードウェアベースのデータフロー制御メカニズムを含む、請求項21に記載のコンピュータ可読媒体。
  23. 前記プログラム可能なプロセッサに、前記ローカルメモリバッファにデータを送信し前記ローカルメモリバッファからデータを受信するように前記並行処理装置を構成するために1以上のアプリケーションプログラミングインタフェース(API)を実行させる命令、をさらに備える請求項21に記載のコンピュータ可読媒体。
  24. 前記プログラム可能なプロセッサに、
    前記処理パイプラインにおいて前の処理装置からのデータ出力を保持するために前記ローカルメモリバッファの各々についての必要な幅を決定させる命令と、
    前記決定された幅を有するように前記ローカルメモリバッファの各々を構成させる命令と、
    をさらに備える請求項21に記載のコンピュータ可読媒体。
  25. 前記プログラム可能なプロセッサに、1以上のアプリケーションプログラミングインタフェース(API)を実行させ、前記ローカルメモリバッファの各々についての前記幅を決定させ、前記決定された幅によって前記ローカルメモリバッファの各々を構成させ、前記ローカルメモリバッファの各々の深さを決定させる命令、をさらに備える請求項24に記載のコンピュータ可読媒体。
  26. 前記プログラム可能なプロセッサに、前記ローカルメモリバッファの各々の深さを決定させる命令をさらに備え、前記ローカルメモリバッファの各々は前記深さを前記幅とトレードすることが構成可能である、請求項24に記載のコンピュータ可読媒体。
JP2015145991A 2011-01-14 2015-07-23 汎用グラフィクス処理装置における計算リソースパイプライン化 Active JP6062506B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/007,333 US9804995B2 (en) 2011-01-14 2011-01-14 Computational resource pipelining in general purpose graphics processing unit
US13/007,333 2011-01-14

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2013549593A Division JP5996554B2 (ja) 2011-01-14 2012-01-13 汎用グラフィクス処理装置における計算リソースパイプライン化

Publications (2)

Publication Number Publication Date
JP2016006657A JP2016006657A (ja) 2016-01-14
JP6062506B2 true JP6062506B2 (ja) 2017-01-18

Family

ID=45615047

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2013549593A Active JP5996554B2 (ja) 2011-01-14 2012-01-13 汎用グラフィクス処理装置における計算リソースパイプライン化
JP2015145991A Active JP6062506B2 (ja) 2011-01-14 2015-07-23 汎用グラフィクス処理装置における計算リソースパイプライン化

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2013549593A Active JP5996554B2 (ja) 2011-01-14 2012-01-13 汎用グラフィクス処理装置における計算リソースパイプライン化

Country Status (8)

Country Link
US (1) US9804995B2 (ja)
EP (2) EP3557434B1 (ja)
JP (2) JP5996554B2 (ja)
KR (1) KR101558069B1 (ja)
CN (1) CN103348320B (ja)
ES (2) ES2873896T3 (ja)
HU (1) HUE045952T2 (ja)
WO (1) WO2012097316A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9336557B2 (en) * 2012-05-02 2016-05-10 Apple Inc. Apparatus and methods for processing of media signals
CN103064657B (zh) * 2012-12-26 2016-09-28 深圳中微电科技有限公司 单个处理器上实现多应用并行处理的方法及装置
US20140232733A1 (en) * 2013-02-19 2014-08-21 Jason Caulkins Graphics Processing Unit Pre-Caching
DE102013224702A1 (de) * 2013-12-03 2015-06-03 Robert Bosch Gmbh Steuergerät für ein Kraftfahrzeug
CN103888771A (zh) * 2013-12-30 2014-06-25 中山大学深圳研究院 基于gpgpu技术的并行视频图像处理方法
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
KR102222752B1 (ko) 2014-08-01 2021-03-04 삼성전자주식회사 프로세서의 동적 전압 주파수 스케일링 방법
US9697580B2 (en) * 2014-11-10 2017-07-04 Qualcomm Incorporated Dynamic pipeline for graphics processing
EP3065051A1 (en) 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
CN105653243B (zh) * 2015-12-23 2018-03-30 北京大学 一种通用图形处理器多任务并发执行的任务派发方法
CN108563519B (zh) * 2018-04-17 2023-06-09 长沙景美集成电路设计有限公司 基于gpgpu中的2d桌面块拷贝填充操作的实现
CN111881078B (zh) * 2020-07-17 2022-04-19 上海芷锐电子科技有限公司 基于gpgpu芯片的多用户通用计算处理方法和系统
US20220334899A1 (en) * 2021-04-14 2022-10-20 Nvidia Corporation Application programming interface to monitor resource usage

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4751671A (en) * 1983-02-14 1988-06-14 Prime Computer, Inc. Size configurable data storage system
US4807183A (en) * 1985-09-27 1989-02-21 Carnegie-Mellon University Programmable interconnection chip for computer system functional modules
WO1991017507A1 (en) * 1990-05-07 1991-11-14 Mitsubishi Denki Kabushiki Kaisha Parallel data processing system
JPH0683578A (ja) 1992-03-13 1994-03-25 Internatl Business Mach Corp <Ibm> 処理システム、及びデータスループット制御方法
JPH06282447A (ja) 1993-03-29 1994-10-07 Mitsubishi Electric Corp 待ち行列管理方式
JPH11328100A (ja) 1998-05-13 1999-11-30 Sony Corp ディジタル信号処理装置
WO2002046917A1 (en) 2000-12-07 2002-06-13 Koninklijke Philips Electronics N.V. Digital signal processing apparatus
EP1271782B1 (en) * 2001-06-29 2005-05-18 STMicroelectronics Pvt. Ltd FPGA with at least two different and independently configurable memory structures
US6919736B1 (en) * 2002-07-12 2005-07-19 Lattice Semiconductor Corporation Field programmable gate array having embedded memory with configurable depth and width
US7389006B2 (en) 2004-05-14 2008-06-17 Nvidia Corporation Auto software configurable register address space for low power programmable processor
US7369078B2 (en) * 2004-08-16 2008-05-06 National Instruments Corporation Flexible converter interface for use in analog-to-digital and digital-to-analog systems
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
JP4795138B2 (ja) 2006-06-29 2011-10-19 富士ゼロックス株式会社 画像処理装置及びプログラム
US7725688B1 (en) 2006-09-05 2010-05-25 Nvidia Corporation System and method for storing states used to configure a processing pipeline in a graphics processing unit
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US20100079454A1 (en) 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
JP2010244096A (ja) 2009-04-01 2010-10-28 Seiko Epson Corp データ処理装置、印刷システムおよびプログラム
JP2010287110A (ja) 2009-06-12 2010-12-24 Nec Personal Products Co Ltd 情報処理装置、情報処理方法、プログラム及び記録媒体
US8817031B2 (en) * 2009-10-02 2014-08-26 Nvidia Corporation Distributed stream output in a parallel processing unit

Also Published As

Publication number Publication date
KR20130122657A (ko) 2013-11-07
CN103348320B (zh) 2017-06-23
JP2014505946A (ja) 2014-03-06
ES2873896T3 (es) 2021-11-04
US20120185671A1 (en) 2012-07-19
KR101558069B1 (ko) 2015-10-06
CN103348320A (zh) 2013-10-09
EP3557434A1 (en) 2019-10-23
HUE045952T2 (hu) 2020-02-28
JP2016006657A (ja) 2016-01-14
US9804995B2 (en) 2017-10-31
EP2663921A1 (en) 2013-11-20
EP2663921B1 (en) 2019-07-24
WO2012097316A1 (en) 2012-07-19
ES2749883T3 (es) 2020-03-24
EP3557434B1 (en) 2021-02-17
JP5996554B2 (ja) 2016-09-21

Similar Documents

Publication Publication Date Title
JP6062506B2 (ja) 汎用グラフィクス処理装置における計算リソースパイプライン化
KR101707289B1 (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
US9430807B2 (en) Execution model for heterogeneous computing
US9442780B2 (en) Synchronization of shader operation
KR101666416B1 (ko) 우선순위 기반의 컨텍스트 선점
JP6374038B2 (ja) ドローコールにわたる共有リソースデータコヒーレンシを確実にするための効率的なハードウェアメカニズム
KR102006584B1 (ko) 레이트 심도 테스팅과 컨서버티브 심도 테스팅 간의 동적 스위칭
JP2017509092A (ja) 共有されるデータチャネルを用いるシェーダパイプライン
WO2022089592A1 (zh) 一种图形渲染方法及其相关设备
JP5908957B2 (ja) ショートループアトミックアクセス
JP2018503919A (ja) ベイヤーマッピングを備えたグラフィックス処理ユニット
US9881352B2 (en) Facilitating efficient graphics commands processing for bundled states at computing devices
TWI507978B (zh) 圖形管線之外部驗證技術
KR101863483B1 (ko) 중간 스토리지로서 파이프라인 레지스터들의 활용

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160620

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160628

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160927

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20161214

R150 Certificate of patent or registration of utility model

Ref document number: 6062506

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