JP2013541748A - 多重処理ユニット内のオンチップメモリを用いるデータ処理 - Google Patents

多重処理ユニット内のオンチップメモリを用いるデータ処理 Download PDF

Info

Publication number
JP2013541748A
JP2013541748A JP2013520813A JP2013520813A JP2013541748A JP 2013541748 A JP2013541748 A JP 2013541748A JP 2013520813 A JP2013520813 A JP 2013520813A JP 2013520813 A JP2013520813 A JP 2013520813A JP 2013541748 A JP2013541748 A JP 2013541748A
Authority
JP
Japan
Prior art keywords
wavefront
output
thread
memory
local memory
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.)
Withdrawn
Application number
JP2013520813A
Other languages
English (en)
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 JP2013541748A publication Critical patent/JP2013541748A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • 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
    • 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/167Interprocessor communication using a common memory, e.g. mailbox
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Image Processing (AREA)
  • Image Input (AREA)

Abstract

【解決手段】
多重処理ユニット内のオンチップローカルメモリを用いるプロセッサにおけるデータ処理性能を改善するための方法が開示される。ある実施形態に従うと、複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法は、第2の種類のスレッドを有する第2のウエーブフロントが続く第1の種類のスレッドを有する第1のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを処理ユニットの各々においてローンチすることと、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、を含み、ここで第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を備える。対応するシステム及びコンピュータプログラム製品の実施形態も開示される。
【選択図】図2

Description

