JP2022539951A - 減少した分岐をソートする計算ユニット - Google Patents

減少した分岐をソートする計算ユニット Download PDF

Info

Publication number
JP2022539951A
JP2022539951A JP2021570323A JP2021570323A JP2022539951A JP 2022539951 A JP2022539951 A JP 2022539951A JP 2021570323 A JP2021570323 A JP 2021570323A JP 2021570323 A JP2021570323 A JP 2021570323A JP 2022539951 A JP2022539951 A JP 2022539951A
Authority
JP
Japan
Prior art keywords
items
control flow
execution
wavefront
action
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.)
Pending
Application number
JP2021570323A
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 JP2022539951A publication Critical patent/JP2022539951A/ja
Pending legal-status Critical Current

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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • 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]
    • 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]
    • G06F9/38873Iterative single instructions for multiple data lanes [SIMD]
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • G06F9/38885Divergence aspects

Landscapes

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

Abstract

本明細書では、単一命令多重データプロセッサにおいて制御フローの分岐を減少させる技術について説明する。方法は、分岐する制御フローのポイントにおいて、異なる実行アイテムの制御フローターゲットを識別することと、制御フローターゲットに基づいて、実行アイテムをソートすることと、ソートに基づいて、実行アイテムを再編成することと、再編成された実行アイテムを、分岐する制御フローポイントの後に実行することと、を含む。【選択図】図7

Description

