JP2023542935A - 早期解放を伴うレジスタ圧縮 - Google Patents
早期解放を伴うレジスタ圧縮 Download PDFInfo
- Publication number
- JP2023542935A JP2023542935A JP2023518224A JP2023518224A JP2023542935A JP 2023542935 A JP2023542935 A JP 2023542935A JP 2023518224 A JP2023518224 A JP 2023518224A JP 2023518224 A JP2023518224 A JP 2023518224A JP 2023542935 A JP2023542935 A JP 2023542935A
- Authority
- JP
- Japan
- Prior art keywords
- registers
- wavefront
- instruction
- control unit
- processor
- 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
Links
- 230000006835 compression Effects 0.000 title abstract description 6
- 238000007906 compression Methods 0.000 title abstract description 6
- 238000000034 method Methods 0.000 claims abstract description 34
- 230000004044 response Effects 0.000 claims abstract description 11
- 238000004364 calculation method Methods 0.000 claims abstract description 5
- 230000000903 blocking effect Effects 0.000 claims 1
- 238000010586 diagram Methods 0.000 abstract description 16
- 238000012545 processing Methods 0.000 description 15
- 230000007246 mechanism Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30123—Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Multimedia (AREA)
Abstract
早期解放を伴うレジスタ圧縮を実装するためのシステム、装置及び方法が開示される。プロセッサは、少なくともコマンドプロセッサと、複数の計算ユニットと、複数のレジスタと、制御ユニットと、を含む。レジスタは、ウェーブフロントが計算ユニット上のコマンドプロセッサによって開始される場合に、制御ユニットによってウェーブフロントに静的に割り振られる。第1のウェーブフロントに以前に割り振られた第1のセットのレジスタがもはや必要でないと判定したことに応じて、第1のウェーブフロントは、レジスタの第1のセットを解放するための命令を実行する。制御ユニットは、実行された命令を検出し、第1のセットのレジスタを、他のウェーブフロントによって潜在的に使用されるためにレジスタの利用可能なプールに解放する。次いで、制御ユニットは、第1のウェーブフロントが依然としてアクティブである間に、第2のウェーブフロントのスレッドによる使用のためにレジスタの第1のセットを第2のウェーブフロントに割り振ることができる。【選択図】図8
Description
(関連技術の説明)
グラフィックス処理ユニット(Graphics Processing Unit、GPU)及び他のマルチスレッド処理ユニットは、通常、複数のデータセットに対して単一のプログラムの複数のインスタンスを同時に実行する複数の処理要素(プロセッサコア又は計算ユニットとも呼ばれる)を含む。インスタンスは、スレッド、ウェーブ又はウェーブフロントと呼ばれる。いくつかのウェーブが作成(又は生成)され、次いで、マルチスレッド処理ユニット内の各処理要素にディスパッチされる。処理ユニットは、何千ものスレッドが処理ユニット内のプログラムを同時に実行するように、何百もの処理要素を含むことができる。マルチスレッドGPUでは、スレッドがカーネルの異なるインスタンスを実行して、同時に又は並列に計算を実行する。マルチスレッド処理ユニット内で同時に実行されているスレッドは、処理ユニットのリソースの一部を共有する。共有リソースは、スレッドの状態情報を記憶するベクトル汎用レジスタ(vector general-purpose register、VGPR)、スレッドのデータを記憶するために使用されるローカルデータシェア(local data share、LDS)、ローカルキャッシュ階層とメモリとの間で情報を移動させるために利用可能な帯域幅等を含む。
グラフィックス処理ユニット(Graphics Processing Unit、GPU)及び他のマルチスレッド処理ユニットは、通常、複数のデータセットに対して単一のプログラムの複数のインスタンスを同時に実行する複数の処理要素(プロセッサコア又は計算ユニットとも呼ばれる)を含む。インスタンスは、スレッド、ウェーブ又はウェーブフロントと呼ばれる。いくつかのウェーブが作成(又は生成)され、次いで、マルチスレッド処理ユニット内の各処理要素にディスパッチされる。処理ユニットは、何千ものスレッドが処理ユニット内のプログラムを同時に実行するように、何百もの処理要素を含むことができる。マルチスレッドGPUでは、スレッドがカーネルの異なるインスタンスを実行して、同時に又は並列に計算を実行する。マルチスレッド処理ユニット内で同時に実行されているスレッドは、処理ユニットのリソースの一部を共有する。共有リソースは、スレッドの状態情報を記憶するベクトル汎用レジスタ(vector general-purpose register、VGPR)、スレッドのデータを記憶するために使用されるローカルデータシェア(local data share、LDS)、ローカルキャッシュ階層とメモリとの間で情報を移動させるために利用可能な帯域幅等を含む。
スレッドに割り振られるレジスタの数は、通常、開始時に決定される。例えば、スレッドに割り振られるレジスタの数は、対応するカーネルのメタデータに含めることができる。スレッドによって必要とされるレジスタの数は、コンパイラによって、プログラマによって、実行時に又は他の方法で決定され得る。いくつかのレジスタをスレッドに静的に割り振ることに伴う問題は、利用可能なレジスタの数が限られており、スレッドがこの限られた数のレジスタをめぐって互いに競合することである。代替的に、スレッドは、割り振られたよりも少ないレジスタを使用してしまうことがある。そのような場合、他のスレッドによって使用されてしまう場合があるレジスタリソースは使用されないままになる。
本明細書に記載の方法及びメカニズムの利点は、添付の図面と併せて以下の説明を参照することによってよりよく理解され得る。
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者は、これらの具体的な詳細なしに様々な実施形態が実施され得ることを認識すべきである。いくつかの例では、本明細書に記載のアプローチを不明瞭にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令及び手法が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は必ずしも縮尺どおりに描かれているわけではないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
早期解放を伴うレジスタ圧縮を実装するための様々なシステム、装置及び方法が本明細書で開示される。一実施形態では、プロセッサは、少なくとも、コマンドプロセッサと、複数の計算ユニットと、複数のレジスタと、制御ユニットと、を含む。レジスタは、ウェーブフロントが計算ユニット上のコマンドプロセッサによって開始される場合に、制御ユニットによってウェーブフロントに静的に割り振られる。第1のウェーブフロントに以前に割り振られた第1のセットのレジスタがもはや必要でないと判定したことに応じて、第1のウェーブフロントは、命令を実行するか、又は、第1のセットのレジスタを解放することができるというメッセージを制御ユニットに送信する。制御ユニットはメッセージを受信し、第1のセットのレジスタをレジスタの利用可能なプールに解放して、他のウェーブフロントによって潜在的に使用されるようにする。例えば、制御ユニットは、第1のウェーブフロントが依然としてアクティブである間に、第2のウェーブフロントのスレッドによる使用のために第1のセットのレジスタを第2のウェーブフロントに割り振ることができる。
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入力/出力(input/output、I/O)インターフェース120と、バス125と、メモリコントローラ130と、ネットワークインターフェース135と、メモリデバイス140と、表示コントローラ150と、ディスプレイ155と、を含む。他の実施形態では、コンピューティングシステム100は、他の構成要素を含み、及び/又は、コンピューティングシステム100は、別の態様で構成される。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
一実施形態では、プロセッサ105Aは、中央処理ユニット(central processing unit、CPU)等の汎用プロセッサである。この実施形態では、プロセッサ105Aは、システム100内の他のプロセッサと通信するため、及び/又は、それらのプロセッサのうち1つ以上の演算を制御するためのドライバ110(例えば、グラフィックドライバ)を実行する。実施形態に応じて、ドライバ110は、ハードウェア、ソフトウェア及び/又はファームウェアの任意の好適な組み合わせを使用して実装することができることに留意されたい。一実施形態では、プロセッサ105Nは、高度に並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(digital signal processor、DSP)、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)、特定用途向け集積回路(application specific integrated circuit、ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。一実施形態では、プロセッサ105Nは、ディスプレイ155に送られるように表示コントローラ150にピクセルを提供するGPUである。
メモリコントローラ130は、プロセッサ105A~105Nによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ130は、プロセッサ105A~105Nから分離されているものとして示されているが、これは単に1つの可能な実施形態を表すことを理解されたい。他の実施形態では、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上の内部に埋め込むことができ、及び/又は、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上と同じ半導体ダイ上に位置することができる。メモリコントローラ130は、任意の数及びタイプのメモリデバイス140に結合される。メモリデバイス140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス140内のメモリのタイプは、ダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM)、スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(Ferroelectric Random Access Memory、FeRAM)等を含む。
I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(peripheral component interconnect、PCI)バス、PCI拡張(PCI-X)、PCIE(PCI Express)(PCIエクスプレス)バス、ギガビットイーサネット(登録商標)(gigabit Ethernet、GBE)バス、ユニバーサルシリアルバス(universal serial bus、USB))を表す。様々なタイプの周辺デバイス(図示省略)が、I/Oインターフェース120に結合される。そのような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、ネットワークインターフェースカード等が含まれるが、これらに限定されない。ネットワークインターフェース135は、ネットワークを介してネットワークメッセージを受信及び送信することができる。
様々な実施形態において、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム又はデバイスのうち何れかである。コンピューティングシステム100の構成要素の数は、実施形態ごとに変化することに留意されたい。例えば、他の実施形態では、図1に示される数よりも多い又は少ない各構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、図1に示されていない他の構成要素を含むことにも留意されたい。加えて、他の実施形態では、コンピューティングシステム100は、図1に示される以外の方法で構成される。
図2を参照すると、コンピューティングシステム200の別の実施形態のブロック図が示されている。一実施形態では、システム200は、GPU205と、システムメモリ225と、ローカルメモリ230と、を含む。また、システム200は、図を不明瞭にすることを避けるために示されていない他の構成要素を含み得る。GPU205は、少なくとも、コマンドプロセッサ235と、制御ロジック240と、ディスパッチユニット250と、計算ユニット255A~255Nと、メモリコントローラ220と、グローバルデータシェア270と、レベル1(L1)キャッシュ265と、レベル2(L2)キャッシュ260と、を含む。他の実施形態では、GPU205は、他の構成要素を含み、図示された構成要素のうち1つ以上を省略し、図2に1つのインスタンスのみが示されている場合であっても構成要素の複数のインスタンスを有し、及び/又は、他の適切な方法で編成される。一実施形態では、GPU205の回路は、(図1の)プロセッサ105Nに含まれる。
様々な実施形態において、コンピューティングシステム200は、様々なタイプのソフトウェアアプリケーションのうち何れかを実行する。所定のソフトウェアアプリケーションを実行することの一部として、コンピューティングシステム200のホストCPU(図示省略)は、GPU205上で実行される作業を開始する。一実施形態では、コマンドプロセッサ235は、ホストCPUからカーネルを受信し、コマンドプロセッサ235は、ディスパッチユニット250を使用して、対応するウェーブフロントを計算ユニット255A~255Nに発行する。通常、計算ユニット255Aのベクトル汎用レジスタ(VGPR)256等のレジスタは、計算ユニット255A~255N上で実行されるウェーブフロントに静的に割り振られる。しかしながら、いくつかのウェーブフロントは、それらのレジスタの全てを使用しない場合があり、一方で、他のウェーブフロントは、それらのレジスタを完全に利用し、より多くのレジスタが利用可能になるのを待っている。このシナリオを緩和するために、アクティブなウェーブフロントは、それらのレジスタの一部又は全部を、他のウェーブフロントに再割り振りされることになる未使用プールに解放する命令を実行することができる。これにより、計算ユニット255BのVGPR256、VGPR257及び計算ユニット255NのVGPR258が、計算ユニット255A~255Nによって実行されている様々なウェーブフロントによって、より効率的に使用されることが可能になる。VGPR256~258は、任意の数のVGPRを表すことに留意されたい。
図3を参照すると、グラフィックス処理ユニット(GPU)300の一実施形態のブロック図が示されている。一実施形態では、GPU300は、少なくともSIMD310A~310Nと、スケジューラユニット345と、命令バッファ355と、制御ユニット360と、を含む。GPU300は、図を不明瞭にすることを避けるために図3に示されていない他のロジックを含み得ることに留意されたい。他のプロセッサ(例えば、FPGA、ASIC、DSP)が、GPU300に示される回路を含み得ることにも留意されたい。
一実施形態では、GPU300は、任意の数のウェーブフロント上でカーネルの命令を実行する。これらの命令は、命令バッファ355に記憶され、スケジューラユニット345によってSIMD310A~310N上での実行のためにスケジュールされる。一実施形態では、各ウェーブフロントは、SIMD310A~310N内のレーン315A~315N、320A~320N、325A~325N上で実行されるいくつかのワークアイテムを含む。SIMD310A~310Nの各レーン315A~315N、320A~320N及び325A~325Nは、「実行ユニット」とも呼ばれ得る。
一実施形態では、GPU300は、いくつかのワークアイテムを有するウェーブフロントのための複数の命令を受信する。ワークアイテムがSIMD310A~310N上で実行される場合、各ワークアイテムには、ベクトル汎用レジスタ(VGPR)330A~330Nの対応する部分が割り当てられる。ワークアイテムが、ワークアイテムに割り当てられたいくつかのVGPR330A~330Nを解放することができる場合、ワークアイテムは、そのいくつかのVGPRを解放する命令を実行する。一実施形態では、制御ユニット360は、命令が実行されたという指標を受信し、制御ユニット360は、指標の受信に応じて、これらの解放されたVGPRを1つ以上のワークアイテムに再割り当てする。これにより、VGPRを解放したワークアイテムが依然としてアクティブである間に、他のワークアイテムがこれらのVGPRを使用することが可能になる。制御ユニット360は、SIMD310A~310Nの外部にあるものとして示されているが、これは単一の実施形態のみを表すことを理解されたい。他の実施形態では、制御ユニット360を他の場所に位置することができ、及び/又は、制御ユニット360を複数の異なる制御ユニットに分割することができる。例えば、別の実施形態では、別の制御ユニット360が各SIMD310A~310N内に位置する。
文字「N」は、本明細書において様々な構造の隣に表示される場合、その構造についての任意の数の要素(例えば、任意の数のSIMD310A~310N)を概して示すことを意味することに留意されたい。加えて、文字「N」を使用する図3内の異なる参照(例えば、SIMD310A~310N及びレーン315A~315N)は、等しい数の異なる要素が提供されることを示すように意図されていない(例えば、SIMD310A~310Nの数は、レーン315A~315Nの数と異なり得る)。
図4を参照すると、SIMDユニット400A上で実行しているウェーブフロント425A~425Bの一実施形態のブロック図が示されている。一実施形態では、SIMDユニット400Aは、任意の数のSIMDユニットと共に計算ユニット(例えば、図2の計算ユニット255A~255N)内に含まれる。図4に示すように、SIMDユニット400Aは、ウェーブフロント425A~425Bを実行している実行レーン420A~420Bを含む。2つの実行レーン420A~420BのみがSIMDユニット400Aに示されているが、これは単に例示の目的で示されていることを理解されたい。実行レーン420A~420Bは、任意の数のレーンを表す。また、図4には16個のVGPR440~455が示されているが、他の実施形態は、16以外の数のVGPRを含み得ることを理解されたい。
一実施形態では、VGPR440~447は、ウェーブフロント425Aが開始される場合にウェーブフロント425Aに割り振られ、VGPR448~455は、ウェーブフロント425Bが開始される場合にウェーブフロント425Bに割り振られる。一実施形態では、制御ユニット430は、VGPRへのアクセスを制御し、各ウェーブフロント425A~425Bがそのウェーブフロントに割り当てられたレジスタのみにアクセスすることを保証する。しかしながら、様々な実施形態では、1つのVGPRは、それに割り振られたレジスタの総数よりも少ない数を使用することがあり、別のウェーブフロントは、それに割り振られたレジスタの全てを使用し、追加のレジスタを使用できないことに起因して非効率的に動作することがある。そのような場合がウェーブフロント425A~425Bに関して図4に示されている。
図4に示すように、VGPR440~443はウェーブフロント425Aによってアクティブ(すなわち、使用中)であるが、VPGR444~447は非アクティブである(すなわち、使用されていない)。これは、VGPR440~443にわたって破線によって示され、VPGR444~447は、クリアな背景を有する。VGPR凡例(VGPR legend)460は、図4に示された実施形態に対するVGPRの異なる陰影付けの意味を示す。一実施形態では、レジスタのブロックが未使用であることをウェーブフロント425Aが検出すると、ウェーブフロント425Aは命令を実行し、このレジスタのブロックが解放されていて、別のウェーブフロントに再割り振りすることができることを制御ユニット430に通知する。図4に示す例では、未使用レジスタのこのブロックは、VPGR444~447を含む。別の実施形態では、レジスタ444~447のブロックが未使用であることを検出したことに応じて、ウェーブフロント425Aは、制御ユニット430に通知するために制御ユニット430にメッセージを送信する。レジスタ444~447のブロックが未使用であることを検出することは、コンパイラ、プログラマによって、又は、ウェーブフロント425A、制御ユニット430若しくは他の回路によってリアルタイムで実行することができる。例えば、デッドレジスタを識別するためのライブネス分析(liveness analysis)又は他の方法等のコンパイル技術が、レジスタ値がもはや必要とされず、レジスタが解放され得るときを判定するために使用されてもよい。いくつかの実施形態では、このコンパイルは、実行時にカーネル上で実行される。そのような場合、コンパイラは、レジスタ(又は複数のレジスタ)が必要又は所望に応じて解放され、再割り振りされ得ることを示す命令を挿入する。他の実施形態では、これらのコンパイル技術は、異なる時間に実行される。いくつかの実施形態では、コンパイラは、処理中により早くデッド状態になったものとして識別されたレジスタが割り振り範囲においてより早く配置されるようにコードをコンパイルする。このようにして、レジスタの範囲がより早く解放に利用可能になる確率が増加する。これら及び他の技術が既知であり、企図される。
制御ユニット430が、レジスタ444~447のブロックが未使用であるという通知を受信すると、制御ユニット430は、レジスタ444~447のこのブロックがもはやウェーブフロント425Aに割り当てられていないことを示すようにレジスタ割り振りマッピングテーブル435を更新する。更に、制御ユニット430は、レジスタ444~447のこのブロックを別のウェーブフロントに割り当てることができる。図4に示す例では、ウェーブフロント425Bに割り振られたレジスタの全てがアクティブである。ウェーブフロント425Bに割り振られたレジスタの全てがアクティブであることを検出すること、又は、このシナリオの指標若しくは通知を受信することに応じて、一実施形態では、制御ユニット430は、VPGR444~447をウェーブフロント425Bに再割り当てする。
図5を参照すると、SIMDユニット400B上で実行しているウェーブフロント425A~425Bの一実施形態のブロック図が示されている。図5の説明は、図4の説明の続きであることを意図している。したがって、SIMDユニット400Bは、ウェーブフロント425Aがアクティブのままである間にVGPR444~447がウェーブフロント425Aからウェーブフロント425Bに再割り当てされた後の時点における(図4の)SIMDユニット400Aを表すことが意図されている。また、図5に示す時点では、VGPR444~447は、ウェーブフロント425Bによって現在使用されている。これは、VGPR444~447を表すブロックの背景に破線で示されている。
図6を参照すると、ウェーブフロントによってレジスタの早期解放を実行するための方法600の一実施形態が示されている。説明のために、この実施形態におけるステップ及び図7のステップが順番に示されている。しかしながら、記載された方法の様々な実施形態において、記載された要素のうち1つ以上が、図示したものとは異なる順序で同時に実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書に記載の様々なシステム又は装置の何れも、方法600を実装するように構成されている。
プロセッサは、第1のウェーブフロントが依然としてアクティブである(すなわち、命令を実行している)間に、第1のウェーブフロントの第1のセットのレジスタ(例えば、VGPR)を解放するための条件を検出する(ブロック605)。一実施形態では、第1のセットのレジスタを解放するための条件は、終了を完了する前に、第1のウェーブフロントがメモリからの肯定応答(ack)を待つことである。別の実施形態では、第1のセットのレジスタを解放するための条件は、第1のウェーブフロントがその割り当てられたレジスタの一部分のみを使用することである。他の実施形態では、第1のセットのレジスタを解放するための他の条件が検出され得る。一実施形態では、第1のセットのレジスタは、第1のウェーブフロントに割り振られたレジスタの全体である。別の実施形態では、第1のセットのレジスタは、第1のウェーブフロントに割り振られたレジスタの一部である。
条件を検出することに応じて、計算ユニットは、第1のウェーブフロントが第1のセットのレジスタを解放してレジスタの未使用プールに戻すというメッセージを制御ユニットに送信する(ブロック610)。次いで、制御ユニットは、解放された第1のセットのレジスタを、他のウェーブフロントに利用可能であるものとしてマークする(ブロック615)。それに応じて、1つ以上の他のウェーブフロントは、第1のウェーブフロントが依然としてアクティブである間に、解放された第1のセットのレジスタを使用することができる(ブロック620)。ブロック620の後、方法600は終了する。
図7を参照すると、メモリからの肯定応答を待っている間にレジスタを解放するための方法700の一実施形態が示されている。ウェーブフロントは、1つ以上のメモリ書き込み動作を実行する(ブロック705)。実施形態に応じて、ウェーブフロントは、1~Nの任意の数のスレッドを含み、ここで、Nは、1より大きい正の整数である。次に、ウェーブフロントは、メモリ書き込み動作に関するメモリからの肯定応答(又は、略してack)を受信するのを待つ(ブロック710)。ackを待っている間に、ウェーブフロントは、メモリからの肯定応答を待つ以外の命令が更にあるかどうかを判定する(条件ブロック715)。
メモリからの肯定応答を待つ以外に、ウェーブフロントの命令がそれ以上ない場合(条件ブロック715、「いいえ」)、ウェーブフロントは、VGPR割り振り解除メッセージを制御ユニットに送信する(ブロック720)。一実施形態では、VGPR割り振り解除メッセージは、コンパイラによってウェーブフロント命令に挿入される。別の実施形態では、VGPR割り振り解除メッセージは、プログラマによって追加される。一実施形態では、VGPR割り振り解除メッセージは、全てのVGPRが割り振り解除されるべきであることを指定する。別の実施形態では、VGPR割り振り解除メッセージは、割り振り解除されるべきVGPRの1つ以上又はその範囲の識別情報を含む。例えば、この実施形態では、メッセージは、第1のレジスタ、オフセット及び/又は範囲の識別を含む。他の実施形態では、他のパラメータが、VGPR割り振り解除メッセージ内に含まれ得る。
VGPR割り振り解除メッセージの受信に応じて、制御ユニットは、VGPRを1つ以上の他のウェーブフロントに再割り当てする(ブロック725)。ブロック725の後、方法700は終了する。そうではなく、実行されるべきウェーブフロントの後続の命令がまだある場合(条件ブロック715、「はい」)、ウェーブフロントは、VGPR割り振り解除メッセージを送信することなく実行を継続する(ブロック730)。ブロック730の後、方法700は終了する。
図8を参照すると、早期レジスタ解放中にレジスタ圧縮を実行するための方法800の一実施形態が示されている。プロセッサは、スレッドがレジスタの一部の早期解放を開始するための条件が満たされたかどうかを判定する(ブロック805)。1つ以上の条件は、閾値数を超える非アクティブなレジスタを有すること、メモリからの肯定応答(ack)を待つこと、スレッドが特定の実行段階に達すること等を含むことができる。非アクティブなレジスタは、スレッドに割り振られているが、スレッドによって使用される値を記憶するために使用されていないレジスタを指す。この説明の目的で、レジスタの一部の早期解放を実行するための条件が満たされたと仮定する。
レジスタの一部の早期解放を実行するための条件が満たされたと判定したことに応じて、プロセッサは、スレッドのアクティブなレジスタを連続ブロックに圧縮することができるかどうかを判定する(ブロック810)。例えば、スレッドにレジスタ0~63が割り振られており、ほとんどのアクティブなレジスタがレジスタ0~31の範囲内にあるが、32~63の範囲内では少数のレジスタのみがアクティブである場合、これは、隣接するブロックが解放されて他のスレッドのためにレジスタプールに戻され得るように、レジスタが互いにより近くに移動され得ることを示す。
アクティブなレジスタを連続ブロックに圧縮することができる場合(条件ブロック815、「はい」)、スレッドは、1つ以上の移動命令を実行して、レジスタ範囲の比較的低い占有エリア内のアクティブなレジスタからレジスタ範囲の比較的高い占有エリア内のレジスタにデータ値を移動させる(ブロック820)。一実施形態では、アクティブ値は、レジスタ範囲の上位部分(例えば、上半分)内のレジスタからレジスタ範囲の下位部分(例えば、下半分)内のレジスタに移動される。別の実施形態では、アクティブ値は、レジスタ範囲の下位部分のレジスタからレジスタ範囲の上位部分のレジスタに移動される。
実施形態に応じて、条件ブロック815及びブロック820を実行する異なる方法を採用することができる。一実施形態では、コンパイラが、これらのステップを実行するために命令をスレッドのコードに挿入する。この実施形態では、コンパイラは、早期解放を実行するための条件を検出し、アクティブなレジスタが圧縮される必要があるかどうかを判定し、レジスタ圧縮を達成するためにレジスタを移動させるための移動命令を挿入する。別の実施形態では、プログラマが、ブロック815及び820を実行するための命令をスレッドのコードに挿入する。更なる実施形態では、ハードウェア内の回路がブロック815及び820を実行する。例えば、一実施形態では、スレッドのためのレジスタウィンドウは、レジスタ範囲の比較的高い占有エリアのみをカバーするように縮小される。この実施形態では、スレッドのためのレジスタウィンドウは、レジスタ範囲の比較的低い占有エリアをもはやカバーしないように縮小される。これにより、レジスタ範囲のこの比較的低い占有エリア内のレジスタへの今後のアクセスをメモリに向かわせる。例えば、一実施形態では、スレッドのレジスタウィンドウは、レジスタ0~127をカバーすることからレジスタ0~63のみをカバーすることに縮小される。また、条件ブロック815及びブロック820を実行するこれらの方法の任意の組み合わせを、単一の実施形態で使用することができる。また、条件ブロック815及びブロック820を実行する他の方法も可能であり、企図される。
ブロック820の後、スレッドは、レジスタ範囲の部分を解放してレジスタの未使用プールに戻す命令を実行する(ブロック825)。代替的に、ブロック825において、スレッドは、レジスタ範囲の部分を解放してレジスタの未使用プールに戻すために、メッセージを送信するか又は信号をアクティブにする。ブロック825の後、方法800は終了する。アクティブなレジスタを連続ブロックに圧縮することができない場合(条件ブロック815、「いいえ」)、スレッドは、複数の命令を実行して、レジスタ範囲の異なる部分を解放してレジスタの未使用プールに戻す(ブロック830)。代替的に、スレッドは、ブロック830において、レジスタ範囲の最大未使用部分を解放してレジスタの未使用プールに戻すために単一の命令を実行することができる。ブロック830の後、方法800は終了する。
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載の方法及び/又はメカニズムを実装する。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施形態では、そのようなプログラム命令は、高レベルプログラミング言語によって表される。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルされる。あるいは、ハードウェアの挙動又は設計を説明するプログラム命令が書かれる。そのようなプログラム命令は、C等の高レベルプログラミング言語によって表される。あるいは、Verilog等のハードウェア設計言語(hardware design language、HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に言えば、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
上記の実施形態は、実施形態の非限定的な例にすぎないことを強調しておきたい。上記の開示が十分に理解されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図されている。
Claims (20)
- プロセッサであって、
複数のレジスタと、
制御ユニットと、を備え、
前記制御ユニットは、
複数の計算ユニットのうち第1の計算ユニット上で開始されている第1のウェーブフロントにレジスタの第1のセットを割り当てることと、
前記第1の計算ユニット上で開始されている第2のウェーブフロントにレジスタの第2のセットを割り当てることと、
前記第1のウェーブフロントの1つ以上のスレッドがアクティブのままである間に第1の条件を検出したことに応じて、前記レジスタの第1のセットのうち1つ以上のレジスタを前記第1のウェーブフロントから前記第2のウェーブフロントに再割り当てすることであって、前記第2のウェーブフロントは、前記1つ以上のレジスタが再割り当てされた後に、前記レジスタの第1のセットのうち前記1つ以上のレジスタにデータを記憶する、ことと、
を行うように構成されている、
プロセッサ。 - 前記第1の条件は、前記第1の計算ユニットが前記1つ以上のレジスタを解放するための前記第1のウェーブフロントの命令を実行することである、
請求項1のプロセッサ。 - 前記第1の計算ユニットは、前記レジスタの第1のセットの全てを解放するための命令を実行するように構成されている、
請求項2のプロセッサ。 - 前記第1のウェーブフロントは、前記第1の計算ユニットが前記命令を実行した後もアクティブなままである、
請求項3のプロセッサ。 - 前記第1の条件は、前記第1の計算ユニットが前記1つ以上のレジスタを解放するために前記制御ユニットにメッセージを送信することである、
請求項1のプロセッサ。 - 前記メッセージは、前記第1のウェーブフロントのレジスタベースアドレス、サイズ及び識別子(ID)を含む、
請求項5のプロセッサ。 - 前記第1の計算ユニットが、所定のレジスタを解放した後に前記所定のレジスタにアクセスするための前記第1のウェーブフロントの命令を実行する場合に、前記制御ユニットは、前記所定のレジスタへのアクセスをブロックするように構成されている、
請求項1のプロセッサ。 - 方法であって、
制御ユニットが、計算ユニット上で開始されている第1のウェーブフロントにレジスタの第1のセットを割り当てることと、
前記第1の計算ユニット上で開始されている第2のウェーブフロントにレジスタの第2のセットを割り当てることと、
前記第1のウェーブフロントの1つ以上のスレッドがアクティブのままである間に第1の条件を検出したことに応じて、前記レジスタの第1のセットのうち1つ以上のレジスタを前記第2のウェーブフロントに再割り当てすることであって、前記第2のウェーブフロントは、前記1つ以上のレジスタが再割り当てされた後に、前記レジスタの第1のセットのうち前記1つ以上のレジスタにデータを記憶する、ことと、を含む、
方法。 - 前記第1の条件は、前記計算ユニットが前記1つ以上のレジスタを解放するための前記第1のウェーブフロントの命令を実行することである、
請求項8の方法。 - 前記計算ユニットが、前記レジスタの第1のセットの全てを解放するための命令を実行することを更に含む、
請求項9の方法。 - 前記第1のウェーブフロントは、前記計算ユニットが前記命令を実行した後もアクティブなままである、
請求項10の方法。 - 前記第1の条件は、前記第1の計算ユニットが前記1つ以上のレジスタを解放するために前記制御ユニットにメッセージを送信することである、
請求項8の方法。 - 前記メッセージは、前記第1のウェーブフロントのレジスタベースアドレス、サイズ及び識別子(ID)を含む、
請求項12の方法。 - 前記方法は、前記計算ユニットが、所定のレジスタを解放した後に前記所定のレジスタにアクセスするための前記第1のウェーブフロントの命令を実行する場合に、前記所定のレジスタへのアクセスをブロックすることを更に含む、
請求項8の方法。 - システムであって、
メモリと、
前記メモリに結合されたプロセッサと、を備え、
前記プロセッサは、
計算ユニット上で開始されている第1のウェーブフロントにレジスタの第1のセットを割り当てることと、
前記計算ユニット上で開始されている第2のウェーブフロントにレジスタの第2のセットを割り当てることと、
前記第1のウェーブフロントの1つ以上のスレッドがアクティブのままである間に第1の条件を検出したことに応じて、前記レジスタの第1のセットのうち1つ以上のレジスタを前記第2のウェーブフロントに再割り当てすることであって、前記第2のウェーブフロントは、前記1つ以上のレジスタに再割り当てされた後に、前記レジスタの第1のセットのうち前記1つ以上のレジスタにデータを記憶する、ことと、
を行うように構成されている、
システム。 - 前記第1の条件は、前記計算ユニットが前記1つ以上のレジスタを解放するための前記第1のウェーブフロントの命令を実行することである、
請求項15のシステム。 - 前記計算ユニットは、前記レジスタの第1のセットの全てを解放するための命令を実行するように構成されている、
請求項16のシステム。 - 前記第1のウェーブフロントは、前記計算ユニットが前記命令を実行した後もアクティブなままである、
請求項17のシステム。 - 前記第1の条件は、前記計算ユニットが前記1つ以上のレジスタを解放するために前記制御ユニットにメッセージを送信することである、
請求項15のシステム。 - 前記メッセージは、前記第1のウェーブフロントのレジスタベースアドレス、サイズ及び識別子(ID)を含む、
請求項19のシステム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/030,852 US20220092725A1 (en) | 2020-09-24 | 2020-09-24 | Register compaction with early release |
US17/030,852 | 2020-09-24 | ||
PCT/US2021/051818 WO2022066954A1 (en) | 2020-09-24 | 2021-09-23 | Register compaction with early release |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2023542935A true JP2023542935A (ja) | 2023-10-12 |
Family
ID=78463903
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2023518224A Pending JP2023542935A (ja) | 2020-09-24 | 2021-09-23 | 早期解放を伴うレジスタ圧縮 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20220092725A1 (ja) |
EP (1) | EP4217853A1 (ja) |
JP (1) | JP2023542935A (ja) |
KR (1) | KR20230070462A (ja) |
CN (1) | CN116324717A (ja) |
WO (1) | WO2022066954A1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117573205A (zh) * | 2023-11-17 | 2024-02-20 | 摩尔线程智能科技(北京)有限责任公司 | 基于simt的寄存器分配方法、装置、设备和存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7971041B2 (en) * | 2008-05-29 | 2011-06-28 | Advanced Micro Devices, Inc. | Method and system for register management |
US8997103B2 (en) * | 2009-09-25 | 2015-03-31 | Nvidia Corporation | N-way memory barrier operation coalescing |
US20110161616A1 (en) * | 2009-12-29 | 2011-06-30 | Nvidia Corporation | On demand register allocation and deallocation for a multithreaded processor |
KR102545176B1 (ko) * | 2015-11-16 | 2023-06-19 | 삼성전자주식회사 | 레지스터 관리 방법 및 장치 |
US10372500B1 (en) * | 2016-02-17 | 2019-08-06 | Apple Inc. | Register allocation system |
US10853904B2 (en) * | 2016-03-24 | 2020-12-01 | Advanced Micro Devices, Inc. | Hierarchical register file at a graphics processing unit |
CN108364251B (zh) * | 2017-01-26 | 2021-06-25 | 超威半导体公司 | 具有通用寄存器资源管理的矢量处理器 |
US11537397B2 (en) * | 2017-03-27 | 2022-12-27 | Advanced Micro Devices, Inc. | Compiler-assisted inter-SIMD-group register sharing |
US10691457B1 (en) * | 2017-12-13 | 2020-06-23 | Apple Inc. | Register allocation using physical register file bypass |
US20200159535A1 (en) * | 2018-11-19 | 2020-05-21 | International Business Machines Corporation | Register deallocation in a processing system |
US11475533B2 (en) * | 2020-05-18 | 2022-10-18 | Qualcomm Incorporated | GPR optimization in a GPU based on a GPR release mechanism |
US11204765B1 (en) * | 2020-08-26 | 2021-12-21 | Qualcomm Incorporated | Deferred GPR allocation for texture/load instruction block |
-
2020
- 2020-09-24 US US17/030,852 patent/US20220092725A1/en active Pending
-
2021
- 2021-09-23 JP JP2023518224A patent/JP2023542935A/ja active Pending
- 2021-09-23 CN CN202180063221.1A patent/CN116324717A/zh active Pending
- 2021-09-23 WO PCT/US2021/051818 patent/WO2022066954A1/en unknown
- 2021-09-23 EP EP21801281.3A patent/EP4217853A1/en active Pending
- 2021-09-23 KR KR1020237010858A patent/KR20230070462A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
WO2022066954A1 (en) | 2022-03-31 |
KR20230070462A (ko) | 2023-05-23 |
CN116324717A (zh) | 2023-06-23 |
US20220092725A1 (en) | 2022-03-24 |
EP4217853A1 (en) | 2023-08-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7087029B2 (ja) | 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 | |
US10026145B2 (en) | Resource sharing on shader processor of GPU | |
CN107851004B (zh) | 用于在图形处理单元gpu上执行指令的方法和装置 | |
US10067710B2 (en) | Detecting buffer overflows in general-purpose GPU applications | |
US11169712B2 (en) | Memory system with latency distribution optimization and an operating method thereof | |
US11934698B2 (en) | Process isolation for a processor-in-memory (“PIM”) device | |
US10642727B1 (en) | Managing migration events performed by a memory controller | |
US11934827B2 (en) | Partition and isolation of a processing-in-memory (PIM) device | |
US7971041B2 (en) | Method and system for register management | |
US20230195645A1 (en) | Virtual partitioning a processor-in-memory ("pim") | |
US10073783B2 (en) | Dual mode local data store | |
JP2023542935A (ja) | 早期解放を伴うレジスタ圧縮 | |
US11182311B2 (en) | Virtualization support device, control method of virtualization support device, and calculation system | |
US9268601B2 (en) | API for launching work on a processor | |
US11875197B2 (en) | Management of thrashing in a GPU | |
CN117859114A (zh) | 用于在高速缓存存储器、本地数据存储装置以及寄存器文件之间共享存储的处理设备和方法 | |
JP7427001B2 (ja) | 行列数学命令セットのタイリングアルゴリズム | |
US7650469B2 (en) | Determining whether a non-running processor has access to an address space | |
US11579922B2 (en) | Dynamic graphical processing unit register allocation | |
EP3343370A1 (en) | Method of processing opencl kernel and computing device therefor | |
Butler et al. | Improving application concurrency on GPUs by managing implicit and explicit synchronizations | |
US20230359392A1 (en) | Non-volatile memory-based storage device, device controller and method thereof | |
US20220413858A1 (en) | Processing device and method of using a register cache | |
KR20230160844A (ko) | 멀티-가속도계 연산 디스패치 |