本発明はプロセッサのデータ処理性能を改善することに関する。
多重処理ユニットを有するプロセッサは、多数のデータ要素を並列処理する際にしばしば採用される。例えば、多重の単一命令多重データ(single instruction multiple data)(SIMD)処理ユニットを含むグラフィクスプロセッサ(GPU)は、多数のグラフィクスデータ要素を並列に処理することが可能である。多くの場合、データ要素は、別々のスレッドのシーケンスによって、最終的な出力が得られるまで処理される。例えばGPUにおいては、頂点シェーダ、幾何シェーダ及び画素シェーダを備える異なる種類のスレッドのシーケンスが、最終的な出力がディスプレイへのレンダリング(rendering)のために準備されるまで、データ項目のセットに対して順次動作することができる。
種々の段階でデータ要素を処理するために多重の別々の種類のスレッドを有することは、パイプライン化(pipelining)を可能にし、従ってスループットの増大を容易にする。データ要素のセットを処理するシーケンスの各別個のスレッドは、その入力を共有メモリから取得すると共にその出力を共有メモリへとライトし(write)、後続のスレッドは共有メモリから当該データをリードする(read)ことができる。共有メモリにおけるメモリアクセスは、一般に多数のクロックサイクルを消費する。同時スレッドの数が増えるのに従って、メモリアクセスに起因する遅延もまた増大し得る。多数のスレッドを並列に実行する多重の別々の処理ユニットを有する従来のプロセッサにおいては、メモリアクセス遅延は、全体的な処理速度の相当な減速の原因になり得る。
そこで、データ項目のセットを処理するプログラムのシーケンスによりメモリアクセスのために浪費される時間を低減することによって、多重処理ユニットを有するプロセッサのデータ処理性能を改善するための方法及びシステムが必要とされる。
多重処理ユニット内のオンチップローカルメモリを用いるプロセッサにおけるデータ処理性能を改善するための方法及び装置が開示される。ある実施形態に従うと、複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法は、第2の種類のスレッドを有する第2のウエーブフロントが続く第1の種類のスレッドを有する第1のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを処理ユニットの各々においてローンチすることと、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、を含み、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を備える。
別の実施形態は、各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、ウエーブフロント発送モジュールと、ウエーブフロント実行モジュールと、を含むシステムである。ウエーブフロント発送モジュールは、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントを複数の処理ユニットの各々においてローンチするように構成され、第1のウエーブフロントは、オフチップ共有メモリからデータ要素の一部をリードするように構成される。ウエーブフロント実行モジュールは、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、のために構成され、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を含む。
更に別の実施形態は、複数の処理ユニットを備えるプロセッサに、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリからデータ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを処理ユニットの各々においてローンチすることと、第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、第2のウエーブフロントによって生成された第2の出力をオンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であり、第2のウエーブフロントへの入力は第1の出力からの第1の複数のデータ要素を備える。
本発明の更なる実施形態、特徴及び利点並びに本発明の種々の実施形態の構成及び動作は、添付図面を参照して以下に詳細に説明される。
ここに組み込まれ且つ出願書類の一部を構成する添付の図面は、本発明の実施形態を示し、そして上述の一般的な説明及び下記の実施形態の詳細な説明と共に、本発明の原理を説明することに役立つ。
図1は本発明の実施形態に従うデータ処理デバイスを示す図である。
図2は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上でデータを処理する例示的な方法を示す図である。
図3は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上で第1のウエーブフロントを実行する例示的な方法を示す図である。
図4は本発明の実施形態に従い多重処理ユニットを有するプロセッサ上で第2のウエーブフロントを実行する例示的な方法を示す図である。
図5は本発明の実施形態に従いスレッドウエーブフロントの割り当てを決定するための方法を示す図である。
本発明はここでは特定の応用のための例示的な実施形態と共に説明されるが、本発明はそれらに限定されないことが理解されるべきである。ここに提供される教示を利用可能な当業者であれば、その範囲内及び本発明が有意に有用であろう追加的な分野における追加的な修正、応用及び実施形態を認識するであろう。
本発明の実施形態は、多重処理ユニットが同時に共有メモリにアクセスする任意のコンピュータシステム又はコンピューティングデバイスにおいて用いられてよい。何ら限定されないが、例えば、本発明の実施形態は、コンピュータ、ゲームプラットフォーム、エンタテーメントプラットフォーム、パーソナルデジタルアシスタント、モバイルコンピューティングデバイス、テレビジョン及びビデオプラットフォームを含んでいてよい。
最新のコンピュータシステムは、限定はされないが、例えば、多重の中央処理ユニット(CPU)及びグラフィクスプロセッサユニット(GPU)等の多重プロセッサ並びに何らかの処理をプロセッサから軽減するメモリ制御器及び/又は直接メモリアクセス(DMA)制御器等の他の制御器を有して、多重処理が可能である。また、多くのグラフィクス処理デバイスにおいては、例えば、同時に処理される多重データストリームを有することにより、相当量の並列処理が可能になる。
そのような多重処理及び並列処理は、システムの効率及び速度を大幅に増大させる一方で、競合(contention)、即ち多重のデバイス及び/又はプロセスが同じシステム資源に同時にアクセスし又はそれを用いようとすること、に起因する問題を含む多くの問題を生じさせる。例えば、多くのデバイス及び/又はプロセスは、それらの処理を実行するために共有メモリにアクセスする必要がある。しかし、共有メモリへのインタフェースの数は、アクセスに対する全ての同時要求をサポートするのに十分ではないであろうから、競合が生じ、処理を継続するために共有メモリにアクセスする必要のある1つ以上のシステムデバイス及び/又はプロセスが遅延することがある。
グラフィクス処理デバイスにおいては、頂点シェーダ、幾何シェーダ及び画素シェーダ等の種々のプロセッサが、メモリに記憶されているグラフィクスオブジェクト(即ち頂点データ、画素データ)をリードし、ライトし、操作し且つ/又は処理するために、メモリにアクセスする必要がある。例えば各シェーダは、その処理サイクルの入力リード段階及び出力ライト段階において共有メモリにアクセスすることがある。頂点シェーダ、幾何シェーダ及び画素シェーダを備えるグラフィクスパイプラインは、任意の所与の時刻での処理の異なる段階において各種類のシェーダにデータ要素のセットを同時に処理させることによって、何らかのメモリアクセス遅延からシステムを保護することを支援する。グラフィクスパイプラインの一部が、メモリ内のデータにアクセスする際に遅延の増大に直面すると、システム動作における全体的な減速、及び/又はメモリアクセス遅延を隠すのに十分な処理の同時性が生じるようにパイプラインを制御するための追加的な複雑性を招く可能性がある。
多重処理ユニット、例えば各ユニットが幾つかのスレッドを同時に実行可能な多重の単一命令多重データ(SIMD)処理ユニット又は多重の他の算術及び論理ユニット(ALU)を有するデバイスにおいては、多重処理デバイス及び各処理デバイス内の多重スレッドが共有メモリに実質的に同時にアクセスすることに起因して、競合遅延は更に悪化する可能性がある。例えば多重SIMD処理ユニットを有するグラフィクス処理デバイスにおいては、画素データのセットは「スレッド群(thread groups)」のシーケンスによって処理される。各処理ユニットにはスレッドのウエーブフロント(wavefront of threads)が割り当てられる。スレッドの「ウエーブフロント」は、スレッド群からの1つ以上のスレッドである。ウエーブフロント内の複数のスレッドによる同時アクセス要求に起因して及び他の処理ユニット内で実行中の他のウエーブフロントに起因して、メモリアクセスに対する競合が増大し得る。
本発明の実施形態は、それぞれの処理ユニットにとってローカルなオンチップメモリ(on-chip memory)を利用して、後続のスレッドによる入力として用いられることになる種々のスレッドの出力を記憶して、それによりオフチップメモリ(off-chip memory)に対する往復トラフィック(to/from traffic)を低減する。オンチップローカルメモリは、コスト及びチップレイアウトを含む理由により、オフチップ共有メモリよりもサイズが小さい。従って、オンチップローカルメモリの効率的な使用が必要とされる。本発明の実施形態は、それぞれの処理ユニットで処理中のデータ要素及び各処理ユニット内のオンチップローカルメモリの利用可能性等の種々の要因に基いてそれぞれのスレッドウエーブを複数の処理ユニットの間で分散させるように、プロセッサを構成する(configure)。本発明の実施形態は、処理ユニット上で実行中の連続的なスレッドが、それらの入力及び出力をそれぞれオフチップメモリよりはむしろオンチップメモリからリードし及びオンチップメモリへとライトすることを可能にする。オフチップメモリに対する処理ユニットのトラフィック往復を低減することによって、本発明の実施形態は、システムの速度及び効率を改善し、またより短いパイプラインを容易にすることによってシステムの複雑性を低減することができる。
図1は本発明の実施形態に従うコンピュータシステム100を示している。コンピュータシステム100は、制御プロセッサ101、グラフィクス処理デバイス102、共有メモリ103及び通信基盤104を含む。例えばディスプレイ、メモリ制御器、デバイス制御器等の種々の他のコンポーネントがコンピュータシステム100内に含まれていてもよい。制御プロセッサ101は、中央処理ユニット(CPU)、フィールドプログラム可能ゲートアレイ(FPGA)、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)等の1つ以上のプロセッサを含み得る。制御プロセッサ101は、コンピュータシステム100の全体動作を制御する。
共有メモリ103は、ランダムアクセスメモリ(RAM)又はダイナミックランダムアクセスメモリ(DRAM)等の1つ以上のメモリユニットを含み得る。ディスプレイデータ、特に画素データであるが制御データを含むこともある、は共有メモリ103内に記憶される。共有メモリ103は、ここにおけるようなグラフィクス処理デバイスの関連では、フレームに関係するデータが維持されるフレームバッファ区域を含んでいてよい。共有メモリ103へのアクセスは、1つ以上のメモリ制御器(図示せず)により連携させられ得る。コンピュータシステム100内で生成されたディスプレイデータ又はビデオ再生デバイス等の外部デバイスを用いてコンピュータシステム100に入力されたディスプレイデータのいずれかが、共有メモリ103内に記憶され得る。共有メモリ103内に記憶されたディスプレイデータは、当該データを操作及び/又は処理するグラフィクス処理デバイス102のコンポーネントによってアクセスされ、その後に、当該操作及び/又は処理されたディスプレイデータが例えばディスプレイ(図示せず)等の別のデバイスへと送信される。ディスプレイは、液晶ディスプレイ(LCD)、陰極線管(CRT)ディスプレイ又は任意の他の種類のディスプレイデバイスを含み得る。本発明の幾つかの実施形態においては、ディスプレイ、及び例えばディスプレイ制御器等のディスプレイに必要なコンポーネントの幾つかは、コンピュータシステム100の外部にあってよい。通信基盤104は、周辺コンポーネント相互接続拡張(Peripheral Component Interconnect Extended)(PCI−E)、イーサネット(登録商標)(Ethernet(登録商標))、ファイヤワイヤ(Firewire)、ユニバーサルシリアルバス(Universal Serial Bus)(USB)等の1つ以上のデバイス相互接続を含む。通信基盤104はまた、グラフィクス処理デバイス102をディスプレイに接続するために、限定はされないが、組み込み型ディスプレイポート(embedded DisplayPort)(eDP)、低電圧ディスプレイ規格(low voltage display standard)(LVDS)、デジタルビデオインタフェース(Digital Video Interface)(DVI)又は高詳細度マルチメディアインタフェース(High Definition Multimedia Interface)(HDMI(登録商標))等の1つ以上のデータ伝送規格を含むことができる。
本発明の実施形態に従うグラフィクス処理デバイス102は、各々がそれ自身のローカルメモリストア(例えばオンチップローカルメモリ)を有する複数の処理ユニットを含む。グラフィクス処理デバイス102はまた、メモリ103への及びメモリ103からのトラフィックが大幅に低減されるように、スレッドのシーケンスを並列に実行することを複数の処理ユニットに展開するための論理を含む。実施形態に従うグラフィクス処理デバイス102は、グラフィクス処理ユニット(GPU)、汎用グラフィクス処理ユニット(GPGPU)又は他の処理デバイスであってよい。実施形態に従うグラフィクス処理デバイス102は、コマンドプロセッサ105、シェーダコア106、頂点グルーパ及びテセレータ(vertex grouper and tesselator)(VGT)107、シーケンサ(SQ)108、シェーダパイプライン補間器(shader pipeline interpolator)(SPI)109、パラメータキャッシュ110(シェーダエクスポート、SXとも称される)、グラフィクス処理デバイス内部相互接続113、ウエーブフロント発送モジュール130及びウエーブフロント実行モジュール132を含む。図1には示されないが、例えばスキャン変換器、メモリキャッシュ、プリミティブアセンブラ、シェーダコア106内で実行中のプロセスによる共有メモリへのアクセスを連携させるメモリ制御器、シェーダコア106により処理されたデータのレンダリング及びディスプレイを連携させるディスプレイ制御器、等の他のコンポーネントがグラフィクス処理デバイス102内に含まれていてよい。
コマンドプロセッサ105は、グラフィクス処理デバイス102上での実行のための命令を制御プロセッサ101から受け取ることができる。コマンドプロセッサ105は、制御プロセッサ101から受け取ったコマンドを解釈すると共にコンポーネント106、107、108及び109等のグラフィクス処理デバイス102の実行コンポーネントに対して適切な命令を発行するように動作する。例えば特定の画像をディスプレイ上にレンダリングするための命令を受け取ると、コマンドプロセッサ105は、その画像をレンダリングすることをコンポーネント106、107、108及び109にさせる1つ以上の命令を発行する。ある実施形態においては、コマンドプロセッサは、スレッド群のシーケンス、例えば画像をレンダリングするために頂点のセットを処理する頂点シェーダ、幾何シェーダ及び画素シェーダを備えるシーケンスを開始する命令を発行することができる。例えばシステムメモリ103からの頂点データは、処理ユニットがアクセス可能な汎用レジスタ内へと投入されてよく、頂点データは次いで、シェーダコア106内のシェーダのシーケンスを用いて処理され得る。
シェーダコア106は、シェーダプログラム(例えば頂点シェーダ、幾何シェーダ及び画素シェーダ)及び他の計算集約型プログラム(compute intensive programs)等の命令を実行するように構成される複数の処理ユニットを含む。シェーダコア106内の各処理ユニット112は、ウエーブフロントとして知られる複数のスレッドを同時に実行するように構成される。ウエーブフロントの最大サイズは設定可能である。各処理ユニット112は、オンチップローカルメモリ113に結合される。オンチップローカルメモリは、スタティックランダムアクセスメモリ(SRAM)及び組み込み型ダイナミックランダムアクセスメモリ(EDRAM)等の任意の種類のダイナミックメモリであってよく、そのサイズ及び性能は、コスト及び性能等の種々の考慮に基づいて決定されてよい。ある実施形態においては、各処理ユニット(オンチップローカルメモリ)113は、それぞれの処理ユニットのプライベートメモリとして構成される。ある実施形態に従うと、それぞれの処理ユニット内で処理中のスレッドのみがオンチップローカルメモリにアクセスするので、処理ユニット内で実行中のスレッドによるオンチップローカルメモリへのアクセスは、実質的にほとんど競合しない。
VGT107は以下の主たるタスクを行う。即ち、メモリから頂点インデックスをフェッチして(fetches)どの頂点が既に処理されていて従って再処理される必要がないのかを決定すること等の頂点インデックス再使用決定を行うことと、クワッドプリミティブ及びポリゴンプリミティブ(quad primitives and polygon primitives)を三角形プリミティブに変換することと、プリミティブテセレーション(primitive tessellation)のためのテセレーションファクタを計算することと、である。本発明の実施形態においては、VGTはまた、それぞれのウエーブフロントの各スレッドに対してオンチップローカルメモリ内にオフセットを提供することができ、また種々のシェーダから出力される各頂点及び/又はプリミティブがどのオンチップローカルメモリ上に配置されるのかについての経過を追跡する(keep track of)ことができる。
SQ108は、頂点ベクトルデータをVGT107から受け取り、画素ベクトルデータをスキャン変換器から受け取る。SQ108は、SPI109、シェーダコア106及びシェーダエクスポート110のための主制御器である。SQ108は、頂点ベクトル及び画素ベクトル動作、頂点及び画素シェーダ入力データ管理、エクスポート資源のためのメモリ割り当て、多重SIMD及び資源種類のためのスレッド裁定(thread arbitration)、シェーダプロセッサのための制御フロー及びALU実行、シェーダ及び一定アドレシング並びに他の制御機能を管理する。
SPI109は、シェーダコア106内の処理ユニットへの入力データを決定すると共にロードするための入力段階ストレージ及び前処理論理を含む。画素毎のデータを作成するために、補間器のバンクは、当該分野で既知の方法において、例えばスキャン変換器が提供した重心座標(barycentric coordinates)でプリミティブ毎頂点データを補間し、画素シェーダのための画素毎データを作成する。本発明の実施形態においては、SPIはまた、ウエーブフロントのサイズと各ウエーブフロントが実行のためにどこに発送されるのかとを決定することができる。
SX110は頂点パラメータを含むデータを保持するためのオンチップバッファである。ある実施形態に従うと、頂点シェーダ及び/又は画素シェーダの出力は、フレームバッファ又は他のオフチップメモリにエクスポートされる前にSX内に記憶され得る。
ウエーブフロント発送モジュール130は、本発明のある実施形態に従いスレッドのウエーブフロントのシーケンスを処理ユニット112に割り当てるように構成される。ウエーブフロント発送モジュール130は、例えば、各処理ユニットのローカルメモリ内で利用可能なメモリと、各処理ユニットへと発送されるべきスレッドウエーブフロントのシーケンスと、各処理ユニットへと発送されるウエーブフロントのサイズと、を決定する論理を含むことができる。
ウエーブフロント実行モジュール132は、本発明のある実施形態に従い複数の処理ユニット112内の各ウエーブフロントの論理を実行するように構成される。ウエーブフロント実行モジュール132は、例えば、処理ユニット112内の頂点シェーダ、幾何シェーダ及び画素シェーダの異なるウエーブフロントを実行することと、グラフィクス処理パイプラインの全体処理を高速化するためにそれぞれのオンチップローカルメモリ113内のシェーダの各々からの中間結果を記憶することと、のための論理を含むことができる。
データ増幅モジュール133は、入力データ要素を増幅又は逆増幅して(deamplify)入力データよりも大きい出力データ要素セットを生成するための論理を含む。ある実施形態に従うと、データ増幅モジュール133は、幾何増幅のための論理を含む。一般にデータ増幅は、相対的に単純な入力データセットからの複雑なデータセットの生成を参照する。データ増幅の結果、入力データセットよりも大きな若しくは小さな数の又は入力データセットと同じ数のデータ要素を有する出力データセットをもたらすことができる。
ある実施形態に従うシェーダプログラム134は、第1、第2及び第3のシェーダプログラムを含む。処理ユニット112は、各ウエーブフロントが複数の第1、第2及び第3のシェーダプログラムを備えるウエーフロントのシーケンスを実行する。本発明のある実施形態に従うと、第1のシェーダプログラムは頂点シェーダを備え、第2のシェーダプログラムは幾何シェーダ(GS)を備え、そして第3のシェーダプログラムは画素シェーダ、計算シェーダ等を備える。
頂点シェーダ(VS)は、頂点をリードし、それらを処理し、そして結果をメモリへ出力する。新たなプリミティブは導入しない。GSがアクティブである場合には、頂点シェーダは、ある種のエクスポートシェーダ(ES)として参照されることがある。頂点シェーダはフェッチサブルーチン(FS)を呼び出すことができ、フェッチサブルーチンは、実行目的で頂点プログラムの一部として取り扱われる頂点データをフェッチするための特別なグローバルプログラムである。従来のシステムにおいては、VS出力は、幾何シェーダ(GS)がアクティブかどうかに応じて、システムメモリ内のバッファか又はパラメータキャッシュ及び位置バッファかのいずれかに向けられる。本発明の実施形態においては、VSの出力は、GSが実行中である処理ユニットのオンチップローカルメモリに向けられる。
幾何シェーダ(GS)は、典型的にはVS出力からプリミティブをリードし、また各入力されたプリミティブに対して1つ以上のプリミティブを出力としてライトする。GSがアクティブである場合、従来のシステムにおいては、オフチップシステムメモリに対してリード/ライトするためには、直接メモリアクセス(DMA)コピープログラムがアクティブにされる必要がある。従来のシステムにおいては、GSは、VSによって作成されたオフチップメモリバッファからの複数の頂点を同時にリードすることができ、そして可変数のプリミティブを第2のメモリバッファへと出力する。本発明の実施形態に従うと、GSは、その入力をリードすると共にその出力を、GSが実行中である処理ユニットのオンチップローカルメモリへとライトするように構成される。
画素シェーダ(PS)、即ちフラグメントシェーダは、従来のシステムにおいては、例えばパラメータキャッシュ、パラメータキャッシュに関連付けられる位置バッファ、システムメモリ及びVGTを含む種々のロケーションから入力をリードする。PSは、個々の画素クワッド(2×2アレイに配置される4つの画素データ要素)を処理し、そして1つ以上のフレームバッファを含み得る1つ以上のメモリバッファへと出力をライトする。本発明の実施形態においては、PSは、GSが実行される処理ユニットのオンチップローカルメモリ内のGSにより生成され記憶されるデータを入力としてリードするように構成される。
モジュール130〜134を指定する処理論理は、C、C++又はアセンブリ(Assembly)等のプログラミング言語を用いて実装されてよい。別の実施形態においては、モジュール130〜134の1つ以上のための論理命令は、ここに説明される本発明の側面を具現化するハードウエアデバイスを作り出すためのマスクワーク/フォトマスクの生成を通して最終的に製造プロセスを構成することを可能にするベリログ(Verilog)、RTL及びネットリスツ(netlists)等のハードウエア記述言語において指定され得る。この処理論理及び/又は論理命令は、磁気ディスク、光学ディスク(CD−ROM、DVD−ROM等)、フラッシュディスク等を含む任意の既知のコンピュータ可読媒体内に配置され得る。
図2は本発明のある実施形態に従い複数の処理ユニットを備えるプロセッサにおけるデータの処理を示すフローチャート200である。本発明の実施形態に従うと、データはスレッドウエーブフロントのシーケンスによって処理され、ここでスレッドのシーケンスへの入力はオフチップシステムメモリからリードされ、またスレッドのシーケンスの出力はオフチップメモリ内に記憶されるが、中間結果が、それぞれの処理ユニットに関連付けられるオンチップローカルメモリ内に記憶される。
ステップ202では、各処理ユニットにおいて処理され得る入力データ要素の数が決定される。ある実施形態に従うと、入力データの処理のためのメモリ要求のサイズを決定するために、入力データ及びシェーダプログラムが解析される。例えば、各第1の種類のスレッド(例えば頂点シェーダ)の出力のサイズ及び各第2の種類のスレッド(例えば幾何シェーダ)の出力のサイズが決定され得る。入力データ要素は、例えば、画像をレンダリングするのに用いられることになる頂点データであってよい。ある実施形態に従うと、頂点シェーダ処理は新たなデータ要素を作成せず、従って頂点シェーダの出力は入力と実質的に同じサイズである。ある実施形態に従うと、幾何シェーダは幾何増幅を行うことができ、その結果、入力データ要素の増大(multiplication)がもたらされ、入力よりも相当大きなサイズの出力が生成される。また、幾何増幅の結果として、入力よりも相当小さなサイズ又は入力と実質的に同じサイズを有する出力がもたらされることもある。ある実施形態に従うと、VGTは、各入力された頂点に対してGSによって幾つの出力頂点が生成されるのかを決定する。複数の処理ユニットの各々において処理され得る入力頂点データの最大量は、オンチップローカルメモリのサイズ並びに第1及び第2の種類の複数のスレッドの出力を記憶するのに必要なメモリのサイズに少なくとも部分的に基づいて決定され得る。
ステップ204では、ウエーブフロントが構成される。ある実施形態に従うと、第1及び第2の種類のスレッドの出力を各処理ユニットのオンチップローカルメモリ内に記憶するためのメモリ要求に基づいて、各種類のスレッドのスレッド最大数が決定され得る。例えば、複数の入力データ要素を処理するための頂点シェーダスレッド、幾何シェーダスレッド及び画素シェーダスレッドの最大数は、ステップ202で決定されたメモリ要求に基づいて決定され得る。ある実施形態に従うと、SPIが、どの頂点、従ってどのスレッドが処理のためのどの処理ユニットに割り当てられるのかを決定する。
ステップ206では、それぞれの第1のウエーブフロントが処理ユニットへと発送される。第1のウエーブフロントは第1の種類のスレッドを含む。ある実施形態に従うと、第1のウエーブフロントは複数の頂点シェーダを備える、各第1のウエーブフロントには、その出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられている。ある実施形態に従うと、SPIが、各第1のウエーブフロントのための基本アドレスをSQに提供する。ある実施形態においては、VGT又は他の論理コンポーネントは、ウエーブフロント内の各スレッドにオフセットを設けることができ、そこからオンチップローカルメモリ内でのリード又はライトが可能である。
ステップ208では、第1のウエーブフロントの各々は、その入力をオフチップメモリからリードする。ある実施形態に従うと、各第1のウエーブフロントは、処理されるべき頂点等のデータをリトリーブする(retrieve)するために、メモリ制御器を介してシステムメモリにアクセスする。各第1のウエーブフロントにより処理されるべき頂点は、前もって識別されたものであることがあり、また当該データのメモリ内のアドレスは、例えばVGT内のそれぞれの第1のウエーブフロントに提供されたものであることがある。システムメモリへのアクセス及びシステムメモリからのデータ要素のリーディング(reading)は、上述した競合問題に起因して、比較的大きな数のクロックサイクルを消費し得る。それぞれの第1のウエーブフロント内の各スレッドは、基本アドレスを決定し、そこからその入力頂点をオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第1のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
ステップ210では、第1のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、頂点シェーダ処理がステップ210で生じる。ステップ210では、第1のウエーブフロント内の各スレッドは、その基本出力アドレスをオンチップローカルメモリ内へと計算することができる。各スレッドのための基本出力アドレスは、例えばそれぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第1のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第1のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。
ステップ212では、ウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、各第1のウエーブフロント内のスレッドの各々の出力が、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力を、ステップ210で決定されたそれぞれの出力アドレスへとライトすることができる。
ステップ214では、それぞれの第1のウエーブフロントの完了が決定される。ある実施形態に従うと、第1のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの1つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートする(assert)ことができる。第1のウエーブフロントによる処理の完了を示すフラグ及び/又は信号は、第1のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。
ステップ216では、第2のウエーブフロントが発送される。尚、図2においてはステップ214の後にステップ216があるが、他の実施形態においては、ステップ216はステップ214より先に行われてもよい。例えば処理ユニット内のスレッドウエーブフロントをパイプ化する場合、スレッドウエーブフロントは、1つ以上の先に発送されたウエーブフロントの完了の前に発送される。第2のウエーブフロントは第2の種類のスレッドを含む。ある実施形態に従うと、第2のウエーブフロントは複数の幾何シェーダスレッドを備える。各第2のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレス及びその出力をオンチップローカルメモリ内にライトするための基本アドレスが設けられる。ある実施形態に従うと、各第2のウエーブフロントに対して、SPIは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、SQにローカルメモリ内の基本アドレスを提供する。SPIはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第1のウエーブフロントの要求に従ってそれぞれの第2のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。VGTは、頂点及びそれぞれの頂点が割り当てられる処理ユニットの経過を追跡することができる。VGTはまた、幾何シェーダスレッドに、それぞれのプリミティブに対応する全ての頂点が提供され得るように、頂点間の接続の経過を追跡することができる。
ステップ218では、第2のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの処理ユニットにローカルなオンチップメモリへのアクセスは、システムメモリへのアクセスと比べて高速である。それぞれの第2のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第2のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
ステップ220では、第2のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、幾何シェーダ処理がステップ220で生じる。ステップ220においては、第2のウエーブフロント内の各スレッドは、オンチップローカルメモリ内へのその基本出力アドレスを計算することができる。各スレッドのための基本出力アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて計算され得る。別の実施形態においては、第2のウエーブフロント内の各スレッドは、その出力基本アドレスを、対応する第2のウエーブフロントのための基本出力アドレス、及びスレッドが発送されたときに提供されたオフセットに基づいて計算することができる。
ステップ222では、第2のウエーブフロントのスレッドの各々によって読み込まれた入力データ要素が増幅される。ある実施形態に従うと、幾何シェーダスレッドの各々は、幾何増幅における当該結果を処理することを行う。
ステップ224では、第2のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリへとライトされる。ある実施形態に従うと、それぞれの第2のウエーブフロント内のスレッドの各々の出力は、それぞれのオンチップローカルメモリ内へとライトされる。ウエーブフロント内の各スレッドは、その出力をステップ216で決定されたそれぞれの出力アドレスへとライトすることができる。
ステップ226では、それぞれの第2のウエーブフロントの完了が決定される。ある実施形態に従うと、第2のウエーブフロント内の各スレッドは、オンチップローカルメモリ、システムメモリ若しくは汎用レジスタ内にフラグをセットすることができ、又はスレッドがその処理を完了したことをシステムの1つ以上の他のコンポーネントに示す任意の他の方法で信号をアサートすることができる。第2のウエーブフロントによる処理の完了を示すフラグ及び/又は信号は、第2のウエーブフロントの出力へのアクセスを他のスレッドウエーブフロントに提供するために、システムのコンポーネントによってモニタリングされてよい。ある実施形態においては、第2のウエーブフロントの完了に際して、対応する第1のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。
ステップ228では、第3のウエーブフロントが発送される。第3のウエーブフロントは第3の種類のスレッドを含む。ある実施形態に従うと、第3のウエーブフロントは複数の画素シェーダスレッドを備える。各第3のウエーブフロントには、その入力をオンチップローカルメモリからリードするための基本アドレスが設けられる。ある実施形態に従うと、各第3のウエーブフロントに対して、SPIは、それぞれ当該アドレスから入力をリードするため及び当該アドレスへ出力をライトするために、SQにローカルメモリ内の基本アドレスを提供する。SPIはまた、各スレッドウエーブフロントのウエーブ識別子の経過を追うことができ、また処理ユニットに既に割り当てられているデータ及び第3のウエーブフロントの要求に従ってそれぞれの第3のウエーブフロントがその処理ユニットに確実に割り当てられるようにすることができる。
ステップ230では、第3のウエーブフロントの各々は、その入力をオンチップローカルメモリからリードする。それぞれの第3のウエーブフロント内の各種類が基本アドレスを決定し、基本アドレスから当該種類の入力データをオンチップローカルメモリからリードする。各スレッドのためのそれぞれの基本アドレスは、例えば、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、1つのスレッドのための入力によって占められるメモリ空間を表すステップサイズ、及び当該第3のウエーブフロントに割り当てられた入力頂点のブロックへの基本アドレスに基づいて計算され得る。
ステップ232では、第3のウエーブフロントの各々がそれぞれの処理ユニット内で実行される。ある実施形態に従うと、画素シェーダ処理がステップ232で生じる。
ステップ234では、第3のウエーブフロントの各々の出力が、それぞれのオンチップローカルメモリ、システムメモリ又は他の場所へとライトされる。ある実施形態においては、第3のウエーブフロントの完了に際して、対応する第2のウエーブフロントの出力によって占められているオンチップローカルメモリは、割り当て解除されて利用可能にされてよい。
アプリケーションに基づく1つ以上の追加的な処理ステップが方法200内に含まれ得る。ある実施形態に従うと、第1、第2及び第3のウエーブフロントは、画素データを処理すると共に画像をディスプレイへとレンダリングするグラフィクス処理パイプラインを作り出すようにローンチされる(launched)頂点シェーダ及び幾何シェーダを備える。尚、種々のウエーブフロントの順序は、特定のアプリケーションに依存する。また、ある実施形態に従うと、第3のウエーブフロントは、画素シェーダ並びに/又は計算シェーダ及びコピーシェーダ等の他のシェーダを備えていてよい。例えばコピーシェーダは、データをコンパクトにすることができ且つ/又はグローバルメモリへとライトすることができる。処理ユニットに関連付けられるオンチップローカルメモリに1つ以上のスレッドウエーブフロントの出力をライトすることによって、本発明の実施形態は、メモリアクセスのための競合に起因する遅延を大幅に低減する。
図3は本発明の実施形態に従いステップ206を実装するための方法(302〜306)のフローチャートである。ステップ302では、各第1のウエーブフロント内のスレッドの数が決定される。これは、限定はされないが、処理されるのに利用可能になるデータ要素、処理ユニットの数、各処理ユニット上で同時に実行可能なスレッドの最大数、及びそれぞれの処理ユニットに関連付けられるそれぞれのオンチップローカルメモリ内で利用可能なメモリの量、等の種々の要因に基づき決定され得る。
ステップ304では、第1のウエーブフロントの各スレッドにより記憶され得る出力のサイズが決定される。この決定は、予め設定されたパラメータ又はプログラム命令及び/若しくは入力データのサイズに基づき動的に決定されたパラメータに基づき得る。ある実施形態に従うと、第1のウエーブフロントの各スレッドにより記憶され得る出力のサイズは、ここでは第1のウエーブフロントのステップサイズとも称され、第1のウエーブフロントをローンチするとき又は第1のウエーブフロントの実行中に、静的に又は動的にのどちらかで決定され得る。
ステップ306では、各スレッドには、そのそれぞれの出力をライトするために、対応する処理ユニットに関連付けられるオンチップローカルメモリ内へのオフセットが提供される。オフセットは、それぞれのウエーブフロント内のスレッドを識別するシーケンシャルスレッド識別子、それぞれのウエーブフロントのための基本出力アドレス、及び各スレッドのためのメモリ空間を表すステップサイズに基づいて決定され得る。処理の間、各スレッドは、その出力をライトすべきローカルメモリ内の実際のオフセットを、スレッド発送に際して提供されたオフセット、ウエーブフロントのための基本出力アドレス、及びスレッドのステップサイズに基づき決定することができる。
図4は本発明の実施形態に従いステップ216を実装するための方法(402〜406)を示すフローチャートである。ステップ402では、第2のウエーブフロントのスレッドのためのステップサイズが決定される。ステップサイズは、第2のウエーブフロントのプログラム命令、最大ステップサイズを指定する予め設定されたパラメータ、予め設定されたパラメータ及びプログラム命令の組み合わせ、又は同様の方法に基づき決定され得る。ある実施形態に従うと、ステップサイズは、第2のウエーブフロントのそれぞれのスレッドによりリードされた入力データの、幾何シェーダによる幾何増幅等のデータ増幅を受け入れる(accommodate)ように決定されるべきである。
ステップ404では、それぞれの第2のウエーブフロント内の各スレッドには、オンチップローカルメモリ内のロケーションを決定するためのリードオフセットが設けられてよく、各スレッドはその入力をリードオフセットからリードすることができる。各スレッドは、実際のリードオフセットを、例えば実行の間に、リードオフセット、それぞれのウエーブフロントのための基本リードオフセット、及び対応する第1のウエーブフロントのスレッドのステップサイズに基づき決定することができる。
ステップ406では、それぞれの第2のウエーブフロント内の各スレッドには、オンチップローカルメモリ内へのライトオフセットが設けられてよい。各スレッドは、実際のライトオフセットを、例えば実行の間に、ライトオフセット、それぞれのウエーブフロントのための基本ライトオフセット、及び第2のウエーブフロントのスレッドのステップサイズに基づき決定することができる。
図5は処理ユニットの各々内で処理されるべきデータ要素を決定する方法(502〜506)を示すフローチャートである。ステップ502では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第1のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、出力のサイズは、複数の頂点シェーダスレッドにより処理されるべき頂点の数に基づいて決定される。各処理ユニットにおいて処理されるべき頂点の数は、限定はされないが、処理されるべき頂点の総数、頂点を処理するのに利用可能な処理ユニットの数、各処理ユニットのために利用可能なオンチップローカルメモリの量、及び各入力された頂点に適用される処理、等の要因に基づいて決定され得る。ある実施形態に従うと、各頂点シェーダは、それが入力として読み込むのと同数の頂点を出力する。
ステップ504では、各処理ユニットのオンチップローカルメモリ内に記憶されるべき第2のウエーブフロントの出力のサイズが推定される。ある実施形態に従うと、第2のウエーブフロントの出力のサイズは、第2のウエーブフロントのそれぞれのスレッドにより行われた入力データの増幅に少なくとも部分的に基づき推定される。例えば幾何シェーダによる処理の結果、幾何増幅は、入力プリミティブとは異なる数の出力プリミティブを生じさせ得る。データ増幅(又は幾何増幅)の大きさは、予め設定されたパラメータ及び/又はそれぞれのスレッドにおけるプログラム命令のアスペクト(aspects)に基づいて決定され得る。
ステップ506では、各プロセッサに関連付けられる必要な利用可能オンチップローカルメモリのサイズが、第1及び第2のウエーブフロントの出力のサイズを合計することによって決定される。本発明のある実施形態に従うと、各処理ユニットのオンチップローカルメモリは、第1及び第2のウエーブフロントの出力サイズの合計と少なくとも同程度の利用可能なメモリを有している必要がある。各処理ユニット内で処理されるべき頂点の数は、利用可能なオンチップローカルメモリの量並びに第1のウエーブフロント及び第2のウエーブフロントの出力の合計に基づいて決定され得る。
〔結論〕
概要及び要約の欄は、発明者によって検討された本発明の1つ以上のしかし全部ではない例示的な実施形態を説明することができ、従って本発明及び添付の特許請求の範囲を限定することが意図されているわけではけっしてない。
特定の機能の実装及びそれらの関係性を示す機能構築ブロックを補助として、本発明が上述のように説明されてきた。これらの機能構築ブロックの境界は、説明の便宜上ここでは適宜画定されてきた。特定の機能及びそれらの関係性が適切に実行される限りにおいて、代替的な境界が画定され得る。
特定の実施形態の上述した説明は、本発明の一般的性質を十分に明らかにするであろうから、他者は、当業者における知識を適用することによって、過度の実験なしに、本発明の一般的概念から逸脱することなく、そのような特定の実施形態を容易に修正し且つ/又は種々の応用に適応させることができる。従って、そのような適応及び修正は、ここに提示されている教示及び指針に基いて、開示されている実施形態と均等なものの意味及び範囲の範疇にあることが意図されている。ここでの用語等は、説明を目的としたものであって限定を目的としていないことが理解されるべきであり、本出願書類の用語等は教示及び指針の下で当業者によって解釈されるべきである。
本発明の広さ及び範囲は、上述したいかなる例示的な実施形態によっても限定されるべきではなく、以下の特許請求の範囲及びそれらと均等なものに従ってのみ画定されるべきである。