(関連出願の相互参照)
本願は、2019年6月28日に出願された米国特許出願第16/457,873号の利益を主張し、その内容は、参照することによって本明細書に組み込まれる。
(関連技術の説明)
単一命令多重データ(SIMD)プロセッサは、データの複数のアイテムを用いて単一の制御フローを使用することによって、実行の並列化を達成する。異なるスレッドの実行が、制御フローが依存するデータについて異なる値を有することがあるので、制御フローがデータに依存ずる場合に制御フローが分岐する可能性がある。このような状況では、異なる制御フローパスが直列化され、結果としてスローダウンをもたらす。
添付図面と共に例として与えられる以下の説明から、より詳細な理解を得ることができる。
本開示の1つ以上の機能を実装することができる例示的なデバイスのブロック図である。 一例による、アクセラレーテッド処理デバイス上での処理タスクの実行に関連する追加の詳細を示すデバイスのブロック図である。 一例による、レイトレーシング技術を使用してグラフィックをレンダリングするレイトレーシングパイプラインを示す図である。 一例による、分岐する制御フローから結果として生じる直列化を示す図である。 一例による、ワークグループのウェーブフロントに亘って実行アイテムを再編成することによって制御フロー分岐を減少させる技術を示す図である。 再編成無しに発生することがある制御フロー分岐を示す図である。 一例による、ウェーブフロント内で実行アイテムを再編成することによって制御フロー分岐を減少させる技術を示す図である。 再編成無しに発生することがある制御フロー分岐を示す図である。 一例による、APDにおいて実行アイテムを再編成する方法のフローチャートである。
本明細書では、単一命令多重データプロセッサにおいて制御フローの分岐を減少させる技術を説明する。方法は、分岐する制御フローのポイントにおいて、異なる実行アイテムに対する制御フローターゲットを識別することと、制御フローターゲットに基づいて、実行アイテムをソートすることと、ソートに基づいて実行アイテムを再編成することと、再編成された実行アイテムを用いて、分岐する制御フローのポイントの後に実行することと、を含む。
図1は、本開示の1つ以上の機能を実装することができる例示的なデバイス100のブロック図である。デバイス100は、例えば、コンピュータ、ゲーミングデバイス、ハンドヘルドデバイス、セットトップボックス、テレビ、携帯電話、又は、タブレットコンピュータを含む。デバイス100は、プロセッサ102と、メモリ104と、記憶装置106と、1つ以上の入力デバイス108と、1つ以上の出力デバイス110と、を含む。デバイス100は、オプションで、入力ドライバ112及び出力ドライバ114を含む。デバイス100は、図1に示されていない追加のコンポーネントを含むことを理解されたい。
様々な代替例では、プロセッサ102は、中央処理装置(CPU)、グラフィックスプロセッシングユニット(GPU)、同一のダイ上に配置されたCPU及びGPU、又は、1つ以上のプロセッサコアを含み、各プロセッサコアは、CPU又はGPUであってもよい。様々な代替例では、メモリ104は、プロセッサ102と同一のダイ上に配置されてもよいし、プロセッサ102とは別個に配置されてもよい。メモリ104は、揮発性メモリ又は不揮発性メモリ(例えば、ランダムアクセスメモリ(RAM)、動的RAM、キャッシュ)を含む。
記憶装置106は、固定記憶装置又はリムーバブル記憶装置(例えば、ハードディスクドライブ、ソリッドステートドライブ、光学ディスク、フラッシュドライブ)を含む。入力デバイス108は、限定されないが、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体スキャナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。出力デバイス110は、限定されないが、ディスプレイデバイス118、スピーカ、プリンタ、触覚フィードバックデバイス、1つ以上のライト、アンテナ、又は、ネットワーク接続(例えば、無線IEEE802信号の送信及び/若しくは受信のための無線ローカルエリアネットワークカード)を含む。
入力ドライバ112は、プロセッサ102及び入力デバイス108と通信し、プロセッサ102が入力デバイス108から入力を受信することを可能にする。出力ドライバ114は、プロセッサ102及び出力デバイス110と通信し、プロセッサ102が出力デバイス110に出力を送信することを可能にする。入力ドライバ112及び出力ドライバ114がオプションのコンポーネントであることと、入力ドライバ112及び出力ドライバ114が存在しない場合にはデバイス100が同様に動作することと、に留意されたい。出力ドライバ114は、ディスプレイデバイス118に結合されたアクセラレーテッド処理デバイス(APD)116を含む。APD116は、プロセッサ102から計算コマンド及びグラフィックスレンダリングコマンドを受け付けて、これらの計算コマンド及びグラフィックスレンダリングコマンドを処理し、表示のためにディスプレイデバイス118に画素出力を提供するように構成されている。以下で更に説明するように、APD116は、単一命令多重データ(SIMD)パラダイムに従って計算を実行するように構成された1つ以上の並列プロセッシングユニットを含む。よって、様々な機能がAPD116によって実行され或いはAPD116と共に実行されるものとして本明細書で説明するが、様々な代替例では、APD116によって実行されるものとして説明する機能は、追加的に又は代替的に、ホストプロセッサ(例えば、プロセッサ102)によって駆動されず、ディスプレイデバイス118に(グラフィカル)出力を提供するように構成された同様の機能を有する他のコンピューティングデバイスによって実行される。例えば、SIMDパラダイムに従って処理タスクを実行する任意の処理システムは、本明細書で説明する機能を実行するように構成されてもよいことが考慮される。
図2は、一例による、APD116上での処理タスクの実行に関連する追加の詳細を示すデバイス100のブロック図である。プロセッサ102は、システムメモリ104において、プロセッサ102による実行のための1つ以上の制御論理モジュールを維持する。制御論理モジュールは、オペレーティングシステム120と、ドライバ122と、アプリケーション126と、を含む。これらの制御論理モジュールは、プロセッサ102及びAPD116の演算の様々な機能を制御する。例えば、オペレーティングシステム120は、ハードウェアと直接通信し、他のソフトウェアがプロセッサ102上で実行するためのハードウェアへのインタフェースを提供する。ドライバ122は、例えば、APD116の様々な機能にアクセスするための、プロセッサ102上で実行されるソフトウェア(例えば、アプリケーション126)へのアプリケーションプログラミングインタフェース(API)を提供することによって、APD116の演算を制御する。いくつかの実施形態では、ドライバ122は、APD116のコンポーネント(以下により詳細に説明するSIMDユニット等)を処理することによって、実行されるプログラムをコンパイルするジャストインタイムコンパイラを含む。他の実施形態では、プログラムをコンパイルするためにジャストインタイムコンパイラが使用されず、標準的なアプリケーションコンパイラが、APD116上で実行されるシェーダプログラムをコンパイルする。
APD116は、並列処理及び/又は順序付けられていない処理(non-ordered processing)に適切なグラフィックス演算及び非グラフィックス演算等の選択された関数のためのコマンド及びプログラムを実行する。プロセッサ102から受信したコマンドに基づいて、画素演算、幾何学計算、及び、ディスプレイデバイス118への画像のレンダリング等のグラフィックスパイプライン演算を実行するために、APD116が使用される。また、APD116は、プロセッサ102から受信したコマンドに基づいて、ビデオに関連する演算、物理シミュレーション、数値流体力学、又は、他のタスク等のように、グラフィックス演算に関連せず又はグラフィックス演算に直接関連しない計算処理演算を実行する。また、APD116は、レイトレーシングに基づくグラフィックスレンダリングに関連する計算処理演算を実行する。
APD116は、SIMDパラダイムに従って並列方式においてプロセッサ102の要求における演算を実行する1つ以上のSIMDユニット138を含む計算ユニット132を含む。SIMDパラダイムは、複数の処理要素が単一のプログラム制御フローユニット及びプログラムカウンタを共有し、よって、同一のプログラムを実行するが、異なるデータでそのプログラムを実行することが可能である。一例では、各SIMDユニット138は、16個のレーンを含み、各レーンは、SIMDユニット138において他のレーンと同時に同一の命令を実行するが、異なるデータを用いてその命令を実行する。全てのレーンが所定の命令を実行する必要がない場合、条件付き実行制御によりレーンがスイッチオフされる。分岐する制御フローによりプログラムを実行するために、条件付き実行制御が使用されてもよい。より具体的には、条件付き分岐又は個々のレーンによって実行される計算に制御フローが基づいている他の命令を有するプログラムについて、現在実行されていない制御フローパスに対応するレーンの条件付き実行制御、及び、異なる制御フローパスの直列実行は、任意の制御フローを許容する。実施形態では、計算ユニット132の各々は、ローカルL1キャッシュを有してもよい。実施形態では、複数の計算ユニット132は、L2キャッシュを共有する。
計算ユニット132における実行の基本単位は、ワークアイテムである。各ワークアイテムは、特定のレーンにおいて並列に実行されることになるプログラムの単一のインスタンス化を表す。ワークアイテムは、単一のSIMDプロセッシングユニット138上で「ウェーブフロント」として共に実行されてもよい。SIMDプロセッシングユニット138のSIMDの性質は、複数のワークアイテムが同時に並列に実行することができることを意味する。単一のSIMDユニット上でこの方式において共に実行されるワークアイテムは、同一のウェーブフロントの一部である。いくつかの実施形態又は演算のモードでは、SIMDユニット138は、ウェーブフロントのワークアイテムの各々を同時に実行することによって、ウェーブフロントを実行する。他の実施形態又は演算のモードでは、SIMDユニット138は、ウェーブフロントにおいてワークアイテムの異なるサブセットを並列に実行する。一例では、ウェーブフロントは、64個のワークアイテムを含み、SIMDユニット138は、16個のレーンを有する(各レーンは、単一のワークアイテムを実行するようなサイズとされたハードウェアの単位である)。この例では、SIMDユニット138は、16個のワークアイテムを同時に4回実行することによって、ウェーブフロントを実行する。
1つ以上のウェーブフロントが「ワークグループ」に含まれ、「ワークグループ」は、同一のプログラムを実行するように指定されたワークアイテムの集合を含む。アプリケーション又は他のエンティティ(ホスト)は、シェーダプログラムがアクセラレーテッド処理デバイス116によって実行されることを要求し、「サイズ」(ワークアイテムの数)を規定し、コマンドプロセッサ136は、そのワークを実行するための1つ以上のワークグループを生成する。ワークグループの数、各ワークグループにおけるウェーブフロントの数、及び、各ウェーブフロントにおけるワークアイテムの数は、ホストによって要求されたワークのサイズに相関付けられる。いくつかの実施形態では、ホストは、ワークを実行するための特定の要求について、各ワークグループにおけるワークアイテムの数を規定してもよく、この規定は、ワークを実行するためにコマンドプロセッサ136によって生成されるワークグループの数を示す。上述したように、コマンドプロセッサ136は、1つ以上の計算ユニット132にワークグループをディスパッチし、1つ以上の計算ユニット132は、ワークグループを完了するように、適切な数のウェーブフロントを実行する。
計算ユニット132によって与えられる並列性は、画素値計算、頂点変換及び他のグラフィックス演算等のグラフィック関連演算に適切である。よって、いくつかの例では、プロセッサ102からのグラフィック処理コマンドを受け付けるグラフィックスパイプライン134は、並列実行のために、計算ユニット132に計算タスクを提供する。
いくつかの実施形態では、アクセラレーテッド処理デバイス116は、レイトレーシングを実装し、レイトレーシングは、シミュレートされた光線とシーン内のオブジェクトとの間の交差について試験することによって、3Dシーンをレンダリングする技術である。レイトレーシングに関与するワークの多くは、計算ユニット132におけるSIMDユニット138上で実行されるプログラム可能シェーダプログラムによって実行される。本明細書で示すいくつかの教示が、APD116上で実行されるレイトレーシングワークのコンテキストにおいて説明されるが、本明細書で示す様々な教示が、レイトレーシングワークロード以外のワークロードにおいて適用されてもよいことを理解されたい。
図3は、一例による、レイトレーシング技術を使用してグラフィックスをレンダリングするレイトレーシングパイプライン300を示す図である。レイトレーシングパイプライン300は、レイトレーシングを利用してシーンをレンダリングすることに関与する演算及びエンティティの概要を提供する。レイ生成シェーダ(ray generation shader)302、任意ヒットシェーダ(any hit shader)306、最近ヒットシェーダ(closest hit shader)310、及び、ミスシェーダ(miss shader)312は、SIMDユニット138において実行するシェーダプログラムによってその機能が実行されるレイトレーシングパイプラインステージを表すシェーダ実装ステージである。各々の特定のシェーダ実装ステージにおける特定のシェーダプログラムの何れかは、アプリケーション提供コード(すなわち、アプリケーションコンパイラによって事前コンパイルされ、及び/又は、ドライバ122によってコンパイルされた、アプリケーション開発者によって提供されるコード)によって定義される。レイトレースステージ304は、レイが三角形にヒットするかどうかを判別するように、レイ交差試験を実行する。レイトレースステージ304は、SIMDユニット138において実行するシェーダプログラムによって、又は、レイ交差試験を実行するように構成された固定機能ハードウェアによって実行されてもよい。
様々なプログラム可能シェーダ(レイ生成シェーダ302、任意ヒットシェーダ306、最近ヒットシェーダ310、ミスシェーダ312)は、SIMDユニット138上で実行するシェーダプログラムとして実装される。コマンドプロセッサ136は、レイトレーシングパイプライン300の実行を指揮する。特に、コマンドプロセッサ136は、レイトレーシングパイプライン300の様々なステージをAPD116上で実行させる命令を実行するプログラム可能ユニットである。更なる詳細が本明細書の他の箇所で提供される。
レイトレーシングパイプライン300は、以下のように動作する。1つ以上の計算ユニット132は、レイ生成シェーダ302を実行する。レイ生成シェーダ302は、1つ以上のレイ交差試験を実行するようにレイトレースステージ304に要求する。各レイ交差試験は、レイトレース演算についての発生元及び方向を定義し、レイトレース演算は、レイが1つ以上の三角形にヒットするかどうか、或いは、レイが何れの三角形にもヒットしないかどうかを判別する。
レイトレースステージ304は、レイ交差試験についてレイによって交差した1つ以上の三角形を識別し、又は、三角形が所定の距離までレイによって交差しない場合、レイが何れの三角形にもヒットしない(すなわち、レイが「外れる(misses)」)と判別する。レイトレースステージ304は、任意の技術的に実現可能な方式において実装されてもよい。一例では、レイトレースステージ304は、1つ以上の計算ユニット132上で実行するシェーダプログラムとして実装される。別の例では、レイトレースステージ304は、固定機能ハードウェアとして実装される。
レイトレースステージ304は、レイがヒットしたレイの発生元に最も近い三角形について最近ヒットシェーダ310の実行をトリガし、又は、三角形がヒットしなかった場合、ミスシェーダをトリガする。最近ヒットシェーダ310についての典型的な使用は、マテリアルについてのテキスチャに基づいて、マテリアルを色付けすることである。ミスシェーダ312についての典型的な使用は、スカイボックスによって設定された色により画素を色付けすることである。最近ヒットシェーダ310及びミスシェーダ312について定義されたシェーダプログラムが、画素を色付けし、及び/又は、他の演算を実行するための広範囲の技術を実装してもよいことを理解されたい。
レイ生成シェーダ302がレイを生成する典型的な様式は、後方レイトレーシングと呼ばれる技術によるものである。後方レイトレーシングでは、カメラに対応するポイントにおいて発生元を有するレイを生成する。スクリーンに対応するように定義された平面にレイが交差するポイントは、レイを判別するためにその色が使用されているスクリーン上の画素を定義する。レイがオブジェクトにヒットする場合、画素が最近ヒットシェーダ310に基づいて色付けされる。レイがオブジェクトにヒットしない場合、画素がミスシェーダ312に基づいて色付けされる。複数のレイが画素毎に投じられてもよく、画素の最終的な色は、画素のレイの各々について判別された色の何らかの組み合わせ(例えば、平均)によって判別される。任意の特定のレイ生成シェーダ302(又は、任意の他のシェーダ)は、レイと三角形との間の任意のヒットについて、かかるヒットが最近のヒットでない場合であっても、任意ヒットシェーダ306が実行されることになると規定してもよい。
最近ヒットシェーダ310及び/又はミスシェーダ312は、レイ試験ポイントにおいて、レイトレーシングパイプライン300に入射するそれら自身のレイを生成する(spawn)ことが可能である。それらのレイは、あらゆる目的に使用されてもよい。1つの一般的な使用は、環境的照明又は環境的反射を実装することである。一例では、最近ヒットシェーダ310が呼び出される場合、最近ヒットシェーダ310は、様々な方向にレイを引き起こす。引き起こされたレイによってヒットされた各オブジェクト又は光について、最近ヒットシェーダ310は、レイを引き起こした最近ヒットシェーダ310に対応する画素に、ヒット位置における照明強度及び色を追加する。シーンをレンダリングするためにレイトレーシングパイプライン300の様々なコンポーネントを使用することができる様式のいくつかの例を説明してきたが、広範囲の技術の何れかが代わりに使用されてもよいことを理解されたい。
最近ヒットシェーダステージ310、ミスシェーダステージ312又は任意ヒットシェーダステージ306について説明した何れかのシェーダプログラムが、レイ生成ステージ302について説明したシェーダプログラムによって実行されるものとして、本明細書において他に説明される任意の演算を実装することができることを理解されたい。例えば、レイトレースステージ304を試験するためのレイ試験ポイントに提供されることになる新たなレイを引き起こすことに加えて、このようなシェーダプログラムは、ミス又はヒットがトレースする追加のレイを引き起こすかどうか(レイ試験ポイントにおいて再度開始して)、任意のそのような追加のレイについて何れのシェーダプログラムを実行するか、このような追加のシェーダプログラム実行によって生成された色値及び/又は光度値をどのように組み合わせるか、並びに、レイ生成シェーダ302によって実行される任意の他の演算を規定してもよい。
シェーダプログラムは、APD116上で「カーネル」として起動される。カーネルは、特定のシェーダプログラム(例えば、ステッチされたシェーダプログラム)と共に、カーネルの一部として実行されるワークアイテムの数を規定する。スケジューラ136は、カーネルをワークグループに分解し、実行のために1つ以上の計算ユニット132にワークグループを割り当てる。カーネルのワークグループは、実行を開始し、それらの命令を実行し、次いで、実行を終結する。ワークグループは、計算ユニット132内で1つ以上のウェーブフロントとして実行する。ウェーブフロントは、同時に実行する複数のワークアイテムとして、SIMDユニット138上で実行する。
各ウェーブフロントは、単一命令多重データ(SIMD)方式において同時に実行するワークアイテムを含む。より具体的には、SIMDユニット138は、複数のワークアイテムについてのプログラム実行を制御するために単一の命令ポインタが使用され、したがって、複数の命令を同時に実行することができる方式においてシェーダプログラムを実行する。一例では、ウェーブフロントの4個のワークアイテムは、SIMDユニット上で実行する。実行制御フローの一部は、以下の擬似コードに示されるセクションにおいて開始する。
Figure 2022539951000002
第1の命令は、r2の値をr3の値に追加し、結果をr1に記憶する。第2の命令は、r1の値をr5に追加し、結果をr4に記憶する。第3の命令は、r4の値を、r6で規定されたアドレスに記憶する。レーン毎に一度、複数の加算、乗算及び記憶が同時に実行されるように、この擬似コードを実行するウェーブフロントのレーンが同時に実行する。「r1」~「r6」は、レジスタ名を表す。
制御フローがSIMDユニット138においてレーンに亘って分岐する可能性があり、よって、ウェーブフロントのワークアイテムに亘って分岐する可能性がある。より具体的には、いくつかの命令は、特定の変数の値に基づいて、命令ポインタを修正する。一例では、条件付き分岐は、そのジャンプターゲットが条件の評価の結果に基づいている命令である。別の例では、ジャンプは、変数において規定されたアドレスをターゲットとしてもよい。制御フローがこの方式において分岐するとき、SIMDユニット138は、少なくとも1つのレーンが実行することになる、とり得るパスの各々を直列化する。以下の例の擬似コードは、分岐する制御フローを結果としてもたらすことがある状況を示す。
Figure 2022539951000003
表2では、各レーンは、5の値をr2に追加し、結果をr1に記憶する、add r1、r2、5の命令を実行する。blz命令は、r1の値がゼロ未満である場合に分岐する条件付き分岐である。r1の値がゼロよりも大きい場合、制御フローは、いくつかの命令、次いで、「reconverge」ラベルへのジャンプ命令を含む、section 1を通る。条件付き分岐を再度参照すると、r1の値がゼロ未満である場合、制御フローは、ラベルLESS_THAN_ZEROに進み、section 2が実行される。ラベル「RECONVERGE」において、制御フローが再収束(reconverges)する。
図示した第1の命令が実行されたときにウェーブフロントにおいて実行する第1のレーンがr2に記憶された値-10を有していた場合、そのレーンについてのレジスタr1は、その第1の命令の後に値-5を記憶し、それは、第1のレーンに、「LESS_THAN_ZERO」においてsection 2を実行させる。第1の命令が実行されたときに同一のウェーブフロントにおいて実行する第2のレーンがr2に値1を有していた場合、そのレーンについてのレジスタr1は、値6を記憶し、それは、そのレーンに分岐させず、section 1を実行させない。異なるレーンによるsection 1及びsection 2の実行は、各々のセクションを直列に実行することによって達成されると共に、特定のセクションを実行しないレーンがスイッチオフされる。より具体的には、分岐は、SIMDユニット138に、第2のレーンについてsection 1を実行させると共に、第1のレーンがスイッチオフされ、次いで、第1のレーンについてsection 2を実行させると共に、第2のレーンがスイッチオフされ、他に同時に実行することができる複数のレーンがなおも直列化されることを理由に、それは、処理の効率性を下げる。
分岐する制御フローの別の例が表3に示される。
Figure 2022539951000004
表3の例では、各レーンは、三角形交差を検出するようにレイトレースを実行する。次いで、各レーンは、交差した三角形のマテリアルを識別し、識別されたマテリアルについてのマテリアルシェーダのアドレスをレジスタr1に記憶する。次いで、各レーンは、r1に記憶されたアドレスにジャンプする。それらのアドレスは、示される様々なマテリアルシェーダ(「MATERIAL_SHADER_1」、「MATERIAL_SHADER_2」等)であってもよい。マテリアルシェーダを実行した後、レーンは、「end_material_shaders」にジャンプする。各レーンが異なるマテリアルシェーダを有する三角形にヒットする場合、それらのマテリアルシェーダの各々が直列化され、全体的な非並列化(deparallelization)を表す、ウェーブフロントにおけるレーンの数に等しいスローダウンを結果としてもたらす。マテリアルシェーダが、三角形に交差する(例えば、最近ヒットシェーダステージにおいて)レイについての色を提供するように実行されるレイトレーシング、又は、三角形に外れ、よって、スカイボックスによって色付けされる(例えば、ミスステージにおいて)レイトレーシングについて使用されるコードのセクションであることに留意されたい。
いくつかの例では、SIMDプロセッサ上で、分岐命令が存在するポイントは、「分岐ポイント」である。分岐ポイントにおける分岐は、1つ以上の分岐ターゲットを指す。固定ターゲットを有する分岐は、単一の分岐ターゲットを有し、可変ターゲットを有する分岐は、複数の分岐ターゲットを有してもよい。異なる分岐パスを通ること(taking different branch paths)に起因して分岐したレーンが必然的に再収束するポイントである再収束ポイントも存在する。分岐ターゲットにおいて開始する命令のシーケンスは、本明細書では「通過パス(taken path)」と呼ばれる。条件付き分岐の直後の命令(「通過していないポイント(not-taken point)」)において開始する命令のシーケンスは、「通過していないパス(not-taken path)」と呼ばれる。通過パス及び通過していないパスは、まとめて「コードパス(code paths)」と呼ばれる。各コードパスは、分岐ターゲット又は通過していないパスから再収束ポイント又は分岐ポイントまで広がる。基本的に、各コードパスは、その中でそのコードパスを実行するレーンの組み合わせを変更することができない(変更は分岐又は再収束に起因して発生する)命令のシーケンスを定義する。
分岐を含む命令のシーケンスを実行するために、SIMDプロセッサは、レーン毎に分岐命令を評価し、その結果に基づいて、分岐から到達可能なコードパス毎に実行ビットマスク内のビット値を設定する。ビットマスク内の各ビットは、実行されるウェーブフロントの1つのレーンに関連付けられる。ビットマスク内の1つのビット値(「1」等)は、対応するレーンがそのコードパスを実行することを示す。ビットマスク内の他のビット値(「0」等)は、対応するレーンがそのコードパスを実行しないことを示す。
異なるコードパスについてのビットマスクを決定した後、SIMDプロセッサは、少なくとも1つのレーンが実行する全てのコードパスが実際に実行されるまで、必要に応じて命令ポインタを進め又は修正する。レーンがコードパスを実行しないことをビットマスクが示すコードパスについて、SIMDプロセッサは、そのコードパスをスキップするように命令ポインタを修正する。概して、必要に応じて命令ポインタを修正することは、少なくとも1つのレーンによって実行される1つのコードパスの最後の命令のアドレスから、少なくとも1つのレーンによって実行される別のコードパスのアドレスに命令ポインタを修正することを含む。そのような修正は、実行される2つのコードパスがメモリ内に直列にレイアウトされる場合に命令ポインタを単に増分することを含んでもよく、又は、実行されるコードパスの第1の命令のアドレスに命令ポインタを設定することによって、命令ポインタを単に増分すること以外の方法で命令ポインタが修正されることを意味する「真の分岐」を含んでもよい。
図4は、一例による、分岐する制御フローから結果として生じる直列化を示す図である。表400は、「収束セクション」、「F1」、「F2」、「F3」及び「F4」とリスト化されたいくつかのコードのセクションを示す。図では、時間が下方向に進む。所定のボックス内のマーク「O」は、レーンが所定の時間セクション内でコードのセクションを実行することを示す。収束セクションでは、レーン1~4の各々がそのセクションを共に実行することが想定される。よって、収束セクションの各レーンにはマーク「O」が存在する。収束セクションの結果に起因して、レーン1がF1を実行し、F2、F3又はF4を実行せず、レーン2がF2を実行し、F1、F3又はF4を実行せず、レーン3がF3を実行し、F1、F2又はF4を実行せず、レーン4がF4を実行し、F1、F2又はF3を実行しないと決定される。このように、F1、F2、F3及びF4の各々は、異なる時間セクションで実行されるため、レーン1~4を含むウェーブフロントの実行が非並列化される。より具体的には、第1の時間セクション内に、レーン1が関数F1を実行すると共に、レーン2~4がスイッチオフされる。第2の時間セクション内に、レーン2が関数F2を実行すると共に、レーン1,3~4がスイッチオフされる。第3の時間セクション内に、レーン3が関数F3を実行すると共に、レーン1~2,4がスイッチオフされる。第4の時間セクション内に、レーン4が関数F4を実行すると共に、レーン1~3がスイッチオフされる。
制御フロー分岐を減少させるために、計算ユニット132は、制御フロー分岐ポイントにおいて実行アイテムを再編成する。いくつかの実施形態では、「実行アイテム」という用語は、ワークアイテムを指す。他の実施形態では、「実行アイテム」という用語は、ワークアイテムよりも粒度の細かい実行のスレッドを指す。より具体的には、このような複数の論理スレッドを直列に実行することによって、単一のワークアイテム内で複数の論理スレッドを実行することができる。このような例では、複数の論理スレッドの各々が、実行アイテムである。分岐ポイントにおいて実行アイテムを再編成する2つの技術は、計算ユニット132がワークグループの異なるウェーブフロントに亘って実行アイテムを再編成する技術と、計算ユニット132がウェーブフロント内の実行アイテムを再編成する技術と、を含む。
図5Aは、一例による、ワークグループのウェーブフロントに亘って実行アイテムを再編成することによって、制御フロー分岐を減少させる技術を示す図である。この例では、ワークアイテムと実行アイテムとの間に1対1の対応関係が存在し、各ワークアイテムが1つの実行アイテムを実行する。図5Aのシナリオでは、1つのワークグループ502は、2つのウェーブフロント(ウェーブフロント1 504(1)及びウェーブフロント2 504(2))を含む。ワークグループ502は、単一の計算ユニット132において共に実行されるワークアイテムの集合である。ワークグループ502のワークアイテムは、ウェーブフロントとして共に実行される。ウェーブフロントは、例えば図4に関して説明したように、SIMDユニット138上で同時に実行されるワークアイテムを含む。ウェーブフロントのワークアイテムの全てをSIMDユニット138において同時に実行することが可能であるが、ウェーブフロントがSIMDユニット138におけるデータレーンの数よりも多い数のワークアイテムを含むことも可能である。典型的には、そのようなウェーブフロントは、SIMDユニット138におけるデータレーンの数の整数倍に等しい数のワークアイテムを含む。そのようなウェーブフロントの実行は、ウェーブフロントのワークアイテムのサブセットを直列に実行することによって行われる。一例では、ウェーブフロントは、64個のワークアイテムを含み、SIMDユニット138は、16個のデータレーンを含む。この例では、ウェーブフロントは、ワークアイテム1~16、次いでワークアイテム17~32、次いでワークアイテム33~48、次いでワークアイテム49~64を実行することによって実行される。
単一のワークグループの異なるウェーブフロントは、本明細書で説明する同時SIMD方式では実行しないが、そのようなウェーブフロントは、単一の計算ユニット132の異なるSIMDユニット138上で同時に実行することができる。しかしながら、ワークグループの1つの特徴は、計算ユニット132が異なるワークグループ間の同期をサポートすることである。「同期」とは、いくつかの条件が満たされるまで、バリアに関与する全てのウェーブフロントの実行を中断するバリアをウェーブフロントが実行するための能力を指す。ワークグループ内のウェーブフロントは、計算ユニット132内のローカルメモリを介して実行中に通信する能力も有する。
図5Aでは、表500は、ワークグループ502による実行を示す。図示したワークグループ502は、2つのウェーブフロント504を含む。ウェーブフロント1 504(1)は、ワークアイテム1~4を含み、ウェーブフロント2 504(2)は、ワークアイテム5~8を含む。命令ポインタは、所定の時点において各ウェーブフロント504が実行するコードのセクションを示す。時間は上から下に進む。表内のエントリのいくつかは、特定のワークアイテムによって実行される場合と実行されない場合があるコードの部分に対応する。それらの部分は、1つ以上のワークアイテムによって実行される関数F1~F4を含む。収束部分は、ウェーブフロント504の全てのワークアイテムによって実行される。「O」のマークは、特定のワークアイテムがコードのそれらの部分の1つを実行することを示し、空白の長方形は、特定のワークアイテムがコードのそれらの部分の1つを実行しないことを示す。
収束部分では、各ワークアイテムは、ワークアイテムが関数F1~F4の何れを実行するかを決定する。「関数」という用語は、ワークグループ502によって実行されるシェーダプログラムの部分を指す。バリア及び再編成ステージは、収束部分の後に実行する。バリア及び再編成ステージは、再編成が行われているウェーブフロント504毎にバリア及び再編成ステージが完了するまで、各ウェーブフロント504の実行を中断する。それらのウェーブフロント504は、図5Aの例では、ウェーブフロント1 504(1)及びウェーブフロント2 504(2)を含む。バリア及び再編成ステージは、ワークアイテムが関数F1~F4の何れを実行するかを示す収束部分の結果に基づいて、異なるウェーブフロント504に亘ってワークアイテムを再編成する。概して、再編成の目標は、ウェーブフロント間でワークアイテムを入れ替えることによって、ウェーブフロントについての分岐を減少させることである(この例では、実行される関数の総数が多いほど、分岐が多くなる)。概して、分岐を減少させることは、少なくとも1つのウェーブフロントにおける制御フローターゲットの数を減少させることによって達成される。
図示した例では、ウェーブフロント1 504(1)及びウェーブフロント2 504(2)の両方におけるワークアイテムは、関数F1~F4の全てを実行する。それらのワークアイテムを実行する計算ユニット132が関数F1~F4の各々を直列化する必要があるので、これは4倍の分岐と考えられる。再編成は、同一の制御フローターゲットに分岐するワークアイテムをグループ化することによって、ウェーブフロントにおいて実行する関数の総数を減少させる。この例の再編成は、関数F1及びF2を実行し、関数F3及びF4を実行しないように指定されたワークアイテムを有するウェーブフロント1 504(1)、並びに、関数F3及びF4を実行し、関数F1及びF2を実行しないように指定されたワークアイテムを有するウェーブフロント2 504(2)を結果としてもたらす。特に、ウェーブフロント1 504(1)は、各々がF1又はF2の何れかを実行し、F3又はF4を実行しないように指定されたワークアイテム1,2,5,6を含み、ウェーブフロント2 504(2)は、各々がF3又はF4の何れかを実行し、F1又はF2を実行しないように指定されたワークアイテム3,4,7,8を含む。この再編成により、各ウェーブフロント504は、2倍の分岐となる。各ウェーブフロント504によって実行されるコードは、依然として、特定のワークアイテムによって実行されない関数を含むが、このコードがスキップされ、それらの関数を実行しないワークアイテムを有するウェーブフロント504のためにそれらの関数の実行時間がほとんど費やされず、又は、全く費やされないことを結果としてもたらす。
特定の例の命令のシーケンスが示されているが、この特定のシーケンスは、ワークアイテム毎に実行する関数を決定することと、ワークアイテムによって関数を実行することと、を含むが、図5Aに関して説明した技術は、分岐する制御フローを結果としてもたらす任意の命令のシーケンスに適用されてもよいことを理解されたい。何れの状況においても、バリア及び再編成ステージは、ワークグループ502内の分岐する制御フローターゲットの総数を検査し、各ウェーブフロント504にできるだけ少ない数を割り当てることを試みる。制御フローターゲットは、分岐命令によりターゲットとされた命令ポインタアドレスによって、条件付き分岐が取られるか(taken)否かの決定によって、又は、任意の他の技術的に実現可能な手段を通じて識別されてもよい。各ウェーブフロント504にできるだけ少ない数の分岐する制御フローターゲットを割り当てることは、ターゲットに基づいてウェーブフロントをソートし、ソートされたリストを各ウェーブフロント504におけるワークアイテムの数で除算し、除算されたワークアイテムを異なるウェーブフロント504に割り当てることによって達成されてもよい。1つのウェーブフロント504から別のウェーブフロントにワークアイテムを移動させることは、各ウェーブフロント504に割り当てられたワークアイテムのリストを修正することによって、ワークアイテムが以前に実行していた位置からワークアイテムが移動されることになる位置にレジスタ値及びフラグ値等の実行状態データをコピーすることによって等のように、任意の技術的に実現可能な方法で達成されてもよい。
バリア及び再編成ステージは、例えば、ランタイム又はオフラインコンパイラによって挿入された命令によりソフトウェアで完全に実装されてもよいし、特殊ハードウェアサポートで実装されてもよい。一例では、実行アイテムの宛先及び再編成によるソートの何れか又は両方は、ワークグループ502の各ウェーブフロント504による特殊命令の実行によってトリガされる固定機能ハードウェアによって達成されてもよい。
図5Bは、図5Aに示された再編成無しで発生する実行を示す図である。上述したように、各ウェーブフロント502は、関数F1~F4を実行するワークアイテムを含む。よって、再編成無しでそれらの関数を実行すると、各関数が順に実行されるので、4倍の分岐である。
図6Aは、一例による、ウェーブフロント内で実行アイテムを再編成することによって制御フロー分岐を減少させる技術を示す図である。図示した例では、各ワークアイテムは、2つの実行アイテムを実行する。より具体的には、ウェーブフロントによって実行されるシェーダプログラムは、特定のワークロードの2つのインスタンス(2つの実行アイテム)が直列に実行されるように構成される。特定のワークアイテムの一部として実行される各実行アイテムは、特定の時間スロット内に実行される。もちろん、複数の異なるワークアイテムが同時に実行され得ることに留意されたい。よって、複数のワークアイテムは、それらのスロット1を同時に実行することができ、次いで、それらのスロット2を同時に実行することができる。レイトレーシングの例では、各スロットは、異なるレイに対応してもよい。この例では、シェーダプログラムは、レイが交差する三角形を決定する。シェーダプログラムは、交差した三角形のマテリアルに基づいて、マテリアルシェーダを実行する。ワークアイテムの各々のスロットは、異なるレイに対応するため、単一のワークアイテムの異なるスロットにおいて異なるマテリアルシェーダを実行することが可能である。
2つの実行アイテムのシーケンシャルパフォーマンスは、スロット間で入り替えが発生することを可能になり、分岐を減少させる。図6Aにおける例は、そのような入り替えを示す。この例では、ウェーブフロント602の4個のレーンは、2つの実行アイテムの各々を実行している。レーン1が実行アイテム1及び2を実行し、レーン2が実行アイテム3及び4を実行し、レーン3が実行アイテム5及び6を実行し、レーン4が実行アイテム7及び8を実行する。レーンは、各実行アイテムが関数F1、F2、F3及びF4の何れを実行するかを識別するために、収束部分を実行する。図示していないが、収束部分は、実行アイテム毎に1回実行されてもよい。
収束部分の結果が示され、実行アイテム1は、関数F1を実行することになり、実行アイテム2は、関数F2を実行することになり、実行アイテム3は、関数F2を実行することになり、実行アイテム4は、関数F3を実行することになり、実行アイテム5は、関数F1を実行することになり、実行アイテム6は、関数F4を実行することになり、実行アイテム7は、関数F3を実行することになり、実行アイテム8は、関数F4を実行することになる。スロット1では、実行される関数が合計で3つ存在し、スロット2では、実行される関数が合計で3つ存在する。これは、各スロットにおいて、3の分岐因子が存在することを意味する。再編成ステージにおいて、計算ユニット132は、分岐を減少させるために、異なるレーンに亘って実行アイテムを再編成する。特に、再編成ステージは、実行アイテムのターゲットによって実行アイテムをソートし、ソートされた実行アイテムを分割し、分割されソートされた実行アイテムをスロットに割り当てる。図示した例では、ソートされたターゲットは、F1(Item1)、F1(Item5)、F2(Item3)、F3(Item4)、F3(Item7)、F4(Item6)及びF4(Item8)である。再編成ステージは、関数F1及びF3を実行する実行アイテムをスロット1に割り当て、関数F2及びF4を実行する実行アイテムをスロット2に割り当てる。スロット1が実行され、次いで、スロット2が実行され、各々が2つの関数(2の分岐因子)を得る。特に、関数F1~F4は、図示したように直列に実行される。このシーケンスは、スロット毎に1回ずつ、2回発生する。スロット1では、アイテム1及び5は、関数F1を同時に実行し、アイテム4及び7は、関数F3を同時に実行する。スロット1では、レーンが関数F2及びF4を実行しないので、それらの関数がスキップされる。スロット2では、アイテム2及び3は、F2を同時に実行し、アイテム6及び8は、関数F4を同時に実行するし、関数F1及びF3がスキップされる。
特定の例の命令のシーケンスが示されるが、概して、以下のようにイントラウェーブフロント技術が実行される。コンパイラは、2つ以上の時間スロットを有するシェーダプログラムを生成し、各時間スロットは、異なる実行アイテムについて実行される特定のワークロードのコピーである。分岐する制御フローのポイントにおいて、コンパイラは、時間スロットにわたって実行アイテムを再編成するように、再編成コードを挿入する。再編成コードは、制御フロー宛先によって実行アイテムを実行アイテムグループにソートする。再編成コードは、各時間スロットにできるだけ少ないグループを割り当てることを試みる。この再編成は、少なくとも1つの時間スロットにおける分岐を減少させ、それによって、総実行時間を減少させる。
再編成ステージは、ソフトウェアによって(ランタイム若しくはオフラインコンパイラによりシェーダプログラムに挿入された命令によって)、又は、少なくとも部分的なハードウェアサポートにより実装されてもよい。一例では、シェーダプログラムは、特殊命令を実行し、特殊命令は、固定機能ハードウェアに、説明したような時間スロットに亘って実行アイテムを再編成させる。
時間スロットにおける関数が、各時間スロット内に直列に実行されるように示されているが、各関数が時間スロット毎に繰り返されることが可能であることに留意されたい。一例では、時間スロット1が関数1を実行し、次いで、時間スロット2が関数1を実行し、次いで、時間スロット1が関数2を実行し、時間スロット2が関数2を実行する、等である。本明細書の教示は、分岐する制御フローの特定のセクションの複数回の反復を実行する任意の技術に適用される。様々な例では、ランタイム又はオフラインコンパイラは、説明したような分岐する制御フローのセクションの複数回の分岐が実行されるように、シェーダプログラムを変換する。
図6Bは、図6Aの再編成無しに発生する実行を示す図である。特に、3つの異なる関数を実行するレーンが各時間スロットに存在するため、各時間スロットは3倍の分岐で実行され、それは、図6Aにおいて発生する実行と比較して低速(slow-down)である。
図7は、一例による、APD116において実行アイテムを再編成する方法700のフローチャートである。図1~図6のシステムに関して説明するが、任意の技術的に実現可能な順序で方法700のステップを実行するように構成された任意のシステムが、本開示の範囲内に収まることを理解されたい。
方法700は、ステップ702において開始し、計算ユニット132は、分岐する制御フローのポイントにおいて異なる実行アイテムについての制御フローターゲットを識別する。本明細書において他に説明したように、実行アイテムを再編成する2つの技術が開示される。第1の技術では、単一のウェーブフロント内の時間スロット間で実行アイテムが再編成される。この第1の技術は、本明細書で「イントラウェーブフロント技術」と呼ばれる。第2の技術では、実行アイテムは、ウェーブグループのウェーブフロントに亘って再編成される。この第2の技術は、本明細書で「インターウェーブフロント技術」と呼ばれる。何れの技術でも、実行中のシェーダプログラムは、分岐する制御フローのポイントに到達し、分岐する制御フローのポイントは、異なる分岐ターゲットを有することに起因して(例えば、異なる条件結果に起因して、又は、可変ターゲットジャンプ命令についての異なるアドレスターゲットに起因して)シェーダプログラムの異なる部分を異なる実行アイテムが実行するポイントである。ステップ702において、それらの異なる分岐ターゲットは、異なる実行アイテムについて識別される。いくつかの例では、特定の実行アイテムについての分岐ターゲットは、その実行アイテムについての宛先のアドレスを含む。他の例では、分岐ターゲットは、条件付き分岐が取られるか否か(すなわち、条件が満たされるかどうか)の指標を含む。
一例では、各実行アイテムは、レイによって交差された三角形のマテリアルを識別するために、レイトレース演算を実行する。このポイントにおいて、異なる実行アイテムは、異なるマテリアルを有する異なる三角形に直面する(encounter)ため、異なるマテリアルシェーダを実行する。現在のシェーダの実行を停止し、マテリアルシェーダを起動するのではなく、適切なインライン関数にジャンプすることによって、特定のマテリアルシェーダを実行することが達成されるように、異なるマテリアルシェーダが、実行されるシェーダプログラムにインラインされることに留意されたい。言い換えると、レイトレーシングパイプラインの少なくとも一部は、レイトレーシングパイプラインの異なるステージにおいてシェーダを含む単一の「モノリシック」シェーダプログラムと共に、異なるステージ間で実行フローを制御し、異なるステージ間でデータを移動させるための命令によって実装される。
ステップ704において、計算ユニット132は、制御フローターゲットに基づいて、実行アイテムをソートする。分岐が可変ターゲットへのジャンプに基づく例では、制御フローターゲットは、ジャンプのターゲットである。分岐が条件付き分岐に基づく例では、制御フローターゲットは、条件の結果である。制御フローターゲットに基づいてソートすることは、同一の制御フローターゲットを有する実行アイテムが共にグループ化されるように実行アイテムをソートすることを含む。ソートの結果は、実行アイテムのソートされた順序を示すデータである。この例では、実行アイテム1~8が存在し、条件付き分岐を実行する。実行アイテム1、3、4、7は、分岐を取り、実行アイテム2、5、6、8は、分岐を取らない。ソートされた順序を示すデータは、実行アイテム1、3、4、7が第1のグループにあることと、実行アイテム2、5、6、8が第2のグループにあることを示す。
ステップ706において、計算ユニット132は、ソート演算に基づいて、実行アイテムを再編成する。実行アイテムが時間スロットに亘って再編成されるイントラウェーブフロント技術では、実行アイテムを再編成することは、ソートされた実行アイテムの各グループを特定の時間スロットに割り当てることを含む。上記の例では、実行アイテム1、3、4、7は、第1の時間スロットに割り当てられ、実行アイテム2、5、6、8は、第2の時間スロットに割り当てられる。本明細書において他に説明したように、時間スロットは、シェーダプログラムの直列に繰り返される部分の反復である。より具体的には、ウェーブフロント内で実行アイテムの再編成を可能にするために、シェーダプログラムの少なくともいくつかの部分は、2回または2回以上の反復において実行するように構成され、各反復は、異なる時間スロットに対応する。分岐が、特定の時間において実行されるコードの異なるセグメントの数に関連するので、複数の時間スロットを有することは、同一の制御フローターゲットを有するより多くの実行アイテムが同一の時間スロット内に実行されるように、時間スロット間での実行アイテムの再編成を可能にする。もちろん、ソートされた各グループにおける実行アイテムの数がウェーブフロントにおける実行アイテムの数と同一でない可能性がある。しかしながら、このシナリオでは、2つ以上のグループが特定の時間スロットに割り当てられる場合でも、ソートによって分岐が減少し、総実行時間が減少する。
いくつかの実施形態では、コンパイラは、シェーダプログラムへの時間スロット構築を導入する。コンパイラの一例は、例えば、ドライバ122の一部として実行するランタイムコンパイラである。コンパイラの別の例は、シェーダプログラムの実行をトリガするアプリケーションをコンパイルするアプリケーションコンパイラの一部として実行するオフラインコンパイラである。コンパイラは、シェーダプログラムの少なくとも一部を2つ以上の反復(時間スロットごとに1回の反復)で実行させることによって、時間スロット構造を導入する。反復毎に、異なる実行アイテムは、シェーダプログラムの一部を実行する。さらに、時間スロットの目的が、異なる制御フローパスを取る異なる実行アイテムから結果として生じる制御フロー分岐の減少を可能にすることであるので、各反復は、とり得る分岐パスの何れかを選択することが可能である(各実行アイテムがそのようなパスを1つしか取ることがでないとしても)。例えば、コードのとり得るセグメントの1つをターゲットとする可変ジャンプがあり、シェーダプログラムの所定の部分において実行されるコードの4個の異なるセグメントが存在する場合、実行アイテムは、各時間スロットで、コードのとり得るセグメントの何れかを実行する。分岐する制御フローは、依然として、所定の時間スロット内で発生することがあり、これは、分岐する制御フローについて通常であるように、異なるとり得る制御フローパスの各々を直列化するSIMDユニット138によって実装される。
インターウェーブフロント技術では、実行アイテムの再編成は、ウェーブフロントに亘って行われる。より具体的には、上述したデータをソートすることは、依然として、実行アイテムをグループ化するために使用される。しかしながら、単一のウェーブフロントにおいて時間スロットに亘って実行アイテムを再編成する代わりに、特定のウェーブフロントにグループが共に割り当てられる。上記の例では、各ウェーブフロントが4個のワークアイテムの幅を有する場合、実行アイテム1、3、4、7が第1のウェーブフロントに割り当てられ、実行アイテム2、5、6、8が第2のウェーブフロントに割り当てられる。イントラウェーブフロント技術と同様に、複数のグループが各ウェーブフロントに割り当てられてもよいが、それでも分岐が減少する。ステップ708において、シェーダプログラムは、再編成された実行アイテムにより、分岐する制御フローのポイントを過ぎて実行する。
本明細書における開示に基づいて、多数の変形が可能であることが理解されたい。特徴及び要素は、特定の組み合わせで上述されているが、各特徴又は要素は、他の特徴及び要素無し単独で使用されてもよいし、他の特徴及び要素を伴う若しくは伴わない様々な組み合わせで使用されてもよい。一例では、技術がSIMDプロセッサのコンテキストにおいて説明されているが、その技術は、複数命令多重データ(MIMD)プロセッサについても使用されてもよい。別の例では、ソートは、実行されるコードセクションに基づいて実行されるように記載されているが、代わりに、レーンがフェッチするテキスチャ又はレーンに関連するレイの方向等の他の基準に基づいてソートすることも可能である。そのような基準に基づいてソートすることは、何れのコードセクションがレーンによって実行されるかに基づいてソートすることに直接関連しない。しかしながら、そのようなソートは、同様の実行フローを有するレーンを共にグループ化する可能性がより高い。例えば、同様のレイ方向を有するレーンが同一の三角形にヒットし、よって、同一のマテリアルシェーダを実行する可能性がある。また、同一のテキスチャをフェッチすることが、レーンが同一のシェーダ(例えば、マテリアルシェーダ)を実行することを示すことがあるので、同一のテキスチャをフェッチするレーンが同様の命令のシーケンスを実行する可能性がある。
図に示され、本明細書で説明した様々な機能ユニット(限定されないが、プロセッサ102、入力ドライバ112、入力デバイス108、出力ドライバ114、出力デバイス110、アクセラレーテッド処理デバイス116、スケジューラ136、グラフィックスプロセッシングパイプライン134、計算ユニット132、SIMDユニット138、レイトレーシングパイプライン300、レイ生成シェーダ302、レイトレースステージ304、任意ヒットシェーダ306、ミスシェーダ312、又は、最近ヒットシェーダ310を含む)は、汎用コンピュータ、プロセッサ又はプロセッサコアとして実装されてもよいし、汎用コンピュータ、プロセッサ又はプロセッサコアによって実行可能な非一時的コンピュータ可読媒体若しくは別の媒体に記憶されたプログラム、ソフトウェア、ファームウェアとして実装されてもよい。提供する方法は、汎用コンピュータ、プロセッサ又はプロセッサコアにおいて実施されてもよい。適切なプロセッサは、例として、汎用プロセッサ、特殊目的プロセッサ、従来のプロセッサ、デジタルシグナルプロセッサ(DSP)、複数のマイクロプロセッサ、DSPコアに関連する1つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)回路、他のタイプの集積回路(IC)、及び/又は、状態機械を含む。このようなプロセッサは、処理されたハードウェア記述言語(HDL)命令の結果及びネットリストを含む他の中間データを使用して製造プロセスを構成することによって製造されてもよい(このような命令は、コンピュータ可読媒体に記憶されることが可能である)。このような処理の結果は、マスクワークであってもよく、マスクワークは、半導体製造プロセスにおいて、実施形態の態様を実施するプロセッサを製造するために使用される。
本明細書で提供する方法又はフローチャートは、汎用コンピュータ又はプロセッサによる実行のために非一時的なコンピュータ可読記憶媒体に組み込まれたコンピュータプログラム、ソフトウェア、ファームウェアにおいて実装されてもよい。非一時的なコンピュータ可読記憶媒体の例は、例えばリードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、レジスタ、キャッシュメモリ、半導体メモリデバイス、内蔵ハードディスク及びリムーバブルディスク等の磁気媒体、磁気光学媒体、例えばCD-ROMディスク及びデジタル多用途ディスク(DVD)等の光学媒体を含む。