Claims (20)

  1. 複数の処理ユニットを用いるプロセッサにおいてデータ要素を処理する方法であって、
    第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを前記処理ユニットの各々においてローンチすることと、
    前記第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
    前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、を備え、
    前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備える方法。
  2. 前記第2のウエーブフロントを用いて前記第1の複数のデータ要素を処理して前記第2の出力を生成することを更に備え、
    前記第2の出力におけるデータ要素の数は前記第1の複数のデータ要素の数とは実質的に異なる請求項1の方法。
  3. 前記第2の出力におけるデータ要素の数は動的に決定される請求項2の方法。
  4. 前記第2のウエーブフロントは1つ以上の幾何シェーダスレッドを備える請求項2の方法。
  5. 前記第2の出力は前記第1の出力の幾何増幅により生成される請求項4の方法。
  6. 前記第2のウエーブフロントに続いて第3のウエーブフロントを第1の処理ユニットにおいて実行することを更に備え、
    前記第3のウエーブフロントは前記第2の出力を前記オンチップローカルメモリからリードする請求項1の方法。
  7. 前記オンチップローカルメモリ内で利用可能なメモリに少なくとも基き処理されるべき前記データ要素の数をそれぞれの処理ユニットに対して決定することと、
    決定された数に基き前記第1及び第2のウエーブフロントをそれぞれの処理ユニットに対してサイズ決定することと、を更に備える請求項1の方法。
  8. 前記決定することは、
    前記第1の出力のメモリサイズを推定することと、
    前記第2の出力のメモリサイズを推定することと、
    前記第1及び第2の出力の推定されたメモリサイズを用いて必要なオンチップメモリサイズを計算することと、を備える請求項7の方法。
  9. 前記ローンチすることは、
    前記第1のウエーブフロントを実行することと、
    前記第1のウエーブフロントの完了を検出することと、
    前記検出することの後に前記第2のウエーブフロントにより前記第1の出力をリードすることと、を備える請求項1の方法。
  10. 前記第1のウエーブフロントを実行することは、
    前記第1のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、
    前記オンチップローカルメモリ内への出力のためのオフセットを前記第1のウエーブフロントのそれぞれのスレッドの各々に対して提供することと、を備える請求項9の方法。
  11. 前記ローンチすることは、
    前記第2のウエーブフロントのそれぞれのスレッドのための出力のサイズを決定することと、
    前記第1の出力からリードするための前記オンチップローカルメモリ内へのオフセットを前記第2のウエーブフロントのそれぞれのスレッドに対して提供することと、
    前記第2の出力のそれぞれの部分をライトするための前記オンチップローカルメモリ内へのオフセットを前記第2のウエーブフロントの各スレッドに対して提供することと、を更に備える請求項9の方法。
  12. 前記第2のウエーブフロントのそれぞれのスレッドのための出力のサイズは、予め定められた幾何増幅パラメータに基く請求項11の方法。
  13. 前記複数の処理ユニットの各々は単一命令多重データ(SIMD)プロセッサである請求項1の方法。
  14. 前記オンチップローカルメモリは、対応するそれぞれの処理ユニット上で実行中のスレッドのみにとってアクセス可能である請求項1の方法。
  15. 前記第1のウエーブフロント及び前記第2のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項1の方法。
  16. 各々がオンチップローカルメモリを備える複数の処理ユニットを備えるプロセッサと、
    前記処理ユニットに結合されると共に複数の入力データ要素を記憶するように構成されるオフチップ共有メモリと、
    前記プロセッサに結合されるウエーブフロント発送モジュールと、
    前記プロセッサに結合されるウエーブフロント実行モジュールと、を備え、
    前記ウエーブフロント発送モジュールは、第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントを前記複数の処理ユニットの各々においてローンチするように構成され、前記第1のウエーブフロントは、前記オフチップ共有メモリから前記データ要素の一部をリードするように構成され、
    前記ウエーブフロント実行モジュールは、
    第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
    前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、のために構成され、
    前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備えるシステム。
  17. 前記ウエーブフロント実行モジュールは、
    前記第2のウエーブフロントを用いて前記第1の複数のデータ要素を処理して前記第2の出力を生成することのために更に構成され、
    前記第2の出力におけるデータ要素の数は前記第1の複数のデータ要素の数とは実質的に異なる請求項16のシステム。
  18. 前記第2の出力は前記第1の出力の幾何増幅により生成される請求項17のシステム。
  19. 前記第1及び第2のウエーブフロントはそれぞれ頂点シェーダスレッド及び幾何シェーダスレッドを備える請求項18のシステム。
  20. 複数の処理ユニットを備えるプロセッサに、
    第2の種類のスレッドを備える第2のウエーブフロントが続く第1の種類のスレッドを備える第1のウエーブフロントであってオフチップ共有メモリから前記データ要素の一部を入力としてリードすると共に第1の出力を生成する第1のウエーブフロントを前記処理ユニットの各々においてローンチすることと、
    前記第1の出力をそれぞれの処理ユニットのオンチップローカルメモリにライトすることと、
    前記第2のウエーブフロントによって生成された第2の出力を前記オンチップローカルメモリにライトすることと、をさせるために記録されたコンピュータプログラム論理を有するコンピュータ可読媒体を備える有形的コンピュータプログラム製品であって、
    前記第2のウエーブフロントへの入力は前記第1の出力からの第1の複数のデータ要素を備える有形的コンピュータプログラム製品。
JP2013520813A 2010-07-19 2011-07-19 多重処理ユニット内のオンチップメモリを用いるデータ処理 Withdrawn JP2013541748A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US36570910P 2010-07-19 2010-07-19
US61/365,709 2010-07-19
PCT/US2011/044552 WO2012012440A1 (en) 2010-07-19 2011-07-19 Data processing using on-chip memory in multiple processing units

Publications (1)

Publication Number Publication Date
JP2013541748A true JP2013541748A (ja) 2013-11-14

Family

ID=44628932

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2013520813A Withdrawn JP2013541748A (ja) 2010-07-19 2011-07-19 多重処理ユニット内のオンチップメモリを用いるデータ処理

Country Status (6)

Country Link
US (1) US20120017062A1 (ja)
EP (1) EP2596470A1 (ja)
JP (1) JP2013541748A (ja)
KR (1) KR20130141446A (ja)
CN (1) CN103003838A (ja)
WO (1) WO2012012440A1 (ja)

Families Citing this family (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10217270B2 (en) 2011-11-18 2019-02-26 Intel Corporation Scalable geometry processing within a checkerboard multi-GPU configuration
CN103946823B (zh) * 2011-11-18 2017-04-05 英特尔公司 棋盘多gpu配置内的可缩放几何形状处理
US9256915B2 (en) * 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US10474584B2 (en) 2012-04-30 2019-11-12 Hewlett Packard Enterprise Development Lp Storing cache metadata separately from integrated circuit containing cache controller
KR101499124B1 (ko) * 2013-01-24 2015-03-05 한남대학교 산학협력단 공유 메모리를 이용한 영상 처리 방법 및 장치
KR101596332B1 (ko) * 2013-01-24 2016-02-22 전자부품연구원 G―esa를 적용한 영상 처리 시스템 및 방법
US9720842B2 (en) * 2013-02-20 2017-08-01 Nvidia Corporation Adaptive multilevel binning to improve hierarchical caching
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US10360652B2 (en) * 2014-06-13 2019-07-23 Advanced Micro Devices, Inc. Wavefront resource virtualization
US20160260246A1 (en) * 2015-03-02 2016-09-08 Advanced Micro Devices, Inc. Providing asynchronous display shader functionality on a shared shader core
GB2536211B (en) * 2015-03-04 2021-06-16 Advanced Risc Mach Ltd An apparatus and method for executing a plurality of threads
CN104932985A (zh) * 2015-06-26 2015-09-23 季锦诚 一种基于eDRAM的GPGPU寄存器文件系统
GB2540543B (en) * 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
GB2553597A (en) * 2016-09-07 2018-03-14 Cisco Tech Inc Multimedia processing in IP networks
US10395424B2 (en) * 2016-12-22 2019-08-27 Advanced Micro Devices, Inc. Method and apparatus of copying data to remote memory
KR20180080757A (ko) * 2017-01-05 2018-07-13 주식회사 아이리시스 생체 정보를 처리하는 회로 모듈 및 이를 포함하는 생체 정보 처리 장치
US10474822B2 (en) * 2017-10-08 2019-11-12 Qsigma, Inc. Simultaneous multi-processor (SiMulPro) apparatus, simultaneous transmit and receive (STAR) apparatus, DRAM interface apparatus, and associated methods
US10558499B2 (en) * 2017-10-26 2020-02-11 Advanced Micro Devices, Inc. Wave creation control with dynamic resource allocation
CN108153190B (zh) * 2017-12-20 2020-05-05 新大陆数字技术股份有限公司 一种人工智能微处理器
US10922258B2 (en) * 2017-12-22 2021-02-16 Alibaba Group Holding Limited Centralized-distributed mixed organization of shared memory for neural network processing
US10679316B2 (en) * 2018-06-13 2020-06-09 Advanced Micro Devices, Inc. Single pass prefix sum in a vertex shader
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11210757B2 (en) * 2019-12-13 2021-12-28 Advanced Micro Devices, Inc. GPU packet aggregation system
US11822956B2 (en) * 2020-12-28 2023-11-21 Advanced Micro Devices (Shanghai) Co., Ltd. Adaptive thread group dispatch
US20230094115A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Load multiple primitives per thread in a graphics pipeline

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088044A (en) * 1998-05-29 2000-07-11 International Business Machines Corporation Method for parallelizing software graphics geometry pipeline rendering
US20040114609A1 (en) * 2001-02-14 2004-06-17 Ian Swarbrick Interconnection system
US6947047B1 (en) * 2001-09-20 2005-09-20 Nvidia Corporation Method and system for programmable pipelined graphics processing with branching instructions
US7222343B2 (en) * 2003-01-16 2007-05-22 International Business Machines Corporation Dynamic allocation of computer resources based on thread type
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
CN102047241B (zh) * 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
US8259111B2 (en) * 2008-05-30 2012-09-04 Advanced Micro Devices, Inc. Merged shader for primitive amplification
US20100079454A1 (en) * 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
US8711159B2 (en) * 2009-02-23 2014-04-29 Microsoft Corporation VGPU: a real time GPU emulator
US8627329B2 (en) * 2010-06-24 2014-01-07 International Business Machines Corporation Multithreaded physics engine with predictive load balancing

Also Published As

Publication number Publication date
EP2596470A1 (en) 2013-05-29
WO2012012440A1 (en) 2012-01-26
KR20130141446A (ko) 2013-12-26
US20120017062A1 (en) 2012-01-19
CN103003838A (zh) 2013-03-27

Similar Documents

Publication Publication Date Title
JP2013541748A (ja) 多重処理ユニット内のオンチップメモリを用いるデータ処理
US11321902B2 (en) Apparatus and method for optimized ray tracing
JP5242771B2 (ja) 混合精度命令実行を伴うプログラマブルストリーミングプロセッサ
KR101661720B1 (ko) 복수의 셰이더 엔진들을 구비한 처리 유닛
US9256623B2 (en) System, method, and computer program product for scheduling tasks associated with continuation thread blocks
JP7253507B2 (ja) 仮想化アクセラレーテッド処理デバイスの早期仮想化コンテキストスイッチ
CN106575430B (zh) 用于像素哈希的方法和装置
US9477482B2 (en) System, method, and computer program product for implementing multi-cycle register file bypass
US20170372448A1 (en) Reducing Memory Access Latencies During Ray Traversal
KR20140109431A (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
JP2010244529A (ja) デッドロックを起こさないパイプライン処理のためのシステム及び方法
US20170300361A1 (en) Employing out of order queues for better gpu utilization
US20180232846A1 (en) Dynamic shader instruction nullification for graphics processing
TW201727575A (zh) 可變精確度著色
US11663767B2 (en) Power efficient attribute handling for tessellation and geometry shaders
US10789071B2 (en) Dynamic thread splitting having multiple instruction pointers for the same thread
US20180113713A1 (en) Compiler-based instruction scoreboarding
US20180218530A1 (en) Efficient fine grained processing of graphics workloads in a virtualized environment
US20160307362A1 (en) Optimized depth buffer cache apparatus and method
US9632783B2 (en) Operand conflict resolution for reduced port general purpose register
US20140351826A1 (en) Application programming interface to enable the construction of pipeline parallel programs
JP2020024716A (ja) グラフィック処理のためのパーシェーダープリアンブル
US20190018747A1 (en) Method and apparatus periodic snapshotting in a graphics processing environment
US9830676B2 (en) Packet processing on graphics processing units using continuous threads
CN109791527B (zh) 延迟丢弃

Legal Events

Date Code Title Description
A300 Application deemed to be withdrawn because no request for examination was validly filed

Free format text: JAPANESE INTERMEDIATE CODE: A300

Effective date: 20141007