Claims (20)

  1. 単一命令多重データプロセッサにおいて制御フローの分岐を減少させる方法であって、
    分岐する制御フローのポイントにおいて、異なる実行アイテムの制御フローターゲットを識別することと、
    前記実行アイテムをソートして、ソートされた実行アイテムグループを生成することと、
    前記ソートされた実行アイテムグループに基づいて、前記実行アイテムを再編成することと、
    前記再編成された実行アイテムを、前記分岐する制御フローのポイントの後に実行することと、を含む、
    方法。
  2. 前記異なる実行アイテムの制御フローターゲットを識別することは、前記異なる実行アイテムが分岐を取るか否かを識別することを含む、
    請求項1の方法。
  3. 前記異なる実行アイテムの制御フローターゲットを識別することは、ジャンプのターゲットアドレスを識別することを含む、
    請求項1の方法。
  4. 前記実行アイテムをソートすることは、同一の制御フローターゲットを有する実行アイテムを前記実行アイテムグループにグループ化することを含む、
    請求項1の方法。
  5. 前記再編成することは、ワークグループのウェーブフロントに亘って実行アイテムを再編成するインターウェーブフロント技術を含む、
    請求項1の方法。
  6. 前記ソートに基づいて前記実行アイテムを再編成することは、実行アイテムグループを前記ワークグループの前記ウェーブフロントに割り当てることを含む、
    請求項5の方法。
  7. 前記再編成することは、ウェーブフロントの時間スロットに亘って実行アイテムを再編成するイントラウェーブフロント技術を含む、
    請求項1の方法。
  8. 前記ソートに基づいて前記実行アイテムを再編成することは、実行アイテムグループを前記ウェーブフロントの前記時間スロットに割り当てることを含む、
    請求項7の方法。
  9. コンパイラが、前記ソートすることと前記再編成することとを実施する命令をシェーダプログラムに追加することを更に含む、
    請求項1の方法。
  10. 単一命令多重データ(SIMD)プロセッサにおいて制御フローの分岐を減少させるデバイスであって、
    シェーダプログラムを記憶するように構成されたメモリと、
    複数の実行アイテムで前記シェーダプログラムを実行するように構成されたSIMDプロセッサと、を備え、
    前記SIMDプロセッサは、
    分岐する制御フローのポイントにおいて、前記複数の実行アイテムの異なる実行アイテムの制御フローターゲットを識別することと、
    前記実行アイテムをソートして、ソートされた実行アイテムグループを生成することと、
    前記ソートされた実行アイテムグループに基づいて、前記実行アイテムを再編成することと、
    前記再編成された実行アイテムを、前記分岐する制御フローのポイントの後に実行することと、
    を行うように構成されている、
    デバイス。
  11. 前記異なる実行アイテムの制御フローターゲットを識別することは、前記異なる実行アイテムが分岐を取るか否かを識別することを含む、
    請求項10のデバイス。
  12. 前記異なる実行アイテムの制御フローターゲットを識別することは、ジャンプのターゲットアドレスを識別することを含む、
    請求項10のデバイス。
  13. 前記実行アイテムをソートすることは、前記同一の制御フローターゲットを有する実行アイテムを前記実行アイテムグループにグループ化することを含む、
    請求項10のデバイス。
  14. 前記再編成することは、ワークグループのウェーブフロントに亘って実行アイテムを再編成するインターウェーブフロント技術を含む、
    請求項10のデバイス。
  15. 前記ソートに基づいて前記実行アイテムを再編成することは、実行アイテムグループを前記ワークグループの前記ウェーブフロントに割り当てることを含む、
    請求項14のデバイス。
  16. 前記再編成することは、ウェーブフロントの時間スロットに亘って実行アイテムを再編成するイントラウェーブフロント技術を含む、
    請求項10のデバイス。
  17. 前記ソートに基づいて前記実行アイテムを再編成することは、前記ウェーブフロントの前記時間スロットに実行アイテムグループを割り当てることを含む、請求項16に記載のデバイス。
  18. 命令を記憶するコンピュータ可読記憶媒体であって、
    前記命令は、プロセッサによって実行されると、
    分岐する制御フローのポイントにおいて、異なる実行アイテムの制御フローターゲットを識別することと、
    前記実行アイテムをソートして、ソートされた実行アイテムグループを生成することと、
    前記ソートされた実行アイテムグループに基づいて、前記実行アイテムを再編成することと、
    前記再編成された実行アイテムを、前記分岐する制御フローのポイントの後に実行することと、
    によって、単一命令多重データ(SIMD)プロセッサにおいて制御フローの分岐を減少させることを前記プロセッサに行わせる、
    コンピュータ可読記憶媒体。
  19. 前記異なる実行アイテムの制御フローターゲットを識別することは、前記異なる実行アイテムが分岐を取るか否かを識別することを含む、
    請求項18のコンピュータ可読記憶媒体。
  20. 前記異なる実行アイテムの制御フローターゲットを識別することは、ジャンプのターゲットアドレスを識別することを含む、
    請求項18のコンピュータ可読記憶媒体。
JP2021570323A 2019-06-28 2020-05-07 減少した分岐をソートする計算ユニット Pending JP2022539951A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/457,873 2019-06-28
US16/457,873 US20200409695A1 (en) 2019-06-28 2019-06-28 Compute unit sorting for reduced divergence
PCT/US2020/031896 WO2020263425A1 (en) 2019-06-28 2020-05-07 Compute unit sorting for reduced divergence

Publications (1)

Publication Number Publication Date
JP2022539951A true JP2022539951A (ja) 2022-09-14

Family

ID=74044478

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021570323A Pending JP2022539951A (ja) 2019-06-28 2020-05-07 減少した分岐をソートする計算ユニット

Country Status (6)

Country Link
US (1) US20200409695A1 (ja)
EP (1) EP3991031A4 (ja)
JP (1) JP2022539951A (ja)
KR (1) KR20220027154A (ja)
CN (1) CN114096949A (ja)
WO (1) WO2020263425A1 (ja)

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100064291A1 (en) * 2008-09-05 2010-03-11 Nvidia Corporation System and Method for Reducing Execution Divergence in Parallel Processing Architectures
US9606808B2 (en) * 2012-01-11 2017-03-28 Nvidia Corporation Method and system for resolving thread divergences
US9424099B2 (en) * 2012-06-01 2016-08-23 Advanced Micro Devices, Inc. Method and system for synchronization of workitems with divergent control flow
US9229721B2 (en) * 2012-09-10 2016-01-05 Qualcomm Incorporated Executing subroutines in a multi-threaded processing system
US9354892B2 (en) * 2012-11-29 2016-05-31 Advanced Micro Devices, Inc. Creating SIMD efficient code by transferring register state through common memory
KR102102166B1 (ko) * 2013-04-22 2020-04-21 삼성전자 주식회사 심드 구조 기반의 쓰레드 분기 관리 장치 및 방법
US9652284B2 (en) 2013-10-01 2017-05-16 Qualcomm Incorporated GPU divergence barrier
US9898287B2 (en) * 2015-02-13 2018-02-20 Advanced Micro Devices, Inc. Dynamic wavefront creation for processing units using a hybrid compactor

Also Published As

Publication number Publication date
KR20220027154A (ko) 2022-03-07
CN114096949A (zh) 2022-02-25
WO2020263425A1 (en) 2020-12-30
US20200409695A1 (en) 2020-12-31
EP3991031A1 (en) 2022-05-04
EP3991031A4 (en) 2023-07-26

Similar Documents

Publication Publication Date Title
US11488343B2 (en) Mechanism for supporting discard functionality in a ray tracing context
US8286198B2 (en) Application programming interfaces for data parallel computing on multiple processors
JP2023532434A (ja) レイトレーシングのための早期カリング
WO2016028482A1 (en) Render target command reordering in graphics processing
US11055895B2 (en) Shader merge for reduced divergence
US11321903B2 (en) Bounding volume hierarchy compression
US20240087223A1 (en) Overlay trees for ray tracing
JP2023516982A (ja) 光線追跡マルチサンプルアンチエイリアシング
JP2023516983A (ja) 部分的に常駐する境界ボリューム階層
US11748935B2 (en) Bounding volume hierarchy traversal
US20220198739A1 (en) Parallelization for raytracing
US11243752B2 (en) Multi-version shaders
US11521308B2 (en) Ambient occlusion using bounding volume hierarchy bounding box tests
US11481953B2 (en) Command processor based multi dispatch scheduler
US11954788B2 (en) Variable width bounding volume hierarchy nodes
KR20210091817A (ko) 레이 트레이싱에서 삼각형 및 박스 교차 테스트를 위한 병합된 데이터 경로
JP2022539951A (ja) 減少した分岐をソートする計算ユニット
KR20230097039A (ko) 바운딩 볼륨 계층구조 생성
US11908065B2 (en) Stack-based ray traversal with dynamic multiple-node iterations
US20240221283A1 (en) Emulating oriented bounding boxes in bounding volume hierarchies
US20240212259A1 (en) Traversing multiple regions of a bounding volume hierarchy in parallel
US20240203034A1 (en) Box splitting for bounding volume hierarchies
US20230351667A1 (en) Method and apparatus for performing high speed parallel locally order clustering for a bounding volume hierarchy
US20240112392A1 (en) Dynamic node traversal order for ray tracing
KR20230162023A (ko) 서브패스 인터리빙을 통한 동기화 프리 크로스 패스 비닝

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230501

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240329

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240409